a
    <b2                     @   sF  d dl mZmZ edd Zedd ZededdZedfd	d
ZedgddZedd Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zdd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zd/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Zd9d: Zd;d< Zedhd=d>Z edid?d@Z!djdBdCZ"edkdDdEZ#edldFdGZ$dHdI Z%edJdK Z&edLdM Z'ei fdNdOZ(edmdQdRZ)ei fdSdTZ*edndUdVZ+dWdX Z,dYdZ Z-d[d\ Z.d]i fd^d_Z/edod`daZ0edpdbdcZ1ddS )q   )defundefun_wrappedc                 C   s   |  d|S )zCComputes the Bessel function `J_0(x)`. See :func:`~mpmath.besselj`.    besseljctxx r
   g/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/mpmath/functions/bessel.pyj0   s    r   c                 C   s   |  d|S )zDComputes the Bessel function `J_1(x)`.  See :func:`~mpmath.besselj`.r   r   r   r
   r
   r   j1   s    r   r   c           	         s@  t tu rd}n&}|r8t|rddk rdd j |fi | S  |r6|r
dkr
tj}z> jd7  _fddt	d D }W |_n|_0 |
d  9 }n( fd	d
}j|gfi |}n|s|rt dk rtdk rzW S  ty   Y n0 sȈsj  }n(dkr }nj  }nnj}z^ jtdt  j7  _jddd fdd
}j|gfi |}W |_n|_0 |
 }|S )NTr      c                 3   s:   | ]2}d |   |  d|    V  qdS )r      N)Zbinomialr   ).0k)r   dnzr
   r   	<genexpr>%   s   zbesselj.<locals>.<genexpr>r   r   c                    s   j j j  dddd}d| | d  d| | d  g}djg|d|   d| | gg || d d | d d g|| d g |fg}|S )Nprec      пTexact      ?r   r   fmulr   pir   r   rBTMr   r   r
   r   h+   s    " Lzbesselj.<locals>.h
         r   r   c                    sJ   j jtdj  ddd}g| gg | d gg | d g|fgS )Nr   r   Tr   r   )Zfnegr   maxr   )r   r!   )r%   r   wr
   r   r&   G   s    &)typeintconvertisint_rer   magr   fsumrangempf	hypercombabsZ_besseljNotImplementedErrorZonereinfminr   )	r   r   r   
derivativekwargsZn_isintorigvr&   r
   )r%   r   r   r   r+   r   r   r      sX    

 




(
r   c           	         s    |} s|r t|s0d|  S |rFd|  S |}|dkrfj|  S |dkrzd|  S j|  S  |rʈ |} fdd}j|||gfi |}n& fdd}j||gfi |}|S )Nr   r   c                    s   j j j  dddd}d| | d  d| | d  | d g}djg|d|   d| | g| d g|| d d | d d g||fg}|S )Nr         ?Tr   r   r   r   r   r    r$   r
   r   r&   f   s    "&Hzbesseli.<locals>.hc                    sP   j ddd}j ||tdj  d}|g| gg | d gg | d g|fgS )Nr   Tr   r   r   r   )r   r*   r   )r   r+   r!   r$   r
   r   r&   m   s    )r.   
ValueErrorr/   r8   nanr9   r1   r5   )	r   r   r   r;   r<   r!   r   r&   r>   r
   r$   r   besseliP   s.    





rB   c                 K   sR  |s|rt |s | j ||  S | |r8| j||  S | |}|d }| |rx|dkrl| j ||  S d||  S |dk rt| |d r| j||  S | j||  S |  j	d7  _	| 
|\}}|| j	 k r| j
 }	|  j	d9  _	||	7 }n|dk r|  j	|8  _	| |\}
}| j|||fi ||
 | j| ||fi | | S )Nr   r   r   r'   )r@   r9   imrA   r8   r/   r-   floorninfr   Znint_distanceZepscospi_sinpir   )r   r   r   r;   r<   r!   qmr   r&   cossinr
   r
   r   besselyt   s<    




