Ë
    3^(h�  ã                   óÀ  — 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.„Zsy)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y)ÚNoConvergenceN)Ú__name__Ú
__module__Ú__qualname__© ó    úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/mpmath/libmp/libhyper.pyrP   rP   +   s   „ ØrU   rP   c                 óÔ  — | \  }}}}dj                  |«      }d|||d| ||d |fz  }d|v }|dk(  }|xs |}	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«       |r( |d«        |d«        |d«        |d«        |d«       t        |«      D �]ƒ  \  }}ddg||k\     }|dk(  r(||g||k\     j                  |«        |d|||fz  «       Œ>|dk(  r*||g||k\     j                  |«        |d|||||fz  «       Œm|dk(  r_||g||k\     j                  |«        |d|z  «        |d«        |d«        |d«        |d||fz  «        |d«        |d ||fz  «       ŒÑ|dk(  rª||g||k\     j                  |«        |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-j                  |D �cg c]  }d.j                  d/t        |«      «      ‘Œ c}|D �cg c]  }d0j                  d/t        |«      «      ‘Œ c}z   |D �cg c]  }d1j                  d/t        |«      «      ‘Œ c}z   «      }d-j                  |D �cg c]  }d2j                  d/t        |«      «      ‘Œ c}|D �cg c]  }d3j                  d/t        |«      «      ‘Œ c}z   |D �cg c]  }d4j                  d/t        |«      «      ‘Œ c}z   d5gz   «      }|r |d6|z   «        |d7|z   «        |d8«       |r |d9«        |d:«        |d;«       |	�r$t        |«      D ]  } |d<||   ||   fz  «       Œ |D ]#  } |d=j                  d/t        |«      «      «       Œ% |D ]#  } |d>j                  d/t        |«      «      «       Œ% t        |«      D ]  } |d?||   ||   fz  «       Œ |D ]#  } |d@j                  d/t        |«      «      «       Œ% |D ]#  } |dAj                  d/t        |«      «      «       Œ% |r,|r |dB«        |dC«        |dD«       n< |dE«        |dF«       n+|r |dG«        |dC«        |dD«       n |dH«        |dI«       |D ]3  } |dJj                  d/t        |«      «      «        |dC«        |dD«       Œ5 |D ]§  } |dKj                  d/t        |«      «      «        |dLj                  d/t        |«      «      «        |dMj                  d/t        |«      «      «        |dNj                  d/t        |«      «      «        |dOj                  d/t        |«      «      «       Œ© n†t        |«      D ]  } |d<||   ||   fz  «       Œ |D ]#  } |d=j                  d/t        |«      «      «       Œ% |D ]#  } |d>j                  d/t        |«      «      «       Œ% |r	 |dP«       n |dH«       |	r! |dQ«        |dR«        |dS«        |dT«       n |dQ«        |dU«        |dT«        |dV«        |dW«       |D ]#  } |dXj                  d/t        |«      «      «       Œ% |D ]#  } |dYj                  d/t        |«      «      «       Œ% |D ]#  } |dZj                  d/t        |«      «      «       Œ% |D ]#  } |d[j                  d/t        |«      «      «       Œ% |D ]#  } |d\j                  d/t        |«      «      «       Œ% |D ]#  } |d]j                  d/t        |«      «      «       Œ% |D ]#  } |d^j                  d/t        |«      «      «       Œ% |D ]#  } |d_j                  d/t        |«      «      «       Œ% |	ra |d`«        |da«        |db«        |dc«        |dd«        |de«        |df«        |dg«        |dh«        |d«        |di«        |dj«       n0 |d`«        |db«        |dk«        |d«        |di«        |dl«       dmj                  dn„ |
D «       «      }
do|z  |
z   }
i }t        |
t        «       |«       |
||   fS c c}w c c}w c c}w c c}w c c}w c c}w )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   ó&   K  — | ]	  }d |z   –— Œ y­w)z    NrT   )Ú.0Úlines     rV   ú	<genexpr>z$make_hyp_summator.<locals>.<genexpr>+  s   è ø€ Ò:¨4˜ �Ñ:ù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                                    rV   Úmake_hyp_summatorr�   @   s=
  € ð  #Ñ€A€qˆ+�uà�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Š;Ø�4ˆ[˜˜a™Ñ ×(Ñ(¨Ô+ÙÐ'¨1¨a°¨)Ñ3Õ4Ø�SŠ[Ø�4ˆ[˜˜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¸q˜X×-Ñ-¨c´3°q³6Õ:ÒIØBFÖG¸Q˜VŸ^™^¨C´°Q³Õ8ÒGñHàBFÖG¸Q˜VŸ^™^¨C´°Q³Õ8ÒGñHó I€Jð —‘ÀDÖI¸q˜X×-Ñ-¨c´3°q³6Õ:Ò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ÑÔñ ÐÔÙÙÐ!Ô"ÙÐÔ ÙÐ)Ô*ò ô
 Ð'Ó(ÒlˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÕ*lÐlØ(ÒeˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÕ*eÐeØ(ÒfˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÕ*fÐfÜÐ'Ó(ÒlˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÕ*lÐlØ(ÒeˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÕ*eÐeØ(ÒfˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÕ*fÐfáÙÙÐ_Ô`ÙÐ$Ô%ÙÐ$Õ%áÐ@ÔAÙÐ@ÕAáÙÐSÔTÙÐ$Ô%ÙÐ$Õ%áÐ:Ô;ÙÐ:Ô;àò 	"ˆAÙÐM×UÑUÐVYÔ[^Ð_`Ó[aÓbÔcÙÐ Ô!ÙÐ Õ!ð	"ð
 ò 	Dˆ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ñ	Dô Ð'Ó(ÒlˆA©#Ð.TÐX]Ð^_ÑX`ÐbgÐhiÑbjÐWkÑ.kÕ*lÐlØ(ÒeˆA©#Ð.O×.WÑ.WÐX[Ô]`ÐabÓ]cÓ.dÕ*eÐeØ(ÒfˆA©#Ð.P×.XÑ.XÐY\Ô^aÐbcÓ^dÓ.eÕ*fÐfÙÙÐ<Õ=áÐ6Ô7ñ ÙÐÔÙÐÔÙÐ?Ô@ÙˆOÕáÐÔÙÐ&Ô'ÙˆOÔñ
 ÐÔÙÐmÔnð ÒBˆ‘sÐ,×4Ñ4°S¼#¸a»&ÓAÕBÐBØÒBˆ‘sÐ,×4Ñ4°S¼#¸a»&ÓAÕBÐBØÒCˆ‘sÐ-×5Ñ5°c¼3¸q»6ÓBÕCÐCØÒCˆ‘sÐ-×5Ñ5°c¼3¸q»6ÓBÕCÐCØÒEˆ‘sÐ/×7Ñ7¸¼SÀ»VÓDÕEÐEØÒEˆ‘sÐ/×7Ñ7¸¼SÀ»VÓDÕEÐEØÒDˆ‘sÐ.×6Ñ6°s¼CÀ»FÓCÕDÐDØÒDˆ‘sÐ.×6Ñ6°s¼CÀ»FÓCÕDÐDáÙÐ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$   Ë<"eÌ$"e
Í"e
Î"eÎ0"e 
Ï"e%
Ú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“   rq   rs   rr   rt   s          €€€€€rV   Ú_hypsumz"make_hyp_summator.<locals>._hypsum?  s'   ø€ Ù" 1 a¨°e¸VÀQØ�b˜( O°Vó=ð =rU   z(none))Úsage.libs.mpmath.ext_mainr“   )rp   r�   r“   rq   rs   rr   rt   s     @@@@@rV   r�   r�   8  s-   ü€ õ
 	>Ø#&Ñ ˆˆ1ˆk˜5÷	=ð 	=ð ˜Ð Ð rU   c                 óÆ  — | \  }}}}|s3| t         k(  rt         S | t        k(  rt        S | t        k(  rt        S t
        S ||z   }t        j                  }|dkD  r;d|dz
  z  dz    ||d«      kD  r&|rt        t        d||«      S t        t        d||«      S || k  r5t        | 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  }|rŒ.||
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ˆ#ˆs�BÙØ”Š:œ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¨¨sÓ3Ð3äœt Q¨¨cÓ2Ð2àˆtˆe‚|ä�a˜‹NˆÜ”V˜D ™G“_ d¨2¡gÓ.ˆä�q˜!˜T 3Ó'Ð'Ø	”�D“	Ñ	˜BÑ	€BäŒH�Q˜‹OÓ€AØ
ˆA‰#�"‰€BØ�E˜1ˆQ€t€AÙ
Ø�"‰f˜‰^ Ñ!ˆØ�Q�q‘S˜‘U‰|ˆØˆqŠ5Ø�‰I‰Aà�‰IˆAØ	ˆQ‰ˆò ð 
ˆr�!‰t‰œ¤H¨R£L°"Ó5Ñ5€AÙØˆBˆÜ˜˜B˜3  cÓ*Ð*rU   c                 ó2   — t        | «      }|dz  dz  |kD  ryy)Nr¡   ç
×£p=
÷?TF)r   )r§   r˜   r`   s      rV   Úerfc_check_seriesr·   |  s!   € Üˆq‹	€AØˆ!�tˆd�{�TÒØØrU   c                 ó0  — | \  }}}}|s3| 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  }|xs |dk  }	|	st        | |«      sh|	r't        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kD  r||kD  s|sn|dz  r||z  }n||z  }|}|dz  }Œ6||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_erfr`   r²   r³   Ú	term_prevr°   rŽ   r—   Úys                     rV   Úmpf_erfcrÁ   ‚  sÎ  € ØÑ€Dˆ#ˆs�BÙØ”Š:œd�{Ø”Š9œU�lØ”Š:œd�{ÜˆØ	�‰€BØ
ˆS‰&€CàŒ#ˆa��3‘‹-Ñ€BØ’/˜# ™'€KÙÔ+¨A¨rÔ2ÙÜœ4¤¨¨D°©G´\À#Ñ5FÓ!GÈÈsÓSÐSä�1‹I�a‰KˆÜ”tœW Q¨¬s°1°a±4¸±9«~Ñ(=ÀÑ(BÓCÀTÈ3ÓOÐOÜ˜"‰}Ð€AˆØ€IØ	
ŒX�a˜‹_ Ñ!Ñ	! bÑ(€AØ	€AØ
Ø˜˜1™˜q™Ñ! bÑ(¨QÑ.ˆØˆqŠ5�T˜IÒ%©TØØˆqŠ5Ø�‰I‰Aà�‰IˆAØˆ	à	ˆQ‰ˆð ð 
ˆb‰”Z¤¨£¨bÓ1Ñ1€AÜ�Q˜˜˜RÓ €AÜ”œ  ! B›¨Ó+¨BÓ/€AÜ”˜˜1˜bÓ! 1 d¨CÓ0€AØ€HrU   c                 óL   — | x}}d}|r|| z  |z	  |z  }|||z  z  }|dz  }|rŒ|S ©Nr¡   r   rT   )r§   r˜   r²   r°   rŽ   s        rV   Ú	ei_taylorrÄ   °  sG   € Ø€I€AˆØ	€AÙ
Ø�‰c�d‰]˜qÑ ˆØ	ˆQ�!‰V‰ˆØ	ˆQ‰ˆò ð €HrU   c                 óê   — t         }| x}}|x}}d} ||«       ||«      z   dkD  rL|| z  ||z  z
  |z  |z	  ||z  || z  z   |z  |z	  }}|||z  z  }|||z  z  }|dz  } ||«       ||«      z   dkD  rŒL||fS )Nr¡   é   r   )r¦   )	ÚzreÚzimr˜   Ú_absÚsreÚtreÚsimÚtimrŽ   s	            rV   Úcomplex_ei_taylorrÎ   ¹  s­   € Ü€DØ€O€Cˆ#Ø€O€Cˆ#Ø	€AÙ
