
    g                        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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m-Z-m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN dd	l	mOZO dd
lPmQZQmRZRmSZS  G d deT          ZU	 d ZVedk    rd ZVefdZWd ZXefdZYd ZZd Z[d Z\d Z]edfdZ^edfdZ_efdZ`efdZaedfdZbd/dZcd/dZdedfd Zeefd!Zfefd"Zgefd#Zhefd$Ziefd%Zjefd&Zkefd'Zlefd(Zmefd)Znefd*Zoefd+Zpefd,Zqefd-Zrefd.ZsdS )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                       e Zd ZdS )NoConvergenceN)__name__
__module____qualname__     Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/mpmath/libmp/libhyper.pyrP   rP   +   s        DrU   rP   c           	         | \  }}}}d                     |          }d|||d|         ||d         |fz  }d|v }|dk    }|p|}	g }
|
j        }g }g }g }g }g }g }g }g } |d            |d            |d            |d           |	r |d	           |r- |d
            |d            |d            |d           n |d            |d            |d            |d            |d            |d            |d           |r7 |d            |d            |d            |d            |d           t          |          D ]\  }}ddg||k             }|dk    r3||g||k                                 |            |d|||fz             M|dk    r5||g||k                                 |            |d|||||fz             |dk    r}||g||k                                 |            |d|z              |d            |d            |d            |d||fz              |d            |d ||fz             |dk    r||g||k                                 |            |d!|z              |d"            |d            |d#            |d            |d            |d            |d$||fz              |d            |d%||fz              |d            |d            |d&||fz              |d            |d'||fz             t          t	          |          }t	          |          }t          ||          }||d         }||d         } |d(            |d)            |d*           |	r |d+            |d,           d-                     d. |D             d/ |D             z   d0 |D             z             }d-                     d1 |D             d2 |D             z   d3 |D             z   d4gz             }|r |d5|z               |d6|z               |d7           |r |d8            |d9            |d:           |	rt          |          D ]} |d;||         ||         fz             |D ].} |d<                    d=t          |                               /|D ].} |d>                    d=t          |                               /t          |          D ]} |d?||         ||         fz             |D ].} |d@                    d=t          |                               /|D ].} |dA                    d=t          |                               /|r;|r" |dB            |dC            |dD           nQ |dE            |dF           n:|r" |dG            |dC            |dD           n |dH            |dI           |D ]D} |dJ                    d=t          |                                |dC            |dD           E|D ]} |dK                    d=t          |                                |dL                    d=t          |                                |dM                    d=t          |                                |dN                    d=t          |                                |dO                    d=t          |                               nt          |          D ]} |d;||         ||         fz             |D ].} |d<                    d=t          |                               /|D ].} |d>                    d=t          |                               /|r |dP           n |dH           |	r- |dQ            |dR            |dS            |dT           n! |dQ            |dU            |dT            |dV            |dW           |D ].} |dX                    d=t          |                               /|D ].} |dY                    d=t          |                               /|D ].} |dZ                    d=t          |                               /|D ].} |d[                    d=t          |                               /|D ].} |d\                    d=t          |                               /|D ].} |d]                    d=t          |                               /|D ].} |d^                    d=t          |                               /|D ].} |d_                    d=t          |                               /|	r |d`            |da            |db            |dc            |dd            |de            |df            |dg            |dh            |d            |di            |dj           nB |d`            |db            |dk            |d            |di            |dl           dm                     dn |
D                       }
do|z  |
z   }
i }t          |
t                      |           |
||         fS )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 * c                 T    g | ]%}d                      dt          |                    &S )zAINT_##replacestr.0is     rV   
<listcomp>z%make_hyp_summator.<locals>.<listcomp>   .    IIIqX--c3q66::IIIrU   c                 T    g | ]%}d                      dt          |                    &S )zAP_#r`   ra   rd   s     rV   rg   z%make_hyp_summator.<locals>.<listcomp>   ,    GGGQV^^CQ88GGGrU   c                 T    g | ]%}d                      dt          |                    &S )zBQ_#r`   ra   rd   s     rV   rg   z%make_hyp_summator.<locals>.<listcomp>   rj   rU   c                 T    g | ]%}d                      dt          |                    &S )zBINT_#r`   ra   rd   s     rV   rg   z%make_hyp_summator.<locals>.<listcomp>   rh   rU   c                 T    g | ]%}d                      dt          |                    &S )zBP_#r`   ra   rd   s     rV   rg   z%make_hyp_summator.<locals>.<listcomp>   rj   rU   c                 T    g | ]%}d                      dt          |                    &S )zAQ_#r`   ra   rd   s     rV   rg   z%make_hyp_summator.<locals>.<listcomp>   rj   rU   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_#) >> wpr`   z     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       K   | ]	}d |z   V  
dS )z    NrT   )re   lines     rV   	<genexpr>z$make_hyp_summator.<locals>.<genexpr>+  s&      ::4::::::rU   zBdef %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs):
)joinappend	enumerate
ValueErrorlenminrangerb   rc   r   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bcomplexrf   flagWl_areall_brealcancellable_realnoncancellable_real_numnoncancellable_real_den
multiplierdivisork	namespaces                                    rV   make_hyp_summatorr   @   s     #Aq+uggk""G#q!WRaR['!""+u&MME +|%9)9LF
-CDDDDEEHH C.///C"###C C+,,, $"### "'((( !!!'((( !!!!$%%% !!!CCC !!!CLLLC#$$$ )$%%%G'((([)) $ $4#JqAv3;;4[a ((+++C'1a)34444S[[4[a ((+++C3q!Q1oEFFFFS[[E]16"**1---C7!;<<<C$%%%C"###C!"""C.!Q7888CLLLC1QF:;;;;S[[x a(00333C/!3444C+,,,C$%%%C+,,,C$%%%C"###C!"""C-A6777CLLLC0Aq69:::C"###C!"""C-A6777CLLLC0Aq69::::%jjG%jjG7G,,#$4$5$56#$4$5$56 C#$$$C&'''C,--- ><===C/000 IIDIIIGG$GGGHGG$GGGH I IJ IIDIIIGG$GGGHGG$GGGHKN%P Q QG  'L:%&&&Cw C !!"""   C)***  08
 '((llA##.TX]^_X`bghibjWk.k*l*l*l*l(eeA##.O.W.WX[]`ab]c]c.d.d*e*e*e*e(ffA##.P.X.XY\^abc^d^d.e.e*f*f*f*f'((llA##.TX]^_X`bghibjWk.k*l*l*l*l(eeA##.O.W.WX[]`ab]c]c.d.d*e*e*e*e(ffA##.P.X.XY\^abc^d^d.e.e*f*f*f*f 	< B_```$%%%$%%%%@AAA@AAAA <STTT$%%%$%%%%:;;;:;;; 	" 	"ACMUUVY[^_`[a[abbcccC !!!C !!!! 	D 	DAC7??SVVLLMMMC2::3AGGHHHC2::3AGGHHHC-55c3q66BBCCCC-55c3q66BBCCCC	D '((llA##.TX]^_X`bghibjWk.k*l*l*l*l(eeA##.O.W.WX[]`ab]c]c.d.d*e*e*e*e(ffA##.P.X.XY\^abc^d^d.e.e*f*f*f*f 	8C<====C6777  ?@@@O&'''O
 CCmnnn BBss,44S#a&&AABBBBBBss,44S#a&&AABBBBCCss-55c3q66BBCCCCCCss-55c3q66BBCCCCEEss/77SVVDDEEEEEEss/77SVVDDEEEEDDss.66sCFFCCDDDDDDss.66sCFFCCDDDD %34443444IM6777K&'''K"###G'((((3444I"###G#$$$YY::6:::::FSV[[_eeFI	&'))Y''' 9U###rU   sagec                 @    ddl m | \  fd}d|fS )z
        Returns a function that sums a generalized hypergeometric series,
        for given parameter types (integer, rational, real, complex).
        r   )hypsum_internalc                 .     
	| ||||||          S NrT   )coeffszprecwpepsshiftmagnitude_checkkwargsr   r}   r   r~   r   s          rV   _hypsumz"make_hyp_summator.<locals>._hypsum?  s.    "?1aeVQb(OV= = =rU   z(none))sage.libs.mpmath.ext_mainr   )r|   r   r   r}   r   r~   r   s     @@@@@rV   r   r   8  sc    
 	>=====#& 1k5	= 	= 	= 	= 	= 	= 	= 	= 	=   rU   c                 @   | \  }}}}|s=| t           k    rt           S | t          k    rt          S | t          k    rt          S t
          S ||z   }t          j        }|dk    rId|dz
  z  dz    ||d          k    r0|rt          t          d||          S t          t          d||          S || k     rEt          | d          } t          t          |dz             |dz             }	t          | |	||          S |t          |          z   dz   }
