K ihpdZddlZddlmZmZmZmZmZddlm Z m Z m Z 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9ddl:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRe efZSeefZTe!efZUe"efZVe#e$fZWe#e$e%fZXdZYdZZd Z[d efd Z\d Z]efd Z^dZ_efdZ`efdZadefdZbdefdZcefdZddefdZedZfefdZgefdZhefdZiefdZjefdZkefdZlefdZmefdZnefdZoefdZpefd Zqefd!Zrefd"Zsefd#Ztefd$Zud%Zvefd&Zwefd'Zxefd(Zyefd)Zzd*Z{efd+Z|efd,Z}efd-Z~efd.Zefd/Zefd0Zefd1Zefd2Zefd3Zefd4Zefd5Zefd6Zefd7Zefd8Zefd9Zed:Zed;Zd<Zefd=Zefd>Zefd?Zefd@ZefdAZefdBZdIdCZdIdDZdIdEZdIdFZedGk(r& ddlmcmcmZejZ~ejZzyy#eef$r edHYywxYw)Jz- Low-level functions for complex arithmetic. N)MPZMPZ_ZEROMPZ_ONEMPZ_TWOBACKEND)1 round_floor round_ceiling round_downround_up round_nearest round_fastbitcountbctable normalize normalize1reciprocal_rndrshiftlshift giant_steps negative_rndto_strto_fixed from_man_exp from_floatto_floatfrom_intto_intfzerofoneftwofhalffinffninffnanfnonempf_absmpf_posmpf_negmpf_addmpf_submpf_mulmpf_div mpf_mul_int mpf_shiftmpf_sqrt mpf_hypot mpf_rdiv_int mpf_floormpf_ceilmpf_nintmpf_fracmpf_signmpf_hash ComplexResult)mpf_pimpf_expmpf_log mpf_cos_sin mpf_cosh_sinhmpf_tan mpf_pow_int mpf_log_hypotmpf_cos_sin_pimpf_phimpf_cosmpf_sin mpf_cos_pi mpf_sin_pimpf_atan mpf_atan2mpf_coshmpf_sinhmpf_tanhmpf_asinmpf_acos mpf_acosh mpf_nthroot mpf_fibonaccic2|\}}|tvry|tvryy)z2Check if either real or imaginary part is infiniteTF)_infszreims Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpmath/libmp/libmpc.py mpc_is_infrY)s FB U{4 U{4 c2|\}}|tvry|tvryy)z9Check if either real or imaginary part is infinite or nanTF) _infs_nanrTs rX mpc_is_infnanr]0s FB Yt Yt rZc |\}}t||}|dr|dztt||fi|zdzS|dzt||fi|zdzS)Nrz - jz + )rr))rUdpskwargsrVrWrss rX mpc_to_strrc7sa FB CB !uEzF72;>v>>DDEzF2s5f55;;rZFcP|\}}tt|||t|||SN)complexr)rUstrictrndrVrWs rXmpc_to_complexri?s* FB 8B,hr63.G HHrZcNtjdk\rb|\}}t|tjjt|zz}|dtjj zz}t |S tt|dS#t$rt|cYSwxYw)N)rlT)rg) sys version_infor8 hash_infoimagwidthinthashri OverflowError)rUrVrWhs rXmpc_hashrvCs 6!B RL3==-- < < CMM''' (1v  q67 7 7N s7B B$#B$c*|\}}|t|||fSrer)rUprecrhrVrWs rX mpc_conjugater{Ps FB wr4% %%rZc|tk7Sre)mpc_zero)rUs rXmpc_is_nonzeror~Ts =rZcN|\}}|\}}t||||t||||fSrer*rUwrzrhabcds rXmpc_addrW5 DAq DAq 1as #WQ4%= ==rZc,|\}}t|||||fSrer)rUxrzrhrrs rX mpc_add_mpfr\! DAq 1as #Q &&rZcN|\}}|\}}t||||t||||fSrer+rs rXmpc_subr`rrZc,|\}}t|||||fSrer)rUprzrhrrs rX mpc_sub_mpfrerrZc@|\}}t|||t|||fSre)r(rUrzrhrrs rXmpc_posri( DAq 1dC '!T3"7 77rZc@|\}}t|||t|||fSrerxrs rXmpc_negrmrrZc<|\}}t||t||fSre)r/)rUnrrs rX mpc_shiftrqs" DAq Q?IaO ++rZc(|\}}t||||S)zEAbsolute value of a complex number, |a+bi|. Returns an mpf value.)r1rs rXmpc_absrus DAq Q4 %%rZc(|\}}t||||S)z3Argument of a complex number. Returns an mpf value.)rIrs rXmpc_argr{s DAq Q4 %%rZc@|\}}t|||t|||fSre)r3rs rX mpc_floorrs( DAq Qc "Ias$; ;;rZc@|\}}t|||t|||fSre)r4rs rXmpc_ceilr( DAq AtS !8AtS#9 99rZc@|\}}t|||t|||fSre)r5rs rXmpc_nintrrrZc@|\}}t|||t|||fSre)r6rs rXmpc_fracrrrZc|\}}|\}}t||}t||} t||} t||} t|| ||} t| | ||} | | fS)z Complex multiplication. Returns the real and imaginary part of (a+bi)*(c+di), rounded to the specified precision. The rounding mode applies to the real and imaginary parts separately. )r,r+r*)rUrrzrhrrrrrqrsrVrWs rXmpc_mulrsk DAq DAq1 A1 A1 A1 A AtS !B AtS !B r6MrZc|\}}t||}t||}t||||}t||||}t|d} || fSNr)r,r+r/) rUrzrhrrrrrrVrWs rX mpc_squarersU DAq! A! A!T3A AtS !B 1aB r6MrZcL|\}}t||||}t||||}||fSre)r,rUrrzrhrrrVrWs rX mpc_mul_mpfrs4 DAq AtS !B AtS !B r6MrZc^|\}}tt||||}t||||}||fS)zB Multiply the mpc value z by I*x where x is an mpf value. )r)r,)rUrrzrhrrrVrWs rXmpc_mul_imag_mpfrs; DAq AtS) *B AtS !B r6MrZcL|\}}t||||}t||||}||fSre)r.)rUrrzrhrrrVrWs rX mpc_mul_intrs4 DAq Q4 %B Q4 %B r6MrZc|\}}|\}}|dz}tt||t|||} tt||t|||} tt||t|||} t| | ||t| | ||fSN )r*r,r+r-) rUrrzrhrrrrwpmagtus rXmpc_divrs DAq DAq B '!Q-A 3C! galB/A! galB/A 1Sc "GAc$s$; ;;rZcL|\}}t||||}t||||}||fS)zCalculate z/p where p is real)r-rs rX mpc_div_mpfrs4 DAq AtS !B AtS !B r6MrZc|\}}tt||t|||dz}t||||}tt||||}||fS)zCalculate 1/z efficientlyrr*r,r-r))rUrzrhrrmrVrWs rXmpc_reciprocalrsW DAq! WQq\$r'2A AtS !B AtS) *B r6MrZc|\}}tt||t|||dz}tt|||||}ttt|||||}||fS)z)Calculate p/z where p is real efficientlyrr) rrUrzrhrrrrVrWs rX mpc_mpf_divrsc DAq! WQq\473A 1q$ ,B 1&4 5B r6MrZcd}d}|r;|dzr||z||zz ||z||zz}}|dz}||z||zz d|z|z}}|dz}|r;||fS)zgComplex integer power: computes (a+b*I)**n exactly for nonnegative n (a and b must be Python ints).rrrl)rrrwrewims rXcomplex_int_powrsx C C q51us1u}c!ec!emC FAsQqSy!A#a%1 a 8OrZc |dtk(rt||d||Sttt ||dz||dz||S)Nrrr)r mpc_pow_mpfmpc_exprmpc_log)rUrrzrhs rXmpc_powrsItu}1adD#.. 771d2g.47;T3 GGrZc |\}}}}|dk\rt|d|z||zz||S|dk(r#t||dz}t|d|z|z||Sttt ||dz||dz||S)Nrr) mpc_pow_intmpc_sqrtrrr) rUrrzrhpsignpmanpexppbcsqrtzs rXrrsE4s qy1rEkT4Z8$DD rzDG$52+"4dC@@ ;wq$r'2AtBw?s KKrZc V|\}}|tk(rt||||tfS|tk(rYt||||}|dz}|dk(r|tfS|dk(rt|fS|dk(rt|tfS|dk(rtt|fS|dk(rtS|dk(r t |||S|dk(r t |||S|dk(r t |||S|dkrt t|| |dz||S|\}}} } |\} } } }|r| }| r| } | | z }t|}||t| |zz}|dkr]|dkDr||z}| } n| | z} | } t|| |\}}t|t|| z||}t|t|| z||}||fSttt||dz||dz||S) Nrrrlrkri'r)rr@r)mpc_onerrrrabsmaxrrrrrrr)rUrrzrhrrvasignamanaexpabcbsignbmanbexpbbcdeabs_de exact_sizerVrWs rXrrs DAqEz1as+U22Ez 1dC ( Q 6e8O !V!8O !V1:u$ $ !V'!*$ $Avg~Avgas++AvjD#..Bw~as331u^KA2tAv$>cJJE4sE4s dUd dUd B WFFSc]*+JE 6 RKDD rcNDD tQ/B "c!D&k4 5 "c!D&k4 52v ;wq$r'2AtBw?s KKrZcb|\}}|tk(rE|tk(r||fS|drtt|||}t|fSt|||}|tfS|dz}|ds\tt ||f|||}t |d} t| ||}t |d} t| |} t || ||}||fStt ||f|||}t |d} t| ||}t |d} t| |} t || ||}|drt|}t|}||fS)zComplex square root (principal branch). We have sqrt(a+bi) = sqrt((r+a)/2) + b/sqrt(2*(r+a))*i where r = abs(a+bi), when a+bi is not a negative real number.rrr)rr0r)r*rr/r-r+) rUrzrhrrrWrVrrrrrs rXrr'sP DAqEz :q6M Q4'!*dC0B2; !T3'B;  bB Q4 WaVR(!R 0 a  as # aO a_ Q4 % r6M GQFB'B / a  as # aO a_ Q4 % Q4BB r6MrZcd}tt||||zz }tt||||zz } |d|zzd|z z}|j}|j} t t|}t t| } d} |} |}t||| zD]}t|| |dz \}}t||dz | z|z |z }t||dz | z|z |z }||z||zz||zz }t|||z }t|||z }||z||zz|z }| |z||zz|z }||z|z}||z|z}||dz t||| z zz|z}||dz t| || z zz|z} |} || fS#t $rbt ||}t ||}t |} td| |} t||f| tf|\}} t|}t| } Y_wxYw)N2y?g?rr)rrrrealrprrtrr2rrrrrr)rrrrzstarta1b1rrVrWfnnthextraprevpextra1rre2im2r4apbprecimcrebimbs rXmpc_nthroot_fixedrKsD E VAtag~ & 'B VAtag~ & 'B  "r'\SU # VV VV R\ R\ E E F U +"2r1Q3/SS1Q3+/F23S1Q3+/F23#gCQZ 0 Atax  Atax Cx"s("q(sSy28#)axBaxBQqS&QuW--- 1QqS&QuW--- 1 r6M5  b%  b%  a[1b%("bC<7B BZ BZsAE==A'G('G(cZ|\}}|ddk(r|tk(rt||||}|tfS|dkre|dk(rtS|dk(rt||f||S|dk(rt t||f||St ||f| |dzt |}t t|||S|dkrtd|dzz}|\} } } } |\} }}}t||f|}|d |dzd kDra|d |dz|krSt||}t||}t||||\}}d}t|| |z ||}t|| |z ||}||fSt|}|dzdz}td||}t||f|tf||\}}t|d|d|d|d ||}t|d|d|d|d ||}||fS) zu Complex n-th root. Use Newton method as in the real case when it is faster, otherwise use z**(1/n) rrlrrrg333333?rirk)rrPrrr mpc_nthrootrrrrrrrrr2rr)rUrrzrhrrrVinverseprec2rrrrrrrrpfafbfrWrrrs rXrrrs DAqtqyQ%Z AtS )E{1u 6N 6Aq64- - 77QFD#6 6q!fqb$q&.2EFws33BwC4"9%&!"tT3!"tT3 aUD ! b6BrF?S bfr"vo&<!U#B!U#B&r2q%8FBEb5&,s;Bb5&,s;Br6M !B GbLE q"e $C aVc5\5# 6FB 2a5"Q%A1tS 9B 2a5"Q%A1tS 9B r6MrZct|d||S)z Complex cubic root. rk)rrUrzrhs rXmpc_cbrtrs q!T3 ''rZc|\}}|tk(r t|||S|tk(rt|||tfSt||dz|}t||dz|\}}t||||}t||||} || fS)av Complex exponential function. We use the direct formula exp(a+bi) = exp(a) * (cos(b) + sin(b)*i) for the computation. This formula is very nice because it is pefectly stable; since we just do real multiplications, the only numerical errors that can creep in are single-ulp rounding errors. The formula is efficient since mpmath's real exp is quite fast and since we can compute cos and sin simultaneously. It is no problem if a and b are large; if the implementations of exp/cos/sin are accurate and efficient for all real numbers, then so is this function for all complex numbers. r)rr=r;r,) rUrzrhrrrrrrVrWs rXrrs DAqEz1dC((Ezq$$e++ !T!VS !C q$q&# &DAq as #B as #B r6MrZcLt|d|d||}t|||}||fS)Nrr)rArrys rXrrs1 qtQqT4 -B D# B r6MrZc|\}}|tk(rt|||tfS|tk(rt|||tfS|dz}t||\}}t ||\}} t ||||} t || ||} | t | fS)aSComplex cosine. The formula used is cos(a+bi) = cos(a)*cosh(b) - sin(a)*sinh(b)*i. The same comments apply as for the complex exp: only real multiplications are pewrormed, so no cancellation errors are possible. The formula is also efficient since we can compute both pairs (cos, sin) and (cosh, sinh) in single stwps.)rrDrJr=r>r,r) rUrzrhrrrrrchshrVrWs rXmpc_cosrs DAqEzq$$e++Ez4%u,, B q" DAq 1b !FB Bc "B Bc "B wr{?rZc|\}}|tk(rt|||tfS|tk(rtt|||fS|dz}t||\}}t ||\}} t ||||} t || ||} | | fS)zComplex sine. We have sin(a+bi) = sin(a)*cosh(b) + cos(a)*sinh(b)*i. See the docstring for mpc_cos for additional comments.r)rrErKr=r>r,rs rXmpc_sinrs DAqEzq$$e++Ezhq$,,, B q" DAq 1b !FB Bc "B Bc "B r6MrZch|\}}|\}}}}|\} } } } |tk(rt|||tfS|tk(rtt|||fS|dz} t|d}t|d}t || \}}t || \}}t ||| }t||||}t||||}||fS)zcComplex tangent. Computed as tan(a+bi) = sin(2a)/M + sinh(2b)/M*i where M = cos(2a) + cosh(2b).r)rr?rLr/r=r>r*r-)rUrzrhrrrrrrrrrrrrrrrrrVrWs rXmpc_tanrs DAqE4sE4sEz'!T3/66Ez%!T3!777 B!QA!QA q" DAq 1b !FB !R C Cs #B S$ $B r6MrZcL|\}}|tk(rt|||tfSt|t|dz|dz}|tk(rt |||tfS|dz}t ||\}}t ||\}} t||||} t|| ||} | t| fSNrr)rrFr,r:rJrBr>r)rs rX mpc_cos_pirs DAqEz!T3'..6$q&>46*AEz4%u,, B !R DAq 1b !FB Bc "B Bc "B wr{?rZc:|\}}|tk(rt|||tfSt|t|dz|dz}|tk(rtt |||fS|dz}t ||\}}t ||\}} t||||} t|| ||} | | fSr)rrGr,r:rKrBr>rs rX mpc_sin_pir s DAqEz!T3'..6$q&>46*AEzhq$,,, B !R DAq 1b !FB Bc "B Bc "B r6MrZc|\}}|tk(r t|||\}}|tft|ffS|tk(r t|||\}}|tf|tffS|dz} t|| \}}t|| \}}t||||} t||||} t||||} t||||} | t | f| | ffS)Nr)rr>r=r,r))rUrzrhrrrrrrrcrecimsresims rX mpc_cos_sinr&s DAqEzq$,BE{UBK''Ez1dC(15zAu:%% B q" DAq 1b !FB !Rs #C !Rs #C !Rs #C !Rs #C  c **rZc|\}}|tk(r t|||\}}|tf|tffSt|t|dz|dz}|tk(r t |||\}}|tft|ffS|dz} t|| \}}t || \}}t||||} t||||} t||||} t||||} | t | f| | ffSr)rrBr,r:r>r))rUrzrhrrrrrrrr"r#r$r%s rXmpc_cos_sin_pir(%s DAqEzas+15zAu:%%6$q&>46*AEzq$,BE{UBK'' B !R DAq 1b !FB !Rs #C !Rs #C !Rs #C !Rs #C  c **rZc<|\}}t|t|f||S)z:Complex hyperbolic cosine. Computed as cosh(z) = cos(z*i).)rr)rs rXmpc_coshr*7s" DAq Awqz?D# ..rZc8|\}}t||f||\}}||fS)z;Complex hyperbolic sine. Computed as sinh(z) = -i*sin(z*i).)rrs rXmpc_sinhr,<* DAq Aq64 %DAq a4KrZc8|\}}t||f||\}}||fS)z>Complex hyperbolic tangent. Computed as tanh(z) = -i*tan(z*i).)rrs rXmpc_tanhr/Br-rZcP|\}}|dz}tt||t|f}tt|||f}t ||}t ||} t || ||\}}tt |dt |df} | dtk(rt|r | dtf} | S)Nrrrr) r*r r)r+rrr/r%rYr) rUrzrhrrrryl1l2rs rXmpc_atanr4Is DAq Bagaj(AaaA BB BB 2r4 %DAq !B )Ab/1A tt| 1 qT5M HrZg:pΈ?g?c  |\}}|dz}|tk(rttt||}|ds+|dk(rt |||tfSt |||tfS|drKt ||}tt|||} |dk(r |t| fStt|d| fSt|||} |dk(rt| fSt ||}t|dt| fSdx} } |dr t|}d} |dr t|}d} tt||}tt||} t| ||} t|||}tt| ||d}t|||}t|||}tt||ds!|dk(rt ||}nBt ||}n4t|||}|dst|t| | ||} t|||}tt|t| |||d}|dk(r"ttt!|||||}ntt|t!||||}nt|t| | ||} t|t||||}tt| ||d}t|t!|||}|dk(rtt||||}ntt||||}tt"||dst|t| | ||}t|dr2t|||}t|||}tt|||d}n$t|||}tt|||d}t|t|t||}t%ttt|t!|||||}n=t!tt|||t||}t%t||||}| r'|dk(rtt |||}n t|}| s|dk(r t|}| r|dk(r t|}t'|d|d|d|d||}t'|d|d|d|d||}||fS)a& complex acos for n = 0, asin for n = 1 The algorithm is described in T.E. Hull, T.F. Fairgrieve and P.T.P. Tang 'Implementing the Complex Arcsine and Arcosine Functions using Exception Handling', ACM Trans. on Math. Software Vol. 23 (1997), p299 The complex acos and asin can be defined as acos(z) = acos(beta) - I*sign(a)* log(alpha + sqrt(alpha**2 -1)) asin(z) = asin(beta) + I*sign(a)* log(alpha + sqrt(alpha**2 -1)) where z = a + I*b alpha = (1/2)*(r + s); beta = (1/2)*(r - s) = a/alpha r = sqrt((a+1)**2 + y**2); s = sqrt((a-1)**2 + y**2) These expressions are rewritten in different ways in different regions, delimited by two crossovers alpha_crossover and beta_crossover, and by abs(a) <= 1, in order to improve the numerical accuracy. rrrrrlrk)rr+r r'rNrMr:rOr)r/r*r1r-r,beta_crossoverrHr0alpha_crossoverr<r)rUrzrhrrrrampirrrrrralphabetab2rVAxrc1c2Am1rWs rX acos_asinrA_s" DAq BEz T71:r *!uAv4-u444-u44tD#&gaj$46wqz>)"9R#45q88as+6 !8Oc*B$R,gaj88EEt AJt AJ q" B q" B"aA"aA gaB' ,E 1eR D 1b B >4 ,Q / 6$#B$#BUAr "!u GAr2.3A2r"A72wq!R'8"=rBBAvghr2&62>Cga"b)92>C GAr2.3AGAr2.3A71a,b1BHR,b1BAvgb!R0"5gaR0"5 ?E2 .q 1 RB+R 0 2;q>B#BR$BGBB/4CB#BGBB/4C S'%r2B 7 WT73R0@"#ErJB OggeUB7rBB G WUB+R 0 6R,BB Q!V R[ a R[ 2a5"Q%A1tS 9B 2a5"Q%A1tS 9B r6MrZct|||dSNrrAr s rXmpc_acosrE Qc1 %%rZct|||dSrrDr s rXmpc_asinrHrFrZc\|\}}t|t|f||\}}t||fSre)rHr)rs rX mpc_asinhrJs3 DAq a_dC 0DAq 1:q=rZcrt|||\}}|ds |tk(r t||fS|t|fSrC)rErr)rs rX mpc_acoshrLs? AtS !DAqtqEzqz1}'!*}rZc|dz}t|t|}tt||}t||}t||}t t|||d}|dt k(rt |r t|df}|S)Nrrrr)rrrrrr%rYr)rUrzrhrrrrs rX mpc_atanhrNsw B7BABA2A2A'!Q#R(A tt| 1 AaDM HrZc|\}}|tk(rt|||tfStt|d|dzt|d|dz}||zdz}t |}t t |dt|}t|tf||} t||} t| | |} t| | |} t| |||} | S)Nrlrkrr) rrQrrrCr*r/r&rrrrr) rUrzrhrVrWsizerrrrrs rX mpc_fibonaccirQ s FB U{b$,e44 s2a5A;RU2a5[!1 2D r B A !Q+AE Ar"A1bA1bA1bAAq$$A HrZctrer9rrzrhs rXmpf_expjrU rZc|\}}|tk(r t|||S|tk(rtt|||tfStt||dz}t||dz\}}t ||||}t ||||}||fSr)rr=r;r)r,)rUrzrhrVrWeyrrs rXmpc_expjrYs FB U{2tS)) U{wr{D#.55 d2g &B r47 #DAq Qc "B Qc "B r6MrZctrerSrTs rX mpf_expjpir[(rVrZcp|\}}|tk(r t|||S|\}}}}|dz} |r| td||zz } tt t | || }|tk(rt |||tfSt ||dz} t||dz\} } t | | ||}t | | ||}||fS)Nrr)rrBrr)r,r:r;) rUrzrhrVrWsignmanexpbcrrXrrs rX mpc_expjpira+s FB U{b$,,D#sB bB  c!SVn R, -B U{r4%u,, T"W B "d2g &DAq Qc "B Qc "B r6MrZsagez&Warning: Sage imports in libmpc failed)f)__doc__rmbackendrrrrrlibmpfr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9 libelefunr:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrr}mpc_twompc_halfrSr\rYr]rcrirvr{r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r&r(r*r,r/r4r6r7rArErHrJrLrNrQrUrYr[rasage.libs.mpmath.ext_libmplibsmpmath ext_libmp_lbmp ImportErrorAttributeErrorprintrrZrXrrsG ==              + %< + 5> u  5$  <# I  *&'> !+'j> *'$8j8,$& $& &<%:%:%: '$'!+ &0!+ ' <!+!+!+ 'H !+L!+&LP%"H%N!+'R%( $6$ $($ $&' ' (+"!++$%/ % %% &F#S/FP%&%&& &&   *   $ f822-->>   (8 678s=$H##H54H5