ˆs‹)‘d˜3“iÑ
 !Ò
#Ø˜‘W˜S ™W‘_ qÑ(¨4Ñ/°3°s±7¸3¸s¹7±?ÀQÑ2FÈÑ1MˆSˆØˆs�a‰x‰ˆØˆs�a‰x‰ˆØ	ˆQ‰ˆñ	 ˆs‹)‘d˜3“iÑ
 !Ó
#ð
 �ˆ8€OrU   c                 ón   — t         |z  }||z  | z  x} }|| z   }d}|r||z  | z  |z	  }||z  }|dz  }|rŒ|S rÃ   )r   )r§   r˜   Úoner°   r²   rŽ   s         rV   Úei_asymptoticrÑ   Å  s^   € Ü
�T‰/€CØ�T‰k˜aÑÐ €AˆØˆa‰€AØ	€AÙ
Øˆq‰S�‰U�t‰OˆØ	ˆQ‰ˆØ	ˆQ‰ˆò ð €HrU   c                 óJ  — t         }t        |z  }||z  | | z  z   |z	  }| |z  |z  x}}| |z  |z  x}}	||z   }
|}d} ||«       ||	«      z   dkD  rQ||z  |	|z  z
  |z  |z	  ||z  |	|z  z   |z  |z	  }	}|
