U
    ZÊ¹j- ã                   @   sB  d Z ddlZddlZddlmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS dd	lTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn e>d
d„ ƒZoe>dd„ ƒZpe>dd„ ƒZqe>dd„ ƒZre>dd„ ƒZse>dd„ ƒZte>dd„ ƒZue?esƒZve?erƒZwe?epƒZxe?eqƒZye?eoƒZze?etƒZ{e?euƒZ|dZ}i Z~e!dƒZe!dƒZ€dd„ Z�e�e}ƒZ‚dkdd„Zƒdldd „Z„d!d"„ Z…d#d$„ Z†d%d&„ Z‡efd'd(„Zˆefd)d*„Z‰efd+d,„ZŠefd-d.„Z‹i ZŒd/d0„ Z�d1ZŽi Z�efd2d3„Z�edfd4d5„Z‘edd6fd7d8„Z’efd9d:„Z“efd;d<„Z”dZ•d=d>„ Z–g a—g a˜g a™d?d@„ ZšdAdB„ Z›dCZœdDdE„ Z�dFZžeždGk �sŒtŸ‚dHZ dIZ¡i Z¢i Z£dJdK„ e¤e¡d ƒD ƒZ¥dLdM„ Z¦dNdO„ Z§dPdQ„ Z¨dRdS„ Z©dTdU„ ZªdVdW„ Z«dmdYdZ„Z¬dnd[d\„Z­dod]d^„Z®dpd_d`„Z¯dqdadb„Z°drdcdd„Z±dsdedf„Z²dtdgdh„Z³efdidj„Z´dS )uao  
-----------------------------------------------------------------------
This module implements gamma- and zeta-related functions:

* Bernoulli numbers
* Factorials
* The gamma function
* Polygamma functions
* Harmonic numbers
* The Riemann zeta function
* Constants related to these functions

-----------------------------------------------------------------------
é    Né   )Úxrange)ÚMPZÚMPZ_ZEROÚMPZ_ONEÚ	MPZ_THREEÚgmpy)Úlist_primesÚifacÚifac2Úmoebius)-Úround_floorÚround_ceilingÚ
round_downÚround_upÚround_nearestÚ
round_fastÚlshiftÚ
sqrt_fixedÚ
isqrt_fastÚfzeroÚfoneÚfnoneÚfhalfÚftwoÚfinfÚfninfÚfnanÚfrom_intÚto_intÚto_fixedÚfrom_man_expÚfrom_rationalÚmpf_posÚmpf_negÚmpf_absÚmpf_addÚmpf_subÚmpf_mulÚmpf_mul_intÚmpf_divÚmpf_sqrtÚmpf_pow_intÚmpf_rdiv_intÚmpf_perturbÚmpf_leÚmpf_ltÚmpf_gtÚ	mpf_shiftÚnegative_rndÚreciprocal_rndÚbitcountÚto_floatÚ	mpf_floorÚmpf_signÚComplexResult)Úconstant_memoÚdef_mpf_constantÚmpf_piÚpi_fixedÚ	ln2_fixedÚlog_int_fixedÚmpf_ln2Úmpf_expÚmpf_logÚmpf_powÚmpf_coshÚmpf_cos_sinÚmpf_cosh_sinhÚmpf_cos_sin_piÚ
mpf_cos_piÚ
mpf_sin_piÚln_sqrt2pi_fixedÚmpf_ln_sqrt2piÚsqrtpi_fixedÚ
mpf_sqrtpiÚcos_sin_fixedÚ	exp_fixed)Úmpc_zeroÚmpc_oneÚmpc_halfÚmpc_twoÚmpc_absÚ	mpc_shiftÚmpc_posÚmpc_negÚmpc_addÚmpc_subÚmpc_mulÚmpc_divÚmpc_add_mpfÚmpc_mul_mpfÚmpc_div_mpfÚmpc_mpf_divÚmpc_mul_intÚmpc_pow_intÚmpc_logÚmpc_expÚmpc_powÚ
mpc_cos_piÚ
mpc_sin_piÚmpc_reciprocalÚ
mpc_squareÚmpc_sub_mpfc                 C   s´   | d } t | >  }}d\}}}|r¬|d|d  d| d  9 }|dd|  d|d   d  }|d|d   d	|d  d
|  d  |d d| d   }||7 }|d7 }q|d? S )Né   )r   r   r   é    é   é   r   é   éÿÿÿÿé(   é   é   ©r   )ÚprecÚaÚoneÚsÚtÚn© rz   úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpmath/libmp/gammazeta.pyÚcatalan_fixedH   s    
 <
r|   c                 C   s*  t | | d  d ƒ}t}tdƒ}t|>  }}t|ƒ}tt|||ƒdƒ }}d}	ttd|	 |ƒƒ}
t|
||ƒ}
t	|
||ƒ}
t
|
|ƒ}
|
| | |	 |? }|dk r qú||7 }||d|	 d  |d|	   7 }|	d7 }	t|d|	 d|	 d  |ƒ}t|||ƒ}qN||> t|ƒ }tt|| ƒ|ƒ}t
|| ƒ}|S )Nç      à?é   é   rm   r   éd   )Úintr   r   r   r<   r2   r(   r%   Úmpf_bernoullir*   r    r)   r>   rA   r!   )rt   Úwprw   Úfacrx   ÚONEÚpiZpipowZtwopi2ry   Zzeta2nÚtermÚKrz   rz   r{   Úkhinchin_fixedm   s.    
 
r‰   c                 C   sî  | d }t d|  d ƒ}t|> }t}td|ƒD ]}|t||ƒ|d  7 }q.t||ƒ}||| | 7 }|||d d  7 }|d }d}d}	d}
tdƒ}d}||> |	|  | }t|| ƒ}td| |ƒ}t|||ƒ}t	|||ƒ}t
||ƒ}t|ƒdk rø�qz||8 }|	||
  |
 |	 || |
d f\}}	}}
|	||
  |
 |	 || |
d f\}}	}}
|d7 }t|d| d| d  |ƒ}q˜t|ƒ}|d	9 }||> |d |?  }|t|ƒ7 }|t
ttd| | ƒ|ƒ|ƒ7 }|d
 }tt|| ƒ|ƒ}t
