B
    A\F                 @   sf  d dl mZ G dd deZdd Z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edd Zedd Zedd Zed d! Zed"d# Zedhd%d&Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zedid4d5Zedjd7d8Zed9d: Zed;d< Zed=d> Zed?d@ Z edAdB Z!edCdD Z"edEdF Z#edkdHdIZ$edJdK Z%edLdM Z&edNdO Z'edPdQ Z(dRdS Z)d3dGl*Z*d3dGl+Z+dTdU Z,dVdW Z-edldXdYZ.edmdZd[Z/dnd\d]Z0ed^d_ Z1ed`da Z2edbdc Z3edodddeZ4edpdfdgZ5dGS )q   )xrangec               @   s   e Zd ZdZi ZdZdd Zedd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) SpecialFunctionsa  
    This class implements special functions using high-level code.

    Elementary and some other functions (e.g. gamma function, basecase
    hypergeometric series) are assumed to be predefined by the context as
    "builtins" or "low-level" functions.
    gP?c          
   C   s2  | j }x*|jD ] }|j| \}}|||| qW | d| _| d| _| d| _| d| _| d| _| d| _	| d| _
| d| _| d	| _| d
| _| d| _| d| _| d| _| d| _| d| _| d| _| d| _i | _| jdddddddd | | j| _d S )N)   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   argconjrootZpsiZzetaZfibZfac)Zphase	conjugateZnthrootZ	polygammaZhurwitzZ	fibonacciZ	factorial)	__class__defined_functions_wrap_specfunZ_mpqZmpq_1Zmpq_0Zmpq_1_2Zmpq_3_2Zmpq_1_4Zmpq_1_16Zmpq_3_16Zmpq_5_2Zmpq_3_4Zmpq_7_4Zmpq_5_4Zmpq_1_3Zmpq_2_3Zmpq_4_3Zmpq_1_6Zmpq_5_6Zmpq_5_3Z_misc_const_cache_aliasesupdateZmemoizeZzetazeroZzetazero_memoized)selfclsnamefwrap r   9lib/python3.7/site-packages/mpmath/functions/functions.py__init__   s>    
zSpecialFunctions.__init__c             C   s   t | || d S )N)setattr)r   r   r   r   r   r   r   r   =   s    zSpecialFunctions._wrap_specfunc             C   s   t d S )N)NotImplementedError)ctxnzr   r   r   _besseljD   s    zSpecialFunctions._besseljc             C   s   t d S )N)r   )r   r!   r   r   r   _erfE   s    zSpecialFunctions._erfc             C   s   t d S )N)r   )r   r!   r   r   r   _erfcF   s    zSpecialFunctions._erfcc             C   s   t d S )N)r   )r   r!   ar   r   r   _gamma_upper_intG   s    z!SpecialFunctions._gamma_upper_intc             C   s   t d S )N)r   )r   r    r!   r   r   r   _expint_intH   s    zSpecialFunctions._expint_intc             C   s   t d S )N)r   )r   sr   r   r   _zetaI   s    zSpecialFunctions._zetac             C   s   t d S )N)r   )r   r(   r%   r    ZderivativesZreflectr   r   r   _zetasum_fastJ   s    zSpecialFunctions._zetasum_fastc             C   s   t d S )N)r   )r   r!   r   r   r   _eiK   s    zSpecialFunctions._eic             C   s   t d S )N)r   )r   r!   r   r   r   _e1L   s    zSpecialFunctions._e1c             C   s   t d S )N)r   )r   r!   r   r   r   _ciM   s    zSpecialFunctions._cic             C   s   t d S )N)r   )r   r!   r   r   r   _siN   s    zSpecialFunctions._sic             C   s   t d S )N)r   )r   r(   r   r   r   _altzetaO   s    zSpecialFunctions._altzetaN)__name__
__module____qualname____doc__r   ZTHETA_Q_LIMr   classmethodr   r"   r#   r$   r&   r'   r)   r*   r+   r,   r-   r.   r/   r   r   r   r   r      s"   +r   c             C   s   | dft j| j< d S )NT)r   r   r0   )r   r   r   r   defun_wrappedQ   s    r5   c             C   s   | dft j| j< d S )NF)r   r   r0   )r   r   r   r   defunT   s    r6   c             C   s   t t| j|  d S )N)r   r   r0   )r   r   r   r   defun_staticW   s    r7   c             C   s   | j | | S )N)oneZtan)r   r!   r   r   r   cotZ   s    r9   c             C   s   | j | | S )N)r8   Zcos)r   r!   r   r   r   sec]   s    r:   c             C   s   | j | | S )N)r8   sin)r   r!   r   r   r   csc`   s    r<   c             C   s   | j | | S )N)r8   Ztanh)r   r!   r   r   r   cothc   s    r=   c             C   s   | j | | S )N)r8   Zcosh)r   r!   r   r   r   sechf   s    r>   c             C   s   | j | | S )N)r8   Zsinh)r   r!   r   r   r   cschi   s    r?   c             C   s"   |s| j d S | | j| S d S )Ng      ?)piZatanr8   )r   r!   r   r   r   acotl   s    
rA   c             C   s   |  | j| S )N)Zacosr8   )r   r!   r   r   r   asecs   s    rB   c             C   s   |  | j| S )N)Zasinr8   )r   r!   r   r   r   acscv   s    rC   c             C   s"   |s| j d S | | j| S d S )Ny              ?)r@   Zatanhr8   )r   r!   r   r   r   acothy   s    
rD   c             C   s   |  | j| S )N)Zacoshr8   )r   r!   r   r   r   asech   s    rE   c             C   s   |  | j| S )N)Zasinhr8   )r   r!   r   r   r   acsch   s    rF   c             C   sH   |  |}|r| |r|S | |r<|dkr4| jS | j S |t| S )Nr   )convertisnanZ_is_real_typer8   abs)r   xr   r   r   sign   s    

rK   r   c             C   s2   |dkr|  |S | |}| |}| ||S )Nr   )Zagm1rG   Z_agm)r   r%   br   r   r   agm   s
    


rM   c             C   s,   |  |rd| S |s|d S | || S )Nr   )isinfr;   )r   rJ   r   r   r   sinc   s
    
rO   c             C   s2   |  |rd| S |s|d S | || j|  S )Nr   )rN   Zsinpir@   )r   rJ   r   r   r   sincpi   s
    
rP   c                sB   s
 j S   j k r,dd   S   fdddS )Ng      ?r   c                  s   t  dgS )N)iterexpr   )r   rJ   r   r   <lambda>   s    zexpm1.<locals>.<lambda>r   )zeromagprecsum_accurately)r   rJ   r   )r   rJ   r   expm1   s
    rY   c             C   sH   |s
| j S | || j k r,|d|d   S | | jd|d| j dS )Ng      ?r   r   )rW   )rU   rV   rW   logZfadd)r   rJ   r   r   r   log1p   s
    r[   c       
         s   | j }| j}  | }||}|dkr,|S |sJrF dkrJ| rJ|S  | }|}|  }	|||	 | j k r|	 |	 d d  S |  fdddS )Ni)r   rQ   y              ?y             r   c                  s   t   dgS )NrQ   )rR   r   )rJ   yr   r   rT      s    zpowm1.<locals>.<lambda>r   )rV   r8   ZisintlnrW   rX   )
r   rJ   r\   rV   r8   wMZx1ZmagyZlnxr   )rJ   r\   r   powm1   s    
r`   c             C   sx   t |}t |}||; }|s"| jS d| |kr6| j S d| |krH| jS d| d| kr`| j S | d| | | S )Nr   r   r   )intr8   jZexpjpimpf)r   kr    r   r   r   _rootof1   s    re   r   c             C   s   t |}| |}|r|d@ rVd| |d krV| |sV| |dk rV| | | S | j}z,|  jd7  _| ||d| || }W d || _X |
 S | ||S )Nr   r   r   
   )ra   rG   imrer   rW   re   Z_nthroot)r   rJ   r    rd   rW   vr   r   r   r      s    