|z  }
||	z  }|dz  }||kD  rt        ‚ ||«       ||	«      z   dkD  rŒQ|
|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‰�3�s‘7Ñ	˜tÑ#€Aà˜‘ Ñ"Ð"€Cˆ#Ø�$˜4‘ AÑ%Ð%€Cˆ#Ø
�‰)€CØ
€CØ	€AÙ
ˆs‹)‘d˜3“iÑ
 $Ò
&à˜‘W˜S ™W‘_ aÑ'¨$Ñ.°#°c±'¸#¸c¹'±/À1Ñ1DÀtÑ0KˆSˆØˆs‰
ˆØˆs‰
ˆØ	ˆQ‰ˆØˆtŠ8ÜÐñ ˆs‹)‘d˜3“iÑ
 $Ó
&ð �ˆ8€OrU   Fc                 óâ  — |rt        | «      } | \  }}}}|r|s| t        k(  rt        S t        d«      ‚|r÷d|||f}||z   }	|dz   }
|	|
kD  }|s%|dk\  r||z  }n|| z	  }|t	        |
dz  «      dz   kD  }|rS|	|
kD  rt
        }n!t        t        t        | |
«      |
«      |
 «      }t        |t        | |
«      |
«      }t        || ||«      }nœ|
dt	        t        |«      «      z  z  }
t        | |
«      }t        ||
«      t        |
«      z   }t        ||
 «      }t        ||