rK   c                    s\   s
 j S  }|dk r*fdd}n  j|7  _ fdd} j||gfi |S )Nr   c                    sf    d d } dg|  | d g| gg g d|  g|f} dg| |  d g|  gg g d|  g|f}||fS )Nr   r   r
   )r   r!   T1T2r   r
   r   r&      s    (*zbesselk.<locals>.hc              	      s@    j d   gg dg g | d d|  gg dd  fgS )Nr   )r         r   r   r   )r   expr   r   r   r
   r   r&      s     )r9   r1   r   r5   )r   r   r   r<   r%   r&   r
   rR   r   besselk   s    

rS   c                 K   s.   | j ||fi || j| j||fi |  S Nr   jrK   r   r   r	   r<   r
   r
   r   hankel1   s    rX   c                 K   s.   | j ||fi || j| j||fi |  S rT   rU   rW   r
   r
   r   hankel2   s    rY   c                 K   s   |dkr<|  |dkr|S |  |dk r2| j| S | j| S | jd|dd}d| }| |||  | j|| dd|  |fi | S )Nr   rO   Tr   r   r   r   )r8   r9   rA   r   rP   Zhyp1f1)r   r   rH   r   r<   r	   yr
   r
   r   whitm   s    

r[   c                 K   s   |dkr>t | |}|dk r"|S |dkr4| j| S | j| S | jd|dd}d| }| |||  | j|| dd|  |fi | S )Nr   r   rO   Tr   r   r   )r6   r8   r9   rA   r   rP   hyperu)r   r   rH   r   r<   gr	   rZ   r
   r
   r   whitw   s    

r^   c                    s    |\}}  |\}} s^ |dkrT d| g|| d gS  j S d| | }  |\}}z\ j}	zH  jd7  _ jdd||f||gd  jd}
|
|  W |	 _W S |	 _0 W n  jy   Y n0  fdd} j|||gfi |S )	Nr   r'   r   r   r   )maxtermsc                    s|     |} j|gddgg | | d |g| g|gf} j |gddd| gg | d| g| | d gd| gf}||fS )Nr   r   r   )sinpir   )abr+   rL   rM   rR   r
   r   r&      s    
,>zhyperu.<locals>.h)	_convert_paramr.   r8   Z	gammaprodr9   r   ZhypsumNoConvergencer5   )r   ra   rb   r   r<   ZatypeZbtypeZbbZbbtyper=   r>   r&   r
   rR   r   r\      s,    

$r\   c                    s8     |}   fdd} j||gfi |S )Nc                    sJ   d d   j g| d dgg | d gdgd| d gd d  fgS Nr   r   r   r         ?sqrtr   rQ   rR   r
   r   r&      s    zstruveh.<locals>.hr.   r5   r   r   r   r<   r&   r
   rR   r   struveh   s    

rk   c                    s8     |}   fdd} j||gfi |S )Nc                    sH   d d   j g| d dgg | d gdgd| d gd d fgS re   rg   rQ   rR   r
   r   r&      s    zstruvel.<locals>.hri   rj   r
   rR   r   struvel   s    

rl   c                    s>     |d }  fdd} j||gfi |S )Nr   c                    s    j }| | }|d }|| || d| d| f\}}}} |\}}	dkrd| |	g|g }
}dkr| | g|	g }
} jdd}|
ddgg ||gdg||g|f}|dgg ||gdg||g|f}||fS )Nr)   r   r   r   Zmult)mpq_1_2rF   square_exp_arg)r>   rb   urH   a1a2b1b2csAr"   r+   rL   rM   r   whichr   r
   r   r&     s    $ z_anger.<locals>.hrc   r.   r5   )r   ry   r>   r   r<   r&   r
   rx   r   _anger  s    
r{   c                 K   s   t | d||fi |S Nr   r{   r   r>   r   r<   r
   r
   r   angerj  s    r   c                 K   s   t | d||fi |S Nr   r}   r~   r
   r
   r   webere  s    r   c                    sL     |d }  |d }  fdd} j|||gfi |S )Nr   c              	      sf    j } jdd}| | d | | d gdd| d gg g dg|| | d  || | d  g|ffS )Nr   rm   r   r   r)   rn   ro   )rp   r>   rb   r+   rR   r
   r   r&   "  s
    , zlommels1.<locals>.hrz   r   rp   r>   r   r<   r&   r
   rR   r   lommels1  s
    