0r   Fc                sn    j  j}zJ  jd7  _|r< fddtD }n fddtD }W d | _X dd |D S )Nrf   c                s&   g | ]}|d kr  |qS )r   )re   ).0rd   )r   gcdr    r   r   
<listcomp>   s    zunitroots.<locals>.<listcomp>c                s   g | ]}  |qS r   )re   )rj   rd   )r   r    r   r   rl      s    c             S   s   g | ]
}|
 qS r   r   )rj   rJ   r   r   r   rl     s    )Z_gcdrW   range)r   r    Z	primitiverW   ri   r   )r   rk   r    r   	unitroots   s    rn   c             C   s*   |  |}| |}| |}| ||S )N)rG   _re_imZatan2)r   rJ   rh   rg   r   r   r   r     s    


r   c             C   s   t | |S )N)rI   rG   )r   rJ   r   r   r   fabs  s    rq   c             C   s   |  |}t|dr|jS |S )Nreal)rG   hasattrrr   )r   rJ   r   r   r   rh     s    

rh   c             C   s    |  |}t|dr|jS | jS )Nimag)rG   rs   rt   rU   )r   rJ   r   r   r   rg     s    

rg   c             C   s,   |  |}y| S  tk
r&   |S X d S )N)rG   r   AttributeError)r   rJ   r   r   r   r     s
    