t          t          | |
                    }||z  |
z	  }|dd}}}|r-||z  |
z	  |z  }|d|z  dz   z  }|dz  r||z  }n||z  }|dz  }|-||
dz   z  t          t!          |
          |
          z  }|r| }t#          ||
 ||          S )	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                   rV   mpf_erfr   O  s   D#sB ::e|99Tku99Ul8D	BaxxAtAvJ)BBtAJJ66 	3uas333tQc222te||aNNVDG__d2g..q!T3'''	D			B	BHQOOA
A#"BE1QtA
 "f^!QqSU|q5 	IAAIA	Q   
r!tHRLL"555A BB3c***rU   c                 @    t          |           }|dz  dz  |k    rdS dS )Nr   
ףp=
?TF)r   )r   r   ro   s      rV   erfc_check_seriesr   |  s*    q		A!td{Tt5rU   c                    | \  }}}}|s=| t           k    rt          S | t          k    rt           S | t          k    rt          S t
          S |dz   }||z   }|t          dd|z            z  }|p|dk     }	|	st          | |          s|	r4t          t          t          | |dz   t          |                   ||          S t          |           dz   }
t          t          t          | |t          |
dz  dz            z   dz             ||          S t          |z  x}}d}dt          | |          dz  z  |z	  }d}	 |d|z  dz
  z  |z  |z  }|dk    r||k    s|sn|dz  r||z  }n||z  }|}|dz  }8||z  t          t!          |          |          z  }t#          || |          }t%          t'          t)          | | |          |          |          }t+          t)          |||          | ||          }|S )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_erfro   r   r   	term_prevr   r   r   ys                     rV   mpf_erfcr     s)   D#sB ::d{99Ul::d{	B
