K i-dZddlZddlZddlmZddlmZmZmZmZm Z ddl m Z m Z m Z mZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSdd lTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZne>d Zoe>d Zpe>d Zqe>d Zr e>dZse>dZte>dZue?esZve?erZwe?epZxe?eqZye?eoZze?etZ{e?euZ|dZ} iZ~e!dZe!dZdZee}Zd>dZd>dZdZ dZdZefdZefdZefdZefdZ iZdZdZiZefd Zedfd!Zedd"fd#Zefd$Zefd%ZdZd&Zgagagad'Zd(Zd)Zd*Zd+Zed,ksJd-Zd.ZiZiZeedzDcgc]}e!e |c}Zd/Zd0Zd1Zd2Zd3Zd4Zd?d5Zd?d6Zd@d7Zd@d8Zd@d9Zd@d:Zd@d;Zd@d<Zefd=Zycc}w)Aao ----------------------------------------------------------------------- This module implements gamma- and zeta-related functions: * Bernoulli numbers * Factorials * The gamma function * Polygamma functions * Harmonic numbers * The Riemann zeta function * Constants related to these functions ----------------------------------------------------------------------- N)xrange)MPZMPZ_ZEROMPZ_ONE MPZ_THREEgmpy) list_primesifacifac2moebius)- round_floor round_ceiling round_downround_up round_nearest round_fastlshift sqrt_fixed isqrt_fastfzerofonefnonefhalfftwofinffninffnanfrom_intto_intto_fixed from_man_exp from_rationalmpf_posmpf_negmpf_absmpf_addmpf_submpf_mul mpf_mul_intmpf_divmpf_sqrt mpf_pow_int mpf_rdiv_int mpf_perturbmpf_lempf_ltmpf_gt mpf_shift negative_rndreciprocal_rndbitcountto_float mpf_floormpf_sign ComplexResult) constant_memodef_mpf_constantmpf_pipi_fixed ln2_fixed log_int_fixedmpf_ln2mpf_expmpf_logmpf_powmpf_cosh mpf_cos_sin mpf_cosh_sinhmpf_cos_sin_pi mpf_cos_pi mpf_sin_piln_sqrt2pi_fixedmpf_ln_sqrt2pi sqrtpi_fixed mpf_sqrtpi cos_sin_fixed exp_fixed)mpc_zerompc_onempc_halfmpc_twompc_abs mpc_shiftmpc_posmpc_negmpc_addmpc_submpc_mulmpc_div mpc_add_mpf mpc_mul_mpf mpc_div_mpf mpc_mpf_div mpc_mul_int mpc_pow_intmpc_logmpc_expmpc_pow mpc_cos_pi mpc_sin_pimpc_reciprocal mpc_square mpc_sub_mpfc|dz}t|zx}}d\}}}|rd|d|dzzd|zdz zz}|dd|zz d|dzzzdzz}|d|dz zzd |dzzd |zz dzz|dzd|zdz zz}||z }|dz }|rd|d z S) N)rrr r(r)precaonestns \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpmath/libmp/gammazeta.py catalan_fixedr}Hs "9DoAGAq!  R!Q$Y!A#a%   qAvbAg~!! qs Or!Q$wr!t|A~ .1a41Q3q5> B Q Q =cPt||dzzdz}t}td}t|zx}}t |}t t |||dx}}d} ttd| z|} t | ||} t| ||} t| |} | |z |z| z|z } | dkrnH|| z }||d| zdzz|d| zzz z }| dz } t|d| zd| zdz z|}t |||}||zt|z}tt|| |} t| |} | S)N?rord)intrrrr=r3r)r& mpf_bernoullir+r!r*r?rBr") rvwpryfacrzONEpipipowtwopi2r{zeta2ntermKs r|khinchin_fixedrmsb TD#I  " #BA 1+CmA Bwr2r2A66EF A qsB/0+b)&"%3,!#)b0 #:  T  S1Q3q5\C!A#J && Q#!ac!e}b1vr*  bYr]"A Q$b)ADA Hr~c ||dz}td|zdz}t|z}t}td|D]}|t |||dzzz }t ||}|||z|zz }|||dzdzzz }|dz}d}d} d} t d} d} ||z| |zz|z} t | | } td|z|} t| | |}t|| |}t||}t|dkrnZ||z}| || zz | | z||z| dzf\}} }} | || zz | | z||z| dzf\}} }} |dz }t| d|zd|zdz z|} t|}|d z}||z|dz|z z}|t|z }|ttt d|z| ||z }|d z}t!t || |}t||S) NgQ?rornrr )rrrranger@rr"rr)r+r!absr*r> euler_fixedrCrB)rvrNrryklogNpNrwbjrDBrrAs r|glaisher_fixedrsA B DIMA R-CA 1a[* ]1b !QT ))* B D#* A!Q$( A AB A A A 1+C A 2g4 B & RC  !A#r "q!R tS"%b! t9s?  T !eaRT2a41, 1b!!eaRT2a41, 1b! Q#!ac!e}b1# & "BFA bb!erk"ARA',qtbS126 ;;A"HA Q$b)A At r~c|dz }t|z}td|z}d}t}|rF||z }||dzz}|d|zdzdzd|zdzzz}d|zd|dzzd |zzdzz|z}|dz }|rF|d z S) NrlMr rorrqrt)rrr)rvdrr{rys r| apery_fixedrsBJD4A r7d?D AA  T  ae  1Q qsQh&'Qw#q!t*s1u,r12Q6 Q  =r~cd}||z }ttj|dz tjdzddz}d|z}| t|zx}}t|zx}}d} ||dzz|dzz}||dzz|z|z|z}||z }||z }t t |t |dkrn|dz }Q|||z z|zS)Nrrrorr)rmathlogr?rmaxr) rvextrapr{rUrVrs r|rrs EEMD DHHd1f +Q /014A 1A By A tOA A adFAqDL q!tVQY]Q  Q Q s1vs1v  $  Q  U Oa r~c|dz}d}t|} t||}|tk(rnJt||}t |t ||}t |t||}t||}|dz }`t||S)Nrlror) mpf_euler mpf_zeta_intrrCr*r r+rr'r!)rvrmryrzs r| mertens_fixedr*s B A" A B  9  ArN 71:r * Ax{B ' AqM Q  At r~c 4d}d|zdz}t}dDcgc]}td||}}|Dcgc]}t|||}}d} t||}t dD]6} t|t t|| |}t|| || ||| <8t ||| |}t||dzdtk(rnt|||}|dz }t|td |}t|td |}t||Scc}wcc}w) NcLtfdtddzDzS)Nc3LK|]}|zr t||zzywN)r ).0rr{s r| z-twinprime_fixed..I..=s$H!AaC71:1%Hs $$r)sumrr{s`r|Iztwinprime_fixed..I<s#Hva!}HH!KKr~ror)rornrrrrr{i'i ) rr#r)rrr(r-r$rr+r!) rvrrresrprimesppowersr{rwis r|twinprime_fixedr:s4L 4"B C-6 7mAa# 7F 7(./1wq2/G/ A B q 2 only)rogS㥛@rgK7A`@)rrr)r{lgns r|bernoulli_sizers1 ((1Q-C us3wC%K0 11r~c|dkr/|dkr td|dk(rtS|dk(rttS|dzrtS|t kDr8|t |dzdzkDr$t|\}}t||||xstS|tkDr t|||S|dz}|d|d zz z }tj|}|r;|\}}||vr|s||St||||S|\} } } || z d kDrJt|||S|d kDr t|||Sdti}dtd t gx\} } } }||ft|<| |kr| d z} t | } d}t#d| |z }| d krt$}n| }t'd| d zdzD]}|| d |zz x\}}}}}|r| }|t)||z||z z }d |z}|| d z |z | d z |z z| dz |z z| dz |z z| dz |z z| |z zz}|d |zd |zzd |zzd|zzd|zzd|zzz}| dk(rt+| dzt,|}| dk(rt+| dzt,|}| d k(rt+| dz t.|}t1|||}t3t5||t7| |}||| <| dz } | | dz| dzzz| | dz zz} | d kDr| d| zd| zzz| dz | d z zz} | | | g|dd| |kr||S)z.Computation of Bernoulli numbers (numerically)rorz)Bernoulli numbers only defined for n >= 0rg?rrmrrrrrnr N) ValueErrorrr%rrBERNOULLI_PREC_CUTOFFrbernfracr#rMAX_BERNOULLI_CACHEmpf_bernoulli_hugebernoulli_cachegetr$rrrrrrr.f3f6r"r+r(r)r{rvrndrqrcachednumbersstaterbinbin1caseszbmrysexprwrusignumanuexpubcuj6rs r|rrs1u q5HI I 6K 65> !1u  ##~a/@/Dt/K(K{1Q4); << !!T3// B"r B   $F  <qz!71:tS1 1 3 q52:%as3 3 r6%as3 3T( !3r7G44 3u&. q&1ua  1d|r! q5AA1a46" >A)01Q3 7 "E4sQu $T * *A1B 1Q3r6AaCF#QqSV,ac"f5qs2v>"E FA AbD1R4=!B$'2."5qt< =A > 19,qsB3a 19,qsB3a 19,r!tR4a D" % GAq"%x}b 9  QacAaC[!a1g. q5AaC!A#;'QqS1Q3K8DsD>aA q&B 1:r~cF|dz}|ttj|dz}t|dz|}t |t |||}t |t t|| |}t|d|z }|dzs t|}t|||xstS)Nrrorrn) rrr mpf_gamma_intr)rr-r=r3r%r$r)r{rvrrpiprecvs r|rrs B #dhhqm$ $Fac2A<2&+A;vf~r267A!QqSA q5 AJ 1dC-: ..r~cHt|}|dkrgd|S|dzryd}t|dzD]}||dz zr ||z}t|ttj|dzdz}t ||}t |t|}t|t}||fS)a Returns a tuple of integers `(p, q)` such that `p/q = B_n` exactly, where `B_n` denotes the `n`-th Bernoulli number. The fraction is always reduced to lowest terms. Note that for `n > 1` and `n` odd, `B_n = 0`, and `(0, 1)` is returned. **Examples** The first few Bernoulli numbers are exactly:: >>> from mpmath import * >>> for n in range(15): ... p, q = bernfrac(n) ... print("%s %s/%s" % (n, p, q)) ... 0 1/1 1 -1/2 2 1/6 3 0/1 4 -1/30 5 0/1 6 1/42 7 0/1 8 -1/30 9 0/1 10 5/66 11 0/1 12 -691/2730 13 0/1 14 7/6 This function works for arbitrarily large `n`:: >>> p, q = bernfrac(10**4) >>> print(q) 2338224387510 >>> print(len(str(p))) 27692 >>> mp.dps = 15 >>> print(mpf(p) / q) -9.04942396360948e+27677 >>> print(bernoulli(10**4)) -9.04942396360948e+27677 .. note :: :func:`~mpmath.bernoulli` computes a floating-point approximation directly, without computing the exact fraction first. This is much faster for large `n`. **Algorithm** :func:`~mpmath.bernfrac` works by computing the value of `B_n` numerically and then using the von Staudt-Clausen theorem [1] to reconstruct the exact fraction. For large `n`, this is significantly faster than computing `B_1, B_2, \ldots, B_2` recursively with exact arithmetic. The implementation has been tested for `n = 10^m` up to `m = 6`. In practice, :func:`~mpmath.bernfrac` appears to be about three times slower than the specialized program calcbn.exe [2] **References** 1. MathWorld, von Staudt-Clausen Theorem: http://mathworld.wolfram.com/vonStaudt-ClausenTheorem.html 2. The Bernoulli Number Page: http://www.bernoulli.org/ rn))rr)rqro)rrr)rrrorl) rr rrrrr)rr r)r{rrrvrrpints r|rrsN AA1u(++1u A 1 QqS FA ! s488Aa=1 1B 6DaA8A;A !] #D !9r~c|tttfvr|Stt t ||dz|}t |t |dz|||S)Nr)rrrmpf_psi0r'rr)xrvrrws r| mpf_harmonicrsKUD$ q$q&)40A 1iQ,dC 88r~c|dtk(rt|d||tfStt|t|dz|}t|t |dz|||S)Nrrr)rrmpc_psi0r]rr)zrvrrws r| mpc_harmonicrsZtu}QqT4-u55Qd1f-t4A q)DFC0$ <!R0"5AAtR(A ) 7BA71b>2&A78Q+R0A Ar BA D F A D2#a% C Ar2 QqS"%4Q!R!8"= AtR r" q5fVS)VFF-C  H Q r~c^|dk(rt||tSt||tf||dS)zm Computation of the polygamma function of arbitrary integer order m >= 0, for a real argument x. r)r)rrmpc_psir)rrrvrs r|mpf_psirs4  Av4Z00 1q%j$ ,Q //r~c |dk(r t|||S|\}}|dz}|\}}} } |ds|tttfvr ttfS|s3|tk(r|tk(r ttfS|tk(r ttfSt |} t d|zd|zz} t} | | kr@t| | D]1}t|| dz |}t| ||} t|t|}3t|| |}t|d|}t|t||}t| ||} t| tt!|||t"||} |dz}d}d}t%| d}|d|d z}t't||z dz} t)|||}t+d|z|}t-|||}t/|t||}t|||}t| ||} t%|d}|dkDr t1||rn1||d|zz|d|zzdzzz}|d|zdzd|zdzzz}|dz }t| t3t|dz|||}|dzst5|dt5|df}|S) zp Computation of the polygamma function of arbitrary integer order m >= 0, for a complex argument z. rrlrg?rrrorrn)rrrrrr rrQrrbrYr]rr_rr^r\rrUr3r[rr*r+r0 mpf_gammar%)rrrvrrrrrrrrrr{ryrrzzmr integral_termrwrmagnr r scalrr rs r|rr s  Av4%% FB BD#sB a5 $t$ $$<   :"+5> ! :$< r A CFQqSLAA1u1 )AAr!tR(A1b!AAtR(A ) QB B QB BHQK4M="%A;wr1b15"=rBA AA A A 1b>D 747?D D$r'!) $C RR QqS"%4B'tXa["-2tR( AtR r" q5VFC(  a!ea!eAg  ac!eac!e_ Q  Ay!A#3T3?A E AaDM71Q4= ( Hr~c|tvr t|Stg|dzz}t}tx}|d<td|dzD]4}|dz||zdz z||z dzz}|d|zd|zdz zz}||z }|||<6|t|<|S)Nrrrro) borwein_cacherrr)r{dsrryrs r|borwein_coefficientsr{sMQ qs BAA1 1ac] EQqSUOqs1u % !1a ! Q1  M! Ir~rc  |dz}t|}|tvr&t|d|k\rtt|d||S|dkrI|dk(r td|st t St t| dz|t|dz ||S||k\rttd||S||dzk\rHd|zx}}|d||z zz }||t|zzz }|dtd||dzz zz }t|| ||St||dz z dz}|dkrtd|zdz}|t|d z d zd z krt}t|D]a}t||t!j"|dzz } | dkrn5t%tt't|| | |} t)|| |}ct t||St|d z d z} t+| } t,}t/|}t1| D]"}|d |z| || | z z|z|dz|zzz }$||z| |  z}||zd|zd|dz|z zz z}|tvrt|d|ks|tvr|t|| |z ft|<t|| |z ||S) z< Optimized computation of zeta(s) for an integer s. rlrrroz zeta(1) poleg/$?rg@RQ@rrrq)rzeta_int_cacher$rr%rr+rrr/rrrr"floatr rrr(r-r)rrrr) ryrvrrrzrxr needed_termsrpowprecrwr{rs r|rrs B AAN~a03r9~a(+T3771u 6^, ,5> !}aRT2.1 tSIIBw4D#.. bhr'C Q26] SY!^ $$ Q#aac" ""AsD#..2Y!_q  r6sAvz?Lc"T'A+.33$\2*A!"q!A"67G{k(1+r7&KRPA1b)A *tQ++ BtGaKAQAA AA AY; Qw!A$1+&2-1Q3( ::; bqteA bqBw1Aa=12A ^q 1! 4r 9q?Va"R!89q B3r64 --r~c |\}}}}|s5|tk(r|rtSttS|tk(rtSt S|dz}|s1||zt j|ddzkDrtt|||S|dk\r|ro|tk(r t||Stt||t|} tttttt||||} t!| | ||Stt|||S|r|rGtttttt||||} t!t#||| ||Stt|d|z} t%| |} t#| |} t't)|d|}|t+d||zz}t-||z}t/tt)|d||||}t!| t!| t!||||||Stt||}t1|\}}}}d||zz}||kDr?|r t||Stt/t||} t3| t5|||S|t+d|z }t6}t9|dz d z}t;|}t6}t=||}t?|}tA|D]D}| tC|dz||z|z }tE|||}||||z |z}|dzr||z}@||z }F||| z}tG|| |}|r tI|||Stttttt||||} t/|| ||S) Nrlrorrrqrrrr)%rrr%rrrrrr/rArr r4r(rDrr)mpf_zetarrJr3rr=r+r&r'rrrrr!r?rr@rPr"r$) ryrvraltrrrrrrryrwrrwp2rrrasignamanaexpabc pole_distrzr{sfln2rremanrs r|r!r!sXD#sB  : u~% 9K B sRx488Bq>A#564dC00  DytS))VAYL,=>AgdGD!R,@"ErJA1as+ +q 45 5  gdGD!R,@"ErJA8Ar?AtS9 9 D!RU # a  QO yB' ,3qR=  BsF^ GIb!,a5r3 ?q71Qr?26tC@@ aA$QZE4sDH I2~ 4% %a,-A1imT37 7 c!YA BtGaKAQAA !RB B-C AY SqsB, , 3B$ qTAaD[D  q5 FA FA  qte AQR A q$$$ D'$a(rr@rrPrOr")0ryrvrr"forcerrrr%r&r'r(r)r*rr#grrwrrrsignrmanrexprbcisignimaniexpibcmagr$rpi2rr{refimftretimrxone_2wp critical_liner,rrrwrewims0 r|r0r0s< FB U{D#s+U22 vganhtn=!! B BA$Q^E4sDH I2~  A9R="-A'!Q+R0A1 AAwqz2.AAq"%A1dC( (B/0AAy}b1A1dC( ( c!Y b% ''1b2I"A8Ar?AtS9 9 GQ2 & a  QO yB' ,!#tT3!#tT3$s(DH%3q#; BsF^Q' Q,b# 6q71Qr?26tC@@ BtGaKASVBZ !!AQA 2r C 2r C C C R-C!B$G%KM B-C 2a4.C R%C AY AaCS) :qssl33AC48*B/A q5 !A$1+ A !A$1+ A 3$s(RS9S CB CB adUOCadUOC sRC $C sRC $C Sz4-- GWWa4b 9Sz1dC00r~ct|||dSNr)r!ryrvrs r| mpf_altzetarIr AtS! $$r~ct|||dSrG)r0rHs r| mpc_altzetarLurJr~cn|dk(r|St|z}|r"|dzr ||z|z }|dz}||z|z }|dz}|r"|S)Nrroru)rr{rr#s r| pow_fixedrN|sYAv2 A q51 A FA qSRK a Hr~c|ttkr9t}tdtjt |dz}t }|||fSdg|dzz}dg|dzz}t |}|D]}t||dz|D]}|||< t|D],\}}|dk\s d}||z}||zs||z}|dz }||zs|||<.|a|a|a|||fS)Nrrro) len sieve_cache primes_cacheindexr mult_cacher r enumerate)r{sievermultrrrrs r| primesieverXs3{ ?|11#e*=a?@fd"" C1Q3KE 3!A#;D ^F !A#a AE!H % 1 6AQA!eaQ!eDGKLJ &$ r~c ||dkr tdt||z\}}}i} t|z} td|zz} ||z} t|} t |dz }|D]}|dz||zkDrnt ||| }t | |z|z ||\}}|r| t|| zz}nt| |z|z |}||z|z }||z|z }||fg| |<||}}tdttj||z|dzdzD]4}||z||zz |z ||z||zz|z }}| |j||f6t}t}|dk(r|| z }t|d}t!|||zdzD]}||}|| vrW||}| ||dz \}} |||zz}|dk(rn||}||}| ||dz \}}||z||zz |z ||z||zz|z }}Ct ||| }t | |z|z ||\}}|r| t|| zz}nt| |z|z |}||z|z }||z|z }||z }||z }||fS)Nrza cannot be less than 1rog{Gz?)rrXrr?r>r@rOrrPrrrrappendrrr)rCsresimrwr{rrVrrW basic_powersrxrBr$r,r=rrcossinrprepimr@rArxreximaars r|zetasum_sievedres1u233$QqS/E64L R-C!B$G R%C B-C 2a4.C . Q319 Ar3' 3$s(RS9S :af--AC48b."-Aumum:, QSqTXXac!_T12145 .ASS2-#c'#c'/B1FC O " "C9 - .. C CAv s  QqB B!A  !H QA#Aqs+HCad 6!HG'?1Q3/S WSW_r1c#gc#go5JS 2s+C$sd3h^R=HCz!S&11tCx"nb1S5R-CS5R-C s  s /0 8Or~rc 2|dz}t|}|dgk7}t|dk(}|\} } | tk(} t| |} t| |} |dkDr[|tkDrR|sP|sN|dkst j dkDr6t| | | |||\} } t| | |dt| | |dfg}|gfSt|}|st|dz}|Dcgc]}t }}|Dcgc]}t }}|r'|Dcgc]}t }}|Dcgc]}t }}ngx}}t|z}td|zz}t|}t|dz }||z}t|||zdzD]y}t!|||}t#| |z|z ||\}}| r|t%||zz}nt'| |z|z |}||z|z }||z|z } |r|||zz}!|!|z|z }"|!|z|z }#|r|r]t)|||}|dxx||z|z z cc<|dxx| |z|z z cc<|s|dxx"|z|z z cc<|dxx#|z|z z cc<t|z}$|D]X}||xx||$z|z z cc<||xx| |$z|z z cc<|r&||xx"|$z|z z cc<||xx#|$z|z z cc<|$|z|z }$ZB|dxx|z cc<|dxx| z cc<|s`|dxx"z cc<|dxx#z cc<||r|r,|dzr|d |d<|d |d<|ru|d |d<|d |d<nb|Dcgc] }d|z||z}}|Dcgc] }d|z||z}}|r0|Dcgc] }d|z||z}}|Dcgc] }d|z||z}}t+||D%&cgc]#\}%}&t|%| |dt|&| |df%}}%}&t+||D'(cgc]#\}'}(t|'| |dt|(| |df%})}'}(||)fScc}wcc}wcc}wcc}wcc}wcc}wcc}wcc}wcc}&}%wcc}(}'w) zI Fast version of mp._zetasum, assuming s = complex, a = integer. rrrgAlr{rorq)listrPrr!ZETASUM_SIEVE_CUTOFFsysmaxsizerer"rrrrr?r>rr@rOrrPrNzip)*ryrwr{ derivativesreflectrvrhave_derivativeshave_one_derivativer[r\rCrrxsmaxdrrbrcyreyimrxrBr,r=r$rrr^r_rxterm_rexterm_im reciprocalyterm_reyterm_imrzxaxbyaybyss* r| mpc_zetasumr~s B{#K"qc)k*a/HCE\M 3 C 3 C1u))2BSCKK%,? sCArBBBT3/b2#tS1QR S2v { D DFm ) )8 )C )( )8 )C )!,-Ax--!,-Ax--c R-C!B$G B-C 2a4.C R%C Aqs1u $#Ar3' 3$s(RS9S :af--AC48b."-AG?G? !ac*J"S(R/H"S(R/H "T2.A8c>b00A8c>b00Fx#~"44FFx#~"44FrM$(AFx!|22FFx!|22FA8aPP<(P 6(Pii:g?c d}||z}tg|dzz}t|}t|z}| dz|d<tt |d}t ||x}} g} d} |d| zz } | dkrnt tt|t| | } t|t| | | | }t| |} t||}| |z|z|z }| j| |ft|| |}| dz } td|dzdD]Q}t}d} | D]:\}}|dzdk(r || |zz}n|dz dz}|||zz| |zz}|sn ||z }| dz } <d|z||<St|dzD cgc]} tt| |}} ttt |dd|x}}t |t!d|}td|dzdD]M}t||||}t||||<t|||}t |t!|dz|dzz|}O||z|z}td|dzdD]k}|dz dz}|d|zdzd|zd zzdz}td|dzD]"} ||d| z|d|zdzd| zz z|z z}$||xxd|z|z|z z cc<mtd |dzdD]z}|dz dz}|d|zdzd|zdzz}tdd|zdzD].} |d | zdz| z|d| zz|d|zdzd| zz z|z z }0||xx||z|z d|zzz cc<||Dcgc]}||z  c}Scc} wcc}w) a zeta(n) = A * pi**n / n! + B where A is a rational number (A = Bernoulli number for n even) and B is an infinite sum over powers of exp(2*pi). (B = 0 for n even). TODO: this is currently only used for gamma, but could be very useful elsewhere. rrorrrrnrrrrrq)rr>rr3r=rBr+rr(r)r!rZrr&rr-r)rrvrr zeta_valuesrrxf_2pi exp_2pi_kexp_2piexps3rtpq1q2r{rye1e2rzrrpi_powfpir reciprocal_pirs r| zeta_arrayr_s! E eB*!$K "B R-CT1WKN fRj #E!%,,I E A !A#X 6  T79dB7 < Y2b 12 6 b"  b" "frkb  b"XIw3  Q AqsA     FBsax!Q$JqS1H"a%ZAqD( FA FA A A 06ac{;!q$ %;A;yQ7B??FS VXa[" -F Aac!_< AaD&" %!!R Ab)1Q31+!6; < BY2%M AqsA 4 qS1H !A !A & )1Q3 CA +ac"[1Qqs%;;B BA CA1Q3},33 4 AqsA 9 qS1H !A !A &1Q3q5! NA 2'!)A+{1Q3//+ac!eAaCi2HH2M MA NAAmOb0AaC88 9 * *AuH **- <, +s L9* L>c|dkr |d|dzz z}n|dkr |d|dzz z}n|}|tvr t||fS|dkrt|dzdz}nt|dzdz}tD];}||kDs t|| dDcgc] }|||z z  }}|dkr |t|<||fcS|dkDrt|d z}|d z}d g|z}t|d <t|z|d <t ||d<t ||}t d |D]L} |d || d z z|z } t d| D]} | d| z|| z|| | z z|z z } | d | z z} | || <N|D cgc]} | d z  }} |ddd}|dd}|t|<t|Scc}wcc} w)z Gives the Taylor coefficients of 1/gamma(1+x) as a list of fixed-point numbers. Enough coefficients are returned to ensure that the series converges to the given precision when x is in [0.5, 1.5]. irrrgRQ?rogv/?Ng333333?rlrrrnrq)gamma_taylor_cacherrrrrrgamma_taylor_coefficients) inprecrvrcprecrcoeffsrrrrrwrs r|rrs|VBY( $VBY( !!!$'-- d{ d Q  e a $  4E? Fc H||dz z tzdz }t|z}t|\}} |dkDr|} t|dz D]} ||z}| |z|z } ||z}t} |D] } | || z|z z} | | |z z} |dk(rt | |z| z| ||S|dk(rt t | | |z|||S|dk(r'ttt | |z| z| ||Sy|} t| D]} | |z|z } ||z }t} |D] } | || z|z z} | | |z z} |tt|z dkDrt|t| }t | | z| |z } t| ||} |dk(rtt| ||S|dk(r t!| ||S|dk(r%tttt| |||Syt || z| zd|z} |dk(rtt| ||S|dk(r t!| ||S|dk(rt#tt| ||Sy)Nrrrornr)rrrrr"r3r#rCr&r6rr'rr)r+rr$r%)xmpfrrrvrtype nearest_intrxrcwpr%rrrr3s r|gamma_fixed_taylorrs"Q$K7*q0K R-C+B/KFCQ  A & A HA1 A  S  AacBYA  s2v 19B RCs; ; 19]1q"utSA2F F 197<B RC#@A4M M   % A1 A HA   AacBYA  s2v Q 2 %h |45AQqS"R(A1b!AqytQc22qyq$,,qywwtQ';cJJ 19WWWQZs%CDD qyD)4a88  by BrE!19#D1ItS9919($qs)T3GG19"8D1I#6cBB s7j2b5( $q5eAaCEl!$QqSU|m!19$]1as%CbSU1WMM19$]1as%CRT!VLL19"9]1c!fc.#%'CE!G$-.2C99a19Zc%::19WT:b>4%MM19WZ^T3%GG $ U1Q3q5\!1B3q5919WQc%::19WT1dC%@@19WWQZs%CC2XF {cVmG!vg.G qymws{#wqu}%Xc(H&=>> " D!$ED!$EQxa(HQxa(H2#~y}gdA.>cJJ2#~wtYr];At$dC11 #xi(+ +B2XF{cVmG&)vg&6G,R/0N3sN ##-B(B hG!!Wb$TBB E A>R-C Q  AW#A sNG  "--D  Aqz Wb)Ar"B'A Wr!t_ % *r1AFAQA Jub)5" 5 F2J  19 71b>*AA|As3R8qyq!T3//qyq!T3// 19A|As3R8 B/B7A771:r2AtSA A  19wq"~ RC($551dC( ( 19|As3ArND#//71:tS1 1 19q',q"*=r"BD#NN1dC( ( r~c |\}}|\}}}} |\} } } } |tk(rN|dk(r5|r3t|||d}| | z }tt|dz|||}||fSt||||tfS|s|s| s| r ttfS|dz}|| z}| | z}|r t ||}n|}|dkr|| krt |tt|||t|||}|dk(r t|||S|dk(rt||||S|dk(r t|||S|dk(r"tt||||S|dk7r|| z }|dk(r/||kDr*|r||k\r#tt|t||||||S|dk(rtt!|t"|f||dSt%t'|}t%t'|}t ||}||z}|dk(rn|t)|z }|}|}|r#t+|}|dx\}}}} }|dx\} } } } }d}d}|dkr;|dk(rt-|t"}|dtk(r| }nt |dd|ddz| }||kDrvt|} t|| |}!t|!|!|}!t/|!t1d |}!t|t3t||}"t |!|"|}|st|||S|dkDr||z }t-|t4}#|#dtk(r| }$nt |#dd|#ddz| }$|$|kDrt|} t7t9| | t1d }%tt|#|#||%|}!t/|!t1d |}!t|#t7t"t||}"t |!|"|}|st|||S|$dkDr||$z }|| krd|dzz}&t;|}'t=t"||z }(t|'|&| })tt!|'|(|&| }*t?t7|*|)|&|(|&}+t9||+||}"|)|"f}|st|||S|| z }||z }tAtB|z},||,k}-tE||}.tE||}/d}0|s,|}1||,krtG||}tAd|,dzz|dzz d z|z }2tH|zx}3}4tJ}5tM|2D]#}6|.|3z|/|5zz |z |.|5z|/|3zz|z }5}3|.|4z }.%tO|3| tO|5| f}0tO|.| }||f}tQ|.|/|\}7}8t||\}9}:tE|9|}9tE|:|}:|9|.z|:|/zz |z |9dz z |7z}7|9|/z|:|.zz|z |:dz z |8z}8tO|7| tO|8| f}"|0r |dk(rt|"t|0||}"tS|1d};tS|1d}tUjX|<|;}?|=d kr d |z dtTj^zz d z}|"dt!|"dtt|d|z||f}"|r|dk(s|dk(rtta||||}At3t|tf}B|r!|dk(rtA||}An%tA||}AntAtc"||}A|0r tB|0|}B|dk(rtBA||S|dk(rtAB||S|dk(r|r t+|}Cn t+"}CtCtt+|||}Cte|d}Dtg|d}Et|} t9| |D}%t|%|E|}%|Cdt!|Cd|%|f}Cti|Ctk| ||}Ctat-||D|}%t|%|}%t|C|%|}C|Es+t9| teD|}%Cdt7|Cd|%|f}CtC||Sy|dk(r'|0rttc"||0||Stc"||S|dk(r0|0rt|0tc"|||Stct+"||S|dk(r t"||Sy)Nrnrrlirrroirr)rrg@KWx?)6rrr*r=rrrYr^r[rrhr\rWrcrZr1r'rrr r6rXrjr_rr%rr(r)r&r3r+rrr!complexrrrr"rr7rhypotatan2rfloorrrgrdr8r9r]rC)Frrvrrrwrr&r'r(r)rrrrrr{rramagbmagr<ranbnabsnrneed_reflectionzorigyfinal balance_preczsub1cancel1rrr#zsub2cancel2rzppaabsr x1rxprimerneed_reductionafixbfixr%zpreredrrrerxrimrrrrslrelimzfazfbzfabsyfbrgirrs1rezfloorimzsignsF r|r1r1ms DAqE4sE4sEz 191dC+BTE"AVDG_as;Br6MD#t,e33 T4Dd| B 8D 8D $o Rx "9;wq2y}RH"MAqy4!==qyAtS!99qyD#!66qy4)@$!LL QY C4LB  qyS2X44<wq'!R."5q$DD qy'!T*A.c1== VAYB VAYB r2;DcJ qy  hz""O E AJ%&qT)tT3%&qT)tT3FL cz 194(EQx5 %uQx{58A;6==|BZr2.Aq"%8B<4wy}'=rB Ar*&"64551g 4(EQx5 %uQx{58A;6==|BZGBOXa[9ub 91bA8B<4wtYr]'CRH Ar*&"64551g  2#:BrEB1:DD$r'*C4$/B74-r=BWRR0#r:F64-A!WF#vtS11 dU #L,B,R/0NN*N Ar?D Ar?D A  . 2r?DQ**RU2S82=>A2 %C#CAY !#Xd3h.3S488Kb7PS  S2#& S2#(>>ATB3'A1A*4r:S1b>SsBsBD3t8#b(S!V4s:D3t8#b(S!V4s: rc "Lrc$: : 71b>2.A71:&C71:&CJJs3'E1Q4.C 3$A|c\A%TCE\CE)C,??DJJ34773C789A1wqt[QqS"%ErJKA 19  5"-ub9A$e,A1962.A62.AAwq"~r2Aq"%qyAtS!99qyAtS!99 19V_QZWWU^R8"=B q*HuQx(GBH%AAw+AQ%A2./BRR"5B;uh7r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPlibmpcrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjr}rrrrrrr mpf_apery mpf_khinchin mpf_glaisher mpf_catalan mpf_mertens mpf_twinprimerrrrrrrrrrrrrrrrrZETA_INT_CACHE_MAX_PRECrrr!r0rIrL mpf_zetasumrNrQrRrTrXrerhr~rrrrrrrrrrrrrrr1rrrrrrrrs0r|rsT  <<99                   0  H  B22z  *  0  2 [ ) [ ) / / }- }-  1 @ a[ a[2 '':;IV /Tz:@9 = %9)v%3 l'0'< J(T  (3.j%!U(n%!5X1t(%(%      67taVu$$$  )!+ ,."$q'*.O+b7-r/Ib#3 jEPK)\h)T&&&&& & *-q.sI