a
    <bH                     @   sn  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zed dd Zdd ZW n" eefy   ejZejZY n0 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@g dUZAdVdW ZBdXdY ZCeeBeCZDg dZddd[ ZEg d\ddd[ ZFd]d^ ZGd_d` ZHdadb ZIdcdd ZJdedf ZKdgdh ZLg diZMdjZNd{dldmZOd|dndoZPd}dpdqZQdrds ZRg dtZSg duddd[ ZTg dvddd[ ZUg dwZVg dxZWdydz 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{@!;?gHP?c                    s    fdd}j |_ |S )Nc              	      sf   t | tu r| S t | tu r( | S zt| } | W S  ttfy`   t| }  |  Y S 0 d S N)typefloatcomplex	TypeError
ValueErrorxkwargs	f_complexf_real \/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/mpmath/math2.pyf   s    
z_mathfun_real.<locals>.f__name__r   r   r   r   r   r   _mathfun_real   s    r   c                    s    fdd}j |_ |S )Nc              	      sJ   t | tu r | S zt| W S  ttfyD    t|  Y S 0 d S r   )r   r   r   r   r   r	   r   r   r   r   +   s    z_mathfun.<locals>.fr   r   r   r   r   _mathfun*   s    r   c                    s    fdd}j |_ |S )Nc               	      sB   zdd | D  W S  t tfy<    dd | D   Y S 0 d S )Nc                 s   s   | ]}t |V  qd S r   )r   .0r
   r   r   r   	<genexpr>8       z(_mathfun_n.<locals>.f.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r   r   r   r   r   r   r   :   r   )r   r   )argsr   r   r   r   r   6   s    z_mathfun_n.<locals>.fr   r   r   r   r   
_mathfun_n5   s    r   g       c                 C   s   | dkrt dt| S N        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 r   )r   r    sqrtr"   r   r   r   	math_sqrtF   s    r%   c                 C   s   t | | S r   r   )r
   yr   r   r   <lambda>N   r   r'   c                 C   s   t t| jt| jS r   )r   r    floorrealimagzr   r   r   r'   `   r   c                 C   s   t t| jt| jS r   )r   r    ceilr)   r*   r+   r   r   r   r'   b   r   c                 C   s   t | t | fS r   )r    cossinr"   r   r   r   r'   e   r   c                 C   s   t | t | fS r   )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 r1   r   r+   r   r   r   r'   h   r   c              	   C   s>   d| }zt | | W S  ttfy8   t| |  Y S 0 d S N      ?)r   r   r   r   r
   nrr   r   r   nthrootj   s
    r7   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         ?            )_sinpi_realdivmodpir    r/   r.   r4   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 r8   )r?   r@   r    r.   r/   r4   r   r   r   _cospi_real|   s    rA   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 r8   )	r)   _sinpi_complexr?   r@   r   r*   r0   r/   r.   r,   r5   r6   r   r   r   rB      s    
rB   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 r8   )r)   r?   r@   r   r*   r0   r.   r/   rC   r   r   r   _cospi_complex   s    
rD   c                 C   sT   zt | t|  W S  tyN   t| jdkr4Y dS t| jdk rHY dS  Y n0 d S )N
                 ?             )sinpicospiOverflowErrorr   r*   r"   r   r   r   tanpi   s    rK   c                 C   sT   zt | t|  W S  tyN   t| jdkr4Y dS t| jdk rHY dS  Y n0 d S )NrE   rG   rF   )rI   rH   rJ   r   r*   r"   r   r   r   cotpi   s    rL   g      g      <r3          @      @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 }tdt	d D ]}|t| | |  7 }qn| t	 d }d|| d   t
|  | S d S )Nr   zgamma function poler9   r;   r3   r<   '@)intZeroDivisionError_max_exact_gamma_exact_gammar@   r>   _gamma_real
_lanczos_prange
_lanczos_gr    exp)r
   _intxr6   itr   r   r   rU      s    rU   c                 C   s   | j stt| jS | jdk r6tt| td|    S | d8 } td }tdt	d D ]}|t| | |  7 }qT| t	 d }d|| d   t
|  | S d S )Nr9   r;   r3   r   r<   rP   )r*   r   rU   r)   r@   rB   _gamma_complexrV   rW   rX   r0   rY   )r
   r6   r[   r\   r   r   r   r]      s    
r]   c                 C   s.   zdt |  W S  ty(   | d  Y S 0 d S )Nr3   r   )gammarR   r"   r   r   r   rgamma   s    r_   c                 C   s   t | d S r2   )r^   r"   r   r   r   	factorial   s    r`   c                 C   s(   t | tu rtd| S t| j| jS )Nr   )r   r   r    atan2r*   r)   r"   r   r   r   arg   s    rb   c              	   C   sR  t | ttfvr<zt| } W n ttfy:   t| } Y n0 z| j}| j}W n tyf   | }d}Y n0 |dk rDt| dk rt	t
| }|dkr| }|S d|  }z|j}|j}W n ty   |}d}Y n0 t|}|dkrd}n|dk rd}nd}t d t| dt|  t t	t||  t| dt | |  S | dksX| dkr`| d S d}	t| d	k r|	t	| 8 }	| d7 } qdd
| 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 )Nr   r9   r   r;   rF   r3   rM      gdg?UUUUUU?gllfgJ?g88Cg#+K?g}<ٰj_gAAz?gSˆB)r   r   r   r   r   r)   r*   AttributeErrorabsr!   r^   	conjugater(   r@   logpirH   loggamma)r
   ZxrealZximagvr,   reZimZrefloorZimsignpsr6   Zr2r   r   r   rj      sn    




 rj   )
re   ggAAp?gqg|?gYYre   g^^^^^^ܿg柛n@gLQt:c                 C   s   t | }|| kr |dkr td| dk r>d|  } tt|  }nd}| dk r`|d|  8 }| d7 } qB| d }|}tD ]$}||| 8 }|dk r q||9 }qp|t|  d|   S )	Nr   zpolygamma poler9   r3   r         $@#B;)rQ   rR   r@   rL   
_psi_coeffr#   )r
   rZ   rn   x2r\   cr   r   r   _digamma_real;  s&    

