B
    bdH              *   @   s`  d Z ddlZddlZddlZdZdZdZdZdZdZ	d	Z
d
ZdZdZdZdZdd Zdd Zdd Zyed dd Zdd ZW n$ eefk
r   ejZejZY nX eejdd ZeeejZeeejZeejejZeejejZeejejZeejejZeejejZeejejZeej ej Z eej!ej!Z!eej"ej"Z"eej#ej#Z#eej$dd Z$eej%dd Z%edd dd Z&ed d d!d Z'd"d# Z(d$d% Z)d&d' Z*d(d) Z+d*d+ Z,ee*e,Z-ee)e+Z.d,d- Z/d.d/ Z0d0Z1e1 Z2e1e1 Z3d1Z4e1d2d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEfZ5e6e5dF Z7dGZ8dHZ9dIdJ Z:dKdL Z;ee:e;Z<dMdN Z=dOdP Z>dQdR Z?dSdT Z@dUdVdWdXdYdZdUd[d\d]g
ZAd^d_ ZBd`da ZCeeBeCZDdbdcdddedfdgdhdidjg	dddk ZEd2dldmdndodpdqdrdsdtg
dddk ZFdudv ZGdwdx ZHdydz ZId{d| ZJd}d~ ZKdd ZLddddddddddddddddddddddddddddddddddddddddddg*ZMdZNdddZOdddZPdddZQdd ZRdddddddddddddddddddddddddddgZSdddddddddg	dddk ZTd2ddddddddg	dddk ZUdddddddddddgZVdddddddddddgZWdd ZXdS )z
This module complements the math and cmath builtin modules by providing
fast machine precision versions of some additional functions (gamma, ...)
and wrapping math/cmath functions so that they can be called with either
real or complex arguments.
    Ng-DT!	@giW
@g;f?gw@gw?g9B.?gUk@gox?g]O?gm<B{@g!;?gHP?c                s    fdd}j |_ |S )Nc          	      sb   t | tkr| S t | tkr( | S yt| } | S  ttfk
r\   t| }  | S X d S )N)typefloatcomplex	TypeError
ValueError)xkwargs)	f_complexf_real Y/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/mpmath/math2.pyf   s    z_mathfun_real.<locals>.f)__name__)r
   r	   r   r   )r	   r
   r   _mathfun_real   s    r   c                s    fdd}j |_ |S )Nc          	      sF   t | tkr | S yt| S  ttfk
r@    t| S X d S )N)r   r   r   r   r   )r   r   )r	   r
   r   r   r   +   s    z_mathfun.<locals>.f)r   )r
   r	   r   r   )r	   r
   r   _mathfun*   s    r   c                s    fdd}j |_ |S )Nc           	      s>   ydd | D  S  t tfk
r8    dd | D  S X d S )Nc             s   s   | ]}t |V  qd S )N)r   ).0r   r   r   r   	<genexpr>8   s    z(_mathfun_n.<locals>.f.<locals>.<genexpr>c             s   s   | ]}t |V  qd S )N)r   )r   r   r   r   r   r   :   s    )r   r   )argsr   )r	   r
   r   r   r   6   s    z_mathfun_n.<locals>.f)r   )r
   r	   r   r   )r	   r
   r   