r   c                    sL     |d }  |d }  fdd} j|||gfi |S )Nr   c              	      s    j } jdd}| | d | | d gdd| d gg g dg|| | d  || | d  g|f}dg| | d | g||| | d  g|||  d  gg d| g|f}dg| | d |g| || | d  g|d|  |  gg d| g|f}|||fS )Nr   rm   r   r   r)   r   r   )rp   r>   rb   r+   rL   rM   T3rR   r
   r   r&   4  s    PHH
zlommels2.<locals>.hrz   r   r
   rR   r   lommels2)  s
    
r   c                    s8     |}   fdd} j||gfi |S )Nc              	      s   d d  }  d|  \}}|d gd| gg | d gg dd| d  d|  d g|f}|d gd| d gg | d gg dd| d  d|  d g|f}||fS )N         r   r   r   rf   r)   rF   r   r!   rI   rJ   rL   rM   rR   r
   r   r&   K  s
    :>zber.<locals>.hri   rj   r
   rR   r   berF  s    

r   c                    s8     |}   fdd} j||gfi |S )Nc              	      s   d d  }  d|  \}}|d gd| d gg | d gg dd| d  d|  d g|f}|d gd| gg | d gg dd| d  d|  d g|f}||fS )Nr         ?r   r   rf   r   r)   r   r   rR   r
   r   r&   X  s
    >:zbei.<locals>.hri   rj   r
   rR   r   beiS  s    

r   c                    s8     |}   fdd} j||gfi |S )Nc           
   
      sL  d d  }  d|  \}}  d|  \}}dd| g|  d | dg|  gg g ddd|   d| d  g|f}d| g|  d d|  dg|  d gg g ddd|   d| d  g|f}dd| g| d |  dg| gg g ddd|   dd|   g|f}d| g| d d|  dg| d gg g ddd|   dd|   g|f}	||||	fS )	Nr   r?   r   r   r)   r   r   rf   r   
r   r!   Zcos1Zsin1Zcos2Zsin2rL   rM   r   ZT4rR   r
   r   r&   e  s    BH@Dzker.<locals>.hri   rj   r
   rR   r   ker`  s    

	r   c                    s8     |}   fdd} j||gfi |S )Nc           
   
      sH  d d  }  d|  \}}  d|  \}}| dgd| d d|  g| d gg g ddd|   dd|   g|f}| dgd| d |  g| gg g ddd|   dd|   g|f}| dgd|  d | g|  gg g dd| d  d| d  g|f}| dgd|  d | d g|  d gg g dd| d  d| d  g|f}	||||	fS )	Nr   r   r?   r   r   r)   rf   r   r   r   rR   r
   r   r&   u  s    D>@Hzkei.<locals>.hri   rj   r
   rR   r   keip  s    

	r   c                    s    j  fdd}|S )Nc                    sJ   | j }| j}|d\}}||kr*|
 S | | f|< | d S d S )N)r   r   r   )Z_misc_const_cacher   get)r   cacher   pr>   fnamer
   r   	f_wrapped  s    zc_memo.<locals>.f_wrapped)__name__)r   r   r
   r   r   c_memo  s    	r   c                 C   s"   d|  d| | dd   S )Nr   	   r   r)   Zcbrtgammar4   r   r
   r
   r   
_airyai_C1  s    r   c                 C   s"   d|  d| | dd   S )Nr   r)   r   r   r   r
   r
   r   
_airyai_C2  s    r   c                 C   s$   d|  dd| | dd   S )Nr   r)      r   nthrootr   r4   r   r
   r
   r   
_airybi_C1  s    r   c                 C   s    |  dd| | dd  S )Nr)   r   r   r   r   r
   r
   r   
_airybi_C2  s    r   c                 C   s@   | j }z*| dd| d d| j  }W || _ n|| _ 0 |
 S )Nr)   2/3r   )r   powerr   r   )r   r   r>   r
   r
   r   _airybi_n2_inf  s
    "r   c                 C   s   |dkr|dk r|S | j }| j}z|  jd7  _| |d | | d||  | j }|dkr|| d|d  | 9 }|| dd }n.|t| d|d  | 9 }|| dd }W || _n|| _0 |
 | S td S )	NZr   r'   r   r)   r   r   z1/6)mpq_1_3r   r   r   r   r`   r6   r7   )r   r   r   ntypery   r!   r   r>   r
   r
   r   _airyderiv_0  s     (
r   c                    s    |r |\}}nd} sڈr|r|dkr|dkr jkrd dd d  S  jkr dd d  S |dk r jkrS  jkrd|   S |s jksʈ jkrd S tdrtdtd 	 nd|r|dkr0 fd	d
} j
|g fi |S dkrJt ||dS  fdd
} j
||gfi |} r |r |}|S n$ fdd
} j
|g fi |S d S )Nr   r   r   r   r)   zessential singularity of Ai(z)rf   c                     s
    dkr  j7  _d } d|  }d|  d }  j8  _ | d  j   d }|gdgg g dd	gg |ffS   j7  _d d
 }   j8  _t d }t }|gddgg g g  jg| f}|gdgg g g  j	g| f}||fS d S )Nr   rf   r   r   r)   r   r   )r   r   )   r   r   r   )
