
    "`"                       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 Z eedz         D  cg c]  }  e! e|              c} Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd?d5Zd?d6Zd@d7Zd@d8Zd@d9Zd@d:Zd@d;Zd@d<Zefd=Zyc c} w )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                    | dz   } t         | z  x}}d\  }}}|rd|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  }|rd|dz	  S )N   )r   r   r             r      (         r   )precaonestns         8/usr/lib/python3/dist-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                 P   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nH||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   sb   	TD#I"	#BA
1+CmA	Bwr2r2A66EF	A
qsB/0+b)&"%3,!#)b0#: 	
T		S1Q3q5\C!A#J&&	Q#!ac!e}b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nZ||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      sA   	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
2g4B&RC !A#r"q!R tS"%b!t9s? 	
T	!eaRT2a41,1b!!eaRT2a41,1b!	Q#!ac!e}b1# & 
"BFA	
bb!erk"ARA',qtbS126	;;A"HAQ$b)AAtr~   c                     | dz  } t         | z  }t        d      | z  }d}t        }|rF||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  }|rF|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r7d?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  }Q|| |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DHHd1f+Q/014A	1AByAtOA	A
adFAqDLq!tVQY]Q	Q	Qs1vs1v$	Q  U
Oar~   c                     | dz   }d}t        |      }	 t        ||      }|t        k(  rnJt        ||      }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9ArN71:r*Ax{B'AqM	Q  Atr~   c           	      4   d }d| z  dz   }t         }dD cg c]  }t        d||       }}|D cg c]  }t        |||       }}d}	 t        ||      }t	        d      D ]6  }	t        |t        t         ||	         |      }t        ||	   ||	   |      ||	<   8 t        | ||       |      }t        || dz   d      t         k(  rnt        |||      }|dz  }t        |t        d	      |      }t        |t        d
      |      }t        ||       S c c}w c c}w )Nc                 L     t         fdt        d dz         D               z  S )Nc              3   L   K   | ]  }|z  r	t        |      |z  z    y wN)r   ).0r   r{   s     r|   	<genexpr>z-twinprime_fixed.<locals>.I.<locals>.<genexpr>>  s$     H!AaC71:1%Hs   
$$r   )sumr   r{   s   `r|   Iz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   ;  s4   L	
4"B
C-67mAa#7F7(./1wq2/G/	A
Bq 	<A744b9A VAY;GAJ	< AaD5"%1d2gs#t+ c1b!	Q  #x("
-C
#x("
-CC# 8/s
   DDi  rn   r   c                 b    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     s1    
((1Q-Cus3wC%K0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
        kD  r8|t        |       dz  dz   kD  r$t        |       \  }}t        ||||xs t              S | t        kD  rt        | ||      S |dz   }|d|d	z  z
  z  }t        j                  |      }|r;|\  }}| |v r|s||    S t        ||    ||      S |\  }	}
}| |	z
  d
kD  rJt        | ||      S | d
kD  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kD  r|d|	z   d|	z   z  z  |	dz
  |	dz
  z  z  }|	|
|g|dd |	| k  r||    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   1uq5HII6K65>!1u
 ##~a/@/Dt/K(K{1Q4);<<!!T3//	B"r	
B  $F<qz!71:tS113q52:%as33r6%as33T( !3r7G443u&.
q&1u a 1d|r!q5A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<=A	> 19,qsB3a19,qsB3a19,r!tR4aD"%GAq"%x}b9
	QacAaC[!a1g.q5AaC!A#;'QqS1Q3K8DsD>aA q&B 1:r~   c                 F   |dz   }|t        t        j                  | d            z   }t        | dz   |      }t	        |t        | |      |      }t	        |t        t        |      |  |            }t        |d| z
        }| dz  st        |      }t        |||xs 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#dhhqm$$Fac2A<2&+A;vf~r267A!QqSAq5AJ1dC-:..r~   c                 H   t        |       } | dk  rg d|    S | dz  ryd}t        | dz         D ]  }| |dz
  z  r||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1u(++1u	A1 QqS	FA !s488Aa=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     sK    UD$q$q&)40A1iQ,dC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     sZ    tu}QqT4-u55Qd1f-t4Aq)DFC0$<<r~   c           
      l   | \  }}}}|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  r;t        t        | t        ||      ||      }t        |t        t        | ||      ||      S |ra||z   dkD  rYt        | |      \  }	}
t        t        |	|
|      t        |      |      }t        t        t        | |      |      }t        ||||      S |s$||z   |kD  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kD  r||k\  rn|}|dz  }jt)        |
| ||      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9Qh:d4KEzcQh4)**
2v{WQdC0$<q'$2s3T3??B
a$1GAq"%vbz26WT1b)2.q!T3''b3hmwq$+T377q	ADGqAABA
R-C1u1 	A#)!!AHA	 HA',q2#r2B7	<<A#)1	A
A#"BAD	A
rTbL!.qsB!7tT32+Q;AqsG< $& 1q!A#w?q5!t)!t)!q5TT\	Q  B3C((r~   c                    | \  }}|t         k(  rt        |||      t         fS |dz   }|\  }}}}	|rj||	z   dkD  rbt        | |      }
t        | |      }t	        t        |
||      t        |      |      }t        t        t        | |      |      }t        ||||      S |s$|	|z   |kD  rt        t        | t        |      ||      S t        |      }t        d|z        dz   }t        }||k  r9t        ||      D ]*  }t        |t        | |      |      }t!        | t"        |      } , 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kD  rt7        ||      r	 |S |}|dz  }l)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   epsbernr   szterms                           r|   r   r     s   
 FB	U{T3'//	BD#sBB
q"q"1b)6":r:WWa,b1q!T3''b3hmwq'2.c::r
ADGqAA1u1 	)A>!R0"5AAtR(A	) 	7BA71b>2&A78Q+R0A	Ar	BAD	A
D2#a%
 C
Ar2QqS"%4Q!R!8"=AtR r"q5VFC( H 	Q r~   c                 ^    | 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     s4    
 	Av4Z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 |s3|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  r@t        ||      D ]1  }t        ||  dz
  |      }t        |||      }t        |t        |      }3 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kD  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   
 	Av4%%FB	BD#sBa5$t$$$<:"+5>!:$<r
ACFQqSLAA1u1 	)AAr!tR(A1b!AAtR(A	) 
QB	B	QB	BHQK4M="%A;wr1b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#3T3?AEAaDM71Q4=(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  }|||<   6 |t         | <   |S )Nr   r   r   ro   )borwein_cacher   r   r   )r{   dsr   ry   r   s        r|   borwein_coefficientsr  z  s    MQ
qs	BAA11ac] EQqSUOqs1u%	!1a !	Q1	
 M!Ir~   r   c           	      
   |dz   }t        |       } | t        v r&t        |    d   |k\  rt        t        |    d   ||      S | dk  rI| 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\  rHd|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 ]a  }t        || t!        j"                  |d      z  z
        }	|	dk  r n5t%        t        t'        t        |      |  |	      |      }
t)        ||
|      }c t        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     s    
BAAN~a03r9~a(+T3771u6^,,5>!}aRT2.1tSIIBw4D#..	
bhr'C	Q26]	SY!^$$	Q#aac"""AsD#.. 2Y!_q r6sAvz?Lc"T'A+.33$\2 *A!"q!A"67G{k(1+r7&KRPA1b)A* tQ++BtGaKAQAAAAAY ;	Qw!A$1+&2-1Q3(::;	
bqteA	
bqBw1Aa=12A	^q 1! 4r 9q?Va"R!89qB3r64--r~   c                    | \  }}}}|s5| t         k(  r|rt        S t        t              S | t        k(  rt        S t
        S |dz   }|s1||z   t        j                  |d      dz   kD  rt        t        |||      S |dk\  r|ro| t        k(  rt        ||      S t        t        |       |t        |         }	t        t        t        t        t        t        | |      |      |      }
t!        |	|
||      S t        t        |       ||      S |r|rGt        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  }||kD  r?|rt        ||      S t        t/        t        ||            }
t3        |
t5        |      ||      S |t+        d|      z  }t6        }t9        |dz  d	z         }t;        |      }t6        }t=        | |      }t?        |      }tA        |      D ]D  }| tC        |dz   ||      z  |z	  }tE        |||      }||   ||   z
  |z  }|dz  r||z  }@||z  }F |||    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     sX   D#sB:u~%9K	BsRx488Bq>A#564dC00	DytS))VAYL,=>AgdGD!R,@"ErJA1as++q	455
 gdGD!R,@"ErJA8Ar?AtS99D!RU#aQOyB',3qR= BsF^GIb!,a5r3?q71Qr?26tC@@ 	aA$QZE4sDHI2~4%%a,-A1imT377
c!YA 	BtGaKAQAA	!R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!T3''r~   Fc                    | \  }}|t         k(  rt        ||||      t         fS |s%t        t        | d      t	        |            rt
        |dz   }t        t        | |      }t        |d      \  }	}
}}d||z   z  }||kD  r|rtt        |      }t        |t        |      |      }t        t        |||      d      }t        ||      }t        |t        |      |      }t        |||      }t!        |||      S t#        t%        t        ||            }t        |t        |      |      }t!        |||      S |t'        d|      z  }t)        |t               r|rGt        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_liner+  r   r   r  wrewims0                                                   r|   r/  r/    s<   FB	U{D#s+U22 vganhtn=!!	B 	BA$Q^E4sDHI2~A9R="-A'!Q+R0A1AAwqz2.AAq"%A1dC((B/0AAy}b1A1dC((
c!Y
 b%''1b2I"A8Ar?AtS99GQ2&aQOyB',!#tT3!#tT3$s(DH%3q#;BsF^Q'Q,b#6q71Qr?26tC@@BtGaKASVBZ 	!!AQA
2r
C
2r
C
C
C
R-C!B$G%KM
B-C
2a4.C
R%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Sz1dC00r~   c                     t        | ||d      S Nr   )r   ry   rv   r   s      r|   mpf_altzetarH  q      AtS!$$r~   c                     t        | ||d      S rF  )r/  rG  s      r|   mpc_altzetarK  t  rI  r~   c                 n    |dk(  r| S t         |z  }|r"|dz  r|| z  |z	  }|dz  }| | z  |z	  } |dz  }|r"|S )Nr   ro   ru   )r   r{   r   r"  s       r|   	pow_fixedrM  {  sY    Av2A
q51AFAqSRK	a  Hr~   c                    | t        t              k  r9t        }t        d t        j                  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\  sd}||z  } | |z  s| |z  } |dz  }| |z  s|||<   . |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|   
primesieverW    s   3{?|11#e*=a?@fd""C1Q3KE3!A#;D^F !A#a 	AE!H	 %  16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   kD  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 ]4  }||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|	|   j                  ||f       6  t        }t        }|dk(  r||
z  }t        |d      }t!        |||z   dz         D ]  }||   }||	v rW||   }|	|   |dz
     \  }}	 |||z  z  }|dk(  rn||   }||   }|	|   |dz
     \  }}||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}Ct        |||      }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   rW  r   r?   r>   r@   rO   r   rP   r   r   r   r   appendr   r   r   )rB  sresimrw   r{   r   rU  r   rV  basic_powersrx   rA  r#  r+  r<  r   r   cossinr   prepimr?  r@  r   xreximaar   s                                r|   zetasum_sievedrd    s   1u233$QqS/E64L
R-C!B$G
R%C
B-C
2a4.C .Q319Ar3' 3$s(RS9S:af--AC48b."-Aumum:,QSqTXXac!_T12145 	.ASS2-#c'#c'/B1FCO""C9-	..  C
CAvs
	QqBB!A !HQA#Aqs+HCad
6!HG'?1Q3/S WSW_r1c#gc#go5JS   2s+C$sd3h^R=HCz!S&11tCx"nb1S5R-CS5R-Cs
s
/0 8Or~   r   c                 2   |dz   }t        |      }|dgk7  }t        |      dk(  }| \  }	}
|	t        k(  }t        |	|      }	t        |
|      }
|dkD  r[|t        kD  rR|sP|sN|dk  st
        j                  dkD  r6t        ||	|
|||      \  }}t        || |d      t        || |d      fg}|g fS t        |      }|st        |dz         }|D cg c]  }t        
 }}|D cg c]  }t        
 }}|r'|D cg c]  }t        
 }}|D cg c]  }t        
 }}ng x}}t        |z  }t        d|z  z  }t        |      }t        |dz
        }||z   }t        |||z   dz         D ]y  }t!        |||      }t#        |
 |z  |z	  ||      \  }}|r|t%        ||z        z  }nt'        |	 |z  |z	  |      }||z  |z	  }||z  |z	  } |r|||z  z  }!|!|z  |z	  }"|!|z  |z	  }#|r|r]t)        |||      }|dxx   ||z  |z	  z  cc<   |dxx   | |z  |z	  z  cc<   |s|dxx   "|z  |z	  z  cc<   |dxx   #|z  |z	  z  cc<   t        |z  }$|D ]X  }||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	  }$Z B|dxx   |z  cc<   |dxx   | z  cc<   |s`|dxx   "z  cc<   |dxx   #z  cc<   | |r|r,|dz  r|d    |d<   |d    |d<   |ru|d    |d<   |d    |d<   nb|D cg c]  }d|z  ||   z   }}|D cg c]  }d|z  ||   z   }}|r0|D cg c]  }d|z  ||   z   }}|D cg c]  }d|z  ||   z   }}t+        ||      D %&cg c]#  \  }%}&t        |%| |d      t        |&| |d      f% }}%}&t+        ||      D '(cg c]#  \  }'}(t        |'| |d      t        |(| |d      f% })}'}(||)fS c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}&}%w c c}(}'w )	zI
    Fast version of mp._zetasum, assuming s = complex, a = integer.
    r   r   r   g    Al        r{   ro   rq   )listrO  r   r!   ZETASUM_SIEVE_CUTOFFsysmaxsizerd  r"   r   r   r   r   r?   r>   r   r@   rO   r   rP   rM  zip)*ry   rw   r{   derivativesreflectrv   r   have_derivativeshave_one_derivativerZ  r[  rB  r  r  xsmaxdr   ra  rb  yreyimrx   rA  r+  r<  r#  r  r   r]  r^  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%,?sCArBBBT3/b2#tS1QRS2v{DDFm )
)8
)C
)(
)8
)C
)!,-Ax--!,-Ax--c
R-C!B$G
B-C
2a4.C
R%CAq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"T2.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A("A("I$#J axa&Aa&A!!fWCF!!fWCF-89B7SV#9C9-89B7SV#9C91<=AQwQ'==1<=AQwQ'==C
'R RCs+\"rc4-M
N 
'B 
' C
'R RCs+\"rc4-M
N 
'B 
'r6MM *
)--r :9==
'
's<   
O%O*2O/O4O9'O>PP<(P6(Pi  i:  g?   c           	         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	  }|
j                  ||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  ||<   S t        | dz         D cg c]  }t        t        ||             }}t        t        t	        |      d      d|      x}}t        |t!        d      |      }t        d| dz   d      D ]M  }t        ||   ||      }t        ||      ||<   t        |||      }t        |t!        |dz   |dz   z        |      }O ||z  |z  }t        d| dz   d      D ]k  }|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<   m t        d
| dz   d      D ]z  }|dz
  dz  }|d|z  dz      d|z  dz   z  }t        dd|z  dz         D ].  }|d|z  dz  |z  |d|z     z  |d|z  dz   d|z  z
     z  |z	  z  }0 ||xx   ||z  |z	  d|z  z  z  cc<   | |D cg c]  }||z	  	 c}S c c}w c c}w )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   r   r   rq   )r   r>   r   r3   r=   rB   r+   r   r(   r)   r!   rY  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	eB*!$K	"B
