
    [h                        S r SSKrSSKrSSKJrJrJrJrJr  SSK	J
r
  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  SSK1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J-r-J9r9  SSK:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrN  SS	K	JOrO  SS
KPJQrQJRrRJSrS   " S S\T5      rU S rV\S:X  a  S rV\4S jrWS rX\4S jrYS rZS r[S r\S r]\S4S jr^\S4S jr_\4S jr`\4S jra\S4S jrbS/S jrcS/S jrd\S4S  jre\4S! jrf\4S" jrg\4S# jrh\4S$ jri\4S% jrj\4S& jrk\4S' jrl\4S( jrm\4S) jrn\4S* jro\4S+ jrp\4S, jrq\4S- jrr\4S. jrsg)0z
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.
    N   )MPZ_ZEROMPZ_ONEBACKENDxrangeexec_)gcd)%ComplexResult
round_fastround_nearestnegative_rndbitcountto_fixedfrom_man_expfrom_intto_intfrom_rationalfzerofonefnoneftwofinffninffnanmpf_signmpf_addmpf_absmpf_posmpf_cmpmpf_ltmpf_lempf_gtmpf_min_maxmpf_perturbmpf_neg	mpf_shiftmpf_submpf_mulmpf_div
sqrt_fixedmpf_sqrtmpf_rdiv_intmpf_pow_intto_rational)	mpf_pimpf_expmpf_logpi_fixedmpf_cos_sinmpf_cosmpf_sinr+   	agm_fixed)mpc_onempc_submpc_mul_mpfmpc_mulmpc_negcomplex_int_powmpc_divmpc_add_mpfmpc_sub_mpfmpc_logmpc_addmpc_pos	mpc_shiftmpc_is_infnanmpc_zerompc_sqrtmpc_absmpc_mpf_div
mpc_squarempc_exp)ifac)mpf_gamma_int	mpf_eulereuler_fixedc                       \ rS rSrSrg)NoConvergence+    N)__name__
__module____qualname____firstlineno____static_attributes__rR       M/var/www/auris/envauris/lib/python3.13/site-packages/mpmath/libmp/libhyper.pyrP   rP   +   s    rX   rP   c                    U u  pp4SR                  U5      nSXUSU XQS U4-  nSU;   nUS:H  nU=(       d    Un	/ n
U
R                  n/ n/ n/ n/ n/ n/ n/ n/ nU" S5        U" S5        U" S5        U" S5        U	(       a  U" S	5        U(       a!  U" S
5        U" S5        U" S5        U" S5        OU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U(       a(  U" S5        U" S5        U" S5        U" S5        U" S5        [        U5       GH  u  nnSS/UU:     nUS:X  a(  X/UU:     R                  U5        U" SUUU4-  5        M?  US:X  a*  X/UU:     R                  U5        U" SUUUUU4-  5        Mo  US:X  a`  UU/UU:     R                  U5        U" SU-  5        U" S5        U" S5        U" S5        U" SUU4-  5        U" S5        U" S UU4-  5        M  US:X  a  UU/UU:     R                  U5        U" S!U-  5        U" S"5        U" S5        U" S#5        U" S5        U" S5        U" S5        U" S$UU4-  5        U" S5        U" S%UU4-  5        U" S5        U" S5        U" S&UU4-  5        U" S5        U" S'UU4-  5        GM  [        e   [	        U5      n[	        U5      n[        UU5      nUUS nUUS nU" S(5        U" S)5        U" S*5        U	(       a  U" S+5        U" S,5        S-R                  U Vs/ s H  nS.R                  S/[        U5      5      PM      snU Vs/ s H  nS0R                  S/[        U5      5      PM      sn-   U Vs/ s H  nS1R                  S/[        U5      5      PM      sn-   5      nS-R                  U Vs/ s H  nS2R                  S/[        U5      5      PM      snU Vs/ s H  nS3R                  S/[        U5      5      PM      sn-   U Vs/ s H  nS4R                  S/[        U5      5      PM      sn-   S5/-   5      nU(       a  U" S6U-   5        U" S7U-   5        U" S85        U(       a  U" S95        U" S:5        U" S;5        U	(       GaC  [        U5       H  nU" S<UU   UU   4-  5        M     U H$  nU" S=R                  S/[        U5      5      5        M&     U H$  nU" S>R                  S/[        U5      5      5        M&     [        U5       H  nU" S?UU   UU   4-  5        M     U H$  nU" S@R                  S/[        U5      5      5        M&     U H$  nU" SAR                  S/[        U5      5      5        M&     U(       a1  U(       a  U" SB5        U" SC5        U" SD5        OAU" SE5        U" SF5        O0U(       a  U" SG5        U" SC5        U" SD5        OU" SH5        U" SI5        U H4  nU" SJR                  S/[        U5      5      5        U" SC5        U" SD5        M6     U H  nU" SKR                  S/[        U5      5      5        U" SLR                  S/[        U5      5      5        U" SMR                  S/[        U5      5      5        U" SNR                  S/[        U5      5      5        U" SOR                  S/[        U5      5      5        M     O[        U5       H  nU" S<UU   UU   4-  5        M     U H$  nU" S=R                  S/[        U5      5      5        M&     U H$  nU" S>R                  S/[        U5      5      5        M&     U(       a	  U" SP5        OU" SH5        U	(       a!  U" SQ5        U" SR5        U" SS5        U" ST5        OU" SQ5        U" SU5        U" ST5        U" SV5        U" SW5        U H$  nU" SXR                  S/[        U5      5      5        M&     U H$  nU" SYR                  S/[        U5      5      5        M&     U H$  nU" SZR                  S/[        U5      5      5        M&     U H$  nU" S[R                  S/[        U5      5      5        M&     U H$  nU" S\R                  S/[        U5      5      5        M&     U H$  nU" S]R                  S/[        U5      5      5        M&     U H$  nU" S^R                  S/[        U5      5      5        M&     U H$  nU" S_R                  S/[        U5      5      5        M&     U	(       aa  U" S`5        U" Sa5        U" Sb5        U" Sc5        U" Sd5        U" Se5        U" Sf5        U" Sg5        U" Sh5        U" S5        U" Si5        U" Sj5        O0U" S`5        U" Sb5        U" Sk5        U" S5        U" Si5        U" Sl5        SmR                  Sn U
 5       5      n
SoU-  U
-   n
0 n[        U
[        5       U5        U
UU   4$ s  snf s  snf s  snf s  snf s  snf s  snf )pz
Returns a function that sums a generalized hypergeometric series,
for given parameter types (integer, rational, real, complex).

 zhypsum_%i_%i_%s_%s_%sNCz$MAX = kwargs.get('maxterms', wp*100)zHIGH = MPZ_ONE<<epsshiftzLOW = -HIGHz!SRE = PRE = one = (MPZ_ONE << wp)zSIM = PIM = MPZ_ZEROzxsign, xm, xe, xbc = z[0]zif xsign: xm = -xmzysign, ym, ye, ybc = z[1]zif ysign: ym = -ymzxsign, xm, xe, xbc = zzoffset = xe + wpzif offset >= 0:z    ZRE = xm << offsetzelse:z    ZRE = xm >> (-offset)zoffset = ye + wpz    ZIM = ym << offsetz    ZIM = ym >> (-offset)ABZz%sINT_%i = coeffs[%i]Qz!%sP_%i, %sQ_%i = coeffs[%i]._mpq_Rz%xsign, xm, xe, xbc = coeffs[%i]._mpf_z    %sREAL_%i = xm << offsetz    %sREAL_%i = xm >> (-offset)z__re, __im = coeffs[%i]._mpc_zxsign, xm, xe, xbc = __rezysign, ym, ye, ybc = __imz    %sCRE_%i = xm << offsetz    %sCRE_%i = xm >> (-offset)z    %sCIM_%i = ym << offsetz    %sCIM_%i = ym >> (-offset)zfor n in xrange(1,10**8):z    if n in magnitude_check:z"        p_mag = bitcount(abs(PRE))z.        p_mag = max(p_mag, bitcount(abs(PIM)))z%        magnitude_check[n] = wp-p_magz * zAINT_##zAP_#zBQ_#zBINT_#zBP_#zAQ_#nz
    mul = z
    div = z    if not div:z        if not mul:z            breakz        raise ZeroDivisionErrorz$    PRE = PRE * AREAL_%i // BREAL_%iz    PRE = (PRE * AREAL_#) >> wpz     PRE = (PRE << wp) // BREAL_#z$    PIM = PIM * AREAL_%i // BREAL_%iz    PIM = (PIM * AREAL_#) >> wpz     PIM = (PIM << wp) // BREAL_#zI    PRE, PIM = (mul*(PRE*ZRE-PIM*ZIM))//div, (mul*(PIM*ZRE+PRE*ZIM))//divz    PRE >>= wpz    PIM >>= wpz*    PRE = ((mul * PRE * ZRE) >> wp) // divz*    PIM = ((mul * PIM * ZRE) >> wp) // divz=    PRE, PIM = (PRE*ZRE-PIM*ZIM)//div, (PIM*ZRE+PRE*ZIM)//divz$    PRE = ((PRE * ZRE) >> wp) // divz$    PIM = ((PIM * ZRE) >> wp) // divz;    PRE, PIM = PRE*ACRE_#-PIM*ACIM_#, PIM*ACRE_#+PRE*ACIM_#z%    mag = BCRE_#*BCRE_#+BCIM_#*BCIM_#z     re = PRE*BCRE_# + PIM*BCIM_#z     im = PIM*BCRE_# - PRE*BCIM_#z    PRE = (re << wp) // magz    PIM = (im << wp) // magz*    PRE = ((PRE * mul * ZRE) >> wp) // divz    SRE += PREz    SIM += PIMz1    if (HIGH > PRE > LOW) and (HIGH > PIM > LOW):z        breakz    if HIGH > PRE > LOW:z    if n > MAX:zc        raise NoConvergence('Hypergeometric series converges too slowly. Try increasing maxterms.')z    AINT_# += 1z    BINT_# += 1z    AP_# += AQ_#z    BP_# += BQ_#z    AREAL_# += onez    BREAL_# += onez    ACRE_# += onez    BCRE_# += onez%a = from_man_exp(SRE, -wp, prec, 'n')z%b = from_man_exp(SIM, -wp, prec, 'n')zif SRE:z    if SIM:z(        magn = max(a[2]+a[3], b[2]+b[3])z	    else:z        magn = a[2]+a[3]z	elif SIM:z    magn = b[2]+b[3]z    magn = -wp+1zreturn (a, b), True, magnz    magn = a[2]+a[3]zreturn a, False, magn
c              3   ,   #    U  H
  nS U-   v   M     g7f)z    NrR   ).0lines     rY   	<genexpr>$make_hyp_summator.<locals>.<genexpr>+  s     :646s   zBdef %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs):
)joinappend	enumerate
ValueErrorlenminreplacestrranger   globals) keypqparam_typesztypepstringfnamehave_complex_paramhave_complex_arghave_complexsourceaddaintaratbintbratarealbrealacomplexbcomplexiflagWl_areall_brealcancellable_realnoncancellable_real_numnoncancellable_real_den
multiplierdivisork	namespaces                                    rY   make_hyp_summatorr   @   s	     #A+ggk"G#qWRa['"+u&MME +|%9)9LF
--CDDDDEEHH ./"# +,"#'( !'( !$% ! !L#$$%G'([)4#JqAv3;[a ((+'1a)34S[[a ((+3q!Q1oEFS[E]16"**1-7!;<$%"#!".!Q78L1QF:;S[x a(003/!34+,$%+,$%"#!"-A67L0Aq69:"#!"-A67L0Aq69:I *L %jG%jG7G,#$4$56#$4$56 #$&',-<=/0 DIDqX--c3q6:DIBFG$QV^^CQ8$GHBFG$QV^^CQ8$GH IJ DIDqX--c3q6:DIBFG$QV^^CQ8$GHBFG$QV^^CQ8$GHKN%P QG L:%&w !" )* 
 '(A#.TX]^_X`bghibjWk.k*l((A#.O.W.WX[]`ab]c.d*e((A#.P.X.XY\^abc^d.e*f('(A#.TX]^_X`bghibjWk.k*l((A#.O.W.WX[]`ab]c.d*e((A#.P.X.XY\^abc^d.e*f(_`$%$%@A@AST$%$%:;:;AMUUVY[^_`[abc ! ! 
 A7??SVLM2::3AGH2::3AGH-55c3q6BC-55c3q6BC  '(A#.TX]^_X`bghibjWk.k*l((A#.O.W.WX[]`ab]c.d*e((A#.P.X.XY\^abc^d.e*f(<=67 ?@O&'O
 mn s,44S#a&ABTs,44S#a&ABTs-55c3q6BCTs-55c3q6BCTs/77SVDEUs/77SVDEUs.66sCFCDXs.66sCFCDX3434IM67K&'K"#G'(34I"#G#$YY:6::FSV[[_eeFI	&')Y' 9U###E JGGIGGs$   %g%g
1%g
.%g%g"
%g'
sagec                 B   ^^^^^ SSK Jm  U u  mmmmUUUUU4S jnSU4$ )z
Returns a function that sums a generalized hypergeometric series,
for given parameter types (integer, rational, real, complex).
r   )hypsum_internalc                 "   > T" TT
T	TXX#XEU5      $ NrR   )coeffszprecwpepsshiftmagnitude_checkkwargsr   ru   rw   rv   rx   s          rY   _hypsum"make_hyp_summator.<locals>._hypsum?  s!    "1aeV(V= =rX   z(none))sage.libs.mpmath.ext_mainr   )rt   r   r   ru   rw   rv   rx   s     @@@@@rY   r   r   8  s-    
 	>#& 1k5	= 	=   rX   c                    U u  p4pVU(       d6  U [         :X  a  [         $ U [        :X  a  [        $ U [        :X  a  [        $ [
        $ XV-   n[        R                  nUS:  a?  SUS-
  -  S-   U" US5      :  a)  U(       a  [        [        SX5      $ [        [        SX5      $ Xq* :  a3  [        U S5      n [        [        US-   5      US-   5      n	[        X	X5      $ U[        U5      -   S-   n
[        [        X
5      5      nX-  U
-	  nUSSpnU(       a6  X-  U
-	  U-  nUSU-  S-   -  nUS-  (       a  X-  nOX-  nUS-  nU(       a  M6  XS-   -  [        [!        U
5      U
5      -  nU(       a  U* n[#        X* X5      $ )	N      r   gW?r         i90  )r   r   r   r   r   r   mathlogr$   r&   r+   r/   r)   absr   r*   r2   r   )xr   rndsignmanexpbcsizelgcr   tt2stermr   s                   rY   mpf_erfr   O  st   Ds:e|9Tku9Ul8D	BaxAtAvJ)BtAJ6ua33tQ22e|aNVDG_d2g.qT''	D		B	BHQOA
#"BE1QA
f^!QqSU|q5IAIA	Q $ 
!tHRL"55AB3**rX   c                 4    [        U 5      nUS-  S-  U:  a  gg)Nr   
ףp=
?TF)r   )r   r   rc   s      rY   erfc_check_seriesr   |  s!    q	A!td{TrX   c                 ^   U u  p4pVU(       d6  U [         :X  a  [        $ U [        :X  a  [         $ U [        :X  a  [        $ [
        $ US-   nXe-   nU[        SSU-  5      -  nU=(       d    US:  n	U	(       d  [        X5      (       di  U	(       a%  [        [        [        XS-   [        U   5      X5      $ [        U 5      S-   n
[        [        [        X[        U
S-  S-  5      -   S-   5      X5      $ [        U-  =pSnS[        X5      S-  -  U-	  nSn USU-  S-
  -  U-  U-  nUS:  a  X:  d  U(       d  OUS-  (       a  X-  nOX-  nUnUS-  nM@  X-  [        [!        U5      U5      -  n[#        X* U5      n[%        ['        [)        X U5      U5      U5      n[+        [)        UX5      XU5      nU$ )Nr   r   r   
   r   r      )r   r   r   r   r   r   maxr   r'   r   r   r   intr   r   r*   r2   r   r0   r%   r(   r)   )r   r   r   r   r   r   r   r   magregular_erfrc   r   r   	term_prevr   r   r   ys                     rY   mpf_erfcr     s   Ds:d{9Ul:d{	B
&C#a3-B/#'K+A224G\#5F!GSS1IaKtWQs1a49~(=(BCTOO"}AI	
Xa_!	!b(A	A
1q!b(Q.q5T%Tq5IAIA		Q  
Zb11AQR AB+B/A1!1C0AHrX   c                 \    U =p#SnU(       a  X0-  U-	  U-  nX#U-  -  nUS-  nU(       a  M  U$ Nr   r   rR   )r   r   r   r   r   s        rY   	ei_taylorr     sC    IA	A
cd]q 	!V	Q ! HrX   c                     [         nU =pEU=pgSnU" U5      U" U5      -   S:  aG  XP-  Xq-  -
  U-  U-	  XQ-  Xp-  -   U-  U-	  puXEU-  -  nXgU-  -  nUS-  nU" U5      U" U5      -   S:  a  MG  XF4$ )Nr      r   )r   )	zrezimr   _abssretresimtimr   s	            rY   complex_ei_taylorr     s    DOCOC	A
s)d3i
!
#WSW_q(4/3737?Q2F1MSaxax	Q	 s)d3i
!
#
 8OrX   c                 z    [         U-  nX!-  U -  =pX -   nSnU(       a  XS-  U -  U-	  nXC-  nUS-  nU(       a  M  U$ r   )r   )r   r   oner   r   r   s         rY   ei_asymptoticr     sV    
T/Cka AA	A
SUtO		Q ! HrX   c                 4   [         n[        U-  nX-  X -  -   U-	  nX-  U-  =pgU* U-  U-  =pXF-   n
UnSnU" U5      U" U	5      -   S:  aL  Xv-  X-  -
  U-  U-	  Xx-  X-  -   U-  U-	  pX-  n
X-  nUS-  nX:  a  [        eU" U5      U" U	5      -   S:  a  ML  X4$ )Nr   i  r   )r   r   rP   )r   r   r   r   r   Mxrer   ximr   r   r   r   s                rY   complex_ei_asymptoticr     s    D
T/C	37	t#A""C$4A%%C
)C
C	A
s)d3i
$
&WSW_a'$.#'#'/11Dt0KS

	Q8 s)d3i
$
& 8OrX   Fc                    U(       a  [        U 5      n U u  pEpgU(       a"  U(       d  U [        :X  a  [        $ [        S5      eU(       a  SXVU4nXg-   n	US-   n
X:  nU(       d$  US:  a  XV-  nOXV* -	  nU[	        U
S-  5      S-   :  nU(       aO  X:  a  [
        nO [        [        [        X
5      U
5      U
* 5      n[        U[        X
5      U
5      n[        XX5      nOU
S[	        [        U5      5      -  -  n
[        X
5      n[        X5      [        U
5      -   n[        X* 5      n[        X5      n[!        UUX5      nO9U [        :X  a  ["        nO(U [        :X  a  [        nOU ["        :X  a  [        nO[$        nU(       a  [        U5      nU$ )NzE1(x) for x < 0r   r   V-?r   r   )r%   r   r   r
   r   r   r   r   r   r(   r0   r)   r   r   rN   r1   r   r   r   )r   r   r   e1r   r   r   r   xabsxmagr   can_use_asympxabsintvut1r   s                    rY   mpf_eir     s^   	AJDs	$:K-..
#BvBY	ax*$-#c"U(mb&88My x!CbSI71>2.Ad(A!Ct%%%BA! ;r?2Aa$B!BB*A:5q$YD%ZUa	AJHrX   c           
      |   U(       a  [        U 5      n U u  pEUu  pgpUu  ppU[        :X  aU  U(       a<  [        [        XAU5      5      nU(       d  [        [	        X5      5      nX4$ [        nX4$ [        XAU5      [        4$ U[        :w  a  U(       a  U(       d  [
        [
        4$ US-   nX-   nX-   n[        UU5      nUU:  nU(       d=  [        [        U5      5      [        [        U5      5      -   nU[        US-  5      S-   :  n U(       a  UU:  a  [        [        4nOB[        UU5      n[        UU5      n[        UUU5      u  nn[        UU* 5      [        UU* 5      4n[        U[        U U5      U5      n[!        UU U5      nU(       a  [        UX5      nU$ Uu  pU
(       a$  [#        XU5      [%        U[	        U5      X5      4nU$ [#        XU5      ['        U[	        U5      X5      4nU$  US[        [        [+        U S5      5      5      -  -  n[        UU5      n[        UU5      n[-        UUU5      u  nnU[/        U5      -  n[        UU* 5      [        UU* 5      4nU(       a  [1        [        U 5      U5      nO[1        U U5      n[3        UUX5      nU(       a  [        U5      nU$ ! [(         a     Nf = f)N(   r   r   r   r   )r;   r   r%   r   r/   r   r   r   r   r   r   r   r   r   r:   rJ   r=   r   r'   r   rP   rG   r   rN   r@   rA   )r   r   r   r   abasignamanaexpabcbsignbmanbexpbbcr   r   r   amagbmagzmagr   zabsintr   r   r   vrevimr   s                               rY   mpc_eir     s   	AJDAEEEzq,-AF4-. 4K 4K!3'..Ez4$<	B8D8DtT?D2IMfQi.3vay>1#bh-""44by%Kq"oq"o0c2>S rc*Lrc,BB71b>2.A1b!AAt) H -wq&*d/PPA H  -wq&*d/PPAH% , !Cwq!}%&
&&B
1b/C
1b/C c2.HC;r?CS"|C44A	GAJr"AbM1d A	AJH!  s   BJ. .J. #J. .
J;:J;c                     [        XUS5      $ NT)r   r   r   r   s      rY   mpf_e1r   O      !3%%rX   c                     [        XUS5      $ r   )r   r   s      rY   mpc_e1r   R  r   rX   c           
      	   Uu  pVpxU(       d  U(       aD  U[         :X  a  U S::  a  [        S4$ [        XU5      S4$ U[        :X  a  [         S4$ [        [        4$ U[         :X  a   U S:  a  [	        SU S-
  X#5      S4$ [        S4$ U[        :X  a  [         S4$ [        [        4$ U n	U(       a  SU -
  n US-   n
Xx-   nUS:  a  [
        e[        [        U 5      5      nU S:  =(       a    Un[        U5      nU S:X  d  SU-  U-
  U
* :  aG  U(       a'  [        X5      n[        U[        XS-
  U
5      X#5      nGO[        X5      n[        XX#5      nGOSU
-  U s=:  =(       a    S:*  Os  nU(       dn  [        [        U5      5      n[        [        SUU -
  5      SU
-  5      nU * U-  UU -   [        [        UU -   5      5      -  -   UU-  -
  SU-  S	-  -
  nU
* S
-
  nUU:  nU(       a  [         * X-   -  [#        X5      -  nU nUU-  n[         U
-  nU(       a,  U(       a%  UU-  nUS-  nUU-  U-  U
-	  nU(       a	  U(       a  M%  [        X5      nU(       a  [        U[        XS-
  U
5      U
5      nO[        XU
5      n[        U[%        UU
* 5      X#5      nGOxU S:X  a  [        ['        XU5      5      nGO[U S:  GaN  U SU
-  :  GaD  [        ['        X5      5      nU(       a  U	S-  (       a  [        U5      nO[        U[        XS-
  U
5      U
5      n[#        X5      =nnS/U S-
  -  n[)        SU S-
  5       H  nUUS-
     U-  UU'   M     USSS2   nUS   U
-  n[)        SU S-
  5       H,  nUS-  (       a  UUU   U-  -  nOUUU   U-  -  nUU-  U
-	  nM.     [%        UU
* U
5      n[        U[        X5      5      nU(       a  [        U[        XU
5      U
5      n[+        UU5      n[        U[-        [/        U S-
  5      5      X#5      nO[
        eU(       a  [-        [/        U S-
  5      * 5      nU(       a/  [        [1        U
5      UX#5      nU	S-  (       a  [        U5      nUU4$ [        [        [1        U
5      [        XS-
  U
5      U
5      UX#5      nUU4$ US4$ )z
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

r   Nr   r   ir      d   r   r   )r   r   rL   r   r   NotImplementedErrorr   r   r%   r0   r(   r-   r)   r   ro   r   r   r   r   r   rr   r   r   rK   r/   ) rc   r   r   r   gammar   r   r   r   n_origr   r   nmag	have_imagnegxr   recan_use_asymptotic_seriesximsiztolrr   r   T1facsr   T2ra   r   ims                                    rY   
mpf_expintr  U  s    DsEz6:%$Qc2D88Dyd{":Ezq5(AaC;TAA:%Dyd{":FaC	B8Dcz!!CFDA$I1:DAv4$"$!AK!8R8$DB!At)B %'rEANNN!(VAYBC2a4L!B$'A"T'QqS(3qs8"444qv=QLC#b&C(+c	%$(&8A?:AA!A2AQQqSUrM  !AA{1Qh;R@ A"%LRC0$<B!VC01BUq1R4x)*BA: BRTQ3!;R@QO#A3!A#;D1QqS\qs)a-Q "":DQ2A1ac]q5a1$Aa1$AqSRK # a"b)BWT./BRQ!;R@BAHT!A#Y/;B%%d1Q3iZ Q2BzR[ 2v [ax-LbQSTVZ`B2v4xrX   c                     [        X5      n X -  * U-	  nUS:X  a  S[        U-  SpenOX SpenU(       a$  XS-  XfS-
  -  -  U-	  nXEU-  -  nUS-  nU(       a  M$  [        XA* 5      $ )z&
0 - Ci(x) - (euler+log(x))
1 - Si(x)
r   r   r   r   )r   r   r   )r   r   whichx2r   r   r   s          rY   mpf_ci_si_taylorr    s~    
 	A32BzgrkAaaa
TAsG_r!	T		Q ! 3rX   c                    U S   (       a  U S   U S   -   nOUS   (       a  US   US   -   nUS   (       a  [        WUS   US   -   5      nWS:  d  XB* :  a  [        eUSU-
  -  n[        X5      n[        X5      nXf-  XU-  -
  U-	  nSU-  U-  U-	  nUn	Un
[        U-  nUS:X  a  SS[        U-  SS4u  ppnO	XVXVS4u  ppn[        [	        U	5      [	        U
5      5      S:  a[  XS-
  -  nX-  X-  -
  U-  U-	  X-  X-  -   U-  U-	  pXU-  -  nXU-  -  nUS-  n[        [	        U	5      [	        U
5      5      S:  a  M[  [        X* 5      [        X* 5      4$ )Nr   r   r   r   )r   r  r   r   r   r   )r  r  r   r  r   r   r   z2rez2imr   r   r   r   r   r   fs                   rY   mpc_ci_si_taylorr!    s    
!ueBqEk	AeBqEk	!u#r!uRU{#
Qw#)!!1S5MB
2
C
2
CGCGOb DsF3JD
C
C
2+Cz !1w{Q 9#A ##A 5#A
c#hC
!A
%sGXch&*R/38CH3Dq2H21MSAvAv	Q c#hC
!A
% S!<S#999rX   r   c           	      R   US-   nU u  pVpxSu  pU(       d  U [         :X  a  [        [         4$ U [        :X  a  X 4$ [         n	US:w  aO  U [        :X  a  [	        [        X5      S5      n
U [        :X  a&  [        [	        [        U[        U   5      S5      5      n
X4$ Xx-   nX* :  aK  US:w  a  [        U SU-
  X5      n
US:w  a,  [        U5      n[        U 5      n[        U[        X5      X5      n	X4$ X:  a`  US:w  a;  U(       a  [        [        U[        U   5      5      n
O[        X5      n
[	        U
S5      n
US:w  a  [        [        X5      XU5      n	X4$ U[        U5      -  nUS-
  [         R"                  " US5      :  nU(       dg  US:w  a  [%        ['        XS5      X5      n
US:w  aB  ['        XS5      n	[        U	[        U5      U5      n	[        U	[        [        U 5      U5      X5      n	X4$ [        U 5      n [)        X5      n[*        SU-  -  U-  n[*        U-  nUnUnSnU(       a6  U* nUU-  U-  U-	  nUS-  nUU-  nUU-  U-  U-	  nUS-  nUU-  nU(       a  M6  [-        UU* 5      n[-        UU* 5      n[        UX5      n[        UX5      n[/        X5      u  nnUS:w  a^  [        [1        UU5      [1        UU5      U5      n
[3        [	        [        U5      S5      X5      n
U(       a  [        U
5      n
[%        XU5      n
US:w  a!  [3        [1        UU5      [1        UU5      X5      n	X4$ )z
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.
r   )NNr   r  r   r   )r   r   r   r   r&   r/   r%   r   r$   rM   r   r   r1   r)   r5   r   r   r   r   r  r   r   r   r3   r(   r'   )r   r   r   r  r   r   r   r   r   cisir   r   r   
asymptoticxfxrs1s2r   r   cossins                          rY   	mpf_ci_sir,    s#    
BDsFB:5>!96MA:Dyvd0"5EzYvdL4E'FKLx
&C
SyA:Q$2BA:"A1:DGD-t9Bv	A:VD,s*;<=D&2r"BA:#6Bv
c#h Q"a(JA:)!3T?BA:!!+BYr]B/BWWQZ4d@Bv
A	!B
AbD/b	 B
R-B	B
A	A
BrT!VbL	Q
arT!VbL	Q
a ! 
b2#	B	b2#	B	Q	B	Q	B1!HC zWS"%wsB'7<Yvbz2.7BRs#zWS"%wsB'7C6MrX   c                 L    [        U 5      S:  a  [        e[        XUS5      S   $ )Nr   )r   r
   r,  r   s      rY   mpf_cir.  X  s'    {QQc1%a((rX   c                 "    [        XUS5      S   $ )Nr   )r,  r   s      rY   mpf_sir0  ]  s    Qc1%a((rX   c                    U u  p4U[         :X  a4  [        X1US5      S   n[        U5      S:  a  U[        X5      4$ U[         4$ US-   n[	        X4US5      u  px[        U[        U5      U5      n[        Xx4[        X5      X5      nU$ )Nr   r   )	r   r,  r   r/   r!  r   rM   rA   r@   )	r   r   r   r  r  r#  r   crecims	            rY   mpc_cir4  `  s    FB	U{ra(+B<!t)**E{	BA.HC
#y}b
)C	#WQ^T	7BIrX   c                     U u  p4U[         :X  a  [        X1US5      S   [         4$ US-   n[        X4US5      n [        XU5      $ )Nr   r   )r   r,  r!  rB   )r   r   r   r  r  r   s         rY   mpc_sir6  m  sM    FB	U{"C+A.66	BQ'A1C  rX   c                    US-  nU S:  =(       a    U S-  nUS   US   -   n[        U 5      n US-   U [        U 5      -  -   nUS:  a  X`U-  -  n[        X5      nUS-  U-	  nU (       d  [        U-  =pOX-  [	        U 5      -  U S-
  U-  U -   -	  =pSn
U	(       a$  X-  SU
-  X-   -  -  U-	  n	X-  nU
S-  n
U	(       a  M$  U(       a  U* n[        X* X#5      $ )N2   r   r   r   r   r   )r   r   r   r   rK   r   )rc   r   r   roundingnegater   r   r  r   r   r   s              rY   mpf_besseljnr<    s    BJDU_q1uF
A$qt)CAA	Qx{]	"B
Qw
#gA
Q$2B2AaqsBhl33	A
f"Q$*%",		Q ! B3//rX   c                 0   U S:  =(       a    U S-  n[        U 5      n UnUu  pg[        US   US   -   US   US   -   5      nUSU [        U 5      -  -   [        U5      -   -  nUS:  a  X U-  -  n[        Xb5      n[        Xr5      nUS-  US-  -
  U-	  n	Xg-  US-
  -	  n
U (       d  [        U-  =p[
        =pOE[        XgU 5      u  nnU[        U 5      -  U S-
  U-  U -   -	  =pU[        U 5      -  U S-
  U-  U -   -	  =pSn[        U5      [        U5      -   S:  aV  SU-  UU -   -  nX-  X-  -
  X-  X-  -   pUU-  U-	  nUU-  U-	  nX-  nX-  nUS-  n[        U5      [        U5      -   S:  a  MV  U(       a  U* nU* n[        X* XS5      n[        X* XS5      nUU4$ )Nr   r   r   r   r   r9  )	r   r   r   r   r   r   r<   rK   r   )rc   r   r   r:  r;  origprecr   r   r   r  r  r   r   r   r   r  r  r   ru   s                      rY   mpc_besseljnr?    s   U_q1uFAAHHC
c!fSVmSVCF]
+CB8A;S))D
QwC
3
C
3
CFS!VO$DGa DtO#c 1-B47]1d
Q7747]1d
Q77	A
c(SX

!qD!A#J8ch&38(;SaxD axD 

	Q c(SX

! dd	c5(	5B	c5(	5B8OrX   c                    U u  pEpgUu  ppU(       d  U(       a  [        S5      eU(       a  U	(       d`  U [        :X  d
  U[        :X  a  [        $ U [        :X  a  U[        :X  a  [        $ [        $ U[        :X  a  U [        :X  a  [        $ [        $ [        $ US-   nXg-   nX-   nX-
  n[	        U5      nUS:  aT  US:  a8  [        [        XU5      S5      [        [        XU5      U5      pUS-  nUS:  a  M8  U u  pEpgUu  ppXg-   nX-   nX-
  n[        X5      n[        X5      nSnUS:  a  U* nO	US:  a  U* nU(       a  [        U U5      n [        UU5      n[        X5      n[        X5      n[        UUU5      n[        UU* U-
  X#5      $ )zR
Computes the arithmetic-geometric mean agm(a,b) for
nonnegative mpf values a, b.
zagm of a negative numberr   r   r  r   r   i)r
   r   r   r   r   r&   r   r+   r(   ro   r   r   r6   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	mag_deltaabs_mag_deltamin_magmax_magrc   afbfgs                          rY   mpf_agmrH    s   
 EE677T9T	K9EzK9EzK	B8D8DI	NMrb WQ_R0R, aM b  "#T!"TxxK	 $nG$nG	A|H	2HaOaO	!B	!B"b"AB3q5$,,rX   c                 $    [        [        XU5      $ )zP
Computes the arithmetic-geometric mean agm(1,a) for a nonnegative
mpf value a.
)rH  r   r   r   r   s      rY   mpf_agm1rK    s    
 4#&&rX   c                    [        U 5      (       d  [        U5      (       a  [        [        4$ [        X4;   a  [        [        4$ [	        U 5      U:X  a  [        [        4$ US-   n[        [        U* S-   5      n [        [        XU5      S5      n[        [        XU5      U5      nXgp[        [        U S5      [        US5      /5      S   n[        [        XS5      S5      n	U[        :X  d  [        U	[        XX5      5      (       a  U $ M  )zj
Complex AGM.

TODO:
* check that convergence works as intended
* optimize
* select a nonarbitrary branch
r   r   r   r  )rD   r   rE   r   r;   r&   r   rC   rA   rF   r:   r#   rG   r8   r    r(   )
r   r   r   r   r   epsa1b1r   errs
             rY   mpc_agmrQ    s     Q=++TzA6e|qzQe|	bB
D2#b&
!C
wqR("-gaB',1GAbM71R=9:1=gaB',5=F3(:;;H rX   c                 $    [        [        XU5      $ r   )rQ  r7   rJ  s      rY   mpc_agm1rS  ,  s    7AS))rX   c                 D   U S   (       d;  U [         :X  a  [        [        X5      S5      $ U [        :X  a  [         $ U [        :X  a  U $ U [
        :X  a  [        $ US-   n[        [        [
        X5      U5      n[        XC5      n[        [        U5      XQU5      n[        US5      $ )Nr   r     )r   r&   r/   r   r   r   r   r+   r'   rK  r)   )r   r   r   r   r   r   r  s          rY   
mpf_ellipkrV  /  s    Q4:VD.33:L9HDy 
B 	q%r*AAr
AS)AQrX   c                 $   U u  p4U[         :X  a7  U[        :X  a  [        $ [        U[        5      (       a  [        X1U5      [         4$ US-   n[        [        [        X5      U5      n[        Xe5      n[        [        U5      XqU5      n[        US5      $ )NrU  r  )r   r   rE   r!   r   rV  rF   r8   r7   rS  rH   r/   rC   )	r   r   r   r  r  r   r   r   r  s	            rY   
mpc_ellipkrX  C  s    FB	U{:O"db,e33	B!("-AAF2J-AQrX   c                 J   U u  p4pVU(       dK  U [         :X  a  [        [        X5      S5      $ U [        :X  a  [        $ U [
        :X  a  U $ U [        :X  a  [        eU [        :X  a  [        $ US-   nXV-   nX* :  a  [        [        X5      S5      $ [        US5      U-
  n	[        [        U	5      n
[        U SU-  5      n[        [        X
5      SU-  5      n[        [        X5      U	* 5      n[        [        U 5      n[        U[        U S5      U5      n[        U[        X5      X5      $ )Nr  r   r   r   r   )r   r&   r/   r   r   r   r
   r   r   rV  r'   r(   r   )r   r   r   r   r   r   r   r   r   ru   hKKhKdiffr   r   s                   rY   
mpf_elliper^  P  s	    Ds:VD.33:K9H9Dy	bB
&C
Sy*B//CbA$A1adA	GAM1R4	(Bganqb)EaAy1~r*A1gamT//rX   c                 
   U u  p4U[         :X  a=  U[        :X  a  [         [        4$ [        U[        5      (       a  [	        X1U5      [         4$ US-   n[        U S5      n[        US   US   -   S5      U-
  n[        [        U5      n[        U SU-  5      n	[        [        XSU-  5      SU-  5      n
[        [        XU5      U* 5      n[        [        X5      n[        U[        U S5      U5      n[        U[        XU5      X5      $ )NrU  r   r   r   r   )r   r   r!   r   r^  rG   r   r&   rX  r>   rC   r8   r7   r:   rA   )r   r   r   r  r  r   r   ru   rZ  r[  r\  r]  r   r   s                 rY   
mpc_elliper`  n  s    FB	U{:4= "db,e33	B
!Q-CCF3q6M1"A$A1adA	Kad+QrT	2BgbR(1"-EAy1~r*A1gaB'33rX   )r   )t__doc__operatorr   backendr   r   r   r   r   
libintmathr	   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.   	libelefunr/   r0   r1   r2   r3   r4   r5   r6   libmpcr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   	gammazetarL   rM   rN   	ExceptionrP   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r!  r,  r.  r0  r4  r6  r<  r?  rH  rK  rQ  rS  rV  rX  r^  r`  rR   rX   rY   <module>rj     s     > > 
 
 
 
 
 
 
 
 
 
  
       < <	I 		s$l f!. $ &+Z % %\
	( #u (T #u ?B # & # &  * tl ":> &Q [z # )
 # ) #  # !P '1 0. '1 "H ' 9-v % ' ' 4 % * ' ( '  ' 0< ' 4rX   