
'k[c           @   s?  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/ m0 Z0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 m8 Z8 m9 Z9 m: Z: m; Z; m< Z< d d l= m> Z> m? Z? m@ Z@ mA ZA mB ZB mC ZC mD ZD mE ZE mF ZF mG ZG mH ZH mI ZI mJ ZJ mK ZK mL ZL mM ZM mN ZN mO ZO mP ZP mQ ZQ mR ZR mS ZS d d	 lT mU ZU mV ZV mW ZW mX ZX mY ZY mZ ZZ m[ Z[ m\ Z\ m] Z] m^ Z^ m_ Z_ m` Z` ma Za mb Zb mc Zc md Zd me Ze mf Zf mg Zg mh Zh mi Zi mj Zj mk Zk ml Zl mm Zm mn Zn e> d
    Zo e> d    Zp e> d    Zq e> d    Zr e> d    Zs e> d    Zt e> 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  Z d   Z e e}  Z e d  Z e d  Z d   Z i  Z d   Z d   Z d   Z d   Z d   Z e d  Z e d  Z e d  Z e d d   Z e d d!  Z d"   Z d#   Z e d$  Z e d%  Z e d&  Z e d'  Z i  Z d(   Z d) Z i  Z e d*  Z e d+ d,  Z e d+ e d-  Z e d.  Z e d/  Z e Z d0   Z g  a g  a g  a d1   Z d2   Z d3 Z d4   Z d5 Z e d6 k  sLt  d7 Z d8 Z i  Z i  Z g  e e d  D] Z e! e e   ^ quZ d9   Z d:   Z d;   Z d<   Z d=   Z d>   Z d? d+ d@  Z d? d+ dA  Z d? dB  Z d? dC  Z d? dD  Z d? dE  Z d? dF  Z d? dG  Z e dH  Z d S(I   so  
-----------------------------------------------------------------------
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

