a ze]@sddlmZmZmZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZdZedZedZedZejjZejjZd\ZZeed kZed krejdZneZe j !epe j"Z#e j $e#d Z%e j $e#d Z&d dZ'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-d+ddZ.Gdd d Z/Gd!d"d"e0Z1Gd#d$d$e2Z3Gd%d&d&ej4Z5Gd'd(d(ej4Z6d)d*Z7ed kre7dS),) run_unittestverboserequires_IEEE_754)supportNgh㈵>naninf-inf)7yACg):@g7yAC__main__zmath_testcases.txtzcmath_testcases.txtcCs.tdtd|d}|dkr*|d}|S)NzSr)reversedrange bit_lengthrr)rinnerZouterirrr py_factorial_s * rcCsLtt|t|}t||}||ks0||kr4dSd}|||||SdS)NzAerror = {:.3g} ({:d} ulps); permitted error = {:.3g} or {:d} ulps)absrformat)expectedgotulp_tolabs_tolZ ulp_errorZ abs_errorfmtrrr ulp_abs_checkjs  r&c cst|}|D]x}d|vr,|d|d}|s6q|d\}}|\}}}|}|d} |dd} ||t|t| | fVqWdn1s0YdS)N--->rr)openindexstripsplitfloat) fnamefplinelhsrhsidfnarg rhs_piecesexpflagsrrrparse_mtestfile|s  r9c cst|}|D]}|ds|s&q|d\}}|\}}}}|} | d| d} } | dd} ||t|t|t| t| | fVqWdn1s0YdS)Nr'r(rr)r) startswithr+r,r-) r.r/r0r1r2r3r4Zarg_realZarg_imagr6Zexp_realZexp_imagr8rrrparse_testfiles    r<cCs||kr dSd}t|tr.t|tr.t|}nt|trJt|trJt|}t|trt|trt|rxt|rxd}n$t|st|rnt||||}|durd}|||}|d|7}|SdSdS)Nz not equalzexpected {!r}, got {!r}z ({})) isinstancer-intmathisnanisinfr&r )r!r"r#r$failurefail_fmtZfail_msgrrr result_checks&  rFc@seZdZddZddZdS) FloatLikecCs ||_dSNvalueselfrJrrr__init__szFloatLike.__init__cCs|jSrHrIrLrrr __float__szFloatLike.__float__N)__name__ __module__ __qualname__rMrOrrrrrGsrGc@s eZdZdS) IntSubclassNrPrQrRrrrrrSsrSc@seZdZddZddZdS) MyIndexablecCs ||_dSrHrIrKrrrrMszMyIndexable.__init__cCs|jSrHrIrNrrr __index__szMyIndexable.__index__NrPrQrRrMrVrrrrrUsrUc@sneZdZdddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ e ddZddZeejdkoedvdddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zejd*d+Zd,d-Zd.d/Zd0d1Z e ee!d2d3d4Z"d5d6Z#d7d8Z$d9d:Z%d;d<Z&d=d>Z'd?d@Z(dAdBZ)dCdDZ*e dEdFZ+e e,dGddHdIZ-dJdKZ.dLdMZ/dNdOZ0dPdQZ1e dRdSZ2dTdUZ3dVdWZ4dXdYZ5dZd[Z6d\d]Z7e d^d_Z8d`daZ9dbdcZ:dddeZ;dfdgZe?e@dldmdnZAe dodpZBe dqdrZCdsdtZDdudvZEdwdxZFe dydzZGe d{d|ZHd}d~ZIddZJddZKdS) MathTestsr=r>cCs,t||||}|dur(|d||dS)Nz{}: {})rFfailr )rLnamer"r!r#r$rDrrrftests zMathTests.ftestcCs8|dtjd|dtjd|tjdtjdS)Npig-DT! @egiW @r:)r[rAr\r] assertEqualtaurNrrr testConstantsszMathTests.testConstantscCs|ttj|dtdtj|dtdtjd|dtdd|ttjt|ttjt|ttjdt |ttjdt | t tt dS)Nzacos(-1)zacos(0)rr:zacos(1)r) assertRaises TypeErrorrAacosr[r\ ValueErrorINFNINFeps assertTruerBNANrNrrrtestAcosszMathTests.testAcoscCs|ttj|dtdd|dtdd|ttjd|ttjd|ttt|ttjt| t tt dS)Nzacosh(1)rrzacosh(2)r:g5qB?ra) rbrcrAacoshr[rer^rfrgrirBrjrNrrr testAcosh szMathTests.testAcoshcCs|ttj|dtdtj d|dtdd|dtdtjd|ttjt|ttjt|ttjdt |ttjdt | t tt dS)Nzasin(-1)rar:zasin(0)rzasin(1)r) rbrcrAasinr[r\rerfrgrhrirBrjrNrrrtestAsinszMathTests.testAsincCs|ttj|dtdd|dtdd|dtdd|ttt|ttt|t tt dS) Nzasinh(0)rzasinh(1)rg'ya64?z asinh(-1)rag'ya64) rbrcrAasinhr[r^rfrgrirBrjrNrrr testAsinh"szMathTests.testAsinhcCs|ttj|dtdtj d|dtdd|dtdtjd|dtttjd |d tttj d |t tt dS) Nzatan(-1)razatan(0)rzatan(1)rz atan(inf)r:z atan(-inf)) rbrcrAatanr[r\rfrgrirBrjrNrrrtestAtan+szMathTests.testAtancCs|ttj|dtdd|dtdd|dtdd|ttjd |ttjd |ttjt|ttjt| t tt dS) Nzatanh(0)rz atanh(0.5)?g z?z atanh(-0.5)g zrra) rbrcrArsr[atanhrerfrgrirBrjrNrrr testAtanh4szMathTests.testAtanhcCs|ttj|dtddtj d|dtddtj d|dtddd|d tddtjd|d tddtjd|d td ttj|d td dtj|dtd dtj|td d d |td dd |td td | t td t |dtdttj |dtddtj |dtddtj |tdd d|tddd|tdtd| t tdt |dttttjdd|dttdtjd|dttdtjd|dttd tjd|dttdtjd|dttttjd| t ttt |dttttj dd|dttdtj d|dttdtj d|dttd tj d|d ttdtj d|d!ttttj d| t ttt |d"tdttj|d#tddtjd|d$tdd tjd|tdtd | t tdt |d%tdttj |d&tddtj d|d'tdd tj d|tdtd| t tdt | t tt t| t tt d| t tt d| t tt d | t tt d| t tt t| t tt t dS)(Nz atan2(-1, 0)rarr:z atan2(-1, 1)rrrz atan2(0, 1)z atan2(1, 1)z atan2(1, 0)zatan2(0., -inf)r>zatan2(0., -2.3)ffffffzatan2(0., -0.)ffffff@zatan2(-0., -inf)zatan2(-0., -2.3)zatan2(-0., -0.)zatan2(inf, -inf)zatan2(inf, -2.3)zatan2(inf, -0.)zatan2(inf, 0.)zatan2(inf, 2.3)zatan2(inf, inf)zatan2(-inf, -inf)zatan2(-inf, -2.3)zatan2(-inf, -0.)zatan2(-inf, 0.)zatan2(-inf, 2.3)zatan2(-inf, inf)zatan2(2.3, -inf)zatan2(2.3, -0.)zatan2(2.3, 0.)zatan2(-2.3, -inf)zatan2(-2.3, -0.)zatan2(-2.3, 0.)) rbrcrAatan2r[r\rgr^rfrirBrjrNrrr testAtan2?sf "zMathTests.testAtan2cCsf|ttj|tttd|tdd|tdd|tdd|tdd|tdd |td d |td d|td dGd dd}Gdddt}Gddd}|t|d|t|d|ttdd|ttj||}dd|_ |ttj||ttj|ddS)Nrur??r:rvrrar>rzc@seZdZddZdS)z$MathTests.testCeil..TestCeilcSsdSN*rrNrrr__ceil__sz-MathTests.testCeil..TestCeil.__ceil__NrPrQrRrrrrrTestCeilsrc@seZdZddZdS)z%MathTests.testCeil..FloatCeilcSsdSrrrNrrrrsz.MathTests.testCeil..FloatCeil.__ceil__Nrrrrr FloatCeilsrc@s eZdZdS)z&MathTests.testCeil..TestNoCeilNrTrrrr TestNoCeilsrrg@E@+cWs|SrHrargsrrrz$MathTests.testCeil..) rbrcrAceilr^r@typer-rGr)rLrrrtrrrtestCeil|s* zMathTests.testCeilcCs|tddd|tddd|tddd|tddd|td d d |ttj|tddd|tdd d|ttdt|ttd t|ttdt|ttd t|tdtd|tdtd|tttt|tttt|tttt|tttt|ttt d|ttt t|ttt t|ttt t |t ttt |t td t d dS) Nrrrr>irr|@@rz@) r^rAcopysignrbrcrfrgrirBrjrCrrNrrr testCopysigns0zMathTests.testCopysigncCs|ttj|jdttj ddtdd|dtdd|jdttjddtdd|dttjd z0|ttt |ttt Wn2t y|t tjt |t tjt Yn0|ttt dS) Nz cos(-pi/2)r:rrr$zcos(0)z cos(pi/2)zcos(pi)ra) rbrcrAcosr[r\ulprirBrfrgrerjrNrrrtestCoss&$ zMathTests.testCoswin32)ZARMZARM64zEWindows UCRT is off by 2 ULP this test requires accuracy within 1 ULPcCs|ttj|dtdd|dtddtddd|ttt|ttt|t tt dS)Nzcosh(0)rrzcosh(2)-2*cosh(1)**2r:ra) rbrcrAcoshr[r^rfrgrirBrjrNrrrtestCoshs &zMathTests.testCoshcCsr|ttj|dttjd|dttjdd|dttj dd|d td d dS) Nz degrees(pi)gf@z degrees(pi/2)r:gV@zdegrees(-pi/4)rrgFz degrees(0)r)rbrcrAdegreesr[r\rNrrr testDegreess zMathTests.testDegreescCs|ttj|dtddtj|dtdd|dtdtj|ttt|ttd| t tt |t tjddS) Nzexp(-1)rarzexp(0)rzexp(1)r>@B) rbrcrAr7r[r]r^rfrgrirBrj OverflowErrorrNrrrtestExpszMathTests.testExpcCsN|ttj|dtdd|dtdd|dtdddS)Nzfabs(-1)rarzfabs(0)rzfabs(1))rbrcrAfabsr[rNrrrtestFabsszMathTests.testFabscCs|tddd}tddD]4}||9}|t|||t|t|q |ttjd|ttjdd dS)Nrrra d)r^rA factorialrrrbre)rLtotalrrrr testFactorialszMathTests.testFactorialcCs*|t"|tddWdn1s20Y|t |ttjdWdn1sl0Y|t |ttjdWdn1s0Y|t |ttjdWdn1s0Y|ttjt d|ttjt d|ttjddS)N@xg@r}Ô%I5z5.2) assertWarnsDeprecationWarningr^rArrbrercdecimalDecimalrNrrrtestFactorialNonIntegerss 0 . . .z"MathTests.testFactorialNonIntegerscCsR|ttjdd|t |ttjdWdn1sD0YdS)Nrr}Ô%IT)rbrrArrrrNrrrtestFactorialHugeInputss z!MathTests.testFactorialHugeInputscCsB|ttj|tttd|tdd|tdd|tdd|tdd|tdd|td d Gd d d }Gd ddt}Gddd}|t|d|t|d|ttdd|ttj||}dd|_ |ttj||ttj|ddS)Nrurrrrrvrarrc@seZdZddZdS)z&MathTests.testFloor..TestFloorcSsdSrrrNrrr __floor__sz0MathTests.testFloor..TestFloor.__floor__NrPrQrRrrrrr TestFloorsrc@seZdZddZdS)z'MathTests.testFloor..FloatFloorcSsdSrrrNrrrrsz1MathTests.testFloor..FloatFloor.__floor__Nrrrrr FloatFloorsrc@s eZdZdS)z(MathTests.testFloor..TestNoFloorNrTrrrr TestNoFloor!srrg33333D@)cWs|SrHrrrrrr)rz%MathTests.testFloor..) rbrcrAfloorr^r@rr-rGr)rLrrrrrrr testFloors& zMathTests.testFloorcCs|ttj|dtddd|dtddd|dtddd |d td dd |d td dd |dtd dd|tttd |ttd t|tttt|ttjd d|ttjt d |ttjt d |ttjt d| tdt d| tdt d| tdt d| tdt d| tddd| tdt ddS)Nz fmod(10, 1)rrr>z fmod(10, 0.5)ruz fmod(10, 1.5)rrz fmod(-10, 1)rzzfmod(-10, 0.5)zfmod(-10, 1.5)rr) rbrcrAfmodr[rirBrjrerfrgr^rNrrrtestFmod-s(zMathTests.testFmodcsttjfdd}|dtdd|dtdd|d td d |d td dttdtttdtttt ddS)NcsB||\}}\}}t||tks*||kr>d|||fdSNz%s returned %r, expected %rrrhrY)rZresultr!mantr7ZemantZeexprNrr testfrexpFs z&MathTests.testFrexp..testfrexpz frexp(-1)ra)rvrzfrexp(0)rrrzfrexp(1)r)rurzfrexp(2)r:)rur:) rbrcrAfrexpr^rfrgrirBrj)rLrrrNr testFrexpCs zMathTests.testFrexpz2fsum is not exact on machines with double roundingcs8ddlm}|j|jfdd}gdfdgdfgddfgdd fgd d fgd d fgddfddtddDtdfddtddDtdfgddfgddfddtdddDdgtdfg }d dtdD|fd!dtd"Dd" gd ft|D]x\}\}}zt |}WnNt yl| d#|||fYn(t y| d$|||fYn0|||q*dd%lm}m} m} td"D]r} gd&d'}d} td(D],}| d|d)| } | | 7} || q| |||} |||t |qdS)*Nr) float_infocsd\}}|D]Z}t|\}}tt||}}||krR|||K}|}n |||K}||7}q tttt|d|}|dkrd|d>}|d|t||@o|d|d@}||7}t||S)Nrr:rrr|) rArr@ldexpmaxlenbinrbool)iterableZtmantZtexprrr7tailh)etinymant_digrrmsumhs   " (z MathTests.testFsum..msumr>)rrr0.++gd~QJrgd~Qr)@Crvgg?C)rr9g@C)g@Crrg@C)g?Crugrz&MathTests.testFsum..riz0x1.df11f45f4e61ap+2cSsg|]}d||qS)rrrrrrrrz-0x1.62a2af1bd3624p-1)r rgؗҜ; *Q!/ 61^f^@U@)rAgcdr^rbrcrU)rLrrycabrrrtestGcdsNzMathTests.testGcdc Csddlm}ddlm}tj}tjtjtdt dt df}t t |dD]8}| ||d|ttdd |d|DqR||d d d ||d dd|||d |dd|||d d|dd|dd||tdtdtdtdtd||ddd||dd||d|dtd|d||ddd|ddd|t|ddWdn1s0Y|t|dddWdn1s0Ydtjjd}|ttf|d|Wdn1s,0Y||tt||dtt||dtt||dtt||ttt||ttt||ttt||ttt||t tt||t t t||dt t|t|t|t|dt|t|td|t|dt|t|tt|t|ttd}t dD]&}|||g||t|qt dD]2} td| } |td | d| d| qdS)!NrrFractionr @g@rcss|]}|dVqdS)r:Nr)rrrrr rz&MathTests.testHypot..g(@r*@rr= rr|r>%%@rrzrrur皙?string皙@rrrrr) rr fractionsr rAhypotr]r\sqrtgammasinrrassertAlmostEqualsumr^rrrbrcrr max_10_exprerrfrjrgrirB FLOAT_MAX FLOAT_MIN) rLrr rrrint_too_big_for_float fourthmaxrr7scalerrr testHypotsl  $$,   * ,* $  zMathTests.testHypotc Csddlm}ddlm}tj}tj}||ddd||dddtd D]h}td D]Z}t d d t|D}t d d t|D}| ||||t dd t ||Dq\qP||gdgdd||t gdt gdd||ddd||ddd|||d|df|d|df|d|||dd|ddf|dd|ddf|dd||dd|d||ddd||ddd|d td |d!d"|d td |d"d!||d#d$|d%d$Gd&d'd't } ||| ddd|t|dd(d)Wdn1sZ0Y|t|dWdn1s0Y|t|dd(d*Wdn1s0Y|t|ddWdn1s0Y|t|d+dWdn1s20Y|t|d,d-Wdn1sh0Y|t|dd.Wdn1s0Y|t|d/d0Wdn1s0Yd1tjjd } |ttf|d| fd2Wdn1s"0Y|ttf|d2d| fWdn1s`0Ytd3D]6}tt}}|||f|ft||qrtd4d5dd6ttg} tj| d7d8D]~}tj| d7d8D]h}d9d:t ||D} tttj| r||||tn(tttj | r|!t |||qܐqt"d;} tdD]P}| f|}d"|}||||| t|||||| t|qZtdD]V}t#d|}d<|d7|f}d=}|t||d ||t||d |qdS)>Nrr r )rrr)rrrr)rr:r|)rrr:ra r=css|]}tddVqdSr=Nruniformrkrrrr 9rz%MathTests.testDist..css|]}tddVqdSr%r'r)rrrr :rcss|]\}}||dVqdS)rNrrZpxZqxrrrr =r)g,@r)rrr)r)r:rr,rr:r-r)TTFTF)TFTTFr)g*@g)@g r>rr)rz)r>)rrru)rrr)rrurc@s eZdZdS)zMathTests.testDist..TNrTrrrrT_sr.)rrr=r)pq)rr$)rrr)rr:r|rr)r=rr)rrr=rrabcZxyzr)r:r|rrzrr|)repeatcSsg|]\}}||qSrrr+rrrrrz&MathTests.testDist..rrr)r>r>)$rrrr rAdistrr^rtuplerrzipiterrrbrcrerrrrrrrgrfrj itertoolsproductanymaprCrBrirr)rLDFr5rrrr/r0r.r valuesZdiffsr!rr7r"rrrtestDist*s    "., , ( , * * * * *.. "     zMathTests.testDistc Cs4ttdttddddtddDdd d d g}|D]r}|j|d Rt|}|t|t||||| ||d |d WdqB1s0YqB| t tdWdn1s0Ytd}|t|t| |d td}|t|t| |dGdddt }t|d}|t|t| |d| t t|dWdn1s0Yddtddddg}|D]j}|j|d F| tt|Wdn1s0YWdn1s"0YqdS)NriX>i(FcSs(g|] }tddD]}d||qqS)i(r:)r)rr]rrrrrrz'MathTests.testIsqrt..<rr|i'rirIrraTFrc@seZdZddZddZdS)z(MathTests.testIsqrt..IntegerLikecSs ||_dSrHrIrKrrrrMsz1MathTests.testIsqrt..IntegerLike.__init__cSs|jSrHrIrNrrrrVsz2MathTests.testIsqrt..IntegerLike.__index__NrWrrrr IntegerLikesrCirr za stringz3.5y @gY@r)listrsubTestrAisqrtassertIsrr@assertLessEqualZ assertLessrbrer^objectrrrc)rLrrJrrCZ bad_valuesrrr testIsqrtsF   8 (      . zMathTests.testIsqrtcCsNtj}||ddd||ddd||ddd||ddd||ddd||ddd||ddd||ddd||dd d ||d d d ||d d dd}d}dD]}||}||}|||}||||||||||||| |||||| ||||| |||| ||||| | |||| | |q||d||dd||d d||dd dd||ddd d|t|d|t|dd |t|dd|t|ddd||tdtd d dS)NrrrarrriYrriHrrrl ,`aUx-xB:Vn Ldblme%Y%l};T^ )rl|/Kr2ri7rr)rAlcmr^rbrcrU)rLrLrrrrrdrrrtest_lcmsP zMathTests.test_lcmc Cs:|ttj|dtddd|dtddd|dtddd|d tddd |ttjd d |ttjd d |td dd|td dd|ttdt|ttdt| t tt ddddddfD]0}|tt| t|tt| t|td | d|td | d|td| d|td| d| t tt | |ttjd ||ttjd ||td|d|td|d|tt|t|tt|t| t tt |qdS)Nz ldexp(0,1)rrz ldexp(1,1)r:z ldexp(1,-1)raruz ldexp(-1,1)rrrrir>rzi+ild(  Fx:^VrrA) rbrcrArr[rr^rfrgrirBrjrLrrrr testLdexps6zMathTests.testLdexpcCs|ttj|dtdtjd|dtdd|dttjd|dtdd d |d td d d d |dtd d dd |dtd dd|ttjd|ttjd d |ttjt|tt t | t tt dS)Nzlog(1/e)rrazlog(1)rzlog(e)z log(32,2)rr:r=zlog(10**40, 10)rrAzlog(10**40, 10**20)rPz log(10**1000)rgO+@r) rbrcrAlogr[r]rergr^rfrirBrjrNrrrtestLogszMathTests.testLogcCsh|ttjdddddfD] }|t|tt|q |ttjd|tttdS)Nr:Zi,ra) rbrcrAlog1prr-rer^rfrQrrr testLog1p,s zMathTests.testLog1pcCs|ttj|tdd|tdd|tdd|tddd|tdd d |tdd d |ttjd |ttjt|ttt dS)Nrr>r:rrrrig@g@ig@@r) rbrcrAlog2r^rergrirBrjrNrrrtestLog23szMathTests.testLog2rcCs8ddtddD}ddtddD}|||dS)NcSsg|]}ttd|qSr)rArYrrrrrrJrz+MathTests.testLog2Exact..rrXcSsg|] }t|qSrr-rrrrrKr)rr^)rLrr!rrr testLog2ExactEszMathTests.testLog2ExactcCs|ttj|dtdd|dtdd|dtdd|d tdd d |ttjd |ttjdd  |ttjt|tt t | t tt dS) Nz log10(0.1)皙?razlog10(1)rrz log10(10)rzlog10(10**1000)rg@@r) rbrcrAlog10r[rergr^rSrfrirBrjrNrrr testLog10NszMathTests.testLog10csttjfdd}|dtdd|dtddttd tfttd tftt}t |d t |d dS) NcsF||\}}\}}t||tks.t||rBd|||fdSrr)rZrr!Zv1Zv2e1e2rNrrtestmodf]s z$MathTests.testModf..testmodfz modf(1.5)r)rurz modf(-1.5)r)rvrr>rzrr) rbrcrAmodfr^rfrgrjrirB)rLrbZmodf_nanrrNrtestModfZs  zMathTests.testModfcCs|ttj|dtddd|dtddd|dtddd|dtddd |ttdt|ttdt|tdtd |tdtd |t tt d|t tdt |t tdt |tdt d|td td |td d d |td d d |td dd |td d d |td dd |t tjd d|t tjd d|t tjd d|t tjd t|t td t |tttt|ttd t|ttd t|ttdt|ttd d |ttdd |ttdd |ttdd |ttdd |tttd |t ttt |tdtd |tdd d|tdd d |tddd |tdd d |tddd |t tjdd|t tjdd|t tjdd|t tjdt|t tdt |tttt|ttd t|ttd t|ttdt|ttd d |ttdd |ttdd |ttdd |ttdd|tttd |t ttt |tdtd |tdd d|t tjdd |tddd |tdd d |tddd |tddd |t tjdd|tddd|tdtd |t tdt |td td |td d d |td d d |td dd |td d d |td dd |td dd |td dd |td dd |td td |td t d |td d d |tdd d |tt d d |td dd |tddd |tt dd |t tjdd |t tjdd|tdtd |tdtd |tdtt|tdtt|tdtt|tdtt|tdtd |tdtd |tdtt|tdtt|tdtd |tdtd |tdtd |tdtd |tdtt|tdtt|dtdd d|d tddd!|d"tdd d|d#tdd d |d$tddd |d%tddd&|d'tddd(|d)tddd*|t tjdd&|t tjdd dS)+Nzpow(0,1)rrzpow(1,0)zpow(2,1)r:z pow(2,-1)rarurr>rr{rrzgryrrg.ggffffff?r?r]ggggffffffz (-2.)**3.g z (-2.)**2.rz (-2.)**1.z (-2.)**0.z (-2.)**-0.z (-2.)**-1.rvz (-2.)**-2.g?z (-2.)**-3.g) rbrcrApowr[r^rfrgrirBrjrerNrrrtestPowmszMathTests.testPowcCsr|ttj|dtdtj|dtdtjd|dtdtj d|d td d dS) Nz radians(180)z radians(90)rUr:z radians(-45)irrz radians(0)r)rbrcrAradiansr[r\rNrrr testRadianss zMathTests.testRadiansc sddlmfdd}gd}|D]}j|dh|\}}}t|}t|}t|} |||| t||} | | Wdq&1s0Yq&td} t dd D]`} | dkrq| | }t d D]@} | | }t||} |||| t| |} || || qqt d d d dt t fD]*}tt |t|t q8dD].}t|t |t|t |qht dd d dt fD]}ttt |Wdn1s0Yttt |Wdn1s0Ytt|d Wdn1sJ0Ytt|d Wdn1s0YqdS)Nrr cs|||}}}t|t|d|||}|t|t|t|dkr||dt|ddS)Nr:)rIrr^r@)rrrZfxZfyfrrr rLrr validate_spec s  z.MathTests.testRemainder..validate_spec)0z -4.0 1 -0.0z -3.8 1 0.8z -3.0 1 -0.0z -2.8 1 -0.8z -2.0 1 -0.0z -1.8 1 0.8z -1.0 1 -0.0z -0.8 1 -0.8z -0.0 1 -0.0z 0.0 1 0.0z 0.8 1 0.8z 1.0 1 0.0z 1.8 1 -0.8z 2.0 1 0.0z 2.8 1 0.8z 3.0 1 0.0z 3.8 1 -0.8z 4.0 1 0.0z&0x0.0p+0 0x1.921fb54442d18p+2 0x0.0p+0z?0x1.921fb54442d18p+0 0x1.921fb54442d18p+2 0x1.921fb54442d18p+0z?0x1.921fb54442d17p+1 0x1.921fb54442d18p+2 0x1.921fb54442d17p+1z?0x1.921fb54442d18p+1 0x1.921fb54442d18p+2 0x1.921fb54442d18p+1z?0x1.921fb54442d19p+1 0x1.921fb54442d18p+2 -0x1.921fb54442d17p+1z?0x1.921fb54442d17p+2 0x1.921fb54442d18p+2 -0x0.0000000000001p+2z00x1.921fb54442d18p+2 0x1.921fb54442d18p+2 0x0p0z?0x1.921fb54442d19p+2 0x1.921fb54442d18p+2 0x0.0000000000001p+2z?0x1.2d97c7f3321d1p+3 0x1.921fb54442d18p+2 0x1.921fb54442d14p+1z?0x1.2d97c7f3321d2p+3 0x1.921fb54442d18p+2 -0x1.921fb54442d18p+1z?0x1.2d97c7f3321d3p+3 0x1.921fb54442d18p+2 -0x1.921fb54442d14p+1z?0x1.921fb54442d17p+3 0x1.921fb54442d18p+2 -0x0.0000000000001p+3z00x1.921fb54442d18p+3 0x1.921fb54442d18p+2 0x0p0z?0x1.921fb54442d19p+3 0x1.921fb54442d18p+2 0x0.0000000000001p+3z?0x1.f6a7a2955385dp+3 0x1.921fb54442d18p+2 0x1.921fb54442d14p+1z?0x1.f6a7a2955385ep+3 0x1.921fb54442d18p+2 0x1.921fb54442d18p+1z?0x1.f6a7a2955385fp+3 0x1.921fb54442d18p+2 -0x1.921fb54442d14p+1z?0x1.1475cc9eedf00p+5 0x1.921fb54442d18p+2 0x1.921fb54442d10p+1z?0x1.1475cc9eedf01p+5 0x1.921fb54442d18p+2 -0x1.921fb54442d10p+1z 1 0.c 0.4z -1 0.c -0.4z 1 -0.c 0.4z -1 -0.c -0.4z 1.4 0.c -0.4z-1.4 0.c 0.4z 1.4 -0.c -0.4z-1.4 -0.c 0.4z$0x1.dp+1023 0x1.4p+1023 0x0.9p+1023z$0x1.ep+1023 0x1.4p+1023 -0x0.ap+1023z$0x1.fp+1023 0x1.4p+1023 -0x0.9p+1023)casez1p-1074irr>rzrry)ryrzr>r{r{)rr rFr,r-rrA remainderr^hexrrjrgrf assertIsNaNrbre)rLrnZ testcasesroZx_hexZy_hexZ expected_hexrrr!rZtinyrmrJrrmr testRemainder sL ;     4     , , , zMathTests.testRemaindercCs|ttj|dtdd|dttjdd|dttj ddz0|ttt|ttt Wn2t y|t tjt|t tjt Yn0|ttt dS)Nzsin(0)rz sin(pi/2)r:rz sin(-pi/2)ra) rbrcrArr[r\rirBrfrgrerjrNrrrtestSins zMathTests.testSincCs|ttj|dtdd|dtddtddd|dtdtdd|ttt|ttt| t tt dS)Nzsinh(0)rzsinh(1)**2-cosh(1)**2rr:razsinh(1)+sinh(-1)) rbrcrAsinhr[rr^rfrgrirBrjrNrrrtestSinhs&zMathTests.testSinhcCs|ttj|dtdd|dtdd|dtdd|ttt|ttjd|ttjt| t tt dS) Nzsqrt(0)rzsqrt(1)rzsqrt(4)rrr:ra) rbrcrArr[r^rfrergrirBrjrNrrrtestSqrtszMathTests.testSqrtcCs|ttj|dtdd|dttjdd|dttj ddz0|ttt|ttt Wn,|t tjt|t tjt Yn0|ttt dS)Nztan(0)rz tan(pi/4)rrrz tan(-pi/4)ra) rbrcrAtanr[r\rirBrfrgrerjrNrrrtestTanszMathTests.testTancCs|ttj|dtdd|jdtdtddtdd|dttd|dttd|t tt dS) Nztanh(0)rztanh(1)+tanh(-1)rrarz tanh(inf)z tanh(-inf)) rbrcrAtanhr[rrfrgrirBrjrNrrrtestTanhszMathTests.testTanhcCs8|tdd|tdtdtdddS)Nrzr)r^rAr|rrNrrr testTanhSigns zMathTests.testTanhSigncCsZ|tdd|tdd|ttdt|ttdt|tdd|tdd|tdd|tdd|tdd|td d Gd d d }Gd ddt}Gddd}|t|d|t|d|ttj|ttjdd|ttjtd|ttj|dS)Nrrarrg?gg !rg-?Yic@seZdZddZdS)z'MathTests.test_trunc..TestTrunccSsdSNrrNrrr __trunc__sz1MathTests.test_trunc..TestTrunc.__trunc__NrPrQrRrrrrr TestTruncsrc@seZdZddZdS)z(MathTests.test_trunc..FloatTrunccSsdSrrrNrrrrsz2MathTests.test_trunc..FloatTrunc.__trunc__Nrrrrr FloatTruncsrc@s eZdZdS)z)MathTests.test_trunc..TestNoTruncNrTrrrr TestNoTruncsrrr:g7@) r^rAtruncrr@r-rbrcrG)rLrrrrrr test_truncs&zMathTests.test_trunccCs|td|td|td|td|ttd|ttd|ttddS)Nr>rzrrrrr)rirAisfinite assertFalser-rNrrr testIsfiniteszMathTests.testIsfinitecCsx|ttd|ttd|ttdd|ttd|td|tddS)Nrz-nanrr>r)rirArBr-rrNrrr testIsnans zMathTests.testIsnancCs|ttd|ttd|td|td|ttd|td|tddS)Nrrggrr>r)rirArCr-rrNrrr testIsinfszMathTests.testIsinfcCs|ttjdSrH)rirArBrrNrrrtest_nan_constantszMathTests.test_nan_constantcCsJ|ttj|tjd|tjtd|tj tddS)Nr>rr)rirArCrZ assertGreaterr^r-rNrrrtest_inf_constantszMathTests.test_inf_constantzrequires verbose modecCsztd}Wn|dYn0|dkr8|dztd}WntyXYn 0|dztd}WntyYn 0|ddS) Ni6ez6underflowing exp() should not have raised an exceptionrz)underflowing exp() should have returned 0iʚ;z.overflowing exp() didn't trigger OverflowErrorrz sqrt(-1) didn't raise ValueError)rAr7rYrrrerLrrrrtest_exceptionss     zMathTests.test_exceptionsc Csfdh}d}tjdkrLtd}zttt|d}WntyJYn0d}g}tt D]\}}}} } } } | dks\| dkrq\|dvrq\|dur|dkr||vrq\t t |} d | vsd | vrd } n d | vrd } z | |}Wn,tyd }Ynt yd }Yn0d\}}t | |||}|dur,q\|||||}||q\|rb|dd|dS)NZtan0064darwinr.{}: {}({!r}): {}r>)ZrectZpolar)rr=invaliddivide-by-zeroreoverflowrr=r>zFailures in test_testfile:  )rplatformZmac_verr6r<r@r,rer< test_filegetattrrArrFr rrYjoin)rLZ SKIP_ON_TIGERZ osx_versionZ version_txtrEfailuresr3r4arZaiZereir8funcrr#r$rDmsgrrr test_testfile.sN         zMathTests.test_testfilec Cs(d}g}ttD]\}}}}}tt|}d|vs8d|vr>d}n d|vrJd}z ||} Wn*tyld} Yntyd} Yn0d\} } |dkrd } n>|d krd } n0|d kr|d kr|dkrd} n|dkrd} nd} t|| | | } | durq||||| } || q|r$| dd |dS)Nrrrrerrrrr3lgammagV瞯<erfcr>rr$@rrzFailures in test_mtestfile: r) r9math_testcasesrrArerrFr rrYr)rLrErr3r4r5r!r8rr"r#r$rDrrrrtest_mtestfilegsD       zMathTests.test_mtestfilec Cstj}||gd||gddd||ttddd||tttddd||tddddd||gd d ||gd d ||gd d ||gdd ||gdd||gdtd|t||t|d|t|gd|jt|gddd|jt|ddgddt dt dg}|jt||t dd|t|dgdgdgg|t|ddig|jt|ddigdddid|jt|dgdgdgggd||ddgddd||ddgddgdgd||gddidddi|t|ddgdWdn1sf0Y||gdd||gd d||gd!dd7d"d#}tdd$}|||||td%d&}|||||td'd(}|||dd)d*tdd(D}|||||d+d*td'd&D}|||||d,d*td'd(D}| ||| |dddtd-ddg| |ddtd-ddg| |dtd-ddg| |dtd.td-dg| |dtd/td-dg| |dtd-td.dg| |dtd-td/dg||dddtd.d0d1gtd/||dddtd/d0d1gtd.| |dddtd.d0d1g| |dddtd/d0d1g| |dddtd.d0ddg| |dddtd/d0ddg|t |gd2t |t |gd3t|t |tdd$t |t |tdd$d4dt|t |dt d5dd1dd6gt jdS)8Nrr=)rr:r1iri_7)rr:r|rrr=r)rrrrrr)rr:r|rr)rrrrrr=)rrrrr)rrrrrr)rrracrbr|abZ abababababab) rr:rr:rr:rr:rr:rr:r3)rrr:r|r)rrr:r|)rr:r|rcSs|D] }||9}q|SrHr)rrelemrrr _naive_prods z(MathTests.test_prod.._naive_prodi'iraircSsg|] }t|qSrr[rrrrrrrz'MathTests.test_prod..cSsg|] }t|qSrr[rrrrrrcSsg|] }t|qSrr[rrrrrrrrrrDrr)rr:r|rrr=r)rrr|rrr=rrrr)r)rAprodr^rErr8r-rbrc bytearrayrsrr@rr)rLrr?rrrrr test_prods    .    $$   zMathTests.test_prodc CsLtj}tj}tdD]8}t|dD]&}|||||||||q$qtddD]F}td|D]6}||||||d|d|||d|qfqXtddD]>}|||dd|||d|||||||qtdD].}||||||||d||q|t|dd|t|dtd|t|dd|t|dd|t|tdd|t|d d|t||t|ddd |t||t |d d|t |d d  d|t |dd |t |dd d  ||dd d||dd d dd d }|||dd|||d||||d ||dt j ddr|t |||dD]2\}}||||d| t|||tq||tdtd d||tdtd dtd D]B}| t|tdt|t| t|tdt|tqdS)Nrrrr3rr1r10r|rar:rTZcpython)TT)TF)FFr=)rApermrrr^rbrcrrrercheck_impl_detailrrHrr@rSrU)rLrrrr*rrrtestPerms\  6     zMathTests.testPermc Cstj}tj}tdD]@}t|dD].}|||||||||||q$qtddD]B}td|D]2}||||||d|d||d|qnq`tdD](}|||dd||||dqtddD],}|||d|||||d|qtdD]6}t|dD]"}||||||||q&q|t|dd|t|dtd|t|dd|t|dd|t|tdd|t|d d|t|d|t|ddd |t||t |d d|t |dd  d|t |dd |t |ddd  ||ddd||ddd ddd }|||dd|||d||||d||dd||||d||||d|||||d||ddt j d dr|t |||ddD]2\}}||||d| t|||tq||tdtdd||tdtddtd D]B}| t|tdt|t| t|tdt|tqdS)Nrrrr:rrrrrr|rarTrrr=)rAcombrrr^rbrcrrrerrrrHrr@rSrU)rLrrrr*rrrtestCombFsf  2  $ "  zMathTests.testCombcCs|tdt d|tdtd|tddd|tddd|td t td |td ttd |td d d |td dd|tdd d tjj tjj }|tdt||td t||tdt | |td t | |t|dd|t| dd |t|d d|t| d d tjj }|ttd||tt d| |t|tt|t| t t | tt d | td t | tt t dS)Ng0Cg/Cg0CgCr>gCggrz0x1.fffffffffffffp-1z0x1.0000000000001p+0rrz)r^rA nextafterrfr-rassertEqualSignrrminepsilonrrsrj)rLZsmallest_subnormalZlargest_normalrrrtest_nextaftersLzMathTests.test_nextafterc Cs |tdtjj|tdd|tdd|tdd|tdtjjtjj|tttttt |tt t | ttj ddddt fD]J}|j |d*|t| t|Wdq1s0YqdS) Nrllrlg@r>r) r^rArrrrrrrrfrsrrFrrrrtest_ulps  zMathTests.test_ulpc CstGddd}tjtjtjfD]P}|}|t|d|Wdn1sR0Y|t|ddqdS)Nc@seZdZddZdS)z$MathTests.test_issue39871..FcSsd|_dddS)NTrr) convertedrNrrrrOsz.MathTests.test_issue39871..F.__float__N)rPrQrRrOrrrrr>sr>z not a numberrF)rAr}rrqrbrcrr)rLr>rrrrrtest_issue39871s  (zMathTests.test_issue39871cCst|s|d|dS)NzExpected a NaN, got {!r}.)rArBrYr rKrrrrss zMathTests.assertIsNaNcCs,||||td|td|dS)Nr)r^rAr)rLrrrrrrs zMathTests.assertEqualSignN)r=r>)LrPrQrRr[r`rkrmrorqrtrxr~rrrrunittestZskipIfrrmachinerrrrrrrZ cpython_onlyrrrrHAVE_DOUBLE_ROUNDINGrrr#r@rKrNrRrTrWrZZrequires_mac_verr\r_rdrgrjrurvrxryr{r}r~rrrrrrZ skipUnlessrrrrrrrrrrrsrrrrrrXs       =! !     ^*Jq5,                  8 B\@F - rXc@seZdZejZddZddZddZddZd d Z d d Z d dZ ddZ ddZ ddZddZddZddZddZddZdS) IsCloseTestscOs0|j|j||g|Ri|d||fddS)Nz%s and %s should be close!r)riiscloserLrrrkwargsrrr assertIsCloses zIsCloseTests.assertIsClosecOs0|j|j||g|Ri|d||fddS)Nz%s and %s should not be close!r)rrrrrrassertIsNotCloses zIsCloseTests.assertIsNotClosecOs,|D]"\}}|j||g|Ri|qdSrH)rrLZexamplesrrrrrrrassertAllCloses zIsCloseTests.assertAllClosecOs,|D]"\}}|j||g|Ri|qdSrH)rrrrrassertAllNotCloses zIsCloseTests.assertAllNotClosecCsz|t |jddddWdn1s00Y|t"|jdddddWdn1sl0YdS)Nrg0.+rel_tolrg _©rr$)rbrerrNrrrtest_negative_tolerancess . z%IsCloseTests.test_negative_tolerancescCsgd}|j|ddddS)N))rr)N@ir);r)i90g@)r>rz)NFrr>rr)rLZidentical_examplesrrrtest_identical szIsCloseTests.test_identicalcCs(gd}|j|dd|j|dddS)N))gחAgחA)g:0yEgnyE)g ѭ?gfNӭ?:0yE>r& .>rr)rLZeight_decimal_places_examplesrrrtest_eight_decimal_placessz&IsCloseTests.test_eight_decimal_placescCs(gd}|j|dd|j|dddS)N))rr>)g& .r>)gu?j/ʠr>rerrr)rr)rLZnear_zero_examplesrrrtest_near_zeroszIsCloseTests.test_near_zerocCs<|tt|jttdd|tt|jttdddS)Nr>r)rrfrgrNrrrtest_identical_infinite&s  z$IsCloseTests.test_identical_infinitec CsRttftdfdtfttfttfttftdfdtftdfdtfg }|j|dddS)Nrrgg?r)rjrfrgr)rLZnot_close_examplesrrrtest_inf_ninf_nan-s zIsCloseTests.test_inf_ninf_nancCs0gd}|j|ddgd}|j|dddS)N))rr)333333 r)Ynrr>r))rg?)g?r)gZbtigTbtir)rLZzero_tolerance_close_examplesZ!zero_tolerance_not_close_examplesrrrtest_zero_tolerance<sz IsCloseTests.test_zero_tolerancecCs|jddgdddS)N)r$r)rr$r]rrrNrrrtest_asymmetryHszIsCloseTests.test_asymmetrycCs(ddg}|j|dd|j|dddS)N))i[i[rrrr)rLZinteger_examplesrrr test_integersLs zIsCloseTests.test_integerscCshddlm}|d|df|d|df|d|df|d |d fg}|j|d d |j|d d dS)Nrr z 1.00000001z1.0z1.00000001e-20z1.0e-20z1.00000001e-100z1.0e-100z 1.00000001e20z1.0e20rrr)rrrr)rLrZdecimal_examplesrrr test_decimalsTs zIsCloseTests.test_decimalscCsdddlm}|ddd|df|d|df|dd|ddfg}|j|dd |j|d d dS) Nrr rrrl (qe rPrrr)rr rr)rLr Zfraction_examplesrrrtest_fractions_s zIsCloseTests.test_fractionsN)rPrQrRrArrrrrrrrrrrrrrrrrrrrrs     rcCsNddlm}t}|tt|tt||dt|dS)Nr) DocFileSuitez ieee754.txt) doctestrrZ TestSuiteZaddTestZ makeSuiterXrr)rZsuiterrr test_mainks  r)r=r>)8Z test.supportrrrtestrrr9rrAosrrr rrhr-rjrfrgrrrrrrrrrPargvfile__file__pathdirnamecurdirZtest_dirrrrrrrrr&r9r<rFrGr@rSrJrUZTestCaserXrrrrrrsl   &  -{