|| ƒS )Né   g…ëQ¸Õ?é   rm   rl   r   éþÿÿÿr€   é   é   )r�   r   r   Úranger?   r   r!   r‚   r(   r*   r    Úabsr)   r=   Úeuler_fixedrB   rA   )rt   rƒ   ÚNr…   rw   ÚkZlogNZpNru   ÚbÚjr„   ÚDÚBr‡   r†   ÚArz   rz   r{   Úglaisher_fixed¯   sH    

** r™   c                 C   s’   | d7 } t | > }tdƒ| > }d}t}|rŠ||7 }||d 9 }|d| d d d| d   }d| d|d  d	|  d  | }|d7 }q$|d
? S )Nrj   éM   r   é
   rm   r‹   ro   éÍ   éú   rr   )r   r   r   )rt   Údr‡   ry   rw   rz   rz   r{   Úapery_fixedí   s     $
rŸ   c           	      C   sÆ   d}| |7 } t t | d t d¡ d¡ƒd }d| }| t| ƒ  }}t| >  }}d}||d  |d  }||d  | | | }||7 }||7 }tt|ƒt|ƒƒdk r¬q¶|d7 }qX|| | > | S )NrŠ   r   rm   r   r€   )r�   ÚmathÚlogr>   r   Úmaxr�   )	rt   ÚextraÚpry   r˜   ÚUr—   ÚVr“   rz   rz   r{   r‘     s    "
r‘   c                 C   sp   | d }d}t |ƒ}t||ƒ}|tkr(qft||ƒ}t|t|ƒ|ƒ}t|t|ƒ|ƒ}t||ƒ}|d7 }qt	|| ƒS )Nrj   rm   r   )
Ú	mpf_eulerÚmpf_zeta_intr   rB   r)   r   r*   r   r&   r    )rt   rƒ   Úmrw   rx   rz   rz   r{   Úmertens_fixed*  s    



rª   c                    sî   dd„ }d|  d ‰ t }‡ fdd„dD ƒ}‡ fdd„|D ƒ}d}t|ˆ ƒ}td	ƒD ]2}t|tt || ƒˆ ƒ}t|| || ˆ ƒ||< qRt|||ƒ ˆ ƒ}t|| d
 dƒt kr®qÄt||ˆ ƒ}|d7 }q@t|tdƒˆ ƒ}t|tdƒˆ ƒ}t	|| ƒS )Nc                    s$   t ‡ fdd„tdˆ d ƒD ƒƒˆ  S )Nc                 3   s&   | ]}ˆ | st |ƒˆ | > V  qd S )N)r   ©Ú.0rž   ©ry   rz   r{   Ú	<genexpr>=  s      z-twinprime_fixed.<locals>.I.<locals>.<genexpr>r   )Úsumr   r­   rz   r­   r{   ÚI<  s    ztwinprime_fixed.<locals>.Irm   rŠ   c                    s   g | ]}t d |ˆ ƒ‘qS )r   )r"   ©r¬   r¤   ©rƒ   rz   r{   Ú
<listcomp>@  s     z#twinprime_fixed.<locals>.<listcomp>)rm   rl   r‹   é   c                    s   g | ]}t ||ˆ ƒ‘qS rz   )r(   r±   r²   rz   r{   r³   A  s     r   r›   ry   r   i'  i 	  )
r   r¨   r�   r(   r'   r,   r#   r   r*   r    )rt   r°   ÚresÚprimesZppowersry   ru   Úirz   r²   r{   Útwinprime_fixed:  s$    

r¸   i¸  rl   r�   c                 C   s(   t  | d¡}tdd|  | |d   ƒS )z5Accurately estimate the size of B_n (even n > 2 only)rm   gÏ÷Sã¥›@r}   gÇK7‰A`@)r    r¡   r�   )ry   Zlgnrz   rz   r{   Úbernoulli_sizeŠ  s    r¹   c                 C   sV  | dk r4| dk rt dƒ‚| dkr$tS | dkr4ttƒS | d@ r@tS |tkrz|t| ƒd d krzt| ƒ\}}t||||pvt	ƒS | t
krŽt| ||ƒS |d }|d|d	@  7 }t |¡}|�r|\}}| |krâ|sÒ||  S t||  ||ƒS |\}	}
}| |	 d
k�rJt| ||ƒS nB| d
k�rt| ||ƒS dti}dtd
ƒtg \}	}
}}||ft|< |	| k�rN|	d }t|	ƒ}d}td|ƒ| }|	dk �r†t}n|}td|	d d ƒD ]È}||	d|    \}}}}}|�rÈ| }|t|| || ƒ7 }d| }||	d | |	d |  |	d |  |	d |  |	d |  |	|  9 }|d| d|  d|  d|  d|  d|   }�qœ|dk�r€t|	d t|ƒ}|dk�ršt|	d t|ƒ}|dk�r¶t|	 d t|ƒ}t|||ƒ}tt|||ƒt|
ƒ|ƒ}|||	< |	d7 }	|
|	d |	d   |	|	d   }
|	dk�r8|d|	 d|	   |	d |	d   }|	|
|g|dd…< �qJ||  S )z.Computation of Bernoulli numbers (numerically)rm   r   z)Bernoulli numbers only defined for n >= 0r   gš™™™™™ñ?éè  rŠ   rk   é   r›   r�   r‹   r   rl   r´   é   é	   N)Ú
ValueErrorr   r$   r   r   ÚBERNOULLI_PREC_CUTOFFr¹   Úbernfracr"   r   ÚMAX_BERNOULLI_CACHEÚmpf_bernoulli_hugeÚbernoulli_cacheÚgetr#   r   r   r¢   r   r   r   r-   Úf3Úf6r!   r*   r'   r   )ry   rt   Úrndr¤   Úqrƒ   ÚcachedÚnumbersÚstater©   ÚbinZbin1ÚcaseZszbmrw   Zsexpru   r•   ZusignZumanZuexpZubcÚuZj6r”   rz   rz   r{   r‚   ‘  s|    




H8
 
 
  
$r‚   c                 C   s‚   |d }|t t | d¡ƒ }t| d |ƒ}t|t| |ƒ|ƒ}t|tt|ƒ|  |ƒƒ}t|d|  ƒ}| d@ srt	|ƒ}t
|||p~tƒS )Nr›   rm   r   rl   )r�   r    r¡   Úmpf_gamma_intr(   r¨   r,   r<   r2   r$   r#   r   )ry   rt   rÇ   rƒ   ZpiprecÚvrz   rz   r{   rÂ   Ü  s    rÂ   c                 C   sš   t | ƒ} | dk rdddg|  S | d@ r*dS d}t| d ƒD ]}| |d  s:||9 }q:t| ƒt t |d¡ƒ d }t| |ƒ}t|t|ƒƒ}t|t	ƒ}||fS )	a¦  
    Returns a tuple of integers `(p, q)` such that `p/q = B_n` exactly,
    where `B_n` denotes the `n`-th Bernoulli number. The fraction is
    always reduced to lowest terms. Note that for `n > 1` and `n` odd,
    `B_n = 0`, and `(0, 1)` is returned.

    **Examples**

    The first few Bernoulli numbers are exactly::

        >>> from mpmath import *
        >>> for n in range(15):
        ...     p, q = bernfrac(n)
        ...     print("%s %s/%s" % (n, p, q))
        ...
        0 1/1
        1 -1/2
        2 1/6
        3 0/1
        4 -1/30
        5 0/1
        6 1/42
        7 0/1
        8 -1/30
        9 0/1
        10 5/66
        11 0/1
        12 -691/2730
        13 0/1
        14 7/6

    This function works for arbitrarily large `n`::

        >>> p, q = bernfrac(10**4)
        >>> print(q)
        2338224387510
        >>> print(len(str(p)))
        27692
        >>> mp.dps = 15
        >>> print(mpf(p) / q)
        -9.04942396360948e+27677
        >>> print(bernoulli(10**4))
        -9.04942396360948e+27677

    .. note ::

        :func:`~mpmath.bernoulli` computes a floating-point approximation
        directly, without computing the exact fraction first.
        This is much faster for large `n`.

    **Algorithm**

    :func:`~mpmath.bernfrac` works by computing the value of `B_n` numerically
    and then using the von Staudt-Clausen theorem [1] to reconstruct
    the exact fraction. For large `n`, this is significantly faster than
    computing `B_1, B_2, \ldots, B_2` recursively with exact arithmetic.
    The implementation has been tested for `n = 10^m` up to `m = 6`.

    In practice, :func:`~mpmath.bernfrac` appears to be about three times
    slower than the specialized program calcbn.exe [2]

    **References**

    1. MathWorld, von Staudt-Clausen Theorem:
       http://mathworld.wolfram.com/vonStaudt-ClausenTheorem.html

    2. The Bernoulli Number Page:
       http://www.bernoulli.org/

    rl   )r   r   )ro   rm   )r   r�   r   )r   r   rm   rj   )
r�   r	   r¹   r    r¡   r‚   r(   r   r   r   )ry   rÈ   r“   rt   r”   r¤   Zpintrz   rz   r{   rÀ   ç  s    G


rÀ   c                 C   s@   | t ttfkr| S ttt| |d ƒ|ƒ}t|t|d |ƒ||ƒS )Nr‹   )r   r   r   Úmpf_psi0r&   r   r§   )Úxrt   rÇ   ru   rz   rz   r{   Úmpf_harmonic„  s    rÓ   c                 C   sN   | d t kr t| d ||ƒt fS tt| t|d ƒ|ƒ}t|t|d |ƒ||ƒS )Nr   r   r‹   )r   rÓ   Úmpc_psi0r\   r   r§   )Úzrt   rÇ   ru   rz   rz   r{   Úmpc_harmonicŠ  s    rÖ   c                 C   sx  | \}}}}|d }|s8| t kr$| S | tks4| tkr8tS | tksL|dkrT|rTtdƒ‚|| dk rŽtt| t||ƒ||ƒ}t|t	t| ||ƒ||ƒS |rä|| dkrät
| |ƒ\}	}
tt	|	|
|ƒt|ƒ|ƒ}ttt| |ƒ|ƒ}t||||ƒS |�s|| |k�rtt| t|ƒ||ƒS t| ƒ}td| ƒd }t}
t| |ƒ} t|> }||k �rnt||ƒD ]}|
||> |  8 }
| |7 } �qN| |8 } |
ttt| | |ƒ|ƒ|ƒ7 }
|
||> d|   7 }
| |  |? }|}d}d}|| |? }td| |ƒ\}}}}|d|  }|dk�r||> |d|   }n|| ? |d|   }|d@ �r8|
|8 }
n|
|7 }
|dk�rX||k�rX�qh|}|d7 }�qÀt|
| ||ƒS )	z_
    Computation of the digamma function (psi function of order 0)
    of a real argument.
    r›   r   zpolygamma poleéûÿÿÿrl   ç)\�Âõ(¼?rm   r   )r   r   r   r   r¾   rÑ   r&   r   r'   r*   rG   r(   r<   rB   r   r�   r   r    r   r   r!   r‚   )rÒ   rt   rÇ   ÚsignÚmanÚexpÚbcrƒ   rÐ   Úcrw   rÈ   r¤   r©   ry   rv   r“   Úx2rx   ÚprevÚbsignÚbmanÚbexpÚbbcÚoffsetr‡   rz   rz   r{   rÑ   �  sb      


 
 
rÑ   c                 C   sê  | \}}|t kr t|||ƒt fS |d }|\}}}}	|r�||	 dkr�t| |ƒ}
t| |ƒ}tt|
||ƒt|ƒ|ƒ}ttt	| |ƒ|ƒ}t||||ƒS |s´|	| |kr´t
t| t	|ƒ||ƒS t|ƒ}td| ƒd }t}||k �rt||ƒD ]"}t|t| |ƒ|ƒ}t| t|ƒ} qät| t	|ƒ} t|t
| |ƒ|ƒ}t|tt| |ƒ|ƒ}t| |ƒ}t	}t}t }d}tt| d ƒ}t|||ƒ}td| |ƒ}t|t|d| |ƒ|ƒ}t|||ƒ}t|dƒ}|dk�rÒt||ƒ�sæt||ƒ�rÒ�qæ|}|}|d7 }�qd|S )zb
    Computation of the digamma function (psi function of order 0)
    of a complex argument.
    rj   rl   rØ   rm   r   r›   )r   rÑ   re   rf   r]   r[   r<   rÔ   rY   rQ   rb   r   r�   rP   r   rg   r\   r   rX   rR   rh   r2   rZ   r‚   r_   r`   rT   r/   )rÕ   rt   rÇ   ÚreÚimrƒ   rÙ   rÚ   rÛ   rÜ   rÝ   rw   rÈ   r¤   Úwry   r“   Úz2rx   rß   ZszprevÚepsÚbernr‡   Úsztermrz   rz   r{   rÔ   Ë  sP    




"rÔ   c                 C   s,   | dkrt ||td�S t| |tf||ƒd S )zm
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a real argument x.
    r   )rÇ   )rÑ   r   Úmpc_psir   )r©   rÒ   rt   rÇ   rz   rz   r{   Úmpf_psi  s    rí   c                 C   sf  | dkrt |||ƒS |\}}|d }|\}}}	}
