
    g-                       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
             Zoe>d             Zpe>d             Zqe>d             Zr	 e>d             Zse>d             Zte>d             Zu e?es          Zv e?er          Zw e?ep          Zx e?eq          Zy e?eo          Zz e?et          Z{ e?eu          Z|dZ}	 i Z~ e!d          Z e!d          Zd Z ee}          Zd@dZd@dZd Z	 d Zd ZefdZefdZefdZefdZ	 i Zd ZdZi Zefd Zedfd!Zedd"fd#Zefd$Zefd%ZdZd& Zg ag ag ad' Zd( Zd)Zd* Zd+Zed,k     sJ d-Zd.Zi Zi Zd/  eedz             D             Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 ZdAd7ZdAd8ZdBd9ZdBd:ZdBd;ZdBd<ZdBd=ZdBd>Zefd?ZdS )Cao  
-----------------------------------------------------------------------
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                    | dz   } t           | z  x}}d\  }}}|rc|d|dz  z  d|z  dz
  z  z  }|dd|z  z
  d|dz  z  z   dz  z  }|d|dz
  z  z  d	|dz  z  d
|z  z
  dz   z  |dz  d|z  dz
  z  z  }||z  }|dz  }|c|dz	  S )N   )r   r   r             r      (         r   )precaonestns         R/var/www/html/ai-engine/env/lib/python3.11/site-packages/mpmath/libmp/gammazeta.pycatalan_fixedr}   H   s    "9DoAGAq!
 	R!Q$Y!A#a%  	qAvbAg~!!qsOr!Q$wr!t|A~.1a41Q3q5>B	Q	Q   =    c                    t          | | dz  z   dz             }t          }t          d          }t          |z  x}}t	          |          }t          t          |||          d          x}}d}		 t          t          d|	z  |                    }
t          |
||          }
t          |
||          }
t          |
|          }
|
|z
  |z  |	z  |z	  }|dk     rnP||z  }||d|	z  dz   z  |d|	z  z  z
  z  }|	dz  }	t          |d|	z  d|	z  dz
  z  |          }t          |||          }||z  t          |          z  }t          t          ||           |          }t          ||           }|S )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   s   	TD#I"	#	#BA
1++CmA	Bwr2r22A666EF	A+qsB//00++b))&"%%3,!#)b0#:: 	
T		S1Q3q5\C!A#J&&	Q#!ac!e}b11vr**+ 
bYr]]"AQ$$b))ADAHr~   c           	         | dz   }t          d| z  dz             }t          |z  }t          }t          d|          D ]}|t	          ||          |dz  z  z  }t	          ||          }|||z   |z  z  }|||dz  dz  z  z  }|dz  }d}d}	d}
t          d          }d}	 ||z  |	|z  z   |z  }t          ||           }t          d|z  |          }t          |||          }t          |||          }t          ||          }t          |          dk     rn^||z  }|	||
z  z
  |
 |	z  ||z  |
dz   f\  }}	}}
|	||
z  z
  |
 |	z  ||z  |
dz   f\  }}	}}
|dz  }t          |d|z  d|z  dz
  z  |          }t          |          }|d	z  }||z  |dz  |z	  z  }|t          |          z  }|t          t          t          d|z  |           |          |          z  }|d
z  }t!          t          ||           |          }t          ||           S )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[[ * *	]1b!!QT))BD #*	A!Q$(	A	
AB	A
A	A
1++C	A22g4B&RC  !A#r""q!R  tS"%%b!!t99s?? 	
T	!eaRT2a41,1b!!eaRT2a41,1b!	Q#!ac!e}b11#2& 
"BFA	
bb!erk"ARA',qtbS11266	;	;;A"HAQ$$b))AAtr~   c                     | dz  } t           | z  }t          d          | z  }d}t          }|rE||z  }||dz  z  }|d|z  dz   dz  d|z  dz  z  z  }d|z  d|dz  z  d	|z  z   dz   z  |z  }|dz  }|E|d
z	  S )Nrl   M   r   
   ro   r   rq         rt   )r   r   r   )rv   dr   r{   ry   s        r|   apery_fixedr      s    BJD4Ar77d?D	AA
 	T		ae	1Q
qsQh&'Qw#q!t*s1u,r12Q6	Q   =r~   c                    d}| |z  } t          t          j        | dz  t          j        d          z  d                    dz   }d|z  }| t          |           z  x}}t          | z  x}}d}	 ||dz  z  |dz  z  }||dz  z  |z  |z   |z  }||z  }||z  }t          t          |          t          |                    dk     rn|dz  }^|| |z
  z  |z  S )Nr   r   ro   r   r   )r   mathlogr?   r   maxr   )	rv   extrapr{   r   Ur   Vr   s	            r|   r   r     s    EEMDDHd1f+Q//0014A	1AByAtOA	AadFAqDLq!tVQY]Q	Q	Qs1vvs1vv$$	Q U
Oar~   c                 L   | dz   }d}t          |          }	 t          ||          }|t          k    rnbt          ||          }t	          |t          |          |          }t          |t          |          |          }t          ||          }|dz  }~t          ||           S )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B99ArNN71::r**Ax{{B''AqMM	Q Atr~   c           	      v   d }d| z  dz   t           }fddD             }fd|D             }d}	 t          |          }t          d          D ]L}t          |t	          t           ||                             }t          ||         ||                   ||<   Mt          | ||                     }t          || d	z   d
          t           k    rnt          ||          }|dz  }t          |t          d                    }t          |t          d                    }t          ||           S )Nc                 b     t           fdt          d dz             D                        z  S )Nc              3   L   K   | ]}|z  t          |          |z  z  V  d S N)r   ).0r   r{   s     r|   	<genexpr>z-twinprime_fixed.<locals>.I.<locals>.<genexpr>=  s;      HH!AaCH71::1%HHHHHHr~   r   )sumr   r{   s   `r|   Iztwinprime_fixed.<locals>.I<  s7    HHHHva!}}HHHHH!KKr~   ro   r   c                 2    g | ]}t          d |          S )r   )r#   r   r   r   s     r|   
<listcomp>z#twinprime_fixed.<locals>.<listcomp>@  s%    777mAa##777r~   )ro   rn   r      c                 2    g | ]}t          ||          S  )r)   r   s     r|   r   z#twinprime_fixed.<locals>.<listcomp>A  s#    ///1wq2///r~   r   r   r   r{   i'  i 	  )
r   r   r   r)   r(   r-   r$   r   r+   r!   )	rv   r   resprimesppowersr{   rw   ir   s	           @r|   twinprime_fixedr   :  sc   L L L	
4"B
C7777Y777F///////G	ABq 	< 	<A7444b99A VAY;;GAJJAAaDD5"%%1d2gs##t++ c1b!!	Q #x(("
-
-C
#x(("
-
-CCr~   i  rn   r   c                 h    t          j        | d          }t          dd|z  z   | |dz
  z  z             S )z5Accurately estimate the size of B_n (even n > 2 only)ro   gS㥛@r   gK7A`@)r   r   r   )r{   lgns     r|   bernoulli_sizer     s4    
(1Q--Cus3wC%K0111r~   c                    | dk     r<| dk     rt          d          | dk    rt          S | dk    rt          t                    S | dz  rt          S |t
          k    rD|t          |           dz  dz   k    r+t          |           \  }}t          ||||pt                    S | t          k    rt          | ||          S |dz   }|d|d	z  z
  z  }t                              |          }|rK|\  }}| |v r!|s||          S t          ||          ||          S |\  }	}
}| |	z
  d