R-CT1WKNfRj#E!%,,I
 E	A
!A#X6T79dB7<Y2b 126b"b""frkb b"XIw3		Q   AqsA  		FBsax!Q$JqS1H"a%ZAqD(FAFA		 AA 06ac{;!q$	%;A;yQ7B??FSVXa["-FAac!_ <AaD&"%!!RAb)1Q31+!6;	< BY2%MAqsA 4qS1H!A!A&)1Q3 	CA+ac"[1Qqs%;;BBA	CA1Q3},334 AqsA 9qS1H!A!A&1Q3q5! 	NA2'!)A+{1Q3//+ac!eAaCi2HH2MMA	NAAmOb0AaC889 **AuH**- 	<, +s   L9*L>c                    | 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 ];  }||kD  s	t         |   | d D cg c]
  }|||z
  z	   }}| dk  r	|t         |<   ||fc S  |dkD  rt        |d	z        }|d
z   }dg|z  }t        |d<   t        |z  |d<   t	        |      |d<   t        ||      }t        d|      D ]L  }	|d    ||	dz
     z  |z	  }
t        d|	      D ]  }|
d|z  ||   z  ||	|z
     z  |z	  z  }
 |
d|	z
  z  }
|
||	<   N |D 
cg c]  }
|
d
z	  	 }}
|ddd   }|dd }|t         |<   t        |       S c c}w c c}
w )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  $  4</A%/H!/MN!a%*oNFN}+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::A	;	qs! 1BA	$B$A	#2A t$V,,9 O. 	s   >E?Fc           	      H   ||dz
  z	  t         z   dz	  }t         |z  }t        |      \  }}	|dkD  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(  r't        t        t	        |
|z  |z  |             ||      S y |}
t        |       D ]  }|
|z  |z	  }
||z  } t        }|D ]  }|||z  |z	  z   } ||	|z
  z  }|t        t        |            z
  dkD  rt        | t        |             }t	        ||