r   c             C   s   |  || |fS )N)rq   r   )r   r!   r   r   r   polar%  s    rv   c             C   s   || j | |  S )N)ZmpcZcos_sin)r   rZphir   r   r   rect)  s    rx   Nc             C   s8   |d kr|  |S | jd }| j ||d| j ||d S )N   )rW   )r]   rW   )r   rJ   rL   wpr   r   r   rZ   -  s    

rZ   c             C   s   |  |dS )Nrf   )rZ   )r   rJ   r   r   r   log104  s    r{   c             C   s   |  ||  | S )N)rG   )r   rJ   r\   r   r   r   fmod8  s    r|   c             C   s
   || j  S )N)degree)r   rJ   r   r   r   degrees<  s    r~   c             C   s
   || j  S )N)r}   )r   rJ   r   r   r   radians@  s    r   c             C   sv   |s|s|S | j | S || jkrD|dkr,|S |d| | j | j  S || j krl| d| d | j | j  S | |S )Nr   r   r   )Zninfinfr@   rb   r]   )r   r!   rd   r   r   r   _lambertw_specialD  s    


r   c             C   s  d}t | dr8t| j}| j}|r.d|dk  }t|}nt| }d}d}|sPd}t||} |dkrd|  k rzdk rn nd|  k rdk rn n|r|d	krd
d| d   S |dkrdd| d   S |dk rdd| d   S |dk rdd| d   S |dk r2|dkr"dd| d   S dd| d   S d}|sJ||krJ|} |dk rtdd | | d!   d"| |   S |d!k r| S d#d$|   S |s|dkrt|}t|}nt| }t|}n|dkrd}|s ||  k rdk r n n|} |dkrP|d%k rPd&|  k r,dk rPn n dd | | d!   d"| |   S |sd|  krndk rn nt| }|t|  S |dkr|s|dk rt| d' }nt| d( }t|}|| ||  ||d)  d)|d)    S )*Nr   rt   rQ   g        g      g      @g      g      @g      ?yx&1?p=
ף?yh|?5?ʡEƿy      ?      @g      ?y)\(?&1?y      ?L7A`y      ?      ?yx&1?p=
ףyh|?5?ʡE?y      ?      g      пy)\(?&1ʿy      ?L7A`?y      ?      g      y'1ZԿq=
ףp?yM`"r   y'1ZԿq=
ףpyM`"?g2,6V׿gɿg4@g      ?g}tp?g?g333333?g?g333333y        -DT!	@y        -DT!@r   )rs   floatrr   rt   complexmathrZ   cmath)r!   rd   Z	imag_signrJ   r\   rw   L1L2r   r   r   _lambertw_approx_hybridW  sn    




6    


 
 
 
 
"0 "
r   c                s    }d|  k r dk r>n nd|  k r<dk r>n n|dk rtd dk r|dks|d	kr| dks|dkr dk r  fd
d}  | }  j|7  _ d j d  }  j|8  _ d	 dd d d	d}|dkr&| } j}	xt	t
d|D ]kr fddt	dD |< d d  d |d  d   d  | d  d  d   <  |  }
|	|
7 }	  |
| k r|	dfS d7 q<W   j|d 7  _|	dfS |dks0|d	kr>t|dfS |dkrx|d	k rbd  dfS  } |}nz|d	krЈ sd   k rdk rn n   }| |  dfS  d j |  } |}|| ||  ||d  d|d    dfS )z
    Return rough approximation for W_k(z) from an asymptotic series,
    sufficiently accurate for the Halley iteration to converge to
    the correct value.
    ii  ii  r   g,6V?g?r   rQ   c                  s     dgS )NrQ   )rS   r   )r   r!   r   r   rT     s    z"_lambertw_series.<locals>.<lambda>r   )r   r   c             3   s&   | ]}|  d  |   V  qdS )r   Nr   )rj   rb   )lur   r   	<genexpr>  s    z#_lambertw_series.<locals>.<genexpr>r   TFg,6V׿y               @)rV   rI   rp   rX   rW   Zsqrterc   rU   r   maxZfsumr   r]   ro   r@   )r   r!   rd   tolZmagzZdeltaZcancellationpr%   r(   Ztermr   r   r   )r   r   r   r!   r   _lambertw_series  sN    
