
<Zc           @   s  d  Z  d d l Z d d l Z d d l m Z m Z m Z m Z m Z d d l	 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+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 d d l1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 m8 Z8 m- Z- m9 Z9 d d l: 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 d d	 l	 mO ZO d d
 lP mQ ZQ mR ZR mS ZS d eT f d     YZU d   ZV e d k rcd   ZV n  e d  ZW d   ZX e d  ZY d   ZZ d   Z[ d   Z\ d   Z] e e^ d  Z_ e e^ d  Z` e d  Za e d  Zb e e^ d  Zc d d  Zd d d  Ze e d d   Zf e d!  Zg e d"  Zh e d#  Zi e d$  Zj e d%  Zk e d&  Zl e d'  Zm e d(  Zn e d)  Zo e d*  Zp e d+  Zq e d,  Zr e d-  Zs e d.  Zt d S(/   s   
This module implements computation of hypergeometric and related
functions. In particular, it provides code for generic summation
of hypergeometric series. Optimized versions for various special
cases are also provided.
iNi   (   t   MPZ_ZEROt   MPZ_ONEt   BACKENDt   xranget   exec_(   t   gcd(%   t   ComplexResultt
   round_fastt   round_nearestt   negative_rndt   bitcountt   to_fixedt   from_man_expt   from_intt   to_intt   from_rationalt   fzerot   fonet   fnonet   ftwot   finft   fninft   fnant   mpf_signt   mpf_addt   mpf_abst   mpf_post   mpf_cmpt   mpf_ltt   mpf_let   mpf_gtt   mpf_min_maxt   mpf_perturbt   mpf_negt	   mpf_shiftt   mpf_subt   mpf_mult   mpf_divt
   sqrt_fixedt   mpf_sqrtt   mpf_rdiv_intt   mpf_pow_intt   to_rational(	   t   mpf_pit   mpf_expt   mpf_logt   pi_fixedt   mpf_cos_sint   mpf_cost   mpf_sinR'   t	   agm_fixed(   t   mpc_onet   mpc_subt   mpc_mul_mpft   mpc_mult   mpc_negt   complex_int_powt   mpc_divt   mpc_add_mpft   mpc_sub_mpft   mpc_logt   mpc_addt   mpc_post	   mpc_shiftt   mpc_is_infnant   mpc_zerot   mpc_sqrtt   mpc_abst   mpc_mpf_divt
   mpc_squaret   mpc_exp(   t   ifac(   t   mpf_gamma_intt	   mpf_eulert   euler_fixedt   NoConvergencec           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyRK   +   s   c          C   s  |  \ } } } } d j  |  } d | | | |  | | | f } d | k } | d k } | pc | }	 g  }
 |
 j } g  } g  } g  } g  } g  } g  } g  } g  } | d  | d  | d  | d  |	 r | d  n  | r| d	  | d
  | d  | d  n | d  | d
  | d  | d  | d  | d  | d  | r| d  | d  | d  | d  | d  n  x:t |  D],\ } } d d g | | k } | d k r| | g | | k j |  | d | | | f  q| d k rM| | g | | k j |  | d | | | | | f  q| d k r| | g | | k j |  | d |  | d
  | d  | d  | d | | f  | d  | d | | f  q| d k r| | g | | k j |  | d  |  | d!  | d
  | d"  | d  | d  | d  | d# | | f  | d  | d$ | | f  | d  | d  | d% | | f  | d  | d& | | f  qt  qWt |  } t |  } t | |  } | | } | | } | d'  | d(  | d)  |	 r;| d*  n  | d+  d, j  g  | D] } d- j d. t |   ^ qRg  | D] } d/ j d. t |   ^ qzg  | D] } d0 j d. t |   ^ q } d, j  g  | D] } d1 j d. t |   ^ qg  | D] } d2 j d. t |   ^ q g  | D] } d3 j d. t |   ^ q)d4 g  } | ro| d5 |  n  | d6 |  | d7  | r| d8  | d9  n  | d:  |	 r.x0 t |  D]" } | d; | | | | f  qWx* | D]" } | d< j d. t |    qWx* | D]" } | d= j d. t |    qWx0 t |  D]" } | d> | | | | f  qNWx* | D]" } | d? j d. t |    q{Wx* | D]" } | d@ j d. t |    qW| r| r| dA  | dB  | dC  qM| dD  | dE  n; | r9| dF  | dB  | dC  n | dG  | dH  x> | D]6 } | dI j d. t |    | dB  | dC  qTWxG| D] } | dJ j d. t |    | dK j d. t |    | dL j d. t |    | dM j d. t |    | dN j d. t |    qWn x0 t |  D]" } | d; | | | | f  q;Wx* | D]" } | d< j d. t |    qhWx* | D]" } | d= j d. t |    qW| r| dO  n
 | dG  |	 r		| dP  | dQ  | dR  | dS  n | dP  | dT  | dS  | dU  | dV  x* | D]" } | dW j d. t |    qB	Wx* | D]" } | dX j d. t |    qo	Wx* | D]" } | dY j d. t |    q	Wx* | D]" } | dZ j d. t |    q	Wx* | D]" } | d[ j d. t |    q	Wx* | D]" } | d\ j d. t |    q#
Wx* | D]" } | d] j d. t |    qP
Wx* | D]" } | d^ j d. t |    q}
W|	 r$| d_  | d`  | da  | db  | dc  | dd  | de  | df  | dg  | d  | dh  | di  n< | d_  | da  | dj  | d  | dh  | dk  dl j  dm   |
 D  }
 dn | |
 }
 i  } t	 |
 t
   |  |
 | | f S(o   s   
    Returns a function that sums a generalized hypergeometric series,
    for given parameter types (integer, rational, real, complex).

    t    s   hypsum_%i_%i_%s_%s_%st   Cs$   MAX = kwargs.get('maxterms', wp*100)s   HIGH = MPZ_ONE<<epsshifts   LOW = -HIGHs!   SRE = PRE = one = (MPZ_ONE << wp)s   SIM = PIM = MPZ_ZEROs   xsign, xm, xe, xbc = z[0]s   if xsign: xm = -xms   ysign, ym, ye, ybc = z[1]s   if ysign: ym = -yms   xsign, xm, xe, xbc = zs   offset = xe + wps   if offset >= 0:s       ZRE = xm << offsets   else:s       ZRE = xm >> (-offset)s   offset = ye + wps       ZIM = ym << offsets       ZIM = ym >> (-offset)t   At   Bt   Zs   %sINT_%i = coeffs[%i]t   Qs!   %sP_%i, %sQ_%i = coeffs[%i]._mpq_t   Rs%   xsign, xm, xe, xbc = coeffs[%i]._mpf_s       %sREAL_%i = xm << offsets       %sREAL_%i = xm >> (-offset)s   __re, __im = coeffs[%i]._mpc_s   xsign, xm, xe, xbc = __res   ysign, ym, ye, ybc = __ims       %sCRE_%i = xm << offsets       %sCRE_%i = xm >> (-offset)s       %sCIM_%i = ym << offsets       %sCIM_%i = ym >> (-offset)s   for n in xrange(1,10**8):s       if n in magnitude_check:s"           p_mag = bitcount(abs(PRE))s.           p_mag = max(p_mag, bitcount(abs(PIM)))s%           magnitude_check[n] = wp-p_mags    * s   AINT_#t   #s   AP_#s   BQ_#s   BINT_#s   BP_#s   AQ_#t   ns
       mul = s
       div = s       if not div:s           if not mul:s               breaks           raise ZeroDivisionErrors$       PRE = PRE * AREAL_%i // BREAL_%is       PRE = (PRE * AREAL_#) >> wps        PRE = (PRE << wp) // BREAL_#s$       PIM = PIM * AREAL_%i // BREAL_%is       PIM = (PIM * AREAL_#) >> wps        PIM = (PIM << wp) // BREAL_#sI       PRE, PIM = (mul*(PRE*ZRE-PIM*ZIM))//div, (mul*(PIM*ZRE+PRE*ZIM))//divs       PRE >>= wps       PIM >>= wps*       PRE = ((mul * PRE * ZRE) >> wp) // divs*       PIM = ((mul * PIM * ZRE) >> wp) // divs=       PRE, PIM = (PRE*ZRE-PIM*ZIM)//div, (PIM*ZRE+PRE*ZIM)//divs$       PRE = ((PRE * ZRE) >> wp) // divs$       PIM = ((PIM * ZRE) >> wp) // divs;       PRE, PIM = PRE*ACRE_#-PIM*ACIM_#, PIM*ACRE_#+PRE*ACIM_#s%       mag = BCRE_#*BCRE_#+BCIM_#*BCIM_#s        re = PRE*BCRE_# + PIM*BCIM_#s        im = PIM*BCRE_# - PRE*BCIM_#s       PRE = (re << wp) // mags       PIM = (im << wp) // mags*       PRE = ((PRE * mul * ZRE) >> wp) // divs       SRE += PREs       SIM += PIMs1       if (HIGH > PRE > LOW) and (HIGH > PIM > LOW):s           breaks       if HIGH > PRE > LOW:s       if n > MAX:sc           raise NoConvergence('Hypergeometric series converges too slowly. Try increasing maxterms.')s       AINT_# += 1s       BINT_# += 1s       AP_# += AQ_#s       BP_# += BQ_#s       AREAL_# += ones       BREAL_# += ones       ACRE_# += ones       BCRE_# += ones%   a = from_man_exp(SRE, -wp, prec, 'n')s%   b = from_man_exp(SIM, -wp, prec, 'n')s   if SRE:s       if SIM:s(           magn = max(a[2]+a[3], b[2]+b[3])s	       else:s           magn = a[2]+a[3]s	   elif SIM:s       magn = b[2]+b[3]s       magn = -wp+1s   return (a, b), True, magns       magn = a[2]+a[3]s   return a, False, magns   
c         s   s   |  ] } d  | Vq d S(   s       N(    (   t   .0t   line(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pys	   <genexpr>+  s    sB   def %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs):
(   t   joint   appendt	   enumeratet
   ValueErrort   lent   mint   replacet   strt   rangeR   t   globals(    t   keyt   pt   qt   param_typest   ztypet   pstringt   fnamet   have_complex_paramt   have_complex_argt   have_complext   sourcet   addt   aintt   aratt   bintt   bratt   arealt   brealt   acomplext   bcomplext   it   flagt   Wt   l_arealt   l_brealt   cancellable_realt   noncancellable_real_numt   noncancellable_real_dent
   multipliert   divisort   kt	   namespace(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   make_hyp_summator@   s   !	

















 




















Q/


            







#      








                
















t   sagec            sG   d d l  m   |  \           f d   } d | f S(   s   
        Returns a function that sums a generalized hypergeometric series,
        for given parameter types (integer, rational, real, complex).
        i(   t   hypsum_internalc            s(         |  | | | | | |  S(   N(    (   t   coeffst   zt   prect   wpt   epsshiftt   magnitude_checkt   kwargs(   R   Rd   Rf   Re   Rg   (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   _hypsum?  s    s   (none)(   t   sage.libs.mpmath.ext_mainR   (   Rc   R   (    (   R   Rd   Rf   Re   Rg   s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyR   8  s    c         C   s  |  \ } } } } | sL |  t  k r( t  S|  t k r8 t S|  t k rH t St S| | } t j } | d k r d | d d | | d  k r | r t t d | |  St t d | |  Sn  | | k  rt	 |  d  }  t
 t | d  | d  }	 t |  |	 | |  S| t |  d }
 t t |  |
   } | | |
 ?} | d d } } } xY | r| | |
 ?| } | d | d } | d @r| | 8} n
 | | 7} | d 7} qUW| |
 d >t t |
  |
  } | r| } n  t | |
 | |  S(	   Ni   i   i   gW?i    i   i   i90  (   R   R   R   R   R   R   t   matht   logR    R"   R'   R+   R%   t   absR   R&   R.   R   (   t   xR   t   rndt   signt   mant   expt   bct   sizet   lgt   cR   t   tt   t2t   st   termR   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_erfO  sD       
	-	

!
c         C   s(   t  |   } | d d | k r$ t St S(   Ni   g
ףp=
?(   R   t   Truet   False(   R   R   RV   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   erfc_check_series|  s    c         C   s1  |  \ } } } } | sL |  t  k r( t S|  t k r8 t  S|  t k rH t St S| d } | | } | t d d |  7} | p | d k  }	 |	 s t |  |  r|	 r t t t	 |  | d t
 |  | |  St |   d }
 t t t	 |  | t |
 d d  d  | |  St | >} } d } d t |  |  d | ?} d } xr | d | d | >| } | d k rx| | k s| rPn  | d @r| | 8} n
 | | 7} | } | d 7} qFW| | >t t |  |  } t | | |  } t t t |  |  |  |  |  } t t | | |  |  | |  } | S(   Ni   i    i   i
   i   g
ףp=
?i   (   R   R   R   R   R   R   t   maxR   R#   R   R	   R   t   intR   R   R&   R.   R   R,   R!   R$   R%   (   R   R   R   R   R   R   R   R   t   magt   regular_erfRV   R   R   t	   term_prevR   R   R   t   y(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_erfc  sH       

'2

$!c         C   sK   |  } } d } x4 | rF | |  | ?| } | | | 7} | d 7} q W| S(   Ni   i   (    (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt	   ei_taylor  s    
	c   	      C   s   t  } |  } } | } } d } x{ | |  | |  d k r | |  | | | | ?| | | |  | | ?} } | | | 7} | | | 7} | d 7} q# W| | f S(   Ni   i   i   (   R   (	   t   zret   zimR   t   _abst   sret   tret   simt   timR   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   complex_ei_taylor  s    