k    rt          | ||          S nI| d
k    rt          | ||          S dt          i}dt          d
          t           gx\  }	}
}}||ft          |<   |	| k    r|	dz  }t          |	          }d}t#          d|          |z
  }|	dk     rt$          }n|}t'          d|	dz  dz             D ]}||	d|z  z
           x\  }}}}}|r| }|t)          ||z  ||z
            z  }d|z  }||	dz
  |z
  |	dz
  |z
  z  |	dz
  |z
  z  |	dz
  |z
  z  |	dz
  |z
  z  |	|z
  z  z  }|d|z   d|z   z  d|z   z  d|z   z  d|z   z  d|z   z  z  }|dk    rt+          |	dz   t,          |          }|dk    rt+          |	dz   t,          |          }|dk    rt+          |	 dz
  t.          |          }t1          |||          }t3          t5          |||          t7          |
          |          }|||	<   |	dz  }	|
|	dz   |	dz   z  z  |	|	dz
  z  z  }
|	dk    r|d|	z   d|	z   z  z  |	dz
  |	dz
  z  z  }|	|
|g|dd<   |	| k    ||          S )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     s#   1uuq55HIII66K665>>!1u 
 ###~a/@/@/Dt/K(K(K{{1Q4);<<<!!T3///	B"r	
B  $$F /<< "qz!71:tS1113q52::%as333  r66%as333T( !3r77G443u&.
q&&1u a  1d||r!q55AAA1a46"" 	> 	>A)01Q37"E4sQ u$T	***A1B1Q3r6AaCF#QqSV,ac"f5qs2v>"EFAAbD1R4=!B$'2."5qt<=AA199,qsB33a199,qsB33a199,r!tR44aD"%%GAq"%%x}}b99
	QacAaC[!a1g.q55AaC!A#;'QqS1Q3K8DsD>aaaA q&&B 1:r~   c                    |dz   }|t          t          j        | d                    z   }t          | dz   |          }t	          |t          | |          |          }t	          |t          t          |          |  |                    }t          |d| z
            }| dz  st          |          }t          |||pt                    S )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#dhqmm$$$Fac2A<2&&++A;vf~~r26677A!QqSAq5 AJJ1dC-:...r~   c                    t          |           } | dk     r
g d|          S | dz  rdS d}t          | dz             D ]}| |dz
  z  s||z  }t          |           t          t          j        |d                    z   dz   }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/

    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1uu(((++1u v	A1  QqS	 	FA!s48Aa==111B6DaA8A;;A!]##D!9r~   c                     | t           t          t          fv r| S t          t	          t
          | |dz             |          }t	          |t          |dz   |          ||          S )Nr   )r   r   r   mpf_psi0r'   r   r   )xrv   r   rw   s       r|   mpf_harmonicr     sZ    UD$q$q&))400A1iQ,,dC888r~   c                     | d         t           k    rt          | d         ||          t           fS t          t          | t          |dz             |          }t          |t          |dz   |          ||          S )Nr   r   r   )r   r   mpc_psi0r]   r   r   )zrv   r   rw   s       r|   mpc_harmonicr     sk    tu}}QqT4--u55Qd1f--t44Aq)DFC00$<<<r~   c           
      N   | \  }}}}|dz   }|s*| t           k    r| S | t          k    s| t          k    rt          S | t          k    s|dk    r|rt	          d          ||z   dk     rMt          t          | t          ||          ||          }t          |t          t          | ||          ||          S |r||z   dk    rvt          | |          \  }	}
t          t          |	|
|          t          |          |          }t          t          t          | |          |          }t          ||||          S |s.||z   |k    r%t          t          | t          |          ||          S t          |           }t          d|z            dz   }t           }
t#          | |          } t$          |z  }||k     r#t'          ||          D ]}|
||z  | z  z  }
| |z  } | |z  } |
t#          t          t)          | | |          |          |          z  }
|
||z  d| z  z  z  }
| | z  |z	  }|}d}d}	 ||z  |z	  }t+          d|z  |          \  }}}}|d|z  z   }|dk    r||z  |d|z  z  z  }n|| z	  |d|z  z  z  }|dz  r|
|z  }
n|
|z  }
|dk    r||k    rn|}|dz  }qt)          |
| ||          S )	z_
    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     s   
 D#sB	B 099Qh::d4KEzzcQhh4h)***
2v{{WQdC00$<<q'$2s33T3??? (B

a$$1GAq"%%vbzz266WT1b))2..q!T3''' 8b3hmmwq$++T3777q		ADGqAABA
R-C1uu1 	 	A#)!!AHAAHA',q2#r22B77	<	<<A#)1	A
A#"BAD	ArTbL!.qsB!7!7tT32+Q;;AqsG< $& 1q!A#w?q5 	!t)!!t)!q55TT\\	Q B3C(((r~   c                 D   | \  }}|t           k    rt          |||          t           fS |dz   }|\  }}}}	|r||	z   dk    rt          | |          }
t          | |          }t	          t          |
||          t          |          |          }t          t          t          | |          |          }t          ||||          S |s.|	|z   |k    r%t          t          | t          |          ||          S t          |          }t          d|z            dz   }t          }||k     rHt          ||          D ]7}t          |t          | |          |          }t!          | t"          |          } 8t          | t          |          } t%          |t          | |          |          }t%          |t          t&          | |          |          }t)          | |          }t          }t          }t           }d}t+          t"          | dz             }	 t-          |||          }t/          d|z  |          }t1          |t3          |d|z  |          |          }t          |||          }t5          |d          }|dk    r!t7          ||          st7          ||          rn
|}|}|dz  }|S )zb
    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{{T3''//	BD#sB (B

q"q"1b))6"::r::WWa,,b11q!T3''' ;b3hmmwq'2..c:::r

ADGqAA1uu1 	) 	)A>!R00"55AAtR((AA7BA71b>>2&&A78Q++R00A	Ar		BADF	A
D2#a%
 
 C
Ar2QqS"%%4Q!R!8!8"==AtR  r""q55fVS))5VFF-C-C5	Q
 Hr~   c                 z    | dk    rt          ||t                    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   rv   r   s       r|   mpf_psir    s?    
 	Avv4Z00001q%j$,,Q//r~   c           
      "   | dk    rt          |||          S |\  }}|dz   }|\  }}}	}
