K idZddlZddlZddlmZmZmZmZmZddl m Z ddl m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm 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/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m-Z-m9Z9ddl:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNdd l mOZOdd lPmQZQmRZRmSZSGd d eTZU d ZVedk(rdZVe fdZWdZXe fdZYdZZdZ[dZ\dZ]e dfdZ^e dfdZ_e fdZ`e fdZae dfdZbd/dZcd/dZde dfd Zee fd!Zfe fd"Zge fd#Zhe fd$Zie fd%Zje fd&Zke fd'Zle fd(Zme fd)Zne fd*Zoe fd+Zpe fd,Zqe fd-Zre fd.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_ZEROMPZ_ONEBACKENDxrangeexec_)gcd)% ComplexResult round_fast round_nearest negative_rndbitcountto_fixed from_man_expfrom_intto_int from_rationalfzerofonefnoneftwofinffninffnanmpf_signmpf_addmpf_absmpf_posmpf_cmpmpf_ltmpf_lempf_gt mpf_min_max mpf_perturbmpf_neg mpf_shiftmpf_submpf_mulmpf_div sqrt_fixedmpf_sqrt mpf_rdiv_int mpf_pow_int to_rational) mpf_pimpf_expmpf_logpi_fixed mpf_cos_sinmpf_cosmpf_sinr+ agm_fixed)mpc_onempc_sub mpc_mul_mpfmpc_mulmpc_negcomplex_int_powmpc_div mpc_add_mpf mpc_sub_mpfmpc_logmpc_addmpc_pos mpc_shift mpc_is_infnanmpc_zerompc_sqrtmpc_abs mpc_mpf_div mpc_squarempc_exp)ifac) mpf_gamma_int mpf_euler euler_fixedc eZdZy) NoConvergenceN)__name__ __module__ __qualname__[/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpmath/libmp/libhyper.pyrPrP+srUrPc |\}}}}dj|}d|||d|||d|fz}d|v}|dk(}|xs|} 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| dt|D]\}}ddg||k\}|dk(r(| |g||k\j|| d|||fz>|dk(r*| |g||k\j|| d|||||fzm|dk(r_||g||k\j|| d|z| d | d| d| d||fz| d| d ||fz|dk(r||g||k\j|| d!|z| d"| d | d#| d | d| d| d$||fz| d| d%||fz| d| d| d&||fz| d| d'||fztt |}t |}t ||}||d}||d}| d(| d)| d*| r| d+| d,d-j| Dcgc]}d.j d/t|c}| Dcgc]}d0j d/t|c}z|Dcgc]}d1j d/t|c}z}d-j|Dcgc]}d2j d/t|c}|Dcgc]}d3j d/t|c}z| Dcgc]}d4j d/t|c}zd5gz}|r | d6|z| d7|z| d8|r| d9| d:| d;| r$t|D]}| d<||||fz|D]#}| d=j d/t|%|D]#}| d>j d/t|%t|D]}| d?||||fz|D]#}| d@j d/t|%|D]#}| dAj d/t|%|r,|r| dB| dC| dDn<| dE| dFn+|r| dG| dC| dDn| dH| dI|D]3}| dJj d/t|| dC| dD5|D]}| dKj d/t|| dLj d/t|| dMj d/t|| dNj d/t|| dOj d/t|nt|D]}| d<||||fz|D]#}| d=j d/t|%|D]#}| d>j d/t|%|r | dPn| dH| r!| dQ| dR| dS| dTn| 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| djn0| d`| db| dk| d| di| dldmjdn| D} do|z| z} i}t| t|| ||fScc}wcc}wcc}wcc}wcc}wcc}w)pz Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). zhypsum_%i_%i_%s_%s_%sNCz$MAX = kwargs.get('maxterms', wp*100)zHIGH = MPZ_ONE<= 0:z ZRE = xm << offsetzelse:z ZRE = xm >> (-offset)zoffset = ye + wpz ZIM = ym << offsetz ZIM = ym >> (-offset)ABZz%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_zxsign, xm, xe, xbc = __rezysign, ym, ye, ybc = __imz %sCRE_%i = xm << offsetz %sCRE_%i = xm >> (-offset)z %sCIM_%i = ym << offsetz %sCIM_%i = ym >> (-offset)zfor 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 * zAINT_##zAP_#zBQ_#zBINT_#zBP_#zAQ_#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')zif 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+1zreturn (a, b), True, magnz magn = a[2]+a[3]zreturn a, False, magn c3&K|] }d|z yw)z NrT).0lines rV z$make_hyp_summator..+s:4 :szBdef %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs): ) joinappend enumerate ValueErrorlenminreplacestrrangerglobals) keypq param_typesztypepstringfnamehave_complex_paramhave_complex_arg have_complexsourceaddaintaratbintbratarealbrealacomplexbcomplexiflagWl_areall_brealcancellable_realnoncancellable_real_numnoncancellable_real_den multiplierdivisork namespaces rVmake_hyp_summatorr@s= #Aq+uggk"G #q!WRa['!"+u&M ME +|%9)9L F --C D D D D E EHH./"# +, "# '( ! '( ! $% ! !L#$   $% G  '([)$4 #JqAv  3;4[a ( ( + '1a)3 4 S[4[a ( ( + 3q!Q1oE F S[E]16 " * *1 - 7!; < $ % " # ! " .!Q7 8 L 1QF: ; S[x a ( 0 0 3 /!3 4 + , $ % + , $ % " # ! " -A6 7 L 0Aq69 : " # ! " -A6 7 L 0Aq69 : I$L%jG%jG7G,#$4$56#$4$56#$&',- <=/0DIqX--c3q6:IBFGQV^^CQ8GHBFGQV^^CQ8GHIJDIqX--c3q6:IBFGQV^^CQ8GHBFGQV^^CQ8GHKN%PQG L: %& w !"  )* '(lA#.TX]^_X`bghibjWk.k*ll(eA#.O.W.WX[]`ab]c.d*ee(fA#.P.X.XY\^abc^d.e*ff'(lA#.TX]^_X`bghibjWk.k*ll(eA#.O.W.WX[]`ab]c.d*ee(fA#.P.X.XY\^abc^d.e*ff _`$%$%@A@AST$%$%:;:; "A MUUVY[^_`[ab c  !  ! "  DA 7??SVL M 2::3AG H 2::3AG H -55c3q6B C -55c3q6B C  D'(lA#.TX]^_X`bghibjWk.k*ll(eA#.O.W.WX[]`ab]c.d*ee(fA#.P.X.XY\^abc^d.e*ff  < = 6 7   ?@ O  &' O mnBs,44S#a&ABB Bs,44S#a&ABB Cs-55c3q6BCC Cs-55c3q6BCC Es/77SVDEE Es/77SVDEE Ds.66sCFCDD Ds.66sCFCDD 34 34 I M 67 K &' K "# G   '( 34 I "# G   #$ YY:6: :FSV[[_e eFI &')Y' 9U# ##EJGGIGGs$<"e $"e "e "e0"e "e% sagec@ddlm|\fd}d|fS)z Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). r)hypsum_internalc ( ||||||| SNrT) coeffszprecwpepsshiftmagnitude_checkkwargsrrqrsrrrts rV_hypsumz"make_hyp_summator.._hypsum?s'"1aeVQb(OV= =rUz(none))sage.libs.mpmath.ext_mainr)rprrrqrsrrrts @@@@@rVrr8s- >#& 1k5 = =  rUc|\}}}}|s3|tk(rtS|tk(rtS|tk(rtSt S||z}t j}|dkDr;d|dz zdz||dkDr&|rttd||Sttd||S|| kr5t|d}tt|dz|dz} t|| ||S|t|zdz} tt|| } | | z| z } | dd}}} |r.| | z| z |z} | d|zdzz}|dzr| |z} n| |z } |dz }|r.| | dzztt!| | z} |r| } t#| | ||S) NrgW?ri90)rrrrrrmathlogr$r&r+r/r)absrr*r2r)xrrndsignmanexpbcsizelgcrtt2stermrs rVmpf_erfrOsD#sB  :e| 9Tk u9Ul 8D B axAtAvJ)BtAJ6 uas3 3tQc2 2 te| aN VDG_d2g .q!T3'' D B B HQOA A#"BE1QtA "f^ !QqSU| q5 IA IA Q  r!tHRL"55A B B3c **rUc2t|}|dzdz|kDryy)Nr ףp= ?TF)r)rrr`s rVerfc_check_seriesr|s!q A!td{T rUc 0|\}}}}|s3|tk(rtS|tk(rtS|tk(rtSt S|dz}||z}|t dd|zz }|xs|dk} | s t||sh| r'ttt||dzt|||St|dz} ttt||t| dzdzzdz||St|zx} } d} dt||dzz|z }d} | d|zdz z|z|z} |dkDr| | kDs| sn|dzr| | z} n| | z } | } |dz }6| |ztt!||z} t#| | |} t%t't)|||||}t+t)|| ||||}|S)Nrrr rr)rrrrrrmaxrr'rr rintrrr*r2rr0r%r(r))rrrrrrrrmag regular_erfr`rr term_prevrrrys rVmpf_erfcrsD#sB  :d{ 9Ul :d{ B S&C#a3-B/#'K+Ar2 4DG\#5F!GsS S 1IaKtWQs1a49~(=(BCT3OO"}AI Xa_ ! !b(A A 1q!b(Q. q5TI%T  q5 IA IA  Q  bZ b11AQR A!B+B/A1b!1dC0A HrUcL|x}}d}|r||z|z |z}|||zz }|dz }|r|SNrrrT)rrrrrs rV ei_taylorrsG IA A cd]q  Q!V  Q  HrUct}|x}}|x}}d}||||zdkDrL||z||zz |z|z ||z||zz|z|z }}|||zz }|||zz }|dz }||||zdkDrL||fS)Nrr)r) zrezimr_abssretresimtimrs rVcomplex_ei_taylorrs DOC#OC# A s)d3i ! #WSW_q(4/3s73s7?Q2F1MS sax sax Q s)d3i ! # 8OrUcnt|z}||z|zx}}||z}d}|r||z|z|z }||z }|dz }|r|Sr)r)rronerrrs rV ei_asymptoticrs^ T/CTka  A aA A qSUtO Q Q  HrUcJt}t|z}||z||zz|z }||z|zx}}| |z|zx}} ||z} |} d} |||| zdkDrQ||z| |zz | z|z ||z| |zz| z|z } }| |z } | | z } | dz } | |kDrt|||| zdkDrQ| | fS)Nrir)rrrP) rrrrrMxrerximrrrrs rVcomplex_ei_asymptoticrs D T/C S3s7 t#A""C#$4A%%C# )C C A s)d3i $ &WSW_a'$.#c'#c'/11Dt0KS s  s  Q t8  s)d3i $ & 8OrUFc|r t|}|\}}}}|r|s|tk(rtStd|rd|||f}||z} |dz} | | kD} | s%|dk\r||z} n|| z } | t | dzdzkD} | rS| | kDrt } n!t tt|| | | } t| t|| | } t| |||} n| dt t|zz } t|| }t|| t| z} t | | }t|| }t!||||} n6|tk(rt"} n&|tk(rt} n|t"k(rt} nt$} |r t| } | S)NzE1(x) for x < 0rrV-?rr)r%rrr rrrrrr(r0r)rrrNr1rrr)rrre1rrrrxabsxmagr can_use_asympxabsintvut1rs rVmpf_eirs AJD#sB $ :K-.. #sB2v BYr ax*3$-#c"U(mb&88M by x2!CbSI71b>2.A1dC(A !Ct %% %BBA!R ;r?2Aa$Bb!BBc*A :5q $YD %ZUa AJ HrUc ,|r t|}|\}}|\}}}} |\} } } } |tk(rP|r;tt|||}|stt ||}||fSt}||fSt|||tfS|tk7r|r| s t t fS|dz}|| z}| | z}t ||}||kD}|s=tt|tt|z}|t|dzdzkD} |r||kDr ttf}nBt||}t||}t|||\}}t|| t|| f}t|t|||}t!|||}|rt|||}|S|\}}| r&t#|||t%|t |||f}|St#|||t'|t |||f}|S |dttt+|dzz }t||}t||}t-|||\}}|t/|z }t|| t|| f}|rt1t||}n t1||}t3||||}|r t|}|S#t($rYwxYw)N(rrrr)r;rr%rr/rrrrrrrrrr:rJr=rr'rrPrGrrNr@rA)rrrrabasignamanaexpabcbsignbmanbexpbbcrrramagbmagzmagrzabsintrrrvrevimrs rVmpc_eirs AJ DAqE4sE4sEz q$,-AF4-.a4Ka4K!T3'. .Ez4$<  B 8D 8D tT?D2IM fQi.3vay>1#bh-""44  by%Kq"oq"o0c2>S rc*Lrc,BB71b>2.A1b!AAtS)H 14-wq&*dC/PPAH 4-wq&*dC/PPAH% ,!Cwq!}% & &&B 1b/C 1b/C c2.HC;r?CS"|C44A GAJr " AbM1dC A AJ H!    s3B J>,J+%J JJct|||dSNT)rrrrs rVmpf_e1rO !T3 %%rUct|||dSr)rrs rVmpc_e1rRrrUc j|\}}}}|s|rB|tk(r|dkrtdfSt|||dfS|tk(rtdfSttfS|tk(r |dkDrt d|dz ||dfStdfS|tk(rtdfSttfS|} |rd|z }|dz} ||z} | dkrt t t|} |dkDxr|} t|}|dk(s d| z| z | krH|r*t|| }t|t|| dz | ||}nt|| }t||||}nd| z|cxkxrdknc}|sntt|}ttd||z d| z}| | z||zt t||zzz|| zz d|zd zz }| d z }||k}|rt | | zzt#|| z}|}||z}t | z}|r|r||z }|dz }||z|z| z }|r|rt|| }|rt|t|| dz | | }n t||| }t|t%|| ||}nd|dk(rtt'|||}nG|dkDr;|d | zkr2tt'|| }|r| dzr't|}nt|t||dz | | }t#|| x}}dg|dz z}t)d|dz D]}||dz |z||<|ddd }|d| z}t)d|dz D]&}|dzr ||||zz}n ||||zz }||z| z }(t%|| | }t|t|| }|rt|t|| | | }t+||}t|t-t/|dz ||}nt | ryt-t/|dz  }|r+tt1| |||}| dzr t|}||fSttt1| t|| dz | | |||}||fS|dfS) 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 rNrrirdrr)rrrLrrNotImplementedErrorrrr%r0r(r-r)rrkrrrrrrnrrrKr/) r`rrrgammarrrrn_origrrnmag have_imagnegxrrecan_use_asymptotic_seriesximsiztolrrrT1facsrT2r^rims rV mpf_expintrUsD#sB  Ez6:%$Qc2D88Dyd{": Ezq5(AaCs;TAA:%Dyd{":  F aC B 8D cz!! CF DA$I 1:DAv4$"$ b!AK6!8R8$DBb!AAtS)B%'rEANN!(VAYBC2a4L!B$'A"T'QqS(3qs8"444qv=QLC#b&C(+c % $(2&8Ar?:AA!A2 AQQqSUrMb!AA{1fQh;R@Aq"%LRC0$ ! 9q6M  A:DyvdC0"5EzYvdL4E'FKLBx b&C bSy A:Q$c2B A:" A1:DGD"-tS9B2v r A:VD,s*;<=D#&2r"B A:BD#6B2v  c#hQ"a(J  A:)!R3T3?B A:!!R+BYr]B/BWWQZ4dC@B2v  A !RB AbD/b B R-B B A A B rT!VbL Q a rT!VbL Q a  b2# B b2# B Q B Q B1b!HC z WS"%wsB'7 < Yvbz2.B 7 B Rs # z WS"%wsB'7s C r6MrUcLt|dkrtt|||ddS)Nr)rr r'rs rVmpf_cir)Xs){Q Qc1 %a ((rUc$t|||ddS)Nr)r'rs rVmpf_sir+]s Qc1 %a ((rUc|\}}|tk(r5t|||dd}t|dkr|t||fS|tfS|dz}t |||d\}}t |t ||}t||ft||||}|S)Nrr) rr'rr/rrrMrAr@) rrrrrrrcrecims rVmpc_cir/`s FB U{ r4a ( + BrCr8r7r:rA)rrrrrrrrqrUrVrWrXrrs rV mpc_elliper[ns FB U{ :4= "d b$,e3 3 B !Q-C CF3q6M1"A$A1adA K1ad+QrT 2B gb!R(1" -EBAy1~r*A 1gaB's 33rU)r)t__doc__operatorrbackendrrrrr libintmathr libmpfr r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r. libelefunr/r0r1r2r3r4r5r6libmpcr7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrK gammazetarLrMrN ExceptionrPrrrrrrrrrrrrrrrr'r)r+r/r1r7r:rCrFrLrNrQrSrYr[rTrUrVres >>           << I  s$l f !.$&+Z %% \    (#u( T#u? B#&#& *tl ":>&Q[z#) #)# #!P'10.'1"H'9-v%''4%*'(' '0<'4rU