B
    b‹d2”  ã               @   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   úd/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/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   r	   Új1   s    r   r   c       	         s$  t ˆƒtkrd}n&ˆ ˆ¡‰ˆ ˆ¡}|r8tˆ ˆ¡ƒ‰|r`ˆdk r`dˆ ˆjˆ ˆ|f|Ž S ˆ ˆ¡‰ˆ ˆ¡‰ |r$ˆ |¡‰ˆ ˆ¡rüˆdkrütˆƒ‰ˆj}z8ˆ jd7  _ˆ ‡‡‡‡fdd„t	ˆd ƒD ƒ¡}W d |ˆ_X |ˆ 
d¡ˆ  9 }n$‡ ‡‡fd	d
„}ˆj|ˆˆgf|Ž} nü|sp|rptˆ ƒdk rptˆƒdk rpyˆ ˆˆ¡S  tk
rn   Y nX ˆs¶ˆsŒˆjˆ ˆ }n(ˆ ˆ¡dkr¦ˆˆ }nˆjˆ ˆ }ndˆj}zTˆ jtdtˆ ƒ ˆjƒ7  _ˆjˆddd‰‡ ‡‡fdd
„}ˆj|ˆgf|Ž}W d |ˆ_X |
 }|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)Úprecg      Ð¿T)Úexactg      à?r   r   )Úfmulr   Úpi)r   r   ÚrÚBÚT)ÚMr   r   r   r	   Úh+   s    " Lzbesselj.<locals>.hé
   é   é   g      à?)r   c                sJ   ˆj ˆjˆˆtdˆjˆ  ƒddd}ˆg| gg | d gg | d g|fgS )Nr   )r   T)r   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ÚNotImplementedErrorÚoneÚreÚinfÚminr   )	r   r   r   Ú
derivativeÚkwargsZn_isintÚorigÚvr   r   )r   r   r   r   r"   r   r	   r      sV    




(
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|Ž}n"‡ ‡‡fdd„}ˆj||gf|Ž}|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 )N)r   g      Ð?T)r   g      à?r   r   )r   r   r   )r   r   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 )Ng      à?T)r   r   )r   r   )r   r!   r   )r   r"   r   )r   r   r   r   r	   r   m   s    )r%   Ú
ValueErrorr&   r0   Únanr1   r(   r,   )	r   r   r   r3   r4   r   r   r   r6   r   )r   r   r   r	   ÚbesseliP   s.    





r9   c             K   sJ  |s®|rt ‚|s | j ||  S |  |¡r8| j||  S |  |¡}|d }|  |¡rx|dkrl| j ||  S d||  S |dk r t|  |¡ƒ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|Ž|
 | j| ||f|Ž | S )Ng      à?r   r   r   )r7   r1   Úimr8   r0   r&   r$   ÚfloorÚninfr   Znint_distanceZepsÚcospi_sinpir   )r   r   r   r3   r4   r   ÚqÚmr   r   ÚcosÚsinr   r   r	   Úbesselyt   s6    




rB   c                sX   ˆs
ˆ j S ˆ  ˆ¡}|dk r*‡fdd„}nˆ  j|7  _‡ ‡fdd„}ˆ j||gf|Ž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          	      sB   ˆ j d ˆˆ  ˆ ¡gdddgg g | d d|  gg ddˆ  fgS )Nr   g      à?g      à¿r   r   )r   Úexp)r   )r   r   r   r	   r   ª   s    ")r1   r(   r   r,   )r   r   r   r4   r   r   r   )r   r   r	   Úbesselk˜   s    

rF   c             K   s&   | j ||f|Ž| j| j||f|Ž  S )N)r   ÚjrB   )r   r   r   r4   r   r   r	   Úhankel1¯   s    rH   c             K   s&   | j ||f|Ž| j| j||f|Ž  S )N)r   rG   rB   )r   r   r   r4   r   r   r	   Úhankel2³   s    rI   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|Ž S )Nr   g      à¿T)r   g      à?r   r   )r0   r1   r8   r   rE   Zhyp1f1)r   r   r?   r   r4   r   Úyr   r   r	   Úwhitm·   s    

rK   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|Ž S )Nr   g      à?g      à¿T)r   r   r   )r-   r0   r1   r8   r   rE   Úhyperu)r   r   r?   r   r4   Úgr   rJ   r   r   r	   ÚwhitwÅ   s    