|d         s$|t          t          t          fv rt          t          fS |s=|t          k    r|t          k    rt          t          fS |t          k    rt          t          fS t          |          }t          d|z  d| z  z             }t          }||k     rOt          ||          D ]>}t          ||  dz
  |          }t          |||          }t          |t          |          }?t          ||  |          }t          |d|          }t          |t          |           |          }t          |||          }t          |t          t!          |||          t"          |          |          }| dz   }d}d}t%          |d          }|d         |d	         z   }t'          t          ||z
  dz             }	 t)          |||          }t+          d|z  |          }t-          |||          }t/          |t          |          |          }t          |||          }t          |||          }t%          |d          }|dk    rt1          ||          rn1|| d|z  z   | d|z  z   dz   z  z  }|d|z  dz   d|z  dz   z  z  }|dz  }t          |t3          t          | dz             |          ||          }| dz  s*t5          |d                   t5          |d                   f}|S )
zp
    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#   
 	Avv4%%%FB	BD#sBa5  $t$$$$<  ::"++5>!::$<r

ACFQqSLAA1uu1 	) 	)AAr!tR((A1b!!AAtR((AA	QB		B	QB		BHQKK44M="%%A;wr1b115"==rBBA	AA	A	A 1b>>D747?D
D$r'!)
$
$CRR  QqS"%%4B''tXa[["--2tR((AtR  r""q55VFC((5	a!ea!eAg	ac!eac!e_	Q 	Ay!A#33T3??AE )AaDMM71Q4==(Hr~   c                    | t           v rt           |          S t          g| dz   z  }t          }t          x}|d<   t          d| dz             D ]4}|dz  | |z   dz
  z  | |z
  dz   z  }|d|z  d|z  dz
  z  z  }||z  }|||<   5|t           | <   |S )Nr   r   r   ro   )borwein_cacher   r   r   )r{   dsr   ry   r   s        r|   borwein_coefficientsr  {  s    MQ
qs	BAA11ac]]  EQqSUOqs1u%	!1a !	Q1M!Ir~   r   c           	      4   |dz   }t          |           } | t          v r9t          |          d         |k    r"t          t          |          d         ||          S | dk     r_| dk    rt          d          | st	          t
                    S t          t          |  dz   |          t          | dz
            ||          S | |k    rt          t          d||          S | |dz  k    rQd|z  x}}|d|| z
  z  z  }||t          | z  z  z  }|dt          d|| dz  z
            z  z  }t          || ||          S t          |          | dz
  z  dz   }|dk     rt          d|z  dz             }|t          |d	z  d
z             dz  k     rt          }t          |          D ]v}t          || t!          j        |d          z  z
            }	|	dk     r nEt%          t          t'          t          |          |  |	          |          }
t)          ||
|          }wt          t          ||          S t          |d	z  d
z             }t+          |          }t,          }t/          |           } t1          |          D ](}|d|z  ||         ||         z
  z  |z  |dz   | z  z  z  })||z  ||          z  }||z  d|z  d|dz   | z
  z  z
  z  }| t          v rt          |          d         |k     s	| t          vr|t          || |z
            ft          | <   t          || |z
  ||          S )z<
    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     sF    
BAAN~a03r99~a(+T37771uu66^,,, 	"5>>!}aRT2..1tSIIIBww4D#...	
bhr'C	Q26]	SY!^$$	Q#aac""""AsD#... 2YY!_q r66sAvz??Lc"T'A+..333$\22 * *A!"q!A"677G{{k(1++r7&K&KRPPA1b))AAtQ+++BtGaKAQAAAAAYY ; ;	Qw!A$1+&2-1Q3(::	
bqteA	
bqBw1Aa=12A	^q 1! 4r 9 9q?V?Va"R!8!89qB3r64---r~   c                    | \  }}}}|sA| t           k    r|rt          S t          t                    S | t          k    rt          S t
          S |dz   }|s6||z   t          j        |d          dz   k    rt          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|z            }t%          ||          }t#          ||          }t'          t)          | d          |          }|t+          d||z             z   }t-          ||z             }t/          t          t)          |d          | |          ||          }t!          |t!          |t!          |||          |          ||          S t          t          | |          }t1          |          \  }}}}d||z   z  }||k    rT|rt          ||          S t          t/          t          ||                    }
t3          |
t5          |          ||          S |t+          d|          z  }t6          }t9          |dz  d	z             }t;          |          }t6          }t=          | |          }t?          |          }tA          |          D ]R}| tC          |dz   ||          z  |z	  }tE          |||          }||         ||         z
  |z  }|dz  r||z  }M||z  }S|||          z  }tG          || |          }|rtI          |||          S t          t          t          t          t          t          | |          |          |          }
t/          ||
||          S )
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   D#sB :: &u~~%99K	B 6sRx48Bq>>A#5664dC000	 	6DyytS)))VAYYL,=>>AgdGD!R,@,@"EErJJA1as+++q		4555
  A 	:gdGD!R,@,@"EErJJA8Ar??AtS999D!RU##aQOOyB'',,3qR== BsF^^GIb!,,a55r3??q71Qr??266tC@@@ 	aA$QZZE4sDHI2~~ 	84%%%a,,--A1immT3777
