K iUdZddlZddlmZddlmZddlmZmZmZmZm Z 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:e d k(rd Z;nd Z;d ZiZ?dZ@iZAdZBdZCiZDdZEdZFdZGiZHddgZIedeeBdzD]ZJeIeKdeJzeBdzgdeJdz zzz ZI dZLdZMdZNdZOdXdZPeLdZQeLdZR edZSed ZTed!ZUed"ZVd#ZWeLdYd$ZXd%ZYd&ZZeLd'Z[eLd(Z\eMe\Z]eMeXZ^eMe[Z_eMeYZ`eMeQZaeMeRZbeLd)ZceLd*ZdeMedZeeMecZfefd+Zgd,Zhd-Ziefd.Zjefd/ZkdZd0Zld1Zmd2Znd[d3Zod4Zpefd5Zqd6Zrd7Zsd8Ztd9Zud:Zvefd;Zwefd<Zxefd=Zyefd>Zzefd?Z{efd@Z|efdAZ}efdBZ~d[dCZdDZdEZdFZefdGZedfdHZdIZeddfdJZefdKZefdLZefdMZefdNZefdOZefdPZefdQZefdRZefdSZdZdTZdZdUZe dVk(r ddlmcmcmZejhZ4ejZejZqejZejZejZgej"Zej ZejZlyy#eef$r edWYywxYw)\a( This module implements computation of elementary transcendental functions (powers, logarithms, trigonometric and hyperbolic functions, inverse trigonometric and hyperbolic) for real floating-point numbers. For complex and interval implementations of the same functions, see libmpc and libmpi. N)bisect)xrange)MPZMPZ_ZEROMPZ_ONEMPZ_TWOMPZ_FIVEBACKEND)- round_floor round_ceiling round_downround_up round_nearest round_fast ComplexResultbitcountbctablelshiftrshift giant_steps sqrt_fixedfrom_intto_int from_man_expto_fixedto_float from_float from_rational normalizefzerofonefnonefhalffinffninffnanmpf_cmpmpf_signmpf_absmpf_posmpf_negmpf_addmpf_submpf_mulmpf_div mpf_shift mpf_rdiv_int mpf_pow_intmpf_sqrtreciprocal_rnd negative_rnd mpf_perturb isqrt_fast)ifibpythonXiiii i crd_d_fd}j|_j|_|S)z Decorator for caching computed values of mathematical constants. This decorator should be applied to a function taking a single argument prec as input and returning a fixed-point value with the given precision. Ncj}||krj||z z St|dzdz}|fi|_|_j||z z S)Ng? ) memo_precmemo_valint)preckwargsrGnewprecfs \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpmath/libmp/libelefun.pygzconstant_memo..g^sdKK 9 ::)D.1 1d4il#w)&)  zzgdl++)rGrH__name____doc__)rMrOs` rN constant_memorSUs5AKAJ,AJ AI HrPc@tffd }j|_|S)z Create a function that computes the mpf value for a mathematical constant, given a function that computes the fixed-point value. Assumptions: the constant is positive and has magnitude ~= 1; the fixed-point function rounds to floor. cx|dz}|}|ttfvr|dz }td|| t|||S)Nr?rr)rr r r)rJrndwpvfixeds rNrMzdef_mpf_constant..frsF BY "I 8]+ + FAAsHQKs;;rP)rrR)rYrMs` rNdef_mpf_constantrZjs<  AI HrPc||z dk(r7td|zdz}|s|dzrt||dzz|fSt ||dzz|fS||zdz}t||||\}}}t||||\} } } | |z|| zz|| z|| zfS)NrrB)rrbsp_acot) qab hyperbolica1mp1q1r1p2q2r2s rNr]r]{s1uz 1q\ 1BAIr) )8R!Q$Y* * 1qA!Q:.JBB!Q:.JBB b52b5="R%B &&rPctd|ztj|z dz}t|d||\}}}||z|z||zzS)z Compute acot(a) or acoth(a) for an integer a with binary splitting; see http://numbers.computation.free.fr/Constants/Algorithms/splitting.html ffffff?r?r)rImathlogr])r_rJraNpr^rs rN acot_fixedrqsQ D4K #b ()Aq!Az*GAq! qS4K1Q3 rPFcd}t}|D]-\}}|t|tt|||z|zz }/||z S)z Evaluate a Machin-like formula, i.e., a linear combination of acot(n) or acoth(n) for specific integer values of n, using fixed- point arithmetic. The input should be a list [(c, n), ...], giving c*acot[h](n) + ... rF)rrrq)coefsrJra extraprecsr_r`s rNmachinrvsQIAE1 SVjQiD DDE NrPc tgd|dS)zz Computes ln(2). This is done with a hyperbolic Machin-type formula, with binary splitting at high precision. )))i)r=i-"TrvrJs rN ln2_fixedr}s 3T4 @@rPc tgd|dS)zN Computes ln(10). This is done with a hyperbolic Machin-type formula. )).)"1)r?Tr{r|s rN ln10_fixedrs 14 >>rPiqci-~ i@ cp||z dk(rOtd|zdz d|zdz zd|zdz z}|dztdzzdz}d|z|ztt|zzz}n[|r|dkr t d ||||zdz}t |||dz|\}} } t |||dz|\} } } | | z}|| z}| | z| |zz}|||fS) z Computes the sum from a to b of the series in the Chudnovsky formula. Returns g, p, q where p/q is the sum as an exact fraction and g is a temporary value used to save work for recursive calls. rrBr\rDz binary splitting)rCHUD_CCHUD_ACHUD_Bprint bs_chudnovsky)r_r`levelverboserOror^midg1rdreg2rgrhs rNrrs sax 1Q1Q1Q' ( qD619  " !GaK6&(? + uqy &1 -sQh"1c57G< B"357G< B rE rE rEBrEM a7NrPct|dz dz dz}|r td|td|d|\}}}ttd|zz}|tz|z|t |zzt zz}|S)z Compute floor(pi * 2**prec) as a big integer. This is done using Chudnovsky's series (see comments in libelefun.py for details). gv O @gbi],@rBzbinary splitting with N =r)rIrrr8rrCHUD_D) rJr verbose_basernrOror^sqrtCrXs rNpi_fixedrsx D l *Q ./A )1-Aq!W-GAq! v$' (E &!F1H*f,-A HrPct|dzS)N)rr|s rN degree_fixedrs D>3 rPc||z dk(rtt|fS||zdz}t||\}}t||\}}||z|z||zfS)ze Sum series for exp(1)-1 between a, b, returning the result as an exact fraction (p, q). rrB)rrbspe)r_r`rcrdrergrhs rNrrs^  saxA 1qA !QZFB !QZFB b58RU?rPctd|ztj|z dz}td|\}}||z|z|zS)z Computes exp(1). This is done using the ordinary Taylor series for exp, with binary splitting. For a description of the algorithm, see: http://numbers.computation.free.fr/Constants/ Algorithms/splitting.html g?r?r)rIrlrmr)rJrnror^s rNe_fixedr sF CHTXXd^ #b ()A !9DAq qS4K! rPcT|dz }ttd|zzt|zz}|dz S)z2 Computes the golden ratio, (1+sqrt(5))/2 rFrB )r8r r)rJr_s rN phi_fixedrs2  BJD8af%&'T/:A 7NrPc d|dz}tttt|d||dz S)NrFr)rmpf_logr1mpf_pi)rJrWs rNln_sqrt2pi_fixedr*s. B GIfRj!4b946 BBrPc,tt||SN)rrr|s rN sqrtpi_fixedr0s htnd ++rPc |\}}}}|\}} } } |r| dkr td| dk\rt|d|z| | zz||S| dk(r}| dk(r6|r'ttt ||dzt |||St |||S|r$tt ||dzt || ||Stt ||dz|| ||St ||dz|} tt|| ||S)zV Compute s**t. Raises ComplexResult if s is negative and t is fractional. rz,negative number raised to a fractional powerrDrrF) rr3r0r"r4r5rmpf_expr/) rutrJrVssignsmansexpsbctsigntmantexptbccs rNmpf_powr>s E4sE4s JKK qy1rEkT4Z8$DD rz 19tXab"3'&)*.55AtS) )"8AtBw"3'$)+/%s<<x47C8$cJ J 47C A 71a=$ ,,rPc|dk(r||zdfSt|}d}d|dt|zzdzz}t\}}}} |dzrM||z}||z}| |dz z } | tt|| z z} | |kDr|| |z z }|| |z z }|} |dz}|s ||fS||z}||z}||zdz }|tt||z z}||kDr|||z z }|||z z }|}|dz})zn-th power of a fixed point number with precision prec Returns the power in the form man, exp, man * 2**exp ~= y**n rBrrr)rr"rrI) ynrJbcexpworkprec_pmpepbcs rN int_pow_fixedrZs?  Av!ax !B CD1Xa[=(1,-HNAr2s q5ABCB 26MCB#I//CX~CL)cHn$ FA r6M aC#g "Wq[ '#a2g,' ' =bk"A 2= CB F+ rPcd} t||||zz }tt|d|z z}d}|} |} t|||zD]e} t||dz | \} } t| |dz | z| z | z | z }t|d| z|z | z|z}||dz t|| | z zz|z}| } g|S#t$r?t |}t |}t d||}t |||}t|}YwxYw)N2g?rrFrB) rrrI OverflowErrorrr2rrrrr)rrrJexp1starty1rpfnextraextra1prevprorrriBs rN nthroot_fixedrs1 E Atag~ & BQK ! E F E U +q!A#u-B B1e a",v5 6 1ac$hvo & * !A#1U7++ +a /  H  b%  a[ !R ' BE " 1I s,B//AC76C7c|\}}}}|r td|sM|tk(rtS|tk(r|dkDrtS|dk(rtStS|stS|dkrtStSd}|dkrI|dk(rtS|dk(r t |||S|dk(rt t|||St|}d}d} || z }| }|d kDr||d k\s|td d |d zzzkr`|dz} t|} td| | } t|| | |} t| d| d| d| d||}|rt t|| z |S|S|d|zz||zz } |dkDr| | dzz } | | |zz } || z }d}||z}|dkrd}| }|r |||zz }n|||zz}t||}d}||z|dz | zz |z|z }d}|r |dk(s|dk(rd}n |dk(s|dk(rd}t||z|| |}t||||}|rt t|| z |S|S)zanth-root of a positive number Use the Newton method when faster, otherwise use x**(1/n) znth root of a negative numberrFrBrrDTrr?i NgL<@gףp= ?rFr\urdrM)rr'r!r"r%r+r0r5rIrr2rr rrr)rurrJrVsignmanrr flag_inverse extra_inverseprec2rnthrpshiftsign1esrr rnd_shifts rN mpf_nthrootrs D#sB ;<<  9K :1u Av KK q5L L1u 6K 61dC( ( 74D#. .S!    B2v1:C$D.,@(A!Ar  a[1b%( AsE3 ' adAaD!A$!dC 8 4D$6< <H 1Q3J$q& !E 2v a JE E UB AvS  A  A  e C E Y!U{ "Q &% /DI #:I #:I I q% 6CS$c*AtQ] 2C88rPct|d||S)zcubic root of a positive numberr\)r)rurJrVs rNmpf_cbrtrs q!T3 ''rPcB|tvrt|\}}||k\r|||z z S|dz}|tkr3| t|}t|}|||z z}t ||||zz}n"t t t||dz|}|tkr ||ft|<|||z z S)z` Fast computation of log(n), caching the value for small n, intended for zeta sums. rFr) log_int_cacheLOG_TAYLOR_SHIFTr}rlog_taylor_cachedrrrMAX_LOG_INT_CACHE) rrJln2valuevprecrWrpxrXs rN log_int_fixedrs  M$Q' u D=UT\* * B  ;B-C QK "Q$K a $qu , WXa["Q$/ 4 r7 a D>rPctd} ||zdz }|dkDrt||z dkr|St||z}|}|dz }6)z^ Fixed-point computation of agm(a,b), assuming a, b both close to unit magnitude. rrrr=)absr8)r_r`rJianews rN agm_fixedrsS A !ax q5S4[1_H qsO  Q rPcR||z|z }|x}x}}|r||z|z }||z|z }||z }|r|t|zz }||z|dz z }|t||zz|z }|x}x}}|r||z|z }||z|z }||z }|rt|z|dzz}||z|z }t|||}t||z|zS)a* Fixed-point computation of -log(x) = log(1/x), suitable for large precision. It is required that 0 < x < 1. The algorithm used is the Sasaki-Kanada formula -log(x) = pi/agm(theta2(x)^2,theta3(x)^2). [1] For faster convergence in the theta functions, x should be chosen closer to 0. Guard bits must be added by the caller. HYPOTHESIS: if x = 2^(-n), n bits need to be added to account for the truncation to a fixed-point number, and this is the only significant cancellation error. The number of bits lost to roundoff is small and can be considered constant. [1] Richard P. Brent, "Fast Algorithms for High-Precision Computation of Elementary Functions (extended abstract)", http://wwwmaths.anu.edu.au/~brent/pd/RNC7-Brent.pdf rBr)rr8rr)rrJx2rur_r`rros rNlog_agmr)s2 A#$BNANA rTdN qSTM Q '4-A 1QA :ag  %AMAMA rTdN qSTM Q  $1a4 A 1t A!QA TNd "q ((rPcDt|D]}t||z}t|z}||z |z||zz}|dk}|r| }||z|z }||z|z }|} |dz} ||z|z }d} |r%| || zz } | dz } | || zz } ||z|z }| dz } |r%| |z|z } | | zd|zz} |r| S| S)a: Fixed-point calculation of log(x). It is assumed that x is close enough to 1 for the Taylor series to converge quickly. Convergence can be improved by specifying r > 0 to compute log(x^(1/2^r))*2^r, at the cost of performing r square roots. The caller must provide sufficient guard bits. rr\rrBr)rr8r) rrJrpronerXrv2v4s0s1krus rN log_taylorrXsAY  q$w  T/C C%$!C% A q5D B A#$B R%DB B AB 2$A A  a1f  Q a1f  rTdN Q R%DB BAaCA r HrPc||tz z }t|}||z }||ftvrt||f\}}n&||tz z}t||d}||ft||f<||z}||z}||z |z|z}||zt|z|zz}||z|z } | | z|z } |} |dz} || z|z }d} |r%| || zz } | dz } | || zz } || z|z }| dz } |r%| | z|z } | | zdz}||zS)zd Fixed-point computation of log(x), assuming x in (0.5, 2) and prec <= LOG_TAYLOR_PREC. r=r\rrBr)rcache_prec_stepslog_taylor_cacherr )rrJr cached_precdprecr_log_arrXrrrrrrus rNrrzsU d##$A"4(K $ E ;++#A{N35 + 00 11k1-,-u:K(%KA eOE a%DQA dDA-.A A#$B R%DB B AB 2$A A  ad  Q ad  rTdN Q R%DB B1 A 19rPc@|\}}}}|s-|tk(rtS|tk(rtS|tk(rtS|r t d|dz}|dk(r#|stSt |t |z| ||S||z}t|} | dkr^d| z } | r t|z|z } n|t|dz zz } t| } || z } | |kDr!t| | | |z | | d}t|| ||S|| z }| dkDr)t| |kDrt |t |z| ||S|tkr-tt|||z |}|r[||t |zz }nI| tz}||z }t!||}|| z }t#t%||| }||t |zz}t || ||S)zj Compute the natural logarithm of the mpf value x. If x is negative, ComplexResult is raised. zlogarithm of a negative numberr?rri')r!r&r%r'rrr}rrrr r7LOG_TAYLOR_PRECrrLOG_AGM_MAG_PREC_RATIOr1rr)rrJrVrrrrrWmagabs_magrrr cancellationrrc optimal_magrs rNrrs D#sB  :e| 9Tk 9Tk <== B axLC " -sD#>> b&C#hG !|'  RK3&D'BqD/*DtnCx " %wrz3SAAq%s3 3 , B G r !IbM 1B3cB B _ fS"R%0" 5  Yr]" "Ac11 #  aO | Xa_b ) ) Qy}_ B3c **rPc  |ds||}}|dse|ds,||cxk(rtk(rtSt||fvrtStS|tk(rt t |||S|tk(rtStSt ||}t ||}d}t||||z}t|td}|d|dz} |tk(s | | dzkr#t||||zt|d|dz }tt |||dS)z1 Computes log(sqrt(a^2+b^2)) accurately. rr?rFrBr\rD) r!r&r'r%rr*r/r-r#minr1) r_r`rJrVa2b2rh2 cancelled mag_cancelleds rN mpf_log_hypotrs Q4!1 Q4tA 1v~ K :71:tS1 1 9K 1B 1B E Re $BE2&IaL1-ME]eVQY6 RT%ZBqE"Q%(88 9 WRs+R 00rPc|dk\r(tjt||dz z dz }n$tjt|d|zz }d}tt|dzd|z z }d}t ||D]U}||z }|||z z}t ||\}}||z|z}|t |||z z |zt|z|dz|z zz} || z }|}Wt |||z S)Nd5g@Cg@rrB)rlatanrIrr cos_sin_fixedrr) rrJrprextra_prWcossintanr_s rN atan_newtonrs s{ IIc1tBw<)'1 2 IIc!fS$Y& ' E CG E *+AG%& g  "U(O B'SbyS &DG$$ +'2+36B,1O P E !U4Z  rPcdt|dz zdz}||z }||ftvrt||f\}}n%||tz z}t||}||ft||f<||z ||z fS)Nrr?)ratan_taylor_cacheATAN_TAYLOR_SHIFTr)rrJrrr_atan_as rNatan_taylor_get_cachedr"s $q&! "b (E DLE 5z&&%ah/ 6 %++ ,Q&'(&k!U(# J&E/ **rPc8||tz z }t||\}}||z }||z|dz|z ||z|z zt|zzzx}}|dz|z }||z|z } |dz} || z|z }d} |r%||| zz }| dz } | || zz } || z|z }| dz } |r%| |z|z } || z } || zS)NrBr\r)rrr) rrJrr_rrrrXrrrrrus rN atan_taylorr1s t%% &A&q$/IAv AA4iaddlqsd{;w$O PPB Q$$,B r'd B AB RDA A  a1f  Q a1f  V  Q r'd B RA A:rPc ~|stt||dSttt|t|dS)NrD)r1rr,r6)rrJrVs rNatan_infr!Es7 c*B// 9VD,s*;= 1)r(r"rr4r-r/r#r)rrJrVrWr^s rN mpf_acoshr<sY Bq$2>??1ub126A 71a$dC 00rPc z|\}}}}|s|r|ttfvr|Std||z}|dkDr$|dk(r|dk(rttg|Std|dz}|dkr|| krt ||||S|| z }t |t|} tt||} ttt| | |||dS)Nz&atanh(x) is real only for -1 <= x <= 1rrr3r9rD) r!r'rr%r&r7r-r"r.r1rr0) rrJrVrrrrrrWr_r`s rN mpf_atanhr>sD#sB S  HDEE s(C Qw !8q%=& &DEE B Rx "9q$c2 2 t 4AaA WWQ2.c:B ??rPc|\}}}}|s|tk(rtS|St||z}|dk\r2|dks|t|krt t t |||S||zdz}t|} tt| dt|} t| ||} t||} t| | |} t| | |} t| | ||} | S)NrrFr?r)r&r'rrrr9rmpf_phir-r1r#r mpf_cos_pir0r.) rrJrVrrrrsizerWr_r`rrXs rN mpf_fibonaccirCsD#sB  :K s2v;D ax "9.DOT37 7 r B A !Q+A1bA1bA1bA1bA1dC A HrPc|dkr| }d}nd}td|dzz}t||z }td||z}ddt|| zz}||z}|||z z}t|z}|dk(} |tkro||z|z x} } | | z|z } t x} }d}| r5| |dz |zz} | | z } |dz }| |dz |zz} || z }|dz }| | z|z } | r5| |z|z }| r || z |z}n|| z|z}ntd|dzz}||z|z x} } || g}t d|D]}|j|d| z|z t g|z}d}| rPt |D]4}| |dz |zz} | r|dzr||xx| zcc<n ||xx| z cc<|dz }6| |dz|z } | rPt d|D]}||||z|z ||<t||z}|dk(r>t||z||zz }|r||z }n||z}t |D] }||z|z } ||z S|dz }t |D] }||z|z |z }tt||z||zz }|r| }||z ||z fS) z Taylor series for cosh/sinh or cos/sin. type = 0 -- returns exp(x) (slightly faster than cosh+sinh) type = 1 -- returns (cosh(x), sinh(x)) type = 2 -- returns (cos(x), sin(x)) rr?rFrBg333333?rkrD) rIrmaxrEXP_SERIES_U_CUTOFFrrappendsumr8r)rrJtyperrpxmagrrWraltrr_x4rrrrrxpowersrsumsrurXpshifts rNexponential_seriesrQs  1u B Cc MA A; D AtaxA 3q$< E B519A R-C 19C !!A#"Qe]R  1Q3'MA272AFA 1Q3'MA272AFA2" Ae] R# AR# A D$J A#"Q)1 1A NNGBKNR/ 0 1zA~ AY qsAg 1q5$q'Q,'"&q'Q,'Q   72;2%A 1 1AAwwqz)b0DG 1 IO qy qsc2g ' AAAA A1 A Ez A (AA#&C'A ( sCGqs?+ , A5AuH%%rPc$|tkDr t||dSt|dz}||z }t|zx}}d}||z|z x}}|r)||z}||z }|dz }||z}||z }|dz }||z|z }|r)||z|z }||z}|} |r||z|z }|dz}|r|| z S)z Compute exp(x) as a fixed-point number. Works for any x, but for speed should have |x| < 1. For an arbitrary number, use exp(x) = exp(x-m*log(2)) * 2^m where m = floor(x/log(2)). rrErBr)EXP_COSH_CUTOFFrQrIr) rrJrprrrr_rrurs rN exp_basecaserT>s  o!!T1-- D#IAAID$B Acd]A  aq!q&! aq!q&! rTdN  Q$4B RA A qSTM Q  6MrPc|tkDrt||d\}}||z||z fSt||}t||zz|z}||fS)z( Computation of exp(x), exp(-x) r)rSrQrTr)rrJcoshsinhr_r`s rNexp_expneg_basecaserXWsY o'43 dDy$t)##QA T$Y A%A a4KrPc|tkDr t||dS|tz }||z }t|}|tvr;|dtztz z}t|dtzd\}}|dz |dz ft|<t|\}}t|z }||z}||z}|||zz}t |z} |} d} ||z|z } | r2| | z} | | z } | dz } | |z|z } | | z} | | z } | dz } | |z|z } | r2| |z| |zz |z | |z| |zz|z fS)z Compute cos(x), sin(x) as fixed-point numbers, assuming x in [0, pi/2). For an arbitrary number, use x' = x - m*(pi/2) where m = floor(x/(pi/2)) along with quarter-period symmetries. rBrFr)COS_SIN_CACHE_PRECrQCOS_SIN_CACHE_STEPrI cos_sin_cacher) rrJprecsrrwcos_tsin_toffsetrrrr_s rNcos_sin_basecaserbbsh    !!T1-- % %E U A AA  %%&88 9)!R0B-BAF u!2I3 a #LE5 $ &F fE fEeOA T/C C A Q34-A  a161!}1 a161!A#$'71 Ys5y T )c%iE .Ad-J KKrPc|\}}}}|r||z}|dz}|r| }|dkDr0|dk\r+t|td|zz} t| ||z||S|| krtt|||S|dkDrF||z} || z} | dk\r|| z} n|| z } t | } t | | \}} t|}| |z} n||z} | dk\r|| z} n|| z } d}t| |}t|||z ||S|stS|tk(rtS|S)Nr;rg333333?r) mpf_erIr3r7r"r}divmodrTrr&r!)rrJrVrrrrrrWewpmodrarlg2rs rNrrsHD#sB 3h BY $C #:#(bT#X&'Aq#s(D#6 6 "9tT45 5 7HE5[F{6MVG$E"C!S>DAqAA #IA2XF{6MVG$A1b!C2tS11  Ez HrPc|\}}}}|s^|r\|r$|tk(rtS|tk(rtStS|tk(r ttfS|tk(r ttfSttfS||z}|dz} |dkrC|| kr7|rt |d|z ||St td||} t ||||} | | fS| | z } |dkDradd|dz zz| kDrS|rt ttg|d|z ||St tt|||dx} } |r t| } | | fS|dkDrF| |z}||z}|dk\r||z}n|| z }t|}t||\}}t|}||z}n|| z}|dk\r||z}n|| z }d}t|| \}}||d|zz z} ||d|zz z } |r| } |r| | z| z}t|| ||St| || z dz ||} t| || z dz ||} | | fS) z4Simultaneously compute (cosh(x), sinh(x)) for real xrdrrrFr\rDrB)r%r"r&r#r'r7r1rr*r,r}rfrIrXr)rrJrVtanhrrrrrrWrVrWrrurhrarrirr_r`s rN mpf_cosh_sinhrms_D#sB S Dy+Ez%<K 9dD\) :tUm+Tz b&C bB Rx "9"1afdC88tQc2Dq$c2D:  t  Rx a#a%j>B "D<#5qvtSIIggaj$D AaC>D u rzd"C"dC00D!B$q&$4D!B$q&$4TzrPcJ|dkDr|d} d|z}||z|z}t|dz }|dz }||z} | dk\r|| z} n|| z } t| |\} } | |kDr|| z } n| } | ||zdz z rt| } | |z } ||z }n$|dz }y|| z }||z} | dk\r|| z} n|| z } d} | | |fS)Nrrr?rF)rrfrI)rrrrWrcancellation_precrhpi2pi4rarrrsmalls rNmod_pi2rss Qw  "a H00E57#C(CS[F{6MVG$!S>DAq3waC#FHS[ FA), t r Q;v A A  a8OrPcz|\}}}}|s9|r tt} } n tt} } |dk(r| | fS|dk(r| S|dk(r| S|dk(r| S||z} |dz} | dkrj| | krd|rt|t | }t td||} t |d|z ||} |dk(r| | fS|dk(r| S|dk(r| S|dk(rt ||||S|r|dk\rr|dk(r%t} tt ft|dz|z } n|dk(r t t} } n tt} } |dk(r| | fS|dk(r| S|dk(r| S|dk(rt| | ||S|| dz z dzdz } || | dz zz }t||z}|dz|z } || z}|dk\r||z}n|| z }|t| z| z }nt||| | \}} } t|| \} } | dz}|dk(r| | } } n|dk(r| | } } n |dk(r| | } } |r| } |dk(r"t| | ||} t| | ||} | | fS|dk(rt| | ||S|dk(rt| | ||S|dk(rt| | ||Sy)z which: 0 -- return cos(x), sin(x) 1 -- return cos(x) 2 -- return sin(x) 3 -- return tan(x) if pi=True, compute for pi*x rrrBr\rFrDN)r'r"r!r/rr7r#boolr0rrrsrbrr)rrJrVwhichpirrrrrrurrWrmag2rarrcs rN mpf_cos_sinrysD#sB  qAqA A:ad{ A:ax A:ax A:ax s(C B Qw "9Avbz*D!T3/AAqvtS1Az!Q$;z!8z!8z+atS"AA "9by5M$sQw-$"67u1e1z!Q$;z!8z!8z'!Qc"::sd1fo "q (QC46]#}s" BY r Q;v A A x|^ "3S"-1b Ar "DAq AA aAA aQBA aA2A B z RCs + RCs +!t  zAsD#.. zAsD#.. zQ4--rPct|||dSNrryrrJrVs rNmpf_cosr~b[D#q-I&IrPct|||dS)NrBr|r}s rNmpf_sinrcrrPct|||dS)Nr\r|r}s rNmpf_tanrdrrPc t|||ddS)Nrrr|r}s rNmpf_cos_sin_piresK4aQR4S-SrPc t|||ddSr{r|r}s rNrArAf AtS!Q0O)OrPc t|||ddS)NrBrr|r}s rN mpf_sin_pirgrrPc"t|||dSNrrmr}s rNmpf_coshrhmAtS.I!.L'LrPc"t|||dSr{rr}s rNmpf_sinhrirrPc t|||dS)Nr)rlrr}s rNmpf_tanhrjsmAtSq.Q'QrPc|t|dz }t||\}}t|}t||\}}|dz}|dk(r||fS|dk(r| |fS|dk(r| | fS|dk(r|| fSy)Nrr\rrB)rrfrIrb)rrJrprrrrurcs rNrros {tAv !S>DAq AA At $DAq AAAvad{Avqb!e|Avqb1"f}Ava!e|vrPc| t|}t||\}}t|}t||}|dk\r||zS|| z Sr)r}rfrIrT)rrJrrrrXs rN exp_fixedr{sP {o !S>DAq AAQAAvAv aRyrPsagez)Warning: Sage imports in libelefun failed)F)FNr)r)rRrlrbackendrrrrr r r libmpfr r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8 libintmathr9rSrGrZr[r\rrrrrrr$rrrrrrSrZr]rqrvr}rrrrrrrrrrrr@rre mpf_degreempf_ln2mpf_ln10rr mpf_sqrtpimpf_ln_sqrt2pirrrrrrrrrrrrrrrr!r&r(r5r7r:r<r>rCrQrTrXrbrrmrsryr~rrrrArrrrrrsage.libs.mpmath.ext_libmplibsmpmath ext_libmp_lbmp ImportErrorAttributeErrorrrPrNrs5  GG             hOO h  r7 8O,Q. /BAQT/2256QqSAAB * " '   AA??8 X Y V R,     i ( h ' g & l + i ( j )CC ,, - #$45'-8"l ,!+Qf%(,  -)^  D D$F+P%1X!$ +(C % +F)!(F% 0% 0&%"&1&@* * 8I&V2 L:$* Z *@F!H(qUM.^$I#I#I *S&O&O$L$L$Q   f ;22>>----------OO ++ ++   (; 9:;sA=KK-,K-