S&C#a3--B/#'K P+Ar22 P 	T4DG\#5F!G!GsSSS1IIaKtWQs1a49~~(=(BCCT3OOO"}AI	
Xa__!	!b(A	A
1q!b(Q.q55TI%%T%q5 	IAAIA		Q
 
bZb111AQR  A!B++B//A1b!!1dC00AHrU   c                 J    | x}}d}|r|| z  |z	  |z  }|||z  z  }|dz  }||S Nr   r   rT   )r   r   r   r   r   s        rV   	ei_taylorr     sQ    IA	A
 cd]q 	Q!V	Q   HrU   c                    t           }| x}}|x}}d} ||           ||          z   dk    rR|| z  ||z  z
  |z  |z	  ||z  || z  z   |z  |z	  }}|||z  z  }|||z  z  }|dz  } ||           ||          z   dk    R||fS )Nr      r   )r   )	zrezimr   _abssretresimtimr   s	            rV   complex_ei_taylorr     s    DOC#OC#	A
$s))dd3ii
!
#
#WSW_q(4/3s73s7?Q2F1MSsaxsax	Q	 $s))dd3ii
!
#
#
 8OrU   c                 n    t           |z  }||z  | z  x} }|| z   }d}|r||z  | z  |z	  }||z  }|dz  }||S r   )r   )r   r   oner   r   r   s         rV   ei_asymptoticr     sh    