z  | |z
        }
t        |
||      }
|dk(  rt        t        |
||      S |dk(  rt!        |
||      S |dk(  r%t        t        t        t        |
|            ||      S y t	        ||z  |
z  d|z        }
|dk(  rt        t        |
||      S |dk(  rt!        |
||      S |dk(  rt#        t        t        |
      ||            S y )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   r2  s                  r|   gamma_fixed_taylorr    s    "Q$K7*q0K
R-C+B/KFCQA& 	AHA1A	 	
S 	 AacBYA	 	s2v19B
RCs;;19]1q"utSA2FF197<B
RC#@A4MM  % 	A1AHA	  	 AacBYA	 	s2vQ  2%h|45AQqS"R(A1b!AqytQc22qyq$,,qywwtQ';<dCHH  QqSU2b5)Aqyq$!<<qyD#!66qyT3)G!HHyr~   c                     | t         v r	t         |    S t        |       \  }}|t        | | dz
  z        z  }||t        t	        |            t        |      ft         | <   t         |    S rF  )gamma_stirling_cacher   r   r6   r   )r{   r   r   s      r|   stirling_coefficientr    se      #A&&A;DAqQ!WAHSV$4hqkA""r~   c                    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kD  r||k  r
|	|z  }	||z  }||z
  }|dkD  r||k  r||z	  }||z  }n|}||	z  |