rN   c                s  ˆ   |¡\}}ˆ   |¡\}}ˆ  ˆ¡‰ˆs^ˆ  |¡dkrTˆ  d| g|| d g¡S ˆ jˆ S d| | }ˆ   |¡\}}yRˆ j}	z>ˆ  jd7  _ˆ jdd||f||gdˆ ˆ jd}
|
ˆ|  S |	ˆ _X W n ˆ jk
rà   Y nX ‡ ‡fdd„}ˆ j|||gf|Ž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"   rC   rD   )r   r   r   r	   r   é   s    
,>zhyperu.<locals>.h)	Ú_convert_paramr%   r0   Z	gammaprodr1   r   ZhypsumÚNoConvergencer,   )r   rQ   rR   r   r4   ZatypeZbtypeZbbZbbtyper5   r6   r   r   )r   r   r	   rL   Ó   s(    

$rL   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|ŽS )Nc                sJ   ˆd dˆ   ˆ j¡ g| d dgg | d gdgd| d gˆd d  fgS )Nr   g      à?r   r   g      ø?)Úsqrtr   )r   )r   r   r   r	   r   õ   s    zstruveh.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   Ústruvehð   s    

rV   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|ŽS )Nc                sH   ˆd dˆ   ˆ j¡ g| d dgg | d gdgd| d gˆd d fgS )Nr   g      à?r   r   g      ø?)rU   r   )r   )r   r   r   r	   r   þ   s    zstruvel.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   Ústruvelù   s    

rW   c                s:   ˆ   |¡d }ˆ  ˆ¡‰‡ ‡‡fdd„}ˆ j||gf|Ž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   g      Ð¿)Úmult)Úmpq_1_2r=   Úsquare_exp_arg)r6   rR   Úur?   Úa1Úa2Úb1Úb2ÚcÚsÚAr   r"   rC   rD   )r   Úwhichr   r   r	   r     s    $ z_anger.<locals>.h)rS   r%   r,   )r   rc   r6   r   r4   r   r   )r   rc   r   r	   Ú_anger  s    
rd   c             K   s   t | d||f|ŽS )Nr   )rd   )r   r6   r   r4   r   r   r	   Úangerj  s    re   c             K   s   t | d||f|ŽS )Nr   )rd   )r   r6   r   r4   r   r   r	   Úwebere  s    rf   c                sH   ˆ   |¡d }ˆ   |¡d }ˆ  ˆ¡‰‡ ‡fdd„}ˆ j|||gf|Ž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 )Ng      Ð¿)rX   r   r   r    )rY   rZ   )r[   r6   rR   r"   )r   r   r   r	   r   "  s    ,zlommels1.<locals>.h)rS   r%   r,   )r   r[   r6   r   r4   r   r   )r   r   r	   Úlommels1  s
    
rg   c                sH   ˆ   |¡d }ˆ   |¡d }ˆ  ˆ¡‰‡ ‡fdd„}ˆ j|||gf|Ž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 )Ng      Ð¿)rX   r   r   r    r   )rY   rZ   )r[   r6   rR   r"   rC   rD   ÚT3)r   r   r   r	   r   4  s    PHH
zlommels2.<locals>.h)rS   r%   r,   )r   r[   r6   r   r4   r   r   )r   r   r	   Úlommels2)  s
    
ri   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|Ž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é   g      è¿r   r   g      à?g      ø?r    )r=   )r   r   r@   rA   rC   rD   )r   r   r   r	   r   K  s
    :>zber.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   ÚberF  s    

rk   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|Ž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 )Nrj   g      è?r   r   g      ø?g      à?r    )r=   )r   r   r@   rA   rC   rD   )r   r   r   r	   r   X  s
    >:zbei.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   ÚbeiS  s    