T/CTka AaA	A
 qSUtO	Q	Q   HrU   c                 l   t           }t          |z  }||z  | | z  z   |z	  }| |z  |z  x}}| |z  |z  x}}	||z   }
|}d} ||           ||	          z   dk    rY||z  |	|z  z
  |z  |z	  ||z  |	|z  z   |z  |z	  }	}|
|z  }
||	z  }|dz  }||k    rt           ||           ||	          z   dk    Y|
|fS )Nr   i  r   )r   r   rP   )r   r   r   r   r   Mxrer   ximr   r   r   r   s                rV   complex_ei_asymptoticr     s   D
T/C	S3s7	t#A""C#$4A%%C#
)C
C	A
$s))dd3ii
$
&
&WSW_a'$.#c'#c'/11Dt0KSs
s
	Qt88 $s))dd3ii
$
&
& 8OrU   Fc                    |rt          |           } | \  }}}}|r#|s!| t          k    rt          S t          d          |r8d|||f}||z   }	|dz   }
|	|
k    }|s+|dk    r||z  }n|| z	  }|t	          |
dz            dz   k    }|rm|	|
k    rt
          }n-t          t          t          | |
          |
          |
           }t          |t          | |
          |
          }t          || ||          }n|
dt	          t          |                    z  z  }
t          | |
          }t          ||
          t          |
          z   }t          ||
           }t          ||
          }t!          ||||          }n@| t          k    rt"          }n-| t          k    rt          }n| t"          k    rt          }nt$          }|rt          |          }|S )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                    rV   mpf_eir     s   	 AJJD#sB	 /$ /::K-...
 #sB2vBYr	 	9axx*3$-#c"U(mmb&88M 	+byy x2!C!CbSII71b>>2..A1dC((AA!Ct%%%%BBA!R  ;r??2Aa$$Bb!!BBc**AA::5qq$YYD%ZZUa	 AJJHrU   c           
         |rt          |           } | \  }}|\  }}}}	|\  }
}}}|t          k    rc|rIt          t          |||                    }|st          t	          ||                    }nt          }||fS t          |||          t          fS |t          k    r|r|st
          t
          fS |dz   }||	z   }||z   }t          ||          }||k    }|sRt          t          |                    t          t          |                    z   }|t          |dz            dz   k    }	 |r||k    rt          t          f}nVt          ||          }t          ||          }t          |||          \  }}t          ||           t          ||           f}t          |t          | |          |          }t!          || |          }|rt          |||          }nh|\  }}|
r1t#          |||          t%          |t	          |          ||          f}n0t#          |||          t'          |t	          |          ||          f}|S n# t(          $ r Y nw xY w|dt          t          t+          | d                              z  z  }t          ||          }t          ||          }t-          |||          \  }}|t/          |          z  }t          ||           t          ||           f}|rt1          t          |           |          }nt1          | |          }t3          ||||          }|rt          |          }|S )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                               rV   mpc_eir     sm   	 AJJDAqE4sE4sEzz 	/q$,,--A F4--..a4K!T3''..Ezz 	 4 	 $<	B8D8DtT??D2IM 5fQii..3vayy>>1#bh--""44 	byy%Kq"ooq"oo0c2>>S rc**Lrc,B,BB71b>>2..A1b!!A QAtS))1 Q4--wq&**dC/P/PPAA4--wq&**dC/P/PPAH%	&     !Cwq!}}%%&&
&&B
1b//C
1b//C c2..HC;r??CS"|C444A	 GAJJr""AbMM1dC  A	 AJJHs   *DI 
IIc                 &    t          | ||d          S NT)r   r   r   r   s      rV   mpf_e1r  O      !T3%%%rU   c                 &    t          | ||d          S r  )r   r  s      rV   mpc_e1r  R  r  rU   c           
      H
   |\  }}}}|s|rO|t           k    r"| dk    r	t          dfS t          | ||          dfS |t          k    r	t           dfS t          t          fS |t           k    r&| dk    rt	          d| dz
  ||          dfS t          dfS |t          k    r	t           dfS t          t          fS | }	|rd| z
  } |dz   }
