K idZddlZddlZddlmZdej vr*ej jddejd<dZ ej djd sej dZ dd l dd l m Z dd Zd \ZZZZZdZdZdZedk(rU ddlmZedj4ZedeZej?Z eee eZ!ede!ez yy#e$r edeZYFwxYw)a  Torture tests for asymptotics and high precision evaluation of special functions. (Other torture tests may also be placed here.) Running this file (gmpy recommended!) takes several CPU minutes. With Python 2.6+, multiprocessing is used automatically to run tests in parallel if many cores are available. (A single test may take between a second and several minutes; possibly more.) The idea: * We evaluate functions at positive, negative, imaginary, 45- and 135-degree complex values with magnitudes between 10^-20 to 10^20, at precisions between 5 and 150 digits (we can go even higher for fast functions). * Comparing the result from two different precision levels provides a strong consistency check (particularly for functions that use different algorithms at different precision levels). * That the computation finishes at all (without failure), within reasonable time, provides a check that evaluation works at all: that the code runs, that it doesn't get stuck in an infinite loop, and that it doesn't use some extremely slowly algorithm where it could use a faster one. TODO: * Speed up those functions that take long to finish! * Generalize to test more cases; more options. * Implement a timeout mechanism. * Some functions are notably absent, including the following: * inverse trigonometric functions (some become inaccurate for complex arguments) * ci, si (not implemented properly for large complex arguments) * zeta functions (need to modify test not to try too large imaginary values) * and others... N) default_timerz-nogmpyY MPMATH_NOGMPYz.py)*)exec_c gd}|Dcgc] }||ks | }}d}tdd}|r|gdz }|D]'}|rtjjddt_t d|zd z } | } | tz} | d tzz} | d tzz} tt|D]}|rtd ||z||t_|| || || || || f}|d k7r]||d z }|d |d || ||d |d || ||d|d|| ||d|d|| ||d|d|| |}*|r tyycc}w)N) 2Ziiii'ct||z t|z tdtd| dzkryttdtd|td|td|td|td t||z td t||z t|z t) N zError!zInput:zdps =z Result 1:z Result 2:zAbsolute error:zRelative error:)absworkprecpowerprintAssertionError)xypinpts Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpmath/tests/torture.pycheckztest_asymp..check:s qs8CF?0\Xb\%0aRT: :   h h gq k1 k1 QqS* QqS#a&1ir)iiirdiz. r rgW/'?rrzTesting dps = %sr) rangesysstdoutwritempdpsmpfjlenr)fmaxdpsverbose huge_ranger*rr exponentsnxposxnegximag xcomplex1 xcomplex2inewprevs r test_asympr<7s 1C )Q&[1 )C ) c" I66   JJ  T "2wzF"uQ!A#J "Q$K s3x A(3q612VBFD'1T7AeHa lAiLHCAv!Hd1gs1vq$/d1gs1vq$/d1gs1vq%0d1gs1vq)4d1gs1vq)4D , M *s E-E-)g?gg @r$r"ctd\}}|dzdk(sJ|dk(sJdt_tt ddzdk(sJd t_tt ddzd k(sJdt_y) Ni(#ld( lc|l fT-kfKx]r rr!zy-2.58183325604736e+987675256497386331227838638980680030172857347883537824464410652557820800494271520411283004120790908623rz-2.5818332560473632073252488656039475548106223822913e+987675256497386331227838638980680030172857347883537824464410652557820800494271520411283004120790908623)bernfracr)r*str bernoulli)rqs rtest_bernoulli_hugerBds D>DAq v: ## # ; ;; ; BF yS! "'b bb b BF yS! "'E EE E BFr a test_bernoulli_huge() test_asymp(lambda z: +pi, maxdps=10000) test_asymp(lambda z: +e, maxdps=10000) test_asymp(lambda z: +ln2, maxdps=10000) test_asymp(lambda z: +ln10, maxdps=10000) test_asymp(lambda z: +phi, maxdps=10000) test_asymp(lambda z: +catalan, maxdps=5000) test_asymp(lambda z: +euler, maxdps=5000) test_asymp(lambda z: +glaisher, maxdps=1000) test_asymp(lambda z: +khinchin, maxdps=1000) test_asymp(lambda z: +twinprime, maxdps=150) test_asymp(lambda z: stieltjes(2), maxdps=150) test_asymp(lambda z: +mertens, maxdps=150) test_asymp(lambda z: +apery, maxdps=5000) test_asymp(sqrt, maxdps=10000, huge_range=True) test_asymp(cbrt, maxdps=5000, huge_range=True) test_asymp(lambda z: root(z,4), maxdps=5000, huge_range=True) test_asymp(lambda z: root(z,-5), maxdps=5000, huge_range=True) test_asymp(exp, maxdps=5000, huge_range=True) test_asymp(expm1, maxdps=1500) test_asymp(ln, maxdps=5000, huge_range=True) test_asymp(cosh, maxdps=5000) test_asymp(sinh, maxdps=5000) test_asymp(tanh, maxdps=1500) test_asymp(sin, maxdps=5000, huge_range=True) test_asymp(cos, maxdps=5000, huge_range=True) test_asymp(tan, maxdps=1500) test_asymp(agm, maxdps=1500, huge_range=True) test_asymp(ellipk, maxdps=1500) test_asymp(ellipe, maxdps=1500) test_asymp(lambertw, huge_range=True) test_asymp(lambda z: lambertw(z,-1)) test_asymp(lambda z: lambertw(z,1)) test_asymp(lambda z: lambertw(z,4)) test_asymp(gamma) test_asymp(loggamma) # huge_range=True ? test_asymp(ei) test_asymp(e1) test_asymp(li, huge_range=True) test_asymp(ci) test_asymp(si) test_asymp(chi) test_asymp(shi) test_asymp(erf) test_asymp(erfc) test_asymp(erfi) test_asymp(lambda z: besselj(2, z)) test_asymp(lambda z: bessely(2, z)) test_asymp(lambda z: besseli(2, z)) test_asymp(lambda z: besselk(2, z)) test_asymp(lambda z: besselj(-2.25, z)) test_asymp(lambda z: bessely(-2.25, z)) test_asymp(lambda z: besseli(-2.25, z)) test_asymp(lambda z: besselk(-2.25, z)) test_asymp(airyai) test_asymp(airybi) test_asymp(lambda z: hyp0f1(a1, z)) test_asymp(lambda z: hyp1f1(a1, a2, z)) test_asymp(lambda z: hyp1f2(a1, a2, a3, z)) test_asymp(lambda z: hyp2f0(a1, a2, z)) test_asymp(lambda z: hyperu(a1, a2, z)) test_asymp(lambda z: hyp2f1(a1, a2, a3, z)) test_asymp(lambda z: hyp2f2(a1, a2, a3, a4, z)) test_asymp(lambda z: hyp2f3(a1, a2, a3, a4, a5, z)) test_asymp(lambda z: coulombf(a1, a2, z)) test_asymp(lambda z: coulombg(a1, a2, z)) test_asymp(lambda z: polylog(2,z)) test_asymp(lambda z: polylog(3,z)) test_asymp(lambda z: polylog(-2,z)) test_asymp(lambda z: expint(4, z)) test_asymp(lambda z: expint(-4, z)) test_asymp(lambda z: expint(2.25, z)) test_asymp(lambda z: gammainc(2.5, z, 5)) test_asymp(lambda z: gammainc(2.5, 5, z)) test_asymp(lambda z: hermite(3, z)) test_asymp(lambda z: hermite(2.5, z)) test_asymp(lambda z: legendre(3, z)) test_asymp(lambda z: legendre(4, z)) test_asymp(lambda z: legendre(2.5, z)) test_asymp(lambda z: legenp(a1, a2, z)) test_asymp(lambda z: legenq(a1, a2, z), maxdps=90) # abnormally slow test_asymp(lambda z: jtheta(1, z, 0.5)) test_asymp(lambda z: jtheta(2, z, 0.5)) test_asymp(lambda z: jtheta(3, z, 0.5)) test_asymp(lambda z: jtheta(4, z, 0.5)) test_asymp(lambda z: jtheta(1, z, 0.5, 1)) test_asymp(lambda z: jtheta(2, z, 0.5, 1)) test_asymp(lambda z: jtheta(3, z, 0.5, 1)) test_asymp(lambda z: jtheta(4, z, 0.5, 1)) test_asymp(barnesg, maxdps=90) ct|vrQt|t}t|t t t}||z }td|d|dyy)NzTime:forz(OK))filtrclockr globalslocals)linet1t2elapseds rtestitrMsL t| d W dGIvx( WR% gwtV4 r __main__)Poolz"Running tests with multiprocessingzNot using multiprocessingzCumulative wall time:)rFF)"__doc__r&ostimeitrrFargvremoveenvironrEendswithmpmathmpmath.libmp.backendr r<a1a2a3a4a5rBcasesrM__name__multiprocessingrOmapmapfr ImportErrorrJ splitlinestasksrKr rrgs%P) HHOOI"%BJJ  xx|U# 88B