c!YA 	BtGaKAQAA	!RB
B--CAYY  SqsB,,,3 B$$qTAaD[D q5 	FAAFAA	qteAQR  A
 (q$$$$D'$a(<(<bAA2FFq!T3'''r~   Fc                 V
   | \  }}|t           k    rt          ||||          t           fS |s2t          t          | d          t	          |                    rt
          |dz   }t          t          | |          }t          |d          \  }	}
}}d||z   z  }||k    r|rt          |          }t          |t          |          |          }t          t          |||          d          }t          ||          }t          |t          |          |          }t          |||          }t!          |||          S t#          t%          t          ||                    }t          |t          |          |          }t!          |||          S |t'          d|          z  }t)          |t                     rg|r^t          t          t+          t,          t          t          | |          |          |          }t/          t1          | |          |||          S t          t          | d|z            }t3          ||          }t1          ||          }t5          t7          | d          |          }|\  }}}}|\  }}}}t'          ||z   ||z             }|t'          d|          z   }t9          ||z             }t          |d          t           f} t;          t+          | | |          ||          }!t/          |t/          |t/          ||!|          |          ||          S t=          |dz  dz             }"|"t=          d	t?          tA          |                    z            z  }"tC          |"          }!tE          ||          }#tE          ||          }$tF          }%tF          }&tH          |z  }'tH          d
|z  z  }(|tJ          k    })tM          |          }*tO          |dz
            } ||z   }tQ          |"          D ]}+tS          |+dz   ||*          },|)r|(tU          |+dz   |z            z  }-ntW          |# |,z  |z	  |          }-|+dz  r|-|!|"         |!|+         z
  z  }-n|-|!|+         |!|"         z
  z  }-tY          |$ |,z  |z	  ||           \  }.}/|%|-|.z  |z	  z  }%|&|-|/z  |z	  z  }&|%|!|"          z  }%|&|!|"          z  }&t[          |%| |          }%t[          |&| |          }&|rt!          |%|&f||          S t          t          t+          t,          ||          |          }t%          |%|&f|||          S )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_liner1  r   r   r  wrewims0                                                   r|   r5  r5    s   FB	U{{D#s++U22  "vgannhtnn== "!!	B 	BA$Q^^E4sDHI2~~ 	)A9R=="--A'!Q++R00A1AAwqzz2..AAq"%%A1dC(((B//00AAy}}b11A1dC(((
c!Y
 b% A 	:''1b2I2I" " A8Ar??AtS999GQ2&&aQOOyB'',,!#tT3!#tT3$s(DH%%3q#;;BsF^^Q'Q,,b#66q71Qr??266tC@@@BtGaKASVBZZ 	!	!!AQA
2r

C
2r

C
C
C
R-C!B$G%KM
B--C
2a4..C
R%CAYY  AaCS)) 	0:qssl333AAC48*B//Aq5 	!A$1+AA!A$1+A 3$s(RS99SCBCBadUOCadUOC
sRC
$
$C
sRC
$
$C
 1Sz4---GWWa44b99Sz1dC000r~   c                 &    t          | ||d          S Nr   )r&  ry   rv   r   s      r|   mpf_altzetarN  r      AtS!$$$r~   c                 &    t          | ||d          S rL  )r5  rM  s      r|   mpc_altzetarQ  u  rO  r~   c                 p    |dk    r| S t           |z  }|r!|dz  r|| z  |z	  }|dz  }| | z  |z	  } |dz  }|!|S )Nr   ro   ru   )r   r{   r   r(  s       r|   	pow_fixedrS  |  sj    Avv2A
 q5 	1AFAqSRK	a   Hr~   c                    | t          t                    k     rJt          }t          d t                              t	          |                    dz            }t
          }|||fS dg| dz   z  }dg| dz   z  }t          |           }|D ]}t          || dz   |          D ]}|||<   t          |          D ]+\  }}|dk    r d}||z  } | |z  s| |z  } |dz  }| |z  |||<   ,|a|a|a|||fS )Nr   r   ro   )	lensieve_cacheprimes_cacheindexr   
mult_cacher
   r   	enumerate)r{   siever   multr   r   r   r   s           r|   
primesiever]    s@   3{?|11#e**==a??@fd""C1Q3KE3!A#;D^^F  !A#a 	 	AE!HH	%    166AQA!e aQ !e  DGKLJ&$r~   c           
      >   |dk     rt          d          t          ||z             \  }}}i }	t          |z  }
t          d|z  z  }||z   }t          |          }t	          |dz
            }|D ]}|dz  ||z   k    r nt          |||          }t          | |z  |z	  ||          \  }}| r|t          ||z            z  }nt          | |z  |z	  |          }||z  |z	  }||z  |z	  }||fg|	|<   ||}}t          dt          t          j        ||z   |          dz             dz             D ];}||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|	|                             ||f           <t          }t          }|dk    r||
z  }t          |d          }t!          |||z   dz             D ]}||         }||	v rn||         }|	|         |dz
           \  }}	 |||z  z  }|dk    rnA||         }||         }|	|         |dz
           \  }}||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}Pnkt          |||          }t          | |z  |z	  ||          \  }}| r|t          ||z            z  }nt          | |z  |z	  |          }||z  |z	  }||z  |z	  }||z  }||z  }||fS )Nr   za cannot be less than 1ro   g{Gz?)r   r]  r   r?   r>   r@   rO   r   rP   r   r   r   r   appendr   r   r   )rH  sresimrw   r{   r   r[  r   r\  basic_powersrx   rG  r)  r1  rB  r   r   cossinr   prepimrE  rF  r   xreximaar   s                                r|   zetasum_sievedrj    sU   1uu2333$QqS//E64L
R-C!B$G
R%C
B--C
2a4..C . .Q3199EAr3'' 3$s(RS99S 	.:af---AAC48b."--Aumum:,QSqTXac!__T1221455 	. 	.ASS2-#c'#c'/B1FCO""C9----	. C
CAvvs
	QqBB!A  !HQA#Aqs+HCLad
66!HG'?1Q3/S WSW_r1c#gc#go5JSL   2s++C$sd3h^R==HC 2z!S&111tCx"nb11S5R-CS5R-Cs
s
8Or~   r   c                   !"#$% dz   !t          |          }|dgk    }t          |          dk    }| \  }}	|t          k    }
t          |!          }t          |	!          }	|dk    rg|t          k    r\|sZ|sX|dk     st
          j        dk    rBt          |
||	||!          \  }}t          |! d          t          |! d          fg}|g fS t          |          }|st          |dz             }d |D             #d |D             "|rd	 |D             %d
 |D             $ng x%$t          !z  }t          d!z  z  }t          !          }t          !dz
            }!!z   }t          |||z   dz             D ]}t          |!|          }t!          |	 |z  !z	  !|          \  }}|
r|t#          ||z            z  }nt%          | |z  !z	  !          }||z  !z	  }||z  !z	  }|r|||z  z  }||z  !z	  }||z  !z	  }|r|rlt'          ||!          }#dxx         ||z  !z	  z  cc<   "dxx         ||z  !z	  z  cc<   |r,%dxx         ||z  !z	  z  cc<   $dxx         ||z  !z	  z  cc<   t          !z  }|D ]d}#|xx         ||z  !z	  z  cc<   "|xx         ||z  !z	  z  cc<   |r,%|xx         ||z  !z	  z  cc<   $|xx         ||z  !z	  z  cc<   ||z  !z	  }ek#dxx         |z  cc<   "dxx         |z  cc<   |r %dxx         |z  cc<   $dxx         |z  cc<   |rt|r8|dz  r2#d          #d<   "d          "d<   |r%d          %d<   $d          $d<   n:#fd|D             #"fd|D             "|r%fd|D             %$fd|D             $!fdt)          #"          D             }!fdt)          %$          D             } || fS )zI
    Fast version of mp._zetasum, assuming s = complex, a = integer.
    r   r   r   g    Al        r{   c                     g | ]	}t           