|d sN|tttfkrNttfS |sz|tkrj|tkrjttfS |tkrzttfS t|ƒ}td| d|   ƒ}t}||k rÜt||ƒD ].}t	||  d |ƒ}t
|||ƒ}t|t|ƒ}q¬t	||  |ƒ}t	|d|ƒ}t|t| ƒ|ƒ}t
|||ƒ}t
|tt|||ƒt|ƒ|ƒ}| d }d}d}t|dƒ}|d |d	  }tt|| d ƒ}t|||ƒ}td| |ƒ}t|||ƒ}t|t|ƒ|ƒ}t|||ƒ}t
|||ƒ}t|dƒ}|dk�rÜt||ƒ�rÜ�q$|| d|  | d|  d  9 }|d| d d| d  9 }|d7 }�qjt|tt| d ƒ|ƒ||ƒ}| d@ �sbt|d ƒt|d ƒf}|S )
zp
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a complex argument z.
    r   rj   r   gš™™™™™Ù?r   rŒ   rm   r›   rl   )rÔ   r   r   r   r   r   r�   rP   r   ra   rX   r\   r   r^   r   r]   r[   r   rT   r2   rZ   r‚   r)   r*   r/   Ú	mpf_gammar$   )r©   rÕ   rt   rÇ   rå   ræ   rƒ   rÙ   rÚ   rÛ   rÜ   rç   ry   rw   r“   rx   Zzmrè   Zintegral_termru   r”   Zmagnré   rê   Zscalr‡   rë   rÐ   rz   rz   r{   rì   
  s`    

 
rì   c                 C   s–   | t krt |  S tg| d  }t}t }|d< td| d ƒD ]L}|d | | d  | | d  }|d| d| d   }||7 }|||< q<|t | < |S )Nr   r   r   rm   )Úborwein_cacher   r   r�   )ry   Zdsrž   rw   r·   rz   rz   r{   Úborwein_coefficients{  s     
rð   rº   c                 C   s–  |d }t | ƒ} | tkr<t|  d |kr<tt|  d ||ƒS | dk r‚| dkrTtdƒ‚| s`ttƒS tt|  d |ƒt| d ƒ||ƒS | |kr˜t	t
d||ƒS | |d k� rüd|>  }}|d||  > 7 }||t|   7 }|dtd|| d  ƒ> 7 }t|| ||ƒS t|ƒ| d  d }|dk �r²t d| d ƒ}|t |d	 d
 ƒd k �r²t
}t|ƒD ]T}t || t |d¡  ƒ}	|	dk �r| �q¦tt
tt|ƒ|  |	ƒ|ƒ}
t||
|ƒ}�qPtt
||ƒS t |d	 d
 ƒ}t|ƒ}t}t| ƒ} t|ƒD ]2}|d| || ||   |> |d |   7 }�qÞ||> ||   }||> d|> d|d |  >   }| tk�r`t|  d |k �sj| tk�r‚|t|| | ƒft| < t|| | ||ƒS )z<
    Optimized computation of zeta(s) for an integer s.
    rj   r   r   rm   zzeta(1) poleg/Ý$�•Û?rŠ   g       @çR¸…ëQ@r‹   r›   ro   )r�   Úzeta_int_cacher#   r¾   r$   r   r*   r‚   r   r.   r   r   r¢   r!   Úfloatr	   r    r¡   r'   r,   r(   rð   r   r   r   )rw   rt   rÇ   rƒ   rx   rv   r©   Zneeded_termsr“   Zpowprecru   ry   rž   rz   rz   r{   r¨   Œ  sR    "

0 &r¨   c                  C   s  | \}}}}|s8| t kr(|r tS ttƒS | tkr4tS tS |d }|sj|| t |d¡d krjtt|||ƒS |dkrÖ|rÆ| tkrˆt	||ƒS t
t| ƒ|t| ƒ}	tttttt| |ƒ|ƒ|ƒ}
t|	|
||ƒS t
t| ƒ||ƒS |�rœ|�rtttttt| |ƒ|ƒ|ƒ}
tt| |ƒ|
||ƒS tt| d| ƒ}t||ƒ}t||ƒ}tt| dƒ|ƒ}|td|| ƒ }t|| ƒ}ttt|dƒ| |ƒ||ƒ}t|t|t|||ƒ|ƒ||ƒS tt| |ƒ}t|ƒ\}}}}d||  }||k�r|�rÞt	||ƒS ttt||ƒƒ}
t|
t|ƒ||ƒS n|td|ƒ7 }t}t|d d	 ƒ}t|ƒ}t}t| |ƒ}t|ƒ}t |ƒD ]\}| t!|d ||ƒ |? }t"|||ƒ}|| ||  | }|d@ �rœ||8 }n||7 }�qJ|||   }t#|| |ƒ}|�rÖt$|||ƒS tttttt| |ƒ|ƒ|ƒ}
t||
||ƒS d S )
Nrj   rm   r   r›   ro   r   rŒ   rñ   r‹   )%r   r   r$   r   r   r   r    r¡   r.   r@   r¨   r   r3   r'   rC   r   r(   Úmpf_zetarî   rI   r2   r¢   r<   r*   r%   r&   r§   r   r�   rð   r    r>   r   r?   rO   r!   r#   ) rw   rt   rÇ   ÚaltrÙ   rÚ   rÛ   rÜ   rƒ   rÕ   rÈ   Úyru   r”   rÝ   Úwp2r†   rž   ÚrÚasignÚamanÚaexpÚabcÚ	pole_distrx   ry   ZsfÚln2r“   rÎ   Zemanrç   rz   rz   r{   rô   Á  sx    







rô   Fc           0      C   sÊ  | \}}|t kr"t||||ƒt fS |s>tt| dƒt|ƒƒr>t‚|d }tt| |ƒ}t|dƒ\}	}
}}d||  }||k�r|rÚt|ƒ}t	|t
|ƒ|ƒ}tt	|||ƒdƒ}t||ƒ}t|t|ƒ|ƒ}t|||ƒ}t|||ƒS ttt||ƒƒ}t|t
|ƒ|ƒ}t|||ƒS n|td|ƒ7 }t|t ƒ�r|�rXtttttt| |ƒ|ƒ|ƒ}tt| |ƒ|||ƒS tt| d| ƒ}t||ƒ}t||ƒ}tt| dƒ|ƒ}|\}}}}|\}}}}t|| || ƒ}|td|ƒ }t|| ƒ}t|dƒt f} tt| | |ƒ||ƒ}!t|t|t||!|ƒ|ƒ||ƒS t|d d ƒ}"|"td	tt |ƒƒ ƒ7 }"t!|"ƒ}!t"||ƒ}#t"||ƒ}$t#}%t#}&t$|> }'t$d
| > }(|t%k})t&|ƒ}*t'|d ƒ} || }t(|"ƒD ]´}+t)|+d ||*ƒ},|)�rÌ|(t*|+d |> ƒ }-nt+|# |, |? |ƒ}-|+d@ �r |-|!|" |!|+  9 }-n|-|!|+ |!|"  9 }-t,|$ |, |? || ƒ\}.}/|%|-|. |? 7 }%|&|-|/ |? 7 }&�qœ|%|!|"   }%|&|!|"   }&t-|%| |ƒ}%t-|&| |ƒ}&|�r t|%|&f||ƒS tttt||ƒ|ƒ}t|%|&f|||ƒS d S )Nr›   rj   rŒ   ro   r   r   rñ   r‹   gÍÌÌÌÌÌì?rm   ).r   rô   r1   rT   r   ÚNotImplementedErrorrY   rQ   r@   r(   r§   r2   r'   r]   r$   r\   rV   rW   r[   r¢   r0   rd   rS   rZ   Úmpc_zetaÚ	mpc_gammarf   rU   r<   r^   r�   r�   r   rð   r    r   r   r   r>   r=   r   r?   r   rO   rN   r!   )0rw   rt   rÇ   rõ   Úforcerå   ræ   rƒ   rø   rù   rú   rû   rü   rý   rÈ   rö   ÚgrÕ   ru   r”   rÝ   ZrsignZrmanZrexpZrbcZisignZimanZiexpZibcÚmagr÷   r†   Úpi2rž   ry   ÚrefZimfÚtreÚtimrv   Úone_2wpÚcritical_linerþ   r“   r¡   rç   ÚwreÚwimrz   rz   r{   r     s”    

ÿÿ




r   c                 C   s   t | ||dƒS ©Nr   )rô   ©rw   rt   rÇ   rz   rz   r{   Úmpf_altzetar  s    r  c                 C   s   t | ||dƒS r  )r   r  rz   rz   r{   Úmpc_altzetau  s    r  c                 C   sN   |dkr| S t |> }|rJ|d@ r4||  |? }|d8 }| |  |? } |d }q|S )Nr   rm   rs   )rÒ   ry   rƒ   rö   rz   rz   r{   Ú	pow_fixed|  s    
r  c                 C   sâ   | t tƒk r8t}td t t|ƒ¡d … }t}|||fS dg| d  }dg| d  }t| ƒ}|D ]"}t|| d |ƒD ]}|||< qtq`t|ƒD ]>\}}|dkrŒd}|| } | | sÂ| | } |d7 }q¨|||< qŒ|a|a|a|||fS )Nr   r   rm   )	ÚlenÚsieve_cacheÚprimes_cacheÚindexr¢   Ú
mult_cacher	   r   Ú	enumerate)ry   Úsiever¶   Úmultr¤   r“   r·   r©   rz   rz   r{   Ú
primesieve�  s.    


r  c                 C   s¼  |dk rt dƒ‚t|| ƒ\}}}i }	t|> }
td| > }|| }t|ƒ}t|d ƒ}|D �] }|d || krv �q^t|||ƒ}t| | |? ||ƒ\}}| r²|t||> ƒ }nt| | |? |ƒ}|| |? }|| |? }||fg|	|< || }}t	dt
t || |¡d ƒd ƒD ]B}|| ||  |? || ||  |?  }}|	|  ||f¡ �qqZt}t}|dk�rx||
7 }t|dƒ}t||| d ƒD �]}|| }||	k�r6|| }|	| |d  \}}|||  }|dk�râ�q || }|| }|	| |d  \}}|| ||  |? || ||  |?  }}�qÈnjt|||ƒ}t| | |? ||ƒ\}}| �rt|t||> ƒ }nt| | |? |ƒ}|| |? }|| |? }||7 }||7 }�q”||fS )Nr   za cannot be less than 1rm   g{®Gáz„?)r¾   r  r   r>   r=   r?   rN   r   rO   r�   r�   r    r¡   Úappendr   r¢   r   )r
  ÚsreÚsimru   ry   rƒ   r  r¶   r  Zbasic_powersrv   r	  r÷   rþ   r  r¤   r¡   ÚcosÚsinrÎ   ÚpreZpimr  r  r©   ÚxreÚximZaar“   rz   rz   r{   Úzetasum_sieved¨  sf    

&*



0r#  r›   c           !         s"  ˆ d ‰t |ƒ}|dgk}t|ƒdk}| \}}	|tk}
t|ˆƒ}t|	ˆƒ}	|dkr´|tkr´|s´|s´|dk sttjdkr´t|
||	||ˆƒ\}}t|ˆ ˆ dƒt|ˆ ˆ dƒfg}|g fS t	|ƒ}|sÌt
|d ƒ}dd„ |D ƒ‰d	d„ |D ƒ‰|�rd
d„ |D ƒ‰dd„ |D ƒ‰ng  ‰‰tˆ> }tdˆ > }tˆƒ}tˆd ƒ}ˆˆ }t||| d ƒD �]è}t|ˆ|ƒ}t|	 | ˆ? ˆ|ƒ\}}|
�rš|t||> ƒ }nt| | ˆ? ˆƒ}|| ˆ? }|| ˆ? }|�rð|||  }|| ˆ? }|| ˆ? }|�rø|�rpt||ˆƒ}ˆd  || ˆ? 7  < ˆd  || ˆ? 7  < |�röˆd  || ˆ? 7  < ˆd  || ˆ? 7  < n†tˆ> }|D ]x}ˆ|  || ˆ? 7  < ˆ|  || ˆ? 7  < |�ræˆ|  || ˆ? 7  < ˆ|  || ˆ? 7  < || ˆ? }�q|nFˆd  |7  < ˆd  |7  < |�rVˆd  |7  < ˆd  |7  < �qV|�ræ|�r˜|d �ræˆd  ˆd< ˆd  ˆd< |�ræˆd  ˆd< ˆd  ˆd< nN‡fdd„|D ƒ‰‡fdd„|D ƒ‰|�ræ‡fdd„|D ƒ‰‡fdd„|D ƒ‰‡ ‡fdd„tˆˆƒD ƒ}‡ ‡fdd„tˆˆƒD ƒ} || fS )zI
    Fast version of mp._zetasum, assuming s = complex, a = integer.
    r›   r   r   g    ÐƒAl        ry   c                 S   s   g | ]}t ‘qS rz   ©r   r«   rz   rz   r{   r³   ÿ  s     zmpc_zetasum.<locals>.<listcomp>c                 S   s   g | ]}t ‘qS rz   r$  r«   rz   rz   r{   r³      s     c                 S   s   g | ]}t ‘qS rz   r$  r«   rz   rz   r{   r³     s     c                 S   s   g | ]}t ‘qS rz   r$  r«   rz   rz   r{   r³     s     rm   c                    s   g | ]}d | ˆ |  ‘qS ©ro   rz   r«   )r!  rz   r{   r³   <  s     c                    s   g | ]}d | ˆ |  ‘qS r%  rz   r«   )r"  rz   r{   r³   =  s     c                    s   g | ]}d | ˆ |  ‘qS r%  rz   r«   )Úyrerz   r{   r³   ?  s     c                    s   g | ]}d | ˆ |  ‘qS r%  rz   r«   )Úyimrz   r{   r³   @  s     c                    s0   g | ](\}}t |ˆ ˆ d ƒt |ˆ ˆ d ƒf‘qS r­   ©r!   )r¬   ZxaÚxb©rt   rƒ   rz   r{   r³   A  s   ÿc                    s0   g | ](\}}t |ˆ ˆ d ƒt |ˆ ˆ d ƒf‘qS r­   r(  )r¬   ZyaZybr*  rz   r{   r³   C  s   ÿ)Úlistr  r   r    ÚZETASUM_SIEVE_CUTOFFÚsysÚmaxsizer#  r!   r¢   r�   r   r>   r=   r   r?   rN   r   rO   r  Úzip)!rw   ru   ry   ZderivativesZreflectrt   Zhave_derivativesZhave_one_derivativer  r  r
  rå   ræ   ZxsZmaxdrv   r	  rþ   r  r÷   rç   r¡   r  r  rÎ   Zxterm_reZxterm_imZ
