ó
    ˆ*£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   ó    ÚR/home/mande/repo/quber/.venv/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   é € Ð:²6¨4˜ ž²6ùs   ‚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ˆ+à�g‰g�kÓ"€GØ# q¨W°R°a¨[¸'À"¸+ÀuÐ&MÑM€Eð  Ñ+ÐØ ‘|ÐØ%×9Ð)9€Là€FØ
�-‰-€Cà€DØ€DØ€DØ€DØ€EØ€EØ€HØ€Hñ Ð.Ô/ÙÐ"Ô#ÙˆÔñ Ð+Ô,ÞÙÐ"Ô#æÙÐ'Ô(ÙÐ Ô!ÙÐ'Ô(ÙÐ Õ!áÐ$Ô%ÙÐ Ô!áÐÔÙÐÔÙÐ Ô!Ùˆ„LÙÐ#Ô$ÞÙÐÔÙÐÔÙÐ$Ô%ÙˆGŒÙÐ'Ô(ä˜[×)‰ˆˆ4Ø�#ˆJ�q˜A‘vÑˆØ�3‹;Øˆ[˜˜a™Ñ ×(Ñ(¨Ô+ÙÐ'¨1¨a°¨)Ñ3Ö4Ø�S‹[Øˆ[˜˜a™Ñ ×(Ñ(¨Ô+ÙÐ3°q¸!¸QÀÀ1°oÑEÖFØ�S‹[Ø�Eˆ]˜1 ™6Ñ"×*Ñ*¨1Ô-ÙÐ7¸!Ñ;Ô<ÙÐ$Ô%ÙÐ"Ô#ÙÐ!Ô"ÙÐ.°!°Q°Ñ7Ô8Ù�ŒLÙÐ1°Q¸°FÑ:Ö;Ø�S‹[Ø�xÐ   a¡Ñ(×0Ñ0°Ô3ÙÐ/°!Ñ3Ô4ÙÐ+Ô,ÙÐ$Ô%ÙÐ+Ô,ÙÐ$Ô%áÐ"Ô#ÙÐ!Ô"ÙÐ-°°A°Ñ6Ô7Ù�ŒLÙÐ0°A°q°6Ñ9Ô:ÙÐ"Ô#ÙÐ!Ô"ÙÐ-°°A°Ñ6Ô7Ù�ŒLÙÐ0°A°q°6Ñ9×:äÐñI *ôL �%‹j€GÜ�%‹j€GÜ˜7 GÓ,ÐØ#Ð$4Ð$5Ð6ÐØ#Ð$4Ð$5Ð6Ðñ Ð#Ô$áÐ&Ô'ÙÐ,Ô-ÞÙÐ<Ô=ÙÐ/Ô0ð —‘ÁDÓIÂD¸q˜X×-Ñ-¨c´3°q³6Ö:ÁDÑIÙBFÓGÂ$¸Q˜VŸ^™^¨C´°Q³Ö8Á$ÑGñHáBFÓGÂ$¸Q˜VŸ^™^¨C´°Q³Ö8Á$ÑGñHó I€Jð —‘ÁDÓIÂD¸q˜X×-Ñ-¨c´3°q³6Ö:ÁDÑIÙBFÓGÂ$¸Q˜VŸ^™^¨C´°Q³Ö8Á$ÑGñHáBFÓGÂ$¸Q˜VŸ^™^¨C´°Q³Ö8Á$ÑGñHàKNÈ%ñPó Q€Gö ÙˆL˜:Ñ%Ô&Ùˆ�wÑÔñ ÐÔÞÙÐ!Ô"ÙÐÔ ÙÐ)Ô*÷ ô
 Ð'Ö(ˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÖ*lÑ(Û(ˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÖ*eÑ(Û(ˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÖ*fÑ(ÜÐ'Ö(ˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÖ*lÑ(Û(ˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÖ*eÑ(Û(ˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÖ*fÑ(æÞÙÐ_Ô`ÙÐ$Ô%ÙÐ$Õ%áÐ@ÔAÙÐ@ÕAæÙÐSÔTÙÐ$Ô%ÙÐ$Õ%áÐ:Ô;ÙÐ:Ô;ãˆAÙÐM×UÑUÐVYÔ[^Ð_`Ó[aÓbÔcÙÐ Ô!ÙÐ Ö!ñ ó
 ˆAÙÐ7×?Ñ?ÀÄSÈÃVÓLÔMÙÐ2×:Ñ:¸3ÄÀAÃÓGÔHÙÐ2×:Ñ:¸3ÄÀAÃÓGÔHÙÐ-×5Ñ5°c¼3¸q»6ÓBÔCÙÐ-×5Ñ5°c¼3¸q»6ÓBÖCò ô Ð'Ö(ˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÖ*lÑ(Û(ˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÖ*eÑ(Û(ˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÖ*fÑ(ÞÙÐ<Õ=áÐ6Ô7ö ÙÐÔÙÐÔÙÐ?Ô@ÙˆOÕáÐÔÙÐ&Ô'ÙˆOÔñ
 ÐÔÙÐmÔnó ˆ‘sÐ,×4Ñ4°S¼#¸a»&ÓAÖB‰TÛˆ‘sÐ,×4Ñ4°S¼#¸a»&ÓAÖB‰TÛˆ‘sÐ-×5Ñ5°c¼3¸q»6ÓBÖC‰TÛˆ‘sÐ-×5Ñ5°c¼3¸q»6ÓBÖC‰TÛˆ‘sÐ/×7Ñ7¸¼SÀ»VÓDÖE‰UÛˆ‘sÐ/×7Ñ7¸¼SÀ»VÓDÖE‰UÛˆ‘sÐ.×6Ñ6°s¼CÀ»FÓCÖD‰XÛˆ‘sÐ.×6Ñ6°s¼CÀ»FÓCÖD‰XæÙÐ3Ô4ÙÐ3Ô4áˆIŒÙˆMÔÙÐ6Ô7ÙˆKÔÙÐ&Ô'ÙˆKÔÙÐ"Ô#ÙˆGŒÙÐÔáÐ'Õ(áÐ3Ô4áˆIŒÙÐ"Ô#ÙˆGŒÙÐÔáÐ#Ô$à�Y‰YÑ:±6Ó:Ó:€FØSÐV[Ñ[Ð_eÑe€Fà€Iä	ˆ&”'“)˜YÔ'ð �9˜UÑ#Ð#Ð#ùò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!   ø€ Ù" 1 a¨°e¸VØ˜(°Vó=ð =rX   z(none))Úsage.libs.mpmath.ext_mainr—   )rt   r¡   r—   ru   rw   rv   rx   s     @@@@@rY   r”   r”   8  s-   ü€ õ
 	>Ø#&Ñ ˆˆ1ˆk˜5÷	=ñ 	=ð ˜Ð Ð 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pþn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  XÚS-   -  [        [!        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  € ØÑ€DˆsÞØ”‹:œe�|Ø”‹9œT�kØŒu‹9œU�lÜˆØ‰8€DÜ	�‰€Bàˆaƒx�A�t˜A‘v‘J Ñ)©B¨t°A«JÓ6ÞÜœu a¨Ó3Ð3äœt Q¨Ó2Ð2àˆeƒ|ä�a˜‹NˆÜ”V˜D ™G“_ d¨2¡gÓ.ˆä�q˜TÓ'Ð'Ø	”�D“	Ñ	˜BÑ	€BäŒH�Q‹OÓ€AØ
‰#�"‰€BØ�E˜1ˆQ€AÞ
Ø‰f˜‰^ Ñ!ˆØ�Q�q‘S˜‘U‰|ˆØˆq�5Ø‰I‰Aà‰IˆAØ	ˆQ‰ˆ÷ ˆ$ð 
�!‰t‰œ¤H¨R£L°"Ó5Ñ5€AÞØˆ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Øˆ!�tˆd�{�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-  =p¼S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X·5      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­  € ØÑ€DˆsÞØ”‹:œd�{Ø”‹9œU�lØ”‹:œd�{ÜˆØ	�‰€BØ
‰&€CàŒ#ˆa��3‘‹-Ñ€BØ—/˜# ™'€KÞÔ+¨A×2Ñ2ÞÜœ4¤¨°©G´\À#Ñ5FÓ!GÈÓSÐSä�1‹I�a‰KˆÜ”tœW Q¬s°1°a±4¸±9«~Ñ(=ÀÑ(BÓCÀTÓOÐOÜ˜"‰}Ð€AØ€IØ	
ŒX�a‹_ Ñ!Ñ	! bÑ(€AØ	€AØ
Ø˜˜1™˜q™Ñ! bÑ(¨QÑ.ˆØˆq‹5�TÓ%®TØØˆq�5Ø‰I‰Aà‰IˆAØˆ	à	ˆQ‰ˆñ ð 
‰”Z¤¨£¨bÓ1Ñ1€AÜ�Q˜˜RÓ €AÜ”œ  B›¨Ó+¨BÓ/€AÜ”˜˜1Ó! 1¨CÓ0€AØ€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   € Ø€I€AØ	€AÞ
Ø‰c�d‰]˜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Ø€O€CØ€O€CØ	€AÙ
ˆs‹)‘d˜3“iÑ
 !Ó
#Ø‘W˜S™W‘_ qÑ(¨4Ñ/°3±7¸3¹7±?ÀQÑ2FÈÑ1MˆSØ�a‰x‰ˆØ�a‰x‰ˆØ	ˆQ‰ˆñ	 ˆs‹)‘d˜3“iÑ
 !Õ
#ð
 ˆ8€OrX   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Ø‰k˜aÑÐ €AØ‰€AØ	€AÞ
Ø‰S�‰U�t‰OˆØ	‰ˆØ	ˆQ‰ˆ÷ ˆ!ð €HrX   c                 ó4  • [         n[        U-  nX-  X -  -   U-	  nX-  U-  =pgU* U-  U-  =p‰XF-   n
UnSnU" U5      U" U	5      -   S:”  aL  Xv-  X˜-  -
  U-  U-	  Xx-  X–-  -   U-  U-	  p—X§-  n
X¹-  nUS-  nXÂ:”  a  [        eU" U5      U" U	5      -   S:”  a  ML  X«4$ )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Ø	‰�3‘7Ñ	˜tÑ#€Aà‘ Ñ"Ð"€CØ�$˜4‘ AÑ%Ð%€CØ
‰)€CØ
€CØ	€AÙ
ˆs‹)‘d˜3“iÑ
 $Ó
&à‘W˜S™W‘_ aÑ'¨$Ñ.°#±'¸#¹'±/À1Ñ1DÀtÑ0KˆSØ‰
ˆØ‰
ˆØ	ˆQ‰ˆØ‹8ÜÐñ ˆs‹)‘d˜3“iÑ
 $Õ
&ð ˆ8€OrX   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[        XÐX5      nOšU
S[	        [        U5      5      -  -  n
[        X
5      n[        Xê5      [        U
5      -   n[        XÚ* 5      n[        XŠ5      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^  € Þ	Ü�A‹JˆØÑ€DˆsÞ	–$Ø”‹:ÜˆKÜÐ-Ó.Ð.Þ
Ø�#˜BˆˆØ‰vˆØ�B‰YˆØ™	ˆÞØ�a‹xØ™*‘à $™-�Ø#¤c¨"¨U©(£m°bÑ&8Ñ8ˆMÞØ‹yÜ‘ä ¤¬x¸«ÀÓ!CÀbÀSÓI�Ü˜œ7 1›>¨2Ó.ˆAÜ˜˜dÓ(‰Aà�!”Cœ˜t›Ó%Ñ%Ñ%ˆBÜ˜“ˆAÜ˜!Ó ¤;¨r£?Ñ2ˆAÜ˜a Ó$ˆBÜ˜Ó!ˆBÜ˜˜B Ó*‰Aà”‹:œ5‘qØ”$‹YœD™Ø”%‹ZœU™ÜˆaÞ	Ü�A‹JˆØ€HrX   c           
      ó|  • U(       a  [        U 5      n U u  pEUu  pgp‰Uu  p«pÍU[        :X  aU  U(       a<  [        [        XAU5      5      nU(       d  [        [	        X5      5      nXï4$ [        nXï4$ [        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  pïU
(       a$  [#        XáU5      [%        U[	        U5      X5      4nU$ [#        XáU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     NÊf = 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§  € Þ	Ü�A‹JˆØ�D€AØÑ€E�ØÑ€E�ØŒEƒzÞÜœ˜q¨Ó,Ó-ˆAÞÜœF 4Ó-Ó.�ð �4ˆKô �Ø�4ˆKä˜! 3Ó'¬Ð.Ð.ØŒEƒzÞž4Üœ$�<ÐØ	�‰€BØ‰8€DØ‰8€DÜˆt�T‹?€DØ˜2‘I€MÞÜ”f˜Q“i“.¤3¤v¨a£y£>Ñ1ˆØ¤# b¨¡h£-°"Ñ"4Ñ4ˆðÞØ�b‹yÜœ%�K‘ä˜q "“o�Ü˜q "“o�Ü0°°c¸2Ó>‘��SÜ   r cÓ*¬L¸¸r¸cÓ,BÐB�Ü˜œ7 1 b›>¨2Ó.ˆAÜ˜˜1˜bÓ!ˆAÞÜ˜A˜tÓ)�ð ˆHð ‘�ÞÜ ¨Ó-¬w°q¼&À»*ÀdÓ/PÐP�Að ˆHô   ¨Ó-¬w°q¼&À»*ÀdÓ/PÐP�AØˆHð% ð, ˆ!ŒC””w˜q !“}Ó%Ó&Ñ
&Ñ&€BÜ
�1�b‹/€CÜ
�1�b‹/€CÜ   c¨2Ó.�H€CˆØŒ;�r‹?Ñ€CÜ�S˜"˜Óœ|¨C°°Ó4Ð4€AÞ	Ü”G˜A“J˜rÓ"‰ä�A�b‹MˆÜ��1�dÓ €AÞ	Ü�A‹JˆØ€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'  [        Xê5      n[        U[        XS-
  U
5      X#5      nGOÓ[        Xê5      n[        XñX#5      nGOºS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%  [        Xê5      nU(       a  [        U[        XS-
  U
5      U
5      nO[        XñU
5      n[        U[%        UU
* 5      X#5      nGOxU S:X  a  [        ['        XâU5      5      nGO[U S:”  GaN  U SU
-  :  GaD  [        ['        Xê5      5      nU(       a  U	S-  (       a  [        U5      nO[        U[        XàS-
  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[        Xê5      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      [        XéS-
  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§   iöÿÿÿr¦   éýÿÿÿé�   é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…  € ð Ñ€DˆsÞÞØ”E‹zà˜“6Ü ˜:Ð%Ü$ Q¨cÓ2°DÐ8Ð8Ø”D‹yÜ˜d�{Ð"äœ�:Ðà”E‹zØ�q“5Ü(¨¨A¨a©C°Ó;¸TÐAÐAä ˜:Ð%Ø”D‹yÜ˜d�{Ð"Üœ�:ÐØ€FÞØˆa‰CˆØ	�‰€BØ‰8€DàˆcƒzÜ!Ð!Ü”C˜“FÓ€DØ�A‘—˜$€IÜ�1‹:€DàˆAƒv��4‘˜$‘ " Ó$ÞÜ˜Ó!ˆAÜ˜œK¨°!©8°RÓ8¸$ÓDŠBä˜Ó!ˆAÜ˜˜tÓ)ŠBð %' r¡E¨A§N£N°¤NÐ!æ(Ü”V˜A“Y“ˆBÜ”C˜˜2˜a™4“L ! B¡$Ó'ˆAØ�"�T‘'˜Q˜q™S¤(¬3¨q°©s«8Ó"4Ñ4Ñ4°q¸±vÑ=ÀÀQÁÈÁÑLˆCØ�#�b‘&ˆCØ(+¨c©	Ð%Þ$Ü�( ¡Ñ&¬8°A«?Ñ:ˆAØˆAØ�!‘ˆAÜ˜2‘ˆAÞžØ�Q‘�Ø�Q‘�Ø�q‘S˜‘U˜r‘M�ö Ÿ˜ô ˜Ó!ˆAÞä˜Aœ{¨1°Q©h¸Ó;¸RÓ@‘ô ˜A "Ó%�Ü˜œL¨¨R¨CÓ0°$Ó<ŠBØ�!‹VÜœ ¨CÓ0Ó1ŠBØ�ŒU�q˜1˜R™4”xÜœ Ó)Ó*ˆBÞØ˜A—:Ü  ›�Bøä˜R¤¨T°Q±3¸Ó!;¸RÓ@�Ü˜Q“OÐ#ˆA�Ø�3˜!˜A™#‘;ˆDÜ˜1˜Q˜q™S–\�Ø˜q ™s™) a™-��Q“ñ "à™˜"˜‘:ˆDØ�Q‘˜2‘ˆAÜ˜1˜a ™c–]�Ø�q—5Ø˜˜a™ 1™Ñ$‘Aà˜˜a™ 1™Ñ$�AØ�q‘S˜R‘K’ñ #ô ˜a "  bÓ)ˆBÜ˜œW TÓ.Ó/ˆBÞÜ˜R¤¨Q¸Ó!;¸RÓ@�Ü˜˜B“ˆAÜ˜œH¤T¨!¨A©#£YÓ/°Ó;‰Bä%Ð%ÞÜ”d˜1˜Q™3“i�ZÓ ˆÞÜœ › Q¨Ó2ˆBØ˜�zÜ˜R“[�ð �2ˆvˆô œ¤¨£¬[¸Àa¹xÈÓ-LÈbÓQÐSTÐVZÓ`ˆBØ�2ˆvˆà�4ˆxˆ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Ø”g˜r‘k Aˆaˆˆaà˜ˆaˆÞ
Ø‰T�A˜‘s‘G‰_˜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  pÍpšnO	XVXVS4u  pÍpšn[        [	        U	5      [	        U
5      5      S:”  a[  XîS-
  -  nX—-  X¨-  -
  U-  U-	  X˜-  X§-  -   U-  U-	  p©XÉU-  -  nXÚU-  -  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Ø�‰e�B�q‘E‰k‰Ø	ˆA�Ø�‰e�B�q‘E‰kˆØ	ˆ!‡uÜ�#�r˜!‘u˜R ™U‘{Ó#ˆØ
ˆQƒw�#˜“)Ü!Ð!Øˆ1ˆS‰5�M€BÜ
�2Ó
€CÜ
�2Ó
€CØ‰G�C‘G‰O˜bÑ €DØˆs‰F�3‰J˜Ñ€DØ
€CØ
€CÜ
�2‰+€CØ�ƒzØ ! 1¤w°¡{°Q¸Ð 9Ñˆ�#™Aà #¨#°AÐ 5Ñˆ�#˜AÜ
Œc�#‹hœ˜C›Ó
! AÓ
%Ø�‰s‰GˆØ‘X˜c™hÑ&¨Ñ*¨RÑ/°3±8¸C¹HÑ3DÀqÑ2HÈ2Ñ1MˆSØ�A‰v‰ˆØ�A‰v‰ˆØ	ˆQ‰ˆô Œc�#‹hœ˜C›Ó
! AÕ
%ô ˜˜SÓ!¤<°°SÓ#9Ð9Ð9rX   r¦   c           	      óR  • US-   nU u  pVpxSu  pšU(       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
Xš4$ 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[        XÔ5      X5      n	Xš4$ 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	Xš4$ 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	Xš4$ [        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      X¤5      n
U(       a  [        U
5      n
[%        X¡U5      n
US:w  a!  [3        [1        UU5      [1        UU5      X5      n	Xš4$ )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ØÑ€DˆsØ�F€BÞØ”‹:Üœ5�>Ð!Ø”‹9Ø�6ˆMÜˆØ�A‹:Ø”D‹yÜœv dÓ0°"Ó5�Ø”E‹zÜœY¤v¨d´LÀÑ4EÓ'FÈÓKÓL�Øˆxˆà
‰&€CØ
ˆSƒyØ�A‹:Ü˜Q  $¡¨Ó2ˆBØ�A‹:Ü˜"“ˆAÜ˜1“:ˆDÜ˜œG DÓ-¨tÓ9ˆBØˆvˆà	‹Ø�A‹:ÞÜœV D¬,°sÑ*;Ó<Ó=‘ä˜DÓ&�Ü˜2˜rÓ"ˆBØ�A‹:Üœ ›¨°#Ó6ˆBØˆvˆà
Œc�#‹h‰ˆð �Q‘œŸš " a›Ñ(€JæØ�A‹:ÜÔ)¨!°Ó3°TÓ?ˆBØ�A‹:Ü! !¨Ó+ˆBÜ˜œY r›]¨BÓ/ˆBÜ˜œW¤W¨Q£Z°Ó4°dÓ@ˆBØˆvˆÜ�‹
€Aä	�!‹€BÜ
�A�b‘D‰/˜bÑ	 €BÜ
�R‰-€BØ	€BØ
€AØ	€AÞ
ØˆBˆØˆr‰T�!‰V�b‰LˆØ	ˆQ‰ˆØ
ˆa‰ˆØˆr‰T�!‰V�b‰LˆØ	ˆQ‰ˆØ
ˆa‰ˆ÷ ˆ!ô 
�b˜2˜#Ó	€BÜ	�b˜2˜#Ó	€BÜ	��QÓ	€BÜ	��QÓ	€BÜ˜1Ó!�H€Cˆð �ƒzÜ”W˜S "Ó%¤w¨s°BÓ'7¸Ó<ˆÜ”Yœv b›z¨2Ó.°Ó7ˆÞÜ˜“ˆBÜ�R˜sÓ#ˆØ�ƒzÜ”W˜S "Ó%¤w¨s°BÓ'7¸ÓCˆØˆ6€MrX   c                 óL   • [        U 5      S:  a  [        e[        XUS5      S   $ )Nr   )r   r
   r,  rü   s      rY   Úmpf_cir.  X  s'   € Ü�ƒ{�QƒÜÐÜ�Q˜c 1Ó% aÑ(Ð(rX   c                 ó"   • [        XUS5      S   $ )Nr   )r,  rü   s      rY   Úmpf_sir0  ]  s   € Ü�Q˜c 1Ó% 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�   € Ø�F€BØ	ŒUƒ{Ü�r  aÓ(¨Ñ+ˆÜ�B‹<˜!ÓØœ˜tÓ)Ð*Ð*Ø”Eˆ{ÐØ	�‰€BÜ ¨¨AÓ.�H€CÜ
�#”y “} bÓ
)€CÜ	�#�œW Q›^¨TÓ	7€BØ€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   € Ø�F€BØ	ŒUƒ{Ü˜" C¨Ó+¨AÑ.´Ð6Ð6Ø	�‰€BÜ˜  QÓ'€AÜ�1˜CÓ Ð 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-  =p‰OX-  [	        U 5      -  U S-
  U-  U -   -	  =p‰Sn
U	(       a$  X—-  SU
-  X -   -  -  U-	  n	X‰-  nU
S-  n
U	(       a  M$  U(       a  U* n[        X†* X#5      $ )Né2   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ý   € ØˆB�J€DØ�‰U�_�q˜1‘u€FØ
ˆA‰$ˆq�‰t‰)€CÜˆA‹€AØ	�‰�Q”x “{‘]Ñ	"€BØ
ˆQƒwØ
�#‰g‰ˆÜ�‹€AØ
ˆQ‰$�2‰€BÞÜ˜2‘ÐˆˆAà‘œ˜a›‘ q¨¡s¨B¡h°¡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¼[
        =pÞOE[        XgU 5      u  nnU[        U 5      -  U S-
  U-  U -   -	  =p¼U[        U 5      -  U S-
  U-  U -   -	  =pÞSn[        U5      [        U5      -   S:”  aV  SU-  UU -   -  nXÉ-  Xê-  -
  Xé-  XÊ-  -   pìU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�_�q˜1‘u€FÜˆA‹€AØ€HØ�H€CÜ
ˆc�!‰f�S˜‘V‰m˜S ™V C¨¡F™]Ó
+€CØˆB�”8˜A“;‘Ñ¤ S£Ñ)Ñ)€DØ
ˆQƒwØ�C‘‰ˆÜ
�3Ó
€CÜ
�3Ó
€CØ�‰F�S˜!‘V‰O Ñ$€DØ‰G˜˜a™Ñ €DÞÜ˜t‘OÐ#ˆÜÐˆˆcä  ¨1Ó-‰ˆˆBØœ4 ›7‘]¨¨1©¨d©
°Q©Ñ7Ð7ˆØœ4 ›7‘]¨¨1©¨d©
°Q©Ñ7Ð7ˆØ	€AÜ
ˆc‹(”S˜“XÑ
 Ó
!Øˆq‰D�!�A‘#‰JˆØ‘8˜c™hÑ&¨©°3±8Ñ(;ˆSØ�a‰x˜DÑ ˆØ�a‰x˜DÑ ˆØ‰
ˆØ‰
ˆØ	ˆQ‰ˆô ˆc‹(”S˜“XÑ
 Õ
!ö ØˆdˆØˆdˆÜ	�c˜5 (Ó	5€BÜ	�c˜5 (Ó	5€BØ�ˆ8€OrX   c                 ó  • U u  pEpgUu  p‰p«U(       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  p‰p«Xg-   nX«-   nXÞ-
  n[        XÞ5      n[        XÞ5      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Ø”E‹zÜ�ÜˆKØ”‹9Ø”E‹zÜ�ÜˆKäˆØ	�‰€BØ‰8€DØ‰8€DØ‘€Iä˜	“N€MØ�rÓØ˜bÓ ÜœW Q¨›_¨RÓ0Üœ  R›¨Ó,ð à˜aÑˆMð ˜bÕ ð "#Ñˆ�TØ!"Ñˆ�TØ‰xˆØ‰xˆØ‘Kˆ	ô �$‹n€GÜ�$‹n€GØ	€Aà�ƒ|ØˆH‰à	�2‹ØˆHˆÞÜ�a˜‹OˆÜ�a˜‹Oˆä	�!‹€BÜ	�!‹€BÜ�"�b˜"Ó€AÜ˜˜B˜3˜q™5 $Ó,Ð,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×Ñœ=¨×+Ñ+Ü”TˆzÐÜ�A�6ÓÜ”eˆ|ÐÜˆqƒz�QƒÜ”eˆ|ÐØ	ˆb‰€BÜ
”D˜2˜#˜b™&Ó
!€CØ
Ü”w˜q RÓ(¨"Ó-ˆÜ”g˜a BÓ'¨Ó,ˆØˆ1ÜœG A b›M¬7°1°R«=Ð9Ó:¸1Ñ=ˆÜ”g˜a BÓ'¨Ó,ˆØ”5‹=œF 3¬°Ó(:×;Ñ;ØˆHñ rX   c                 ó$   • [        [        XU5      $ r™   )rQ  r7   rJ  s      rY   Úmpc_agm1rS  ,  s   € Ü”7˜A SÓ)Ð)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Ž   € ØˆQ�4Ø”‹:ÜœV DÓ.°Ó3Ð3Ø”‹:ÜˆLØ”‹9ØˆHØŒDƒyÜˆð 
�‰€Bô 	”œ˜qÓ% rÓ*€AÜ�‹€AÜ”�r“
˜A SÓ)€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   € Ø�F€BØ	ŒUƒ{Ø”‹:ÜˆOÜ�"”d×ÑÜ˜b¨Ó,¬eÐ3Ð3Ø	�‰€BÜ”œ !Ó(¨"Ó-€AÜ�‹€AÜ”F˜2“J ¨Ó-€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[        [        X¼5      U	* 5      n[        [        U 5      n[        U[        U S5      U5      n[        U[        X¿5      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	  € ð Ñ€DˆsÞØ”‹:ÜœV DÓ.°Ó3Ð3Ø”‹:ÜˆKØ”‹9ØˆHØ”‹9ÜÐØŒDƒyÜˆØ	ˆb‰€BØ
‰&€CØ
ˆSƒyÜœ Ó*¨BÓ/Ð/äˆC�‹�bÑ€AÜ”$˜Ó€AÜ�1�a˜‘dÓ€AÜ	”G˜A“M 1 R¡4Ó	(€BÜ”g˜a“n q bÓ)€EÜ”�aÓ€AÜ�”y  1“~ rÓ*€AÜ�1”g˜a“m TÓ/Ð/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
[        [        X©U5      U* 5      n[        [        X5      n[        U[        U S5      U5      n[        U[        X�U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ó   € Ø�F€BØ	ŒUƒ{Ø”‹:Üœ4�=Ð Ü�"”d×ÑÜ˜b¨Ó,¬eÐ3Ð3Ø	�‰€BÜ
�!�Q‹-€CÜˆC�‰F�3�q‘6‰M˜1Ó Ñ"€AÜ”$˜Ó€AÜ�1�a˜‘dÓ€AÜ	”K  a¨¡dÓ+¨Q¨r©TÓ	2€BÜ”g˜b RÓ(¨1¨"Ó-€EÜ”˜Ó€AÜ�”y  1“~ rÓ*€AÜ�1”g˜a BÓ'¨Ó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   