
    0hh&                    R   S SK JrJr  S SKJr  S SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrSr\" S5      r\" S5      r\" S5      r\R(                  R*                  r\R(                  R.                  rSu  rr\\-   S	:H  r\S
:X  a  \R:                  S    rO\r\
R@                  RC                  \5      =(       d    \
RD                  r#\
R@                  RI                  \#SS5      r%\
R@                  RI                  \#SS5      r&S r'S r(S r)S r*S r+S r,S r-S%S jr. " S S5      r/ " S S\05      r1 " S S\25      r3 " S S5      r4 " S S\Rj                  5      r6 " S  S!\Rj                  5      r7 " S" S#\Rj                  5      r8S$ r9\S
:X  a  \Rt                  " 5         gg)&    )verboserequires_IEEE_754)supportNgh㈵>naninf-inf) 7yACg):@g7yAC__main__mathdatazmath_testcases.txtzcmath_testcases.txtc                 |    [         R                  " S[         R                  " SU 5      5      S   nUS:  a  US-   ) nU$ )a  Convert a non-NaN float x to an integer, in such a way that
adjacent floats are converted to adjacent integers.  Then
abs(ulps(x) - ulps(y)) gives the difference in ulps between two
floats.

The results from this function will only make sense on platforms
where native doubles are represented in IEEE 754 binary64 format.

Note: 0.0 and -0.0 are converted to 0 and -1, respectively.
z<qz<dr   l            )structunpackpack)xns     7/opt/python-3.13.8/usr/lib/python3.13/test/test_math.pyto_ulpsr   (   s;     	dFKKa01!4A1ugJH    c                 :    U (       a  S[        X S-
  -  5      -   $ S$ )zANumber of '1' bits in binary expansion of a nonnnegative integer.   r   )count_set_bits)r   s    r   r   r   N   s    ,-1~aa%i((414r   c                 l    X-
  S-	  nU(       d  gUS:X  a  U $ X-   S-  n[        X5      [        X15      -  $ )z|Product of integers in range(start, stop, 2), computed recursively.
start and stop should both be odd, with start <= stop.

r   )partial_product)startstop
numfactorsmids       r   r   r   R   sD    
 ,1$J	q!Q&u*_S-GGGr   c                     S=p[        [        U R                  5       5      5       H)  nU[        XS-   -	  S-   S-  X-	  S-   S-  5      -  nX!-  nM+     X [	        U 5      -
  -  $ )zFactorial of nonnegative integer n, via "Binary Split Factorial Formula"
described at http://www.luschny.de/math/factorial/binarysplitfact.html

r   )reversedrange
bit_lengthr   r   )r   innerouteris       r   py_factorialr%   `   sn    
 EeALLN+,!1u*!1A!5!|a7GHH - **++r   c                     [        [        U 5      [        U5      -
  5      n[        X-
  5      nXS::  d  XB::  a  gSnUR                  XTX25      $ )zGiven finite floats `expected` and `got`, check that they're
approximately equal to within the given number of ulps or the
given absolute tolerance, whichever is bigger.

Returns None on success and an error message on failure.
NzAerror = {:.3g} ({:d} ulps); permitted error = {:.3g} or {:d} ulps)absr   format)expectedgotulp_tolabs_tol	ulp_error	abs_errorfmts          r   ulp_abs_checkr0   k   sP     GH%45IHN#I y37zz)AAr   c              #   |  #    [        U SS9 nU H  nSU;   a  USUR                  S5       nUR                  5       (       d  M4  UR                  S5      u  p4UR                  5       u  pVnUR                  5       nUS   n	USS n
XV[	        U5      [	        U	5      U
4v   M     SSS5        g! , (       d  f       g= f7f)zParse a file with test values

-- starts a comment
blank lines, or lines containing only a comment, are ignored
other lines are expected to have the form
  id fn arg -> expected [flag]*

utf-8encoding--N->r   r   )openindexstripsplitfloat)fnamefplinelhsrhsidfnarg
rhs_piecesexpflagss              r   parse_mtestfilerG   }   s      
eg	&"Dt|-TZZ-.::<<zz$'HC))+KBCJQ-CqrNE5:uSz599  
'	&	&s   B<BB+"	B<+
B95B<c           
   #     #    [        U SS9 nU H  nUR                  S5      (       d  UR                  5       (       d  M0  UR                  S5      u  p4UR                  5       u  pVpxUR                  5       n	U	S   U	S   pU	SS nXV[	        U5      [	        U5      [	        U
5      [	        U5      U4v   M     SSS5        g! , (       d  f       g= f7f)	zParse a file with test values

Empty lines or lines starting with -- are ignored
yields id, fn, arg_real, arg_imag, exp_real, exp_imag
r2   r3   r5   r6   r   r      N)r7   
startswithr9   r:   r;   )r<   r=   r>   r?   r@   rA   rB   arg_realarg_imagrD   exp_realexp_imagrF   s                r   parse_testfilerO      s      
eg	&"Dt$$DJJLLzz$'HC),&BHJ!+A
1hqrNE?E(O?E(O   
'	&	&s   CB)B?6	C?
C	Cc                    X:X  aH  U(       d@  U (       d9  [         R                  " SU5      [         R                  " SU 5      :w  a	  SU  SU S3$ gSn[        U [        5      (       a!  [        U[        5      (       a  [        U5      nO5[        U[        5      (       a   [        U [        5      (       a  [        U 5      n [        U [        5      (       a  [        U[        5      (       a|  [         R
                  " U 5      (       a  [         R
                  " U5      (       a  SnOC[         R                  " U 5      (       d  [         R                  " U5      (       a  O[        XX#5      nUb)  SnUR                  X5      nUSR                  U5      -  nU$ g)	a  Compare arguments expected and got, as floats, if either
is a float, using a tolerance expressed in multiples of
ulp(expected) or absolutely (if given and greater).

As a convenience, when neither argument is a float, and for
non-finite floats, exact equality is demanded. Also, nan==nan
as far as this function is concerned.

Returns None on success and an error message on failure.
r   z	expected z, got z (zero has wrong sign)Nz	not equalzexpected {!r}, got {!r}z ({}))	mathcopysign
isinstancer;   intisnanisinfr0   r(   )r)   r*   r+   r,   failurefail_fmtfail_msgs          r   result_checkrZ      s+    8}}Q$a(BB"8*F3%7MNNG (E""z#s';';Cj	C		Jx$=$=?(E""z#u'='=::hDJJsOOGZZ!!TZZ__ $H7DG ,??81GNN7++r   c                        \ rS rSrS rS rSrg)	FloatLike   c                     Xl         g Nvalueselfra   s     r   __init__FloatLike.__init__       
r   c                     U R                   $ r_   r`   rc   s    r   	__float__FloatLike.__float__       zzr   r`   N)__name__
__module____qualname____firstlineno__rd   ri   __static_attributes__ r   r   r\   r\          r   r\   c                       \ rS rSrSrg)IntSubclass   rq   Nrl   rm   rn   ro   rp   rq   r   r   rt   rt      s    r   rt   c                        \ rS rSrS rS rSrg)MyIndexable   c                     Xl         g r_   r`   rb   s     r   rd   MyIndexable.__init__   rf   r   c                     U R                   $ r_   r`   rh   s    r   	__index__MyIndexable.__index__   rk   r   r`   Nrl   rm   rn   ro   rd   r}   rp   rq   r   r   rx   rx      rr   r   rx   c                       \ rS rSrSS jrSrg)BadDescr   Nc                     [         er_   )
ValueError)rc   objobjtypes      r   __get__BadDescr.__get__   s    r   rq   r_   )rl   rm   rn   ro   r   rp   rq   r   r   r   r      s    r   r   c                      \ rS rSrSUS jrS rS rS rS rS r	S	 r
S
 rS rS rS r\S 5       rS r\R&                  " \R*                  S:H  =(       a    \R,                  " 5       S;   S5      S 5       rS rS rS rS rS rS r\R>                  S 5       r S r!S r"S r#\\R&                  " \$S5      S 5       5       r%S  r&S! r'\\R&                  " \$S"5      S# 5       5       r(S$ r)S% r*S& r+S' r,S( r-\S) 5       r.S* r/S+ r0\S, 5       r1\\Rd                  " S-S5      S. 5       5       r3S/ r4S0 r5\\R&                  " \$S15      \R>                  S2 5       5       5       r6\Rn                  " S35      S4 5       r8\\R&                  " \$S15      \R>                  \Rn                  " S35      S5 5       5       5       5       r9S6 r:S7 r;S8 r<\S9 5       r=S: r>S; r?S< r@S= rAS> rB\S? 5       rCS@ rDSA rESB rFSC rGSD rHSE rI\R                  " \KSF5      SG 5       rL\SH 5       rM\SI 5       rNSJ rOSK rPSL rQ\SM 5       rR\SN 5       rSSO rTSP rUSQ rVSR rWSSrXgT)V	MathTests      c                 d    [        X2XE5      nUb!  U R                  SR                  X5      5        gg)a1  Compare arguments expected and got, as floats, if either
is a float, using a tolerance expressed in multiples of
ulp(expected) or absolutely, whichever is greater.