«      }t!        ||||«      }n6| 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€  € Ù	Ü�A‹JˆØÑ€Dˆ#ˆs�BÙ	‘$Ø”Š:ÜˆKÜÐ-Ó.Ð.Ù
Ø�#�s˜BˆˆØ�2‰vˆØ�B‰YˆØ˜r™	ˆÙØ�aŠxØ ™*‘à 3 $™-�Ø#¤c¨"¨U©(£m°bÑ&8Ñ8ˆMÙØ�bŠyÜ‘ä ¤¬x¸¸2«ÀÓ!CÀbÀSÓI�Ü˜œ7 1 b›>¨2Ó.ˆAÜ˜˜1˜d CÓ(‰Aà�!”Cœ˜t›Ó%Ñ%Ñ%ˆBÜ˜˜B“ˆAÜ˜!˜RÓ ¤;¨r£?Ñ2ˆAÜ˜a  Ó$ˆBÜ˜˜bÓ!ˆBÜ˜˜B  cÓ*‰Aà”Š:œ5‘qØ”$ŠYœD™Ø”%ŠZœU™ÜˆaÙ	Ü�A‹JˆØ€HrU   c           
      ó,  — |rt        | «      } | \  }}|\  }}}}	|\  }
}}}|t        k(  rP|r;t        t        |||«      «      }|st        t	        ||«      «      }||fS t        }||fS t        |||«      t        fS |t        k7  r|r|st
        t
        fS |dz   }||	z   }||z   }t        ||«      }||kD  }|s=t        t        |«      «      t        t        |«      «      z   }|t        |dz  «      dz   kD  }	 |rÜ||kD  rt        t        f}nBt        ||«      }t        ||«      }t        |||«      \  }}t        || «      t        || «      f}t        |t        | |«      |«      }t!        || |«      }|rt        |||«      }|S |\  }}|
r&t#        |||«      t%        |t	        |«      ||«      f}|S t#        |||«      t'        |t	        |«      ||«      f}|S 	 |dt        t        t+        | d«      «      «      z  z  }t        ||«      }t        ||«      }t-        |||«      \  }}|t/        |«      z  }t        || «      t        || «      f}|rt1        t        | «      |«      }nt1        | |«      }t3        ||||«      }|rt        |«      }|S # t(        $ r Y ŒÀw xY w)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ô     sÍ  € Ù	Ü�A‹JˆØ�D€A€qØÑ€Eˆ4��sØÑ€Eˆ4��sØŒE‚zÙÜœ˜q $¨Ó,Ó-ˆAÙÜœF 4¨Ó-Ó.�ð �a�4ˆKô �Ø�a�4ˆKä˜!˜T 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 SÓ)�ð ˆHð ‘��1ÙÜ  4¨Ó-¬w°q¼&À»*ÀdÈCÓ/PÐP�Að ˆHô    4¨Ó-¬w°q¼&À»*ÀdÈCÓ/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˜CÓ €AÙ	Ü�A‹JˆØ€Høô! ò Ùðús   Ã3B
J Å>,J Æ+%J Ê	JÊJc                 ó   — t        | ||d«      S ©NT)rá   ©r§   r˜   r¨   s      rV   Úmpf_e1rø   O  ó   € Ü�!�T˜3 Ó%Ð%rU   c                 ó   — t        | ||d«      S rö   )rô   r÷   s      rV   Úmpc_e1rû   R  rù   rU   c           
      ój  — |\  }}}}|sŠ|rB|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kD  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kD  xr |}t        |«      }| dk(  sd|z  |z
  |
 k  rH|r*t        ||
«      }t        |t        ||	dz
  |
«      ||«      }�nŸt        ||
«      }t        ||||«      }�nƒd|
z  | cxk  xr dk  nc }|snt        t        |«      «      }t        t        d|| z
  «      d|
z  «      }|  |z  || z   t        t        || z   «      «      z  z   ||z  z
  d|z  d	z  z
  }|
 d
z
  }||k  }|ršt          |
|
z   z  t#        ||
«      z  }| }||z  }t         |
z  }|r|r||z  }|dz  }||z  |z  |
z	  }|r|rŒt        ||
«      }|rt        |t        ||	dz
  |
«      |
«      }nt        |||
«      }t        |t%        ||
 «      ||«      }�nd| dk(  rt        t'        |||«      «      }�nG| dkD  �r;| d|
z  k  �r2t        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
        ‚|ryt-        t/        | dz
  «       «      }|r+t        t1        |