rl   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|Ž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 )	Nrj   g      Ð?g      è?r   r    r   g      à?g      ø?)r=   )
r   r   Úcos1Úsin1Úcos2Úsin2rC   rD   rh   ÚT4)r   r   r   r	   r   e  s    BH@Dzker.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   Úker`  s    

	rr   c                s4   ˆ   |¡}ˆ   ˆ¡‰‡ ‡fdd„}ˆ j||gf|Ž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 )	Nrj   g      è?g      Ð?r   r   r    g      ø?g      à?)r=   )
r   r   rm   rn   ro   rp   rC   rD   rh   rq   )r   r   r   r	   r   u  s    D>@Hzkei.<locals>.h)r%   r,   )r   r   r   r4   r   r   )r   r   r	   Úkeip  s    

	rs   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   Úpr6   )ÚfÚnamer   r	   Ú	f_wrappedƒ  s    zc_memo.<locals>.f_wrapped)Ú__name__)rw   ry   r   )rw   rx   r	   Úc_memo  s    	r{   c             C   s"   d|   d¡|  |  d¡d ¡  S )Nr   é	   r   r    )ÚcbrtÚgammar+   )r   r   r   r	   Ú
_airyai_C1Ž  s    r   c             C   s"   d|   d¡|  |  d¡d ¡  S )Nr   r    r   )r}   r~   r+   )r   r   r   r	   Ú
_airyai_C2’  s    r€   c             C   s$   d|   dd¡|  |  d¡d ¡  S )Nr   r    é   r   )Únthrootr~   r+   )r   r   r   r	   Ú
_airybi_C1–  s    rƒ   c             C   s    |   dd¡|  |  d¡d ¡ S )Nr    r   r   )r‚   r~   r+   )r   r   r   r	   Ú
_airybi_C2š  s    r„   c             C   s:   | j }z$|  dd¡|  d¡ d| j  }W d || _ X |
 S )Nr    z2/3r   )r   Úpowerr~   r   )r   r   r6   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 d || _X |
 | S t‚d S )	NÚZr   r   r   r    r   z2/3z1/6)Úmpq_1_3r   r~   r…   r   rP   r-   r.   )r   r   r   Úntyperc   r   r   r6   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r²d| ˆ  S |sÀˆˆ jksÊˆˆ jkrÒdˆ S tdƒ‚ˆrøtdtdˆ  	ˆ¡ ƒƒ‰nd‰|r|dkr,‡ ‡‡fd	d
„}ˆ j
|g f|ŽS ˆdkrFtˆ ˆ||dƒS ‡ ‡‡fdd
„}ˆ j
||gf|Ž}ˆ  ˆ¡rŠˆ  |¡rŠˆ  |¡}|S n ‡ ‡‡fdd
„}ˆ j
|g f|ŽS d S )Nr   r‡   r   r   r    éþÿÿÿzessential singularity of Ai(z)g      ø?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 )Nrj   g      ø?g      è¿r‹   r    r   r   )r   r   )é   r   r|   g      à?)
r'   r   rE   rU   r   r‚   r   r€   Úmpq_5_3rˆ   )r"   r   r[   ÚCÚC1ÚC2rC   rD   )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   rj   )r   rˆ   Úmpq_2_3Úmpq_4_3)r   r"   Úq13Úq23Úq43r\   r]   r^   r_   Úb3rC   rD   )r   r‘   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 )Nrj   g      ø?g      è¿r‹   r    r   r   )r   r   )é   r   r|   )
r'   r   rE   rU   r   r‚   r   r€   r’   r“   )r"   r   r[   rŽ   r   r   rC   rD   )r   r‘   r   r   r	   r     s       &)r%   rS   Úisnormalr1   r+   r<   r7   r!   r$   r(   r,   rŠ   Ú_is_real_typer&   r'   )r   r   r3   r4   r   r‰   r   r6   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 rŠd| ˆ  S |s®ˆˆ jkrœˆS ˆˆ jkr®dˆ S tdƒ‚ˆrÔtdtdˆ  	ˆ¡ ƒƒ‰nd‰|rl|dkr‡ ‡‡fdd	„}ˆ j
|g f|ŽS ˆdkr"tˆ ˆ||dƒS ‡ ‡‡fd
d	„}ˆ j
||gf|Ž}ˆ  ˆ¡rfˆ  |¡rfˆ  |¡}|S n ‡ ‡‡fdd	„}ˆ j
|g f|ŽS d S )Nr   r‡   r   r   r‹   zessential singularity of Bi(z)g      ø?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|   g      à?r   r   )r   rƒ   r„   r   rˆ   )r"   r   r   rC   rD   )r   r‘   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 )Nr    r|   r   r   rj   )r   rˆ   r’   r“   Zmpq_1_6Zmpq_5_6)r   r"   r”   r•   r–   Zq16Zq56r\   r]   r^   r_   r—   rC   rD   )r   r‘   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   rC   rD   )r   r‘   r   r   r	   r   [  s    )r%   rS   r™   r1   r<   r†   r7   r!   r$   r(   r,   rŠ   rš   r&   r'   )r   r   r3   r4   r   r‰   r   r6   r   )r   r‘   r   r	   Úairybi  sJ    





	

	rœ   Fc       	         sÐ  dd„ }dd„ }t |ƒ}|dk r(tdƒ‚|dk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 )NgUUUUUUå?r   rŒ   r   é0   r   )Útr   r   r	   ÚUh  ó    z_airy_zero.<locals>.Uc             S   s   | d dd| d d    S )NgUUUUUUå?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 )Nr   )r›   )r   )r   r   r	   Ú<lambda>q  r    z_airy_zero.<locals>.<lambda>r    rj   é   Fc                s   ˆ   | d¡S )Nr   )rœ   )r   )r   r   r	   r¡   v  r    Ty              è?c                s   ˆ   | d¡S )Nr   )rœ   )r   )r   r   r	   r¡   }  r    )	r$   r7   Úfindrootr   r›   rœ   Zln2Zexpjpir+   )	r   rc   r   r3   ÚcomplexrŸ   r   rž   ra   r   )r   r	   Ú
_airy_zerof  s2    "*"*$$r¥   c             C   s   t | d||dƒS )Nr   F)r¥   )r   r   r3   r   r   r	   Ú
airyaizero‚  s    r¦   c             C   s   t | d|||ƒS )Nr   )r¥   )r   r   r3   r¤   r   r   r	   Ú
airybizero†  s    r§   c                sl  ˆ   ˆ¡‰ˆ  ˆ¡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¡r„t	‚yªˆ  ˆ¡dkr,ˆdkrÜt
ˆ  ˆ¡ƒˆ jd d k rÜ‡ ‡fdd	„}ˆ j|g ˆ jd
dS ˆdkr,t
ˆ  ˆ ¡ƒdˆ j d d k r,‡ ‡fdd	„}ˆ j|g ˆ jd
dS W n ˆ jk
rF   Y nX ‡ ‡‡‡‡fdd	„}ˆ j|g fˆŽS )Nr   r   zessential singularityg      ø?r3   r    g+‡ÙÎ÷ï?c            	      s,   ˆ j ˆgddgg g dddgg dˆd  ffS )Nr   )r   r    )r   r    r   r|   r    )r   r   )r   r   r   r	   r   ž  s    z_scorer.<locals>.hT)rO   Zforce_seriesr   c            	      s.   ˆ j  ˆgddgg g dddgg dˆd  ffS )Nr   )r   r    )r   r    r   r|   r    )r   r   )r   r   r   r	   r   ¢  s    c                 sž   ˆ j ˆfˆŽd } dˆ j }ˆdkr4| 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   )rb   r   r"   rC   rD   )r   r‘   r4   rc   r   r   r	   r   §  s    
$)r%   Úisinfr1   r<   r7   r!   r$   r(   rt   r.   r-   Úargr   r,   r   rT   )r   r   rc   r4   r   r   )r   r‘   r4   rc   r   r	   Ú_scorerŠ  s6    


  

$.rª   c             K   s   t | |d|ƒS )Nr   )rª   )r   r   r4   r   r   r	   Úscorergiµ  s    r«   c             K   s   t | |d|ƒS )Nr   )rª   )r   r   r4   r   r   r	   Úscorerhi¹  s    r¬   c             C   sÔ   ||f|k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   ÚloggammarG   rE   r   r:   r0   )r   ÚlÚetaÚ_cacheZG3ZG1ZG2r6   r   r   r	   Úcoulombc½  s    "*
r±   Tc       	         sb   ‡ ‡‡fdd„}ˆ j |||gf|Ž}|r^ˆ  |¡s^ˆ  |¡s^ˆ  ˆ¡s^ˆ  ˆ¡dkr^ˆ  |¡}|S )Nc          
      s¬   yzˆ j ˆ }ˆ j|ˆdd}ˆ j|ddd}ˆ  | |¡}|ˆˆ  |¡gd| d dgg g d|  ||  gd|  d g|f}W n* tk
r¤   dgdgg g g g df}Y nX |fS )NT)r   r‹   r   r   r   r   )rG   r   r±   rE   r7   )r®   r¯   ÚjwZjwzZjwz2rŽ   rC   )r   r"   r   r   r	   r   Ð  s    
.zcoulombf.<locals>.hr   )r,   r:   r0   )	r   r®   r¯   r   r"   Úchopr4   r   r6   r   )r   r"   r   r	   ÚcoulombfÊ  s    "
r´   c                sd   ˆˆf|k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              à?g      à?)rG   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¶   r6   r   )r   r¯   r®   r	   Ú_coulomb_chiá  s    "r·   c       	         sv   ˆ   |¡sˆ  |¡}‡ ‡‡fdd„}ˆ j|||gf|Ž}|rrˆ   |¡srˆ   |¡srˆ   ˆ¡srˆ  ˆ¡dkrrˆ  |¡}|S )Nc          
      sN  ˆ   | d ¡r*dgdgg g g g df}|fS |  d }yæˆ  | |¡}ˆ 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S  tk
rH   dgdgg g g g df}|fS X d S )Nr   r   r   r   r‹   )r&   r·   rG   rA   r@   r±   rE   r7   )r®   r¯   rC   rµ   Úchir²   ra   r`   r   r   r[   r   rD   )r   r"   r   r   r	   r   ø  s*    


 
 ""zcoulombg.<locals>.hr   )Z_imr'   r,   )	r   r®   r¯   r   r"   r³   r4   r   r6   r   )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Š|rŠd| d|  d | j  d }|dkr´|r´d| 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}xPtdt|ƒƒD ]>}t|| ƒt||d  ƒk r†||| 7 }nt|| ƒ}qVW |t|ƒd kr¶t|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.
    rj   r   r   r    r¢   éüÿÿÿrŒ   é   iàÿÿÿéS   iÖ  iÃ  r   r˜   iÀÿÿÿi%  iÿX iO2 iuÈ_ éi   éR   r|   i  iß  iÑ  i,† i il"q i»QY g        r   )r   r*   Úlenr-   )r   ÚkindÚprimer6   r?   r[   rR   Ús1Ús2Zs3Zs4Zs5r¶   ra   ÚerrÚir   r   r	   Úmcmahon  s>    
    (4@,8DrÆ   c                s€   |dk rt dƒ‚|d }g ‰g ‰xZˆ  |||¡‰‡ ‡fdd„ˆD ƒ‰‡‡fdd„t|d ƒD ƒ}t|ƒ|krp|S |d }q"W 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   rw   r   r	   ú