reciprocalZyterm_reZyterm_imrx   rž   Zysrz   )rt   rƒ   r"  r!  r'  r&  r{   Úmpc_zetasumä  sª    


ÿÿÿ"
ÿÿr0  iˆ  i˜:  gš™™™™™É?é–   c                 C   s   g | ]}t t|ƒƒ‘qS rz   )r   r
   )r¬   ry   rz   rz   r{   r³   \  s   ÿr³   c                    sŒ  d‰ |ˆ  ‰t g| d  }tˆƒ}tˆ> }| d |d< ttˆƒdƒ}t|ˆƒ }}g }d}	ˆd|	  }
|
dk rrqâttt|t|
ƒ|
ƒ}t	|t	|||
ƒ|
ƒ}t
|ˆƒ}t
|ˆƒ}|	| | ˆ? }| ||f¡ t	||ˆƒ}|	d7 }	q\td| d dƒD ]€}t }d}	|D ]b\}}|d dk�r&||	|  }n |d d }|||  |	|  }|�sR �qf||7 }|	d7 }	�qd| ||< qò‡fd	d
„t| d ƒD ƒ}tttˆƒdƒdˆƒ }}t|tdƒˆƒ}td| d dƒD ]L}t	|| |ˆƒ}t
|ˆƒ||< t	||ˆƒ}t|t|d |d  ƒˆƒ}�qÈ|ˆ> | }td| d dƒD ]�}|d d }|d| d  d| d  d }td|d ƒD ]2}	||d|	  |d| d d|	    ˆ? 8 }�qp||  d| | ˆ? 7  < �q2td| d dƒD ]¤}|d d }|d| d  d| d  }tdd| d ƒD ]B}	|d|	 d |	 |d|	   |d| d d|	    ˆ? 7 }�q||  || ˆ? d|  7  < �qÔ‡ fdd
„|D ƒS )a  
    zeta(n) = A * pi**n / n! + B

    where A is a rational number (A = Bernoulli number
    for n even) and B is an infinite sum over powers of exp(2*pi).
    (B = 0 for n even).

    TODO: this is currently only used for gamma, but could
    be very useful elsewhere.
    rŠ   rm   r   r   r½   rl   r   rŒ   c                    s   g | ]}t t|ˆ ƒƒ‘qS rz   )r%   r‚   )r¬   r“   r²   rz   r{   r³   ˜  s     zzeta_array.<locals>.<listcomp>r´   r‹   ro   c                    s   g | ]}|ˆ ? ‘qS rz   rz   ©r¬   rÒ   )r£   rz   r{   r³   ®  s     )r   r=   r   r2   r<   rA   r*   r   r'   r(   r    r  r   r,   r   )r’   rt   Úzeta_valuesr†   rv   Zf_2piZ	exp_2pi_kZexp_2piZexps3r“   ÚtpÚq1Úq2ry   rw   Úe1Úe2rx   r¥   r—   Zpi_powZfpirÕ   Zreciprocal_pirz   )r£   rƒ   r{   Ú