«      |||«      }|	dz  rt        |«      }||fS 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¢   iöÿÿÿr¡   éýÿÿÿé�   éd   r¹   r    éÿÿÿÿ)r   r   rL   r   r   ÚNotImplementedErrorr   r¦   r%   r0   r(   r-   r)   r   rk   r»   r   r   r   rá   rn   r   r   rK   r/   ) r`   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ˆ#ˆs�BÙÙØ”EŠzà˜’6Ü ˜:Ð%Ü$ Q¨¨cÓ2°DÐ8Ð8Ø”DŠyÜ˜d�{Ð"äœ�:Ðà”EŠzØ�q’5Ü(¨¨A¨a©C°°sÓ;¸TÐAÐAä ˜:Ð%Ø”DŠyÜ˜d�{Ð"Üœ�:ÐØ€FÙØˆa‰CˆØ	�‰€BØ�‰8€Dàˆc‚zÜ!Ð!Ü”C˜“FÓ€DØ�A‘’˜$€IÜ�1‹:€DàˆA‚v��4‘˜$‘ " Ò$ÙÜ˜˜bÓ!ˆAÜ˜œK¨¨6°!©8°RÓ8¸$ÀÓDŠBä˜˜bÓ!ˆAÜ˜˜A˜t SÓ)ŠBð %' r¡E¨A¦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©	Ð%Ù$Ü�(  2¡Ñ&¬8°A°r«?Ñ:ˆAØˆAØ�!‘ˆAÜ˜2‘ˆAÙ™Ø�Q‘�Ø�Q‘�Ø�q‘S˜‘U˜r‘M�ñ šô ˜˜bÓ!ˆAÙä˜Aœ{¨1¨f°Q©h¸Ó;¸RÓ@‘ô ˜A˜q "Ó%�Ü˜œL¨¨R¨CÓ0°$¸Ó<ŠBØ�!ŠVÜœ  d¨CÓ0Ó1ŠBØ�‹U�q˜1˜R™4“xÜœ  bÓ)Ó*ˆBÙØ˜A’:Ü  ›‘Bä˜R¤¨T°1°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¨2Ó.Ó/ˆBÙÜ˜R¤¨Q°¸Ó!;¸RÓ@�Ü˜˜B“ˆAÜ˜œH¤T¨!¨A©#£YÓ/°°sÓ;‰Bä%Ð%ÙÜ”d˜1˜Q™3“i�ZÓ ˆÙÜœ › Q¨¨cÓ2ˆBØ˜ŠzÜ˜R“[�ð �2ˆvˆô œ¤¨£¬[¸¸vÀa¹xÈÓ-LÈbÓQÐSTÐVZÐ\_Ó`ˆBØ�2ˆvˆà�4ˆxˆ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  }|rŒ!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ØˆQ‰3ˆ�2‰€BØ�‚zØ”g˜r‘k Aˆaˆ1‰à�Q˜ˆaˆ1ˆÙ
Øˆr‰T�A�q˜‘s‘G‰_˜rÑ!ˆØ	ˆQ�‰T‰	ˆØ	ˆQ‰ˆò ô ˜˜B˜3ÓÐrU   c                 ó¬  — | d   r| d   | d   z   }n|d   r|d   |d   z   }|d   rt        |d   |d   z   «      }dkD  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kD  ra||dz
  z  }|	|z  |
|z  z
  |z  |z	  |	|z  |
|z  z   |z  |z	  }
}	||	|z  z  }||
|z  z  }|dz  }t        t	        |	«      t	        |
«      «      dkD  rŒat        || «      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Ø�‰e�B�q‘E‰k‰Ø	ˆAŠØ�‰e�B�q‘E‰kˆØ	ˆ!‚uÜ�#�r˜!‘u˜R ™U‘{Ó#ˆØ
ˆQ‚w�#˜˜’)Ü!Ð!Øˆ1ˆS‰5�M€BÜ
�2�rÓ
€CÜ
�2�rÓ
€CØ�‰G�C˜‘G‰O˜bÑ €DØˆs‰F�3‰J˜Ñ€DØ
€CØ
€CÜ
�2‰+€CØ�‚zØ ! 1¤w°¡{°Q¸Ð 9ÑˆˆS�#�s™Aà # S¨#¨s°AÐ 5ÑˆˆS�#�s˜AÜ
Œc�#‹hœ˜C›Ó
! AÒ
%Øˆq�‰s‰GˆØ˜‘X˜c $™hÑ&¨Ñ*¨RÑ/°3°t±8¸CÀ¹HÑ3DÀqÑ2HÈ2Ñ1MˆSˆØˆs�A‰v‰ˆØˆs�A‰v‰ˆØ	ˆQ‰ˆô Œc�#‹hœ˜C›Ó
! AÓ
%ô ˜˜b˜SÓ!¤<°°b°SÓ#9Ð9Ð9rU   r¡   c           	      ó0  — |dz   }| \  }}}}d\  }	}
|s| t         k(  rt        t         fS | t        k(  r| | fS t         }	|dk7  rN| t        k(  rt	        t        ||«      d«      }
| t        k(  r&t        t	        t        |t        |   «      d«      «      }
|	|
fS ||z   }|| k  rM|dk7  rt        | d|z
  ||«      }