<listcomp>J  s    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)r7   Zlinspacer*   r¿   )r   rw   rQ   rR   r   ÚNZok_intervalsr   )r   rw   rÉ   rÊ   r	   Úgeneralized_bisection;  s    rÌ   c             C   s   | j ||dddS )NZillinoisF)ZsolverÚverify)r£   )r   rw   Úabr   r   r	   Úfind_in_intervalQ  s    rÏ   g{®Gáz„?c                s˜  ˆ j }t|ˆ  ˆ¡ˆ  |¡ƒd }zf|ˆ _ ˆ  ˆ¡‰t|ƒ}t|ƒ}ˆdk rVtdƒ‚|dk rftdƒ‚|dk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r2|r2|dkr2ˆdkròˆ jS ˆdkr2dˆ  ˆdˆ  ˆd  ¡ }
tˆ |	|
d d|
 fƒS ||ˆ|f|kr\tˆ |	|||ˆ|f ƒS t	ˆ ||ˆ|ƒ\}
}||k r’tˆ |	|
| |
| fƒS |dkr¦|s¦d}|dkrº|rºd}|dkrÎ|sÎd}|dkrâ|râd}|d }xœt	ˆ ||ˆ|ƒ\}}||k rzt	ˆ ||ˆ|d ƒ\}}t
ˆ |	|d||  |ƒ}x*t|ƒD ]\}}||||ˆ|d f< qDW tˆ |	||d  ƒS |d }qìW W d |ˆ _ X d S )Nr   r   zv cannot be negativer   zm cannot be less than 1)r   r   z prime should lie between 0 and 1c                s   ˆ j ˆ| ddS )Nr   )r3   )r   )r   )r   r6   r   r	   r¡   c  r    zbessel_zero.<locals>.<lambda>c                s   ˆ   ˆ| ¡S )N)r   )r   )r   r6   r   r	   r¡   d  r    r   c                s   ˆ j ˆ| ddS )Nr   )r3   )rB   )r   )r   r6   r   r	   r¡   f  r    c                s   ˆ   ˆ| ¡S )N)rB   )r   )r   r6   r   r	   r¡   g  r    g333333@gÍÌÌÌÌÌü?gš™™™™™é?g       @g      à?)r   r!   r(   r+   r$   r7   ÚzerorU   rÏ   rÆ   rÌ   Ú	enumerate)r   rÀ   rÁ   r6   r?   ZisoltolZ_interval_cacher   Zworkprecrw   r   rÄ   Úlowr   Úr1Úr2Zerr2Z	intervalsr   rÎ   r   )r   r6   r	   Úbessel_zeroT  sf    
  

    
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   r6   r?   r3   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   r6   r?   r3   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   r9   rB   rF   rH   rI   rK   rN   rL   rV   rW   rd   re   rf   rg   ri   rk   rl   rr   rs   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>   sx   B##		
[K
+"'5q