zeta_array_  sp    


  0 @$r9  c           	         sÄ  | dk r| d| d   ‰n| dk r4| d| d   ‰n| ‰ˆt krLt ˆ ˆfS ˆdk rftˆd d ƒ}ntˆd d ƒ}t D ]J‰ ˆ ˆkrz‡ ‡fdd	„t ˆ  | d
… D ƒ}| dk r¸|t ˆ< |ˆf  S qzˆdkrÚtˆd ƒ‰ˆd }dg| }t|d< t|> |d< t|ƒ|d< t||ƒ}td|ƒD ]j}|d  ||d   |? }td|ƒD ]*}|d| ||  |||   |? 7 }�qH|d|  }|||< �q dd	„ |D ƒ}|d
d
d… }|d
d… }|t ˆ< t| ƒS )zÚ
    Gives the Taylor coefficients of 1/gamma(1+x) as
    a list of fixed-point numbers. Enough coefficients are returned
    to ensure that the series converges to the given precision
    when x is in [0.5, 1.5].
    i�  r›   rº   rŠ   gR¸…ëQè?rm   gÉv¾Ÿ/é?c                    s   g | ]}|ˆ ˆ ? ‘qS rz   rz   r2  ©Zcprecrt   rz   r{   r³   Ë  s     z-gamma_taylor_coefficients.<locals>.<listcomp>Ng333333ó?rj   r   r   rl   ro   c                 S   s   g | ]}|d ? ‘qS )rj   rz   )r¬   ru   rz   rz   r{   r³   â  s     )Úgamma_taylor_cacher�   r   r   r‘   r9  r   Úgamma_taylor_coefficients)	Zinprecr’   Úcoeffsrƒ   r˜   r3  r“   ru   r•   rz   r:  r{   r<  °  sF    "

(r<  c                 C   sL  ||d ? t  d? }t |> }t|ƒ\}}	|dkrø|}
t|d ƒD ]}||8 }|
| |? }
q@||8 }t}|D ]}||| |?  }qj||	| L }|dkr¬t|
|> | | ||ƒS |dkrÌtt||
|> ||ƒ|ƒS |dkrôttt|
|> | | ƒƒ||ƒS �nP|}
t| ƒD ]}|
| |? }
||7 }�qt}|D ]}||| |?  }�q*||	| L }|t	t
|ƒƒ dk�ræt| t| ƒƒ}t||
 | | ƒ}