5c         C   sc   t  | >} | | >|  }  } | |  } d } x0 | r^ | | |  | ?} | | 7} | d 7} q/ W| S(   Ni   i   (   R   (   R   R   t   oneR   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   ei_asymptotic  s    

	
c         C   s   t  } t | >} | | |  |  | ?} |  | >| } } | | >| } }	 | | }
 | } d } x | |  | |	  d k r | | |	 | | | ?| | |	 | | | ?} }	 |
 | 7}
 | |	 7} | d 7} | | k rd t  qd qd W|
 | f S(   Ni   i  i   (   R   R   RK   (   R   R   R   R   R   t   Mt   xreR   t   ximR   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   complex_ei_asymptotic  s     

5


c         C   s  | r t  |   }  n  |  \ } } } } | rS | rS |  t k rD t St d   n  | rd | | | f } | | }	 | d }
 |	 |
 k } | s | d k r | | >} n | | ?} | t |
 d  d k } n  | rB|	 |
 k r t } n" t t t |  |
  |
  |
  } t	 | t
 |  |
  |
  } t | |  | |  } q |
 d t t |   7}
 t |  |
  } t | |
  t |
  } t | |
  } t | |
  } t | | | |  } nE |  t k rt } n0 |  t k rt } n |  t k rt } n t } | rt  |  } n  | S(   Ns   E1(x) for x < 0i    i   gV-?i
   i   (   R!   R   R   R   R   R   R   R   R   R$   R,   R%   R   R   RJ   R-   R   R   R   (   R   R   R   t   e1R   R   R   R   t   xabst   xmagR   t   can_use_asympt   xabsintt   vt   ut   t1R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_ei  sN    

	" 	 	 	c         C   s  | r t  |   }  n  |  \ } } | \ } } } }	 | \ }
 } } } | t k r | r t t | | |   } | s t t | |   } n t } | | f St | | |  t f Sn  | t k r | s | r t t f Sn  | d } | |	 } | | } t | |  } | | k } | s[t t |   t t |   } | t	 | d  d k } n  y6| r| | k rt
 t f } nV t | |  } t | |  } t | | |  \ } } t | |  t | |  f } t | t |  |  |  } t | |  |  } | rt  | | |  } no | \ } } |
 r_t | | |  t | t |  | |  f } n- t | | |  t | t |  | |  f } | SWn t k
 rn X| d t	 t t |  d    7} t | |  } t | |  } t | | |  \ } } | t |  7} t | |  t | |  f } | rLt t  |   |  } n t |  |  } t | | | |  } | rt  |  } n  | S(   Ni(   gV-?i   i   i   (   R7   R   R!   R   R+   R   R   R   R   R   R   R   R   R   R6   RF   R9   R   R#   R   RK   RC   R   RJ   R<   R=   (   R   R   R   R   t   at   bt   asignt   amant   aexpt   abct   bsignt   bmant   bexpt   bbcR   R   R   t   amagt   bmagt   zmagR   t   zabsintR   R   R   t   vret   vimR   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_ei  sp    



" 0-# c         C   s   t  |  | | t  S(   N(   R   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_e1O  s    c         C   s   t  |  | | t  S(   N(   R   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_e1R  s    c          C   s  | \ } } } } | s | rv | t  k rV |  d k r@ t d f St |  | |  d f S| t k rl t  d f St t f S| t  k r |  d k r t d |  d | |  d f St d f Sn  | t k r t  d f St t f Sn  |  }	 | r d |  }  n  | d }
 | | } | d k  rt  n  t t |    } |  d k o>| } t	 |  } |  d k snd | | |
 k  r| rt
 | |
  } t | t | |	 d |
  | |  } qct
 | |
  } t | | | |  } nd |
 |  k  od k n } | st t |   } t t d | |   d |
  } |  | | |  t t | |    | | d | d } |
 d	 } | | k  } n  | rbt |
 |
 >t | |
  } |  } | | } t |
 >} x6 | r| r| | 7} | d 7} | | | |
 ?} qWt
 | |
  } | r.t | t | |	 d |
  |
  } n t | | |
  } t | t | |
  | |  } n|  d k rt	 t | | |   } n|  d k r]|  d
 |
 k  r]t	 t | |
   } | r|	 d @rt	 |  } qn" t | t | |  d |
  |
  } t | |
  } } d g |  d } x1 t d |  d  D] } | | d | | | <q6W| d d d  } | d |
 >} xZ t d |  d  D]E } | d @r| | | | 8} n | | | | 7} | | |
 ?} qWt | |
 |
  } t | t
 | |
   } | r&t | t | |	 |
  |
  } n  t | |  } t | t t |  d   | |  } n t  | rt t |  d   } | rt t |
  | | |  } |	 d @rt	 |  } qn7 t t t |
  t | |	 d |
  |
  | | |  } | | f S| d f Sd S(   s   
    E_n(x), n an integer, x real

    With gamma=True, computes Gamma(n,x)   (upper incomplete gamma function)

    Returns (real, None) if real, otherwise (real, imag)
    The imaginary part is an optional branch cut term

    i    i   i   ii   ii   id   i
   i   Ni(   R   R   t   NoneRH   R   R   t   NotImplementedErrorR
   R   R!   R,   R$   R)   R%   R   R^   R   R   R   R   R   Ra   R   R   RG   R+   (    RV   R   R   R   t   gammaR   R   R   R   t   n_origR   R   t   nmagt	   have_imagt   negxR   t   ret   can_use_asymptotic_seriest   xit   mt   sizt   tolt   rR   R   t   T1t   facsR   t   T2RT   R   t   im(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt
   mpf_expintU  s    






	!(  ;



%"
"
!(
7
i    c         C   s   t  |  |  }  |  |  | ?} | d k rE d t | >d } } } n |  |  d } } } x< | r | | | | d | ?} | | | 7} | d 7} q\ Wt | |  S(   s2   
    0 - Ci(x) - (euler+log(x))
    1 - Si(x)
    i    i   i   i   (   R   R   R   (   R   R   t   whicht   x2R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_ci_si_taylor  s    	c         C   s  |  d r |  d |  d } n | d r> | d | d } n  | d rf t  | | d | d  } n  | d k s | | k  r t  n  | d | 7} t |  |  } t | |  } | | | | | ?} d | | | ?} | }	 | }
 t | >} | d k r)d d t | >d d f \ } } }	 }
 } n$ | | | | d f \ } } }	 }
 } x t  t |	  t |
   d k r| | d } |	 | |
 | | | ?|	 | |
 | | | ?}	 }
 | |	 | 7} | |
 | 7} | d 7} qPWt | |  t | |  f S(   Ni   i   i   ii    (   R   R   R   R   R   R   (   R   R   R   R   R   R   R   t   z2ret   z2imR   R   R   R   R   R   t   f(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_ci_si_taylor  s4    


	
+$$5i   c         C   st  | d } |  \ } } } } d \ }	 }
 | s |  t k rD t t f S|  t k rZ |  |  f St }	 | d k r |  t k r t t | |  d  }
 n  |  t k r t t t | t |  d   }
 q n  |	 |
 f S| | } | | k  r_| d k rt	 |  d | | |  }
 n  | d k rUt
 |  } t |   } t | t | |  | |  }	 n  |	 |
 f S| | k r| d k r| rt t | t |   }
 n t | |  }
 t |
 d  }
 n  | d k rt t |  |  |  | |  }	 n  |	 |
 f S| t |  7} | d t j | d  k } | s| d k rPt t |  | d  | |  }
 n  | d k rt |  | d  }	 t |	 t
 |  |  }	 t |	 t t |   |  | |  }	 n  |	 |
 f St |   }  t |  |  } t d | >| } t | >} | } | } d } x] | r_| } | | | | ?} | d 7} | | 7} | | | | ?} | d 7} | | 7} qWt | |  } t | |  } t | |  |  } t | |  |  } t |  |  \ } } | d k r4t t | |  t | |  |  }
 t t t |  d  |
 |  }
 | rt |
  }
 n  t |
 | |  }
 n  | d k rjt t | |  t | |  | |  }	 n  |	 |
 f S(   s   
    Calculation of Ci(x), Si(x) for real x.

    which = 0 -- returns (Ci(x), -)
    which = 1 -- returns (Si(x), -)
    which = 2 -- returns (Ci(x), Si(x))

    Note: if x < 0, Ci(x) needs an additional imaginary term, pi*i.
    i   i    ii   i   N(   NN(   R   R   R   R   R   R"   R+   R!   R	   R    RI   R   R   R-   R%   R1   R   R   R   R   R   R   R   R   R/   R$   R#   (   R   R   R   R   R   R   R   R   R   t   cit   siR   R   R   t
   asymptotict   xft   xrt   s1t   s2R   R   t   cost   sin(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt	   mpf_ci_si  s    



(

!
!
!'

	


$!*c         C   s2   t  |   d k  r t  n  t |  | | d  d S(   Ni    (   R   R   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_ciX  s    	c         C   s   t  |  | | d  d S(   Ni   (   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_si]  s    c   	      C   s   |  \ } } | t  k r` t | | | d  d } t |  d k  rV | t | |  f S| t  f S| d } t | | | d  \ } } t | t |  |  } t | | f t |  |  | |  } | S(   Ni    i   (	   R   R   R   R+   R   R   RI   R=   R<   (	   R   R   R   R   R   R   R   t   cret   cim(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_ci`  s    

$c         C   sd   |  \ } } | t  k r5 t | | | d  d t  f S| d } t | | | d  }  t |  | |  S(   Ni   i   (   R   R   R   R>   (   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_sim  s    
c         C   s8  | d 7} |  d k  o |  d @} | d | d } t  |   }  | d |  t |   } | d k  rs | |  | 8} n  t | |  } | d | ?} |  s t | >} }	 n( | |  t |   |  d | |  ?} }	 d }
 x< |	 r|	 | d |
 |
 |  | ?}	 | |	 7} |
 d 7}
 q W| r$| } n  t | | | |  S(   Ni2   i    i   i   i   i   i(   R   R
   R   R   RG   R   (   RV   R   R   t   roundingt   negateR   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_besseljn  s(    
(	

c         C   sH  |  d k  o |  d @} t  |   }  | } | \ } } t | d | d | d | d  } | d |  t |   t  |  7} | d k  r | |  | 8} n  t | |  } t | |  } | d | d | ?}	 | | | d ?}
 |  st | >} } t } } n` t | | |   \ } } | t |   |  d | |  ?} } | t |   |  d | |  ?} } d } x t  |  t  |  d k rd | | |  } | |	 | |
 | |	 | |
 } } | | | ?} | | | ?} | | 7} | | 7} | d 7} qjW| r| } | } n  t | | | |  } t | | | |  } | | f S(   Ni    i   i   i   i   i(	   R   R   R
   R   R   R    R8   RG   R   (   RV   R   R   R   R   t   origprecR   R   R   R   R   R   R   R   R   R   R   R   Rd   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_besseljn  sB    '"$$%


c         C   sC  |  \ } } } } | \ } }	 }
 } | s0 | r? t  d   n  | oH |	 s |  t k sc | t k rg t S|  t k r | t k r t St S| t k r |  t k r t St St S| d } | | } |
 | } | | } t |  } | d k rxQ | d k r>t t |  | |  d  t t |  | |  |  }  } | d } q W|  \ } } } } | \ } }	 }
 } | | } |
 | } | | } n  t	 | |  } t
 | |  } d } | d k  r| } n | d k r| } n  | rt |  |  }  t | |  } n  t |  |  } t | |  } t | | |  } t | | | | |  S(   s^   
    Computes the arithmetic-geometric mean agm(a,b) for
    nonnegative mpf values a, b.
    s   agm of a negative numberi   i
   ii   i    i(   R   R   R   R   R   R"   R   R'   R$   R^   R   R   R2   R   (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t	   mag_deltat   abs_mag_deltat   min_magt   max_magRV   t   aft   bft   g(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_agm  sZ    







c         C   s   t  t |  | |  S(   s\   
    Computes the arithmetic-geometric mean agm(1,a) for a nonnegative
    mpf value a.
    (   R  R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpf_agm1  s    c   
      C   s1  t  |   s t  |  r" t t f St |  | f k r> t t f St |   | k rZ t t f S| d } t t | d  } x t t |  | |  d  } t	 t
 |  | |  |  } | | }  } t t |  d  t | d  g  d } t t |  | d  d  }	 | t k s%t |	 t | |   r{ |  Sq{ Wd S(   s   
    Complex AGM.

    TODO:
    * check that convergence works as intended
    * optimize
    * select a nonarbitrary branch
    i   i
   ii   N(   R@   R   RA   R   R7   R"   R   R?   R=   RB   R6   R   RC   R4   R   R$   (
   R   R   R   R   R   t   epst   a1t   b1R   t   err(    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_agm  s     	



($c         C   s   t  t |  | |  S(   N(   R  R3   (   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   mpc_agm1,  s    c         C   s   |  d sO |  t  k r, t t | |  d  S|  t k r< t  S|  t k rO |  Sn  |  t k r_ t S| d } t t t |  |  |  } t	 | |  } t
 t |  | | |  } t | d  S(   Ni   ii   (   R   R"   R+   R   R   R   R   R'   R#   R  R%   (   R   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt
   mpf_ellipk/  s    

c   	      C   s   |  \ } } | t  k rP | t k r( t St | t  rP t | | |  t  f Sn  | d } t t t |  |  |  } t	 | |  } t
 t |  | | |  } t | d  S(   Ni   i(   R   R   RA   R   R   R  RB   R4   R3   R  RD   R+   R?   (	   R   R   R   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt
   mpc_ellipkC  s    
c         C   si  |  \ } } } } | sr |  t  k r: t t | |  d  S|  t k rJ t S|  t k rZ |  S|  t k rr t  qr n  |  t k r t S| d } | | } | | k  r t t | |  d  St | d  | }	 t t |	  }
 t	 |  d |  } t	 t
 |  |
  d |  } t t
 | |  |	  } t
 t |   } t | t |  d  |  } t | t | |  | |  S(   Nii   i    i   i   (   R   R"   R+   R   R   R   R   R   R   R  R#   R$   R   (   R   R   R   R   R   R   R   R   R   Rd   t   ht   Kt   Kht   KdiffR   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt
   mpf_ellipeP  s0    

c         C   s;  |  \ } } | t  k rV | t k r. t  t f St | t  rV t | | |  t  f Sn  | d } t |  d  } t | d | d d  | } t t |  } t |  d |  }	 t t	 |  | d |  d |  }
 t
 t |
 |	 |  |  } t t |  |  } t | t
 |  d  |  } t | t |	 | |  | |  S(   Ni   i   i   i   i    (   R   R   R   R   R  RC   R   R"   R  R:   R?   R4   R3   R6   R=   (   R   R   R   R   R   R   R   Rd   R  R  R  R  R   R   (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt
   mpc_ellipen  s     

#(u   t   __doc__t   operatorR   t   backendR    R   R   R   R   t
   libintmathR   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*   t	   libelefunR+   R,   R-   R.   R/   R0   R1   R2   t   libmpcR3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   RE   RF   RG   t	   gammazetaRH   RI   RJ   t	   ExceptionRK   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  (    (    (    s4   lib/python2.7/site-packages/mpmath/libmp/libhyper.pyt   <module>   sT   (@	-	.					*Av]($;