r0   r   rP   rh   r   r   r   r   mpq_5_3r   r+   r!   rp   CC1C2rL   rM   r   	extraprecr   r
   r   r&     s    (zairyai.<locals>.hc                    s    j 7  _ d d }  j 8  _  j j j  }}}|}d}d|  | }d|  | }d| |  }	dg| | |  g|g|||	g||g|||	g|f}
|}d|  | }d| |  }d|  | }	d g| | |  dg|g|||	g||g|||	g|f}|
|fS Nr)   r   r   r   r   )r   r   mpq_2_3mpq_4_3)r   r+   q13q23q43rq   rr   rs   rt   b3rL   rM   r   r
   r   r&     s    ,($c                     s    dkr  j7  _d } d|  }d|  d }  j8  _ |d  j  d  }|gdgg g dd	gg |ffS   j7  _d d
 }   j8  _t }t }|gdgg g g  jg| f}| gdgg g g  j	g| f}||fS d S )Nr   rf   r   r   r)   r   r   )r   r   )   r   r   )
r0   r   rP   rh   r   r   r   r   r   r   r   r   r
   r   r&     s    &)r.   rc   isnormalr9   r4   rE   r@   r*   r-   r1   r5   r   _is_real_typer/   r0   r   r   r;   r<   r   r   r&   r>   r
   r   r   airyai  sF    







r   c                    s    |r |\}}nd} sr|r|dkr jkrJS  jkr|dkrdd S |dkrtt S |dk rd|   S |s jkrS  jkrd S tdrtdtd 	 nd|rt|dkr fdd	} j
|g fi |S dkr&t ||dS  fd
d	} j
||gfi |} rn |rn |}|S n$ fdd	} j
|g fi |S d S )Nr   r   r   r   r   zessential singularity of Bi(z)rf   c                     s|     j 7  _ d d }   j 8  _ t d }t }|gddgg g g  jg| f}|gdgg g g  jg| f}||fS )Nr)   r   r   r   r   )r   r   r   r   r   r+   r   r   rL   rM   r   r
   r   r&   ;  s    zairybi.<locals>.hc                    s    j 7  _ d d }  j 8  _  j j j  }}} j} j}|}d}d|  | }	d|  | }
d| |  }dg| | |  g|g|	|
|g||g|	|
|g|f}|}d|  | }	d| |  }
d|  | }dg| | d|  g|g|	|
|g||g|	|
|g|f}||fS r   )r   r   r   r   Zmpq_1_6Zmpq_5_6)r   r+   r   r   r   Zq16Zq56rq   rr   rs   rt   r   rL   rM   r   r
   r   r&   H  s    ,( c                     sx     j 7  _ d d }   j 8  _ t }t }|gdgg g g  jg| f}| gdgg g g  jg| f}||fS )Nr)   r   r   )r   r   r   r   r   r   r   r
   r   r&   [  s    )r.   rc   r   r9   rE   r   r@   r*   r-   r1   r5   r   r   r/   r0   r   r
   r   r   airybi  sJ    





	

	r   Fc           	         s  dd }dd }t |}|dk r(td|dvr8td|d	kr|rt  fd
d|d j d| d  d  S   j|d j d| d  d  S |dkr|dkr|r  fdd|d j d| d  d  S   j|d j d| d  d  S |dkr|dkr|r~d j d| d  d d j  }  dd || }  fdd|S d j d| d  d d j  }  dd || }  j|S d S )Nc                 S   s   | d dd| d d    S )NUUUUUU?r   r   r   0   r
   tr
   r
   r   Uh      z_airy_zero.<locals>.Uc                 S   s   | d dd| d d    S )Nr   r   r   r   r   r
   r   r
   r
   r   r#   i  r   z_airy_zero.<locals>.Tr   zk cannot be less than 1r   r   z%Derivative should lie between 0 and 1r   c                    s     | dS r   )r   rN   r   r
   r   <lambda>q  r   z_airy_zero.<locals>.<lambda>r)   r      Fc                    s     | dS r   r   rN   r   r
   r   r   v  r   Ty              ?c                    s     | dS r   r   rN   r   r
   r   r   }  r   )	r-   r@   findrootr   r   r   Zln2Zexpjpir4   )	r   ry   r   r;   complexr   r#   r   rv   r
   r   r   