|dk7  r.t        |«      }t        | «      }t        |t        ||«      ||«      }	|	|
fS ||kD  r]|dk7  r7|rt        t        |t        |   «      «      }
nt        ||«      }
t	        |
d«      }
|dk7  rt        t        | |«      | ||«      }	|	|
fS |t        |«      z  }|dz
  t!        j"                  |d«      kD  }|sj|dk7  rt%        t'        | |d«      ||«      }
|dk7  rDt'        | |d«      }	t        |	t        |«      |«      }	t        |	t        t        | «      |«      ||«      }	|	|
fS t        | «      } t)        | |«      }t*        d|z  z  |z  }t*        |z  }|}|}d}|r0| }||z  |z  |z	  }|dz  }||z  }||z  |z  |z	  }|dz  }||z  }|rŒ0t-        || «      }t-        || «      }t        || |«      }t        || |«      }t/        | |«      \  }}|dk7  r[t        t1        ||«      t1        ||«      |«      }
t3        t	        t        |«      d«      |
|«      }
|rt        |
«      }
t%        |
||«      }
|dk7  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_sir'  û  s]  € ð 
�‰€BØÑ€Dˆ#ˆs�BØ�F€BˆÙØ”Š:Üœ5�>Ð!Ø”Š9Ø�q�6ˆMÜˆØ�AŠ:Ø”DŠyÜœv d¨CÓ0°"Ó5�Ø”EŠzÜœY¤v¨d´LÀÑ4EÓ'FÈÓKÓL�Ø�Bˆxˆà
ˆb‰&€CØ
ˆbˆS‚yØ�AŠ:Ü˜Q  $¡¨¨cÓ2ˆBØ�AŠ:Ü˜"“ˆAÜ˜1“:ˆDÜ˜œG D¨"Ó-¨t°SÓ9ˆBØ�2ˆvˆà	ˆrŠØ�AŠ:ÙÜœV D¬,°sÑ*;Ó<Ó=‘ä˜D #Ó&�Ü˜2˜rÓ"ˆBØ�AŠ:Üœ  B›¨¨D°#Ó6ˆBØ�2ˆvˆà
Œc�#‹h‰ˆð �Q‘œŸ™ " a›Ñ(€JáØ�AŠ:ÜÔ)¨!¨R°Ó3°T¸3Ó?ˆBØ�AŠ:Ü! ! R¨Ó+ˆBÜ˜œY r›]¨BÓ/ˆBÜ˜œW¤W¨Q£Z°Ó4°d¸CÓ@ˆBØ�2ˆvˆÜ�‹
€Aä	�!�R‹€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˜bÓ!�H€Cˆð �‚zÜ”W˜S "Ó%¤w¨s°BÓ'7¸Ó<ˆÜ”Yœv b›z¨2Ó.°°BÓ7ˆÙÜ˜“ˆBÜ�R˜˜sÓ#ˆØ�‚zÜ”W˜S "Ó%¤w¨s°BÓ'7¸¸sÓCˆØˆrˆ6€MrU   c                 óL   — t        | «      dk  rt        ‚t        | ||d«      d   S )Nr   )r   r
   r'  r÷   s      rV   Úmpf_cir)  X  s)   € Ü�ƒ{�Q‚ÜÐÜ�Q˜˜c 1Ó% aÑ(Ð(rU   c                 ó$   — t        | ||d«      d   S )Nr   )r'  r÷   s      rV   Úmpf_sir+  ]  s   € Ü�Q˜˜c 1Ó% aÑ(Ð(rU   c                 ó  — | \  }}|t         k(  r5t        |||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   r'  r   r/   r  r   rM   rA   r@   )	r—   r˜   r¨   r  r  r  r™   ÚcreÚcims	            rV   Úmpc_cir/  `  s�   € Ø�F€BˆØ	ŒU‚{Ü�r˜4  aÓ(¨Ñ+ˆÜ�B‹<˜!ÒØœ˜t SÓ)Ð*Ð*Ø”Eˆ{ÐØ	�‰€BÜ  B¨¨AÓ.�H€CˆÜ
�#”y “} bÓ
)€CÜ	�#�s�œW Q¨›^¨T°3Ó	7€BØ€IrU   c                 óŒ   — | \  }}|t         k(  rt        |||d«      d   t         fS |dz   }t        |||d«      } t        | ||«      S )Nr   r¢   )r   r'  r  rB   )r—   r˜   r¨   r  r  r™   s         rV   Úmpc_sir1  m  sU   € Ø�F€BˆØ	ŒU‚{Ü˜"˜d C¨Ó+¨AÑ.´Ð6Ð6Ø	�‰€BÜ˜˜R  QÓ'€AÜ�1�d˜CÓ Ð rU   c                 ó†  — |dz  }| dk  xr | 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Œ!|r| }t        || ||«      S )Né2   r   r   r¡   r    r¢   éüÿÿÿ)r¦   r   r   r   rK   r   )r`   r§   r˜   ÚroundingÚnegater½   r™   r  r²   r°   rŽ   s              rV   Úmpf_besseljnr7  •  s  € ØˆB�J€DØ�‰UŠ_�q˜1‘u€FØ
ˆA‰$ˆq�‰t‰)€CÜˆA‹€AØ	�‰�Q”x “{‘]Ñ	"€BØ
ˆQ‚wØ
ˆa�#‰g‰ˆÜ��B‹€AØ
ˆQ‰$�2‰€BÙÜ˜2‘Ðˆ‰Aà�A‘œ˜a›‘ q¨¡s¨B¡h°¡lÑ3Ð3ˆˆAØ	€AÙ
Ø�"‰f˜"˜Q™$  !¡™*Ñ%¨"Ñ,ˆØ	ˆQ‰ˆØ	ˆQ‰ˆò ñ ØˆBˆÜ˜˜B˜3  hÓ/Ð/rU   c                 ó4  — | dk  xr | 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}}nHt        ||| «      \  }}|t        | «      z  | dz
  |z  | z   z	  x}}|t        | «      z  | dz
  |z  | z   z	  x}}d}t        |«      t        |«      z   dkD  r[d|z  || z   z  }||	z  ||