8

$T


8
r   c             C   s  |  |}t|}| |s(t| ||S | j}|  jd| |p@d 7  _| j}|d }t| |||\}}|s| d}xztdD ]n}	| 	|}
||
 }|| }||||
 || | || |     }| || | || kr|}P q|}qW |	dkr| 
d|  || _|
 S )Nry   r   r	   r   d   z1Lambert W iteration failed to converge for z = %s)rG   ra   Zisnormalr   rW   rV   r   rc   r   rS   warn)r   r!   rd   rW   rz   r   r^   ZdoneZtwoiZewZwewZwewzZwnr   r   r   lambertw  s0    



(
r   c             C   s   |  |}|s(| |r|S t|dS | |sP| |sP| |sP| |rX|| S |dkrd|S |dkrx||d  S |dkr| |S t| ||d| | S )Nr   r   r   T)rG   rH   typerN   rP   _polyexprS   )r   r    rJ   r   r   r   bell  s    

(   
r   c                s     fdd} j |ddS )Nc              3   sD   r  V  } d}x&| |  V  |d7 }|  | } qW d S )Nr   )rP   )trd   )r   extrar    rJ   r   r   _terms  s    z_polyexp.<locals>._termsr   )Z
check_step)rX   )r   r    rJ   r   r   r   )r   r   r    rJ   r   r     s    	r   c             C   s   |  |s(|  |s(| |s(| |r0|| S |dkr@|| S |dkrR| |S |dkrh| || S |dkr| || |d  S t| ||S )Nr   r   r   )rN   rH   rY   rS   r   )r   r(   r!   r   r   r   polyexp  s    (  
  r   c             C   s  t |}|dk rtd| j}|dkr*|S |dkr:|| S |dkrJ|| S d}d}d}d}x~td|d D ]l}|| sj| || }	| || }
|
r||
|	 9 }qj|	dkr||9 }|d7 }qj|	dkrj||9 }|d7 }qjW |r||kr|d9 }n||9 }|| }|S )Nr   zn cannot be negativer   r   rQ   )ra   
ValueErrorr8   rm   Zmoebiusr`   )r   r    r!   r   Za_prodZb_prodZ	num_zerosZ	num_polesdr^   rL   r   r   r   
cyclotomic  s@    

r   c             C   s  t |}|dk r| jS |d dkr@||d @ dkr:| j
 S | jS xRdD ]J}|| sF|| d }}x$|dkrt||\}}|rb| jS qbW | |S qFW | |r| |S |dkrtd}xRt |d|  d }|dk r| jS || |kr | |r | |S |d7 }qW dS )	a  
    Evaluates the von Mangoldt function `\Lambda(n) = \log p`
    if `n = p^k` a power of a prime, and `\Lambda(n) = 0` otherwise.

    **Examples**

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> [mangoldt(n) for n in range(-2,3)]
        [0.0, 0.0, 0.0, 0.0, 0.6931471805599453094172321]
        >>> mangoldt(6)
        0.0
        >>> mangoldt(7)
        1.945910149055313305105353
        >>> mangoldt(8)
        0.6931471805599453094172321
        >>> fsum(mangoldt(n) for n in range(101))
        94.04531122935739224600493
        >>> fsum(mangoldt(n) for n in range(10001))
        10013.39669326311478372032

    r   r   r   )
r   r	   r
                        l       73Me'g      ?g      ?N)ra   rU   Zln2divmodr]   Zisprimer   )r   r    r   qrw   rd   r   r   r   mangoldt8  s8    





r   c             C   s.   |  t|t|}|r t|S | |S d S )N)Z
_stirling1ra   rc   )r   r    rd   exactri   r   r   r   	stirling1t  s    r   c             C   s.   |  t|t|}|r t|S | |S d S )N)Z
_stirling2ra   rc   )r   r    rd   r   ri   r   r   r   	stirling2|  s    r   )r   )r   )F)N)r   )r   )F)F)F)6Zlibmp.backendr   objectr   r5   r6   r7   r9   r:   r<   r=   r>   r?   rA   rB   rC   rD   rE   rF   rK   rM   rO   rP   rY   r[   r`   re   r   rn   r   rq   rh   rg   r   rv   rx   rZ   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sv   N	
?6

+<