||z   }|dk     rt
          t          t          |                     }| dk    o|}t          |          }| dk    sd|z  |z
  |
 k     r\|r6t          ||
          }t          |t          ||	dz
  |
          ||          }n8t          ||
          }t          ||||          }nd|
z  | cxk     odk    nc }|st          t          |                    }t          t          d|| z
            d|
z            }|  |z  || z   t          t          || z                       z  z   ||z  z
  d|z  d	z  z
  }|
 d
z
  }||k     }|rt            |
|
z   z  t#          ||
          z  }| }||z  }t           |
z  }|r|r||z  }|dz  }||z  |z  |
z	  }|r|t          ||
          }|r$t          |t          ||	dz
  |
          |
          }nt          |||
          }t          |t%          ||
           ||          }n| dk    r t          t'          |||                    }n| dk    r| d|
z  k     rt          t'          ||
                    }|r|	dz  rt          |          }n#t          |t          || dz
  |
          |
          }t#          ||
          x}}dg| dz
  z  }t)          d| dz
            D ]}||dz
           |z  ||<   |ddd         }|d         |
z  }t)          d| dz
            D ],}|dz  r|||         |z  z  }n|||         |z  z  }||z  |
z	  }-t%          ||
 |
          }t          |t          ||
                    }|r t          |t          ||	|
          |
          }t+          ||          }t          |t-          t/          | dz
                      ||          }nt
          |rt-          t/          | dz
                       }|r4t          t1          |
          |||          }|	dz  rt          |          }n@t          t          t1          |
          t          ||	dz
  |
          |
          |||          }||fS |dfS )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   ry   r   r   r   r   r   rz   r   r   rK   r/   ) ro   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   T2r^   r   ims                                    rV   
mpf_expintr  U  s    D#sB  	Ezz66:%$Qc22D88Dyyd{":Ezzq55(AaCs;;TAA:%Dyyd{":F aC	B8Dczz!!CFFDA$I1::DAvv4$"$$ 	*b!!AK6!8R88$DDBBb!!AAtS))BB %'rEANNNNNNNN!( 	2VAYYBC2a4LL!B$''A"T'QqS(3qs88"4"444qv=QLC#b&C(+c	%$ -	&(2&8Ar??:AA!A2A " "QQqSUrM  " " b!!A &A{1fQh;;R@@ Aq"%%LRC00$<<BB!VVdC0011BBUUq1R4xxb))**B AA: % BRT1Q3!;!;R@@QOO#A3!A#;D1QqS\\ ( (qs)a-Q":DQ2A1ac]]    q5 %a1$AAa1$AqSRKa"b))BWT2..//B ARQ!;!;R@@BAHT!A#YY//s;;BB%% 
d1Q3iiZ   	aQc22Bz !R[[[vax-L-LbQQSTVZ\_``B2v4xrU   c                     t          | |          } | | z   |z	  }|dk    rdt          |z  d}}}n| | d}}}|r ||z  ||dz
  z  z  |z	  }|||z  z  }|dz  }| t          ||           S )z2
    0 - Ci(x) - (euler+log(x))
    1 - Si(x)
    r   r   r   r   )r   r   r   )r   r   whichx2r   r   r   s          rV   mpf_ci_si_taylorr!    s    
 	BAQ32BzzgrkAa1Qa1
 rTAqsG_r!	QT		Q   B3rU   c                 H   | d         r| d         | d         z   }n|d         r|d         |d         z   }|d         rt          ||d         |d         z             }|dk    s|| k     rt          |d|z
  z  }t          | |          }t          ||          }||z  ||z  z
  |z	  }d|z  |z  |z	  }|}	|}