_airy_zerof  s6    **$$r   c                 C   s   t | d||dS )Nr   Fr   )r   r   r;   r
   r
   r   
airyaizero  s    r   c                 C   s   t | d|||S r   r   )r   r   r;   r   r
   r
   r   
airybizero  s    r   c                    sr     rT jkr:dkr.d S dkr:S  jkrLd S tdrrtdtd  nddrt	z dkr0dkrt
  jd d k rއ fdd	} j|g  jd
dW S dkr0t
  d j d d k r0 fdd	} j|g  jd
dW S W n  jyH   Y n0  fdd	} j|g fi S )Nr   r   zessential singularityrf   r;   r)   g+?c                	      s*    j gddgg g g dg dd  ffS Nr   ))r   r)   )r   r)   r   r   r)   r   r
   rR   r
   r   r&     s    z_scorer.<locals>.hT)r_   Zforce_seriesr   c                	      s,    j  gddgg g g dg dd  ffS r   r   r
   rR   r
   r   r&     s    c                     s    j fi d } d j }dkr8| d9 } |d9 }  j7  _d d }  j8  _| gdgg g g g df}|gddgg g dg j jg|f}||fS )Nr)   r   r   r   r   r   r   )r   r   r   r   r   )rw   r"   r+   rL   rM   r   r   r<   ry   r   r
   r   r&     s    
$)r.   isinfr9   rE   r@   r*   r-   r1   r   r7   r6   argr   r5   r   rd   )r   r   ry   r<   r&   r
   r   r   _scorer  s2    




$.r   c                 K   s   t | |d|S r|   r   r   r   r<   r
   r
   r   scorergi  s    r   c                 K   s   t | |d|S r   r   r   r
   r
   r   scorerhi  s    r   c                 C   s   ||f|v r4|||f d | j kr4|||f d 
 S | d| d }| d| | j|  }| d| | j|  }d| | | j | | | d |  }| |s| |s| |}| j |f|||f< |S )Nr   r   r   )r   loggammarV   rP   r   rC   r8   )r   leta_cacheZG3ZG1ZG2r>   r
   r
   r   coulombc  s    "*
r   Tc           	         sf    fdd} j |||gfi |}|rb |sb |sb sb dkrb |}|S )Nc              
      s   zz j  } j|dd} j|ddd} | |}| |gd| d dgg g d|  ||  gd|  d g|f}W n( ty   dgdgg g g g df}Y n0 |fS )NTr   r   r   r   r   r   )rV   r   r   rP   r@   )r   r   jwZjwzZjwz2r   rL   r   r+   r   r
   r   r&     s    
.zcoulombf.<locals>.hr   )r5   rC   r8   	r   r   r   r   r+   Zchopr<   r&   r>   r
   r   r   coulombf  s    "
r   c                    sd   f|v r2|f d  j kr2|f d S  fdd} |d} j |f|f< |S )Nr   r   c                     sv    d }  j  } d | d  d | d  d|  | d  d|  | d d   j gS )Nr   y             y              ?r   )rV   r   r   )l2Zjetar   r   r   r
   r   terms  s    

z_coulomb_chi.<locals>.terms)r   Zsum_accurately)r   r   r   r   r   r>   r
   r   r   _coulomb_chi  s    "r   c           	         sz     |s |} fdd} j|||gfi |}|rv  |sv  |sv  sv dkrv |}|S )Nc              
      sR    | d r*dgdgg g g g df}|fS |  d }z | |} j } |} |} | |} ||}	 | }