S r   r   r   r   s     r|   r   zmpc_zetasum.<locals>.<listcomp>      
)
)
)8
)
)
)r~   c                     g | ]	}t           
S r   rm  rn  s     r|   r   zmpc_zetasum.<locals>.<listcomp>   ro  r~   c                     g | ]	}t           
S r   rm  rn  s     r|   r   zmpc_zetasum.<locals>.<listcomp>      ---Ax---r~   c                     g | ]	}t           
S r   rm  rn  s     r|   r   zmpc_zetasum.<locals>.<listcomp>  rr  r~   ro   c                 ,    g | ]}d |z  |         z  S rq   r   )r   r   rg  s     r|   r   zmpc_zetasum.<locals>.<listcomp><  &    999B7SV#999r~   c                 ,    g | ]}d |z  |         z  S ru  r   )r   r   rh  s     r|   r   zmpc_zetasum.<locals>.<listcomp>=  rv  r~   c                 ,    g | ]}d |z  |         z  S ru  r   )r   r   yres     r|   r   zmpc_zetasum.<locals>.<listcomp>?  &    ===AQwQ'===r~   c                 ,    g | ]}d |z  |         z  S ru  r   )r   r   yims     r|   r   zmpc_zetasum.<locals>.<listcomp>@  rz  r~   c           	      b    g | ]+\  }}t          | d           t          | d           f,S r   r"   )r   xaxbrv   r   s      r|   r   zmpc_zetasum.<locals>.<listcomp>A  R     
' 
' 
'R RCs++\"rc4-M-M
N 
' 
' 
'r~   c           	      b    g | ]+\  }}t          | d           t          | d           f,S r   r~  )r   yaybrv   r   s      r|   r   zmpc_zetasum.<locals>.<listcomp>C  r  r~   )listrU  r   r!   ZETASUM_SIEVE_CUTOFFsysmaxsizerj  r"   r   r   r   r?   r>   r   r@   rO   r   rP   rS  zip)&ry   rw   r{   derivativesreflectrv   have_derivativeshave_one_derivativer`  ra  rH  r
  r  xsmaxdrx   rG  r1  rB  r)  r  r   rc  rd  r   xterm_rexterm_im