_mathfun_n5   s    r   g       c             C   s   | dkrt dt| S )Ng        zmath domain error)r   mathlog)r   r   r   r   math_logB   s    r   c             C   s   | dk rt dt| S )Ng        zmath domain error)r   r   sqrt)r   r   r   r   	math_sqrtF   s    r   c             C   s   t | | S )N)r   )r   yr   r   r   <lambda>N       r   c             C   s   t t| jt| jS )N)r   r   floorrealimag)zr   r   r   r   `   r   c             C   s   t t| jt| jS )N)r   r   ceilr   r   )r    r   r   r   r   b   r   c             C   s   t | t | fS )N)r   cossin)r   r   r   r   r   e   r   c             C   s   t | t | fS )N)cmathr"   r#   )r    r   r   r   r   f   r   c             C   s   | d S )NgUUUUUU?r   )r   r   r   r   r   h   r   c             C   s   | d S )NgUUUUUU?r   )r    r   r   r   r   h   r   c          	   C   s:   d| }yt | | S  ttfk
r4   t| | S X d S )Ng      ?)r   r   r   r   )r   nrr   r   r   nthrootj   s
    r'   c             C   s   | dk rt |   S t| d\}}|t9 }|d; }|dkrDt|S |dkrVt|S |dkrjt| S |dkr~t| S d S )Nr   g      ?            )_sinpi_realdivmodpir   r#   r"   )r   r%   r&   r   r   r   r,   q   s     
 
  r,   c             C   s|   | dk r|  } t | d\}}|t9 }|d; }|dkr>t|S |dkrRt| S |dkrft| S |dkrxt|S d S )Nr   g      ?r(   r)   r*   r+   )r-   r.   r   r"   r#   )r   r%   r&   r   r   r   _cospi_real|   s     
   r/   c             C   s   | j dk rt|   S t| j d\}}tt|| j } |d; }|dkrPt| S |dkrbt| S |dkrvt|  S |dkrt|  S d S )Nr   g      ?r(   r)   r*   r+   )	r   _sinpi_complexr-   r.   r   r   r$   r#   r"   )r    r%   r&   r   r   r   r0      s    
 
 
  r0   c             C   s   | j dk r|  } t| j d\}}tt|| j } |d; }|dkrJt| S |dkr^t|  S |dkrrt|  S |dkrt| S d S )Nr   g      ?r(   r)   r*   r+   )r   r-   r.   r   r   r$   r"   r#   )r    r%   r&   r   r   r   _cospi_complex   s    
 
   r1   c             C   sP   yt | t|  S  tk
rJ   t| jdkr2dS t| jdk rDdS  Y nX d S )N
   y              ?y             )sinpicospiOverflowErrorr   r   )r   r   r   r   tanpi   s    r6   c             C   sP   yt | t|  S  tk
rJ   t| jdkr2dS t| jdk rDdS  Y nX d S )Nr2   y             y              ?)r4   r3   r5   r   r   )r   r   r   r   cotpi   s    r7   g      g      <g      ?g       @g      @g      8@g      ^@g     @g     @g     @g     &Ag    KAg    Ag    Ag   2Ag   (;L4Bg  uwsBg  uwBg  7Bg  s6Cg h0{Cg ZACr)      )	gP?gö)$@gԎgشa@g]/Qfg)@gU(+gO2NNQ>g?P5>c             C   s   t | }|| kr0|dkr td|tkr0t| S | dk rPtt| td|    S | d8 } td }x*tdt	d D ]}|t| | |  7 }qpW | t	 d }d|| d   t
|  | S d S )Nr   zgamma function poleg      ?r)   g      ?r*   g'@)intZeroDivisionError_max_exact_gamma_exact_gammar.   r,   _gamma_real
_lanczos_prange
_lanczos_gr   exp)r   _intxr&   itr   r   r   r=      s    r=   c             C   s   | j stt| jS | jdk r6tt| td|    S | d8 } td }x*tdt	d D ]}|t| | |  7 }qVW | t	 d }d|| d   t
|  | S d S )Ng      ?r)   g      ?r   r*   g'@)r   r   r=   r   r.   r0   _gamma_complexr>   r?   r@   r$   rA   )r   r&   rC   rD   r   r   r   rE      s    
rE   c             C   s*   ydt |  S  tk
r$   | d S X d S )Ng      ?g        )gammar:   )r   r   r   r   rgamma   s    rG   c             C   s   t | d S )Ng      ?)rF   )r   r   r   r   	factorial   s    rH   c             C   s(   t | tkrtd| S t| j| jS )Ng        )r   r   r   atan2r   r   )r   r   r   r   arg   s    rJ   c          	   C   s\  t | ttfkr>yt| } W n  ttfk
r<   t| } Y nX y| j}| j}W n tk
rj   | }d}Y nX |dk rJt| dk rt	t
| }|dkr| }|S d|  }y|j}|j}W n tk
r   |}d}Y nX t|}|dkrd}n|dk rd}nd}t d t| dt|  t t	t||  t| dt | |  S | dks^| dkrf| d S d}	x(t| d	k r|	t	| 8 }	| d7 } qlW d
| d t	|   |  }
d|  }|| }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
||9 }|
d| 7 }
|
|	 S )Ng        g      ?r   r)   y              ?g      ?g       @   gdg?gUUUUUU?gllfgJ?g88Cg#+K?g}<ٰj_gAAz?gSˆB)r   r   r   r   r   r   r   AttributeErrorabsr   rF   	conjugater   r.   logpir3   loggamma)r   ZxrealZximagvr    reZimZrefloorZimsignpsr&   r2r   r   r   rQ      sp    




J       rQ   gUUUUUU?ggAAp?gqg|?gYYg^^^^^^ܿg柛n@gLQt:c             C   s   t | }|| kr |dkr td| dk r>d|  } tt|  }nd}x | dk rb|d|  8 }| d7 } qDW | d }|}x*tD ]"}||| 8 }|dk rP ||9 }qvW |t|  d|   S )	Nr   zpolygamma poleg      ?g      ?g        g      $@g#B;)r9   r:   r.   r7   
_psi_coeffr   )r   rB   rU   x2rD   cr   r   r   _digamma_real;  s&    

r[   c             C   s   | j stt| jS | jdk r4d|  } tt|  }nd}x$t| dk r\|d|  8 }| d7 } q:W | d }|}x.tD ]&}||| 8 }t|dk rP ||9 }qpW |t	|  d|   S )Ng      ?g      ?g        g      $@rW   g#B;)
r   r   r[   r   r.   r7   rN   rX   r$   r   )r   rU   rY   rD   rZ   r   r   r   _digamma_complexQ  s"    

r\   gS  ?g}^.@gCGb@g߸G?g1R5?gߵy?gLy~F?goO$y?gŕX3=?rK   ga	o
@ghr@g-@gF@gv#o?g,?gE㦰u?g󟿑?gan$hI?c             C   s.   | d }x | dd  D ]}|||  }qW |S )Nr   r)   r   )Zcoeffsr   rT   rZ   r   r   r   _polyval  s    r]   c             C   s~   | |  }|  }}d}x`t |dkrt||| 9 }|||| d  8 }|d7 }||| 9 }|||| d  7 }|d7 }qW d| S )Nr)   gFFg<gmBP?)rN   )r   rY   rU   rD   r%   r   r   r   _erf_taylor  s    r^   c             C   s"   t |  |  tt|  tt|  S )N)rA   r]   _erfc_coeff_P_erfc_coeff_Q)r   r   r   r   	_erfc_mid  s    ra   c             C   s   | |  }t | |  d }d|  }}d}xRtdddD ]B}||8 }|||d  9 }||7 }|||d  9 }t|dk r8P q8W || S )	NgmBP?g      ?g      ?r)      r(   r*   gFFg<)rA   r?   rN   )r   rY   rR   r&   rD   rU   r%   r   r   r   _erfc_asymp  s    rc   c             C   sP   t | } | | kr| S | dk r(t|   S | dkrH| dkr<dS dt|  S t| S )z
    erf of a real number.
    g        g      ?g      @)r   erfra   r^   )r   r   r   r   rd     s    rd   c             C   sb   t | } | | kr| S | dk r6| dk r(dS dt|   S | dkrFt| S | dkrVt| S dt|  S )z 
    erfc of a real number.
    g        g      g       @g      "@g      ?)r   erfcrc   ra   r^   )r   r   r   r   re     s    re   )gt?gdsp?)gtgdsp?)g+K ?grҹ?)g+K grҹ?)gvV?g5@}?)gvVg5@}?)gL?g=Y?)gLg=Y?)gj?g{y?)gjg{y?)gM&?gu85?)gM&gu85?)g?gN?)ggN?)gұ,n?gT!~?)gұ,ngT!~?)gqE?g