As a convenience, when neither argument is a float, and for
non-finite floats, exact equality is demanded. Also, nan==nan
in this function.
Nz{}: {})rZ   failr(   )rc   namer*   r)   r+   r,   rW   s          r   ftestMathTests.ftest   s0     xg?IIhood45 r   c                     U R                  S[        R                  S5        U R                  S[        R                  S5        U R	                  [        R
                  S[        R                  -  5        g )Npig-DT!	@egiW
@rI   )r   rQ   r   r   assertEqualtaurh   s    r   testConstantsMathTests.testConstants  sH    

4"<=

3 :;1TWW9-r   c                 B   U R                  [        [        R                  5        U R	                  S[        R                  " S5      [        R
                  5        U R	                  S[        R                  " S5      [        R
                  S-  5        U R	                  S[        R                  " S5      S5        U R                  [        [        R                  [        5        U R                  [        [        R                  [        5        U R                  [        [        R                  S[        -   5        U R                  [        [        R                  S[        -
  5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzacos(-1)zacos(0)r   rI   zacos(1)r   )assertRaises	TypeErrorrQ   acosr   r   r   INFNINFeps
assertTruerU   NANrh   s    r   testAcosMathTests.testAcos
  s    )TYY/

:tyy}dgg6

9diilDGGAI6

9diilA.*dii5*dii6*diiS9*diic:

499S>23r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R                  [
        [        R                  S5        U R                  [
        [        R                  S5        U R                  [        R                  " [        5      [        5        U R                  [
        [        R                  [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzacosh(1)r   r   zacosh(2)rI   g5qB?r   )r   r   rQ   acoshr   r   r   r   r   r   rU   r   rh   s    r   	testAcoshMathTests.testAcosh  s    )TZZ0

:tzz!}a0

:tzz!}.@A*djj!4*djj"5C#.*djj$7

4::c?34r   c                 J   U R                  [        [        R                  5        U R	                  S[        R                  " S5      [        R
                  * S-  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      [        R
                  S-  5        U R                  [        [        R                  [        5        U R                  [        [        R                  [        5        U R                  [        [        R                  S[        -   5        U R                  [        [        R                  S[        -
  5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzasin(-1)r   rI   zasin(0)r   zasin(1)r   )r   r   rQ   asinr   r   r   r   r   r   r   rU   r   rh   s    r   testAsinMathTests.testAsin  s    )TYY/

:tyy}twwhqj9

9diilA.

9diilDGGAI6*dii5*dii6*diiS9*diic:

499S>23r   c                 h   U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )	Nzasinh(0)r   zasinh(1)r   g'ya64?z	asinh(-1)r   g'ya64)r   r   rQ   asinhr   r   r   r   r   rU   r   rh   s    r   	testAsinhMathTests.testAsinh*  s    )TZZ0

:tzz!}a0

:tzz!}.AB

;

20DEC#.D)40

4::c?34r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      [        R
                  * S-  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      [        R
                  S-  5        U R	                  S[        R                  " [        5      [        R
                  S	-  5        U R	                  S
[        R                  " [        5      [        R
                  * S	-  5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzatan(-1)r      zatan(0)r   zatan(1)r   z	atan(inf)rI   z
atan(-inf))r   r   rQ   atanr   r   r   r   r   rU   r   rh   s    r   testAtanMathTests.testAtan3  s    )TYY/

:tyy}twwhqj9

9diilA.

9diilDGGAI6

;		#	:

<4477(1*=

499S>23r   c                    U R                  [        [        R                  5        U R	                  S[        R
                  " S5      S5        U R	                  S[        R
                  " S5      S5        U R	                  S[        R
                  " S5      S5        U R                  [        [        R
                  S	5        U R                  [        [        R
                  S
5        U R                  [        [        R
                  [        5        U R                  [        [        R
                  [        5        U R                  [        R                  " [        R
                  " [        5      5      5        g )Nzatanh(0)r   z
atanh(0.5)      ?gz?zatanh(-0.5)      gzr   r   )r   r   rQ   r   r   atanhr   r   r   r   rU   r   rh   s    r   	testAtanhMathTests.testAtanh<  s    )TYY/

:tzz!}a0

<C2EF

=$**T"24HI*djj!4*djj"5*djj#6*djj$7

4::c?34r   c                 (   U R                  [        [        R                  5        U R	                  S[        R                  " SS5      [        R
                  * S-  5        U R	                  S[        R                  " SS5      [        R
                  * S-  5        U R	                  S[        R                  " SS5      S5        U R	                  S	[        R                  " SS5      [        R
                  S-  5        U R	                  S
[        R                  " SS5      [        R
                  S-  5        U R	                  S[        R                  " SS5      S[        R
                  -  S-  5        U R	                  S[        R                  " S[        5      [        R
                  5        U R	                  S[        R                  " SS5      [        R
                  5        U R	                  S[        R                  " SS5      [        R
                  5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " [        R                  " S[        5      5      5        U R	                  S[        R                  " S[        5      [        R
                  * 5        U R	                  S[        R                  " SS5      [        R
                  * 5        U R	                  S[        R                  " SS5      [        R
                  * 5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " [        R                  " S[        5      5      5        U R	                  S[        R                  " [        [        5      [        R
                  S-  S-  5        U R	                  S[        R                  " [        S5      [        R
                  S-  5        U R	                  S[        R                  " [        S5      [        R
                  S-  5        U R	                  S[        R                  " [        S5      [        R
                  S-  5        U R	                  S[        R                  " [        S5      [        R
                  S-  5        U R	                  S[        R                  " [        [        5      [        R
                  S-  5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R	                  S[        R                  " [        [        5      [        R
                  * S-  S-  5        U R	                  S[        R                  " [        S5      [        R
                  * S-  5        U R	                  S[        R                  " [        S5      [        R
                  * S-  5        U R	                  S [        R                  " [        S5      [        R
                  * S-  5        U R	                  S![        R                  " [        S5      [        R
                  * S-  5        U R	                  S"[        R                  " [        [        5      [        R
                  * S-  5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R	                  S#[        R                  " S[        5      [        R
                  5        U R	                  S$[        R                  " SS5      [        R
                  S-  5        U R	                  S%[        R                  " SS5      [        R
                  S-  5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " [        R                  " S[        5      5      5        U R	                  S&[        R                  " S[        5      [        R
                  * 5        U R	                  S'[        R                  " SS5      [        R
                  * S-  5        U R	                  S([        R                  " SS5      [        R
                  * S-  5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        g ))Nzatan2(-1, 0)r   r   rI   zatan2(-1, 1)r   r   zatan2(0, 1)zatan2(1, 1)zatan2(1, 0)zatan2(1, -1)   zatan2(0., -inf)        zatan2(0., -2.3)ffffffzatan2(0., -0.)       ffffff@zatan2(-0., -inf)zatan2(-0., -2.3)zatan2(-0., -0.)zatan2(inf, -inf)zatan2(inf, -2.3)zatan2(inf, -0.)zatan2(inf, 0.)zatan2(inf, 2.3)zatan2(inf, inf)zatan2(-inf, -inf)zatan2(-inf, -2.3)zatan2(-inf, -0.)zatan2(-inf, 0.)zatan2(-inf, 2.3)zatan2(-inf, inf)zatan2(2.3, -inf)zatan2(2.3, -0.)zatan2(2.3, 0.)zatan2(-2.3, -inf)zatan2(-2.3, -0.)zatan2(-2.3, 0.))r   r   rQ   atan2r   r   r   r   r   r   rU   r   rh   s    r   	testAtan2MathTests.testAtan2G  s   )TZZ0

>4::b!#4twwhqjA

>4::b!#4twwhqjA

=$**Q"2A6

=$**Q"2DGGAI>

=$**Q"2DGGAI>

>4::a#4aikB 	

$djjT&:DGGD

$djjT&:DGGD

#TZZC%8$''BB+R0B,b1B,b1

4::b##678

%tzz#t'<twwhG

%tzz#t'<twwhG

$djjc&:TWWHEC,c2C-s3C-s3

4::c3#789

%tzz#t'<dggaikJ

%tzz#t'<dggaiH

$djjd&;TWWQYG

#TZZS%947719E

$djjc&:DGGAIF

$djjc&:DGGAIF

4::c3#789

&

4(>
1M

&

4(>
K

%tzz$'=xzJ

$djjs&;dggXaZH

%tzz$'<twwhqjI

%tzz$'<twwhqjI

4::dC#89:

%tzz#t'<dggF

$djjc&:DGGAIF

#TZZR%8$''!)DC-r2

4::c3#789

&

4(>I

%tzz$'<twwhqjI

$djjr&:TWWHQJGD#.4

4::dC#89:

4::c4#89:

4::c4#89:

4::c3#789

4::c2#678

4::c3#789

4::c3#789

4::c3#789r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S	5      S	5        U R	                  S
[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzcbrt(0)r   zcbrt(1)r   zcbrt(8)   rI   z	cbrt(0.0)r   z
cbrt(-0.0)r   z	cbrt(1.2)g333333?ggAE ?z
cbrt(-2.6)ggL]6H zcbrt(27)   r   zcbrt(-1)r   z	cbrt(-27)i)r   r   rQ   cbrtr   r   r   r   r   rU   r   rh   s    r   testCbrtMathTests.testCbrt  sU   )TYY/

9diilA.

9diilA.

9diilA.

;		#4

<4$7

;		#0AB

<42DE

:tyy}a0

:tyy}b1

;		#33-4$/

499S>23r   c                    U R                  [        [        R                  5        U R	                  [
        [        [        R                  " S5      5      5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S	5        U R	                  [        R                  " S
5      S	5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5         " S S5      n " S S[        5      n " S S5      n " S S5      nU R	                  [        R                  " U" 5       5      S5        U R	                  [        R                  " U" 5       5      S5        U R	                  [        R                  " [        S5      5      S5        U R                  [        [        R                  U" 5       5        U R                  [        [        R                  U" 5       5        U" 5       nS Ul
        U R                  [        [        R                  U5        U R                  [        [        R                  US5        U R	                  [        R                  " [        S5      5      S5        U R	                  [        R                  " [        S5      5      S5        g )Nr   r         ?      ?rI   r   r         r         r   r   c                       \ rS rSrS rSrg)$MathTests.testCeil.<locals>.TestCeili  c                     gN*   rq   rh   s    r   __ceil__-MathTests.testCeil.<locals>.TestCeil.__ceil__      r   rq   Nrl   rm   rn   ro   r   rp   rq   r   r   TestCeilr         r   r   c                       \ rS rSrS rSrg)%MathTests.testCeil.<locals>.FloatCeili  c                     gr   rq   rh   s    r   r   .MathTests.testCeil.<locals>.FloatCeil.__ceil__  r   r   rq   Nr   rq   r   r   	FloatCeilr     r   r   r   c                       \ rS rSrSrg)&MathTests.testCeil.<locals>.TestNoCeili  rq   Nrv   rq   r   r   
TestNoCeilr         r   r   c                   "    \ rS rSr\" 5       rSrg)'MathTests.testCeil.<locals>.TestBadCeili  rq   N)rl   rm   rn   ro   r   r   rp   rq   r   r   TestBadCeilr     s	    zHr   r   r   g     @E@+   c                      U $ r_   rq   argss    r   <lambda>$MathTests.testCeil.<locals>.<lambda>  s    4r   )r   r   rQ   ceilr   rT   typer;   r\   r   r   )rc   r   r   r   r   ts         r   testCeilMathTests.testCeil  s   )TYY/d499S>233+3+3+4!,4"-4"-3+4!,
	 		 		 		" 	"8:.39;/49T?3R8)TYY
=*dii?L'
)TYY2)TYY159T?3T:9T?3T:r   c                 	   U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S	S
5      S5        U R                  [        [        R                  5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS
5      S5        U R                  [        R                  " [
        S5      [
        5        U R                  [        R                  " [
        S
5      [        5        U R                  [        R                  " [        S5      [
        5        U R                  [        R                  " [        S
5      [        5        U R                  [        R                  " S[
        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " [
        [
        5      [
        5        U R                  [        R                  " [
        [        5      [        5        U R                  [        R                  " [        [
        5      [
        5        U R                  [        R                  " [        [        5      [        5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " [        [
        5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " [        R                  " [
        [        5      5      5        U R                  [        [        R                  " S[        5      5      S5        g )Nr   r   r   r   ir   r         @      @r                @)r   rQ   rR   r   r   r   r   r   rU   r   rV   r'   rh   s    r   testCopysignMathTests.testCopysign  s   q"-s3r2.4r3/6q"-s3r3/6)T]]3r2.3r3/5sB/5sC0$7tR0#6tS148r3/4r40#6sC0#6sD148tS137tT2D9

4==b#9:;

4==c#:;<

4==d#;<=

4==c#:;< 	

4==c#:;<T]]2s34b9r   c                 f   U R                  [        [        R                  5        U R	                  S[        R                  " [        R
                  * S-  5      S[        R                  " S5      S9  U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " [        R
                  S-  5      S[        R                  " S5      S9  U R	                  S[        R                  " [        R
                  5      S	5         U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        g ! [         aU    U R                  [        [        R                  [        5        U R                  [        [        R                  [        5         Nf = f)
Nz
cos(-pi/2)rI   r   r   r,   zcos(0)z	cos(pi/2)zcos(pi)r   )r   r   rQ   cosr   r   ulpr   rU   r   r   r   r   rh   s    r   testCosMathTests.testCos  sB   )TXX.

<477(1*!5q$((1+
N

8TXXa[!,

; 3Q
L

9dhhtww/4	:OODJJtxx}56OODJJtxx~67 	

488C=12  	:j$((C8j$((D9	:s   A:G AH0/H0win32)ARMARM64zEWindows UCRT is off by 2 ULP this test requires accuracy within 1 ULPc                 T   U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S[        R                  " S5      S-  -  -
  S5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzcosh(0)r   r   zcosh(2)-2*cosh(1)**2rI   r   )r   r   rQ   coshr   r   r   r   r   rU   r   rh   s    r   testCoshMathTests.testCosh  s     	)TYY/

9diilA.

)499Q<$))A,/8I+I2N3-4#.

499S>23r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " [        R
                  5      S5        U R	                  S[        R                  " [        R
                  S-  5      S5        U R	                  S[        R                  " [        R
                  * S-  5      S5        U R	                  S	[        R                  " S
5      S
5        g )Nzdegrees(pi)g     f@zdegrees(pi/2)rI   g     V@zdegrees(-pi/4)r   g     Fz
degrees(0)r   )r   r   rQ   degreesr   r   rh   s    r   testDegreesMathTests.testDegrees  s    )T\\2

=$,,tww"7?

?DLL$;TB

#T\\477(1*%=uE

<a!4r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S[        R
                  -  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      [        R
                  5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      S5        U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        [        R                  S5        g )	Nzexp(-1)r   r   zexp(0)r   zexp(1)r   @B )r   r   rQ   rE   r   r   r   r   r   r   rU   r   OverflowErrorrh   s    r   testExpMathTests.testExp  s    )TXX.

9dhhrlAdffH5

8TXXa[!,

8TXXa[$&&1#,$,

488C=12-7;r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S	[        R                  " S
5      S5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      S5        U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        [        R                  S5        g )Nzexp2(-1)r   r   zexp2(0)r   r   zexp2(1)rI   z	exp2(2.3)r   g){Ĳ@r   r  )r   r   rQ   exp2r   r   r   r   r   rU   r   r  rh   s    r   testExp2MathTests.testExp2  s    )TYY/

:tyy}c2

9diilA.

9diilA.

;		#0AB3-4"-

499S>23-G<r   c                 6   U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        g )Nzfabs(-1)r   r   zfabs(0)r   zfabs(1))r   r   rQ   fabsr   rh   s    r   testFabsMathTests.testFabs  s^    )TYY/

:tyy}a0

9diilA.

9diilA.r   c                    U R                  [        R                  " S5      S5        Sn[        SS5       H\  nX-  nU R                  [        R                  " U5      U5        U R                  [        R                  " U5      [	        U5      5        M^     U R                  [        [        R                  S5        U R                  [        [        R                  SS-  * 5        g )Nr   r     r   
   d   )r   rQ   	factorialr    r%   r   r   )rc   totalr$   s      r   testFactorialMathTests.testFactorial  s    *A.q$AJET^^A.6T^^A.Q@   	*dnnb9*dnnr3wh?r   c                 Z   U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  [        R
                  " S5      5        U R                  [        [        R                  [        R
                  " S5      5        U R                  [        [        R                  S5        g )N      @g@r   }Ô%I5z5.2)r   r   rQ   r  decimalDecimalrh   s    r   testFactorialNonIntegers"MathTests.testFactorialNonIntegers"  s    )T^^S9)T^^S9)T^^T:)T^^V<)T^^W__S5IJ)T^^W__U5KL)T^^S9r   c                     U R                  [        [        R                  SS-  5        U R                  [        [        R                  S5        g )Nr  r  }Ô%IT)r   r  rQ   r  r   rh   s    r   testFactorialHugeInputs!MathTests.testFactorialHugeInputs,  s4     	-SA)T^^U;r   c                    U R                  [        [        R                  5        U R	                  [
        [        [        R                  " S5      5      5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S	5      S
5         " S S5      n " S S[        5      n " S S5      n " S S5      nU R	                  [        R                  " U" 5       5      S5        U R	                  [        R                  " U" 5       5      S5        U R	                  [        R                  " [        S5      5      S5        U R                  [        [        R                  U" 5       5        U R                  [        [        R                  U" 5       5        U" 5       nS Ul
        U R                  [        [        R                  U5        U R                  [        [        R                  US5        U R	                  [        R                  " [        S5      5      S5        U R	                  [        R                  " [        S5      5      S5        g )Nr   r   r   r   r   r   r   r   r   c                       \ rS rSrS rSrg)&MathTests.testFloor.<locals>.TestFloori@  c                     gr   rq   rh   s    r   	__floor__0MathTests.testFloor.<locals>.TestFloor.__floor__A  r   r   rq   Nrl   rm   rn   ro   r1  rp   rq   r   r   	TestFloorr/  @  r   r   r4  c                       \ rS rSrS rSrg)'MathTests.testFloor.<locals>.FloatFlooriC  c                     gr   rq   rh   s    r   r1  1MathTests.testFloor.<locals>.FloatFloor.__floor__D  r   r   rq   Nr3  rq   r   r   
FloatFloorr6  C  r   r   r9  c                       \ rS rSrSrg)(MathTests.testFloor.<locals>.TestNoFlooriF  rq   Nrv   rq   r   r   TestNoFloorr;  F  r   r   r<  c                   "    \ rS rSr\" 5       rSrg))MathTests.testFloor.<locals>.TestBadFlooriH  rq   N)rl   rm   rn   ro   r   r1  rp   rq   r   r   TestBadFloorr>  H  	     
Ir   r?  r   g33333D@)   c                      U $ r_   rq   r   s    r   r   %MathTests.testFloor.<locals>.<lambda>Q  s    Dr   )r   r   rQ   floorr   rT   r   r;   r\   r   r1  )rc   r4  r9  r<  r?  r   s         r   	testFloorMathTests.testFloor3  s   )TZZ0d4::c?34C!,C!,C!,D)2.D)2.D)2.
	 		 		 		# 	#IK0"5JL126IdO4b9)TZZ?*djj,.AM()TZZ3)TZZA6IdO4d;IdO4d;r   c                 H   U R                  [        [        R                  5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S	5        U R	                  S
[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R                  [        R                  " [        R                  " [        S	5      5      5        U R                  [        R                  " [        R                  " S	[        5      5      5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        [        R                  S	S5        U R                  [        [        R                  [        S	5        U R                  [        [        R                  [        S	5        U R                  [        [        R                  [        S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S[        5      S5        U R                  [        [        R                  [        [        5        g )Nzfmod(10, 1)r  r   r   zfmod(10, 0.5)r   zfmod(10, 1.5)r   r   zfmod(-10, 1)r   zfmod(-10, 0.5)zfmod(-10, 1.5)r   r         )r   r   rQ   fmodr   r   rU   r   r   r   r   r   rh   s    r   testFmodMathTests.testFmodX  s4   )TYY/

=$))B"2C8

?DIIb#$6<

?DIIb#$6<

>499S!#4d;

#TYYsC%8$?

#TYYsC%8$?

499S"#567

499R#567

499S##678*diiR8*diib9*diir:*diib93,c24-t43-s34.53,c23-s3*diic:r   c                   ^  T R                  [        [        R                  5        U 4S jnU" S[        R                  " S5      S5        U" S[        R                  " S5      S5        U" S[        R                  " S	5      S
5        U" S[        R                  " S5      S5        T R	                  [        R                  " [
        5      S   [
        5        T R	                  [        R                  " [        5      S   [        5        T R                  [        R                  " [        R                  " [        5      S   5      5        g )Nc                    > Xsu  p4u  pV[        X5-
  5      [        :  d  XF:w  a  TR                  U < SU< SU< 35        g g Nz
 returned z, expected r'   r   r   )r   resultr)   mantrE   emanteexprc   s          r   	testfrexp&MathTests.testFrexp.<locals>.testfrexpr  s@    )/&KT%4:$		3 4 )4r   z	frexp(-1)r   )r   r   zfrexp(0)r   r   r   zfrexp(1)r   )r   r   zfrexp(2)rI   )r   rI   )
r   r   rQ   frexpr   r   r   r   rU   r   )rc   rU  s   ` r   	testFrexpMathTests.testFrexpo  s    )TZZ0	4 	+tzz"~y9*djjmV4*djjmX6*djjmX6C+S1D)!,d3

4::c?1#567r   z2fsum is not exact on machines with double roundingc                 	  ^^ SSK Jn  UR                  mUR                  T-
  mUU4S jn/ S4S/S4/ SQS4/ SQS4/ SQS	4/ S
QS4/ SQS4/ SQS4[	        SS5       Vs/ s H  nSU-  PM
     sn[
        R                  S5      4[	        SS5       Vs/ s H  nSU-  U-  PM     sn[
        R                  S5      4/ SQS4/ SQS4[	        SSS5       Vs/ s H  nSU-  SUS-   -  -
  SUS-   -  -   PM     snS/-   [
        R                  S 5      4/n[	        S5       Vs/ s H  nS!U-  PM
     nnUR                  [	        S"5       Vs/ s H  oVUS-      Xe   -
  PM     snUS"   * /-   US   * 45        [        U5       H1  u  nu  px [        R                  " U5      n	U R                  W	U5        M3     SS%KJn
JnJn  [	        S"5       H  n/ S&QS'-  nSn[	        S(5       H,  nU" SU
" 5       5      S)-  U-
  nX-  nUR                  U5        M.     U" U5        U" U5      nU R                  U" U5      [        R                  " U5      5        M     U R                  [        R                  " S[        R$                  /5      [        R$                  5        U R'                  [        R(                  " [        R                  " [        R*                  S/5      5      5        U R                  [        R                  " S*[-        S5      S+SS,[-        S5      S-/5      S5        U R/                  [        [        R                  S.S./5        U R/                  [        [        R                  [        R$                  [        R$                  * /5        U R/                  [0        [        R                  S//5        U R/                  [0        [        R                  S5        U R/                  [        [        R                  S'S"-  /5        S0 nU R/                  [2        [        R                  U" 5       5        g s  snf s  snf s  snf s  snf s  snf ! [         a    U R                  S#XXU4-  5         GN[         a    U R                  S$XXU4-  5         GNf = f)1Nr   )
float_infoc           	        > Su  pU  HY  n[         R                  " U5      u  pE[        [         R                  " UT	5      5      UT	-
  pTX%:  a
  XU-
  -  nUnOXEU-
  -  nX-  nM[     [	        [        [        [        U5      5      5      S-
  T	-
  TU-
  5      nUS:  a4  SUS-
  -  nUSU-  -  [        X-  =(       a    USU-  S-
  -  5      -   nX&-  n[         R                  " X5      $ )zFull precision summation.  Compute sum(iterable) without any
intermediate accumulation of error.  Based on the 'lsum' function
at https://code.activestate.com/recipes/393090-binary-floating-point-summation-accurate-to-full-p/

rW  rI   r   r   r   )	rQ   rX  rT   ldexpmaxlenbinr'   bool)
iterabletmanttexpr   rR  rE   tailhetinymant_digs
           r   msum MathTests.testFsum.<locals>.msum  s     KE JJqM	

4 :;S8^c:3h&EDX%D  s3s5z?+A-8%$,GDax$q&M!A#ei.IEAaCEM)JJ::e**r   r   )r)  r   r"  0.++d~QJr   d~Qrl  )r)  r   r"  rl  rm  r   rn  )      @Cr   g      g?C)ro  r         9g     @C)g     @Cr   rp  g     @C)g?Cr   g      <g?Cr   i  r   z0x1.df11f45f4e61ap+2r   z-0x1.62a2af1bd3624p-1)r	   r   缉ؗҜ<g7yAC)g7yACg?g7yAgi  rI   r   2   4   g      z0x1.5555555555555p+970g333333?r  zDtest %d failed: got OverflowError, expected %r for math.fsum(%.100r)zAtest %d failed: got ValueError, expected %r for math.fsum(%.100r))randomgaussshuffle)   r)  ir"  gh$.5g#B;r     rx  r)  r"  rm  rn  spamc               3      #    Sv   [         e7fNr   )ZeroDivisionErrorrq   r   r   bad_iter$MathTests.testFsum.<locals>.bad_iter  s     I##s   )sysr\  ri  min_expr    r;   fromhexappend	enumeraterQ   fsumr  r   r   r   ru  rv  rw  r   r   rU   r   r\   r   r   r~  )rc   r\  rj  r   test_valuesr$   termsvalsr)   actualru  rv  rw  jsvr  rh  ri  s                    @@r   testFsumMathTests.testFsum  s    	#&&""X-	+8 IUCL<fE:FC'5&4+\:);7!!TN+NqbdN+]]124"'4.1.QsQhqj.1]]235 34=sC7<UC7KL7K!b!eb1R4j 2":-7KL[]]346!, "'t-Aa-,1$K8Kq1Q3Z%("K8U4[L>I1XI
 	
 $-[#9AI4 VX. $: 	21tA82=DA3Z!VX&!+a/A   DMT
AT$Z49  	C?3TXX>

499dhh_#=>?E9S>66$()D/5$B CDJ	L-VV4DE*dii$((TXXI1FG)TYY9)TYY2-RXJ?	$ 	+TYY
Cs ,1
 M .8 ! I		 256$4GH I I		 256$4GH IIs6   P(P-!P2P7P<Q R$RRc                    [         R                  nU R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S	5        U R                  U" SS
5      S	5        U R                  U" SS5      S5        SnSnS H  nX$-  nX4-  nU R                  U" XV5      U5        U R                  U" Xe5      U5        U R                  U" U* U5      U5        U R                  U" Xe* 5      U5        U R                  U" XV* 5      U5        U R                  U" U* U5      U5        U R                  U" U* U* 5      U5        U R                  U" U* U* 5      U5        M     U R                  U" 5       S5        U R                  U" S5      S5        U R                  U" S
5      S5        U R                  U" SSS5      S5        U R                  U" SSS5      S5        U R                  [        US5        U R                  [        USS5        U R                  [        USS5        U R                  [        USSS5        U R                  U" [        S5      [        S5      5      S	5        g )Nr   r   r   rx     x   T          j9W    P)}    "o  `T"-    l   8P9cC/[N
S9bXl	   9@{wM275k )	 l   Z'^%#>;*Q!/61^f            ^@      U@)rQ   gcdr   r   r   rx   )rc   r  r   ycabs          r   testGcdMathTests.testGcd  s   hhQA&QA&RQ'QA&QQ'QA&QQ'S"q)S"r*R+98:;=	? O4VAAASY*SY*S!QZ+SBZ+SBZ+S!QZ+S!aR[!,S!aR[!,V 	"S3'TC(S"c*A.S!R!,)S%0)S%4)S#t4)S#q$7[-{2?Dr   c                    SSK Jn  SSKJn  [        R
                  n[        R                  [        R                  [        R                  " S5      [        R                  " S5      [        R                  " S5      4n[        [        U5      S-   5       HB  nU R                  U" US U 6 [        R                  " [        S US U  5       5      5      5        MD     U R                  U" S	S
5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" S[!        S5      5      S5        U R                  U" [!        S5      S5      S5        U R                  U" U" S5      U" S5      5      S5        U R                  U" U" SS5      U" SS5      5      U" SS5      5        U R                  U" SSSSS5      S5        U R                  U" SS5      S5        U R                  U" S5      S5        U R                  U" 5       S5        U R                  S[        R"                  " SU" S5      5      5        U R                  U" SSS5      U" SSS5      5        U R%                  [&        5         U" SS9  S S S 5        U R%                  [&        5         U" SSS 5        S S S 5        S![(        R*                  R,                  S-   -  nU R%                  [.        [0        45         U" SU5        S S S 5        U R                  U" [2        5      [2        5        U R                  U" S[2        5      [2        5        U R                  U" S![2        5      [2        5        U R                  U" S"[2        5      [2        5        U R                  U" [4        [2        5      [2        5        U R                  U" [2        [4        5      [2        5        U R                  U" [6        [4        5      [2        5        U R                  U" [4        [6        5      [2        5        U R                  U" [2        * [2        5      [2        5        U R                  U" [2        * [2        * 5      [2        5        U R                  U" S![2        * 5      [2        5        U R9                  [        R:                  " U" [4        5      5      5        U R9                  [        R:                  " U" S[4        5      5      5        U R9                  [        R:                  " U" [4        S!5      5      5        U R9                  [        R:                  " U" S![4        5      5      5        U R9                  [        R:                  " U" [4        [4        5      5      5        U R9                  [        R:                  " U" [4        5      5      5        [<        S#-  n[        S5       HG  nU R9                  [        R>                  " U" U/U-  6 U[        R                  " U5      -  5      5        MI     [        S5       H?  n	[@        SU	-  -  n
U R                  [        R
                  " S$U
-  S%U
-  5      SU
-  5        MA     U R$                  " [&        [        R
                  /S/S&-  QS'P76   g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f)(Nr   r%  Fractionr         @g @r   c              3   *   #    U  H	  oS -  v   M     g7f)rI   Nrq   ).0r  s     r   	<genexpr>&MathTests.testHypot.<locals>.<genexpr>)  s     5HqdHs   g      (@r!        *@r  r      g      ?r   g      ?r   r  TFr         %      %@r   r   r   r   r   皙?string皙@r  rH  r   r   r      r{  )!r$  r%  	fractionsr  rQ   hypotr   r   sqrtgammasinr    r`  assertAlmostEqualsumr   r\   rR   r   r   r  r\  
max_10_expr   r  r   r   r   r   rU   	FLOAT_MAXisclose	FLOAT_MIN)rc   r%  r  r  r   r$   int_too_big_for_float	fourthmaxr   rE   scales              r   	testHypotMathTests.testHypot  s   #&

 vvtww		#

3#Ns4y{#A""tBQx 		#5D!H556 $ 	tS)40r1r*tR$/r4$/tYs^4d;y~t4d;wr{GAJ7<xB/!RA8BPRCSTtUD$=sC 	sC#.ut,#&MM#uT{+	
 	#sC #sC 	
 y)AJ *y)#x% * "s~~'@'@1'D E
M:;!*+ < 	sS)q#,r3-sC#.sC#.sC#.tS)3/sD)3/tS)3/tcT*C0rC4#. 	

5:./

5C=12

5b>23

5S>23

5c?34

5:./ O	rAOODLL)Q)@)2TYYq\)AC D 
 9Cs
*ETZZ%591U7C  	)TZZEC58EfEQ *))) <;s$   Z" Z4
["
Z14
[
[z7hypot() loses accuracy on machines with double roundingc           	         [         R                  n[        R                  n[        R                  " SS9nS H  u  pE[
        R                  U5      n[
        R                  U5      nU R                  XEXgS9   [        R                  " U5         [        U" U5      S-  U" U5      S-  -   R                  5       5      nS S S 5        U R                  U" Xg5      W5        S S S 5        M     g ! , (       d  f       N3= f! , (       d  f       M  = f)N  )prec))z0x1.10e89518dca48p+29z0x1.1970f7565b7efp+30)z0x1.10106eb4b44a2p+29z0x1.ef0596cdc97f8p+29)z0x1.459c058e20bb7p+30z0x1.993ca009b9178p+29)z0x1.378371ae67c0cp+30z0x1.fbe6619854b4cp+29)z0x1.f4cd0574fb97ap+29z0x1.50fe31669340ep+30)z0x1.494b2cdd3d446p+29z0x1.212a5367b4c7cp+29)z0x1.f84e649f1e46dp+29z0x1.1fa56bef8eec4p+30)z0x1.2e817edd3d6fap+30z0x1.eb0814f1e9602p+29)z0x1.0d3a6e3d04245p+29z0x1.32a62fea52352p+30)z0x1.888e19611bfc5p+29z0x1.52b8e70b24353p+29)z0x1.538816d48a13fp+29z0x1.7967c5ca43e16p+29)z0x1.57b47b7234530p+29z0x1.74e2c7040e772p+29)z0x1.821b685e9b168p+30z0x1.677dc1c1e3dc6p+29)z0x1.9e8247f67097bp+29z0x1.24bd2dc4f4baep+29)z0x1.b73b59e0cb5f9p+29z0x1.da899ab784a97p+28)z0x1.94a8d2842a7cfp+30z0x1.326a51d4d8d8ap+30)z0x1.e930b9cd99035p+29z0x1.5a1030e18dff9p+30)z0x1.1592bbb0e4690p+29z0x1.a9c337b33fb9ap+29)z0x1.1243a50751fd4p+29z0x1.a5a10175622d9p+29)z0x1.57a8596e74722p+30z0x1.42d1af9d04da9p+30)z0x1.ee7dbd9565899p+29z0x1.7ab4d6fc6e4b4p+29)z0x1.5c6bfbec5c4dcp+30z0x1.02511184b4970p+30)z0x1.59dcebba995cap+30z0x1.50ca7e7c38854p+29)z0x1.768cdd94cf5aap+29z0x1.9cfdc5571d38ep+29)z0x1.dcf137d60262ep+29z0x1.1101621990b3ep+30)z0x1.3a2d006e288b0p+30z0x1.e9a240914326cp+29)z0x1.62a32f7f53c61p+29z0x1.47eb6cd72684fp+29)z0x1.d3bcb60748ef2p+29z0x1.3f13c4056312cp+30)z0x1.282bdb82f17f3p+30z0x1.640ba4c4eed3ap+30)z0x1.89d8c423ea0c6p+29z0x1.d35dcfe902bc3p+29)hxhyr   r  rI   )rQ   r  r$  r%  Contextr;   r  subTestlocalcontextr  r   )	rc   r  r%  high_precisionr  r  r   r  zs	            r   testHypotAccuracyMathTests.testHypotAccuracyn  s     

// c2$
FBJ b!Ab!Aa5)).9wqz1}wqz1}<BBDEA :  qa0 65O$
P :9 65s$   6C:/C)< C:)
C73C::
D		c                    SSK Jn  SSKJn  [        R
                  n[        R                  nU R                  U" SS5      S5        U R                  U" SS5      S5        [        S	5       H  n[        S
5       Hp  n[        S [        U5       5       5      n[        S [        U5       5       5      nU R                  U" Xx5      U" [        S [        Xx5       5       5      5      5        Mr     M     U R                  U" / SQ/ SQ5      S5        U R                  U" [        / SQ5      [        / SQ5      5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" [        S5      S4S5      S5        U R                  U" S[        S5      S45      S5        U R                  U" S[        S5      4S5      S5        U R                  U" SS5      S5        U R                  U" U" S5      U" S5      4U" S5      U" S5      45      U" S5      5        U R                  U" U" SS5      U" SS5      4U" SS5      U" SS5      45      U" SS5      5        U R                  U" SS5      S 5        U R                  U" S!S!5      S"5        U R                  U" S#S#5      S"5        U R                  S$[        R                  " S$U" S%S&5      5      5        U R                  S$[        R                  " S$U" S&S%5      5      5        U R                  U" S'S(5      U" S)S(5      5         " S* S+[        5      n	U R                  U" U	" S5      S5      S5        U R!                  ["        5         U" SS,S-9  S S S 5        U R!                  ["        5         U" S5        S S S 5        U R!                  ["        5         U" SS,S.5        S S S 5        U R!                  ["        5         U" SS5        S S S 5        U R!                  ["        5         U" S/S5        S S S 5        U R!                  [$        5         U" S0S15        S S S 5        U R!                  [$        5         U" SS25        S S S 5        U R!                  ["        5         U" S3S45        S S S 5        U R!                  ["        5         U" S5S65        S S S 5        S7[&        R(                  R*                  S
-   -  n
U R!                  [$        [,        45         U" SU
4S85        S S S 5        U R!                  [$        [,        45         U" S8SU
45        S S S 5        U R!                  ["        5         U" S9S5        S S S 5        U R!                  ["        5         U" S/S5        S S S 5         " S: S;5      nU R!                  [$        5         U" S/U" 5       /5        S S S 5        [        S<5       HR  n[.        R.                  " 5       [.        R.                  " 5       pU R                  U" U4U45      [1        Xx-
  5      5        MT     [2        S=S>S"S?[4        [6        /n[8        R:                  " US@SA9 H  n[8        R:                  " US@SA9 H  n[        Xx5       VVs/ s H	  u  pX-
  PM     nnn[=        [?        [        R@                  U5      5      (       a  U R                  U" Xx5      [4        5        Mj  [=        [?        [        RB                  U5      5      (       d  M  U RE                  [        RB                  " U" Xx5      5      5        M     M     [F        SB-  n[        S5       H  nU4U-  nS&U-  nU RE                  [        RH                  " U" Xx5      U[        R                  " U5      -  5      5        U RE                  [        RH                  " U" X5      U[        R                  " U5      -  5      5        M     [        S5       Hm  n[J        S U-  -  nSCU-  S@U-  4nSDnU R                  [        R
                  " Xx5      S
U-  5        U R                  [        R
                  " X5      S
U-  5        Mo     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNv= f! , (       d  f       GNa= f! , (       d  f       GNL= f! , (       d  f       GN7= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= fs  snnf )ENr   r  r  )r   r   r   )r   r   r   r!  r   rI   r   )r   rI   r   	   r   c              3   P   #    U  H  n[         R                  " S S5      v   M     g7fr   Nru  uniformr  ks     r   r  %MathTests.testDist.<locals>.<genexpr>       BA&..Q//   $&c              3   P   #    U  H  n[         R                  " S S5      v   M     g7fr  r  r  s     r   r  r    r  r  c              3   4   #    U  H  u  pX-
  S -  v   M     g7f)r   Nrq   )r  pxqxs      r   r  r    s     FI&"bg#-Is   )      ,@r   )r   r   r  )   r   )rI   r  r  r   )   r   r   r  r  )rI   i)r  r   rI   r  )TTFFTT)TFTFFFr   )     *@g      )@      
r   rq   r   )r   )r   )r   r   r   )r   r   r   )r   r   r   c                       \ rS rSrSrg)MathTests.testDist.<locals>.Ti  rq   Nrv   rq   r   r   Tr    r   r   r  )r   r   r  pq)rx  r   r  )r  r  r  )r   rI   r   r   )r   r  rx  )r   r   r  rx  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   abcxyzr  )rI   r   r   c                   "    \ rS rSr\" 5       rSrg)$MathTests.testDist.<locals>.BadFloati  rq   N)rl   rm   rn   ro   r   ri   rp   rq   r   r   BadFloatr    r@  r   r     r  r   r  r   repeatr   r   )r   r   )&r$  r%  r  r  rQ   distr  r   r    tupler  r  zipiterr\   rR   r   r   r   r  r\  r  r  ru  r'   r   r   r   	itertoolsproductanymaprV   rU   r   r  r  r  )rc   DFr  r  r$   r  r  r  r  r  r  valuesr  r  diffsr  r   rE   r  s                       r   testDistMathTests.testDist  s2   (+yyyy 	o/?@#Fi4c: qA1XBqBBBqBB&&JFCIFFG   	o/?@#Fd?3T:J5KLcR 	k;7>gw/4y~q17;R@g	#';<bAr9S>2G<bAh0"5quadmadAbE];QrUCqRy!Ar(3a2h"b	5JK2r	$DFH	
 	224	 	b"s+MM#tGV45	
 	MM#tFG45	
 	),),	
	 	a	lZ93? y)9	* *y)O *y)Iy1 *y)AJ *y)%y1 *z*y) +z*L) +y)$g. *y) * "s~~'@'@1'D E
M:;!*+V4 <
M:;!234 <y)qM *y)!aL *	# 	# z*!xzl# + rA==?FMMOqT1$-s15z: 
 tS$S9""6!4A&&va8/21y9yVRy9s4::u-..$$T!Z5TZZ/00OODJJtAz$:; 9 5 O	rAq A
AOODLLaY15MNOOODLLaY15MNO	  9Cs
*E5!E'"AATYYq_ag6TYYq_ag6 y *)))))))))****)))) <;;;)))) +* :s   8a	a*a<+
b
b 9
b2 
c
c.
c(;c:*d
d:d0,e9e

a'*
a9<
b
b 
b/2
c
c
c%(
c7:
d	
d
d-0
d?
ec                     U R                  [        5         [        R                  " SS// SQ5        S S S 5        g ! , (       d  f       g = f)Nr   rI   )r   r   r   )r   r   rQ   r  rh   s    r   test_math_dist_leakMathTests.test_math_dist_leak.  s.    z*IIq!fi( +**s	   ;
A	c           	      :   [        [        S5      5      [        [        SS5      5      -   [        SS5       VVs/ s H  n[        SS5        H  nSU-  U-   PM     M!     snn-   S	S
-  SS-  /-   nU H~  nU R                  US9   [        R                  " U5      nU R                  [        U5      [        5        U R                  XU-  U5        U R                  XES-   US-   -  5        S S S 5        M     U R                  [        5         [        R                  " S5        S S S 5        [        R                  " S5      nU R                  [        U5      [        5        U R                  US5        [        R                  " S5      nU R                  [        U5      [        5        U R                  US5         " S S[        5      n[        R                  " U" S5      5      nU R                  [        U5      [        5        U R                  US5        U R                  [        5         [        R                  " U" S5      5        S S S 5        SS[        R                  " S5      SSS/nU HO  nU R                  US9   U R                  [         5         [        R                  " U5        S S S 5        S S S 5        MQ     g s  snnf ! , (       d  f       GMb  = f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       NW= f! , (       d  f       M  = f)Nr  iX> i(F <   ry  i(   rI   r   i'  r  i  r`   r   r   TFr   c                        \ rS rSrS rS rSrg)(MathTests.testIsqrt.<locals>.IntegerLikeiP  c                     Xl         g r_   r`   rb   s     r   rd   1MathTests.testIsqrt.<locals>.IntegerLike.__init__Q  s    "
r   c                     U R                   $ r_   r`   rh   s    r   r}   2MathTests.testIsqrt.<locals>.IntegerLike.__index__T  s    zz!r   r`   Nr   rq   r   r   IntegerLiker  P  s    #"r   r  i  rA  r   r  za stringz3.5y              @g      Y@r   )listr    r  rQ   isqrtassertIsr   rT   assertLessEqual
assertLessr   r   r   objectr$  r%  r   )rc   r   r$   r  ra   r  r  
bad_valuess           r   	testIsqrtMathTests.testIsqrt3  s]    t5|456!&r3HAsBAq!taxxHI $wD!" 	 !EE*JJu%d1gs+$$QS%0!ac{3	 +* ! z*JJrN + JJtd1gs#AJJud1gs#A	"& 	" JJ{4()d1gs#Bz*JJ{2' +
 W__U3T4

  EE*&&y1JJu% 2 +*  W I
 +* +*. +* 21 +*sN   &J>A$K	K'K)<LK:)L
K	
K&)
K7:
LL
L	c                 &   [         R                  nU R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS5      S5        U R                  U" SS	5      S
5        U R                  U" S	S5      S
5        U R                  U" SS5      S5        SnSnS H  nX$-  nX4-  nX#-  U-  nU R                  U" XV5      U5        U R                  U" Xe5      U5        U R                  U" U* U5      U5        U R                  U" Xe* 5      U5        U R                  U" XV* 5      U5        U R                  U" U* U5      U5        U R                  U" U* U* 5      U5        U R                  U" U* U* 5      U5        M     U R                  U" 5       S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" SS	S5      S5        U R                  U" SSS	5      S5        U R                  [        US5        U R                  [        USS	5        U R                  [        USS5        U R                  [        USSS5        U R                  U" [        S5      [        S	5      5      S
5        g )Nr   r   r   rx  r  r  iY  r  r  iH  r  r  r  l    ,`aUx-xB:Vn
Ldbl   me%Y% l   };T^	 )r  l   |/Kr2 r  i7  r  r  )rQ   lcmr   r   r   rx   )rc   r  r   r  r  r  r  ds           r   test_lcmMathTests.test_lcmh  s   hhQA&QA&RQ'QA&QQ'QA&QQ'S"s+S"s+R,98:R	T ! (AAA	ASY*SY*S!QZ+SBZ+SBZ+S!QZ+S!aR[!,S!aR[!,( 	"S3'TC(S"c*E2S!R!,)S%0)S%4)S#t4)S#q$7[-{2?Er   c           	      R	   U R                  [        [        R                  5        U R                  [        [        R                  SS5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS	5      S
5        U R	                  S[        R                  " S	S5      S5        U R                  [
        [        R                  SS5        U R                  [
        [        R                  SS5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        R                  " [        S5      5      5        SSSSS-  4 GHy  nU R                  [        R                  " [        U* 5      [        5        U R                  [        R                  " [        U* 5      [        5        U R                  [        R                  " SU* 5      S5        U R                  [        R                  " SU* 5      S5        U R                  [        R                  " SU* 5      S5        U R                  [        R                  " SU* 5      S5        U R                  [        R                  " [        R                  " [        U* 5      5      5        U R                  [
        [        R                  SU5        U R                  [
        [        R                  SU5        U R                  [        R                  " SU5      S5        U R                  [        R                  " SU5      S5        U R                  [        R                  " [        U5      [        5        U R                  [        R                  " [        U5      [        5        U R                  [        R                  " [        R                  " [        U5      5      5        GM|     g )Nr   r  z
ldexp(0,1)r   r   z
ldexp(1,1)rI   zldexp(1,-1)r   r   zldexp(-1,1)r-  r   r  r   ir   r      i+順     d(	       Fx:^V r  r  )r   r   rQ   r^  r   r  r   r   r   r   rU   r   rc   r   s     r   	testLdexpMathTests.testLdexp  s   )TZZ0)TZZc:

<Aa!4

<Aa!4

=$**Qr"2C8

=$**R"2B7-RA-S'BB126C2C8C,c2D$/6

4::c1#567 R0ATZZaR0#6TZZqb148TZZQB/4TZZaR0#6TZZQB/4TZZaR0#6OODJJtzz#r':;<mTZZQ?mTZZa@TZZA.3TZZQ/5TZZQ/5TZZa0$7OODJJtzz#q'9:; 1r   c                 R    U R                  [        R                  " SS5      S5        g )Nl   s@ba ig       )r   rQ   r^  rh   s    r   testLdexp_denormalMathTests.testLdexp_denormal  s      	$4e<fEr   c                 "   U R                  [        [        R                  5        U R                  [        [        R                  SSS5        U R	                  S[        R                  " S[        R
                  -  5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " [        R
                  5      S5        U R	                  S	[        R                  " S
S5      S5        U R	                  S[        R                  " SS-  S5      S5        U R	                  S[        R                  " SS-  S5      S5        U R	                  S[        R                  " SS-  5      S5        U R                  [        [        R                  S5        U R                  [        [        R                  SS-  * 5        U R                  [        [        R                  SS5        U R                  [        [        R                  [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nr   rI   r   zlog(1/e)r   zlog(1)r   zlog(e)z	log(32,2)r  r   zlog(10**40, 10)r  r  zlog(10**40, 10**20)r'  zlog(10**1000)r  gO+@r   rH  )r   r   rQ   logr   r   r   r   r   r   r   rU   r   rh   s    r   testLogMathTests.testLog  s   )TXX.)TXXq!Q7

:txx$&&126

8TXXa[!,

8TXXdff-q1

;A2

$dhhr2vr&:B?

($((2r66*BAF

?DHHRX$6%	'*dhh5*dhhT	:*dhhC8*dhh5#,

488C=12r   c           	         U R                  [        [        R                  5        SSS-  SS-  4 HF  nU R	                  [        R                  " U5      [        R                  " [        U5      5      5        MH     U R                  [        [        R                  S5        U R                  [        R                  " [        5      [        5        g )NrI   Z   i,  r   )	r   r   rQ   log1pr  r;   r   r   r   r(  s     r   	testLog1pMathTests.testLog1p  s    )TZZ0QUAsF#A""4::a=$**U1X2FG $*djj"5C#.r   c                 <   U R                  [        [        R                  5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " S5      S5        U R	                  [        R                  " SS-  5      S5        U R	                  [        R                  " SS	-  5      S
5        U R	                  [        R                  " SS-  5      S5        U R                  [
        [        R                  S5        U R                  [
        [        R                  [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nr   r   rI   r   r   r   i  g     @   g      @i  g     @@r   )
r   r   rQ   log2r   r   r   r   rU   r   rh   s    r   testLog2MathTests.testLog2  s   )TYY/ 	1s+1s+1s+ 	1d7+V41d7+V41d7+V4*dii6*dii6

499S>23r   r  c           	         [        SS5       Vs/ s H.  n[        R                  " [        R                  " SU5      5      PM0     nn[        SS5       Vs/ s H  n[	        U5      PM     nnU R                  X#5        g s  snf s  snf )Nrr  r8  r   )r    rQ   r9  r^  r;   r   )rc   r   r  r)   s       r   testLog2ExactMathTests.testLog2Exact  sm    
 :?ud9KL9KA$))DJJsA./9KL&+E4&89&8E!H&89* M9s   5A=Bc                 N   U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S	[        R                  " SS
-  5      S5        U R                  [
        [        R                  S5        U R                  [
        [        R                  SS
-  * 5        U R                  [
        [        R                  [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nz
log10(0.1)皙?r   zlog10(1)r   r   z	log10(10)r  zlog10(10**1000)r  g     @@r   )r   r   rQ   log10r   r   r   r   r/  r   r   rU   r   rh   s    r   	testLog10MathTests.testLog10  s    )TZZ0

<C"5

:tzz!}a0

;

22

$djjT&:FC*djj$7*djj2t8)<*djj$7#,

4::c?34r   c                    [         R                  n[        R                  n[        R
                  nU R                  U" [        / SQ5      S5      S5        U R                  U" SS/SS/5      S5        U R                  U" / / 5      S	5        U R                  U" S
/S/5      S
5        U R                  U" S/S
/5      S
5        SSU" SS5      U" SS5      4U" S5      U" S5      4SSU" SS5      4SU" SS5      4SU" S5      44 H  nXD4XDS S S
2   44 Ht  u  pVU R                  XVS9   [        S [        XVSS9 5       5      nU" XV5      nU R                  Xx5        U R                  [        U5      [        U5      5        S S S 5        Mv     M     U R                  [        U5        U R                  [        U/ 5        U R                  [        U/ / / 5        U R                  [        US S/5        U R                  [        US/S 5        U R                  [        US/S/5        U R                  [        USS/S/5        U R                  [        US/SS/5        U R                  U" S/S/5      S5        U R                  U" S/S/5      S5        U R                  U" S/S/5      S5        U R                  U" S/S-  S/S-  5      S5        U R                  [        USS -  /S/5        U R                  [        US/SS -  /5        S! n	U R                  [         5         U" [#        S5      U	" S5      5        S S S 5        U R                  [         5         U" U	" S5      [#        S5      5        S S S 5        S	S"KJn
  U R                  U" U
" S5      S/5      S	5        U R                  U" S/U
" S5      5      S	5         " S# S$5      nU R                  [         5         U" SU" 5       S// SQ5        S S S 5        U R                  [         5         U" / SQSU" 5       S/5        S S S 5        U R                  [        5         U" S%S/SS/5        S S S 5        U R                  [        5         U" SS/S%S/5        S S S 5        U R                  U" S&[         R(                  /S'S(/5      [         R(                  5        U R                  U" S&[         R(                  /[         R(                  S(/5      [         R(                  5        U R                  U" S&[         R(                  /[         R(                  [         R(                  /5      [         R(                  5        U R                  U" S&[         R(                  * /S'S(/5      [         R(                  * 5        U R+                  [         R,                  " U" S&[         R(                  /[         R(                  * [         R(                  /5      5      5        U R+                  [         R,                  " U" S&[         R.                  /S'S(/5      5      5        U R+                  [         R,                  " U" S&[         R(                  /[         R.                  S(/5      5      5        U R+                  [         R,                  " U" S&[         R(                  /S)[         R.                  /5      5      5        S*nU R                  U" U6 S+5        g ! , (       d  f       GM  = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN&= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f),N)r  r  r$  r     r         @r  g      @g     0@r   r   r   )r   g      r   r   r   )rF  r     r  c              3   .   #    U  H  u  pX-  v   M     g 7fr_   rq   )r  p_iq_is      r   r  (MathTests.testSumProd.<locals>.<genexpr>  s     "T=S39=Ss   Tstrictr  r   r  r$  r'  r   r&  i r%  l     9V r  c              3   B   #    [        U 5       H  nUv   M	     [        e7fr_   )r    RuntimeError)r   r$   s     r   raise_after*MathTests.testSumProd.<locals>.raise_after.  s     1X s   )BasicIterClassc                        \ rS rSrS rS rSrg)*MathTests.testSumProd.<locals>.BadMultiplyi=  c                     [         er_   rO  rc   others     r   __mul__2MathTests.testSumProd.<locals>.BadMultiply.__mul__>      ""r   c                     [         er_   rV  rW  s     r   __rmul__3MathTests.testSumProd.<locals>.BadMultiply.__rmul__@  r[  r   rq   N)rl   rm   rn   ro   rY  r]  rp   rq   r   r   BadMultiplyrT  =  s    ##r   r_  r  g333333$@g3333334@gL>@gL4@))r  r  r  )r                           r   )rQ   sumprodr$  r%  r  r  r   r  r  r  r  r   r   r   r   r  rO  r    test.test_iterrR  r   r   rU   r   )rc   rb  r%  r  r  r  r  r)   r  rP  rR  r_  r   s                r   testSumProdMathTests.testSumProd  s   ,,//%% 	l!3Y?E#sc3Z8$?R!,"t,b1"t,b1 a^Xa^,S\73<((1a.!!Q 	
A !ttW.\\A\+""TSd=S"TTH$Q]F$$X6$$T(^T&\B	 ,+ /	
$ 	)W-)Wb1)Wb"b9)WdRD9)WrdD9)WsecU; 	*gBx">*gtb"X> 	&A3/8!vh/8&F84f=%>G-2t8*seD-3%"d(D	 |,E"I{1~. -|,KNE"I. - 	2!2QC8!<!nQ&78!<	# 	#
 |,R+Y7 -|,IKM267 - y)UAJB( *y)QGeQZ( * 	$!1D$<@$((K$!1DHHd3CDdhhO$!1DHHdhh3GH$((S$	!2T4LADHH9M

7D$((+;txxi=R#STU

7D$((+;dD\#JKL

7D$((+;dhh=M#NOP

7D$((+;dDHH=M#NOP O$-M ,+> -,,, -,,, *)))sU   &A[[%[7\	\8\-#\?
["%
[47
\	
\
\*-
\<?
]zBsumprod() accuracy not guaranteed on machines with double roundingc                 ,   [         R                  nU R                  U" S/S-  S/S-  5      S5        U R                  U" S/S-  SS/S-  5      S5        U R                  U" SS/S-  S/S-  5      S5        U R                  U" / SQS/S	-  5      S
5        g )Nr@  r  r   r   r  TF)r   g\nTr   g\nr   r   )rQ   rb  r   )rc   rb  s     r   test_sumprod_accuracyMathTests.test_sumprod_accuracy\  s    
 ,,#aSV4c:#dE]R-?@#F$!3cURZ@#F!<seAgFLr   cpuc                 R  ^ [         R                  n[        R                  n[        R
                  n[        R                  n " U4S jS[        5      m " U4S jS[        5      nS nS nSSS	S
SSSSS-  ST" S5      4
SSSS-  -  SSS-  -  SSS-  -  SSSSSSS-  4	SS S![        S"5      [        S"5      * [        S#5      S$S%S&U" S'5      S(4S)S*U" S+5      U" S,5      U" S'S-5      U" S.S/5      S0S1S2T" S5      4
U" S35      U" S45      U" S55      U" S65      U" S75      U" S75      * U" S#5      S8S94	S:SSS-  -  SSS;S<S=S>4S?S@SASBSCSDSEST" SF5      4/	nU HS  n	[        SG5       HA  n
U" XSH9 H4  nU" XSH9 H'  nX4nU R                  U" U/UQ76 U" U/UQ76 U5        M)     M6     MC     MU     g )INc                   <   > \ rS rSrU 4S jrU 4S jr\r\rS rSr	g)*MathTests.test_sumprod_stress.<locals>.Intin  c                 >   > T" [        U 5      [        U5      -   5      $ r_   rT   rc   rX  Ints     r   __add__2MathTests.test_sumprod_stress.<locals>.Int.__add__o      3t9s5z122r   c                 >   > T" [        U 5      [        U5      -  5      $ r_   rn  ro  s     r   rY  2MathTests.test_sumprod_stress.<locals>.Int.__mul__q  rs  r   c                      S[        U 5       S3$ )NzInt()rn  rh   s    r   __repr__3MathTests.test_sumprod_stress.<locals>.Int.__repr__u      c$i[**r   rq   N
rl   rm   rn   ro   rq  rY  __radd__r]  rx  rp   rp  s   r   rp  rl  n      33HH+r   rp  c                   <   > \ rS rSrU 4S jrU 4S jr\r\rS rSr	g)*MathTests.test_sumprod_stress.<locals>.Fltix  c                 >   > T" [        U 5      [        U5      -   5      $ r_   rn  ro  s     r   rq  2MathTests.test_sumprod_stress.<locals>.Flt.__add__y  rs  r   c                 >   > T" [        U 5      [        U5      -  5      $ r_   rn  ro  s     r   rY  2MathTests.test_sumprod_stress.<locals>.Flt.__mul__{  rs  r   c                      S[        U 5       S3$ )NzFlt(rw  rn  rh   s    r   rx  3MathTests.test_sumprod_stress.<locals>.Flt.__repr__  rz  r   rq   Nr{  r}  s   r   Fltr  x  r~  r   r  c                 >    Sn[        XSS9 H  u  p4X#U-  -  nM     U$ )zThis defines the target behavior including exceptions and special values.
However, it is subject to rounding errors, so float inputs should be exactly
representable with only a few bits.
r   TrL  )r  )r  r  r  rI  rJ  s        r   baseline_sumprod7MathTests.test_sumprod_stress.<locals>.baseline_sumprod  s-    
 ET2s" 3Lr   c                      U " U6 nS[        U5      [	        U5      4$ ! [         [        4 a    e [         a  n[        U5      SS4s SnA$ SnAff = f)zHMake comparing functions easier. Returns error status, type, and result.NNone)AssertionError	NameError	Exceptionr   repr)funcr   rQ  r   s       r   run*MathTests.test_sumprod_stress.<locals>.run  sZ    -t
 ftF|33	 #I.  -Awf,,-s    AAAAr  r  i  l        l        ra  r`  rI   P   r   rx  )	      @g      g      @     &@g     y@g      ?      ?r   g            3r  r  r  r   i  i:,  r  r  g      8r   i  g      @rF  r   r   NaNr  r  y      @      @r  r   r  g      z10.5z-2.25r   i   y      @      ?a   iz6.125z12.375z-2.75r   Infr  g      +@g      pl     g      pg      `g      )g      <g         r  g      r  g      g      g     `7@TFr   r   r  )rQ   rb  r  r  r$  r%  r  r  rT   r;   r    r   )rc   rb  r  r%  r  r  r  r  poolspoolsizeargs1args2r   rp  s                 @r   test_sumprod_stressMathTests.test_sumprod_stressg  s   ,,##//%%	+# 	+	+% 	+		4 VUE5%BSVLM1c6\2ag:r!T'z8UNQ383eElU5\M5<4R#'E76?GG,<hr1o#r"M2sCFDWwx0''2BGAJ'%.'%."dLBq$wJ1iZAE6643q6B
" Da$T7E!(!; %~(( 0848/$/  "< 8 ! r   c           	      ^  ^^^^^	^
^^^^^^^^^^^^ SS K mSSKJm  SSKJm  SSKJn  SSKJmJ	mJ
m  SSKJmJmJm  SSKJn  U" SS	5      mUUU4S
 jmU4S jmS mUUUUUUUUU4	S jm	UU4S jm
U	U
4S jmSnSmSmU" UUU4S j[#        U5       5       5      nU R%                  US5        g )Nr   r  )starmap)
namedtuple)r9  r  r  )choicesr  rw  )median
DotExample)r   r  target_sumprod	conditionc                 |   > [        TU 5      n[        TU5      n[        T" TR                  [        X#SS95      5      $ )NTrL  )r  r  mulr  )r   r  vec1vec2r  operatorr  s       r   DotExactDMathTests.test_sumprod_extended_precision_accuracy.<locals>.DotExact  s8    x#Dx#Dwx||SD-IJKKr   c                 x   > ST" [        [        U 5      [        [        U5      5      -  [        T" X5      5      -  $ )Nr   )r  r'   )r   r  r  s     r   	ConditionEMathTests.test_sumprod_extended_precision_accuracy.<locals>.Condition  s/    #c1+s3{;;c(1.>QQQr   c                 `    X-
  US-
  -  n[        U5       Vs/ s H	  o@X4-  -   PM     sn$ s  snf Nr   )r    )lohir   widthr$   s        r   linspaceDMathTests.test_sumprod_extended_precision_accuracy.<locals>.linspace  s2    WQ'E,1!H5HqNH555s   +c                   >	 U S-  nS/U -  nS/U -  nT" U5      nT" [        [        US-  5      5      US9n[        US-  5      S-   US'   SUS'   U Vs/ s H  nT" SS5      T" U5      -  PM     snUS	U& U Vs/ s H  nT" SS5      T" U5      -  PM     snUS	U& [        [        [        T" US-  SX-
  5      5      5      n[        X 5       HC  nT" SS5      T" XhU-
     5      -  X8'   T" SS5      T" XhU-
     5      -  T" X45      -
  X8   -  XH'   ME     [        [        X45      5      n	T" U	5        [        U	6 u  p4T" X4T" X45      T
" X45      5      $ s  snf s  snf )
aH  Algorithm 6.1 (GenDot) works as follows. The condition number (5.7) of
the dot product xT y is proportional to the degree of cancellation. In
order to achieve a prescribed cancellation, we generate the first half of
the vectors x and y randomly within a large exponent range. This range is
chosen according to the anticipated condition number. The second half of x
and y is then constructed choosing xi randomly with decreasing exponent,
and calculating yi such that some cancellation occurs. Finally, we permute
the vectors x, y randomly and calculate the achieved condition number.
rI   r   )r  r   r   r   r   r   N)r    rT   r  r  roundr  )r   r  n2r   r  r  r   r  r$   pairsr  r  r  r  r  r  r9  rw  r  s             r   GenDotBMathTests.test_sumprod_extended_precision_accuracy.<locals>.GenDot  su    aB	A	AQA c!A#h2.Aq1u:>AaDAbE<=>AqgdC(472A>AcrF<=>AqgdC(472A>AcrF S1cAD 9:;A2\tS)Dr6O;c*T!F)_<x~MQRQUU "
 QOEEN;DAaHQNIaODD ?>s   E:Ec                 j   > Uu  p#pET" [        U5      U * /-   [        U5      S/-   5      nT" Xd-  5      $ r  )r  )	resexr   r  r  r  r   r  r  s	          r   RelativeErrorIMathTests.test_sumprod_extended_precision_accuracy.<locals>.RelativeError  s>    .0+A.aSD6)47aS=9A*++r   c                 `   > T" SU5      nU " UR                   UR                  5      nT" XC5      $ )Nr  )r   r  )dotfuncr  r   r  r  r  r  s        r   TrialAMathTests.test_sumprod_extended_precision_accuracy.<locals>.Trial  s-    AB"$$%C ))r   r  r  gꌠ9Y>)Fc              3   T   >#    U  H  nT" [         R                  TT5      v   M     g 7fr_   )rQ   rb  )r  r$   r  r  r   s     r   r  EMathTests.test_sumprod_extended_precision_accuracy.<locals>.<genexpr>  s!     NAeDLL!Q77s   %(rq  )r  r  r  r  r  collectionsr  rQ   r9  r  r  ru  r  r  rw  
statisticsr  r    r  )rc   r  r  timesrelative_errr  r  r  r  r  r  r  r  r  r  r  r  r9  r   r  rw  r  r  s        @@@@@@@@@@@@@@@@@@r   (test_sumprod_extended_precision_accuracy2MathTests.test_sumprod_extended_precision_accuracy  s     	&%*))44%.WX
	L
	R	6$	E $	EL	,
	*
  NuNNe,r   c                 f  ^  T R                  [        [        R                  5        U 4S jnU" S[        R                  " S5      S5        U" S[        R                  " S5      S5        T R	                  [        R                  " [
        5      S[
        45        T R	                  [        R                  " [        5      S	[        45        [        R                  " [        5      nT R                  [        R                  " US
   5      5        T R                  [        R                  " US   5      5        g )Nc                    > Xsu  p4u  pV[        X5-
  5      [        :  d  [        XF-
  5      (       a  TR                  U < SU< SU< 35        g g rO  rP  )r   rQ  r)   v1v2e1e2rc   s          r   testmodf$MathTests.testModf.<locals>.testmodf  sF    !'HRhr25zC3ru::		3 4 $.r   z	modf(1.5)r   )r   r   z
modf(-1.5)r   )r   r   r   r   r   r   )
r   r   rQ   modfr   r   r   r   r   rU   )rc   r  modf_nans   `  r   testModfMathTests.testModf
  s    )TYY/	4 	diinj9tyy=3#s444,799S>

8A;/0

8A;/0r   c                 &   U R                  [        [        R                  5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S5        U R	                  S[        R                  " SS5      S	5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " S[        5      S
5        U R                  [        R                  " S[        5      S
5        U R                  [        R                  " [        R                  " [        S5      5      5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " S[        5      S5        U R                  [        [        R                  SS5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " [        [        5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      S
5        U R                  [        R                  " [        S5      S
5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        [        5      S5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " [        [        5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      [        5        U R                  [        R                  " [        S5      S
5        U R                  [        R                  " [        S5      S
5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        S5      S5        U R                  [        R                  " [        [        5      S5        U R                  [        R                  " [        R                  " [        [        5      5      5        U R                  [        R                  " S[        5      S
5        U R                  [        R                  " SS5      S5        U R                  [        [        R                  SS5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        [        R                  SS5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S[        5      S
5        U R                  [        R                  " [        R                  " S[        5      5      5        U R                  [        R                  " S
[        5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
S5      S
5        U R                  [        R                  " S
[        5      S
5        U R                  [        R                  " S
[        5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " [        S5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " SS5      S
5        U R                  [        R                  " [        S5      S
5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " S[        5      [        5        U R                  [        R                  " S[        5      [        5        U R	                  S[        R                  " SS5      S 5        U R	                  S![        R                  " SS5      S"5        U R	                  S#[        R                  " SS
5      S5        U R	                  S$[        R                  " SS5      S
5        U R	                  S%[        R                  " SS5      S
5        U R	                  S&[        R                  " SS5      S'5        U R	                  S([        R                  " SS5      S)5        U R	                  S*[        R                  " SS5      S+5        U R                  [        [        R                  SS'5        U R                  [        [        R                  SS	5        g ),Nzpow(0,1)r   r   zpow(1,0)zpow(2,1)rI   z	pow(2,-1)r   r   r   r)  r   r   r   r   r          r   rI  r   g      .ggffffff?r  ?r@  ggggffffffz	(-2.)**3.g       z	(-2.)**2.r   z	(-2.)**1.z	(-2.)**0.z
(-2.)**-0.z
(-2.)**-1.r   z
(-2.)**-2.r  z
(-2.)**-3.g      )r   r   rQ   powr   r   r   r   r   rU   r   r  r   rh   s    r   testPowMathTests.testPow  s   )TXX.

:txx!}a0

:txx!}a0

:txx!}a0

;24#q)3/$*D1$((1c*R0$((1d+b1

488C#345

488As#345

488As#345!S)1--66B 	"c*B/"b)2."c*B/"b)2."b)2."c*B/*dhhC8*dhhD9*dhhC8"d+S1

488B#456 	#s+S1#r*C0#s+S1#r*C0#r*B/#s+R0#s+R0#t,b1#s+R0#t,b1

488C#567 	#s+R0#r*C0#s+R0#r*B/#r*B/#s+R0*dhhS9*dhhT:*dhhS9#t,c2

488C#567 	$,c2$+T2$,c2$+S1$+R0$,b1$,b1$-r2$,c2$-r2

488D##678 	#s+R0#r*C0*dhhS9#r*B/#r*B/#s+R0#s+R0*dhhT:#s+S1#t,b1

488C#567 	"c*B/"b)2."c*B/"b)2."b)2."c*B/"c*B/"d+R0"c*B/"d+R0"c*B/ 	#r*B/$+R0#r*B/#s+R0$,b1#s+R0 	*dhhS9*dhhd; 	#t,b1#t,b1#t,c2#t,c2$-s3$-s3$-r2$-r2 	#s+S1#s+S1#s+R0#s+R0$,b1$,b1$,c2$,c2 	

;s 3T:

;s 3S9

;s 3T:

;s 3S9

<$!5s;

<$!5t<

<$!5t<

<$!5v>*dhhd;*dhhc:r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      [        R
                  5        U R	                  S[        R                  " S5      [        R
                  S-  5        U R	                  S[        R                  " S5      [        R
                  * S-  5        U R	                  S	[        R                  " S
5      S
5        g )Nzradians(180)   zradians(90)r3  rI   zradians(-45)ir   z
radians(0)r   )r   r   rQ   radiansr   r   rh   s    r   testRadiansMathTests.testRadians  s    )T\\2

>4<<#4dgg>

=$,,r"2DGGAI>

>4<<#4twwhqjA

<a!4r   c                   ^ ^ SSK Jm  UU 4S jn/ SQnU H  nT R                  US9   UR                  5       u  pEn[        R                  U5      n[        R                  U5      n[        R                  U5      n	U" XxU	5        [        R                  " Xx5      n
T R                  U
R                  5       U	R                  5       5        S S S 5        M     [        R                  S5      n[        SS5       Hf  nUS:X  a  M  X-  n[        S	5       HH  nX-  n[        R                  " Xx5      n
U" XxU
5        [        R                  " U* U5      n
U" U* X5        MJ     Mh     [        S
SSS[        [        4 HW  nT R                  [        R                  " [        U5      5        T R                  [        R                  " U[        5      5        MY     S HY  nT R                  [        R                  " U[        5      U5        T R                  [        R                  " U[        5      U5        M[     [        SSS
S[        4 H  nT R                  [         5         [        R                  " [        U5        S S S 5        T R                  [         5         [        R                  " [        U5        S S S 5        T R                  [         5         [        R                  " US
5        S S S 5        T R                  [         5         [        R                  " US5        S S S 5        M     g ! , (       d  f       GM  = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       GM:  = f)Nr   r  c                 @  > T" U 5      T" U5      T" U5      pTnTR                  [        U5      [        US-  5      5        X5-
  U-  nTR                  U[        U5      5        [        U5      [        US-  5      :X  a"  TR                  US-  [        US-  5      5        gg)z
Check that r matches remainder(x, y) according to the IEEE 754
specification. Assumes that x, y and r are finite and y is nonzero.
rI   N)r  r'   r   rT   )	r   r  rfxfyfrr   r  rc   s	          r   validate_spec.MathTests.testRemainder.<locals>.validate_spec  s    
 "!hqk8A;BB  R#bd)4BAQA'2w#bd)#  1c!A#h/ $r   )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)casez1p-1074irG  r  r   r   r   r   )r   r   r   r   r   )r  r  r  r:   r;   r  rQ   	remainderr   hexr    r   r   r   assertIsNaNr   r   )rc   r  	testcasesr  x_hexy_hexexpected_hexr   r  r)   r  tinyr   mra   r  s   `              @r   testRemainderMathTests.testRemainder  sy   &	0 9
	v D4(-1ZZ\*lMM%(MM%( ==6aH--   x||~> )(  }}Y'sBAAvA3ZH-aF+A.qb!,  	   3c4s;ET^^C78T^^E378 <
 ,ET^^E37?T^^E48%@ , D$S#6E"":.sE* /"":.tU+ /"":.uc* /"":.ud+ /. 7O )(P /.......s<   B L"L5MM=M("
L2	5
M	
M	
M%	(
M8	c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " [        R
                  S-  5      S5        U R	                  S[        R                  " [        R
                  * S-  5      S5         U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        g ! [         aU    U R                  [        [        R                  [        5        U R                  [        [        R                  [        5         Nf = f)Nzsin(0)r   z	sin(pi/2)rI   r   z
sin(-pi/2)r   )r   r   rQ   r  r   r   r   rU   r   r   r   r   rh   s    r   testSinMathTests.testSin;     )TXX.

8TXXa[!,

; 3Q7

<477(1*!5r:	:OODJJtxx}56OODJJtxx~67 	

488C=12  	:j$((C8j$((D9	:   >A:E6 6AGGc                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S-  [        R
                  " S5      S-  -
  S5        U R	                  S[        R                  " S5      [        R                  " S5      -   S5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzsinh(0)r   zsinh(1)**2-cosh(1)**2r   rI   r   zsinh(1)+sinh(-1))r   r   rQ   sinhr   r  r   r   r   r   rU   r   rh   s    r   testSinhMathTests.testSinhH  s    )TYY/

9diilA.

*DIIaL!ODIIaL!O,KRP

%tyy|DIIbM'A1E3-4$/

499S>23r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S	5        U R	                  S
[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      S5        U R                  [        R                  " [        5      [        5        U R                  [        [        R                  S5        U R                  [        [        R                  [        5        U R                  [        R                  " [        R                  " [        5      5      5        g )Nzsqrt(0)r   r   z	sqrt(2.5)rF  gS[:XL?z
sqrt(0.25)r  r   zsqrt(25.25)g     @9@g)#L@zsqrt(1)r   zsqrt(4)r   rI   r   )r   r   rQ   r  r   r   r   r   r   r   rU   r   rh   s    r   testSqrtMathTests.testSqrtQ  s"   )TYY/

9diilA.

9diinc2

;		#0BC

<4#6

=$))E"24EF

9diilA.

9diilA.3-*dii4*dii6

499S>23r   c                    U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " [        R
                  S-  5      S5        U R	                  S[        R                  " [        R
                  * S-  5      S5         U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        U R                  [        R                  " [        R                  " [        5      5      5        g ! [         aU    U R                  [        [        R                  [        5        U R                  [        [        R                  [        5         Nf = f)Nztan(0)r   z	tan(pi/4)r   r   z
tan(-pi/4)r   )r   r   rQ   tanr   r   r   rU   r   r   r   r   rh   s    r   testTanMathTests.testTan_  r  r  c                 b   U R                  [        [        R                  5        U R	                  S[        R                  " S5      S5        U R	                  S[        R                  " S5      [        R                  " S5      -   S[        R
                  " S5      S9  U R	                  S[        R                  " [        5      S5        U R	                  S[        R                  " [        5      S5        U R                  [        R                  " [        R                  " [        5      5      5        g )	Nztanh(0)r   ztanh(1)+tanh(-1)r   r   r   z	tanh(inf)z
tanh(-inf))r   r   rQ   tanhr   r   r   r   r   rU   r   rh   s    r   testTanhMathTests.testTanhl  s    )TYY/

9diilA.

%tyy|DIIbM'A188A; 	 	(

;		#2

<4"5

499S>23r   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S[        R                  " S5      5      [        R                  " SS5      5        g )Nr   r   )r   rQ   r  rR   rh   s    r   testTanhSignMathTests.testTanhSignu  sM     	3-r499S>:r3/	1r   c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        [        R                  " S5      5      [        5        U R                  [        [        R                  " S5      5      [        5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S	5      S
5         " S S5      n " S S[
        5      n " S S5      n " S S5      nU R                  [        R                  " U" 5       5      S5        U R                  [        R                  " U" 5       5      S5        U R                  [        [        R                  5        U R                  [        [        R                  SS5        U R                  [        [        R                  [        S5      5        U R                  [        [        R                  U" 5       5        U R                  [        [        R                  U" 5       5        g )Nr   r   r   r   g?gg!r   g-?Yic                       \ rS rSrS rSrg)'MathTests.test_trunc.<locals>.TestTrunci  c                     gN   rq   rh   s    r   	__trunc__1MathTests.test_trunc.<locals>.TestTrunc.__trunc__  r   r   rq   Nrl   rm   rn   ro   r  rp   rq   r   r   	TestTruncr    r   r   r   c                       \ rS rSrS rSrg)(MathTests.test_trunc.<locals>.FloatTrunci  c                     gr  rq   rh   s    r   r  2MathTests.test_trunc.<locals>.FloatTrunc.__trunc__  r   r   rq   Nr  rq   r   r   
FloatTruncr"    r   r   r%  c                       \ rS rSrSrg))MathTests.test_trunc.<locals>.TestNoTrunci  rq   Nrv   rq   r   r   TestNoTruncr'    r   r   r(  c                   "    \ rS rSr\" 5       rSrg)*MathTests.test_trunc.<locals>.TestBadTrunci  rq   N)rl   rm   rn   ro   r   r  rp   rq   r   r   TestBadTruncr*    r@  r   r+  r  rI   g     7@)
r   rQ   truncr   rT   r;   r   r   r\   r   )rc   r   r%  r(  r+  s        r   
test_truncMathTests.test_trunc|  s   A*B,djjm,c2djjo.4C!,D)2.H-q1I.3I.3H-t4	 		 		 		# 	# 	IK0"5JL126)TZZ0)TZZA6)TZZ4A)TZZ?*djj,.Ar   c                 @   U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " [	        S5      5      5        U R                  [        R                  " [	        S5      5      5        U R                  [        R                  " [	        S5      5      5        g )Nr   r   r   r   r   r   r   )r   rQ   isfiniteassertFalser;   rh   s    r   testIsfiniteMathTests.testIsfinite  s    c*+d+,c*+d+,uU|45uU|45uV}56r   c                    U R                  [        R                  " [        S5      5      5        U R                  [        R                  " [        S5      5      5        U R                  [        R                  " [        S5      S-  5      5        U R	                  [        R                  " [        S5      5      5        U R	                  [        R                  " S5      5        U R	                  [        R                  " S5      5        g )Nr   z-nanr   r   r   )r   rQ   rU   r;   r1  rh   s    r   	testIsnanMathTests.testIsnan  s    

5<01

5=12

5<"#456E%L12B(B(r   c                 @   U R                  [        R                  " [        S5      5      5        U R                  [        R                  " [        S5      5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R	                  [        R                  " [        S5      5      5        U R	                  [        R                  " S5      5        U R	                  [        R                  " S5      5        g )Nr   r   g      g      r   r   r   )r   rQ   rV   r;   r1  rh   s    r   	testIsinfMathTests.testIsinf  s    

5<01

5=12

5)*

6*+E%L12B(B(r   c                     U R                  [        R                  " [        R                  5      5        U R	                  [        R
                  " S[        R                  5      S5        g r}  )r   rQ   rU   r   r   rR   rh   s    r   test_nan_constantMathTests.test_nan_constant  s:    

488,-r4884b9r   c                 P   U R                  [        R                  " [        R                  5      5        U R	                  [        R                  S5        U R                  [        R                  [        S5      5        U R                  [        R                  * [        S5      5        g )Nr   r   r   )r   rQ   rV   r   assertGreaterr   r;   rh   s    r   test_inf_constantMathTests.test_inf_constant  sa    

488,-488S)5<0$((E&M2r   zrequires verbose modec                 p    [         R                  " S5      nWS:w  a  U R                  S5         [         R                  " S5      nU R                  S5         [         R                  " S5      nU R                  S5        g !   U R                  S5         N}= f! [         a     NMf = f! [
         a     g f = f)	Ni 6ez6underflowing exp() should not have raised an exceptionr   z)underflowing exp() should have returned 0i ʚ;z.overflowing exp() didn't trigger OverflowErrorr   z sqrt(-1) didn't raise ValueError)rQ   rE   r   r  r  r   rc   r   s     r   test_exceptionsMathTests.test_exceptions  s    	(%A 6IIAB	H$A IIFG	:		$A II895	( II ' (  		  		s.   B  B B(  B
B%$B%(
B54B5c                    S1nS n[         R                  S:X  aA  [        R                  " 5       S   n [        [	        [
        UR                  S5      5      5      nSn/ n[        [        5       H  u  pgppnU	S:w  d  US:w  a  M  US;   a  M  Ub  US:  a  Xa;   a  M.  [        [        U5      nS	U;   d  S
U;   a  Sn
OSU;   a  Sn
 U" U5      nUS;   a  [        R                  " X5      n
Su  nn[        XUU5      nUc  M  UR                  XgUU5      nUR!                  U5        M     U(       a$  U R#                  SSR%                  U5      -   5        g g ! [         a     GNf = f! [         a    Sn N[         a    Sn Nf = f)Ntan0064darwinr   .{}: {}({!r}): {}r   )rectpolar)r  r   invaliddivide-by-zeror   overflowr  )sqrt0002sqrt0003sqrt1001sqrt1023r   r   zFailures in test_testfile:
  
  )r  platformmac_verr  r  rT   r:   r   rO   	test_filegetattrrQ   r  rR   rZ   r(   r  r   join)rc   SKIP_ON_TIGERosx_versionversion_txtrX   failuresrA   rB   araiereirF   r  rQ  r+   r,   rW   msgs                      r   test_testfileMathTests.test_testfile  s    #<<8#"**,Q/K#C[->->s-C$DE &-;I-F)BBBESyB#I&&&;+@&4$DE!%5%>!u$$)b EE]]2*  &GW"2w@G//""g6COOC S .GV II6kk(+, - c  6  &%  )()s)   (E E$
E! E!$F 2F ?F c                    Sn/ n[        [        5       H  u  p4pVn[        [        U5      nSU;   d  SU;   a  SnOSU;   a  Sn U" U5      n	Su  pUS:X  a  S	n
O)US
:X  a  SnO US:X  a  US:  a  US:  a  Sn
OUS:  a  Sn
OSn
[        XiX5      nUc  M~  UR                  X4X\5      nUR                  U5        M     U(       a$  U R                  SSR                  U5      -   5        g g ! [         a    Sn	 N[
         a    Sn	 Nf = f)NrI  rL  rM  r   rN  r  rS  r  r  lgammagV瞯<erfcr   r   r        $@r  r  zFailures in test_mtestfile:
  rT  )rG   math_testcasesrX  rQ   r   r  rZ   r(   r  r   rY  )rc   rX   r]  rA   rB   rC   r)   rF   r  r*   r+   r,   rW   rb  s                 r   test_mtestfileMathTests.test_mtestfile&  s3   %,;N,K(BC54$DE!%5%>'u$*&3i  &G W} x
  v#* 9 G4Z!G"G"8'CG//"#7COOC q -Lt II7kk(+, - a  #"  &%&s   C%%D3D Dc                 T   SSK Jn  [        R                  nU R	                  U" / 5      S5        U R	                  U" / SS9S5        U R	                  U" [        [        SS5      5      5      S5        U R	                  U" [        [        [        SS5      5      5      5      S5        U R	                  U" [        SS	5      S	S9S
5        U R	                  U" / SQ5      S5        U R	                  U" / SQ5      S5        U R	                  U" / SQ5      S5        U R	                  U" / SQ5      S5        U R	                  U" SU" SS5      /5      S5         " S S5      nU R                  [        5         U" SU" 5       /5        S S S 5        U R	                  U" / SQ5      S5        U R	                  U" / SQ5      [        S5      5        U R                  [        U5        U R                  [        US5        U R                  [        U/ SQ5        U R                  [        U/ SQSS9  U R                  [        USS/SS9  [        S5      [        S 5      /nU R                  [        X$[        S5      S9  U R                  [        US/S/S//5        U R                  [        USS0/5        U R                  [        USS0/S-  SS0S9  U R                  [        US/S/S/// S9  U R	                  U" SS/S!S9S"5        U R	                  U" SS/SS/S9/ S#Q5        U R	                  U" / SS0S9SS05        U R                  [        5         U" S	S$/S5        S S S 5        U R	                  U" / S%Q5      S5        U R	                  U" / S&Q5      S5        U R	                  U" / S'Q5      S5        S7S( jn[        SS)5      nU R	                  U" U5      U" U5      5        [        S*S+5      nU R	                  U" U5      U" U5      5        [        S,S-5      nU R	                  U" U5      S5        [        SS-5       Vs/ s H  n[        U5      PM     nnU R	                  U" U5      U" U5      5        [        S,S+5       Vs/ s H  n[        U5      PM     nnU R	                  U" U5      U" U5      5        [        S,S-5       Vs/ s H  n[        U5      PM     nnU R                  U" U5      5        U R                  U" SSS[        S.5      SS/5      5        U R                  U" SS[        S.5      SS/5      5        U R                  U" S[        S.5      SS/5      5        U R                  U" S[        S/5      [        S.5      S/5      5        U R                  U" S[        S05      [        S.5      S/5      5        U R                  U" S[        S.5      [        S/5      S/5      5        U R                  U" S[        S.5      [        S05      S/5      5        U R	                  U" SSS[        S/5      S1S2/5      [        S05      5        U R	                  U" SSS[        S05      S1S2/5      [        S/5      5        U R                  U" SSS[        S/5      S1S2/5      5        U R                  U" SSS[        S05      S1S2/5      5        U R                  U" SSS[        S/5      S1SS/5      5        U R                  U" SSS[        S05      S1SS/5      5        U R	                  [        U" / S3Q5      5      [        5        U R	                  [        U" / S4Q5      5      [        5        U R	                  [        U" [        SS)5      5      5      [        5        U R	                  [        U" [        SS)5      SS95      [        5        U R	                  [        U" S[         R"                  " S55      SS2SS6/5      5      [         R"                  5        g ! , (       d  f       GN= f! , (       d  f       GN= fs  snf s  snf s  snf )8Nr   r  r   r   )r   rI   r   i  r  i _7 )r   rI   r   r   r   r  )r   r   r   r   r!  r  )r   rI   r   r   r!  )r   r   r   r   r   r   r   r   c                       \ rS rSrS rSrg)(MathTests.test_prod.<locals>.BadMultiplyiz  c                     [         er_   rV  rW  s     r   r]  1MathTests.test_prod.<locals>.BadMultiply.__rmul__{  r[  r   rq   N)rl   rm   rn   ro   r]  rp   rq   r   r   r_  rn  z  s    #r   r_  rh  )r   r           r   r   rq  )r   r   rq  r   r   r   )r  r  r      a   cr      bababababababab)r   rI   r   rI   r   rI   r   rI   r   rI   r   rI   r  )r   r   rI   r   )r   r   rI   r   )r   rI   r   r   c                      U  H  nX-  nM	     U$ r_   rq   )rc  r   elems      r   _naive_prod(MathTests.test_prod.<locals>._naive_prod  s      !Lr   i'  ir   ir  r   r   r   r   r   )r   rI   r   r   r   r  )r   r   r   r   r   r  r   r  r  )r  r  rQ   prodr   r  r    r  r   rO  r;   r   	bytearrayr  r   rT   r$  r%  )rc   r  r|  r_  r  rz  rc  r   s           r   	test_prodMathTests.test_prodi  s   +yyb1%b*A.d51:./6d4a
#345t<eArl"5w?o.478%@12E:34e<r1Q7m,c2	# 	# |,#{}%& - 	12E:56eE)T*)T2.)T?;)T?"E)TD$<sCD/9T?3)T3H)TQC!qc?;)TQqE73)TQqE719QqEB)TQC!qc?"E 	q!fD1>Bq!fQF35YZbA/!A7y)"b1 * 	l+Q/l+Q/l+Q/	 E?hX)>?$hX)>?%h+ ',Atn5nE!Hn5hX)>?&+E2&67&6E!H&67hX)>?&+E4&89&8E!H&89h( 	q!Qea;<=q!U5\1a89:q%,1567q%,eQ?@Aq%-ua@ABq%,eQ?@Aq%,fa@ABq!QeR:;U6]Kq!Qfb;<eElKq1U5\2q9:;q1U6]B:;<q!Qeb!Q?@Aq!Qfr1a@AB 	d#567=d#7895Ad5E?34c:d5E?#>?GdAws';Q1a#HIJ 	*_ -,2 *). 679s*   ._7`	1`4` 7`%7
`	
`c                 	   [         R                  n[         R                  n[        S5       Hc  nUS:  a  [        US-   5      OUS:  a  [        S5      O
[        S5       H,  nU R	                  U" X45      U" U5      U" X4-
  5      -  5        M.     Me     [        SS5       HK  n[        SU5       H8  nU R	                  U" X45      U" US-
  US-
  5      U-  U" US-
  U5      -   5        M:     MM     [        SS5       HS  nU R	                  U" US5      S5        U R	                  U" US5      U5        U R	                  U" X35      U" U5      5        MU     [        S5       H@  nU R	                  U" U5      U" U5      5        U R	                  U" US 5      U" U5      5        MB     U R                  [        USS	5        U R                  [        US[        R                  " S	5      5        U R                  [        USS
5        U R                  [        USS5        U R                  [        U[        R                  " S5      S5        U R                  [        USS5        U R                  [        U5        U R                  [        USSS5        U R                  [        U5        U R                  [        USS5        U R                  [        USS-  * S5        U R                  [        USS5        U R                  [        USSS-  * 5        U R	                  U" SS5      S5        U R	                  U" SSS-  5      S5        SS-  nU R	                  U" US5      S5        U R	                  U" US5      U5        U R	                  U" US5      X3S-
  -  5        [        R                  " SS9(       a  U R                  [        XU5        S HB  u  p4U R	                  U" X45      S5        U R                  [        U" X45      5      [        5        MD     U R	                  U" [!        S5      [!        S5      5      S5        U R	                  U" [#        S5      [#        S5      5      S5        [        S5       Hs  nU R                  [        U" [!        S5      [!        U5      5      5      [        5        U R                  [        U" [#        S5      [#        U5      5      5      [        5        Mu     g )Nr  r  r   ry  r$  r  r   r  r   1rh  10r   r   rI   r  Tcpython)TT)TF)FFr   )rQ   permr  r    r   r   r   r$  r%  r   r   check_impl_detailr  r  r   rT   rt   rx   )rc   r  r  r   r  s        r   testPermMathTests.testPerm  s   yyNN	sA&'#geAElC59USUYV  a!*1151A!AC W  q#A1a[  aT!a%Q-?!-Cd1q5RSn-TU ! 
 q#AT!QZ+T!QZ+T!Z16  rAT!Wil3T!T]IaL9  	)T2s3)T2ws/CD)T2s3)T43)T7??4+@!D)T43)T*)T2q!4)T* 	*dB2*dQWHa8*dAr2*dA4x8 	aQ'aD)1-tGaQ'aQ'aQA#Y/$$T2mTa8?DAT!Z+MM$tAz*C0 @ 	k!nk!n=rBk!nk!n=rBqAMM$tKNKNCDcJMM$tKNKNCDcJ r   c                 
   [         R                  n[         R                  n[        S5       Hl  nUS:  a  [        US-   5      OUS:  a  [        S5      O
[        S5       H5  nU R	                  U" X45      U" U5      U" U5      U" X4-
  5      -  -  5        M7     Mn     [        SS5       HH  n[        SU5       H5  nU R	                  U" X45      U" US-
  US-
  5      U" US-
  U5      -   5        M7     MJ     [        S5       H4  nU R	                  U" US5      S5        U R	                  U" X35      S5        M6     [        SS5       H7  nU R	                  U" US5      U5        U R	                  U" X3S-
  5      U5        M9     [        S5       H9  n[        US-  5       H$  nU R	                  U" X45      U" X3U-
  5      5        M&     M;     U R                  [        USS	5        U R                  [        US[        R                  " S	5      5        U R                  [        USS
5        U R                  [        USS5        U R                  [        U[        R                  " S5      S5        U R                  [        USS5        U R                  [        US5        U R                  [        USSS5        U R                  [        U5        U R                  [        USS5        U R                  [        USS-  * S5        U R                  [        USS5        U R                  [        USSS-  * 5        U R	                  U" SS5      S5        U R	                  U" SSS-  5      S5        SS-  nU R	                  U" US5      S5        U R	                  U" US5      U5        U R	                  U" US5      X3S-
  -  S-  5        U R	                  U" X35      S5        U R	                  U" X3S-
  5      U5        U R	                  U" X3S-
  5      X3S-
  -  S-  5        [        R                  " SS9(       a  U R                  [        XUS-  5        S HB  u  p4U R	                  U" X45      S5        U R                  [        U" X45      5      [        5        MD     U R	                  U" [!        S5      [!        S5      5      S5        U R	                  U" [#        S5      [#        S5      5      S5        [        S5       Hs  nU R                  [        U" [!        S5      [!        U5      5      5      [        5        U R                  [        U" [#        S5      [#        U5      5      5      [        5        Mu     g )Nr  r  r   ry  r$  r  r   rI   r   r  rh  r  r   r   r  Tr  r  r   )rQ   combr  r    r   r   r   r$  r%  r   r   r  r  r  r   rT   rt   rx   )rc   r  r  r   r  s        r   testCombMathTests.testComb	  su   yyNN	sA&'#geAElC59USUYV  aYq\!!y'77.9 : W  q#A1a[  aT!a%Q-?$q1ua.-PQ ! 
 sAT!QZ+T!Z+  q#AT!QZ+T!U^Q/ 
 sA16]  aT!U^< #  	)T2s3)T2ws/CD)T2s3)T43)T7??4+@!D)T43)T2.)T2q!4)T* 	*dB2*dQWHa8*dAr2*dA4x8 	aQ'aD)1-tGaQ'aQ'aQA#Y!^4aQ'a1q)a1qaCyA~6$$T2mTad;?DAT!Z+MM$tAz*C0 @ 	k!nk!n=rBk!nk!n=rBqAMM$tKNKNCDcJMM$tKNKNCDcJ r   c           	         U R                  [        R                  " S[        * 5      S5        U R                  [        R                  " S[        5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " SS5      S5        U R                  [        R                  " S	[        * 5      [        R                  S
5      5        U R                  [        R                  " S	[        5      [        R                  S5      5        U R                  [        R                  " S	[        * SS9[        R                  S
5      5        U R                  [        R                  " S	[        SS9[        R                  S5      5        U R                  [        R                  " S	[        * SS9[        R                  S5      5        U R                  [        R                  " S	[        SS9[        R                  S5      5        [        SS5       Hu  nU R                  [        R                  " SSUS9S5        U R                  [        R                  " SSUS9S5        U R                  [        R                  " SSUS9S5        Mw     [        R                  R                  [        R                  R                  -  nU R                  [        R                  " S[        5      U5        U R                  [        R                  " S[        5      U5        U R                  [        R                  " S[        * 5      U* 5        U R                  [        R                  " S[        * 5      U* 5        U R                  [        R                  " US5      S5        U R                  [        R                  " U* S5      S5        U R                  [        R                  " US5      S5        U R                  [        R                  " U* S5      S5        [        R                  R                  nU R                  [        R                  " [        S5      U5        U R                  [        R                  " [        * S5      U* 5        U R                  [        R                  " U[        5      [        5        U R                  [        R                  " U* [        * 5      [        * 5        U R                  [        R                  " [        S	5      5        U R                  [        R                  " S	[        5      5        U R                  [        R                  " [        [        5      5        U R                  S	[        R                  " S	[        SS95        U R                  [         5         [        R                  " S	[        SS9  S S S 5        g ! , (       d  f       g = f)Ng      0Cg/Cg     0Cg      Cr   gCg      gr   z0x1.fffffffffffffp-1z0x1.0000000000001p+0r   )stepsr   z0x1.ffffffffffffdp-1z0x1.0000000000003p+0r   r   r   r   r   )r   rQ   	nextafterr   r;   r  r    assertEqualSignr  r\  minepsilonr_  r  r   r   r   )rc   r  smallest_subnormallargest_normals       r   test_nextafterMathTests.test_nextafterU	  s    	(:SDA+	-(:C@+	-(=sC.	0(>D/	1 	cT2'=>	@S1'=>	@cT;'=>	@S:'=>	@cT;'=>	@S:'=>	@ 1a[ET^^CEBCH  d%!H$O  d%!H$O ! !^^//#..2H2HHc24FGc24FGsd36H5HIsd36H5HIT^^,>EtLT^^-?,?FMT^^,>EtLT^^-?,?FM ++S1>Bc2^OD<cB#>E 	S12S12S12dnnS#Q?@z*NN32. +**s   5W
W'c                 d   U R                  [        R                  " S5      [        R                  R
                  5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      [        R                  R                  [        R                  R
                  -  5        U R                  [        R                  " [        5      [        [        R                  " [        [        * 5      -
  5        U R                  [        R                  " [        5      [        5        U R                  [        R                  " [        R                  5      5        SSSS[        4 HV  nU R                  US9   U R                  [        R                  " U* 5      [        R                  " U5      5        S S S 5        MX     g ! , (       d  f       Mj  = f)	Nr   l          l          r   l            g      @r   r  )r   rQ   r   r  r\  r  r  r  r  r   r  r   r  rB  s     r   test_ulpMathTests.test_ulp	  s`   #(>(>?'*C0'*C0'*F3 	#++cnn.D.DD	F),"T^^It%DD	F 	#,$((+, sGWc2A"  1"txx{; #" 3""s   <H  
H/	c                 :    " S S5      n[         R                  [         R                  [         R                  4 HM  nU" 5       nU R	                  [
        5         U" SU5        S S S 5        U R                  [        USS5      5        MO     g ! , (       d  f       N/= f)Nc                       \ rS rSrS rSrg)$MathTests.test_issue39871.<locals>.Fi	  c                     SU l         SS-    g )NTr   r   	convertedrh   s    r   ri   .MathTests.test_issue39871.<locals>.F.__float__	  s    !%!r   r  N)rl   rm   rn   ro   ri   rp   rq   r   r   r  r  	  s    r   r  znot a numberr  F)rQ   r   rR   r  r   r   r1  rX  )rc   r  r  r  s       r   test_issue39871MathTests.test_issue39871	  so    	 	 JJt~~=DA""9-^Q' .
 WQU;< >--s   
B
B	c                    U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R
                  SS5        U R                  [        [        R
                  SS5        U R                  [        [        R
                  S5        U R                  [        [        R
                  SSS5        g )Nr{  r   r   r   )r   r   rQ   rE   erfr   rh   s    r   test_input_exceptionsMathTests.test_input_exceptions	  s    )TXXv6)TXXv6)TZZ=)TZZf=)TZZ5)TZZc3?r   c                 |    [         R                  " U5      (       d!  U R                  SR                  U5      5        g g )NzExpected a NaN, got {!r}.)rQ   rU   r   r(   rb   s     r   r  MathTests.assertIsNaN	  s.    zz%  II188?@ !r   c                     U R                  X5        U R                  [        R                  " SU5      [        R                  " SU5      5        g)zoSimilar to assertEqual(), but compare also the sign with copysign().

Function useful to compare signed zeros.
r   N)r   rQ   rR   )rc   r   r  s      r   r  MathTests.assertEqualSign	  s8    
 	sA.c10EFr   rq   NrS  )Yrl   rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipIfr  rU  machiner  r	  r  r  r  r  r&  r   cpython_onlyr*  rE  rK  rY  HAVE_DOUBLE_ROUNDINGr  r  r  r  r  r	  r  r!  r)  r,  r0  r5  r:  requires_mac_verr=  rB  rd  rg  requires_resourcer  r  r  r  r  r  r  r  r
  r  r  r  r-  r2  r5  r8  r;  r?  
skipUnlessr   rC  rc  rj  r~  r  r  r  r  r  r  r  r  rp   rq   r   r   r   r      s   6.	45	454	5<:|4 %;N : :B3 __S\\W,W1A1A1CGW1W[]4]45<	=/@: < <#<J;.8$ __)MOmDO mD^(ETOFb __)NP:1P :1x7B)
3&j*FX<B F F
3$/ 4 4" b!$+ % +
5^.B __)]_M _ M u%H &HT __)]_u%Q- & _ 
Q-f1&H;l5 ~, ~,@34434 1 1B@7)):
3 "9:: ;:> =- =-~ @- @-Dd*L>K@DKL 8/ 8/v < <,= @AGr   r   c                       \ rS rSr\R
                  rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rSrg)IsCloseTestsi	  c                 \    U R                  U R                  " X/UQ70 UD6U< SU< S3S9  g )N and z should be close!rb  )r   r  rc   r  r  r   kwargss        r   assertIsCloseIsCloseTests.assertIsClose	  s1    Q;D;F;<=qA 	 	Cr   c                 \    U R                  U R                  " X/UQ70 UD6U< SU< S3S9  g )Nr  z should not be close!r  )r1  r  r  s        r   assertIsNotCloseIsCloseTests.assertIsNotClose	  s3    a<T<V<ABAF 	 	Hr   c                 F    U H  u  pEU R                   " XE/UQ70 UD6  M     g r_   )r  rc   examplesr   r  r  r  s         r   assertAllCloseIsCloseTests.assertAllClose	  s&    DAq5d5f5 r   c                 F    U H  u  pEU R                   " XE/UQ70 UD6  M     g r_   )r  r  s         r   assertAllNotCloseIsCloseTests.assertAllNotClose	  s&    DA!!!888 r   c                    U R                  [        5         U R                  SSSS9  S S S 5        U R                  [        5         U R                  SSSSS9  S S S 5        g ! , (       d  f       N?= f! , (       d  f       g = f)Nr   g0.+rel_tolrl  g    _©r  r,   )r   r   r  rh   s    r   test_negative_tolerances%IsCloseTests.test_negative_tolerances	  sg    z*q!W5 +z*q!VUC +* +***s   A!A2!
A/2
B c                 .    / SQnU R                  USSS9  g )N))r   r   )N@ir  );r  )i90  g    @r   r   )NF r  r   r  r  )rc   identical_exampless     r   test_identicalIsCloseTests.test_identical	  s"    0 	.SIr   c                 L    / SQnU R                  USS9  U R                  USS9  g )N))g    חAg   חA)g:0yEgnyE)g	ѭ?gfNӭ?:0yE>r  &.>r  r  )rc   eight_decimal_places_exampless     r   test_eight_decimal_places&IsCloseTests.test_eight_decimal_places	  s5    )C% 	94H<dKr   c                 L    / SQnU R                  USS9  U R                  USS9  g )N))r  r   )g&.r   )gu?j/ʠr   r  r  r  r   )r  r  )rc   near_zero_exampless     r   test_near_zeroIsCloseTests.test_near_zero	  s4    . 	13?.=r   c                     U R                  [        [        5        U R                  [        [        SS9  U R                  [        [        5        U R                  [        [        SS9  g )Nr   r   )r  r   r   rh   s    r   test_identical_infinite$IsCloseTests.test_identical_infinite
  sL    3$3S14&4s3r   c                     [         [         4[         S4S[         4[        [         4[         [        4[        [        4[        S4S[        4[        S4S[        4/
nU R                  USS9  g )Nrl  r   rz  g?r   )r   r   r   r  )rc   not_close_exampless     r   test_inf_ninf_nanIsCloseTests.test_inf_ninf_nan
  sg    "Cj"Fm%sm"Cj"Cj"Dk"Cj"Cj"El$cl	, 	1;LMr   c                 T    / SQnU R                  USS9  / SQnU R                  USS9  g )N))r   r   )333333r  )Ynr  r   r  ))r   g     ?)g?r   )gZbtigTbtir  )rc   zero_tolerance_close_examples!zero_tolerance_not_close_exampless      r   test_zero_tolerance IsCloseTests.test_zero_tolerance
  s?    )=% 	93G-N) 	@#Nr   c                 (    U R                  SS/SS9  g )N)r  r  )r  r  r@  r  r  rh   s    r   test_asymmetryIsCloseTests.test_asymmetry'
  s    Wg.<r   c                 L    SS/nU R                  USS9  U R                  USS9  g )N) )i[i[r  r  r  r  )rc   integer_exampless     r   test_integersIsCloseTests.test_integers+
  s:    224 	,d;/>r   c                     SSK Jn  U" S5      U" S5      4U" S5      U" S5      4U" S5      U" S5      4U" S	5      U" S
5      4/nU R                  USS9  U R                  USS9  g )Nr   r  z
1.00000001z1.0z1.00000001e-20z1.0e-20z1.00000001e-100z1.0e-100z1.00000001e20z1.0e20r  r  r  )r$  r%  r  r  )rc   r%  decimal_exampless      r   test_decimalsIsCloseTests.test_decimals3
  s    #$\2GENC$%56	8JK$%679LM$_5wx7HIK 	,d;/>r   c                     SSK Jn  U" SS5      S-   U" S5      4U" S5      U" S5      4U" SS5      U" SS5      4/nU R                  USS	9  U R                  US
S	9  g )Nr   r  r   r  r  l       	(qe	 r'  r  r  r  )r  r  r  r  )rc   r  fraction_exampless      r   test_fractionsIsCloseTests.test_fractions>
  sz    & a#a'!5i (9"56i((1f*=>@ 	-t<0$?r   rq   N)rl   rm   rn   ro   rQ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rp   rq   r   r   r  r  	  s^    llGCH69DJL>4N
O=?	?	@r   r  c                   >   \ rS rSrSrS rS r\R                  " \	R                  R                  S5      =(       dB    \	R                  S:H  =(       a    \
R                  " 5       S:H  =(       d    \R                  " 5       S5      S	 5       rS
 rS rS rS rS rS rSrg)FMATestsiJ
  zTests for math.fma. c                 >   [         R                  * SSSSSSSS[         R                  [         R                  /n[        R                  " US	S
9 H  u  p#U R                  X#S9   U R                  [         R                  " [         R                  X#5      5        U R                  [         R                  " U[         R                  U5      5        U R                  [         R                  " X#[         R                  5      5        S S S 5        M     g ! , (       d  f       M  = f)Nu <7r   r  r   r   Ynr   u <7~rI   r  )r  r  )rQ   r   r   r  r  r  r  fma)rc   r  r  r  s       r   test_fma_nan_resultsFMATests.test_fma_nan_resultsM
  s     XXIvtWdeTXXtxx
 %%fQ7DA'  $((A!9:  !TXXq!9:  !!9: (' 8''s   "BD
D	c           
      f   SSS[         R                  /n/ SQn[         R                  * SSSS[         R                  /nU H  n[         R                  [         R                  * 4 H  nS H  nU R                  XEUS	9   U R                  [        5         [         R
                  " XVU5        S S S 5        U R                  [        5         [         R
                  " XeU5        S S S 5        S S S 5        M     M     M     U GH  nU R                  US
9   U R                  [        5         [         R
                  " [         R                  U[         R                  * 5        S S S 5        U R                  [        5         [         R
                  " [         R                  U* [         R                  5        S S S 5        U R                  [        5         [         R
                  " [         R                  * U* [         R                  * 5        S S S 5        U R                  [        5         [         R
                  " [         R                  * U[         R                  5        S S S 5        U R                  [        5         [         R
                  " U[         R                  [         R                  * 5        S S S 5        U R                  [        5         [         R
                  " U* [         R                  [         R                  5        S S S 5        U R                  [        5         [         R
                  " U* [         R                  * [         R                  * 5        S S S 5        U R                  [        5         [         R
                  " U[         R                  * [         R                  5        S S S 5        S S S 5        GM     U GH  nU R                  US
9   U R                  [         R
                  " [         R                  U[         R                  5      [         R                  5        U R                  [         R
                  " [         R                  U* [         R                  * 5      [         R                  * 5        U R                  [         R
                  " [         R                  * U* [         R                  5      [         R                  5        U R                  [         R
                  " [         R                  * U[         R                  * 5      [         R                  * 5        U R                  [         R
                  " U[         R                  [         R                  5      [         R                  5        U R                  [         R
                  " U* [         R                  [         R                  * 5      [         R                  * 5        U R                  [         R
                  " U* [         R                  * [         R                  5      [         R                  5        U R                  [         R
                  " U[         R                  * [         R                  * 5      [         R                  * 5        S S S 5        GM     [        R                  " X"5       H  u  pU R                  US
9   U R                  [         R
                  " X[         R                  5      [         R                  5        U R                  [         R
                  " X[         R                  * 5      [         R                  * 5        S S S 5        M     [        R                  " X5       GHH  u  ptU R                  XtS9   U R                  [         R
                  " [         R                  Xt5      [         R                  5        U R                  [         R
                  " [         R                  * Xt5      [         R                  * 5        U R                  [         R
                  " [         R                  * U* U5      [         R                  5        U R                  [         R
                  " [         R                  U* U5      [         R                  * 5        U R                  [         R
                  " U[         R                  U5      [         R                  5        U R                  [         R
                  " U[         R                  * U5      [         R                  * 5        U R                  [         R
                  " U* [         R                  * U5      [         R                  5        U R                  [         R
                  " U* [         R                  U5      [         R                  * 5        S S S 5        GMK     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       G	Mk  = f! , (       d  f       GN= f! , (       d  f       GNA= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN|= f! , (       d  f       GN;= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       G	Mz  = f! , (       d  f       GM  = f! , (       d  f       GM
  = f! , (       d  f       GM^  = f)Nr  r   r  )r  r   r  r   r   r  r   r  r   r   r   r  )r  infinityzeror  )r  r  )	rQ   r   r  r   r   r  r   r  r  )	rc   	positivesfinitesnon_nansr  r  r  r  r  s	            r   test_fma_infinitiesFMATests.test_fma_infinities[
  s8   S%2	HXXItT3TXX> A!XXy1'D4H!..z: HHXQ7 ;!..z: HHTQ7 ; IH ( 2  A"&&z2HHTXXq488)4 3&&z2HHTXXr4884 3&&z2HHdhhYTXXI6 3&&z2HHdhhY4884 3&&z2HHQ488)4 3&&z2HHaR4884 3&&z2HHaR$((TXXI6 3&&z2HHQ	4884 3 #" ( A"  $((Atxx!@$((K  $((QB	!BTXXIN  488)aR!BDHHM  488)Q	!BTXXIN  !TXXtxx!@$((K  1"dhh	!BTXXIN  1"txxi!BDHHM  !dhhY	!BTXXIN #"  %%g7DA"  !!9488D  !	!:TXXIF #" 8 %%i9DA'  $((A!9488D  488)Q!:TXXIF  488)aR!;TXXF  $((QB!:TXXIF  !TXXq!9488D  !dhhY!:TXXIF  1"txxi!;TXXF  1"dhh!:TXXIF (' :Y ;::: IH 3222222222222222 #"( #" #" ('s/  <g	f *g	f2g	i'&6gi'96g)/i'8g;i'!6hi'46h*i'6h1=i'8ii'/6i%i'J!i:'B	j'H+j  
f/*g	2
g<g	
g
g&!i')
g83i';
h
i'
hi'
h.)i'1
i ;i'
ii'
i$i''
i7	:
j
	
j	 
j0	)freebsdwasinetbsd
emscriptenandroidx86_64z5this platform doesn't implement IEE 754-2008 properlyc           	      
   / SQnU GH  nU R                  US9   U R                  [        R                  " SUS5      5        U R                  [        R                  " SUS5      5        U R	                  [        R                  " SU* S5      5        U R                  [        R                  " SU* S5      5        U R                  [        R                  " SU* S5      5        U R                  [        R                  " SU* S5      5        U R	                  [        R                  " SUS5      5        U R                  [        R                  " SUS5      5        U R                  [        R                  " USS5      5        U R                  [        R                  " USS5      5        U R	                  [        R                  " U* SS5      5        U R                  [        R                  " U* SS5      5        U R                  [        R                  " U* SS5      5        U R                  [        R                  " U* SS5      5        U R	                  [        R                  " USS5      5        U R                  [        R                  " USS5      5        S S S 5        GM     U R                  [        R                  " SSS5      5        U R                  [        R                  " SSS5      5        U R                  [        R                  " SSS5      5        U R                  [        R                  " SSS5      5        S	nU R                  [        R                  " X3S5      5        U R	                  [        R                  " X3* S5      5        U R                  [        R                  " U* U* S5      5        U R	                  [        R                  " U* US5      5        U R                  [        R                  " X3S5      5        U R	                  [        R                  " X3* S5      5        U R                  [        R                  " U* U* S5      5        U R	                  [        R                  " U* US5      5        [
        R                  S
5      n[
        R                  S5      n[
        R                  S5      nU R	                  [        R                  " XE-
  XE-   U* 5      5        U R                  [        R                  " XT-
  XE-   U5      5        U R	                  [        R                  " XT-
  XE-   * U* 5      5        U R                  [        R                  " XE-
  XE-   * U5      5        g ! , (       d  f       GMs  = f)N)r   r  r   r  r  r   r   r   r   r  r   r  z0x1p-500z0x1p-550z	0x1p-1000)r  assertIsPositiveZerorQ   r  assertIsNegativeZeror;   r  )rc   nonnegative_finitesr  r  r   r  r  s          r   test_fma_zero_resultFMATests.test_fma_zero_result
  s    8 %A"))$((33*?@))$((34*@A))$((3D*AB))$((3C*@A))$((4!S*AB))$((4!T*BC))$((4D*AB))$((4C*@A))$((1c3*?@))$((1c4*@A))$((A2sD*AB))$((A2sC*@A))$((A2tS*AB))$((A2tT*BC))$((1dD*AB))$((1dC*@A# #" %* 	!!$((3T":;!!$((3c":;!!$((4t"<=!!$((4c":; !!$((4s";<!!$((4"<=!!$((D54%"=>!!$((D5$"<=!!$((4t"<=!!$((4"=>!!$((D54%">?!!$((D5$"=> MM*%MM*%MM+&!!$((13aR"89!!$((13Q"78!!$((13!#";<!!$((13!#":;Y #"s   I9U**
U:	c                    [         R                  S5      =p[         R                  S5      nU R                  [        5         [        R
                  " XS5        S S S 5        U R                  [        R
                  " XS-  S5      U5        U R                  [        5         [        R
                  " XS-  U5        S S S 5        U R                  [        R
                  " XU* 5      U5        [         R                  S5      n[         R                  S5      n[         R                  S5      nU R                  [        5         [        R
                  " XS5        S S S 5        U R                  [        5         [        R
                  " XU5        S S S 5        U R                  [        R
                  " XU* 5      [         R                  S5      5        [         R                  S	5      n[         R                  S
5      n[         R                  S5      nU R                  [        R
                  " XU* 5      U5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)N0x1p5120x1p1023r   r   z0x1.ffffffc000000p+511z0x1.0000002000000p+512z0x0.0000000000001p-1022z0x1.fffffffffffffp+1023z0x1.ae565943785f9p+512z0x1.3094665de9db8p+512)r;   r  r   r  rQ   r  r   )rc   r  r  r  s       r   test_fma_overflowFMATests.test_fma_overflow
  s   i((MM*%}-HHQ3 .!sUC0!4}-HHQ#q! . 	!+Q/
 MM23MM23MM34}-HHQ3 .}-HHQ1 .!+'@A	C
 MM23MM23MM34!+Q/7 .- .- .---s0   H7 I	?I4I-7
I	
I
I*-
I;c                     [         R                  S5      nU R                  [        R                  " US-
  US-   S5      X-  5        g )Nz0x1p-50r   )r;   r  r   rQ   r  )rc   r  s     r   test_fma_single_roundFMATests.test_fma_single_round
  s7    MM)$!c'1s7C8!#>r   c           	         / SQnU H  u  p#pEU R                  X#UUS9   [        R                  U5      n[        R                  U5      n[        R                  U5      n[        R                  U5      n	U R                  [        R
                  " XgU5      U	5        U R                  [        R
                  " XvU5      U	5        S S S 5        M     g ! , (       d  f       M  = f)N))z0x1.694adde428b44p-1z0x1.371b0d64caed7p-1z0x1.f347e7b8deab8p-4z0x1.19f10da56c8adp-1)z0x1.605401ccc6ad6p-2z0x1.ce3a40bf56640p-2z0x1.96e3bf7bf2e20p-2z0x1.1af6d8aa83101p-1)z0x1.e5abd653a67d4p-2z0x1.a2e400209b3e6p-1z0x1.a90051422ce13p-1z0x1.37d68cc8c0fbbp+0)z0x1.f94e8efd54700p-2z0x1.123065c812cebp-1z0x1.458f86fb6ccd0p-1z0x1.ccdcee26a3ff3p-1)z0x1.bd926f1eedc96p-1z0x1.eee9ca68c5740p-1z0x1.960c703eb3298p-2z0x1.3cdcfb4fdb007p+0)z0x1.27348350fbccdp-1z0x1.3b073914a53f1p-1z0x1.e300da5c2b4cbp-1z0x1.4c51e9a3c4e29p+0)z0x1.2774f00b3497bp-1z0x1.7038ec336bff0p-2z0x1.2f6f2ccc3576bp-1z0x1.99ad9f9c2688bp-1)z0x1.51d5a99300e5cp-1z0x1.5cd74abd445a1p-1z0x1.8880ab0bbe530p-1z0x1.3756f96b91129p+0)z0x1.73cb965b821b8p-2z0x1.218fd3d8d5371p-1z0x1.d1ea966a1f758p-2z0x1.5217b8fd90119p-1)z0x1.4aa98e890b046p-1z0x1.954d85dff1041p-1z0x1.122b59317ebdfp-1z0x1.0bf644b340cc5p+0)z0x1.e28f29e44750fp-1z0x1.4bcc4fdcd18fep-1z0x1.fd47f81298259p-1z0x1.9b000afbc9995p+0)z0x1.d2e850717fe78p-3z0x1.1dd7531c303afp-1z0x1.e0869746a2fc2p-2z0x1.316df6eb26439p-1)z0x1.cf89c75ee6fbap-2z0x1.b23decdc66825p-1z0x1.3d1fe76ac6168p-1z0x1.00d8ea4c12abbp+0)z0x1.3265ae6f05572p-2z0x1.16d7ec285f7a2p-1z0x1.0b8405b3827fbp-1z0x1.5ef33c118a001p-1)z0x1.c4d1bf55ec1a5p-1z0x1.bc59618459e12p-2z0x1.ce5b73dc1773dp-1z0x1.496cf6164f99bp+0)z0x1.d350026ac3946p-1z0x1.9a234e149a68cp-2z0x1.f5467b1911fd6p-2z0x1.b5cee3225caa5p-1)a_hexb_hexc_hexr  )r  r;   r  r   rQ   r  )
rc   r  r(  r)  r*  r  r  r  r  r)   s
             r   test_randomFMATests.test_random
  s    
!
D 2=-E%Ee+7  9MM%(MM%(MM%( ==6  !!2H=  !!2H=9 9 2=9 9s   B#C
C	c                 j    U R                  [        R                  " U5      SR                  U5      S9  g )NzExpected a NaN, got {!r}r  )r   rQ   rU   r(   rb   s     r   r  FMATests.assertIsNaN/  s-    JJu*11%8 	 	
r   c                     U R                  US:H  =(       a    [        R                  " SU5      S:  SR                  U5      S9  g )Nr   r   z"Expected a positive zero, got {!r}r  r   rQ   rR   r(   rb   s     r   r  FMATests.assertIsPositiveZero5  =    QJ64==E2Q64;;EB 	 	
r   c                     U R                  US:H  =(       a    [        R                  " SU5      S:  SR                  U5      S9  g )Nr   r   z"Expected a negative zero, got {!r}r  r0  rb   s     r   r  FMATests.assertIsNegativeZero;  r2  r   rq   N)rl   rm   rn   ro   __doc__r  r  r  r  r  rU  rJ   r  r   linked_to_muslr  r"  r%  r+  r  r  r  rp   rq   r   r   r  r  J
  s    ;AGJ __ KL 	$LLI%H(*:*:*<*H	$!!#
?	B
1<B
1<f0B?/>d


r   r  c                 |    SSK Jn  UR                  U" [        R                  R                  SS5      5      5        U$ )Nr   )DocFileSuiter   zieee754.txt)doctestr8  addTestospathrY  )loadertestspatternr8  s       r   
load_testsr@  B  s*    $	MM,rww||JFGHLr   rS  );test.supportr   r   testr   r  r  r  r$  rQ   r;  rU  ru  r   r  r   r;   r   r   r   r\  r_  r  r  r  r   r  r  rl   argvfile__file__r<  dirnamecurdirtest_dirrY  ri  rW  r   r   r   r%   r0   rG   rO   rZ   r\   rT   rt   r  rx   r   TestCaser   r  r  r@  mainrq   r   r   <module>rK     s   4       	    
 ElElV}NN	NN	 1A)  z88A;DD77??4 -BIIh
4HIGGLL:/DE	L5H	,B$:40.` 	# 	&  W#G!! W#GtFx@8$$ x@vu
x   u
p
 zMMO r   