t          |z  }|dk    rddt          |z  ddf\  }}}	}
}n||||df\  }}}	}
}t          t	          |	          t	          |
                    dk    rm||dz
  z  }|	|z  |
|z  z
  |z  |z	  |	|z  |
|z  z   |z  |z	  }
}	||	|z  z  }||
|z  z  }|dz  }t          t	          |	          t	          |
                    dk    mt          ||           t          ||           fS )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                   rV   mpc_ci_si_taylorr'    s    
!u eBqEk	A eBqEk	!u $#r!uRU{##
Qww#))!!1S5MB
2r

C
2r

CGCGOb DsF3JD
C
C
2+Czz !1w{Q 9S#sAA #S#sA 5S#sA
c#hhC
!
!A
%
%qsGXc$h&*R/3t8CH3Dq2H21MSsAvsAv	Q c#hhC
!
!A
%
% bS!!<bS#9#999rU   r   c           	         |dz   }| \  }}}}d\  }	}
|s| t           k    rt          t           fS | t          k    r| | fS t           }	|dk    rj| t          k    rt	          t          ||          d          }
| t          k    r6t          t	          t          |t          |                   d                    }
|	|
fS ||z   }|| k     rc|dk    rt          | d|z
  ||          }
|dk    r>t          |          }t          |           }t          |t          ||          ||          }	|	|
fS ||k    r{|dk    rK|r)t          t          |t          |                             }
nt          ||          }
t	          |
d          }
|dk    r t          t          | |          | ||          }	|	|
fS |t          |          z  }|dz
  t!          j        |d          k    }|s|dk    r t%          t'          | |d          ||          }
|dk    r\t'          | |d          }	t          |	t          |          |          }	t          |	t          t          |           |          ||          }	|	|
fS t          |           } t)          | |          }t*          d|z  z  |z  }t*          |z  }|}|}d}|r/| }||z  |z  |z	  }|dz  }||z  }||z  |z  |z	  }|dz  }||z  }|/t-          ||           }t-          ||           }t          || |          }t          || |          }t/          | |          \  }}|dk    r{t          t1          ||          t1          ||          |          }
t3          t	          t          |          d          |
|          }
|rt          |
          }
t%          |
||          }
|dk    r.t3          t1          ||          t1          ||          ||          }	|	|
fS )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                          rV   	mpf_ci_sir2    s    
BD#sBFB ::5>!99q6MA::DyyvdC00"55EzzYvdL4E'F'FKKLLBx
b&C
bSyyA::Q$c22BA::"A1::DGD"--tS99B2v	rA:: 'VD,s*;<<==D#&&2r""BA::BD#66B2v
c#hh Q"a(J A::)!R33T3??BA::!!R++BYr]]B//BWWQZZ44dC@@B2v

A	!R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1b!!HC zzWS"%%wsB'7'7<<Yvbzz2..B77 	BRs##zzWS"%%wsB'7'7sCCr6MrU   c                 f    t          |           dk     rt          t          | ||d          d         S )Nr   )r   r
   r2  r  s      rV   mpf_cir4  X  s0    {{QQc1%%a((rU   c                 2    t          | ||d          d         S )Nr   )r2  r  s      rV   mpf_sir6  ]  s    Qc1%%a((rU   c                 f   | \  }}|t           k    rFt          |||d          d         }t          |          dk     r|t          ||          fS |t           fS |dz   }t	          |||d          \  }}t          |t          |          |          }t          ||ft          | |          ||          }|S )Nr   r   )	r   r2  r   r/   r'  r   rM   rA   r@   )	r   r   r   r  r  r)  r   crecims	            rV   mpc_cir:  `  s    FB	U{{r4a((+B<<!tS))**E{	BBA..HC