z  z
  ||	z  ||
z  z   }}||z  |z	  }||z  |z	  }||z  }||z  }|dz  }t        |«      t        |«      z   dkD  rŒ[|r| }| }t        || ||«      }t        || ||«      }||fS )Nr   r   r¡   r    r¢   r4  )	r¦   r»   r   r   r   r   r<   rK   r   )r`   r—   r˜   r5  r6  ÚorigprecrÇ   rÈ   r½   r  r  rÊ   rË   rÌ   rÍ   r  r  rŽ   rq   s                      rV   Ú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ÜÐˆ‰cä   c¨1Ó-‰ˆˆBØœ4 ›7‘]¨¨1©¨d©
°Q©Ñ7Ð7ˆˆcØœ4 ›7‘]¨¨1©¨d©
°Q©Ñ7Ð7ˆˆcØ	€AÜ
ˆc‹(”S˜“XÑ
 Ò
!Øˆq‰D�!�A‘#‰JˆØ�t‘8˜c $™hÑ&¨¨D©°3°t±8Ñ(;ˆSˆØ�a‰x˜DÑ ˆØ�a‰x˜DÑ ˆØˆs‰
ˆØˆs‰
ˆØ	ˆQ‰ˆô ˆc‹(”S˜“XÑ
 Ó
!ñ ØˆdˆØˆdˆÜ	�c˜D˜5 (¨HÓ	5€BÜ	�c˜D˜5 (¨HÓ	5€BØ�ˆ8€OrU   c                 óî  — | \  }}}}|\  }}	}
}|s|rt        d«      ‚|r|	sZ| 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kD  r[|dkD  r9t        t        | ||«      d«      t        t        | ||«      |«      }} |dz  }|dkD  rŒ9| \  }}}}|\  }}	}
}||z   }|
|z   }||z
  }t        ||«      }t        ||«      }d}|dk  r| }n|dkD  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(   rk   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_magr`   ÚafÚbfÚgs                          rV   Úmpf_agmrC  Ð  s¿  € ð
 Ñ€Eˆ4��sØÑ€Eˆ4��sÙ‘ÜÐ6Ó7Ð7á‘TØ”Š9˜œTš	ÜˆKØ”Š9Ø”EŠzÜ�ÜˆKØ”Š9Ø”EŠzÜ�ÜˆKäˆØ	�‰€BØ�‰8€DØ�‰8€DØ�t‘€Iä˜	“N€MØ�rÒØ˜bÒ ÜœW Q q¨›_¨RÓ0Üœ  1 R›¨Ó,ð ˆAà˜aÑˆMð ˜bÓ ð "#Ñˆˆt�T˜3Ø!"Ñˆˆt�T˜3Ø�C‰xˆØ�C‰xˆØ˜4‘Kˆ	ô �$�t‹n€GÜ�$�t‹n€GØ	€Aà�‚|ØˆH‰à	�2ŠØˆHˆÙÜ�a˜‹OˆÜ�a˜‹Oˆä	�!�R‹€BÜ	�!�R‹€BÜ�"�b˜"Ó€AÜ˜˜B˜3˜q™5 $¨Ó,Ð,rU   c                 ó&   — t        t        | ||«      S )z\
    Computes the arithmetic-geometric mean agm(1,a) for a nonnegative
    mpf value a.
    )rC  r   ©rä   r˜   r¨   s      rV   Úmpf_agm1rF    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_agmrL    sï   € ô �QÔœ=¨Ô+Ü”TˆzÐÜ�A�q�6ÑÜ”eˆ|ÐÜˆqƒz�Q‚Ü”eˆ|ÐØ	ˆb‰€BÜ