-----------------------------------------------------------------------
iNi   (   t   xrange(   t   MPZt   MPZ_ZEROt   MPZ_ONEt	   MPZ_THREEt   gmpy(   t   list_primest   ifact   ifac2t   moebius(-   t   round_floort   round_ceilingt
   round_downt   round_upt   round_nearestt
   round_fastt   lshiftt
   sqrt_fixedt
   isqrt_fastt   fzerot   fonet   fnonet   fhalft   ftwot   finft   fninft   fnant   from_intt   to_intt   to_fixedt   from_man_expt   from_rationalt   mpf_post   mpf_negt   mpf_abst   mpf_addt   mpf_subt   mpf_mult   mpf_mul_intt   mpf_divt   mpf_sqrtt   mpf_pow_intt   mpf_rdiv_intt   mpf_perturbt   mpf_let   mpf_ltt   mpf_gtt	   mpf_shiftt   negative_rndt   reciprocal_rndt   bitcountt   to_floatt	   mpf_floort   mpf_signt   ComplexResult(   t   constant_memot   def_mpf_constantt   mpf_pit   pi_fixedt	   ln2_fixedt   log_int_fixedt   mpf_ln2t   mpf_expt   mpf_logt   mpf_powt   mpf_cosht   mpf_cos_sint   mpf_cosh_sinht   mpf_cos_sin_pit
   mpf_cos_pit
   mpf_sin_pit   ln_sqrt2pi_fixedt   mpf_ln_sqrt2pit   sqrtpi_fixedt
   mpf_sqrtpit   cos_sin_fixedt	   exp_fixed(   t   mpc_zerot   mpc_onet   mpc_halft   mpc_twot   mpc_abst	   mpc_shiftt   mpc_post   mpc_negt   mpc_addt   mpc_subt   mpc_mult   mpc_divt   mpc_add_mpft   mpc_mul_mpft   mpc_div_mpft   mpc_mpf_divt   mpc_mul_intt   mpc_pow_intt   mpc_logt   mpc_expt   mpc_powt
   mpc_cos_pit
   mpc_sin_pit   mpc_reciprocalt
   mpc_squaret   mpc_sub_mpfc         C   s   |  d }  t  |  >} } d \ } } } x | r | d | d d | d 9} | d d | d | d d } | d | d d	 | d d
 | d | d d | d } | | 7} | d 7} q* W| d ?S(   Ni   i    i   i    i   i   i   ii(   i   i   (   i    i   i   i   (   R   (   t   prect   at   onet   st   tt   n(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   catalan_fixedH   s    
	">
c         C   s  t  |  |  d d  } t } t d  } t | >} } t |  } t t | | |  d  } } d }	 x t t d |	 |   }
 t |
 | |  }
 t	 |
 | |  }
 t
 |
 |  }
 |
 | | |	 | ?} | d k  r Pn  | | 7} | | d |	 d | d |	 7} |	 d 7}	 t | d |	 d |	 d |  } t | | |  } ql W| | >t |  } t t | |  |  } t
 | |   } | S(   Ng      ?i   i   i   i   id   (   t   intR   R   R   R9   R/   R%   R"   t   mpf_bernoulliR'   R   R&   R;   R>   R   (   Rg   t   wpRj   t   facRk   t   ONEt   pit   pipowt   twopi2Rl   t   zeta2nt   termt   K(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   khinchin_fixedm   s0    
"
"c         C   s  |  d } t  d |  d  } t | >} t } x2 t d |  D]! } | t | |  | d 7} q> Wt | |  } | | | | 7} | | | d d 7} | d } d } d }	 d }
 t d  } d } x"| | >|	 | | } t | |  } t d | |  } t | | |  } t	 | | |  } t
 | |  } t |  d k  rMPn  | | 8} |	 | |
 |
 |	 | | |
 d f \ } }	 } }
 |	 | |
 |
 |	 | | |
 d f \ } }	 } }
 | d 7} t | d | d | d |  } q Wt |  } | d	 9} | | >| d | ?} | t |  7} | t
 t t d | |  |  |  7} | d
 } t t | |  |  } t
 | |   S(   Ni   gQ?i   i   i   i   iid   i   i   (   Rn   R   R   t   rangeR<   R   R   Ro   R%   R'   R   t   absR&   R:   t   euler_fixedR?   R>   (   Rg   Rp   t   NRr   Rj   t   kt   logNt   pNRh   t   bt   jRq   t   Dt   BRw   Rs   t   A(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   glaisher_fixed   sJ    



33
&
*
c         C   s   |  d 7}  t  |  >} t d  |  >} d } t } xt | r | | 7} | | d 9} | d | d d d | d } d | d | d d	 | d | } | d 7} q3 W| d ?S(   Ni   iM   i   i
   i   i   ii   i   i   i   (   R   R   R   (   Rg   t   dRw   Rl   Rj   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   apery_fixed   s    

	
"&c   	      C   s   d } |  | 7}  t  t j |  d t j d  d   d } d | } | t |   } } t |  >} } d } xw | | d | d } | | d | | | } | | 7} | | 7} t t |  t |   d k  r Pn  | d 7} qs W| |  | >| S(   Ni   i   i   i   id   (   Rn   t   matht   logR;   R   t   maxR{   (	   Rg   t   extrat   pRl   R   t   UR   t   VR~   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR|     s     
-


!c         C   s   |  d } d } t  |  } x{ t | |  } | t k r> Pn  t | |  } t | t |  |  } t | t |  |  } t | |  } | d 7} q Wt	 | |   S(   Ni   i   i   (
   t	   mpf_eulert   mpf_zeta_intR   R?   R&   R	   R'   R   R#   R   (   Rg   Rp   t   mRj   Rk   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mertens_fixed+  s    
c   
      C   su  d   } d |  d } t  } g  d d d d g D] } t d | |  ^ q0 } g  | D] } t | | |  ^ qU } d } x t | |  } xQ t d  D]C }	 t | t t  | |	  |  } t | |	 | |	 |  | |	 <q Wt | | |  |  } t | |  d	 d
  t  k rPn  t | | |  } | d 7} q| Wt | t d  |  } t	 | t d  |  } t
 | |   S(   Nc            s+   t    f d   t d   d  D    S(   Nc         3   s-   |  ]# }   | s t  |    | >Vq d  S(   N(   R	   (   t   .0R   (   Rl   (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pys	   <genexpr>>  s    i   (   t   sumR    (   Rl   (    (   Rl   s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   I=  s    i   i   i   i   i   i   i   i
   Rl   i   i#   i   i$   i-   i'  i@   i 	  (   R   R   R%   R   Rz   R$   R)   R    R   R'   R   (
   Rg   R   Rp   t   resR   t   primest   ppowersRl   Rh   t   i(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   twinprime_fixed;  s&    	1%"i  i   i   c         C   s0   t  j |  d  } t d d | |  | d  S(   s5   Accurately estimate the size of B_n (even n > 2 only)i   gS㥛@g      ?gK7A`@(   R   R   Rn   (   Rl   t   lgn(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   bernoulli_size  s    c         C   sB  |  d k  rP |  d k  r' t  d   n  |  d k r7 t S|  d k rP t t  Sn  |  d @r^ t S| t k r | t |   d d k r t |   \ } } t | | | | p t	  S|  t
 k r t |  | |  S| d } | d | d	 @7} t j |  } | rh| \ } } |  | k r6| s"| |  St | |  | |  S| \ }	 }
 } |  |	 d
 k rt |  | |  Sn[ |  d
 k rt |  | |  Si t d 6} d t d
  t g \ }	 }
 } } | | f t | <xt|	 |  k r9|	 d } t |	  } d } t d |  | } |	 d k  rt } n | } x t d |	 d d  D] } | |	 d | \ } } } } } | rl| } n  | t | | | |  7} d | } | |	 d | |	 d | |	 d | |	 d | |	 d | |	 | 9} | d | d | d | d | d | d | } q4W| d k r:t |	 d t |  } n  | d k r_t |	 d t |  } n  | d k rt |	 d t |  } n  t | | |  } t t | | |  t |
  |  } | | |	 <|	 d 7}	 |
 |	 d |	 d |	 |	 d }
 |	 d k r&| d |	 d |	 |	 d |	 d } n  |	 |
 | g | (qW| |  S(   s.   Computation of Bernoulli numbers (numerically)i   i    s)   Bernoulli numbers only defined for n >= 0i   g?i  i   i    i   i
   i   i   i   i   i   i   i	   (   t
   ValueErrorR   R!   R   R   t   BERNOULLI_PREC_CUTOFFR   t   bernfracR   R
   t   MAX_BERNOULLI_CACHEt   mpf_bernoulli_huget   bernoulli_cachet   getR    R   R   R   R   R    R   R*   t   f3t   f6R   R'   R$   R   (   Rl   Rg   t   rndR   t   qRp   t   cachedt   numberst   stateR   t   bint   bin1t   caset   szbmRj   t   sexpRh   R   t   usignt   umant   uexpt   ubct   ut   j6R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyRo     s|    
&
"
	"

J:   $

")c         C   s   | d } | t  t j |  d   } t |  d |  } t | t |  |  |  } t | t t |  |  |   } t | d |   } |  d @s t	 |  } n  t
 | | | p t  S(   Ni
   i   i   i   (   Rn   R   R   t   mpf_gamma_intR%   R   R)   R9   R/   R!   R    R   (   Rl   Rg   R   Rp   t   piprect   v(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     s    
"
c         C   s   t  |   }  |  d k  r) d d	 d
 g |  S|  d @r7 d Sd } x3 t |  d  D]! } |  | d sN | | 9} qN qN Wt |   t  t j | d   d } t |  |  } t | t |   } t | t	  } | | f S(   s  
    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/

    i   i   ii   i   i    i   (   i   i   (   ii   (   i   i   (   i    i   (
   Rn   R   R   R   R   Ro   R%   R   R   R   (   Rl   R   R~   Rg   R   R   t   pint(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     s    G
&c   	      C   s  | t  |  d  } d g |  } t t |  d  |  } t t |  } t t t |  d  |  } t | |  | d <x t d |   D] } t	 | d | d |  | | |  } t
 | t t |  |  |  |  } t | |  | | <t
 | t | t |  |  |  } q W| S(   Ngffffff?i    i   i(   Rn   R>   R   R   R(   R/   R9   R   R    R&   R'   R%   (	   Rh   Rg   Rp   t   cR   t   et   sq2piR~   Rw   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   calc_spouge_coefficientsd  s    &%(c         C   s   |  t  k r t  |  Sx< t  D]4 } d |  t |  k oB d k  n r t  | Sq Wt d t d |    } t | |   } |  | | f t  |  <t  |  S(   Ng?i   i   gRQ?(   t   spouge_cachet   floatR   Rn   R   (   Rg   R   Rh   t   coefs(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   get_spouge_coefficientsx  s    &c         C   se   t  |  |  }  | d } x5 t d |  D]$ } | | | | >|  | | >7} q) Wt | | | t  S(   Ni    i   (   R   R    R   R
   (   t   xRg   Rh   R   Rj   R~   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   spouge_sum_real  s
    
"c         C   sV   | d } x5 t  d |  D]$ } | | | | |  | | 7} q Wt | | | t  S(   Ni    i   (   R    R   R
   (   R   R   Rg   Rh   R   Rj   R~   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   spouge_sum_rational  s    
"c   
      C   s   t  |  |  }  t  | |  } | d d } } |  d | ?| d | ?} xi t d |  D]X } | |  d | | d | >}	 | | | |  | | >|	 7} | | | | |	 8} qY Wt | | | t  }  t | | | t  } |  | f S(   Ni    i   i   (   R   R    R   R
   (
   t   ret   imRg   Rh   R   t   sret   simt   magR~   t   M(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   spouge_sum_complex  s    c         C   s   |  d k  r& t  t |  d  | |  St |  t j |  d   } | | d k rl t  t |  d  | |  St t  |   | |  S(   Ni  i   i   g      4@(   R   R   Rn   R   R   t	   mpf_gamma(   Rl   Rg   t   roundingt   size(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_gamma_int_old  s    c         C   s   t  |  | | d d S(   Nt   p1i    (   t   mpf_gamma_old(   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_factorial_old  s    c         C   s   t  |  | | d d S(   NR   i    (   t   mpc_gamma_old(   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_factorial_old  s    c         C   s1  |  \ } } } } | sG |  t  k r( t  S|  t k s@ |  t k rG t Sn  | | } | d k r| t | t j | d   } n  | t d |  d }	 | d k r | s | r | r t d   n  | | d k r t t	 | | >|  | |  Sn  | p| | d k  }
 | r t
 |  t  }  n  |
 r|	 d 7}	 t |  t |	  |	  } t |  |	  } t t
 t |   |	  } t | t | | |	  | |  St |	  \ } } } t |  | | |  } t |  t |  |	  } t | |	  } t |  t |	  } t
 t | | |	  | |	  } t t | |	  | | |  } | S(   su   
    Computes the gamma function of a real floating-point argument.
    With p1=0, computes a factorial instead.
    i   i   i    i   s   gamma function polei
   i(   R   R   R   Rn   R   R   R   R   R   R   R$   R   R%   R9   RF   R   R'   R   R   R#   R?   R   R>   (   R   Rg   R   R   t   signt   mant   expt   bcR   Rp   t   reflectt   pixRk   t   gt   sprecRh   R   Rj   t   xpat   logxpat   xph(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     s@    
!
c   !      C   s.  |  \ } } | t  k r1 t | | | |  t  f S| \ } } } }	 | \ }
 } } } | t  k rn | | } n t | |	 | |  } | d k r t | t j | d   } n  | p | |	 d k  } | t d |  d } | rO| | d k  r/t t t |  d | d  t	 t
 d | d   | |  S| d k  rO| d | 7} qOn  | r| } t | t |	 t |  d  } | | f }  n  | r| d	 7} t |  t  f } t |  | |  } t |  |  } t t |  |  } t | |  } t | | |  } t | | |  S| | | k  rvt | |  } t | |  } t | | |  } t | | |  t | | | |  f St |  \ } } } t | | | | |  } t | t |  |  } t | | f |  } t | t |  }  t t | |  | f |  | | f |  } t t | |  | | |  } | S(
   Ni   i   ii    i   i
   iii   (   R   R   R   Rn   R   R   RY   RX   RN   R!   R   R$   R   R{   R9   RW   Rc   RV   R   t   mpf_psi0R'   R    R%   R   R   R#   R   R_   R   R`   (!   R   Rg   R   R   R   R   R   R   R   R   t   isignt   imant   iexpt   ibcR   R   Rp   t   re_origRs   R   Rk   R   R   t   wRh   R   t
   gamma_diffR   R   Rj   t   repaR   t   reph(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     sX    ! 
%*c         C   sX   |  t  t t f k r |  St t t |  | d  |  } t | t | d |  | |  S(   Ni   (   R   R   R   R   R#   R   R   (   R   Rg   R   Rh   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_harmonicc  s    c         C   si   |  d t  k r* t |  d | |  t  f St t |  t | d  |  } t | t | d |  | |  S(   Ni   i    i   (   R   R   t   mpc_psi0RY   R   R   (   t   zRg   R   Rh   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_harmonici  s    c         C   sM  |  \ } } } } | d } | sQ |  t  k r2 |  S|  t k sJ |  t k rQ t Sn  |  t k so | d k r~ | r~ t d   n  | | d k  r t t |  t | |  | |  } t | t	 t |  | |  | |  S| rN| | d k rNt
 |  |  \ }	 }
 t t	 |	 |
 |  t |  |  } t t t |  |  |  } t | | | |  S| r| | | k rt t |  t |  | |  St |   } t d |  d } t }
 t |  |  }  t | >} | | k  rx6 t | |  D]" } |
 | | >|  8}
 |  | 7}  qWn  |  | 8}  |
 t t t |  | |  |  |  7}
 |
 | | >d |  7}
 |  |  | ?} | } d } d } x | | | ?} t d | |  \ } } } } | d | } | d k r| | >| d | } n | | ?| d | } | d @r|
 | 8}
 n
 |
 | 7}
 | d k r%| | k r%Pn  | } | d 7} qqWt |
 | | |  S(	   s_   
    Computation of the digamma function (psi function of order 0)
    of a real argument.
    i
   i    s   polygamma poleii   g)\(?i   i   (   R   R   R   R   R   R   R#   R   R$   R'   RD   R%   R9   R?   R   Rn   R   R   R   R    R   Ro   (   R   Rg   R   R   R   R   R   Rp   R   R   Rj   R   R   R   Rl   Ri   R~   t   x2Rk   t   prevt   bsignt   bmant   bexpt   bbct   offsetRw   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR   o  sd    
  !"$

) 
 
c         C   s  |  \ } } | t  k r. t | | |  t  f S| d } | \ } } } }	 | r | |	 d k r t |  |  }
 t |  |  } t t |
 | |  t |  |  } t t t	 |  |  |  } t | | | |  S| r|	 | | k rt
 t |  t	 |  | |  St |  } t d |  d } t } | | k  rxG t | |  D]3 } t | t |  |  |  } t |  t |  }  qEWn  t |  t	 |  }  t | t
 |  |  |  } t | t t |  |  |  } t |  |  } t	 } t } d } t t | d  } x t | | |  } t d | |  } t | t | d | |  |  } t | | |  } t | d  } | d k rt | |  rPn  | } | d 7} qW| S(   sb   
    Computation of the digamma function (psi function of order 0)
    of a complex argument.
    i   i   g)\(?i   i   i
   (   R   R   Rb   Rc   RZ   RX   R9   R   RV   RN   R_   R   Rn   RM   R    Rd   RY   R   RU   RO   Re   R/   RW   Ro   R\   R]   RQ   R,   (   R   Rg   R   R   R   Rp   R   R   R   R   R   Rj   R   R   R   Rl   R~   t   z2Rk   R   t   epst   bernRw   t   szterm(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     sN    
$"c         C   s<   |  d k r t  | | d t St |  | t f | |  d S(   sm   
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a real argument x.
    i    R   (   R   R   t   mpc_psiR   (   R   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_psi  s    c         C   sQ  |  d k r t  | | |  S| \ } } | d } | \ } } }	 }
 | d sp | t t t f k rp t t f Sn  | s | t k r | t k r t t f S| t k r t t f Sn  t |  } t d | d |   } t } | | k  r?xU t | |  D]A } t	 | |  d |  } t
 | | |  } t | t |  } q Wn  t	 | |  |  } t	 | d |  } t | t |   |  } t
 | | |  } t
 | t t | | |  t |  |  } |  d } d } d } t | d  } | d | d	 } t t | | d  } x t | | |  } t d | |  } t | | |  } t | t |  |  } t | | |  } t
 | | |  } t | d  } | d k rt | |  rPn  | |  d | |  d | d 9} | d | d d | d 9} | d 7} q	Wt | t t |  d  |  | |  } |  d @sMt | d  t | d  f } n  | S(
   sp   
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a complex argument z.
    i    i   i   g?i   ii   i
   i   (   R   R   R   R   R   R   Rn   RM   R    R^   RU   RY   R   R[   R   RZ   RX   R   RQ   R/   RW   Ro   R&   R'   R,   R   R!   (   R   R   Rg   R   R   R   Rp   R   R   R   R   R   Rl   Rj   R~   Rk   t   zmR   t   integral_termRh   R   t   magnR   R   t   scalRw   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR     sb    


*
"(
#c         C   s   |  t  k r t  |  St g |  d } t } t } | d <xk t d |  d  D]V } | d |  | d |  | d } | d | d | d } | | 7} | | | <qM W| t  |  <| S(   Ni   i    i   i   (   t   borwein_cacheR   R   Rz   (   Rl   t   dsR   Rj   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   borwein_coefficientsX  s    "

i  c         C   sB  | d } t  |   }  |  t k rN t |  d | k rN t t |  d | |  S|  d k  r |  d k ru t d   n  |  s t t  St t |  d |  t |  d  | |  S|  | k r t	 t
 d | |  S|  | d k rDd | >} } | d | |  >7} | | t |  7} | d t d | |  d  >7} t | | | |  St |  |  d d } | d k  r1t  d | d  } | t  | d	 d
  d k  r1t
 } x{ t |  D]m } t  | |  t j | d   }	 |	 d k  rPn  t t
 t t |  |  |	  |  }
 t | |
 |  } qWt t
 | |  Sn  t  | d	 d
  } t |  } t } t |   }  xB t |  D]4 } | d | | | | | | >| d |  7} qpW| | >| | } | | >d | >d | d |  >} |  t k rt |  d | k  s	|  t k r*| t | | |  f t |  <n  t | | | | |  S(   s<   
    Optimized computation of zeta(s) for an integer s.
    i   i    i   i   s   zeta(1) poleg/$?i   g       @gRQ@i   i
   i(   Rn   t   zeta_int_cacheR    R   R!   R   R'   Ro   R   R+   R   R   R   R   R   R   R   R   R$   R)   R%   R  R   R   R    (   Rj   Rg   R   Rp   Rk   Ri   R   t   needed_termsR~   t   powprecRh   Rl   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR   i  sR    
 
+ %2",!i    c          C   s$  |  \ } } } } | sO |  t  k r; | r. t St t  Sn  |  t k rK t St S| d } | r | | t j | d  d k r t t | | |  S| d k r0| r|  t k r t	 | |  St
 t |   | t |  }	 t t t t t t |  |  |  |  }
 t |	 |
 | |  St
 t |   | |  Sn  | rG| rt t t t t t |  |  |  |  }
 t t |  |  |
 | |  St t |  d |  } t | |  } t | |  } t t |  d  |  } | t d | |  } t | |  } t t t | d  |  |  | |  } t | t | t | | |  |  | |  St t |  |  } t |  \ } } } } d | | } | | k r| rt	 | |  St t t | |   }
 t |
 t |  | |  Sn | t d |  7} t } t | d d	  } t |  } t } t |  |  } t |  } x| t  |  D]n } | t! | d | |  | ?} t" | | |  } | | | | | } | d @r| | 8} q9| | 7} q9W| | | } t# | | |  } | rt$ | | |  St t t t t t |  |  |  |  }
 t | |
 | |  Sd  S(
   Ni   i   i    i
   ii   igRQ@i   (%   R   R   R!   R   R   R   R   R   R+   R=   R   R   R0   R$   R@   R   R%   t   mpf_zetaR   RF   R/   R   R9   R'   R"   R#   R   R   Rn   R  R   R;   R    R<   RL   R   R    (    Rj   Rg   R   t   altR   R   R   R   Rp   R   R   t   yRh   R   R   t   wp2Rs   R   t   rt   asignt   amant   aexpt   abct	   pole_distRk   Rl   t   sft   ln2R~   R   t   emanR   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR    sx    
'**'+
*c   0      C   s*  |  \ } } | t  k r1 t | | | |  t  f S| r_ t t |  d  t |   r_ t  n  | d } t t |  |  } t | d  \ }	 }
 } } d | | } | | k r| r>t |  } t	 | t
 |  |  } t t	 | | |  d  } t | |  } t | t |  |  } t | | |  } t | | |  St t t | |   } t | t
 |  |  } t | | |  Sn | t d |  7} t | t   r| rt t t t t t |  |  |  |  } t t |  |  | | |  St t |  d |  } t | |  } t | |  } t t |  d  |  } | \ } } } } | \ } } } } t | | | |  } | t d |  } t | |  } t | d  t  f }  t t |  |  |  | |  }! t | t | t | |! |  |  | |  St | d d  }" |" t d	 t t  |    7}" t! |"  }! t" | |  }# t" | |  }$ t# }% t# }& t$ | >}' t$ d
 | >}( | t% k }) t& |  }* t' | d  }  | | } x t( |"  D] }+ t) |+ d | |*  }, |) r|( t* |+ d | > }- n t+ |# |, | ?|  }- |+ d @r0|- |! |" |! |+ 9}- n |- |! |+ |! |" 9}- t, |$ |, | ?| |   \ }. }/ |% |- |. | ?7}% |& |- |/ | ?7}& qW|% |! |" }% |& |! |" }& t- |% | |  }% t- |& | |  }& | rt |% |& f | |  St t t t | |  |  } t |% |& f | | |  Sd  S(   Ni
   i   iii    i   gRQ@i   g?i   (.   R   R  R.   RQ   R   t   NotImplementedErrorRV   RN   R=   R%   R   R/   R$   RZ   R!   RY   RS   RT   RX   R   R-   Ra   RP   RW   t   mpc_zetat	   mpc_gammaRc   RR   R9   R[   Rn   R{   R   R  R   R   R   R   R;   R:   R    R<   R   RL   RK   R   (0   Rj   Rg   R   R  t   forceR   R   Rp   R
  R  R  R  R  R  R   R  R   R   Rh   R   R   t   rsignt   rmant   rexpt   rbcR   R   R   R   R   R	  Rs   t   pi2R   Rl   t   reft   imft   tret   timRi   t   one_2wpt   critical_lineR  R~   R   R   t   wret   wim(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR    s    %	
+ 


!c         C   s   t  |  | | d  S(   Ni   (   R  (   Rj   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_altzetaO  s    c         C   s   t  |  | | d  S(   Ni   (   R  (   Rj   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_altzetaR  s    c         C   sh   | d k r |  St  | >} xG | rc | d @rH | |  | ?} | d 8} n  |  |  | ?}  | d } q W| S(   Ni   i   (   R   (   R   Rl   Rp   R  (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt	   pow_fixedY  s    
	
c         C   s<  |  t  t  k  rH t } t t j t |   d  } t } | | | f Sd g |  d } d g |  d } t |   } x9 | D]1 } x( t | |  d |  D] } | | | <q Wq} Wxh t |  D]Z \ } } | d k r d } | | }  x" |  | s|  | }  | d 7} q W| | | <q q W| a | a | a | | | f S(   Ni   i    i   (	   t   lent   sieve_cachet   primes_cachet   indexR   t
   mult_cacheR   R    t	   enumerate(   Rl   t   sieveR   t   multR   R~   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt
   primesievej  s.    

c         C   sr  | d k  r t  d   n  t | |  \ } } } i  }	 t | >}
 t d | >} | | } t |  } t | d  } xF| D]>} | d | | k r Pn  t | | |  } t | | | ?| |  \ } } |  r | t | | > } n t | | | ?|  } | | | ?} | | | ?} | | f g |	 | <| | } } xy t	 d t
 t j | | |  d  d  D]J } | | | | | ?| | | | | ?} } |	 | j | | f  qoWq Wt } t } | d k r| |
 7} n  t | d  } xpt | | | d  D]W} | | } | |	 k r| | } |	 | | d \ } } x| | | } | d k rlPn  | | } | | } |	 | | d \ } } | | | | | ?| | | | | ?} } qNWn t | | |  } t | | | ?| |  \ } } |  r| t | | > } n t | | | ?|  } | | | ?} | | | ?} | | 7} | | 7} qW| | f S(   Ni   s   a cannot be less than 1i   g{Gz?(   R   R/  R   R;   R:   R<   RK   R   RL   Rz   Rn   R   R   t   appendR   R   R    (   R!  R   R   Rh   Rl   Rp   R-  R   R.  t   basic_powersRi   R   R	  R  R  R   R   t   cost   sinR   t   pret   pimR  R  R   t   xret   ximt   aaR~   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   zetasum_sieved  sh    

!4-



4!
i
   c   *      C   s  | d } t  |  } | d g k } t |  d k } |  \ }	 }
 |	 t k } t |	 |  }	 t |
 |  }
 | d k r| t k r| r| r| d k  s t j d	 k rt | |	 |
 | | |  \ } } t | | | d  t | | | d  f g } | g  f St	 |  } | s-t
 | d  } n  g  | D] } t ^ q4} g  | D] } t ^ qM} | rg  | D] } t ^ ql} g  | D] } t ^ q} n
 g  } } t | >} t d | >} t |  } t | d  } | | } x>t | | | d  D]%} t | | |  } t |
 | | ?| |  \ } } | rP| t | | > } n t |	 | | ?|  } | | | ?} | | | ?}  | r| | | }! |! | | ?}" |! | | ?}# n  | r| rAt | | |  } | d c | | | ?7<| d c |  | | ?7<| r| d c |" | | ?7<| d c |# | | ?7<qqt | >}$ x | D]} } | | c | |$ | ?7<| | c |  |$ | ?7<| r| | c |" |$ | ?7<| | c |# |$ | ?7<n  |$ | | ?}$ qRWq| d c | 7<| d c |  7<| r| d c |" 7<| d c |# 7<qqW| r$| r| d r!| d | d <| d | d <| r| d | d <| d | d <qq!q$g  | D] } d | | | ^ q} g  | D] } d | | | ^ q} | r$g  | D] } d | | | ^ q} g  | D] } d | | | ^ q } q$n  g  t | |  D]8 \ }% }& t |% | | d  t |& | | d  f ^ q4} g  t | |  D]8 \ }' }( t |' | | d  t |( | | d  f ^ q}) | |) f S(
   sI   
    Fast version of mp._zetasum, assuming s = complex, a = integer.
    i
   i    i   g    Ai   i    Rl   iI       (   t   listR'  R   R   t   ZETASUM_SIEVE_CUTOFFt   syst   maxsizeR9  R   R   Rz   R   R   R;   R:   R    R<   RK   R   RL   R&  t   zip(*   Rj   Rh   Rl   t   derivativesR   Rg   Rp   t   have_derivativest   have_one_derivativeR   R   R!  R   R   t   xst   maxdR   R6  R7  t   yret   yimRi   R   R  R  R	  R   R   R2  R3  R   t   xterm_ret   xterm_imt
   reciprocalt   yterm_ret   yterm_imRk   t   xat   xbt   yat   ybt   ys(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_zetasum  s    
"!/



!

%%%+KKi  i:  g?i   c         C   s  d } | | } t  g |  d } t |  } t | >} | d | d <t t |  d  } t | |  } }	 g  }
 d } x | d | } | d k  r Pn  t t t | t |  |  } t	 | t	 | | |  |  } t
 | |  } t
 | |  } | | | | ?} |
 j | | f  t	 | |	 |  } | d 7} q} Wx t d |  d d  D] } t  } d } xw |
 D]o \ } } | d d k r| | | } n$ | d d } | | | | | } | sPn  | | 7} | d 7} qjWd | | | <qQWg  t |  d  D] } t t | |   ^ q } t t t |  d  d |  } } t | t d  |  } x} t d |  d d  D]e } t	 | | | |  } t
 | |  | | <t	 | | |  } t | t | d | d  |  } quW| | >| } x t d |  d d  D] } | d d } | d | d d | d	 d } xI t d | d  D]4 } | | d | | d | d d | | ?8} qMW| | c d | | | ?7<qWx t d
 |  d d  D] } | d d } | d | d d | d } x] t d d | d  D]D } | d | d | | d | | d | d d | | ?7} qW| | c | | | ?d | 7<qWg  | D] } | | ?^ qyS(   s  
    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.
    i   i   i    i   i	   i   i   ii   i   i(   R   R:   R   R/   R9   R>   R'   R   R$   R%   R   R0  R    R"   Ro   R)   R   (   R}   Rg   R   Rp   t   zeta_valuesRs   Ri   t   f_2pit	   exp_2pi_kt   exp_2pit   exps3R~   t   tpt   q1t   q2Rl   Rj   t   e1t   e2Rk   R   R   t   pi_powt   fpiR   t   reciprocal_piR   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt
   zeta_array<  sr    


2%("2 B$c         C   sK  |  d k  r! |  d |  d } n' |  d k  rB |  d |  d } n |  } | t  k rb t  | | f S| d k  r t | d d  } n t | d d  } xg t  D]_ } | | k r g  t  | | D] } | | | ?^ q } |  d k  r | t  | <n  | | f Sq W| d k r"t | d  } n  | d	 } d
 g | } t | d
 <t | >| d <t |  | d <t | |  } x t d |  D]y }	 | d | |	 d | ?}
 x= t d |	  D], } |
 d | | | | |	 | | ?7}
 qW|
 d |	 }
 |
 | |	 <qWg  | D] }
 |
 d	 ?^ q} | d d d  } | d  } | t  | <t |   S(   s   
    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  i
   i  i   gRQ?i   gv/?g333333?i   i    i   i   iN(   t   gamma_taylor_cacheRn   R   R   R|   R^  R    t   gamma_taylor_coefficients(   t   inprecRg   R}   t   cprecR   t   coeffsRp   R   RQ  R~   Rh   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR`    sF    *

*

c         C   s  | | d ?t  d ?} t  | >} t |  \ } }	 | d k rC| }
 x0 t | d  D] } | | 8} |
 | | ?}
 qU W| | 8} t } x  | D] } | | | | ?} q W| |	 | L} | d k r t |
 | >| | | |  S| d k rt t | |
 | >| |  |  S| d k rt t t |
 | >| |   | |  Sn| }
 x- t |  D] } |
 | | ?}
 | | 7} qWWt } x  | D] } | | | | ?} qW| |	 | L} | t	 t
 |   d k rxt |  t |   } t | |
 | |  }
 t |
 | |  }
 | d k r+t t |
 | |  S| d k rGt |
 | |  S| d k rt t t t |
 |   | |  Sn~ t | | |
 d |  }
 | d k rt t |
 | |  S| d k rt |
 | |  S| d k rt t t |
  | |   Sd  S(   Ni   i    i   i   i
   i(   R   R`  R    R   R   R/   R   R?   R"   R2   R{   R#   R   R%   R'   R   R    R!   (   t   xmpfR   Rp   Rg   R   t   typet   nearest_intRi   Rc  t   cwpR
  R   R   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   gamma_fixed_taylor  sX    


 +%   c         C   sn   |  t  k r t  |  St |   \ } } | t |  |  d  9} | | t t |   t |  f t  |  <t  |  S(   Ni   (   t   gamma_stirling_cacheR   R   R2   R{   (   Rl   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   stirling_coefficient  s    (c         C   s  t  | | >|  } | | | ?} t |  |  } | | d 7} | | | ?} | | d 8} | | | ?} | | d 7} | | | ?} | | d 8} | | | ?} | s | S| | d 7} | | | ?} | d | d 8} | | | ?} | | d 7} | | | ?} | s| S| d	 | d
 8} | | | ?} | d | d 7} | | | ?} | d | d 8} | | | ?} | sv| Sd } t t |   } t t |   } d } x t |  \ }	 }
 } } | | | } | } | | } | d k r| | k  r|	 | L}	 | | 8} n  | | } | d k rH| | k  rH| | ?} | | 8} n | } | |	 |
 | ?} | sjPn  | | 7} | | | ?} | | | 8} | d 7} qW| S(   sr   
    Sums the rational part of Stirling's expansion,

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

    i   ih  i  i  i  i  i i   i!  i  i[  iܹ i i i   i    i   (   R   RG   R2   R{   Rj  (   R   Rg   Rk   R   Rj   R~   t   usizet   tsizet   texpR   R   t   pbt   qbt   term_magt   shiftR   R   Rw   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   real_stirling_series  sl                 




c         C   s  |  |  | | | ?} |  | >| } | | >| } | | | | | ?} | | | d ?} t  |  |  } | }	 | | d 7} |	 | d 7}	 | | | | | ?| | | | | ?} } | | d 8} |	 | d 8}	 | | | | | ?| | | | | ?} } | | d 7} |	 | d 7}	 | | | | | ?| | | | | ?} } | | d 8} |	 | d 8}	 | | | | | ?| | | | | ?} } t |  t |  d k  r| |	 f S| | d 7} |	 | d 7}	 | | | | | ?| | | | | ?} } | d | d	 8} |	 d | d	 8}	 | | | | | ?| | | | | ?} } | | d
 7} |	 | d
 7}	 | | | | | ?| | | | | ?} } t |  t |  d k  r| |	 f S| d | d 8} |	 d | d 8}	 | | | | | ?| | | | | ?} } | d | d 7} |	 d | d 7}	 | | | | | ?| | | | | ?} } | d | d 8} |	 d | d 8}	 | | | | | ?| | | | | ?} } t |  t |  d k  r| |	 f Sd }
 t t t |  t |    } t t t |  t |    } d } xVt |
  \ } } } } | | | } | } | | } | d k r| | k  r| | L} | | 8} n  | | } | d k r| | k  r| | ?} | | ?} | | 8} n | } | } | | | | ?} | | | | ?} t |  t |  d k  r(Pn  | | 7} |	 | 7}	 | | | | | ?| | | | | ?} } | | | 8} |
 d 7}
 q/W| |	 f S(   Ni   i   ih  i  i  i   i  i  i i   i!  i  i[  iܹ i i i   i    i   (   RG   R{   R2   R   Rj  (   R   R  Rg   t   _mR  R  t   uret   uimR   R   R~   Rk  Rl  Rm  R   R   Rn  Ro  Rp  Rq  R   R"  R#  t   termret   termim(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   complex_stirling_series4  s     - - - - 
 - - - 
 - - - 
!!






R   c   #      C   s
  |  \ } } } } | sw |  t  k rS | d k r4 t S| d k rD t  St d   n  |  t k rs | d k ro t  St St S| d k r | d } | | | k r | r t t |  t |  |  |  |  | |  Sn  | d k }	 |	 r| r| d k r t  St d   n  | | >}
 |
 t k  r| d k r@t	 t
 |
 d | |  S| d k r`t	 t
 |
 | |  S| d k rt t t
 |
 d | |  S| d k rt t
 |
 d | |  Sqn t | | ? }
 | | } |
 | } | d k r| d } n | t |  d } | | k  r| d k rEt t t |  |  t t |  | |  S| d k rdt t |  | |  S| d k rt |  t t | |  | |  S| d k rt t t |   | |   Sn  | d k rt t |  t  | | d  S| d k r|	 r| d | k  r| d k r+t t |
 d  | |  S| d k rTt t t |
 d  | |  S| d k rt t t |
 d   | |  Sqn  |
 d	 k  s| d | k  r| rt |  } |
 d rt d |
 d  } n t d |
 d  } | d k rt t | | | |  | |
 d  S| d k rKt t | | | |  | |
 d  S| d k rt t t | t |  | |  | |
 d  | |  Sq|
 d k r | d k rt | |  S| d k rt t t |  | |  S| d k rt t |  | |  Sqt |  } t | t d |
 d  | |
  } | d k rNt	 | | |  S| d k rmt t | | |  S| d k rt t |  | |  Sqn  | | } | d k r| | >} n | | ?} | d k r| rt | >} t | |  } t | d |  } | t t | |   } | d k rt t |   } t t |   } | d | d } | d | d } | | k  rt t |  t t |   | |  S| | k  rt t t t |   t |  t  | |  S| t | |  7} | | } | d k r
| | >} q| | ?} qn  t t  |  } |
 t d	 |  k  ru| t! k  ru| r\| } n  t" |  | | | | |  S|  } d } |
 | k  r t | >} } | |
 } x, t# |  D] } | | | ?} | | 7} qWt | |  }  } | rt |   }  qn t |   } t$ | |  } t% t | |  |  }  | t | d >|  | ?}  | |  7} t | |  } | r	t t& | |  | |  }! t t' |   }" | d k s| d k r0	t |! t( | |   }! | rt |" t | |  |  }" n  | d k r	t |" |! | |  S| d k r0	t |! |" | |  Sn  | d k r
| ra	t |" t | |  |  }" n  t t t |!  |  | |  }! t t t |"  |  |! | |  Sn | d k r	| r	t t( | |  t | |  | |  St( | | |  S| d k r=
| r'
t t | |  t( | |  | |  St( t |  | |  S| d k r
| ru
t | t t | |  |  | |  St	 | | |  Sd
 S(   s  
    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]
    i   i   s   gamma function polei   i   i    ii
   id   N()   R   R   R   R   R   R$   R%   R?   t   SMALL_FACTORIAL_CACHE_SIZER    t   small_factorial_cacheR'   Rn   R2   R/   R#   R!   R"   R   R   R   R   R   RI   R   R{   RJ   R   t   minR   R   R   t   GAMMA_STIRLING_BETAt   MAX_GAMMA_TAYLOR_PRECRh  R    Rr  R   RF   R9   R>   (#   R   Rg   R   Re  R   R   R   R   Rp   t
   is_integerRl   R   t
   gamma_sizeR   t   fR   t   absxmanRi   t   one_distt   two_distt   cancellationt   xsub1t   xsub2t   xsub1magt   xsub2magt   n_for_stirlingt   xorigR
  R   R~   t   xabsR  R   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR   |  sF      
+


)    &
 %$%   &   
 
"
 !


!%&c   F      C   s[  |  \ } } | \ } } } }	 | \ }
 } } } | t  k r | d k r | r t | | | d  } | | ?} t t | d  | | |  } | | f St | | | |  t  f S| r | s | r | r t t f S| d } | |	 } | | } | rt | |  } n | } | d k  r| | k  rt |  t t |  |  |  t	 |  |  |  } | d k rvt
 | | |  S| d k rt |  | | |  S| d k rt | | |  S| d k rt t
 | |  | |  Sq| d k r| | 7} qn  | d k rI| | k rI| s!| | k rIt t |  t |  |  |  |  | |  S| d k rwt t | t  | f | | d  St t |   } t t |   } t | |  } | | } | d k rn | t |  7} | } |  } | r(t |   }  |  d \ } } } }	 } |  d \ }
 } } } } n  d } d } | d k  rC| d k rpt |  t  } | d t  k ru| } n$ t | d d | d d |  } | | k r6t |  }  t | |  |  }! t |! |! |  }! t |! t d	  |  }! t | t t	 |   |  }" t |! |" |  } | sOt | | |  Sn | d k rO| | 7} n  t |  t  }# |# d t  k rx| }$ n$ t |# d d |# d d |  }$ |$ | k rTt |  }  t t |  |   t d
   }% t t |# |# |  |% |  }! t |! t d	  |  }! t |# t t t	 |   |  }" t |! |" |  } | smt | | |  Sqp|$ d k rp| |$ 7} qpn  | | k  r5d | d }& t |  }' t t | |  }( t |' |& d | }) t t |' |(  |& d | }* t t |* |) |&  |( |&  }+ t | |+ | |  }" |) |" f } | s@t | | |  SqC| | 7} n  | | 7} t  t! |  }, | |, k  }- t" | |  }. t" | |  }/ d }0 | sR	|  }1 | |, k  ryt# | |  } t  d |, d | d d |  }2 t$ | >}3 }4 t% }5 xK t& |2  D]= }6 |. |3 |/ |5 | ?|. |5 |/ |3 | ?}3 }5 |. |4 7}. qWt' |3 |  t' |5 |  f }0 t' |. |  } | | f }  n  t( |. |/ |  \ }7 }8 t |  |  \ }9 }: t" |9 |  }9 t" |: |  }: |9 |. |: |/ | ?|9 d ?|7 }7 |9 |/ |: |. | ?|: d ?|8 }8 t' |7 |  t' |8 |  f }" |0 rR	| d k rR	t |" t |0 |  |  }" t) |1 d  }; t) |1 d  }< t* j+ |; |<  }= t) |" d  }> t* j, |< |;  }? |= d k rd |< |? }@ n( |< d |? |; |? |< t* j- |=  }@ t  t* j. |@ |> d t* j/ d   } |" d t |" d t t |  d | |  |  f }" qR	n  | r| d k sp	| d k rV
t t0 | |  | |  }A t t |   t  f }B | r	| d k r	t |A | |  }A q	t |A | |  }A n t |A t1 |" |  |  }A |0 r
t |B |0 |  }B n  | d k r4
t |B |A | |  S| d k rV
t |A |B | |  Sn  | d k rW| rw
t |  }C n t |"  }C t |C t t |  |  |  }C t2 | d  }D t3 | d  }E t |  }  t |  |D  }% t |% |E |  }% |C d t |C d |% |  f }C t4 |C t5 |  |  |  }C t0 t | |D  |  }% t |% |  }% t |C |% |  }C |E st |  t2 |D  |  }% |C d t |C d |% |  f }C n  t |C | |  Sn | d k r|0 rt t1 |" |  |0 | |  St1 |" | |  S| d k r;|0 r%t |0 t1 |" |  | |  St1 t |"  | |  S| d k rWt |" | |  Sd  S(   Ni   i
   i   ii    i   i   ii   i   Re  g      ?g@KWx?(6   R   R   R&   R9   R   R   RU   RZ   RW   R   Rd   RX   RS   R_   RV   R  R#   R   R{   R   R2   RT   Rf   R[   R   R!   R   R$   R%   R"   R/   R'   Rn   R|  R   t   complexR   R   R    R   Rx  R3   R   t   hypott   atan2R   t   floorRs   Rc   R`   R4   R5   RY   R?   (F   R   Rg   R   Re  Rh   R   R  R  R  R  R   R   R   R   R   Rl   R   Rp   t   amagt   bmagR   R   t   ant   bnt   absnR  t   need_reflectiont   zorigt   yfinalt   balance_prect   zsub1t   cancel1Rs   R   R  t   zsub2t   cancel2Rk   t   ppt   aabsR   t   x1R   t   xprimeR  t   need_reductiont   afixt   bfixR
  t   zpreredR   t   rreRi   t   rimR~   RD  RE  t   lret   limt   zfat   zfbt   zfabst   yfbR   t   giR   R   t   s1t   rezfloort   imzsign(    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR  J  s`   




0    +("

$
$!
$- "" ((<  ! #c         C   s   t  |  | | d  S(   Ni   (   R   (   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_factorial4	  s    c         C   s   t  |  | | d  S(   Ni   (   R  (   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_factorial7	  s    c         C   s   t  |  | | d  S(   Ni   (   R   (   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt
   mpf_rgamma:	  s    c         C   s   t  |  | | d  S(   Ni   (   R  (   R   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt
   mpc_rgamma=	  s    c         C   s4   |  \ } } } } | r! t   n  t |  | | d  S(   Ni   (   R6   R   (   R   Rg   R   R   R   R   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpf_loggamma@	  s    	c         C   s   |  \ } } | \ } } } } | \ }	 }
 } } | t  k r | r t | | | d  } | | ?} t t | d  | | |  } | | f St |  | | d  S(   Ni   i
   (   R   R   R&   R9   R  (   R   Rg   R   Rh   R   R  R  R  R  R   R   R   R   R   Rl   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   mpc_loggammaF	  s    
c         C   s:   |  t  k  r$ t t |  d | |  St t |   | |  S(   Ni   (   Ry  R    Rz  R   R   (   Rl   Rg   R   (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyR   Q	  s    (   t   __doc__R   R<  t   backendR    R   R   R   R   R   t
   libintmathR   R   R   R	   t   libmpfR
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   t	   libelefunR7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   RL   t   libmpcRM   RN   RO   RP   RQ   RR   RS   RT   RU   RV   RW   RX   RY   RZ   R[   R\   R]   R^   R_   R`   Ra   Rb   Rc   Rd   Re   Rf   Rm   Ry   R   R   R|   R   R   R   t	   mpf_aperyt   mpf_khinchint   mpf_glaishert   mpf_catalant   mpf_mertenst   mpf_twinprimeR   R   R   R   R   R   t   NoneRo   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  t   ZETA_INT_CACHE_MAX_PRECR  R   R  t   FalseR  R$  R%  t   mpf_zetasumR&  R(  R)  R+  R/  R9  R;  RP  R}  t   AssertionErrorR|  Ry  R_  Ri  Rz   Rl   Rz  R^  R`  Rh  Rj  Rr  Rx  R   R  R  R  R  R  R  R  R   (    (    (    s5   lib/python2.7/site-packages/mpmath/libmp/gammazeta.pyt   <module>   s   (" 
%B>%	#	K	z						-}		;4	o	5WZ			:	k,	Q	9	1		5	H