ru   c                 C   s   | j stt| jS | jdk r4d|  } tt|  }nd}t| dk rZ|d|  8 }| d7 } q8| d }|}tD ](}||| 8 }t|dk r q||9 }qj|t	|  d|   S )Nr9   r3   r   ro   rp   rq   )
r*   r   ru   r)   r@   rL   rg   rr   r0   r!   )r
   rn   rs   r\   rt   r   r   r   _digamma_complexQ  s"    


rv   )	gS  ?g}^.@gCGb@g߸G?g1R5?gߵy?gLy~F?goO$y?gŕX3=?rc   )
r3   ga	o
@ghr@g-@gF@gv#o?g,?gE㦰u?g󟿑?gan$hI?c                 C   s*   | d }| dd  D ]}|||  }q|S )Nr   r;   r   )Zcoeffsr
   rm   rt   r   r   r   _polyval  s    rw   c                 C   sz   | |  }|  }}d}t |dkrr||| 9 }|||| d  8 }|d7 }||| 9 }|||| d  7 }|d7 }qd| S )Nr;   FFg<gmBP?)rg   )r
   rs   rn   r\   r5   r   r   r   _erf_taylor  s    
ry   c                 C   s"   t |  |  tt|  tt|  S r   )rY   rw   _erfc_coeff_P_erfc_coeff_Qr"   r   r   r   	_erfc_mid  s    r|   c                 C   s   | |  }t | |  d }d|  }}d}tdddD ]D}||8 }|||d  9 }||7 }|||d  9 }t|dk r6 q|q6|| S )	NgmBP?r9   r3   r;      r:   r<   rx   )rY   rW   rg   )r
   rs   rk   r6   r\   rn   r5   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.
    r   r3   rN   )r   erfr|   ry   r"   r   r   r   r     s    r   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.
    r   g      rM   g      "@r3   )r   erfcr~   r|   ry   r"   r   r   r   r     s    r   )*)gt?dsp?)gtr   )g+K ?rҹ?)g+K r   )gvV?5@}?)gvVr   )gL?=Y?)gLr   )gj?{y?)gjr   )gM&?u85?)gM&r   )g?N?)gr   )gұ,n?T!~?)gұ,nr   )gqE?