reciprocalyterm_reyterm_imrz   r   ysr   rh  rg  r|  ry  s&        `                           @@@@@r|   mpc_zetasumr    s   
 
B{##K"qc)k**a/ HCE\M
3

C
3

C1uu)))2B) *!"SCK%,?,?sCArBBBBT3//b2#tS1Q1QRS2v{D $DFmm *
)[
)
)
)C
)
)[
)
)
)C ----------c
R-C!B$G
B--C
2a4..C
R%CAqs1u $# $#Ar3'' 3$s(RS99S 	.:af---AAC48b."--AG?G? 	0!ac*J"S(R/H"S(R/H 	#" (T2..A8c>b00A8c>b00 5FFFx#~"44FFFFFFx#~"44FFFrM$ ( (AFFFx!|22FFFFFFx!|22FFF 7A8a<B"66A8a<B"66SRAA( FFFhFFFFFFhFFF #A("A(" > 	>ax %a&Aa&A %!!fWCF!!fWCF9999[999C9999[999C >==============
' 
' 
' 
' 
'C
' 
' 
'B
' 
' 
' 
' 
'C
' 
' 
'Br6Mr~   i  i:  g?   c                 F    g | ]}t          t          |                    S r   )r   r   )r   r{   s     r|   r   r   \  s6     . . . "$q''** . . .r~   c           	      T   d|z   t           g| dz   z  }t                    }t          z  }| dz  |d<   t          t	                    d          }t          |          x}}g }d}		 d|	z  z
  }
|
dk     rnt          t          t          |t          |
          |
          }t          |t          |||
          |
          }t          |          }t          |          }|	|z  |z  z	  }|                    ||f           t          ||          }|	dz  }	t          d| dz   d          D ]Q}t           }d}	|D ];\  }}|dz  dk    r	||	|z  z  }n|dz
  dz  }|||z  z   |	|z  z  }|s n||z  }|	dz  }	<d|z  ||<   Rfd	t          | dz             D             }t          t          t	                    d          d          x}}t          |t          d                    }t          d| dz   d          D ]d}t          ||         |          }t          |          ||<   t          ||          }t          |t          |dz   |dz   z                      }e|z  |z  }t          d| dz   d          D ]y}|dz
  dz  }|d|z  dz            d|z  d
z   z  dz  }t          d|dz             D ](}	||d|	z           |d|z  dz   d|	z  z
           z  z	  z  })||xx         d|z  |z  z	  z  cc<   zt          d| dz   d          D ]}|dz
  dz  }|d|z  dz            d|z  dz   z  }t          dd|z  dz             D ]4}	|d|	z  dz  |	z  |d|	z           z  |d|z  dz   d|	z  z
           z  z	  z  }5||xx         ||z  z	  d|z  z  z  cc<   f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   ro   r   r   r   rn   r   r   c                 J    g | ]}t          t          |                     S r   )r&   r   )r   r   r   s     r|   r   zzeta_array.<locals>.<listcomp>  s+    ;;;!q$$	%	%;;;r~   r   r   rq   c                     g | ]}|z	  S r   r   )r   r   r   s     r|   r   zzeta_array.<locals>.<listcomp>  s    ***AuH***r~   )r   r>   r   r3   r=   rB   r+   r   r(   r)   r!   r_  r   r-   r   )r   rv   zeta_valuesr   rx   f_2pi	exp_2pi_kexp_2piexps3r   tpq1q2r{   ry   e1e2rz   r   r   pi_powfpir   reciprocal_pir   r   s                           @@r|   
zeta_arrayr  _  s    E	eB*!$K	"B
R-CT1WKNfRjj##E!%,,,I
 E	A!A#X66T79dB77<<Y2b 1 1266b"b""frkb b"XIw33		Q  AqsA   		 		FBsaxx!Q$JqS1H"a%ZAqD( FAFAAAA;;;;vac{{;;;AyQ77B???FSVXa[["--FAac!__ < <AaD&"%%!!RAb))1Q31+!6!6;;BY2%MAqsA 4 4qS1H!A!A&)1Q3 	C 	CA+ac"[1Qqs%;;BBAAA1Q3},33AqsA 9 9qS1H!A!A&1Q3q5!! 	N 	NA2'!)A+{1Q3//+ac!eAaCi2HH2MMAAAAmOb0AaC88****k****r~   c                 x  	
 | dk     r| d| dz  z
  z   
n| dk     r| d| dz  z
  z   
n| 

t           v rt           
         
fS 
dk     rt          
dz  dz             }nt          
dz  dz             }t           D ]A		
k    r9	
fdt           	         | d	         D             }| dk     r
|t           
<   |
fc S B
dk    rt          
d
z            

dz   }dg|z  }t          |d<   t          |z  |d<   t	          |          |d<   t          ||          }t          d|          D ]Z}|d          ||dz
           z  |z	  }t          d|          D ]"}|d|z  ||         z  |||z
           z  |z	  z  }#|d|z
  z  }|||<   [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?ro   gv/?c                      g | ]
}|z
  z	  S r   r   )r   r   cprecrv   s     r|   r   z-gamma_taylor_coefficients.<locals>.<listcomp>  s!    NNN!a%*oNNNr~   Ng333333?rl   r   r   rn   rq   c                     g | ]}|d z	  S )rl   r   )r   rw   s     r|   r   z-gamma_taylor_coefficients.<locals>.<listcomp>  s    1Br~   )gamma_taylor_cacher   r   r   r   r  r   gamma_taylor_coefficients)inprecr   coeffsr   r   r  r   rw   r   r  rv   s            @@r|   r  r    sC    ||VBY(	$VBY(!!!!$'-- d{{d
Q ea   $    4<<NNNNN/A%/H!/MNNNF}}+1"4(4<	  d{{4#:	B	
aAAaDb=AaDr??AaD Q##KAq\\  dU1QqS6\B! 	; 	;A2'KN*QqsV3::AA	qs!A	$$B$A	#2#A t$V,,,r~   c           	      2   ||dz
  z	  t           z   dz	  }t           |z  }t          |          \  }}	|dk    r|}
t          |dz
            D ]}||z  }|
|z  |z	  }
||z  }t          }|D ]}|||z  |z	  z   }||	|z
  z  }|dk    rt	          |
|z  |z  | ||          S |dk    r#t          t          ||
|z  ||          |          S |dk    r3t          t          t	          |
|z  |z  |                     ||          S d S |}
t          |           D ]}|
|z  |z	  }
||z  }t          }|D ]}|||z  |z	  z   }||	|z
  z  }|t          t          |                    z
  dk    rt          | t          |                     }t	          ||
z  | |z
            }
t          |
||          }
|dk    rt          t          |
||          S |dk    rt!          |
||          S |dk    r2t          t          t          t          |
|                    ||          S d S t	          ||z  |
z  d|z            }
|dk    rt          t          |
||          S |dk    rt!          |
||          S |dk    r+t#          t          t          |
          ||                    S d S )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  r8  s                  r|   gamma_fixed_taylorr    s    "Q$K7*q0K
R-C+B//KFCQA&& 	 	AHA1AA	S 	  	 AacBYAA	s2v199B
RCs;;;199]1q"utSAA2FFF1997<B
RC#@#@AA4MMM 9 %% 	 	A1AHAA 	  	 AacBYAA	s2vQ   2%%h|4455AQqS"R((A1b!!AqyytQc222qyyq$,,,qyywwtQ';';<<dCHHH y QqSU2b5))Aqyyq$!<!<<qyyD#!6!66qyyT3)G)G!H!HHyyr~   c                    | t           v rt           |          S t          |           \  }}|t          | | dz
  z            z  }||t          t	          |                    t          |          ft           | <   t           |          S rL  )gamma_stirling_cacher   r   r6   r   )r{   r   r   s      r|   stirling_coefficientr    ss       #A&&A;;DAqQ!WAHSVV$4$4hqkkA""r~   c                 F   t           ||z   z  | z  }||z  |z	  }t          |          | z
  }||dz  z  }||z  |z	  }||dz  z  }||z  |z	  }||dz  z  }||z  |z	  }||dz  z  }||z  |z	  }|s|S ||dz  z  }||z  |z	  }|d|z  dz  z  }||z  |z	  }||dz  z  }||z  |z	  }|s|S |d	|z  d
z  z  }||z  |z	  }|d|z  dz  z  }||z  |z	  }|d|z  dz  z  }||z  |z	  }|s|S d}t          t          |                    }t          t          |                    }d}	 t	          |          \  }	}
}}||z   |z   }| }||z
  }|dk    r||k     r
|	|z  }	||z  }||z
  }|dk    r||k     r||z	  }||z  }n|}||	z  |
z  |z	  }|sn||z  }||z  |z	  }|||z
  z  }|dz  }|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   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  "  sz    
49	!#A	
1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	A1tAQh
A SVVESVVED+A..1b"2:$Mq55UQYY!GAQJEHq55UQYYQAQJEEA!Q5  		T	qSUN	Q)* Hr~   c                    | | z  ||z  z   |z	  }| |z  |z  }| |z  |z  }||z  ||z  z
  |z	  }||z  |dz
  z	  }t          |          | z
  }| }	||dz  z  }|	|dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}||dz  z  }|	|dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}||dz  z  }|	|dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}||dz  z  }|	|dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}t          |          t          |          z   dk     r||	fS ||dz  z  }|	|dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|d|z  d	z  z  }|	d|z  d	z  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}||d
z  z  }|	|d
z  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}t          |          t          |          z   dk     r||	fS |d|z  dz  z  }|	d|z  dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|d|z  dz  z  }|	d|z  dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|d|z  dz  z  }|	d|z  dz  z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}t          |          t          |          z   dk     r||	fS d}
t          t          t          |          t          |                              }t          t          t          |          t          |                              }d}	 t	          |
          \  }}}}||z   |z   }| }||z
  }|dk    r||k     r
||z  }||z  }||z
  }|dk    r||k     r||z	  }||z	  }||z  }n|}|}||z  |z  |z	  }||z  |z  |z	  }t          |          t          |          z   dk     rn4||z  }|	|z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|||z
  z  }|
dz  }
||	fS )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   _mrE  rF  ureuimr`  ra  r   r  r  r  r   r   r  r  r  r  r   rI  rJ  termretermims                            r|   complex_stirling_seriesr  W  s^   
A#!)	B9
C2:"
Cs7SW
%C
c'd1f
C
4
 
 1
$C"C 37NCC37NCSS4'CGCGOd+BC38OCSCH_SSS4'CGCGOd+BC39CcS$Y&cSS4'CGCGOd+BC39CcS$Y&cSS4'CGCGOd+BC
3xx#c((QsCx39CcS$Y&cSS4'CGCGOd+BC3s7F?CC3s7F?2CSS4'CGCGOd+BC38OCSCH_SSS4'CGCGOd+BC
3xx#c((QsCx48VCSDHf$44SSS4'CGCGOd+BC59fCcU3Y%66cSS4'CGCGOd+BC6#:vCsfSj&&88sSS4'CGCGOd+BC
3xx#c((QsCx
A SS3s88,,--ESS3s88,,--ED+A..1b"2:$Mq55UQYY!GAQJEHq55UQYY(C(CQJEECCa%(u$a%(u$v;;V$q((vvWs3w&.#gC%' 	Q34 8Or~   r   c           
         | \  }}}}|sZ| t           k    r)|dk    rt          S |dk    rt           S t          d          | t          k    r|dk    rt           S t          S t          S |dk    r?|dz   }||z   |k    r1|s/t          t          | t          | |          |          | ||          S |dk    }	|	r|r|dk    rt           S t          d          ||z  }
|
t          k     r|dk    rt          t          |
dz
           ||          S |dk    rt          t          |
         ||          S |dk    r%t          t          t          |
dz
           ||          S |dk    rt          t          |