t|
||ƒ}
|dk�r¬tt|
||ƒS |dk�rÂt|
||ƒS |dk�rHtttt|
|ƒƒ||ƒS nbt|| |
 d| ƒ}
|dk�rtt|
||ƒS |dk�r*t|
||ƒS |dk�rHttt|
ƒ||ƒƒS d S )Nr   r   rm   rl   r›   éýÿÿÿ)r   r<  r   r   r!   r2   r"   rB   r%   r5   r�   r&   r   r(   r*   r   r#   r$   )ZxmpfrÒ   rƒ   rt   rÇ   ÚtypeZnearest_intrv   r=  Zcwprø   r·   r¤   rÝ   r  rz   rz   r{   Úgamma_fixed_tayloré  sX    $



 
 
 r@  c                 C   sT   | t krt |  S t| ƒ\}}|t| | d  ƒ9 }||tt|ƒƒt|ƒft | < t |  S r  )Úgamma_stirling_cacherÀ   r   r5   r�   )ry   r¤   rÈ   rz   rz   r{   Ústirling_coefficient  s    rB  c                 C   s,  t || > |  }|| |? }t|ƒ|  }||d 7 }|| |? }||d 8 }|| |? }||d 7 }|| |? }||d 8 }|| |? }|s�|S ||d 7 }|| |? }|d| d 8 }|| |? }||d 7 }|| |? }|sä|S |d	| d
 8 }|| |? }|d| d 7 }|| |? }|d| d 8 }|| |? }|�sB|S d}tt|ƒƒ}tt|ƒƒ}d}t|ƒ\}	}
}}|| | }| }|| }|dk�r°||k �r°|	|L }	||8 }|| }|dk�rÞ||k �rÞ||? }||8 }n|}||	 |
 |? }|�sü�q(||7 }|| |? }||| 8 }|d7 }�qb|S )zr
    Sums the rational part of Stirling's expansion,

    log(sqrt(2*pi)) - z + 1/(12*z) - 1/(360*z^3) + ...

    rŽ   éh  éì  é�  é¤  é³  é¨ éœ   é!  é Þ é[«  éÜ¹ éª éØé é   r   rm   )r   rJ   r5   r�   rB  )rÒ   rt   rx   rÎ   rw   r“   ÚusizeÚtsizeÚtexpr¤   rÈ   ÚpbÚqbÚterm_magÚshiftr©   rç   r‡   rz   rz   r{   Úreal_stirling_series"  sj                 
rX  c                 C   sÆ  | |  ||  |? }| |> | }| |> | }|| ||  |? }|| |d ? }t |ƒ|  }| }	||d 7 }|	|d 7 }	|| ||  |? || ||  |?  }}||d 8 }|	|d 8 }	|| ||  |? || ||  |?  }}||d 7 }|	|d 7 }	|| ||  |? || ||  |?  }}||d 8 }|	|d 8 }	|| ||  |? || ||  |?  }}t|ƒt|ƒ dk �rŠ||	fS ||d 7 }|	|d 7 }	|| ||  |? || ||  |?  }}|d| d	 8 }|	d| d	 8 }	|| ||  |? || ||  |?  }}||d
 7 }|	|d
 7 }	|| ||  |? || ||  |?  }}t|ƒt|ƒ dk �rv||	fS |d| d 8 }|	d| d 8 }	|| ||  |? || ||  |?  }}|d| d 7 }|	d| d 7 }	|| ||  |? || ||  |?  }}|d| d 8 }|	d| d 8 }	|| ||  |? || ||  |?  }}t|ƒt|ƒ dk �rr||	fS d}