sjΦ?)gqEg
sjΦ?)gu=8|
?gr?)gu=8|
gr?)gY֮sj?gʴ?)gY֮sjgʴ?)gc#?g1?)gc#g1?)g,?gN@?)g,gN@?)gԦV;?gK?)gԦV;gK?)gW99?g)ǰ?)gW99ݿg)ǰ?)gN%؟N?gۿ78a?)gN%؟Nٿgۿ78a?)gׄ?g?)gׄԿg?)gQ'p_?g,J?)gQ'p_пg,J?)g^>?gKX?)g^>ǿgKX?)g\S;S?gQSβ?)g\S;SgQSβ?)g|?gM_6?)g|ꢿgM_6?g      D@Fc       	      C   s   d|  }d }}d}x.||| 9 }||7 }t |dk r8P |d7 }qW |t|  |  }|rt| tkrr| j}| j}n| }d}|dkr|dkr|td 7 }n8t| tkr| jdkr|td 7 }| jdk r|td 8 }|S )Ng      ?r)   gؗҜ<g        y              ?r   )rN   rA   r   r   r   r   r.   )	r    _e1r&   rU   rD   krR   ZzrealZzimagr   r   r   ei_asymp  s0    

rh   c             C   s   |  }}d}x6||  | }|| }t |dk r0P ||7 }|d7 }qW |t7 }|r`|t|  7 }n6t| tksv| jdkr|tt | 7 }n|t| 7 }|S )Nr*   gFFg<r)   g        )rN   eulerr   r   r   r   r   r$   )r    rf   rU   rD   rg   termr   r   r   	ei_taylor  s     rk   c          	   C   sF  t | }|ttfkrJyt| } t}W n$ ttfk
rH   t| } t}Y nX | sTt S t| }|tkrnt| |S |dks|tkr| dkrt	| |S |tkr| j
dkr| | }t	||}nt|  | }t||}||  d }||  d }d}t | tkrtj}	ntj}	x2tD ]*\}
}||
 | }|||	| | 7 }qW ||| 8 }|S )Ng       @g        g      ?)r   r   r   r   r   INFrN   EI_ASYMP_CONVERGENCE_RADIUSrh   rk   r   r$   rA   r   gauss42)r    rf   typezZabszZzrefrefCDrU   _expr   wrD   r   r   r   ei'  s>    



ru   c          	   C   sx   t | }t | ttfkrNyt| } t}W n$ ttfk
rL   t| } t}Y nX |tkrh| jsht| jd} t|  dd S )Ng        T)rf   )r   r   r   r   r   r   r   ru   )r    ro   r   r   r   e1L  s    
rv   g      g        gSbQ?gH*2Q?g|ʎA?gE	G?g92"?gcj?g9?g[:?gH1?g,[
?g ?g+9@ ?g  ?gL ?g9 ?gNe  ?ga;  ?g  ?g֕  ?g1@  ?g    ?gZ>   ?g   ?g   ?gA   gpgp 6g| Upg %gE3+Ӿgf{g'(
gѲG]g/"=g{%gh{srg9D"glXxkվg%ygծ*geuy-g]u:=g h#%.Jg`5'>>g^ҹgU3 gPF; ?g2Mg=Ƨ_ΚcgviT{?g\?gH$  ?ggI;g.k^>gPNg/wogS' ?g7z2Mg)cg?g|ɐ?g      ?c             C   s  t | ttfsryt| } W nV ttfk
rp   y t| } | jsLtt| jS W n ttfk
rf   Y nX t	Y nX | dkrtd| dkrdd|    d|    S t| }|| kr|dkrt
| S |d sd	S | d	krd|  t| d   td
|   td|   td|   S | dkrH| dkr6tt| | d  S tt| | d  S tt| tt|  }dd|    d|    d|   |  S )z.
    Riemann zeta function, real argument
    r)   zzeta(1) pole   g      ?g       @g      @r   r*   g        g      ?g      @)
isinstancer   r9   r   r   r   r   zetar   NotImplementedError	_zeta_intr.   r,   r=   r]   _zeta_0_zeta_1_zeta_P_zeta_Q)rU   r%   r    r   r   r   ry     s:    

8

ry   )F)F)F)Y__doc__operatorr   r$   r.   eZsqrt2Zsqrt5phiZln2Zln10ri   catalanZkhinchinZaperyrP   r   r   r   r   r   r   r   r   r   powrA   r"   r#   tanacosasinatancoshsinhtanhr   r!   Zcos_sinZcbrtr'   r,   r/   r0   r1   r4   r3   r6   r7   rl   ZNINFZNANZEPSr<   lenr;   r@   r>   r=   rE   rF   rG   rH   rJ   rQ   rX   r[   r\   Zdigammar_   r`   r]   r^   ra   rc   rd   re   rn   rm   rh   rk   ru   rv   r{   r~   r   r}   r|   ry   r   r   r   r   <module>   sx  








8



%