dz
           ||          S nt          || z	            }
||z   }|
|z  }|dk    r|dz   }n|t          |          z   dz   }|| k     r|dk    r:t          t          t          | |          t          t          |           ||          S |dk    rt          t          | ||          S |dk    r(t          | t          t          ||z
            ||          S |dk    r+t!          t          t#          |           ||                    S |dk    r%t%          t          | t                    ||d          S |dk    r|	r|d|z  k     r|dk    r!t'          t)          |
dz
            ||          S |dk    r't+          t,          t)          |
dz
            ||          S |dk    r.t          t'          t)          |
dz
                      ||          S |
d	k     s
|d|z  k     r|rt/          |          }|
dz  rt1          d|
z  dz             }nt1          d|
z  dz              }|dk    r't          t+          ||||          | |
z   dz             S |dk    r&t          t+          ||||          ||
z
  dz
            S |dk    rCt          t          t+          |t3          |          ||          | |
z   dz             ||          S n|
dk    re|dk    rt5          ||          S |dk    r$t          t          t5          |          ||          S |dk    rt          t5          |          ||          S nt/          |          }t7          |t1          d|
z  dz
            z  | |
z
            }|dk    rt          |||          S |dk    rt          t          |||          S |dk    rt          t#          |          ||          S ||z   }|dk    r||z  }n|| z	  }|dk    rW|sTt,          |z  }t3          ||z
            }t3          |d|z  z
            }|t          t9          ||                    z
  }|dk    rt          t          |           }t          t:          |           }|d         |d         z   }|d         |d         z   }|| k     r2t          t=          |          t          t          |           ||          S || k     rEt          t          t          t=          |                    t          | t:                    ||          S |t?          | |           z  }||z   }|dk    r||z  }n|| z	  }t          t@          |z            }|
t?          d	|          k     r$|tB          k     r|r| }tE          | |||||          S | }d}|
|k     rUt,          |z  x}}||
z
  }tG          |          D ]}||z  |z	  }||z  }t7          ||           x} }|rt!          |           } nt#          |           }tI          ||          }tK          t          ||          |          } |t,          |dz
  z  z
  | z  |z	  } || z  }t7          ||           }|r:t          tM          ||          ||          }!t!          tO          |                    }"|dk    s|dk    rpt          |!tQ          ||                    }!|r t          |"t7          ||           |          }"|dk    rt          |"|!||          S |dk    rt          |!|"||          S |dk    r{|r t          |"t7          ||           |          }"t          t          t#          |!          |          ||          }!t          t          t#          |"          |          |!||          S d
S |dk    rB|r/t          tQ          ||          t7          ||           ||          S tQ          |||          S |dk    rO|r/t          t7          ||           tQ          ||          ||          S tQ          t!          |          ||          S |dk    rB|r/t          |t          t7          ||           |          ||          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   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{   rA  
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{
    D#sB ::qyy+qyy,233399qyy,K
 qyy"Wr6B;;t;71gannb991dCHHH J  	4qyy23333J)))qyy4QqS94EEEqyy4Q7sCCCqyyt%:1Q3%?sKKKqyy4QqS94EEE  (C3JqyyBYHZ(((2- bSyy199742..yrc/B/B4LLL199WT1dC888199WQ	$s2v(>(>cJJJ199WWWQZZs%C%CDDD qyyD))4a888
 byy 	CBrE!!199#D1IItS999199($qs))T3GGG199"8D1II#6#6cBBBs77j2b5(( D $$q5 ,eAaCEll!!$QqSU||m!199$]1as%C%CbSU1WMMM199$]1as%C%CRT!VLLL199"9]1c!ffc.# .#%'CE!G$- $-.2C9 9 9  a199Zc%:%::199WT:b>>4%M%MM199WZ^^T3%G%GG9 $$ U1Q3q5\\!1B3q599199WQc%:%::199WT1dC%@%@@199WWQZZs%C%CC 2XF{{cVmGG!vg.G qyyymws{##wqu}%%Xc(H&=&=>>>"D!$$ED!$$EQxa(HQxa(H2#~~y}}gdA.>.>cJJJ2#~~wtYr]];;At$$dC1 1 1 #xi(+++B2XF{{cVmGG&)vg&6G ,R/00N3sN####-B(B(B 	hG!!Wb$TBBB E 	
A>R-CQ 	 	AW#AsNGG"---D 	

Aqzz 	Wb))Ar""B''A
Wr!t_
%	*r1AFAQA  )Jub))5"55F2JJ199		71b>>**A 9A|As33R88qyyq!T3///qyyq!T3///199 9A|As33R88