z  |z	  }|s	 |S ||z  }||z  |z	  }|||z
  z  }|dz  }{)zr
    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  !  sR    
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VESVED
+A.1b"2:$Mq5UQY!GAQJEHq5UQYQAQJEA!Q5 
 H	 	
T	qSUN	Q) r~   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kD  r||k  r
||z  }||z  }||z
  }|dkD  r||k  r||z	  }||z	  }||z  }n|}|}||z  |z  |z	  }||z  |z  |z	  }t        |      t        |      z   dk  r	 ||	fS ||z  }|	|z  }	||z  ||z  z
  |z	  ||z  ||z  z   |z	  }}|||z
  z  }|
dz  }
)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   _mr?  r@  ureuimrZ  r[  r   r  r  r  r   r   r  r  r  r  r   rC  rD  termretermims                            r|   complex_stirling_seriesr  V  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
3x#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
3x#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
3x#c(QsCx
A SS3s8,-ESS3s8,-ED
+A.1b"2:$Mq5UQY!GAQJEHq5UQY(C(CQJECCa%(u$a%(u$v;V$q( 8O 	vvWs3w&.#gC%' 	Q3 r~   c           
      v   | \  }}}}|sJ| 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(  r2|dz   }||z   |kD  r%|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 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|	rp|d|z  k  rh|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  rw|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(  rt        t        t+        |t3        |      ||      | |
z   dz         ||      S |
dk(  rL|dk(  rt5        ||      S |dk(  rt        t        t5        |      ||      S |dk(  rt        t5        |      ||      S t/        |      }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(  r	|st,        |z  }t3        ||z
        }t3        |d|z  z
        }|t        t9        ||            z
  }|dkD  rt        t        |       }t        t:        |       }|d   |d   z   }|d   |d   z   }|| k  r%t        t=        |      t        t        |       ||      S || k  r3t        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  rJt,        |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        ||       }|rt        tM        ||      ||      }!t!        tO        |            }"|dk(  s|dk(  rVt        |!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 y