#y}}b
)
)C	#sWQ^^T3	7	7BIrU   c                     | \  }}|t           k    rt          |||d          d         t           fS |dz   }t          |||d          } t          | ||          S )Nr   r   )r   r2  r'  rB   )r   r   r   r  r  r   s         rV   mpc_sir<  m  s`    FB	U{{"dC++A.66	BRQ''A1dC   rU   c                    |dz  }| dk     o| dz  }|d         |d         z   }t          |           } |dz   | t          |           z  z   }|dk     r|| |z  z  }t          ||          }|dz  |z	  }| st          |z  x}}	n#|| z  t	          |           z  | dz
  |z  | z   z	  x}}	d}
|	r |	|z  d|
z  |
| z   z  z  |z	  }	||	z  }|
dz  }
|	 |r| }t          || ||          S )N2   r   r   r   r   r   )r   r   r   r   rK   r   )ro   r   r   roundingnegater   r   r   r   r   r   s              rV   mpf_besseljnrB    s0   BJDU_q1uF
A$qt)CAA	Qx{{]	"B
Qww
a#gBA
Q$2B 42AAAaqsBhl33A	A
 "f"Q$!*%",	Q	Q    BB3h///rU   c                    | dk     o| dz  }t          |           } |}|\  }}t          |d         |d         z   |d         |d         z             }|d| t          |           z  z   t          |          z   z  }|dk     r|| |z  z  }t          ||          }t          ||          }|dz  |dz  z
  |z	  }	||z  |dz
  z	  }
| st          |z  x}}t
          x}}nTt          |||           \  }}|t          |           z  | dz
  |z  | z   z	  x}}|t          |           z  | dz
  |z  | z   z	  x}}d}t          |          t          |          z   dk    rcd|z  || z   z  }||	z  ||
z  z
  ||	z  ||
z  z   }}||z  |z	  }||z  |z	  }||z  }||z  }|dz  }t          |          t          |          z   dk    c|r| }| }t          || ||          }t          || ||          }||fS )Nr   r   r   r   r   r?  )	r   r   r   r   r   r   r<   rK   r   )ro   r   r   r@  rA  origprecr   r   r   r$  r%  r   r   r   r   r  r  r   r}   s                      rV   mpc_besseljnrE    sI   U_q1uFAAHHC
c!fSVmSVCF]
+
+CB8A;;S))D
QwwC
3

C
3

CFS!VO$DGa D 8tO#ccc c1--B477]1d
Q77c477]1d
Q77c	A
c((SXX

!
!qD!A#Jt8c$h&D3t8(;SaxD axD s
s
	Q c((SXX

!
!  dd	cD5(H	5	5B	cD5(H	5	5B8OrU   c                    | \  }}}}|\  }}	}
}|s|rt          d          |r|	sl| t          k    s|t          k    rt          S | t          k    r|t          k    rt          S t          S |t          k    r| t          k    rt          S t          S t          S |dz   }||z   }|
|z   }||z
  }t	          |          }|dk    rl|dk    rIt          t          | ||          d          t          t          | ||          |          }} |dz  }|dk    I| \  }}}}|\  }}	}
}||z   }|
|z   }||z
  }t          ||          }t          ||          }d}|dk     r| }n	|dk    r| }|r t          | |          } t          ||          }t          | |          }t          ||          }t          |||          }t          || |z
  ||          S )z^
    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(   ry   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_magro   afbfgs                          rV   mpf_agmrN    s   
 E4sE4s 8 86777 T 99T		K99EzzK99EzzK	B8D8DtI	NNMrb  WQq__R001R,, AaM b   "#tT3!"tT3CxCx4K	 $tnnG$tnnG	A||H	2H aOOaOO	!RB	!RB"b"AB3q5$,,,rU   c                 0    t          t          | ||          S )z\
    Computes the arithmetic-geometric mean agm(1,a) for a nonnegative
    mpf value a.
    )rN  r   r   r   r   s      rV   mpf_agm1rQ    s    
 4D#&&&rU   c                    t          |           st          |          rt          t          fS t          | |fv rt          t          fS t	          |           |k    rt          t          fS |dz   }t          t          | dz             }	 t          t          | ||          d          }t          t          | ||          |          }||}} t          t          | d          t          |d          g          d         }t          t          | |d          d          }	|t          k    st          |	t          ||                    r| S )z
    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
             rV   mpc_agmrW    s.    Q =++ TzAq6e|qzzQe|	bB