B//B77A771::r22AtSAAA	 9 199 5wq"~~ RC(($5 5 51dC(((199 /|As33ArNND#/ / /71::tS111199 Oq',q"*=*=r"B"BD#NNN1dC((( 9r~   c           
         | \  }}|\  }}}}	|\  }
}}}|t           k    r`|dk    rA|r?t          |||d          }| | z	  }t          t          |dz             |||          }||fS t          ||||          t           fS |s|s|s|rt          t          fS |dz   }||	z   }||z   }|rt          ||          }n|}|dk     r|| k     rt          | t          t          | | |          t          |          |          |          }|dk    rt          |||          S |dk    rt          | |||          S |dk    rt          |||          S |dk    rt          t          ||          ||          S n|dk    r|| z  }|dk    r=||k    r7|r||k    r/t          t          | t          | |          |          | ||          S |dk    r't          t!          |t"                    |f||d          S t%          t'          |                    }t%          t'          |                    }t          ||          }||z  }|dk    rn|t)          |          z  }|}| }|r-t+          |           } | d         x\  }}}}	}| d         x\  }
}}}}d}d}|dk     r|dk    r;t-          | t"                    }|d         t           k    r| }n,t          |d         d         |d         d         z   |           }||k    rt          |          } t          || |          }!t          |!|!|          }!t/          |!t1          d	          |          }!t          |t3          t          |                    |          }"t          |!|"|          }|st          |||          S n|dk    r||z  }t-          | t4                    }#|#d         t           k    r| }$n,t          |#d         d         |#d         d         z   |           }$|$|k    rt          |          } t7          t9          | |           t1          d
                    }%t          t          |#|#|          |%|          }!t/          |!t1          d	          |          }!t          |#t7          t"          t          |                    |          }"t          |!|"|          }|st          |||          S n|$dk    r||$z  }|| k     rd|dz   z  }&t;          |          }'t=          t"          ||z
            }(t          |'|&|          })t          t!          |'|(          |&|          }*t?          t7          |*|)|&          |(|&          }+t9          ||+||          }"|)|"f}|st          |||          S n|| z  }||z  }tA          tB          |z            },||,k     }-tE          ||          }.tE          ||          }/d}0|s| }1||,k     rtG          ||          }tA          d|,dz  z   |dz  z
  dz  |z
            }2tH          |z  x}3}4tJ          }5tM          |2          D ]#}6|.|3z  |/|5z  z
  |z	  |.|5z  |/|3z  z   |z	  }5}3|.|4z  }.$tO          |3|           tO          |5|           f}0tO          |.|           }||f} tQ          |.|/|          \  }7}8t          | |          \  }9}:tE          |9|          }9tE          |:|          }:|9|.z  |:|/z  z
  |z	  |9dz	  z
  |7z   }7|9|/z  |:|.z  z   |z	  |:dz	  z
  |8z   }8tO          |7|           tO          |8|           f}"|0r:|dk    r3t          |"t          |0|          |          }"tS          |1d                   };tS          |1d                   }<tU          j+        |;|<          }=tS          |"d                   }>tU          j,        |<|;          }?|=dk    r	d|<z  |?z
  }@n'|< d|?z  z
  |;|?z  z   |<tU          j-        |=          z  z   }@tA          tU          j.        |@|>z
  dtT          j/        z  z  dz                       }|"d         t!          |"d         t          t          |          d|z  |          |          f}"|rY|dk    s|dk    rt          ta          ||          ||          }At3          t          |                    t           f}B|r*|dk    rt          |A||          }An1t          |A||          }Ant          |Atc          |"|          |          }A|0rt          |B|0|          }B|dk    rt          |B|A||          S |dk    rt          |A|B||          S |dk    rt|rt+          |          }Cnt+          |"          }Ct          |Ct          t+          |          |          |          }Cte          |d                   }Dtg          |d                   }Et          |          } t9          | |D          }%t          |%|E|          }%|Cd         t!          |Cd         |%|          f}Cti          |Ctk          | |          |          }Cta          t-          ||D          |          }%t          |%|          }%t          |C|%|          }C|Es=t9          | te          |D          |          }%|Cd         t7          |Cd         |%|          f}Ct          |C||          S d S |dk    r3|0r t          tc          |"|          |0||          S tc          |"||          S |dk    r@|0r t          |0tc          |"|          ||          S tc          t+          |"          ||          S |dk    rt          |"||          S d S )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   r6  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bmagrA  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   ry  r|  lrelimzfazfbzfabsyfbr   gir   r   s1rezfloorimzsignsF                                                                         r|   r6  r6  m  s   DAqE4sE4sEzz19991dC++BTE"AVDG__as;;Br6MD#t,,e33  T 4 D d| 
B8D8D $oo Rxx"99;wq2y}}RHH"MMAqyy4!=!==qyyAtS!9!99qyyD#!6!66qyy4)@)@$!L!LLyQYYC4LB
 qyyS2XXX44<<wq'!R.."55q$DDD qyy'!T**A.c1===	VAYYB	VAYYBr2;;DcJqyy
hz""" OE *AJJ%&qT)tT3%&qT)tT3 FLczz1994((EQx5  %uQx{58A;6===||BZZr2..Aq"%%8B<<44wy}}'='=rBB Ar**& 6"6455561g4((EQx5  %uQx{58A;6===||BZZGBOOXa[[99ub 9 91bAA8B<<44wtYr]]'C'CRHH Ar**& 6"6455561g2#::BrEB1::DD$r'**C4$///B74--r===BWRR00#r::F64--A!WF # 2vtS1112 dU#L,B,R/00NN*NAr??DAr??D	A (L.  2r??DQ**RU2S82=>>A2%C#CAYY  !#Xd3h.3S488Kb7PSS2#&&S2#(>(>>ATB3''A1A*4r::S1b>>SsBsBD3t8#b(S!V4s:D3t8#b(S!V4s:rc""Lrc$:$:: 	L 71b>>2..A71:&&C71:&&CJs3''E1Q4..C
3$$A||c\A%TCE\CE)C,??DJ3473C78899A1wqt[QqS"%E%ErJJKA 8)199		
5"--ub99A$$e,A 319962..AA62..AAAwq"~~r22 &Aq"%%qyyAtS!9!99qyyAtS!9!99 199  V__QZZWWU^^R88"==B q**HuQx((GBH%%AAw++AQ%A2../BRR"55B;uh77<<A2AQ##B  4B	( 3 3R88eWRUAr2232tS)))/ 92 199 =wq"~~q$<<<1dC(((199 =q'!R..$<<<71::tS1111991dC((( 9r~   c                 &    t          | ||d          S rL  r  r   rv   r   s      r|   mpf_factorialr  W      Qc1%%%r~   c                 &    t          | ||d          S rL  r6  r  s      r|   mpc_factorialr  Z  r  r~   c                 &    t          | ||d          S Nro   r  r  s      r|   
mpf_rgammar  ]  r  r~   c                 &    t          | ||d          S r  r  r  s      r|   
mpc_rgammar   `  r  r~   c                 F    | \  }}}}|rt           t          | ||d          S )Nrn   )r:   r  )r   rv   r   r   r   r   r   s          r|   mpf_loggammar"  c  s2    D#sB Qc1%%%r~   c                     | \  }}|\  }}}}|\  }	}
}}|t           k    rA|r?t          |||d          }| | z	  }t          t          |dz             |||          }||fS t	          | ||d          S )Nrn   r   )r   r  r*   r=   r6  )r   rv   r   rw   r   r+  r,  r-  r.  r  r  r  r  r
  r{   r  s                   r|   mpc_loggammar$  i  s    DAqE4sE4sEzzezq$Q''UR!T3772vQc1%%%r~   c                     | t           k     rt          t          | dz
           ||          S t          t	          |           ||          S rL  )r  r$   r  r  r   )r{   rv   r   s      r|   r   r   t  sB    %%%,QqS14===Xa[[$,,,r~   r   )r   r   )r   )__doc__r   r  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&  r5  rN  rQ  mpf_zetasumrS  rV  rW  rY  r]  rj  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r6  r  r  r  r   r"  r$  r   r   r~   r|   <module>r4     sa	     



       < < < < < < < < < < < < < < 9 9 9 9 9 9 9 9 9 9 9 9                                                                                                                                            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 
 
 
H   B 2 2 2z   *      0      2 [))	[))	////}--}--  11  @ Xa[[Xa[[2 2 2
 '':;; I I I IV	/ 	/ 	/ 	/T T Tz:@9 9 9= = = % 9) 9) 9) 9)v % 3 3 3 3l ' 0 0 0 0 ' < < < <J(T     ( 3. 3. 3. 3.j %! U( U( U( U(n %!5 X1 X1 X1 X1t ( % % % % ( % % % % 
 
 
 
  67 7 7t  a a aV  u$$$$      . .	)!+	,	,. . . O+ O+ O+b7- 7- 7-r/I /I /Ib# # #3 3 3jE E EPK) K) K) K)\h) h) h) h)T& & & && & & && & & && & & && & & &	& 	& 	& 	&  * - - - - - -r~   