|dk(  r2|r#t        tQ        ||      t7        ||       ||      S tQ        |||      S |dk(  r;|r#t        t7        ||       tQ        ||      ||      S tQ        t!        |      ||      S |dk(  r2|r#t        |t        t7        ||       |      ||      S t        |||      S y
)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{   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    sl    D#sB:qy+qy,2339qy,K
 qy"Wr6B;t71ganb91dCHH Jqy2333J))qy4QqS94EEqy4Q7sCCqyt%:1Q3%?sKKqy4QqS94EE  (C3JqyBYHZ((2- bSy19742.yrc/B4LL19WT1dC8819WQ	$s2v(>cJJ19WWWQZs%CDD qyD)4a88
 byBrE!19#D1ItS9919($qs)T3GG19"8D1I#6cBBs7j2b5( $q5eAaCEl!$QqSU|m!19$]1as%CbSU1WMM19$]1as%CRT!VLL19"9]1c!fc.#%'CE!G$-.2C9 9a19Zc%::19WT:b>4%MM19WZ^T3%GG $ U1Q3q5\!1B3q5919WQc%::19WT1dC%@@19WWQZs%CC 2XF{cVmG!vg.G qymws{#wqu}%Xc(H&=>>"D!$ED!$EQxa(HQxa(H2#~y}gdA.>cJJ2#~wtYr];At$dC1 1 #xi(++B2XF{cVmG&)vg&6G ,R/0N3sN##-B(BhG!!Wb$T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	71b>*AA|As3R8qyq!T3//qyq!T3//19A|As3R8
B/B7A771:r2AtSAA	  19wq"~ RC($5 51dC((19|As3ArND#/ /71:tS1119q',q"*=r"BD#NN1dC(( r~   c           
         | \  }}|\  }}}}	|\  }
}}}|t         k(  rN|dk(  r5|r3t        |||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  rt        | t        t        | | |      t        |      |      |      }|dk(  rt        |||      S |dk(  rt        | |||      S |dk(  rt        |||      S |dk(  r"t        t        ||      ||      S |dk7  r|| z  }|dk(  r/||kD  r*|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(  rt-        | t"              }|d   t         k(  r| }nt        |d   d   |d   d   z   |       }||kD  rvt        |      } t        || |      }!t        |!|!|      }!t/        |!t1        d	      |      }!t        |t3        t        |            |      }"t        |!|"|      }|st        |||      S |dkD  r||z  }t-        | t4              }#|#d   t         k(  r| }$nt        |#d   d   |#d   d   z   |       }$|$|kD  rt        |      } t7        t9        | |       t1        d
            }%t        t        |#|#|      |%|      }!t/        |!t1        d	      |      }!t        |#t7        t"        t        |            |      }"t        |!|"|      }|st        |||      S |$dkD  r||$z  }|| k  rd|dz   z  }&t;        |      }'t=        t"        ||z
        }(t        |'|&|      })t        t!        |'|(      |&|      }*t?        t7        |*|)|&      |(|&      }+t9        ||+||      }"|)|"f}|st        |||      S || 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(  rt        |"t        |0|      |      }"tS        |1d         };tS        |1d         }<tU        jV                  |;|<      }=tS        |"d         }>tU        jX                  |<|;      }?|=dk  r	d|<z  |?z
  }@n(|< d|?z  z
  |;|?z  z   |<tU        jZ                  |=      z  z   }@tA        tU        j\                  @|>z
  dtT        j^                  z  z  dz               }|"d   t!        |"d   t        t        |      d|z  |      |      f}"|r|dk(  s|dk(  rt        ta        ||      ||      }At3        t        |            t         f}B|r!|dk(  rt        A||      }An%t        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(  r|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 y |dk(  r'|0rt        tc        "|      |0||      S tc        "||      S |dk(  r0|0rt        |0tc        "|      ||      S tc        t+        "      ||      S |dk(  rt        "||      S y )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   r0  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   rq  rr  lrelimzfazfbzfabsyfbr   gir   r   s1rezfloorimzsignsF                                                                         r|   r0  r0  l  s	   DAqE4sE4sEz191dC+BTE"AVDG_as;Br6MD#t,e33 T4Dd| 
