B
    <ZH              *   @   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 +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   s    r   c             C   s   t t| jt| jS )N)r   r   floorrealimag)zr   r   r   r   `   s    c             C   s   t t| jt| jS )N)r   r   ceilr   r   )r   r   r   r   r   b   s    c             C   s   t | t | fS )N)r   cossin)r   r   r   r   r   e   s    c             C   s   t | t | fS )N)cmathr!   r"   )r   r   r   r   r   f   s    c             C   s   | d S )NgUUUUUU?r   )r   r   r   r   r   h   s    c             C   s   | d S )NgUUUUUU?r   )r   r   r   r   r   h   s    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   r/      s    
 
 
  r/   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    
 
   r0   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    r5   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 )Nr1   y             y              ?)r3   r2   r4   r   r   )r   r   r   r   cotpi   s    r6   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-   r/   _gamma_complexr=   r>   r?   r#   r@   )r   r%   rB   rC   r   r   r   rD      s    
rD   c             C   s*   ydt |  S  tk
r$   | d S X d S )Ng      ?g        )gammar9   )r   r   r   r   rgamma   s    rF   c             C   s   t | d S )Ng      ?)rE   )r   r   r   r   	factorial   s    rG   c             C   s(   t | tkrtd| S t| j| jS )Ng        )r   r   r   Zatan2r   r   )r   r   r   r   arg   s    rH   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   rE   	conjugater   r-   logpir2   loggamma)r   ZxrealZximagvr   reZimZrefloorZimsignpsr%   Zr2r   r   r   rO      sp    




J       rO   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;)r8   r9   r-   r6   
_psi_coeffr   )r   rA   rS   x2rC   cr   r   r   _digamma_real;  s&    

rX   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      $@rT   g#B;)
r   r   rX   r   r-   r6   rL   rU   r#   r   )r   rS   rV   rC   rW   r   r   r   _digamma_complexQ  s"    

rY   gS  ?g}^.@gCGb@g߸G?g1R5?gߵy?gLy~F?goO$y?gŕX3=?rI   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   rR   rW   r   r   r   _polyval  s    rZ   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?)rL   )r   rV   rS   rC   r$   r   r   r   _erf_taylor  s    r[   c             C   s"   t |  |  tt|  tt|  S )N)r@   rZ   _erfc_coeff_P_erfc_coeff_Q)r   r   r   r   	_erfc_mid  s    r^   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<)r@   r>   rL   )r   rV   rP   r%   rC   rS   r$   r   r   r   _erfc_asymp  s    r`   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   erfr^   r[   )r   r   r   r   ra     s    ra   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   erfcr`   r^   r[   )r   r   r   r   rb     s    rb   )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   )rL   r@   r   r   r   r   r-   )	r   _e1r%   rS   rC   krP   ZzrealZzimagr   r   r   ei_asymp  s0    

re   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        )rL   eulerr   r   r   r   r   r#   )r   rc   rS   rC   rd   Ztermr   r   r   	ei_taylor  s     rg   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   INFrL   EI_ASYMP_CONVERGENCE_RADIUSre   rg   r   r#   r@   r   gauss42)r   rc   typezZabszZzrefrefCDrS   Z_expr   wrC   r   r   r   ei'  s>    



rp   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)rc   )r   r   r   r   r   r   r   rp   )r   rk   r   r   r   e1L  s    
rq   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   r8   r   r   r   r   zetar   NotImplementedError	_zeta_intr-   r+   r<   rZ   _zeta_0_zeta_1_zeta_P_zeta_Q)rS   r$   r   r   r   r   rt     s:    

8

rt   )F)F)F)Y__doc__operatorr   r#   r-   eZsqrt2Zsqrt5ZphiZln2Zln10rf   ZcatalanZkhinchinZaperyrN   r   r   r   r   r   r   r   r   r   powr@   r!   r"   ZtanZacosZasinZatanZcoshZsinhZtanhr   r    Zcos_sinZcbrtr&   r+   r.   r/   r0   r3   r2   r5   r6   rh   ZNINFZNANZEPSr;   lenr:   r?   r=   r<   rD   rE   rF   rG   rH   rO   rU   rX   rY   Zdigammar\   r]   rZ   r[   r^   r`   ra   rb   rj   ri   re   rg   rp   rq   rv   ry   rz   rx   rw   rt   r   r   r   r   <module>   sx  








8



%