sjΦ?)gqEr   )gu=8|
?r?)gu=8|
r   )gY֮sj?ʴ?)gY֮sjr   )gc#?1?)gc#r   )g,?N@?)g,r   )gԦV;?K?)gԦV;r   )gW99?)ǰ?)gW99ݿr   )gN%؟N?ۿ78a?)gN%؟Nٿr   )gׄ??)gׄԿr   )gQ'p_?,J?)gQ'p_пr   )g^>?KX?)g^>ǿr   )g\S;S?QSβ?)g\S;Sr   )g|?M_6?)g|ꢿr   g      D@Fc           	      C   s   d|  }d }}d}||| 9 }||7 }t |dk r6q@|d7 }q|t|  |  }|rt| tu rn| j}| j}n| }d}|dkr|dkr|td 7 }n8t| tu r| jdkr|td 7 }| jdk r|td 8 }|S )Nr3   r;   gؗҜ<r   rF   r   )rg   rY   r   r   r)   r*   r@   )	r,   _e1r6   rn   r\   krk   ZzrealZzimagr   r   r   ei_asymp  s.    


r   c                 C   s   |  }}d}||  | }|| }t |dk r.q@||7 }|d7 }q|t7 }|r\|t|  7 }n6t| tu sr| jdkr|tt | 7 }n|t| 7 }|S )Nr<   rx   r;   r   )rg   eulerr!   r   r   r*   r#   r0   )r,   r   rn   r\   r   Ztermr   r   r   	ei_taylor  s    
r   c              	   C   s@  t | }|ttfvrHzt| } t}W n" ttfyF   t| } t}Y n0 | sRt S t| }|tkrlt| |S |dks|tu r| dkrt	| |S |tu r| j
dkr| | }t	||}nt|  | }t||}||  d }||  d }d}t | tu rtj}	ntj}	tD ]*\}
}||
 | }|||	| | 7 }q||| 8 }|S )NrM   r   r9   )r   r   r   r   r   INFrg   EI_ASYMP_CONVERGENCE_RADIUSr   r   r)   r0   rY   r    gauss42)r,   r   typezZabszZzrefrefCDrn   _expr
   wr\   r   r   r   ei'  s>    



r   c              	   C   sv   t | }t | ttfvrLzt| } t}W n" ttfyJ   t| } t}Y n0 |tu rf| jsft| jd} t|  dd S )Nr   T)r   )r   r   r   r   r   r*   r)   r   )r,   r   r   r   r   e1L  s    
r   )g      r   gSbQ?r   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])	r3   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|ɐ?r9   c                 C   s  t | ttfstzt| } W nX ttfyr   z&t| } | jsPtt| jW  Y S W n ttfyh   Y n0 t	Y n0 | 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rJ| dkr8t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   r3   rM   g      @r   r<   r   r9   g      @)
isinstancer   rQ   r   r   r   r*   zetar)   NotImplementedError	_zeta_intr@   r>   rU   rw   _zeta_0_zeta_1_zeta_P_zeta_Q)rn   r5   r,   r   r   r   r     s:    

8

r   )F)F)F)Y__doc__operatorr    r0   r@   eZsqrt2Zsqrt5phiZln2Zln10r   catalanZkhinchinZaperyri   r   r   r   r!   r#   r%   r   r   r$   powrY   r.   r/   tanacosasinatancoshsinhtanhr(   r-   Zcos_sinZcbrtr7   r>   rA   rB   rD   rI   rH   rK   rL   r   ZNINFZNANZEPSrT   lenrS   rX   rV   rU   r]   r^   r_   r`   rb   rj   rr   ru   rv   Zdigammarz   r{   rw   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   





7
	
,


%