d|  }|||
|gdd| d ddgg g d|  ||  gd|  d g|f}| |	|
gdd|d dgg g d| ||  gd| d g|f}||fW S  tyL   dgdgg g g g df}|f Y S 0 d S )Nr   r   r   r   r   )r/   r   rV   rJ   rI   r   rP   r@   )r   r   rL   r   chir   rv   ru   r   r   rp   r	   rM   r   r
   r   r&     s,    

 
zcoulombg.<locals>.hr   )Z_imr0   r5   r   r
   r   r   coulombg  s    

"
r   c                 C   s  d|d  }|dkr6|s6d| d|  d | j  d }|dkr`|s`d| d|  d | j  d }|dkr|rd| d|  d | j  d }|dkr|rd| d|  d | j  d }|sl|}|d  d|  }d|d  d| d  dd| d   }	d	|d  d
|d  d|  d  dd| d   }
d|d  d|d  d|d   d|  d  dd| d   }|r0|}|d  d|  }dd|d  d|  d  dd| d   }	d	d
|d  d|d   d|  d  dd| d   }
dd|d  d|d   d|d   d|  d  dd| d   }|||	|
|g}|}d}tdt|D ]>}t|| t||d  k r||| 7 }nt|| }qT|t|d krt|d }||fS ) aj  
    Computes an estimate for the location of the Bessel function zero
    j_{v,m}, y_{v,m}, j'_{v,m} or y'_{v,m} using McMahon's asymptotic
    expansion (Abramowitz & Stegun 9.5.12-13, DLMF 20.21(vi)).

    Returns (r,err) where r is the estimated location of the root
    and err is a positive number estimating the error of the
    asymptotic expansion.
    r   r   r   r)   r   r      iS   i  i  r   r   ii%  iX iO2 iu_ i   R   r   i  i  i  i, i il"q iQY g        r   )r   r3   lenr6   )r   kindprimer>   rH   rp   rb   s1s2Zs3Zs4Zs5r   rv   errir
   r
   r   mcmahon  s6    
****(4@,8Dr   c                    s|   |dk rt d|d }g g  ||| fddD fddt|d D }t||krn|S |d }q dS )z
    Given f known to have exactly n simple roots within [a,b],
    return a list of n intervals isolating the roots
    and having opposite signs at the endpoints.

    TODO: this can be optimized, e.g. by reusing evaluation points.
    r   zn cannot be less than 1c                    s   g | ]}  |qS r
   )sign)r   r	   )r   r   r
   r   
<listcomp>J  r   z)generalized_bisection.<locals>.<listcomp>c                    s8   g | ]0}| |d    dkr |  |d   fqS )r   r   r
   )r   r   )pointssignsr
   r   r   K  s   r   N)r@   Zlinspacer3   r   )r   r   ra   rb   r   NZok_intervalsr
   )r   r   r   r   r   generalized_bisection;  s    r   c                 C   s   | j ||dddS )NZillinoisF)Zsolververify)r   )r   r   abr
   r
   r   find_in_intervalQ  s    r  g{Gz?c                    s   j }t|  |d }z| _  t|}t|}dk rVtd|dk rftd|dvrvtd|dkr|r fdd	}	n fd