ttt|ƒt|ƒƒƒ}ttt|ƒt|ƒƒƒ}d}t|
ƒ\}}}}|| | }| }|| }|dk�rô||k �rô||L }||8 }|| }|dk�r*||k �r*||? }||? }||8 }n|}|}|| | |? }|| | |? }t|ƒt|ƒ dk �rl�q¾||7 }|	|7 }	|| ||  |? || ||  |?  }}||| 8 }|
d7 }
�q¦||	fS )Nr   rŽ   rC  rD  rE  r‹   rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  r   rm   )rJ   r�   r5   r¢   rB  )rÒ   rö   rt   Ú_mr  r  ZureZuimr  r  r“   rQ  rR  rS  r¤   rÈ   rT  rU  rV  rW  r©   r  r  ZtermreZtermimrz   rz   r{   Úcomplex_stirling_seriesW  s’     * * * *  * * *  * * * 
ÿrZ  rž   c           #      C   s  | \}}}}|sT| t kr8|dkr$tS |dkr0t S tdƒ‚| tkrP|dkrLt S tS tS |dkr�|d }|| |kr�|s�tt| t| |ƒ|ƒ| ||ƒS |dk}	|	�r<|r¶|dkr®t S tdƒ‚||> }
|
tk �rJ|dkrät	t
|
d  ||ƒS |dkrüt	t
|
 ||ƒS |dk�rttt
|
d  ||ƒS |dk�rJtt
|
d  ||ƒS nt|| ? ƒ}
|| }|
| }|dk�rn|d }n|t|ƒ d }|| k �r
|dk�r²ttt| |ƒtt| ƒ||ƒS |dk�rÊtt| ||ƒS |dk�rìt| tt|| ƒ||ƒS |dk�r
ttt| ƒ||ƒƒS |dk�r(tt| tƒ||dƒS |dk�rD|	�r¦|d| k �r¦|dk�rdtt|
d ƒ||ƒS |dk�r„ttt|
d ƒ||ƒS |dk�r¦ttt|
d ƒƒ||ƒS |
d	k �s¾|d| k �rD|�r~t|ƒ}|
d �rètd|
 d ƒ}ntd|
 d ƒ }|dk�r"tt||||ƒ| |
 d ƒS |dk�rHtt||||ƒ||
 d ƒS |dk�rDttt|t|ƒ||ƒ| |
 d ƒ||ƒS nÆ|
dk�rÔ|dk�rœt||ƒS |dk�r¸ttt|ƒ||ƒS |dk�rDtt|ƒ||ƒS npt|ƒ}t|td|
 d ƒ | |
 ƒ}|dk�rt	|||ƒS |dk�r*tt|||ƒS |dk�rDtt|ƒ||ƒS || }|dk�r`||> }n
|| ? }|dk�rt|�stt|> }t|| ƒ}t|d|  ƒ}|tt||ƒƒ }|dk�rttt| ƒ}tt| ƒ}|d |d  }|d |d  }|| k �rtt|ƒtt| ƒ||ƒS || k �r<tttt|ƒƒt| tƒ||ƒS |t| | ƒ7 }|| }|dk�rj||> }n
|| ? }tt | ƒ}|
td	|ƒk �r¸|t!k �r¸|�r¦| }t"| |||||ƒS | }d}|
|k �r"t|>  }}||
 }t#|ƒD ]}|| |? }||7 }�qæt|| ƒ } }|�r*t| ƒ} nt| ƒ}t$||ƒ}t%t||ƒ|ƒ} |t|d >  |  |? } || 7 }t|| ƒ}|�rVtt&||ƒ||ƒ}!tt'|ƒƒ}"|dk�s¨|dk�rt|!t(||ƒƒ}!|�rÒt|"t|| ƒ|ƒ}"|dk�rêt|"|!||ƒS |dk�rt|!|"||ƒS |dk�r|�r&t|"t|| ƒ|ƒ}"ttt|!ƒ|ƒ||ƒ}!ttt|"ƒ|ƒ|!||ƒS n¬|dk�rŽ|�r‚tt(||ƒt|| ƒ||ƒS t(|||ƒS |dk�rÊ|�rºtt|| ƒt(||ƒ||ƒS t(t|ƒ||ƒS |dk�r|�röt|tt|| ƒ|ƒ||ƒS t	|||ƒS d
S )a�  
    This function implements multipurpose evaluation of the gamma
    function, G(x), as well as the following versions of the same:

    type = 0 -- G(x)                    [standard gamma function]
    type = 1 -- G(x+1) = x*G(x+1) = x!  [factorial]
    type = 2 -- 1/G(x)                  [reciprocal gamma function]
    type = 3 -- log(|G(x)|)             [log-gamma function, real part]
    r   rm   zgamma function polerl   rj   r   ro   r›   r€   N))r   r   r¾   r   r   r'   r(   rB   ÚSMALL_FACTORIAL_CACHE_SIZEr#   Úsmall_factorial_cacher*   r�   r5   r2   r&   r$   r%   rî   r   r
   r"   r   rL   r   r�   rM   r!   Úminr   r§   r¢   ÚGAMMA_STIRLING_BETAÚMAX_GAMMA_TAYLOR_PRECr@  r   rX  r    rI   r<   rA   )#rÒ   rt   rÇ   r?  rÙ   rÚ   rÛ   rÜ   rƒ   Ú
is_integerry   r  Ú
gamma_sizerç   Úfrä   Zabsxmanrv   Zone_distZtwo_distZcancellationZxsub1Zxsub2Zxsub1magZxsub2magÚn_for_stirlingZxorigrø   rž   r“   Zxabsrö   rÎ   r˜   r—   rz   rz   r{   rî   Ÿ  sf      






 
 
 





 


 ÿÿ ÿ

 

 
  
 
 
 
 




  ÿ
 










  ÿ
  ÿ
rî   c           F      C   s&	  | \}}|\}}}}	|\}
}}}|t kr~|dkrl|rlt|||dƒ}| | ? }tt|d ƒ|||ƒ}||fS t||||ƒt fS |s†|sŽ|s–|r–ttfS |d }||	 }|| }|r¾t||ƒ}n|}|dk �rn|| k �rZt| tt| | |ƒt	|ƒ|ƒ|ƒ}|dk�rt
|||ƒS |dk�r&t| |||ƒS |dk�r<t|||ƒS |dk�rntt
||ƒ||ƒS n|dk�rn|| 7 }|dk�r®||k�r®|�r’||k�r®tt| t| |ƒ|ƒ| ||ƒS |dk�rÐtt|tƒ|f||dƒS tt|ƒƒ}tt|ƒƒ}t||ƒ}|| }|dk�rn|t|ƒ7 }|}| }|�rPt| ƒ} | d  \}}}}	}| d  \}
}}}}d}d}|dk �r–|dk�rþt| tƒ}|d t k�rŒ| }n t|d d |d d  |ƒ }||k�rt|ƒ} t|| |ƒ}!t|!|!|ƒ}!t|!td	ƒ|ƒ}!t|tt	|ƒƒ|ƒ}"t|!|"|ƒ}|�s,t|||ƒS n|dk�r,||7 }t| tƒ}#|#d t k�rL| }$n t|#d d |#d d  |ƒ }$|$|k�rìt|ƒ} tt| | ƒtd
ƒƒ}%tt|#|#|ƒ|%|ƒ}!t|!td	ƒ|ƒ}!t|#ttt	|ƒƒ|ƒ}"t|!|"|ƒ}|�sþt|||ƒS n|$dk�rþ||$7 }|| k �rŒd|d  }&t|ƒ}'tt|| ƒ}(t|'|&|d�})tt|'|(ƒ|&|d�}*tt|*|)|&ƒ|(|&ƒ}+t||+||ƒ}"|)|"f}|�s–t|||ƒS n
|| 7 }||7 }t t!| ƒ},||,k }-t"||ƒ}.t"||ƒ}/d}0|�sò| }1||,k �r†t#||ƒ}t d|,d  |d  d | ƒ}2t$|>  }3}4t%}5t&|2ƒD ]8}6|.|3 |/|5  |? |.|5 |/|3  |?  }3}5|.|47 }.�q t'|3| ƒt'|5| ƒf}0t'|.| ƒ}||f} t(|.|/|ƒ\}7}8t| |ƒ\}9}:t"|9|ƒ}9t"|:|ƒ}:|9|. |:|/  |? |9d?  |7 }7|9|/ |:|.  |? |:d?  |8 }8t'|7| ƒt'|8| ƒf}"|0�rò|dk�ròt|"t|0|ƒ|ƒ}"t)|1d ƒ};t)|1d ƒ}<t* +|;|<¡}=t)|"d ƒ}>t* ,|<|;¡}?|=dk�r†d|< |? }@n$|< d|?  |;|?  |<t* -|=¡  }@t t* .|@|> dt*j/  d ¡ƒ}|"d t|"d tt|ƒd| |ƒ|ƒf}"|�r¨|dk�s|dk�r®tt0||ƒ||ƒ}Att|ƒƒt f}B|�rZ|dk�rLt|A||ƒ}Ant|A||ƒ}Ant|At1|"|ƒ|ƒ}A|0�r~t|B|0|ƒ}B|dk�r–t|B|A||ƒS |dk�r®t|A|B||ƒS |dk�	r"|�rÈt|ƒ}Cnt|"ƒ}Ct|Ctt|ƒ|ƒ|ƒ}Ct2|d ƒ}Dt3|d ƒ}Et|ƒ} t| |Dƒ}%t|%|E|ƒ}%|Cd t|Cd |%|ƒf}Ct4|Ct5| |ƒ|ƒ}Ct0t||Dƒ|ƒ}%t|%|ƒ}%t|C|%|ƒ}C|E�sšt| t2|Dƒ|ƒ}%|Cd t|Cd |%|ƒf}Ct|C||ƒS nz|dk�rØ|0�rÌtt1|"|ƒ|0||ƒS t1|"||ƒS |dk�	r|0�rüt|0t1|"|ƒ||ƒS t1t|"ƒ||ƒS |dk�	r"t|"||ƒS d S )Nrl   r›   rj   iøÿÿÿr   r   rm   iöÿÿÿrŽ   r�   )r?  r}   g@KW°�xâ?)6r   rî   r)   r<   r   r¢   rX   r]   rZ   r§   rg   r[   rV   rb   rY   r  r&   r   r�   r   r5   rW   ri   r^   r   r$   r   r'   r(   r%   r2   r*   r�   r^  r    Úcomplexr   r   r   r!   rZ  r6   r    ÚhypotÚatan2r¡   Úfloorr†   rf   rc   r7   r8   r\   rB   )FrÕ   rt   rÇ   r?  ru   r”   rù   rú   rû   rü   rà   rá   râ   rã   rå   ry   ræ   rƒ   ZamagZbmagr  rÐ   ZanZbnZabsnra  Zneed_reflectionZzorigZyfinalZbalance_precZzsub1Zcancel1r†   rÒ   rö   Zzsub2Zcancel2rx   ÚppZaabsré   Úx1rÞ   Zxprimerc  Zneed_reductionZafixZbfixrø   Zzpreredrž   Zrrerv   Zrimr“   r&  r'  ZlreZlimZzfaZzfbZzfabsZyfbrÎ   Úgir˜   r—   Ús1ZrezfloorZimzsignrz   rz   r{   r  m  s`   
 
 
 
 
 