”D˜2˜#˜b™&Ó
!€CØ
Ü”w˜q ! RÓ(¨"Ó-ˆÜ”g˜a  BÓ'¨Ó,ˆØ�2ˆ1ˆÜœG A b›M¬7°1°R«=Ð9Ó:¸1Ñ=ˆÜ”g˜a  BÓ'¨Ó,ˆØ”5Š=œF 3¬°°TÓ(:Ô;ØˆHð rU   c                 ó&   — t        t        | ||«      S r•   )rL  r7   rE  s      rV   Úmpc_agm1rN  ,  s   € Ü”7˜A˜t SÓ)Ð)rU   c                 ó:  — | d   s9| 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'   rF  r)   )r§   r˜   r¨   r™   rä   rÞ   r  s          rV   Ú
mpf_ellipkrQ  /  s–   € ØˆQŠ4Ø”Š:ÜœV D¨#Ó.°Ó3Ð3Ø”Š:ÜˆLØ”Š9ØˆHØŒD‚yÜˆð 
�‰€Bô 	”œ˜q "Ó% rÓ*€AÜ��B‹€AÜ”�r“
˜A˜t SÓ)€AÜ�Q˜ÓÐrU   c                 ó   — | \  }}|t         k(  r2|t        k(  rt        S t        |t        «      rt        |||«      t         fS |dz   }t        t        t        | |«      |«      }t        ||«      }t        t        |«      |||«      }t        |d«      S )NrP  r   )r   r   rE   r!   r   rQ  rF   r8   r7   rN  rH   r/   rC   )	r—   r˜   r¨   r  r  r™   rä   rÞ   r  s	            rV   Ú
mpc_ellipkrS  C  s†   € Ø�F€BˆØ	ŒU‚{Ø”Š:ÜˆOÜ�"”dÔÜ˜b $¨Ó,¬eÐ3Ð3Ø	�‰€BÜ”œ ! RÓ(¨"Ó-€AÜ��B‹€AÜ”F˜2“J  4¨Ó-€AÜ�Q˜ÓÐrU   c                 óH  — | \  }}}}|sH| 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»   rQ  r'   r(   r   )r§   r˜   r¨   r©   rª   r«   r¬   r™   r½   rq   ÚhÚKÚKhÚKdiffr°   rå   s                   rV   Ú
mpf_elliperY  P  s  € ð Ñ€Dˆ#ˆs�BÙØ”Š:ÜœV D¨#Ó.°Ó3Ð3Ø”Š:ÜˆKØ”Š9ØˆHØ”Š9ÜÐØŒD‚yÜˆØ	ˆb‰€BØ
ˆb‰&€CØ
ˆbˆS‚yÜœ  cÓ*¨BÓ/Ð/äˆC�‹�bÑ€AÜ”$˜Ó€AÜ�1�a˜‘dÓ€AÜ	”G˜A˜q“M 1 R¡4Ó	(€BÜ”g˜a “n q bÓ)€EÜ”�aÓ€AÜ�”y  1“~ rÓ*€AÜ�1”g˜a “m T¨3Ó/Ð/rU   c                 ó
  — | \  }}|t         k(  r8|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 )NrP  r   r¡   r    r   )r   r   r!   r   rY  rG   r»   r&   rS  r>   rC   r8   r7   r:   rA   )r—   r˜   r¨   r  r  r™   r½   rq   rU  rV  rW  rX  r°   rå   s                 rV   Ú
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  1 a¨¡dÓ+¨Q¨r©TÓ	2€BÜ”g˜b ! RÓ(¨1¨"Ó-€EÜ”˜˜BÓ€AÜ�”y  1“~ rÓ*€AÜ�1”g˜a  BÓ'¨¨sÓ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  r'  r)  r+  r/  r1  r7  r:  rC  rF  rL  rN  rQ  rS  rY  r[  rT   rU   rV   ú<module>re     s¾  ðñó Û ç >Õ >å ÷
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
õ 
÷÷ õ ÷
÷ ÷ ÷ ÷ ó õ ß <Ñ <ô	�Iô 	ð	òs$ðl ˆfÒò!ð. $ó &+òZð %ó %ò\ò
ò	òð( # uó (ðT # uó ?ðB #ó &ð #ó &ð  *°ó tól ó":ð> &¨Qó [ðz #ó )ð
 #ó )ð #ó ð #ó !ðP '1ó 0ð. '1ó "ðH 'ó 9-ðv %ó 'ð 'ó ð4 %ó *ð 'ó ð( 'ó ð 'ó 0ð< 'ô 4rU   