L ii8|ddlZddlZddlZddlmZddlZddlmZddl Z ddl m Z  ddl Z GddZGddZGd d ZGd d Zd ZGddZdZdZdZdZdZ ddlZdeevZGddeZdej<dfdZdZ dZ!ddZ"y#e $rYwxYw#e $rdZY;wxYw) N) zip_longest)assert_)assert_func_equalcVeZdZdZej ej ddfdZdZdZy)ArgzGenerate a set of numbers on the real axis, concentrating on 'interesting' regions and covering all orders of magnitude. TcF||kDr td|tj k(r&dtjtj z}|tjk(r&dtjtj z}||c|_|_||c|_|_ y)Nz#a should be less than or equal to bg?) ValueErrornpinffinfofloatmaxab inclusive_a inclusive_b)selfrrrrs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/special/_mptestutils.py__init__z Arg.__init__s~ q5BC C <RXXe_(((A ;BHHUO'''AA-8+*$*cx|dkr td|dzdk(r|dz}|}n |dz}|dz}|dk\r?tjtj|tj||}n|dkDr|dkrtj|||}n|dkDr\tj|d|d}tjdtj||}tj ||f}n4|dk(rw|dkrrtjd||}|j dkDrtj|d} nd} tjd| |d}tj ||f}n|dzdk(r|dz} | } n |dz} | dz} tjdd|d}|j dkDrtj|d} nd} tjd| | d} tjdtj|| } tj | || f}tj|S) Nrza should be positive F)endpointi)r r logspacelog10linspacehstacksizesort)rrrnnlogptsnlinptsptslinptslogptsrightnlogpts1nlogpts2logpts1logpts2s r_positive_valueszArg._positive_values's q534 4 q5A:dGGdGkG 7++bhhqk288A;:C Uq2v++aA&C U[[B%@F[[BHHQK9F))VV,-C !VR[[Aw/F{{Q+[[eWuEF))VV,-C {a"A:#"A:#a<[[B%@F{{Q+kk#uhGGkk!RXXa[(;G))Wfg67Cwws|rc2|j|j}}||k(rtj|S|js|dz }|j s|dz }|dzdk(r|dz}|}n |dz}|dz}|dk\r|j |||}g}nN|dkrg}|j | | | }n0|j d||}|j d| |dz }|dd}tj|ddd|f}|js|dd}|j s|dd}|S)z%Return an array containing n numbers.rrrN)rrr zerosrrr.r ) rr#rrn1n2posptsnegptsr&s rvaluesz Arg.values_sBvvtvv1 688A;  FA FA q5A:ABBABaB 6**1a3FF !VF++QBA66F**1a4F++Ar26::FABZFii"v./ab'Ccr(C rN) __name__ __module__ __qualname____doc__r r rr.r6rrrrs- &&BFF$ F6p#rrceZdZdZdZy)FixedArgc8tj||_yN)r asarray_values)rr6s rrzFixedArg.__init__szz&) rc|jSr?)rA)rr#s rr6zFixedArg.valuess ||rNr7r8r9rr6r;rrr=r=s *rr=ceZdZeej ej eej ej fdZdZy) ComplexArgct|j|j|_t|j|j|_yr?)rrealimagrrrs rrzComplexArg.__init__s.' ' rcttjtj|}|jj |}|j j |dz}|dddfd|dddfzzjS)Nry?)intr floorsqrtrGr6rHravel)rr#mxys rr6zComplexArg.valuessq $ % II  Q  II  QU #!D& BqayL(//11rN)r7r8r9complexr r rr6r;rrrErEs3 "&&266'2gbffbff6M(2rrEceZdZddZdZy)IntArgc ||_||_yr?)rrrIs rrzIntArg.__init__srcpt|j|jjt d|dzz|dz j t }tjdd}tjtj||f}|||jk\||jkz}|S)Nrr) rrrr6rastyperKr arangeuniquer_)rr#v1v2vs rr6z IntArg.valuess  ' 'A1Hac(: ; B B3 G YYr1  IIbeeBFm $ qDFF{q466z* +rN)iirCr;rrrTrTs rrTc :t|tjr|j}|St |}tj |Dcgc]}t|t rdndc}}||t|z zjtdz}t||Dcgc]\}}|j|}}}tjtjtj|j|dj }|Scc}wcc}}w)Ng?g?rr0) isinstancer ndarraycopylenr@rEsumrYrKzipr6arraybroadcast_arraysix_reshapeT)argspecr#argsnargsspecmsrOs rget_argsrqs'2::&||~ KG  ZZFM NdJtZ0Sc 9 N "SW*o % %c *Q ..1'2.>?74 A??xx++RVVT];<DDUBOQQ K O@s D#Dc(eZdZ ddZdZdZy) MpmathDataNc |0 ttjjdd}|rdnd}||_||_||_||_||_ ||_ ||_ | |_ | |_ | |_t|jt j"r>t!j$|jj&t j(|_n6t-|jDcgc]}t|t.c}|_| |_ | |_|r|dk(r t3|dd}|r|dk(r t3|dd}||_| |_y#t$rd}Y7wxYwcc}w)N SCIPY_XSLOW0Fiizr7)rKosenvirongetr scipy_func mpmath_funcarg_specdpsprecr#rtolatolignore_inf_signnan_okrar rb issubdtypedtypecomplexfloating is_complexanyrEdistinguish_nan_and_infgetattrname param_filter)rrzr{r|rr}r~r#rrrrrris_xslowargs rrzMpmathData.__init__s? 9 !rzz~~mSAB!cA$&     . dmmRZZ 0 mmDMM,?,?ASASTDO!8< FC,FDO /'>$tz):z48Dtz); D9D (9 !  !&Gs)E.E( E%$E%c | tjjdtjj }t jjt jj}} jjg}ndg}jjt j_ tj|jtjr t d nd d t|D]|\}}|t j_ tj fd|dj"j$j&j(j*j, n||ct j_t j_ y#t.$rN|t1|d z k\r9t3j4\}}} |j6| ur|j9| |YwxYw#||ct j_t j_ wxYw) Nic>tjt|Sr?)mpmathmpcrRrPs rmptypez MpmathData.check..mptypes!::gaj11rc>tjt|Sr?)rmpfrrs rrz MpmathData.check..mptypes!::eAh//rct|jddt|jzzkDrtjSt |jS)NgؗҜ.pytypes;166{UAAFF O%<<!vv (00rcBjt|Sr?)r{map)rrrrs rz"MpmathData.check.. s 6*:$*:*:CN*K#LrF) vectorizedrrrrrrr)r randomseedrqr|r#rmpr}r~rrr mpc2complex enumeraterrzrrrrrrAssertionErrorrdsysexc_info __traceback__with_traceback) rargarrold_dpsold_precdps_listjr}tpvaluetbrrs ` @@rcheckzMpmathData.checks t$--0#IIMM699>>4 >xx# HH:4yy$!%  }}V\\2+=+=>$201$H- $3 # $%L#(!YY!YY(,(<(<040L0L#{{%)%6%6 ! $2-4X )FIIM699>&$CM!O+(+  E2 ..b8"'"6"6r"::# ,$-4X )FIIM699>s38B,H%A F4H4AH H H  H-H;cZ|jrd|jdSd|jdS)Nz >)rr)rs r__repr__zMpmathData.__repr__s/ ??"499+[9 9"499+Q/ /r) NNNNgHz>gYnFTTN)r7r8r9rrrr;rrrsrss?C>D@D+/')R<>|0rrsc:t|i|}|jyr?)rsr)rkwds rassert_mpmath_equalr%sAAGGIrcLtjjd|S)Nz8 Test not yet functional (too slow), needs more work.)reason)pytestmarkskip)funcs rnonfunctional_tooslowr*s) ;;  I     rcFttj|dddS)z Convert an mpf to the nearest floating point number. Just using float directly doesn't work because of results like this: with mp.workdps(50): float(mpf("0.99999999999999999")) = 0.9999999999999999 r min_fixed max_fixed)rrnstrrs rrr4s Qa1= >>rcftt|jt|jSr?)rRrrGrHrs rrr@s! 9QVV$i&7 88rcdfd}|S)Ncbt|tjr t|St |Sr?)rarrrRrrs rtofloatztrace_args..tofloatEs# a $1: 8Orctjjtt |dtjj  |i|}tjjd|tjjdtjj |S#tjjdtjj wxYw)N: z->  )rstderrwritetuplerflush)rrrrrs rwrapztrace_args..wrapKs E#gq/25R89  a2A JJ  s1%[ ) JJ  T " JJ    JJ  T " JJ   s *B???C>r;)rrrs` @r trace_argsrDs  Kr setitimerFc eZdZy) TimeoutErrorN)r7r8r9r;rrrr_srrr Tc@tr|r dfd}|Sfd}|S)a Decorator for setting a timeout for pure-Python functions. If the function does not return within `timeout` seconds, the value `return_val` is returned instead. On POSIX this uses SIGALRM by default. On non-POSIX, settrace is used. Do not use this with threads: the SIGALRM implementation does probably not work well. The settrace implementation only traces the current thread. The settrace implementation slows down execution speed. Slowdown by a factor around 10 is probably typical. ctr?)r)signumframes rsigalrm_handlerz%time_limited..sigalrm_handlerss . rcfd}|S)Nctjtj}tjtj |i|tjtjdtjtj|S#t$rMcYtjtjdtjtj|SwxYw#tjtjdtjtj|wxYw)Nr)signalSIGALRMr ITIMER_REALr)rr old_handlerr return_valrtimeouts rrz(time_limited..deco..wrapws$mmFNNOL   !3!3W=?>b>$$V%7%7;MM&..+> $&%%$$V%7%7;MM&..+> &$$V%7%7;MM&..+>s% B C1&C40C11C44A D>r;)rrrrrs` rdecoztime_limited..decovs ?Krcfd}|S)NcNtjfdtj |i|tjdS#t$r/tjdcYtjdSwxYw#tjdwxYw)NcPtjz kDr tSr?)timer)reventr start_timertraces rrz7time_limited..deco..wrap..traces#yy{Z/'9*n, Lr)rrsettracer)rrrrrrrs @@rrz(time_limited..deco..wraps}!YY[ ! U#'>b> LL& $&LL&%%LL& &LL&s#A B 2B B  B B$r;)rrrrs` rrztime_limited..decos 'Kr)POSIX)rr use_sigalrmrrs`` @r time_limitedrcs'  ! < K# " Krcfd}|S)z9Decorate function to return nan if it raises an exceptioncT |i|S#t$rtjcYSwxYwr?) Exceptionr r)rrrs rrzexception_to_nan..wraps. >b> ! 66M s  ''r;rrs` rexception_to_nanrs Krcfd}|S)z1Decorate function to return nan if it returns infcb|i|}tj|stjS|Sr?)r isfiniter)rrr_rs rrzinf_to_nan..wraps) !NrN{{1~66Mrr;rs` r inf_to_nanrs Krc g}tt||D]`\}\}}|| tdtj||z ||tj|zzkDsM|j |||fbt |}|dkDrtttj|} dg} | j d|ddzd|D]\}}}tj|| dd } tj|| dd } |dk(rd } n1tj||z |z } tj| d } | j |d | d | d| dtddj| yy)z| Compare lists of mpmath.mpf's or mpmath.mpc's directly so that it can be done to higher precision than double. Nz,Lengths of inputs res and std are not equal.rz Bad results (z out of rz) for the following points:rr rz != z (rdiff )Fr)rrr rfabsappendrdrKrr rrrjoin)resstdrrfailureskresvalstdvalnfailndigitsmsgresrepstdreprdiffs rmp_assert_allcloser s H(S#)>?1 FF >V^KL L ;;v '$fkk&6I1I*I I OOQ/ 0 1 ME qyc"((4.)*d ]5'!a%8STU!) E Avv[[AKF[[AKF{ Vf_f$<= E1- JJ!Bvhd6((5'C D E tyy~&r)rgFFg<)#rwrr itertoolsrnumpyr numpy.testingrrscipy.special._testutilsrr ImportErrorrr=rErTrqrsrrrrrrdirrrrrrrrr r;rrrs !! 6 ll^ 2 2    l0l0^   ?9( CK 'E  9 T1h'{   Z  Es#B&1B1&B.-B.1B;:B;