B8D8D$o Rx"9;wq2y}RH"MAqy4!==qyAtS!99qyD#!66qy4)@$!LLQYC4LB
 qyS2X44<wq'!R."5q$DD qy'!T*A.c1==	VAYB	VAYBr2;DcJqy
hz"" OEAJ%&qT)tT3%&qT)tT3 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 #vtS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1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AtS!99qyAtS!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2tS))/ 2 19wq"~q$<<1dC((19q'!R.$<<71:tS11191dC(( r~   c                     t        | ||d      S rF  r  r   rv   r   s      r|   mpf_factorialr  V      Qc1%%r~   c                     t        | ||d      S rF  r0  r  s      r|   mpc_factorialr  Y  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                 <    | \  }}}}|rt         t        | ||d      S )Nrn   )r:   r  )r   rv   r   r   r   r   r   s          r|   mpf_loggammar  b  s*    D#sBQc1%%r~   c                     | \  }}|\  }}}}|\  }	}
}}|t         k(  r5|r3t        |||d      }| | z	  }t        t        |dz         |||      }||fS t	        | ||d      S )Nrn   r   )r   r  r*   r=   r0  )r   rv   r   rw   r   r%  r&  r'  r(  r   r   r  r  r  r{   r  s                   r|   mpc_loggammar  h  s    DAqE4sE4sEzeq$Q'UR!T372vQc1%%r~   c                 n    | t         k  rt        t        | dz
     ||      S t        t	        |       ||      S rF  )r  r$   r  r  r   )r{   rv   r   s      r|   r   r   s  s7    %%,QqS14==Xa[$,,r~   r   )r   r   )r   )__doc__r   rh  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   r/  rH  rK  mpf_zetasumrM  rP  rQ  rS  rW  rd  rg  r}  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r0  r  r  r   r  r  r  r   r   s   0r|   <module>r     sT    
  < < 9 9                
 
 
 
 
 
 
0 
 
H  B 2 2z  ,    0    2 [)	[)	//}-}- 1  @ a[a[2
 '':; IV	/Tz:@9= % 9)v % 1h ' 0 ' <J(T   ( 3.j %! U(n %!5 X1t ( % ( % 
 
67t  aV  u$ $$       
)!+	,. "$q'* . O+b7-r/Ib#3jEPK)\h)T&&&&&	&  * -q.s   I