$





 


 






 *

  
$ (

 
 






r  c                 C   s   t | ||dƒS r  ©rî   ©rÒ   rt   rÇ   rz   rz   r{   Úmpf_factorialW  s    rn  c                 C   s   t | ||dƒS r  ©r  rm  rz   rz   r{   Úmpc_factorialZ  s    rp  c                 C   s   t | ||dƒS ©Nrm   rl  rm  rz   rz   r{   Ú
mpf_rgamma]  s    rr  c                 C   s   t | ||dƒS rq  ro  rm  rz   rz   r{   Ú
mpc_rgamma`  s    rs  c                 C   s"   | \}}}}|rt ‚t| ||dƒS )Nrl   )r9   rî   )rÒ   rt   rÇ   rÙ   rÚ   rÛ   rÜ   rz   rz   r{   Úmpf_loggammac  s    rt  c                 C   sr   | \}}|\}}}}|\}	}
}}|t krd|rdt|||dƒ}| | ? }tt|d ƒ|||ƒ}||fS t| ||dƒS )Nrl   r›   )r   rî   r)   r<   r  )rÕ   rt   rÇ   ru   r”   rù   rú   rû   rü   rà   rá   râ   rã   rå   ry   ræ   rz   rz   r{   Úmpc_loggammai  s    ru  c                 C   s,   | t k rtt| d  ||ƒS tt| ƒ||ƒS r  )r[  r#   r\  rî   r   )ry   rt   rÇ   rz   rz   r{   rÏ   t  s    rÏ   )N)N)rž   r   )rž   r   )rž   )rž   )rž   )rž   )rž   )rž   )µÚ__doc__r    r-  Úbackendr   r   r   r   r   r   Z
libintmathr	   r
   r   r   Zlibmpfr   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*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   Z	libelefunr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   ZlibmpcrP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   r|   r‰   r™   rŸ   r‘   rª   r¸   r§   Z	mpf_aperyZmpf_khinchinZmpf_glaisherZmpf_catalanZmpf_mertensZmpf_twinprimerÁ   rÃ   rÅ   rÆ   r¹   r¿   r‚   rÂ   rÀ   rÓ   rÖ   rÑ   rÔ   rí   rì   rï   rð   ZZETA_INT_CACHE_MAX_PRECrò   r¨   rô   r   r  r  Zmpf_zetasumr  r  r  r  r  r#  r,  r0  r_  ÚAssertionErrorr^  r[  r;  rA  r�   r\  r9  r<  r@  rB  rX  rZ  rî   r  rn  rp  rr  rs  rt  ru  rÏ   rz   rz   rz   r{   Ú<module>   s²   ¼`
p
$
A
=
#


	#
K
 ;6	o5WZ:k
ÿQ915H
 O
 k