D2#b&
!
!Cwq!R(("--gaB'',,21GAbMM71R==9::1=gaB'',,5==F3T(:(:;;=HrU   c                 0    t          t          | ||          S r   )rW  r7   rP  s      rV   mpc_agm1rY  ,  s    7AtS)))rU   c                    | d         sH| t           k    rt          t          ||          d          S | t          k    rt           S | t          k    r| S | t
          k    rt          S |dz   }t          t          t
          | |          |          }t          ||          }t          t          |          |||          }t          |d          S )Nr   r     )r   r&   r/   r   r   r   r   r+   r'   rQ  r)   )r   r   r   r   r   r   r  s          rV   
mpf_ellipkr\  /  s    Q4 ::VD#..333::L99HDyy 
B 	q"%%r**ABAr

AtS))AQrU   c                 p   | \  }}|t           k    r?|t          k    rt          S t          |t                    rt          |||          t           fS |dz   }t          t          t          | |          |          }t          ||          }t          t          |          |||          }t          |d          S )Nr[  r  )r   r   rE   r!   r   r\  rF   r8   r7   rY  rH   r/   rC   )	r   r   r   r  r  r   r   r   r  s	            rV   
mpc_ellipkr^  C  s    FB	U{{::O"d 	4b$,,e33	B!R(("--ABAF2JJ4--AQrU   c                    | \  }}}}|sZ| t           k    rt          t          ||          d          S | t          k    rt          S | t
          k    r| S | t          k    rt          | t          k    rt          S |dz   }||z   }|| k     rt          t          ||          d          S t          |d          |z
  }	t          t          |	          }
t          | d|z            }t          t          | |
          d|z            }t          t          ||          |	           }t          t          |           }t          |t          | d          |          }t          |t          ||          ||          S )Nr  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}   hKKhKdiffr   r   s                   rV   
mpf_elliperd  P  sY    D#sB  ::VD#..333::K99H99Dyy	bB
b&C
bSyyc**B///CbA$A1adA	GAqMM1R4	(	(Bgannqb))EaAy1~~r**A1gammT3///rU   c                    | \  }}|t           k    rF|t          k    rt           t          fS t          |t                    rt	          |||          t           fS |dz   }t          | d          }t          |d         |d         z   d          |z
  }t          t          |          }t          | d|z            }	t          t          | |d|z            d|z            }
t          t          |
|	|          |           }t          t          | |          }t          |t          | d          |          }t          |t          |	||          ||          S )Nr[  r   r   r   r   )r   r   r!   r   rd  rG   r   r&   r^  r>   rC   r8   r7   r:   rA   )r   r   r   r  r  r   r   r}   r`  ra  rb  rc  r   r   s                 rV   
mpc_elliperf  n  s2   FB	U{{::4= "d 	4b$,,e33	B
!Q--CCF3q6M1"A$A1adA	K1ad++QrT	2	2Bgb!R((1"--EBAy1~~r**A1gaB''s333rU   )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'  r2  r4  r6  r:  r<  rB  rE  rN  rQ  rW  rY  r\  r^  rd  rf  rT   rU   rV   <module>rp     s{      > > > > > > > > > > > > > >      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                     
                                                  < < < < < < < < < <	 	 	 	 	I 	 	 		s$ s$ s$l f! ! !. $ &+ &+ &+ &+Z   % % % % %\  
 
 
	 	 	  ( #u ( ( ( (T #u ? ? ? ?B # & & & & # & & & &  * t t t tl       ": : : :> &Q [ [ [ [z # ) ) ) )
 # ) ) ) ) #     # ! ! ! !P '1 0 0 0 0. '1 " " " "H ' 9- 9- 9- 9-v % ' ' ' ' '    4 % * * * * '    ( '     ' 0 0 0 0< ' 4 4 4 4 4 4rU   