
    [h-                       S r SSKrSSKrSSKJr  SSKJrJrJrJrJ	r	  SSK
JrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<  SSK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrS  SS	KTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrn  \>S
 5       ro\>S 5       rp\>S 5       rq\>S 5       rr \>S 5       rs\>S 5       rt\>S 5       ru\?" \s5      rv\?" \r5      rw\?" \p5      rx\?" \q5      ry\?" \o5      rz\?" \t5      r{\?" \u5      r|Sr} 0 r~\!" S5      r\!" S5      rS r\" \}5      rS>S jrS>S jrS r S rS r\4S jr\4S jr\4S jr\4S jr 0 rS rSr0 r\4S  jr\S4S! jr\SS"4S# jr\4S$ jr\4S% jrSrS& r/ q/ q/ qS' rS( rS)rS* rS+r\S,:  d   eS-rS.r0 r0 r\" \S-   5       V s/ s H  n \!" \" U 5      5      PM     sn rS/ rS0 rS1 rS2 rS3 rS4 rS?S5 jrS?S6 jrS@S7 jrS@S8 jrS@S9 jrS@S: jrS@S; jrS@S< jr\4S= jrgs  sn f )Aao  
-----------------------------------------------------------------------
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                    U S-   n [         U -  =pSu  p4nU(       ai  USUS-  -  SU-  S-
  -  -  nUSSU-  -
  SUS-  -  -   S-  -  nUSUS-
  -  -  S	US-  -  S
U-  -
  S-   -  US-  SU-  S-
  -  -  nX4-  nUS-  nU(       a  Mi  US-	  $ )N   )r   r   r             r      (         r   )precaonestns         N/var/www/auris/envauris/lib/python3.13/site-packages/mpmath/libmp/gammazeta.pycatalan_fixedr}   H   s    "9DoAGA!
	R!Q$Y!A#a%  	qAvbAg~!!qsOr!Q$wr!t|A~.1a41Q3q5>B		Q ! =    c                 8   [        X S-  -   S-   5      n[        n[        S5      n[        U-  =pE[	        U5      n[        [        XfU5      S5      =pxSn	 [        [        SU	-  U5      5      n
[        XU5      n
[        XU5      n
[        X5      n
X-
  U-  U	-  U-	  nUS:  a  OFX+-  nXESU	-  S-   -  USU	-  -  -
  -  nU	S-  n	[        USU	-  SU	-  S-
  -  U5      n[        XxU5      nM  X!-  [        U5      -  n[        [        X!* 5      U5      n[        X5      nU$ )N      ?      ro   r   d   )intr   r   r   r=   r3   r)   r&   mpf_bernoullir+   r!   r*   r?   rB   r"   )rv   wpry   facrz   ONEpipipowtwopi2r{   zeta2ntermKs                r|   khinchin_fixedr   m   sF   	T#I"	#BA
1+CmA	Bwrr2A66E	A
qsB/0+b)&%,!#)b0#: 	
		1Q3q5\C!A#J&&	Q#!ac!e}b1r*  
Yr]"AQ$b)AAHr~   c           	      Z   U S-   n[        SU -  S-   5      n[        U-  n[        n[        SU5       H  nU[	        XQ5      US-  -  -  nM     [	        X!5      nXCU-   U-  -  nXFUS-  S-  -  -  nUS-  nSnSn	Sn
[        S5      nSn X-  X-  -   U-  n[        X* 5      n[        SU-  U5      n[        XU5      n[        XU5      n[        X5      n[        U5      S:  a  ORXN-  nXU
-  -
  U
* U	-  Xr-  U
S-   4u  ppzXU
-  -
  U
* U	-  Xr-  U
S-   4u  ppzUS-  n[        USU-  SU-  S-
  -  U5      nM  [        U5      nUS	-  nXA-  US-  U-	  -  nU[        U5      -  nU[        [        [        SU-  U* 5      U5      U5      -  nUS
-  n[!        [        XA* 5      U5      n[        UU 5      $ )N   gQ?   ro   rn   r   r         )r   r   r   ranger@   r   r"   r   r)   r+   r!   absr*   r>   euler_fixedrC   rB   )rv   r   Nr   ry   klogNpNrw   bjr   DBr   r   As                    r|   glaisher_fixedr      s   	B 	DIMA
R-CA1a[	]1!QT))  D *	A!Q$(	A	
AB	A
A	A
1+C	A
gB&C !A#r"qR t"%!t9s? 	
	!eaRT241,b!eaRT241,b	Q#!ac!e}b1# & 
"BFA	
b!erk"ARA',qtbS126	;;A"HAQ$b)AAtr~   c                     U S-  n [         U -  n[        S5      U -  nSn[        nU(       aJ  XB-  nXS-  -  nUSU-  S-   S-  SU-  S-  -  -  nSU-  SUS-  -  S	U-  -   S-   -  U-  nUS-  nU(       a  MJ  US
-	  $ )Nrl   M   r   
   ro   r   rq         rt   )r   r   r   )rv   dr   r{   ry   s        r|   apery_fixedr      s    BJD4Ar7d?D	AA
			e	1Q
qsQh&'Qw#q!t*s1u,r12Q6	Q $ =r~   c                 ~   SnX-  n [        [        R                  " U S-  [        R                  " S5      -  S5      5      S-   nSU-  nU* [        U 5      -  =pE[        U -  =pgSn XcS-  -  US-  -  nXCS-  -  U-  U-   U-  nXT-  nXv-  n[        [        U5      [        U5      5      S:  a  OUS-  nMO  XPU-
  -  U-  $ )Nr   r   ro   r   r   )r   mathlogr?   r   maxr   )	rv   extrapr{   r   Ur   Vr   s	            r|   r   r     s    EMDDHHd1f+Q/014A	1AByAtOA	A
dFAqDL!tVQY]Q		s1vs1v$	Q  U
Oar~   c                     U S-   nSn[        U5      n [        X!5      nU[        :X  a  OI[        XA5      n[	        U[        U5      U5      n[        U[        U5      U5      n[        X45      nUS-  nM_  [        X05      $ )Nrl   ro   r   )
	mpf_eulermpf_zeta_intr   rC   r*   r   r+   r   r'   r!   )rv   r   mry   rz   s        r|   mertens_fixedr   *  s    	B	A"A
9AN71:r*Ax{B'AM	Q  Ar~   c           	      2   S nSU -  S-   n[         nS Vs/ s H  n[        SXB5      PM     nnU Vs/ s H  n[        XDU5      PM     nnSn [        Xr5      n[	        S5       H3  n	[        U[        [         Xi   5      U5      n[        Xi   XY   U5      Xi'   M5     [        X" U5      * U5      n[        XS-   S5      [         :X  a  O[        X8U5      nUS-  nM  [        U[        S	5      U5      n[        U[        S
5      U5      n[        X05      $ s  snf s  snf )Nc                 N   ^  [        U 4S j[        ST S-   5       5       5      T -  $ )Nc              3   ^   >#    U  H"  nTU-  (       a  M  [        U5      TU-  -  v   M$     g 7fN)r   ).0r   r{   s     r|   	<genexpr>-twinprime_fixed.<locals>.I.<locals>.<genexpr>=  s'     H}!AaC%71:1%}s   --r   )sumr   r{   s   `r|   Itwinprime_fixed.<locals>.I<  s#    Hva!}HH!KKr~   ro   r   )ro   rn   r      r   r   r   r{   i'  i 	  )r   r#   r)   r   r   r(   r-   r$   r   r+   r!   )
rv   r   r   resr   primesppowersr{   rw   is
             r|   twinprime_fixedr   :  s   L	
4"B
C-67YmAa#YF7(./1wq2G/	A
qA744b9A VY;GJ  AaD5"%12gs#t+ cb!	Q  #x("
-C
#x("
-CC# 8/s
   DDi  rn   r   c                 b    [         R                  " U S5      n[        SSU-  -   XS-
  -  -   5      $ )z5Accurately estimate the size of B_n (even n > 2 only)ro   gS㥛@r   gK7A`@)r   r   r   )r{   lgns     r|   bernoulli_sizer     s/    
((1Q-Cus3w%K011r~   c                    U S:  a2  U S:  a  [        S5      eU S:X  a  [        $ U S:X  a  [        [        5      $ U S-  (       a  [        $ U[
        :  a;  U[        U 5      S-  S-   :  a&  [        U 5      u  p4[        X4X=(       d    [        5      $ U [        :  a  [        XU5      $ US-   nUSUS	-  -
  -  n[        R                  U5      nU(       a<  Uu  pxX;   a  U(       d  Xp   $ [        Xp   X5      $ Uu  pnX	-
  S
:  a  [        XU5      $ O:U S
:  a  [        XU5      $ S[        0nS[        S
5      [         /=u  ppXx4[        U'   X::  Ga  U	S-  n[        U	5      nSn[#        SU5      U-
  nU	S:  a  [$        nOUn['        SU	S-  S-   5       H  nXySU-  -
     =u  nnnnnU(       a  U* nU[)        UU-  UU-
  5      -  nSU-  nUU	S-
  U-
  U	S-
  U-
  -  U	S-
  U-
  -  U	S-
  U-
  -  U	S-
  U-
  -  U	U-
  -  -  nUSU-   SU-   -  SU-   -  SU-   -  SU-   -  SU-   -  -  nM     US:X  a  [+        U	S-   [,        U5      nUS:X  a  [+        U	S-   [,        U5      nUS:X  a  [+        U	* S-
  [.        U5      n[1        XU5      n[3        [5        WX5      [7        U
5      U5      nUXy'   U	S-  n	XS-   U	S-   -  -  XS-
  -  -  n
U	S:  a  USU	-   SU	-   -  -  U	S-
  U	S-
  -  -  nXU/USS& X::  a  GM  Xp   $ )z.Computation of Bernoulli numbers (numerically)ro   r   z)Bernoulli numbers only defined for n >= 0r   g?  r   rm      r   r   r   r   rn   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   )r{   rv   rndr   qr   cachednumbersstater   binbin1caseszbmry   sexprw   r   usignumanuexpubcuj6r   s                            r|   r   r     sn   1uq5HII6K65>!1u
 ##~a/@/Dt/K(K{Q4);<<!!3//	B"r	
B  $F<z!7:t1152:%as33  r6%as33T( !3r7G44&.
&1u a 1d|r!q5AA1a46"A)01Q37"E4sQu$T	**A1B1Q3r6AaCF#QqSV,ac"f5qs2v>"EFAAbD1R4=!B$'2."5qt<=A # 19,qsB3a19,qsB3a19,r!tR4a"%GAq%x}b9
	QcAaC[!a1g.q5AaC!A#;'QqS1Q3K8DD>aA &B :r~   c                 X   US-   nU[        [        R                  " U S5      5      -   n[        U S-   U5      n[	        U[        X5      U5      n[	        U[        [        U5      U * U5      5      n[        USU -
  5      nU S-  (       d  [        U5      n[        XQU=(       d    [        5      $ )Nr   ro   r   rn   )r   r   r   mpf_gamma_intr)   r   r-   r=   r3   r%   r$   r   )r{   rv   r   r   piprecvs         r|   r   r     s    	B#dhhqm$$Fac2A<&+A;vf~r267A!QqSAq5AJ1C-:..r~   c                 ^   [        U 5      n U S:  a  / SQU    $ U S-  (       a  gSn[        U S-   5       H  nXS-
  -  (       a  M  X-  nM     [        U 5      [        [        R                  " US5      5      -   S-   n[        X5      n[        U[        U5      5      n[        U[        5      nXa4$ )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/

rn   ))r   r   )rq   ro   )r   r   r   )r   r   ro   rl   )
r   r
   r   r   r   r   r)   r   r    r   )r{   r   r   rv   r   r   pints          r|   r   r     s    N 	AA1u(++1u	A1qS		FA  !s488Aa=11B6DaA8A;A!]#D9r~   c                     U [         [        [        4;   a  U $ [        [	        [
        XS-   5      U5      n[	        U[        US-   U5      X5      $ )Nr   )r   r   r   mpf_psi0r'   r   r   )xrv   r   rw   s       r|   mpf_harmonicr     sG    UD$qq&)40A1iQ,d88r~   c                     U S   [         :X  a  [        U S   X5      [         4$ [        [        U [        US-   5      U5      n[        U[        US-   U5      X5      $ )Nr   r   r   )r   r   mpc_psi0r]   r   r   )zrv   r   rw   s       r|   mpc_harmonicr     sV    tu}QqT4-u55Qd1f-t4Aq)DFC0$<<r~   c           
         U u  p4pVUS-   nU(       d&  U [         :X  a  U $ U [        :X  d
  U [        :X  a  [        $ U [        :X  d  US:  a  U(       a  [	        S5      eXV-   S:  a7  [        [        U [        X5      X5      n[        U[        [        XU5      X5      $ U(       a[  XV-   S:  aS  [        X5      u  p[        [        XU5      [        U5      U5      n[        [        [        X5      U5      n[        XX5      $ U(       d#  Xe-   U:  a  [        [        U [        U5      X5      $ [        U 5      n[        SU-  5      S-   n[         n
[#        X5      n [$        U-  nX:  a   ['        X5       H  nXU-  U -  -  n
X-  n M     X-  n U
[#        [        [)        X* U5      U5      U5      -  n
XU-  SU -  -  -  n
X -  U-	  nUnSnSn UU-  U-	  n[+        SU-  U5      u  nnnnUSU-  -   nUS:  a  UU-  USU-  -  -  nOUU* -	  USU-  -  -  nUS-  (       a  U
U-  n
OU
U-  n
US:  a  UU:  a  O	UnUS-  nMs  [)        X* Xr5      $ )	zS
Computation of the digamma function (psi function of order 0)
of a real argument.
r   r   zpolygamma polern   )\(?ro   r   )r   r   r   r   r   r   r'   r   r(   r+   rH   r)   r=   rC   r    r   r   r!   r   r   r"   r   )r   rv   r   signmanexpbcr   r   cry   r   r   r   r{   rx   r   x2rz   prevbsignbmanbexpbbcoffsetr   s                             r|   r   r     se   
 Ds	B9Qh:d4KEzcQh4)**
v{WQd0$<q'$s3T??
a$GA"%vbz26WT1)2.qT''bhmwq$+T77q	ADGqAAA
R-CuA)!!AHA  HA',q#r2B7	<<A)1	A
#"BAD	A
rTbL!.qsB!7tT32+Q;AqsG< $& 1q!A#w?q5!t)!t)!q5TT\	Q  3((r~   c                 8   U u  p4U[         :X  a  [        X1U5      [         4$ US-   nUu  pgpU(       ad  X-   S:  a\  [        X5      n
[        X5      n[	        [        XU5      [        U5      U5      n[        [        [        X5      U5      n[        XX5      $ U(       d#  X-   U:  a  [        [        U [        U5      X5      $ [        U5      n[        SU-  5      S-   n[        nX:  a9  [        X5       H*  n[        U[        X5      U5      n[!        U ["        U5      n M,     [        U [        U5      n [%        U[        X5      U5      n[%        U[        [&        X5      U5      n[)        X5      n[        n[        n[         nSn[+        ["        U* S-   5      n [-        UUU5      n[/        SU-  U5      n[1        U[3        USU-  U5      U5      n[        UUU5      n[5        US5      nUS:  a%  [7        UU5      (       d  [7        UU5      (       a   U$ UnUnUS-  nM  )zV
Computation of the digamma function (psi function of order 0)
of a complex argument.
rl   rn   r   ro   r   r   )r   r   rf   rg   r^   r\   r=   r   rZ   rR   rc   r    r   rQ   r   rh   r]   r   rY   rS   ri   r3   r[   r   r`   ra   rU   r0   )r   rv   r   reimr   r   r   r   r   r   ry   r   r   wr{   r   z2rz   r   szprevepsbernr   szterms                            r|   r   r     s   
 FB	U{3'//	BDs
qqb)6":r:WWa,b1qT''bhmwq'2.::r
ADGqAAuA>!0"5AAtR(A  	7BA71>2&A78Q+R0A	A	BADF	A
D2#a%
 C
Ar2QqS"%4Q!R!8"=AtR r"q5fVS))VFF-C-C H 	Q r~   c                 T    U S:X  a  [        X[        S9$ [        X[        4X#5      S   $ )za
Computation of the polygamma function of arbitrary integer order
m >= 0, for a real argument x.
r   )r   )r   r   mpc_psir   )r   r   rv   r   s       r|   mpf_psir    s.    
 	AvZ001%j$,Q//r~   c           
         U S:X  a  [        XU5      $ Uu  pEUS-   nUu  pxpUS   (       d!  U[        [        [        4;   a  [        [        4$ U(       d6  U[        :X  a  U[        :X  a  [        [        4$ U[        :X  a  [        [        4$ [        U5      n[        SU-  SU -  -   5      n[        nX:  a?  [        X5       H0  n[        X* S-
  U5      n[        XU5      n[        U[        U5      nM2     [        X* U5      n[        USU5      n[        U[        U 5      U5      n[        UUU5      n[        U[        [!        UX5      ["        U5      U5      nU S-   nSnSn[%        US5      nUS   US	   -   n['        [        UU-
  S-   5      n [)        UUU5      n[+        SU-  U5      n[-        UUU5      n[/        U[        U5      U5      n[        UUU5      n[        UUU5      n[%        US5      nUS:  a  [1        UU5      (       a  O2UU SU-  -   U SU-  -   S-   -  -  nUSU-  S-   SU-  S-   -  -  nUS-  nM  [        U[3        [        U S-   5      U5      X#5      nU S-  (       d  [5        US   5      [5        US   5      4nU$ )
zd
Computation of the polygamma function of arbitrary integer order
m >= 0, for a complex argument z.
r   rl   r   g?r   r   ro   r   rn   )r   r   r   r   r   r    r   rQ   r   rb   rY   r]   r   r_   r   r^   r\   r   rU   r3   r[   r   r*   r+   r0   	mpf_gammar%   )r   r   rv   r   r  r  r   r   r   r   r   r	  r{   ry   r   rz   zmr
  integral_termrw   r   magnr  r  scalr   r  r   s                               r|   r  r  
  s   
 	Av%%FB	BDsa5$t$$$<:"+5>!:$<r
ACFQqSLAAuAAr!tR(Ab!AAtR(A  
QB	B	QB	BHQK4M="%A;wr115"=rBA	AA	A	A 1b>D747?D
D$r'!)
$C
RR QqS"%4B'tXa["-2tR(AtR r"q5VFC((	a!ea!eAg	ac!eac!e_	Q  	Ay!A#3T?AEAaDM71Q4=(Hr~   c                     U [         ;   a	  [         U    $ [        /U S-   -  n[        n[        =o1S'   [        SU S-   5       H1  nUS-  X-   S-
  -  X-
  S-   -  nUSU-  SU-  S-
  -  -  nX2-  nX1U'   M3     U[         U '   U$ )Nr   r   r   ro   )borwein_cacher   r   r   )r{   dsr   ry   r   s        r|   borwein_coefficientsr  {  s    MQ
qs	BAA11ac]EQSUOqs1u%	!1a !	1	 
 M!Ir~   r   c           	         US-   n[        U 5      n U [        ;   a&  [        U    S   U:  a  [        [        U    S   X5      $ U S:  aN  U S:X  a  [        S5      eU (       d  [	        [
        5      $ [        [        U * S-   U5      [        U S-
  5      X5      $ X:  a  [        [        SX5      $ XS-  :  aB  SU-  =pEUSX0-
  -  -  nXE[        U -  -  -  nUS[        SX0S-  -
  5      -  -  n[        XC* X5      $ [        U5      U S-
  -  S-   nUS:  a  [        SU-  S-   5      nU[        US	-  S
-   5      S-  :  a  [        n[        U5       Hb  n[        X0[         R"                  " US5      -  -
  5      n	U	S:  a    O6[%        [        ['        [        U5      U * U	5      U5      n
[)        XJU5      nMd     [        [        XC5      $ [        US	-  S
-   5      n[+        U5      n[,        n[/        U 5      n [1        U5       H!  nUSU-  X   X   -
  -  U-  US-   U -  -  -  nM#     XC-  X   * -  nXC-  SU-  SUS-   U -
  -  -
  -  nU [        ;   a  [        U    S   U:  d
  U [        ;  a  U[        XC* U-
  5      4[        U '   [        XC* U-
  X5      $ )z4
Optimized computation of zeta(s) for an integer s.
rl   r   r   ro   zzeta(1) poleg/$?r   g       @RQ@r   r   rq   )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   )ry   rv   r   r   rz   rx   r   needed_termsr   powprecrw   r{   r   s                r|   r   r     s    
BAAN~a03r9~a(+T771u6^,,5>!}aRT2.1tIIw4D..	
hr'	Q26]	Y!^$$	Q#ac"""AsD.. 2Y!_q r6sAvz?Lc"T'A+.33$\2A!"!A"67G{k(1+r7&KRPAb)A 3 tQ++BtGaKAQAAAAAY	Qw!$+&2-1Q3(:: 	
qteA	
qBw1Aa=12A	^q 1! 4r 9q?VaR!89q3r64--r~   c                    U u  pEpgU(       d<  U [         :X  a  U(       a  [        $ [        [        5      $ U [        :X  a  [        $ [
        $ US-   nU(       d1  Xg-   [        R                  " US5      S-   :  a  [        [        X1U5      $ US:  a  U(       al  U [        :X  a  [        X5      $ [        [        U 5      U[        U   5      n	[        [        [        [        [        [        X5      U5      U5      n
[!        XX5      $ [        [        U 5      X5      $ U(       a  U(       aD  [        [        [        [        [        [        X5      U5      U5      n
[!        [#        X5      XU5      $ [        [        U SU-  5      n[%        X5      n[#        X5      n['        [)        U S5      U5      nU[+        SXg-   5      -   n[-        X-   5      n[/        [        [)        US5      X5      UU5      n[!        U[!        U[!        UUU5      U5      X5      $ [        [        X5      n[1        U5      u  nnnnSUU-   -  nUU:  aB  U(       a  [        X5      $ [        [/        [        UU5      5      n
[3        U
[5        U5      X5      $ U[+        SU5      -  n[6        n[9        US-  S	-   5      n[;        U5      n[6        n[=        X5      n[?        U5      n[A        U5       HK  nU* [C        US-   UU5      -  U-	  n[E        UUU5      nUU   UU   -
  U-  nUS-  (       a  UU-  nMF  UU-  nMM     UUU   * -  n[G        UU* U5      nU(       a  [I        UX5      $ [        [        [        [        [        [        X5      U5      U5      n
[/        UXU5      $ )
Nrl   ro   r   r   rq   r   r   r  r   )%r   r   r%   r   r   r   r   r   r/   rA   r   r    r4   r(   rD   r   r)   mpf_zetar  rJ   r3   r   r=   r+   r&   r'   r   r   r   r  r!   r?   r   r@   rP   r"   r$   ) ry   rv   r   altr   r   r   r   r   r   r   yrw   r   r   wp2r   r   rasignamanaexpabc	pole_distrz   r{   sfln2r   r   emanr	  s                                    r|   r#  r#    s!   Ds:u~%9K	Bsx488Bq>A#564C00	Dyt))VAYL,=>AgdGD!,@"ErJA1++q	455
 gdGD!,@"ErJA8A?AS99D!RU#aQOyB',3q= BF^GIb!,a5r3?q71Qr?26t@@ 	aA$QZE4sDHI2~4%%a,-A1imT77
c!YA 	BtGaKAQAA	!B
B-CAYSqsB,,3 B$qTAaD[D q5FAFA  	
qteAQR A
q$$$D'$a(<bA2Fq!3''r~   Fc                 B   U u  pVU[         :X  a  [        XQX#5      [         4$ U(       d*  [        [        U S5      [	        U5      5      (       a  [
        eUS-   n[        [        X5      n[        US5      u  ppSX-   -  nX:  a  U(       aq  [        U5      n[        U[        U5      U5      n[        [        XU5      S5      n[        UU5      n[        U[        U5      U5      n[        UX5      n[!        UX5      $ [#        [%        [        X5      5      n[        U[        U5      U5      n[!        XU5      $ U['        SU5      -  n[)        U[         5      (       Ga  U(       aD  [        [        [+        [,        [        [        X5      U5      U5      n[/        [1        X5      XU5      $ [        [        U SU-  5      n[3        X5      n[1        X5      n[5        [7        U S5      U5      nUu  nnnnUu  nnnn['        UU-   UU-   5      nU['        SU5      -   n[9        UU-   5      n[        US5      [         4n [;        [+        U U U5      UU5      n![/        U[/        U[/        UU!U5      U5      X5      $ [=        US-  S-   5      n"U"[=        S	[?        [A        U5      5      -  5      -  n"[C        U"5      n![E        XW5      n#[E        Xg5      n$[F        n%[F        n&[H        U-  n'[H        S
U-  -  n(U[J        :H  n)[M        U5      n*[O        US-
  5      n Xw-   n[Q        U"5       H  n+[S        U+S-   UU*5      n,U)(       a  U([U        U+S-   U-  5      -  n-O[W        U#* U,-  U-	  U5      n-U+S-  (       a  U-U!U"   U!U+   -
  -  n-OU-U!U+   U!U"   -
  -  n-[Y        U$* U,-  U-	  UU 5      u  n.n/U%U-U.-  U-	  -  n%U&U-U/-  U-	  -  n&M     U%U!U"   * -  n%U&U!U"   * -  n&[[        U%U* U5      n%[[        U&U* U5      n&U(       a  [!        U%U&4X5      $ [        [        [+        [,        X5      U5      n[%        U%U&4XU5      $ )Nr   rl   r   rq   r   r   r  r   g?ro   ).r   r#  r2   rU   r   NotImplementedErrorrZ   rR   rA   r)   r   r3   r(   r^   r%   r]   rW   rX   r\   r   r1   re   rT   r[   mpc_zeta	mpc_gammarg   rV   r=   r_   r   r   r    r  r!   r   r   r   r?   r>   r   r@   r   rP   rO   r"   )0ry   rv   r   r$  forcer  r  r   r'  r(  r)  r*  r+  r,  r   r%  gr   rw   r   r   rsignrmanrexprbcisignimaniexpibcmagr&  r   pi2r   r{   refimftretimrx   one_2wpcritical_liner.  r   r   r	  wrewims0                                                   r|   r2  r2    s   FB	U{#+U22 vganhtn==!!	B 	A$Q^EDHI~A9R="-A'!+R0A1AAwqz2.AAq%A1d((/0AAy}b1A1C((
c!Y
 b%''12I"A8A?AS99GQ2&aQOyB',!#tT3!#tT3$s(DH%3q#;BsF^Q'Q,b#6q71Qr?26t@@BtGaKASVBZ 	!!AQA
2
C
2
C
C
C
R-C!B$G%KM
B-C
2a4.C
%CAYAaCS):qssl33AC48*B/Aq5!A$1+A!A$1+A 3$s(RS9SCBCB  adUOCadUOC
sRC
$C
sRC
$C
Sz4--GWWa4b9Sz1C00r~   c                     [        XUS5      $ Nr   )r#  ry   rv   r   s      r|   mpf_altzetarK  r      AS!$$r~   c                     [        XUS5      $ rI  )r2  rJ  s      r|   mpc_altzetarN  u  rL  r~   c                     US:X  a  U $ [         U-  nU(       a+  US-  (       a  X0-  U-	  nUS-  nX -  U-	  n US-  nU(       a  M+  U$ )Nr   ro   ru   )r   r{   r   r%  s       r|   	pow_fixedrP  |  sW    Av2A
q5AFASRK	a ! Hr~   c                    U [        [        5      :  a8  [        n[        S [        R                  [	        U5      5      S-    n[
        nXU4$ S/U S-   -  nS/U S-   -  n[        U 5      nU H  n[        X@S-   U5       H  nXAU'   M	     M     [        U5       H4  u  pdUS:  d  M  SnXd-  n X-  (       d  X-  n US-  nX-  (       d  M  XsU'   M6     UqUqUqXU4$ )Nr   r   ro   )	lensieve_cacheprimes_cacheindexr   
mult_cacher
   r   	enumerate)r{   siever   multr   r   r   r   s           r|   
primesieverZ    s    3{?|11#e*=a?@d""C1Q3KE3!A#;D^FA#aA!H !  % 6AAeQ ee G ! KLJ$r~   c           
         US:  a  [        S5      e[        X4-   5      u  pgn0 n	[        U-  n
[        SU-  -  nXU-   n[        U5      n[	        US-
  5      nU H  nUS-  X4-   :  a    O[        XU5      n[        U* U-  U-	  X^5      u  nnU (       a  U[        X-  5      -  nO[        U* U-  U-	  U5      nUU-  U-	  nUU-  U-	  nUU4/X'   UUnn[        S[        [        R                  " X4-   U5      S-   5      S-   5       H4  nUU-  UU-  -
  U-	  UU-  UU-  -   U-	  nnX   R                  UU45        M6     M     [        n[        nUS:X  a  UU
-  n[        US5      n[!        UX4-   S-   5       H  nUU   nX;   aW  UU   nX   US-
     u  nn UUU-  -  nUS:X  a  OUU   nUU   nX   US-
     u  nnUU-  UU-  -
  U-	  UU-  UU-  -   U-	  nnMD  [        UX]5      n[        U* U-  U-	  X^5      u  nnU (       a  U[        UU-  5      -  nO[        U* U-  U-	  U5      nUU-  U-	  nUU-  U-	  nUU-  nUU-  nM     UU4$ )Nr   za cannot be less than 1ro   g{Gz?)r   rZ  r   r?   r>   r@   rO   r   rP   r   r   r   r   appendr   r   r   )rE  sresimrw   r{   r   rX  r   rY  basic_powersrx   rD  r&  r.  r?  r   r   cossinr   prepimrB  rC  r   xreximaar   s                                r|   zetasum_sievedrg    s   1u233$QS/E4L
R-C!B$G
%C
B-C
2a4.CQ39A3' 3$s(R9S:af--AC48b."-Aumum:,SqTXXac!_T12145ASS2-#c'#c'/B1FCO""C9- 6   C
CAvs
	QqBBA!HQA#qs+HCad
6!HG'?1Q3/S WSW_r1c#gc#go5JS   2+C$sd3h^R=HCz!S&11tCx"nb1S5R-CS5R-Cs
s
/ 0 8Or~   r   c                 	   US-   n[        U5      nUS/:g  n[        U5      S:H  nU u  pU	[        :H  n[        X5      n	[        X5      n
US:  ab  U[        :  aX  U(       dQ  U(       dJ  US:  d  [
        R                  S:  a0  [        XXX&5      u  p[        X* US5      [        X* US5      4/nU/ 4$ [        U5      nU(       d  [        US-   5      nU Vs/ s H	  n[        PM     nnU Vs/ s H	  n[        PM     nnU(       a-  U Vs/ s H	  n[        PM     nnU Vs/ s H	  n[        PM     nnO/ =nn[        U-  n[        SU-  -  n[        U5      n[        US-
  5      nXf-   n[        XU-   S-   5       GH  n[!        UUU5      n[#        U
* U-  U-	  UU5      u  nnU(       a  U[%        UU-  5      -  nO['        U	* U-  U-	  U5      nUU-  U-	  nUU-  U-	  n U(       a  UUU-  -  n!U!U-  U-	  n"U!U-  U-	  n#U(       a  U(       ac  [)        UX5      nUS==   UU-  U-	  -  ss'   US==   U U-  U-	  -  ss'   U(       a(  US==   W"U-  U-	  -  ss'   US==   W#U-  U-	  -  ss'   M  M  [        U-  n$U H^  nUU==   UU$-  U-	  -  ss'   UU==   U U$-  U-	  -  ss'   U(       a&  UU==   W"U$-  U-	  -  ss'   UU==   W#U$-  U-	  -  ss'   U$U-  U-	  n$M`     GMd  US==   U-  ss'   US==   U -  ss'   U(       d  GM  US==   W"-  ss'   US==   W#-  ss'   GM     U(       a  U(       a6  US-  (       a+  US   * US'   US   * US'   U(       a  US   * US'   US   * US'   OsU Vs/ s H  nSU-  UU   -  PM     nnU Vs/ s H  nSU-  UU   -  PM     nnU(       a6  U Vs/ s H  nSU-  UU   -  PM     nnU Vs/ s H  nSU-  UU   -  PM     nn[+        UU5       V%V&s/ s H$  u  n%n&[        U%U* US5      [        U&U* US5      4PM&     nn%n&[+        UU5       V'V(s/ s H$  u  n'n([        U'U* US5      [        U(U* US5      4PM&     n)n'n(UU)4$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  sn&n%f s  sn(n'f )	zA
Fast version of mp._zetasum, assuming s = complex, a = integer.
r   r   r   g    Al        r{   ro   rq   )listrR  r   r!   ZETASUM_SIEVE_CUTOFFsysmaxsizerg  r"   r   r   r   r   r?   r>   r   r@   rO   r   rP   rP  zip)*ry   rw   r{   derivativesreflectrv   r   have_derivativeshave_one_derivativer]  r^  rE  r  r  xsmaxdr   rd  re  yreyimrx   rD  r.  r?  r&  r	  r   r`  ra  r   xterm_rexterm_im
reciprocalyterm_reyterm_imrz   xaxbyaybyss*                                             r|   mpc_zetasumr    s   
 
B{#K"qc)k*a/ HCE\M
3
C
3
C1u))2BSCKK%,?CABBT3/b#tS1QRS2v{DDFm )
)[8[C
)(
)[8[C
)!,-Ax-!,-Ax-c
R-C!B$G
B-C
2a4.C
%CAs1uAr3' 3$s(RS9S:af--AC48b."-AG?G?!ac*J"S(R/H"S(R/H"T.A8c>b00A8c>b00Fx#~"44FFx#~"44F  rM$AFx!|22FFx!|22FA8a<B"66A8a<B"66SRA % FhFFhFwA("A("I J axa&Aa&A!!fWCF!!fWCF-89[B7SV#[C9-89[B7SV#[C91<=AQwQ'=1<=AQwQ'=C
'%HR RCs+\"rc4-M
N%  
' C
'%HR RCs+\"rc4-M
N%  
'r6MM *
)--r :9==
'
's<   Q*QQQ"&Q'Q,#Q1>Q6$+Q;!+Ri  i:  g?   c           	         SnX-   n[         /U S-   -  n[        U5      n[        U-  nU* S-  US'   [        [	        U5      S5      n[        Xs5      =p/ n
Sn USU-  -
  nUS:  a  O|[        [        [        U[        U5      U5      n[        U[        XU5      U5      n[        X5      n[        X5      nX-  U-  U-	  nU
R                  X45        [        XU5      nUS-  nM  [        SU S-   S5       HW  n[         nSnU
 H?  u  nnUS-  S:X  a  UX-  -  nOUS-
  S-  nUUU-  -   X-  -  nU(       d    OUU-  nUS-  nMA     SU-  XO'   MY     [        U S-   5       Vs/ s H  n[        [        X5      5      PM     nn[        [        [	        U5      S5      SU5      =nn[        U[!        S5      U5      n[        SU S-   S5       HM  n[        UU   UU5      n[        UU5      XO'   [        UUU5      n[        U[!        US-   US-   -  5      U5      nMO     Xc-  U-  n[        SU S-   S5       Hm  nUS-
  S-  nUSU-  S-      SU-  S	-   -  S-  n[        SUS-   5       H#  nUUSU-     USU-  S-   SU-  -
     -  U-	  -  nM%     XO==   SU-  U-  U-	  -  ss'   Mo     [        S
U S-   S5       H|  nUS-
  S-  nUSU-  S-      SU-  S-   -  n[        SSU-  S-   5       H/  nUSU-  S-  U-  USU-     -  USU-  S-   SU-  -
     -  U-	  -  nM1     XO==   UU-  U-	  SU-  -  -  ss'   M~     U Vs/ s H  nUU-	  PM
     sn$ s  snf s  snf )z
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   ro   r   r   r   rn   r   r   r   r   rq   )r   r>   r   r3   r=   rB   r+   r   r(   r)   r!   r\  r   r&   r   r-   r   )r   rv   r   r   zeta_valuesr   rx   f_2pi	exp_2pi_kexp_2piexps3r   tpq1q2r{   ry   e1e2rz   r   r   pi_powfpir   reciprocal_pir   s                              r|   
zeta_arrayr  _  s    E	B*!$K	"B
R-CT1WKNfRj#E!%,,I
 E	A
!A#X6T79dB7<Yb 126bbfrkb bXI3		Q   AqsAFBsax!$JqS1H"a%ZAD(FAFA  A  06ac{;{!q$	%{A;yQ7B??FSVXa["-FAac!_AaD&"%!!Rb)1Q31+!6;	  Y2%MAqsAqS1H!A!A&)1Q3A+ac"[1Qqs%;;BBA  1Q3},33  AqsAqS1H!A!A&1Q3q5!A2'!)A+{1Q3//+ac!eAaCi2HH2MMA "AmOb0AaC88  **kAuHk**- 	<, +s   M2M	c                 &   U S:  a  U SU S-  -
  -   nOU S:  a  U SU S-  -
  -   nOU nU[         ;   a  [         U   U4$ US:  a  [        US-  S-   5      nO[        US-  S-   5      n[          H=  nX1:  d  M
  [         U   U* S  Vs/ s H	  oDX1-
  -	  PM     nnU S:  a	  U[         U'   XQ4s  $    US:  a  [        US	-  5      nUS
-   nS/U-  n[        US'   [        U-  US'   [	        U5      US'   [        X&5      n[        SU5       HK  n	US   * XyS-
     -  U-	  n
[        SU	5       H  nU
SU-  X   -  XyU-
     -  U-	  -  n
M     U
SU	-
  -  n
XU	'   MM     U V
s/ s H  oS
-	  PM	     nn
USSS2   nUSS nU[         U'   [        U 5      $ s  snf s  sn
f )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?ro   gv/?Ng333333?rl   r   r   rn   rq   )gamma_taylor_cacher   r   r   r   r  r   gamma_taylor_coefficients)inprecrv   r   cprecr   coeffsr   r   r  r   rw   r   s               r|   r  r    s    |VBY(	$VBY(!!!$'-- d{d
Q ea  $</A%/H!/MN/M!%*o/MFN}+1"4(< $ d{4#:	B	
aAAaDb=AaDr?AaD Q#KAq\dU1qS6\B!A2'KN*QsV3::A 	qs!  1BA	$B$A	#2A t$V,,9 O. 	s   F	Fc           	      8   XS-
  -	  [         -   S-	  n[         U-  n[        U5      u  pUS:  a  Un
[        US-
  5       H  nX-  nX-  U-	  n
M     X-  n[        nU H  nXU-  U-	  -   nM     XU-
  -  nUS:X  a  [	        X-  U-  U* X45      $ US:X  a  [        [        XU-  X45      U5      $ US:X  a%  [        [        [	        X-  U-  U* 5      5      X45      $ g Un
[        U* 5       H  nX-  U-	  n
X-  nM     [        nU H  nXU-  U-	  -   nM     XU-
  -  nU[        [        U5      5      -
  S:  a  [        U [        U* 5      5      n[	        X-  U* U-
  5      n
[        XU5      n
US:X  a  [        [        XU5      $ US:X  a  [!        XU5      $ US:X  a#  [        [        [        [        X5      5      X45      $ g [	        X-  U
-  SU-  5      n
US:X  a  [        [        XU5      $ US:X  a  [!        XU5      $ US:X  a  [#        [        [        U
5      X45      5      $ g )Nr   r   ro   rn   r   )r   r  r   r   r"   r3   r#   rC   r&   r6   r   r'   r   r)   r+   r   r$   r%   )xmpfr   r   rv   r   typenearest_intrx   r  cwpr'  r   r   r   r5  s                  r|   gamma_fixed_taylorr    sF    Q$K7*q0K
R-C+B/KFQA&AHAA ' 	
AcBYA 	2v19
RC;;19]1"utA2FF197<
RC#@A4MM  %AAHA & AcBYA 	2vQ  2%h|45AQS"R(Ab!AqytQc22qyq,,qywwtQ';<dHH  QSU2b5)Aqyq!<<qy#!66qyT)G!HHyr~   c                     U [         ;   a	  [         U    $ [        U 5      u  pU[        X S-
  -  5      -  nX[        [	        U5      5      [        U5      4[         U '   [         U    $ rI  )gamma_stirling_cacher   r   r6   r   )r{   r   r   s      r|   stirling_coefficientr    s_      #A&&A;DAQ!WAHSV$4hqkA""r~   c                    [         X-   -  U -  nX"-  U-	  n[        U5      U -
  nXBS-  -  oBU-  U-	  nXBS-  -  oBU-  U-	  nXBS-  -  oBU-  U-	  nXBS-  -  oBU-  U-	  nU(       d  U$ XBS-  -  oBU-  U-	  nUSU-  S-  -  oBU-  U-	  nXBS-  -  oBU-  U-	  nU(       d  U$ US	U-  S
-  -  oBU-  U-	  nUSU-  S-  -  oBU-  U-	  nUSU-  S-  -  oBU-  U-	  nU(       d  U$ Sn[        [        U5      5      n[        [        U5      5      nSn [	        U5      u  ppX{-   U-   nU* nX-
  nUS:  a  X:  a  X-  n	X-  nX}-
  nUS:  a  X:  a	  X/-	  nX-  nOUnX)-  U
-  U-	  nU(       d   U$ UU-  nX#-  U-	  nXU-
  -  nUS-  nMw  )zf
Sums the rational part of Stirling's expansion,

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

r   h              !    [  ܹ      r   ro   )r   rK   r6   r   r  )r   rv   rz   r   ry   r   usizetsizetexpr   r   pbqbterm_magshiftr   r	  r   s                     r|   real_stirling_seriesr  "  s    
49	!#A	
tA"ABJA!d{1CKA!d{1DLA!d{1DLA!d{1QhDLA!d{1QA!d{1CKA!d{1QhaA!d{1q&A!d{16	A1tAQh
A SVESVED
+A.b:$Mq5UYGAJEq5UYAJEAQ5 
 H	 	
T	SUN	Q) r~   c                 v   X -  X-  -   U-	  nX-  U-  nU* U-  U-  nXD-  XU-  -
  U-	  nXT-  US-
  -	  n[        U5      U -
  nU* n	XS-  -  oUS-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTXS-  -  oUS-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTXS-  -  oUS-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTXS-  -  oUS-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pT[        U5      [        U5      -   S:  a  X4$ XS-  -  oUS-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTUSU-  S	-  -  oSU-  S	-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTXS
-  -  oUS
-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pT[        U5      [        U5      -   S:  a  X4$ USU-  S-  -  oSU-  S-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTUSU-  S-  -  oSU-  S-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTUSU-  S-  -  oSU-  S-  -  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pT[        U5      [        U5      -   S:  a  X4$ Sn
[        [        [        U5      [        U5      5      5      n[        [        [        U5      [        U5      5      5      nSn [	        U
5      u  pnnUU-   U-   nU* nUU-
  nUS:  a  UU:  a
  UU-  nUU-  nUU-
  nUS:  a  UU:  a  UU-	  nUU-	  nUU-  nOUnUnXN-  U-  U-	  nX^-  U-  U-	  n[        U5      [        U5      -   S:  a   X4$ UU-  nU	U-  n	XF-  XW-  -
  U-	  XG-  XV-  -   U-	  pTXU-
  -  nU
S-  n
M  )Nr   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   ro   )rK   r   r6   r   r  )r   r%  rv   _mrB  rC  ureuimr]  r^  r   r  r  r  r   r   r  r  r  r  r   rF  rG  termretermims                            r|   complex_stirling_seriesr  W  st   
#)	B9
C2:"
C7SW
%C
'd1f
C
4
 1
$C"C 7NC37NC4'CGCGOd+B8OCCH_S4'CGCGOd+B9CS$Y&c4'CGCGOd+B9CS$Y&c4'CGCGOd+B
3x#c(Qsx9CS$Y&c4'CGCGOd+B3s7F?C3s7F?2C4'CGCGOd+B8OCCH_S4'CGCGOd+B
3x#c(Qsx48VCDHf$44S4'CGCGOd+B59fCU3Y%66c4'CGCGOd+B6#:vCfSj&&88s4'CGCGOd+B
3x#c(Qsx
A SS3s8,-ESS3s8,-ED
+A.b"2:$Mq5UQY!GAQJEHq5UQY(C(CQJECC%(u$%(u$v;V$q( 8O 	vvWsw&.g%' 	Q3 r~   c           
         U u  pEpgU(       dO  U [         :X  a#  US:X  a  [        $ US:X  a  [         $ [        S5      eU [        :X  a  US:X  a  [         $ [        $ [        $ US:X  a5  US-   nXg-   U:  a(  U(       d!  [        [        U [        X5      U5      XU5      $ US:  n	U	(       a  U(       a  US:X  a  [         $ [        S5      eXV-  n
U
[        :  ar  US:X  a  [        [        U
S-
     X5      $ US:X  a  [        [        U
   X5      $ US:X  a  [        [        [        U
S-
     X5      $ US:X  a  [        [        U
S-
     X5      $ O[        XV* -	  5      n
Xg-   nX-  nUS:X  a  US-   nOU[        U5      -   S-   nX* :  a  US:X  a*  [        [        [        X5      [        [        U* 5      X5      $ US:X  a  [        [        XU5      $ US:X  a  [        U [        [        X-
  5      X5      $ US:X  a  [!        [        [#        U 5      X5      5      $ US:X  a  [%        [        U [        5      XS5      $ US:  Ga  U	(       aq  USU-  :  ah  US:X  a  ['        [)        U
S-
  5      X5      $ US:X  a  [+        [,        [)        U
S-
  5      X5      $ US:X  a!  [        ['        [)        U
S-
  5      5      X5      $ U
S	:  d
  USU-  :  Ga  U(       a  [/        U5      nU
S-  (       a  [1        SU
-  S-   5      nO[1        SU
-  S-   5      * nUS:X  a  [        [+        XX5      U* U
-   S-   5      $ US:X  a  [        [+        XX5      X-
  S-
  5      $ US:X  a1  [        [        [+        U[3        U5      X5      U* U
-   S-   5      X5      $ OU
S:X  aM  US:X  a  [5        X5      $ US:X  a  [        [        [5        U5      X5      $ US:X  a  [        [5        U5      X5      $ Oq[/        U5      n[7        U[1        SU
-  S-
  5      -  U* U
-
  5      nUS:X  a  [        XU5      $ US:X  a  [        [        XU5      $ US:X  a  [        [#        U5      X5      $ Xh-   nUS:  a  X_-  nOX_* -	  nUS:X  Ga  U(       Gd  [,        U-  n[3        UU-
  5      n[3        USU-  -
  5      nU[        [9        UU5      5      -
  nUS:  a  [        [        U 5      n[        [:        U 5      nUS   US   -   nUS   US   -   nUU* :  a$  [        [=        U5      [        [        U 5      X5      $ UU* :  a2  [        [        [        [=        U5      5      [        U [:        5      X5      $ U[?        U* U* 5      -  nXh-   nUS:  a  X_-  nOX_* -	  n[        [@        U-  5      nU
[?        S	U5      :  a"  U[B        :  a  U(       a  U* n[E        U UXX#5      $ U nSnU
U:  aQ  [,        U-  =nnUU
-
  n[G        U5       H  nUU-  U-	  nUU-  nM     [7        UU* 5      =n nU(       a  [!        U 5      n O[#        U 5      n[I        UU5      n[K        [        UU5      U5      n U[,        US-
  -  -
  U -  U-	  n UU -  n[7        UU* 5      nU(       a  [        [M        UU5      UU5      n![!        [O        U5      5      n"US:X  d  US:X  aZ  [        U![Q        X5      5      n!U(       a  [        U"[7        UU* 5      U5      n"US:X  a  [        U"U!X5      $ US:X  a  [        U!U"X5      $ US:X  a^  U(       a  [        U"[7        UU* 5      U5      n"[        [        [#        U!5      U5      X5      n![        [        [#        U"5      U5      U!X5      $ g
US:X  a4  U(       a!  [        [Q        X5      [7        UU* 5      X5      $ [Q        XU5      $ US:X  a=  U(       a!  [        [7        UU* 5      [Q        X5      X5      $ [Q        [!        U5      X5      $ US:X  a5  U(       a"  [        U[        [7        UU* 5      U5      X5      $ [        XU5      $ g
)aq  
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   ro   zgamma function polern   rl   r   rq   r   r   N))r   r   r   r   r   r(   r)   rC   SMALL_FACTORIAL_CACHE_SIZEr$   small_factorial_cacher+   r   r6   r3   r'   r%   r&   r  r   r   r#   r   rM   r   r   rN   r"   minr   r   r   GAMMA_STIRLING_BETAMAX_GAMMA_TAYLOR_PRECr  r   r  r!   rJ   r=   rB   )#r   rv   r   r  r   r   r   r   r   
is_integerr{   r>  
gamma_sizer	  fr  absxmanrx   one_disttwo_distcancellationxsub1xsub2xsub1magxsub2magn_for_stirlingxorigr'  r   r   xabsr%  r   r   r   s#                                      r|   r  r    s    Ds:qy+qy,2339qy,K
 qy"W6B;t71ganb91CHH Jqy233J))qy4QqS94EEqy4Q7CCqyt%:1Q3%?KKqy4QqS94EE  (CJqyBYHZ((2- Sy1974.yrc/B4LL19WT1C8819WQ	$sv(>JJ19WWWQZ%CDD qyD)4a88
 byBrE!19#D1It9919($qs)TGG19"8D1I#6BBs7j2b5( $q5eAaCEl!$QqSU|m!19$]1%CbSU1WMM19$]1%CRT!VLL19"9]1c!f.#%'CE!G$-.29 9  a19Z%::19WT:b>4%MM19WZ^T%GG9 $ U1Q3q5\!1B3q5919WQc%::19WT1C%@@19WWQZ%CC XF{cmG!g.G qymws{#wqu}%Xc(H&=>>"D!$ED!$EQxa(HQxa(H2#~y}gdA.>JJ2#~wtYr];At$d1 1 #xi(++BXF{cmG&)g&6G ,R/0N3sN##-B(BhG!!WbBB E 	
A>R-CQAW#AsNG   "--D
Aqz 	Wb)Ar"B'A
Wr!t_
%	*r1AFAQA Jub)5"5F2J19	71>*AA|As3R8qyq!T//qyq!T//19A|As3R8
B/7A771:r2AtAA	  19wq~ RC($5 51C((19|As3AND/ /71:t1119q',q"*=r"BDNN1C(( r~   c           
         U u  pEUu  pgpUu  ppU[         :X  aP  US:X  a8  U(       a1  [        XAUS5      nU* U* -	  n[        [        US-   5      XU5      nUU4$ [        XAX#5      [         4$ U(       d  U(       d  U(       d  U(       a  [        [        4$ US-   nX-   nX-   nU(       a  [        UU5      nOUnUS:  a  UU* :  a  [        U [        [        X U5      [        U5      U5      U5      nUS:X  a  [        UX5      $ US:X  a  [        U UX5      $ US:X  a  [        UX5      $ US:X  a  [        [        UU5      X5      $ OUS:w  a  UU* -  nUS:X  a5  UU:  a/  U(       a  UU:  a"  [        [        U [        U U5      U5      XU5      $ US:X  a  [        [!        U["        5      U4XS5      $ [%        ['        U5      5      n[%        ['        U5      5      n[        UU5      nUU-  nUS:X  a  OU[)        U5      -  nUnU nU(       a  [+        U 5      n U S   =u  pgpnU S   =u  ppnSnSnUS:  GaK  US:X  Ga  [-        U ["        5      nUS   [         :X  a  U* nO[        US   S   US   S   -   U5      * nUU:  a{  [        U5      n [        UU U5      n![        U!U!U5      n![/        U![1        S	5      U5      n![        U[3        [        U5      5      U5      n"[        U!U"U5      nU(       d  [        UX5      $ OUS:  a  UU-  n[-        U [4        5      n#U#S   [         :X  a  U* n$O[        U#S   S   U#S   S   -   U5      * n$U$U:  a  [        U5      n [7        [9        U U 5      [1        S
5      5      n%[        [        U#U#U5      U%U5      n![/        U![1        S	5      U5      n![        U#[7        ["        [        U5      5      U5      n"[        U!U"U5      nU(       d  [        UX5      $ OU$S:  a  UU$-  nUU* :  a  SUS-   -  n&[;        U5      n'[=        ["        UU-
  5      n([        U'U&US9n)[        [!        U'U(5      U&US9n*[?        [7        U*U)U&5      U(U&5      n+[9        UU+X5      n"U)U"4nU(       d  [        UX5      $ OUU* -  nUU-  n[A        [B        U-  5      n,UU,:  n-[E        UU5      n.[E        UU5      n/Sn0U(       Gd9  U n1UU,:  a  [G        UU5      n[A        SU,S-  -   US-  -
  S-  U-
  5      n2[H        U-  =n3n4[J        n5[M        U25       H$  n6U.U3-  U/U5-  -
  U-	  U.U5-  U/U3-  -   U-	  n5n3U.U4-  n.M&     [O        U3U* 5      [O        U5U* 5      4n0[O        U.U* 5      nXE4n [Q        U.U/U5      u  n7n8[        U U5      u  n9n:[E        U9U5      n9[E        U:U5      n:U9U.-  U:U/-  -
  U-	  U9S-	  -
  U7-   n7U9U/-  U:U.-  -   U-	  U:S-	  -
  U8-   n8[O        U7U* 5      [O        U8U* 5      4n"U0(       Ga  US:X  Ga  [        U"[        U0U5      U5      n"[S        U1S   5      n;[S        U1S   5      n<[T        RV                  " U;U<5      n=[S        U"S   5      n>[T        RX                  " U<U;5      n?U=S::  a	  SU<-  U?-
  n@O)U<* SU?-  -
  U;U?-  -   U<[T        RZ                  " U=5      -  -   n@[A        [T        R\                  " W@U>-
  S[T        R^                  -  -  S-   5      5      nU"S   [!        U"S   [        [        U5      SU-  U5      U5      4n"U(       Ga  US:X  d  US:X  a  [        [a        UU5      UU5      nA[3        [        U5      5      [         4nBU(       a"  US:X  a  [        WAUU5      nAO%[        WAUU5      nAO[        WA[c        W"U5      U5      nAU0(       a  [        WBU0U5      nBUS:X  a  [        WBWAX5      $ US:X  a  [        WAWBX5      $ US:X  Ga  U(       a  [+        U5      nCO[+        W"5      nC[        WC[        [+        U5      U5      U5      nC[e        US   5      nD[g        US   5      nE[        U5      n [9        U UD5      n%[        U%UEU5      n%UCS   [!        UCS   U%U5      4nC[i        UC[k        U U5      U5      nC[a        [-        UUD5      U5      n%[        U%U5      n%[        UCU%U5      nCUE(       d+  [9        U [e        WD5      U5      n%WCS   [7        UCS   U%U5      4nC[        WCX5      $ g US:X  a*  U0(       a  [        [c        W"U5      U0X5      $ [c        W"X5      $ US:X  a3  U0(       a  [        U0[c        W"U5      X5      $ [c        [+        W"5      X5      $ US:X  a  [        W"X5      $ g )Nrn   r   rl   ir   r   ro   ir   r   )r  r   g@KWx?)6r   r  r*   r=   r   r   rY   r^   r[   r   rh   r\   rW   rc   rZ   r3  r'   r   r   r    r6   rX   rj   r_   r   r%   r   r(   r)   r&   r3   r+   r   r  r!   complexr   r   r   r"   r  r7   r   hypotatan2r   floorr   rg   rd   r8   r9   r]   rC   )Fr   rv   r   r  rw   r   r(  r)  r*  r+  r  r  r  r  r  r{   r  r   amagbmagr>  r   anbnabsnr  need_reflectionzorigyfinalbalance_preczsub1cancel1r   r   r%  zsub2cancel2rz   ppaabsr  x1r   xprimer  need_reductionafixbfixr'  zpreredr   rrerx   rimr   rt  ru  lrelimzfazfbzfabsyfbr   gir   r   s1rezfloorimzsignsF                                                                         r|   r3  r3  m  s}	   DAEEEz191C+BTE"AVDG_as;Br6M#,e33 T4Dd| 
B8D8D$o Rx"9;wq2y}RH"MAqy4!==qyAt!99qyD!66qy4)@$!LLyQYC4LB
 qyS2X44<wq'!R."5qDD qy'!T*A.1==	VAYB	VAYBr2;DcJqy
hz"" OEAJ%&qT)T%&qT)T FLcz194(EQx5 %uQx{58A;6==|BZr2.Aq"%8B<4wy}'=rB Ar*&"6455 '1g4(EQx5 %uQx{58A;6==|BZGBOXa[9ub 91bA8B<4wtYr]'CRH Ar*&"6455 '1g2#:BrEB1:DD$r'*C4$/B74-r=BWRR0#r:F64-A!WF #vt11 # dU#L,B,R/0NN*NAr?DAr?D	A. 2r?DQ**RU2S82=>A2%C#CAY!#Xd3h.3S488Kb7PS  S2#&S2#(>>ATB3'AA*4r:S1b>SsBsBD3t8#b(S!V4s:D3t8#b(S!V4s:rc"Lrc$:: 71b>2.A71:&C71:&CJJs3'E1Q4.C

3$A|c\A%TCE\CE)C,??DJJ34773C789A1wqt[QqS"%ErJKA19	
5"-ub9A$e,A1962.A62.AAwq"~r2Aq"%qyAt!99qyAt!99 19V_QZWWU^R8"=B q*HuQx(GBH%AAw+AQ%A2./BRR"5B;uh7<A2AQ#B B	( 3R8eWRUAr232t))/ 2 19wq"~q$<<1d((19q'!R.$<<71:t11191d(( r~   c                     [        XUS5      $ rI  r  r   rv   r   s      r|   mpf_factorialr  W      Qc1%%r~   c                     [        XUS5      $ rI  r3  r  s      r|   mpc_factorialr   Z  r  r~   c                     [        XUS5      $ Nro   r  r  s      r|   
mpf_rgammar  ]  r  r~   c                     [        XUS5      $ r  r  r  s      r|   
mpc_rgammar  `  r  r~   c                 @    U u  p4pVU(       a  [         e[        XUS5      $ )Nrn   )r:   r  )r   rv   r   r   r   r   r   s          r|   mpf_loggammar  c  s$    DsQc1%%r~   c                     U u  p4Uu  pVpxUu  ppU[         :X  a7  U(       a0  [        X1US5      nU* U* -	  n[        [        US-   5      XU5      nX4$ [	        XUS5      $ )Nrn   r   )r   r  r*   r=   r3  )r   rv   r   rw   r   r(  r)  r*  r+  r  r  r  r  r  r{   r  s                   r|   mpc_loggammar	  i  sn    DAEEEzeqQ'UR!37vQc1%%r~   c                 l    U [         :  a  [        [        U S-
     X5      $ [        [	        U 5      X5      $ rI  )r  r$   r  r  r   )r{   rv   r   s      r|   r   r   t  s3    %%,QqS14==Xa[$,,r~   r   )r   r   )r   )__doc__r   rk  backendr   r   r   r   r   r	   
libintmathr
   r   r   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   	libelefunr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   libmpcrQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r}   r   r   r   r   r   r   r   	mpf_aperympf_khinchinmpf_glaishermpf_catalanmpf_mertensmpf_twinprimer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  ZETA_INT_CACHE_MAX_PRECr  r   r#  r2  rK  rN  mpf_zetasumrP  rS  rT  rV  rZ  rg  rj  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r3  r  r   r  r  r  r	  r   r   s   0r|   <module>r     sY    
  < < 9 9                
 
 
 
 
 
 
0 
 
H  B 2 2z  *    0    2 [)	[)	//}-}- 1  @ a[a[2
 '':; IV	/Tz:@9= % 9)v % 3l ' 0 ' <J(T   ( 3.j %! U(n %!5 X1t ( % ( % 
 
67t  aV  u$ $$       
)!+	,.	,A "$q'*	,. O+b7-r/Ib#3jEPK)\h)T&&&&&	&  * -q.s   I*