d	}	|dkr|r fdd	}	n fdd	}	|dkrB|rB|dkrBdkr jW | _ S dkrBd d  d   }
t |	|
d d|
 fW | _ S |||f|v rtt |	||||f W | _ S t	 |||\}
}||k rt |	|
| |
| fW | _ S |dkr|sd}|dkr|rd}|dkr|sd}|dkr|rd}|d }t	 |||\}}||k rt	 |||d \}}t
 |	|d||  |}t|D ]\}}|||||d f< q`t |	||d  W | _ S |d }q
W | _ n| _ 0 d S )Nr'   r   zv cannot be negativer   zm cannot be less than 1r   z prime should lie between 0 and 1c                    s    j | ddS Nr   )r;   r   r	   r   r>   r
   r   r   c  r   zbessel_zero.<locals>.<lambda>c                    s     | S rT   r   r  r  r
   r   r   d  r   r   c                    s    j | ddS r  rK   r  r  r
   r   r   f  r   c                    s     | S rT   r  r  r  r
   r   r   g  r   g333333@g?g?g       @r   )r   r*   r1   r4   r-   r@   Zzerorh   r  r   r   	enumerate)r   r   r   r>   rH   ZisoltolZ_interval_cacher   Zworkprecr   r!   r   lowr   Zr1Zr2Zerr2Z	intervalsr   r   r
   r  r   bessel_zeroT  sl    



r  c                 C   s   t | d|||
 S )a  
    For a real order `\nu \ge 0` and a positive integer `m`, returns
    `j_{\nu,m}`, the `m`-th positive zero of the Bessel function of the
    first kind `J_{\nu}(z)` (see :func:`~mpmath.besselj`). Alternatively,
    with *derivative=1*, gives the first nonnegative simple zero
    `j'_{\nu,m}` of `J'_{\nu}(z)`.

    The indexing convention is that used by Abramowitz & Stegun
    and the DLMF. Note the special case `j'_{0,1} = 0`, while all other
    zeros are positive. In effect, only simple zeros are counted
    (all zeros of Bessel functions are simple except possibly `z = 0`)
    and `j_{\nu,m}` becomes a monotonic function of both `\nu`
    and `m`.

    The zeros are interlaced according to the inequalities

    .. math ::

        j'_{\nu,k} < j_{\nu,k} < j'_{\nu,k+1}

        j_{\nu,1} < j_{\nu+1,2} < j_{\nu,2} < j_{\nu+1,2} < j_{\nu,3} < \cdots

    **Examples**

    Initial zeros of the Bessel functions `J_0(z), J_1(z), J_2(z)`::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> besseljzero(0,1); besseljzero(0,2); besseljzero(0,3)
        2.404825557695772768621632
        5.520078110286310649596604
        8.653727912911012216954199
        >>> besseljzero(1,1); besseljzero(1,2); besseljzero(1,3)
        3.831705970207512315614436
        7.01558666981561875353705
        10.17346813506272207718571
        >>> besseljzero(2,1); besseljzero(2,2); besseljzero(2,3)
        5.135622301840682556301402
        8.417244140399864857783614
        11.61984117214905942709415

    Initial zeros of `J'_0(z), J'_1(z), J'_2(z)`::

        0.0
        3.831705970207512315614436
        7.01558666981561875353705
        >>> besseljzero(1,1,1); besseljzero(1,2,1); besseljzero(1,3,1)
        1.84118378134065930264363
        5.331442773525032636884016
        8.536316366346285834358961
        >>> besseljzero(2,1,1); besseljzero(2,2,1); besseljzero(2,3,1)
        3.054236928227140322755932
        6.706133194158459146634394
        9.969467823087595793179143

    Zeros with large index::

        >>> besseljzero(0,100); besseljzero(0,1000); besseljzero(0,10000)
        313.3742660775278447196902
        3140.807295225078628895545
        31415.14114171350798533666
        >>> besseljzero(5,100); besseljzero(5,1000); besseljzero(5,10000)
        321.1893195676003157339222
        3148.657306813047523500494
        31422.9947255486291798943
        >>> besseljzero(0,100,1); besseljzero(0,1000,1); besseljzero(0,10000,1)
        311.8018681873704508125112
        3139.236339643802482833973
        31413.57032947022399485808

    Zeros of functions with large order::

        >>> besseljzero(50,1)
        57.11689916011917411936228
        >>> besseljzero(50,2)
        62.80769876483536093435393
        >>> besseljzero(50,100)
        388.6936600656058834640981
        >>> besseljzero(50,1,1)
        52.99764038731665010944037
        >>> besseljzero(50,2,1)
        60.02631933279942589882363
        >>> besseljzero(50,100,1)
        387.1083151608726181086283

    Zeros of functions with fractional order::

        >>> besseljzero(0.5,1); besseljzero(1.5,1); besseljzero(2.25,4)
        3.141592653589793238462643
        4.493409457909064175307881
        15.15657692957458622921634

    Both `J_{\nu}(z)` and `J'_{\nu}(z)` can be expressed as infinite
    products over their zeros::

        >>> v,z = 2, mpf(1)
        >>> (z/2)**v/gamma(v+1) * \
        ...     nprod(lambda k: 1-(z/besseljzero(v,k))**2, [1,inf])
        ...
        0.1149034849319004804696469
        >>> besselj(v,z)
        0.1149034849319004804696469
        >>> (z/2)**(v-1)/2/gamma(v) * \
        ...     nprod(lambda k: 1-(z/besseljzero(v,k,1))**2, [1,inf])
        ...
        0.2102436158811325550203884
        >>> besselj(v,z,1)
        0.2102436158811325550203884

    r   r  r   r>   rH   r;   r
   r
   r   besseljzero  s    pr  c                 C   s   t | d|||
 S )a  
    For a real order `\nu \ge 0` and a positive integer `m`, returns
    `y_{\nu,m}`, the `m`-th positive zero of the Bessel function of the
    second kind `Y_{\nu}(z)` (see :func:`~mpmath.bessely`). Alternatively,
    with *derivative=1*, gives the first positive zero `y'_{\nu,m}` of
    `Y'_{\nu}(z)`.

    The zeros are interlaced according to the inequalities

    .. math ::

        y_{\nu,k} < y'_{\nu,k} < y_{\nu,k+1}

        y_{\nu,1} < y_{\nu+1,2} < y_{\nu,2} < y_{\nu+1,2} < y_{\nu,3} < \cdots

    **Examples**

    Initial zeros of the Bessel functions `Y_0(z), Y_1(z), Y_2(z)`::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> besselyzero(0,1); besselyzero(0,2); besselyzero(0,3)
        0.8935769662791675215848871
        3.957678419314857868375677
        7.086051060301772697623625
        >>> besselyzero(1,1); besselyzero(1,2); besselyzero(1,3)
        2.197141326031017035149034
        5.429681040794135132772005
        8.596005868331168926429606
        >>> besselyzero(2,1); besselyzero(2,2); besselyzero(2,3)
        3.384241767149593472701426
        6.793807513268267538291167
        10.02347797936003797850539

    Initial zeros of `Y'_0(z), Y'_1(z), Y'_2(z)`::

        >>> besselyzero(0,1,1); besselyzero(0,2,1); besselyzero(0,3,1)
        2.197141326031017035149034
        5.429681040794135132772005
        8.596005868331168926429606
        >>> besselyzero(1,1,1); besselyzero(1,2,1); besselyzero(1,3,1)
        3.683022856585177699898967
        6.941499953654175655751944
        10.12340465543661307978775
        >>> besselyzero(2,1,1); besselyzero(2,2,1); besselyzero(2,3,1)
        5.002582931446063945200176
        8.350724701413079526349714
        11.57419546521764654624265

    Zeros with large index::

        >>> besselyzero(0,100); besselyzero(0,1000); besselyzero(0,10000)
        311.8034717601871549333419
        3139.236498918198006794026
        31413.57034538691205229188
        >>> besselyzero(5,100); besselyzero(5,1000); besselyzero(5,10000)
        319.6183338562782156235062
        3147.086508524556404473186
        31421.42392920214673402828
        >>> besselyzero(0,100,1); besselyzero(0,1000,1); besselyzero(0,10000,1)
        313.3726705426359345050449
        3140.807136030340213610065
        31415.14112579761578220175

    Zeros of functions with large order::

        >>> besselyzero(50,1)
        53.50285882040036394680237
        >>> besselyzero(50,2)
        60.11244442774058114686022
        >>> besselyzero(50,100)
        387.1096509824943957706835
        >>> besselyzero(50,1,1)
        56.96290427516751320063605
        >>> besselyzero(50,2,1)
        62.74888166945933944036623
        >>> besselyzero(50,100,1)
        388.6923300548309258355475

    Zeros of functions with fractional order::

        >>> besselyzero(0.5,1); besselyzero(1.5,1); besselyzero(2.25,4)
        1.570796326794896619231322
        2.798386045783887136720249
        13.56721208770735123376018

    r   r	  r
  r
   r
   r   besselyzero  s    Yr  N)r   )r   )r   )r   )r   )F)r   )r   F)r   T)r   T)r   )r   )2Z	functionsr   r   r   r   r   rB   rK   rS   rX   rY   r[   r^   r\   rk   rl   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
   r
   r
   r   <module>   s   

B##




















[K
+

"'5q