
    <e}p                       d dl mZmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZdZ ed          Z ed          Z ed          Zej        j        Zej        j        Zd\  ZZeez   d	k    Zed
k    rej        d          ZneZe	j                             e          pe	j!        Z"e	j        #                    e"d          Z$e	j        #                    e"d          Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d"dZ- G d d          Z. G d de/          Z0 G d de1          Z2 G d dej3                  Z4 G d d ej3                  Z5d! Z6ed
k    r ej7                     dS dS )#    )verboserequires_IEEE_754)supportNgh㈵>naninf-inf) 7yACg):@g7yAC__main__zmath_testcases.txtzcmath_testcases.txtc                 |    	 t          j        dt          j        d|                     d         }|dk     r|dz    }|S )Nz<qz<dr   l            )structunpackpack)xns     %/usr/lib/python3.11/test/test_math.pyto_ulpsr   '   sD    	 	dFKa0011!4A1uugJH    c                 <    	 | rdt          | | dz
  z            z   ndS )N   r   )count_set_bits)r   s    r   r   r   M   s*    K,-41~a!a%i((((14r   c                 ~    	 || z
  dz	  }|sdS |dk    r| S | |z   dz  }t          | |          t          ||          z  S Nr   )partial_product)startstop
numfactorsmids       r   r   r   Q   sa     ,1$J Hq	qz!Q&uc**_S$-G-GGGr   c                     	 dx}}t          t          |                                                     D ]/}|t          | |dz   z	  dz   dz  | |z	  dz   dz            z  }||z  }0|| t	          |           z
  z  S r   )reversedrange
bit_lengthr   r   )r   innerouteris       r   py_factorialr%   _   s     EEeALLNN++,,  !q1u*!1A!5Q!|a7GHHHQ***++r   c                     	 t          t          |           t          |          z
            }t          | |z
            }||k    s||k    rd S d}|                    ||||          S )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   j   su     GH%%455IHsN##I GyG33t7zz)YAAAr   c              #     K   	 t          | d          5 }|D ]}d|v r|d |                    d                   }|                                s8|                    d          \  }}|                                \  }}}|                                }|d         }	|dd          }
||t	          |          t	          |	          |
fV  	 d d d            d S # 1 swxY w Y   d S )Nutf-8encoding--->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))++KBCJQ-CqrrNEr5::uSzz599999	:: : : : : : : : : : : : : : : : : :s   B5CCCc           
   #     K   	 t          | d          5 }|D ]}|                    d          s|                                s,|                    d          \  }}|                                \  }}}}|                                }	|	d         |	d         }}
|	dd          }||t	          |          t	          |          t	          |
          t	          |          |fV  	 d d d            d S # 1 swxY w Y   d S )Nr2   r3   r5   r6   r   r      )r7   
startswithr9   r:   r;   )r<   r=   r>   r?   r@   rA   rB   arg_realarg_imagrD   exp_realexp_imagrF   s                r   parse_testfilerO      sT     
 
eg	&	&	& " 	 	Dt$$ DJJLL zz$''HC),&BHhJ!+A
1hHqrrNEr??E(OO??E(OO    	                 s   CC11C58C5           c                    	 || k    rd S d}t          | t                    r%t          |t                    rt          |          }n9t          |t                    r$t          | t                    rt          |           } t          | t                    r{t          |t                    rft          j        |           rt          j        |          rd }n;t          j        |           st          j        |          rnt          | |||          }|2d}|                    | |          }|d                    |          z  }|S d S )Nz	not equalzexpected {!r}, got {!r}z ({}))
isinstancer;   intmathisnanisinfr0   r(   )r)   r*   r+   r,   failurefail_fmtfail_msgs          r   result_checkr[      sF   	 htG (E"" #z#s';'; #Cjj	C		 #Jx$=$= #??(E"" 	Ez#u'='= 	E:h 	EDJsOO 	EGGZ!! 	ETZ__ 	E $Hc7GDDG ,??8S11GNN7+++tr   c                       e Zd Zd Zd ZdS )	FloatLikec                     || _         d S Nvalueselfra   s     r   __init__zFloatLike.__init__       


r   c                     | j         S r_   r`   rc   s    r   	__float__zFloatLike.__float__   
    zr   N)__name__
__module____qualname__rd   rh    r   r   r]   r]      2              r   r]   c                       e Zd ZdS )IntSubclassNrj   rk   rl   rm   r   r   rp   rp      s        Dr   rp   c                       e Zd Zd Zd ZdS )MyIndexablec                     || _         d S r_   r`   rb   s     r   rd   zMyIndexable.__init__   re   r   c                     | j         S r_   r`   rg   s    r   	__index__zMyIndexable.__index__   ri   r   Nrj   rk   rl   rd   rv   rm   r   r   rs   rs      rn   r   rs   c                      e Zd ZdLdZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zed             Zd Z ej        ej        dk    o ej                    dv d          d             Zd Zd Zd Zd Zd Zd Zej        d             Zd Z d Z!d Z"e ej        e#d          d                         Z$d  Z%d! Z&e ej        e#d"          d#                         Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.ed+             Z/e ej0        d,d          d-                         Z1d. Z2d/ Z3d0 Z4d1 Z5ed2             Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;ed8             Z<d9 Z=d: Z>d; Z?d< Z@ed=             ZAed>             ZB ejC        eDd?          d@             ZEedA             ZFedB             ZGdC ZHdD ZIdE ZJedF             ZKedG             ZLdH ZMdI ZNdJ ZOdKS )M	MathTestsrP   rQ   c                     	 t          ||||          }|+|                     d                    ||                     d S d S )Nz{}: {})r[   failr(   )rc   namer*   r)   r+   r,   rX   s          r   ftestzMathTests.ftest   sP    	 xgw??IIhoodG4455555 r   c                     |                      dt          j        d           |                      dt          j        d           |                     t          j        dt          j        z             d S )Npig-DT!	@egiW
@rI   )r}   rU   r   r   assertEqualtaurg   s    r   testConstantszMathTests.testConstants   sX    

4"<===

3 :;;;1TW9-----r   c                 T   |                      t          t          j                   |                     dt          j        d          t          j                   |                     dt          j        d          t          j        dz             |                     dt          j        d          d           |                      t          t          j        t                     |                      t          t          j        t                     |                      t          t          j        dt          z              |                      t          t          j        dt          z
             | 
                    t          j        t          j        t                                         d S )Nzacos(-1)zacos(0)r   rI   zacos(1)r   )assertRaises	TypeErrorrU   acosr}   r   
ValueErrorINFNINFeps
assertTruerV   NANrg   s    r   testAcoszMathTests.testAcos  s   )TY///

:ty}}dg666

9dillDGAI666

9dillA...*di555*di666*diS999*dic:::
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                      t
          t          j        d           |                      t
          t          j        d           |                     t          j        t                    t                     |                      t
          t          j        t                     | 	                    t          j
        t          j        t                                         d S )Nzacosh(1)r   r   zacosh(2)rI   g5qB?r   )r   r   rU   acoshr}   r   r   r   r   r   rV   r   rg   s    r   	testAcoshzMathTests.testAcosh  s    )TZ000

:tz!}}a000

:tz!}}.@AAA*dj!444*dj"555C#...*dj$777
4:c??3344444r   c                 \   |                      t          t          j                   |                     dt          j        d          t          j         dz             |                     dt          j        d          d           |                     dt          j        d          t          j        dz             |                      t          t          j        t                     |                      t          t          j        t                     |                      t          t          j        dt          z              |                      t          t          j        dt          z
             | 
                    t          j        t          j        t                                         d S )Nzasin(-1)r   rI   zasin(0)r   zasin(1)r   )r   r   rU   asinr}   r   r   r   r   r   r   rV   r   rg   s    r   testAsinzMathTests.testAsin  s   )TY///

:ty}}twhqj999

9dillA...

9dillDGAI666*di555*di666*diS999*dic:::
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     t          j        t                    t                     |                     t          j        t                    t                     |                     t          j	        t          j        t                                         d S )	Nzasinh(0)r   zasinh(1)r   g'ya64?z	asinh(-1)r   g'ya64)r   r   rU   asinhr}   r   r   r   r   rV   r   rg   s    r   	testAsinhzMathTests.testAsinh"  s    )TZ000

:tz!}}a000

:tz!}}.ABBB

;
20DEEEC#...D))4000
4:c??3344444r   c                    |                      t          t          j                   |                     dt          j        d          t          j         dz             |                     dt          j        d          d           |                     dt          j        d          t          j        dz             |                     dt          j        t                    t          j        d	z             |                     d
t          j        t                    t          j         d	z             |                     t          j	        t          j        t                                         d S )Nzatan(-1)r      zatan(0)r   zatan(1)r   z	atan(inf)rI   z
atan(-inf))r   r   rU   atanr}   r   r   r   r   rV   r   rg   s    r   testAtanzMathTests.testAtan+  s    )TY///

:ty}}twhqj999

9dillA...

9dillDGAI666

;	#	:::

<447(1*===
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                      t          t          j        d	           |                      t          t          j        d
           |                      t          t          j        t                     |                      t          t          j        t                     | 	                    t          j
        t          j        t                                         d S )Nzatanh(0)r   z
atanh(0.5)      ?gz?zatanh(-0.5)      gzr   r   )r   r   rU   r   r}   atanhr   r   r   r   rV   r   rg   s    r   	testAtanhzMathTests.testAtanh4  s
   )TY///

:tz!}}a000

<C2EFFF

=$*T"2"24HIII*dj!444*dj"555*dj#666*dj$777
4:c??3344444r   c                    |                      t          t          j                   |                     dt          j        dd          t          j         dz             |                     dt          j        dd          t          j         dz             |                     dt          j        dd          d           |                     d	t          j        dd          t          j        dz             |                     d
t          j        dd          t          j        dz             |                     dt          j        dt                    t          j                   |                     dt          j        dd          t          j                   |                     dt          j        dd          t          j                   |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dt                    d           | 	                    t          j
        t          j        dt                                         |                     dt          j        dt                    t          j                    |                     dt          j        dd          t          j                    |                     dt          j        dd          t          j                    |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dt                    d           | 	                    t          j
        t          j        dt                                         |                     dt          j        t          t                    t          j        dz  dz             |                     dt          j        t          d          t          j        dz             |                     dt          j        t          d          t          j        dz             |                     dt          j        t          d          t          j        dz             |                     dt          j        t          d          t          j        dz             |                     dt          j        t          t                    t          j        dz             | 	                    t          j
        t          j        t          t                                         |                     dt          j        t          t                    t          j         dz  dz             |                     dt          j        t          d          t          j         dz             |                     dt          j        t          d          t          j         dz             |                     dt          j        t          d          t          j         dz             |                     d t          j        t          d          t          j         dz             |                     d!t          j        t          t                    t          j         dz             | 	                    t          j
        t          j        t          t                                         |                     d"t          j        dt                    t          j                   |                     d#t          j        dd          t          j        dz             |                     d$t          j        dd          t          j        dz             |                     t          j        dt                    d           | 	                    t          j
        t          j        dt                                         |                     d%t          j        dt                    t          j                    |                     d&t          j        dd          t          j         dz             |                     d't          j        dd          t          j         dz             |                     t          j        dt                    d           | 	                    t          j
        t          j        dt                                         | 	                    t          j
        t          j        t          t                                         | 	                    t          j
        t          j        t          d                               | 	                    t          j
        t          j        t          d                               | 	                    t          j
        t          j        t          d                               | 	                    t          j
        t          j        t          d                               | 	                    t          j
        t          j        t          t                                         | 	                    t          j
        t          j        t          t                                         d S )(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(0., -inf)rQ   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   rU   atan2r}   r   r   r   r   r   rV   r   rg   s    r   	testAtan2zMathTests.testAtan2?  s   )TZ000

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

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

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

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

=$*Q"2"2DGAI>>> 	

$djT&:&:DGDDD

$djT&:&:DGDDD

#TZC%8%8$'BBBB++R000B,,b111B,,b111
4:b##6#677888

%tz#t'<'<twhGGG

%tz#t'<'<twhGGG

$djc&:&:TWHEEEC,,c222C--s333C--s333
4:c3#7#788999

%tz#t'<'<dgaikJJJ

%tz#t'<'<dgaiHHH

$djd&;&;TWQYGGG

#TZS%9%94719EEE

$djc&:&:DGAIFFF

$djc&:&:DGAIFFF
4:c3#7#788999

&
4(>(>
1MMM

&
4(>(>
KKK

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

$djs&;&;dgXaZHHH

%tz$'<'<twhqjIII

%tz$'<'<twhqjIII
4:dC#8#899:::

%tz#t'<'<dgFFF

$djc&:&:DGAIFFF

#TZR%8%8$'!)DDDC--r222
4:c3#7#788999

&
4(>(>III

%tz$'<'<twhqjIII

$djr&:&:TWHQJGGGD#..444
4:dC#8#899:::
4:c4#8#899:::
4:c4#8#899:::
4:c3#7#788999
4:c2#6#677888
4:c3#7#788999
4:c3#7#788999
4:c3#7#78899999r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d	          d	           |                     d
t          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     t          j        t                    t                     |                     t          j        t                    t                     |                     t          j	        t          j        t                                         d S )Nzcbrt(0)r   zcbrt(1)r   zcbrt(8)   rI   z	cbrt(0.0)rQ   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   rU   cbrtr}   r   r   r   r   rV   r   rg   s    r   testCbrtzMathTests.testCbrt|  s   )TY///

9dillA...

9dillA...

9dillA...

;	#444

<4$777

;	#0ABBB

<42DEEE

:ty}}a000

:ty}}b111

;	#3333---4$///
49S>>2233333r   c                    |                      t          t          j                   |                     t
          t          t          j        d                               |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d	           |                     t          j        d
          d	           |                     t          j        d          d           |                     t          j        d          d            G d d          } G d dt                    } G d d          }|                     t          j         |                      d           |                     t          j         |                      d           |                     t          j        t          d                    d           |                      t          t          j         |                        |            }d |_	        |                      t          t          j        |           |                      t          t          j        |d           d S )Nr   r         ?      ?rI   r   r         r         rQ   r   c                       e Zd Zd ZdS )$MathTests.testCeil.<locals>.TestCeilc                     dS N*   rm   rg   s    r   __ceil__z-MathTests.testCeil.<locals>.TestCeil.__ceil__      rr   Nrj   rk   rl   r   rm   r   r   TestCeilr     #            r   r   c                       e Zd Zd ZdS )%MathTests.testCeil.<locals>.FloatCeilc                     dS r   rm   rg   s    r   r   z.MathTests.testCeil.<locals>.FloatCeil.__ceil__  r   r   Nr   rm   r   r   	FloatCeilr     r   r   r   c                       e Zd ZdS )&MathTests.testCeil.<locals>.TestNoCeilNrq   rm   r   r   
TestNoCeilr             Dr   r   r   g     @E@+   c                      | S r_   rm   argss    r   <lambda>z$MathTests.testCeil.<locals>.<lambda>  s    4 r   )
r   r   rU   ceilr   rT   typer;   r]   r   )rc   r   r   r   ts        r   testCeilzMathTests.testCeil  s   )TY///d49S>>223333+++3+++3+++4!,,,4"---4"---3+++4!,,,
	 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	88::..33399;;//4449T??33R888)TY

===JLL''
)TY222)TY155555r   c                 	   |                      t          j        dd          d           |                      t          j        dd          d           |                      t          j        dd          d           |                      t          j        dd          d           |                      t          j        d	d
          d           |                     t          t          j                   |                      t          j        dd          d           |                      t          j        dd
          d           |                      t          j        t
          d          t
                     |                      t          j        t
          d
          t                     |                      t          j        t          d          t
                     |                      t          j        t          d
          t                     |                      t          j        dt
                    d           |                      t          j        dt                    d           |                      t          j        t
          t
                    t
                     |                      t          j        t
          t                    t                     |                      t          j        t          t
                    t
                     |                      t          j        t          t                    t                     |                     t          j        t          j        t          d                               |                     t          j        t          j        t          t
                                         |                     t          j        t          j        t          t                                         |                     t          j        t          j        t          t                                         |                     t          j
        t          j        t
          t                                         |                      t          t          j        dt                              d           d S )Nr   r   r   rQ   ir   r         @      @r                @)r   rU   copysignr   r   r   r   r   rV   r   rW   r'   rg   s    r   testCopysignzMathTests.testCopysign  sV   q"--s333r2..444r3//666q"--s333r3//666)T]333r2..333r3//555sB//555sC00$777tR00#666tS114888r3//444r400#666sC00#666sD114888tS113777tT22D999
4=b#9#9::;;;
4=c#:#:;;<<<
4=d#;#;<<===
4=c#:#:;;<<< 	
4=c#:#:;;<<<T]2s3344b99999r   c                 v   |                      t          t          j                   |                     dt          j        t          j         dz            dt          j        d                     |                     dt          j        d          d           |                     dt          j        t          j        dz            dt          j        d                     |                     dt          j        t          j                  d	           	 |                     t          j        t          j        t                                         |                     t          j        t          j        t                                         nf# t          $ rY |                      t          t          j        t                     |                      t          t          j        t                     Y nw xY w|                     t          j        t          j        t                                         d S )
Nz
cos(-pi/2)rI   r   r   r,   zcos(0)z	cos(pi/2)zcos(pi)r   )r   r   rU   cosr}   r   ulpr   rV   r   r   r   r   rg   s    r   testCoszMathTests.testCos  s   )TX...

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

8TXa[[!,,,

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

9dhtw//444	:OODJtx}}55666OODJtx~~667777 	: 	: 	:j$(C888j$(D99999	: 	
48C==1122222s   A<F A G87G8win32)ARMARM64zEWindows UCRT is off by 2 ULP this test requires accuracy within 1 ULPc                 n   |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          dt          j        d          dz  z  z
  d           |                     t          j        t                    t                     |                     t          j        t                    t                     |                     t          j	        t          j        t                                         d S )Nzcosh(0)r   r   zcosh(2)-2*cosh(1)**2rI   r   )r   r   rU   coshr}   r   r   r   r   rV   r   rg   s    r   testCoshzMathTests.testCosh  s     	)TY///

9dillA...

)49Q<<$)A,,/8I+I2NNN3---4#...
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        t          j                  d           |                     dt          j        t          j        dz            d           |                     dt          j        t          j         dz            d           |                     d	t          j        d
          d
           d S )Nzdegrees(pi)g     f@zdegrees(pi/2)rI   g     V@zdegrees(-pi/4)r   g     Fz
degrees(0)r   )r   r   rU   degreesr}   r   rg   s    r   testDegreeszMathTests.testDegrees  s    )T\222

=$,tw"7"7???

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

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

<a!44444r   c                    |                      t          t          j                   |                     dt          j        d          dt          j        z             |                     dt          j        d          d           |                     dt          j        d          t          j                   |                     t          j        t                    t                     |                     t          j        t                    d           | 	                    t          j
        t          j        t                                         |                      t          t          j        d           d S )	Nzexp(-1)r   r   zexp(0)r   zexp(1)rQ   @B )r   r   rU   rE   r}   r   r   r   r   r   rV   r   OverflowErrorrg   s    r   testExpzMathTests.testExp  s    )TX...

9dhrllAdfH555

8TXa[[!,,,

8TXa[[$&111#,,,$,,,
48C==11222-7;;;;;r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     d	t          j        d
          d           |                     t          j        t                    t                     |                     t          j        t                    d           |                     t          j	        t          j        t                                         |                      t          t          j        d           d S )Nzexp2(-1)r   r   zexp2(0)r   r   zexp2(1)rI   z	exp2(2.3)r   g){Ĳ@rQ   r   )r   r   rU   exp2r}   r   r   r   r   rV   r   r   rg   s    r   testExp2zMathTests.testExp2  s   )TY///

:ty}}c222

9dillA...

9dillA...

;	#0ABBB3---4"---
49S>>22333-G<<<<<r   c                 F   |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           d S )Nzfabs(-1)r   r   zfabs(0)r   zfabs(1))r   r   rU   fabsr}   rg   s    r   testFabszMathTests.testFabs  sz    )TY///

:ty}}a000

9dillA...

9dillA.....r   c                    |                      t          j        d          d           d}t          dd          D ]d}||z  }|                      t          j        |          |           |                      t          j        |          t	          |                     e|                     t          t          j        d           |                     t          t          j        ddz              d S )Nr   r     r   
   d   )r   rU   	factorialr    r%   r   r   )rc   totalr$   s      r   testFactorialzMathTests.testFactorial	  s    **A...q$ 	A 	AAQJET^A..666T^A..Q@@@@*dnb999*dnr3wh?????r   c                 b   |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        t	          j        d                     |                      t          t          j        t	          j        d                     |                      t          t          j        d           d S )N      @g@r   }Ô%I5z5.2)r   r   rU   r   decimalDecimalrg   s    r   testFactorialNonIntegersz"MathTests.testFactorialNonIntegers  s    )T^S999)T^S999)T^T:::)T^V<<<)T^W_S5I5IJJJ)T^W_U5K5KLLL)T^S99999r   c                     |                      t          t          j        ddz             |                      t          t          j        d           d S )Nr   r   }Ô%IT)r   r   rU   r   r   rg   s    r   testFactorialHugeInputsz!MathTests.testFactorialHugeInputs  sB     	-SAAA)T^U;;;;;r   c                 B   |                      t          t          j                   |                     t
          t          t          j        d                               |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d	          d
            G d d          } G d dt                    } G d d          }|                     t          j         |                      d           |                     t          j         |                      d           |                     t          j        t          d                    d           |                      t          t          j         |                        |            }d |_	        |                      t          t          j        |           |                      t          t          j        |d           d S )Nr   r   r   r   r   r   r   r   r   c                       e Zd Zd ZdS )&MathTests.testFloor.<locals>.TestFloorc                     dS r   rm   rg   s    r   	__floor__z0MathTests.testFloor.<locals>.TestFloor.__floor__2  r   r   Nrj   rk   rl   r  rm   r   r   	TestFloorr  1  r   r   r  c                       e Zd Zd ZdS )'MathTests.testFloor.<locals>.FloatFloorc                     dS r   rm   rg   s    r   r  z1MathTests.testFloor.<locals>.FloatFloor.__floor__5  r   r   Nr  rm   r   r   
FloatFloorr  4  r   r   r
  c                       e Zd ZdS )(MathTests.testFloor.<locals>.TestNoFloorNrq   rm   r   r   TestNoFloorr  7  r   r   r  r   g33333D@)   c                      | S r_   rm   r   s    r   r   z%MathTests.testFloor.<locals>.<lambda>?  s    D r   )
r   r   rU   floorr   rT   r   r;   r]   r  )rc   r  r
  r  r   s        r   	testFloorzMathTests.testFloor$  sW   )TZ000d4:c??33444C!,,,C!,,,C!,,,D))2...D))2...D))2...
	 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	IIKK00"555JJLL112666IdOO44b999)TZ???KMM(()TZ333)TZA66666r   c                 @   |                      t          t          j                   |                     dt          j        dd          d           |                     dt          j        dd          d           |                     dt          j        dd          d	           |                     d
t          j        dd          d           |                     dt          j        dd          d           |                     dt          j        dd          d           |                     t          j        t          j        t          d	                               |                     t          j        t          j        d	t                                         |                     t          j        t          j        t          t                                         |                      t          t          j        d	d           |                      t          t          j        t          d	           |                      t          t          j        t          d	           |                      t          t          j        t          d           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dd          d           |                     t          j        dt                    d           d S )Nzfmod(10, 1)r   r   rQ   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   rU   fmodr}   r   rV   r   r   r   r   r   rg   s    r   testFmodzMathTests.testFmodC  s   )TY///

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

?DIb#$6$6<<<

?DIb#$6$6<<<

>49S!#4#4d;;;

#TYsC%8%8$???

#TYsC%8%8$???
49S"#5#566777
49R#5#566777
49S##6#677888*diR888*dib999*dir:::*dib9993,,c2224--t4443--s3334..5553,,c2223--s33333r   c                                           t          t          j                    fd} |dt          j        d          d            |dt          j        d          d            |dt          j        d	          d
            |dt          j        d          d                                t          j        t
                    d         t
                                          t          j        t                    d         t                                          t          j        t          j        t                    d                              d S )Nc                     ||c\  }}\  }}t          ||z
            t          k    s||k    r                    | d|d|           d S d S Nz
 returned z, expected r'   r   r{   )r|   resultr)   mantrE   emanteexprc   s          r   	testfrexpz&MathTests.testFrexp.<locals>.testfrexp\  sq    )/&KT3%4:$$t		443 4 4 4 4 4 )4r   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   rU   frexpr   r   r   r   rV   r   )rc   r  s   ` r   	testFrexpzMathTests.testFrexpY  s   )TZ000	4 	4 	4 	4 	4 		+tz"~~y999	*djmmV444	*djmmX666	*djmmX666C+S111D))!,d333
4:c??1#56677777r   z2fsum is not exact on machines with double roundingc                    ddl m} |j        |j        z
  fd}g dfdgdfg ddfg ddfg d	d
fg ddfg ddfd t	          dd          D             t
                              d          fd t	          dd          D             t
                              d          fg ddfg ddfd t	          ddd          D             dgz   t
                              d          fg}d t	          d          D             |                    fdt	          d           D             d           gz   d          f           t          |          D ]\  }\  }}	 t          j
        |          }nQ# t          $ r |                     d!|||fz             Y n*t          $ r |                     d"|||fz             Y nw xY w|                     ||           dd#lm}m}	m}
 t	          d           D ]}g d$d%z  }d}t	          d&          D ]6} |	d |                      d'z  |z
  }||z  }|                    |           7 |
|            ||          }|                      ||          t          j
        |                     d S )(Nr   )
float_infoc           	         	 d\  }}| D ]^}t          j        |          \  }}t          t          j        |	                    |	z
  }}||k    r|||z
  z  }|}n|||z
  z  }||z  }_t	          t          t          t          |                              dz
  	z
  |z
            }|dk    r3d|dz
  z  }|d|z  z  t          ||z  o
|d|z  dz
  z            z   }||z  }t          j        ||          S )Nr   rI   r   r   r   )	rU   r!  rT   ldexpmaxlenbinr'   bool)
iterabletmanttexpr   r  rE   tailhetinymant_digs
           r   msumz MathTests.testFsum.<locals>.msum~  s   
 KE4   JqMM	c
4 : :;;S8^c#::d3h&EDDSX%D
 s3s5zz??++A-8%$,GGDaxx$q&M!A#eai.IEAaCEM)J)JJ:eT***r   rQ   )r   r   r   0.++gd~QJr   gd~Qr3  )      @Cr   g      g?C)r4  r         9g     @C)g     @Cr   r5  g     @C)g?Cr   g      <g?Cc                     g | ]}d |z  S r   rm   .0r   s     r   
<listcomp>z&MathTests.testFsum.<locals>.<listcomp>  s    +++qbd+++r   r   i  z0x1.df11f45f4e61ap+2c                     g | ]
}d |z  |z  S )r   rm   r8  s     r   r:  z&MathTests.testFsum.<locals>.<listcomp>  s     111QsQhqj111r   z-0x1.62a2af1bd3624p-1)r	   r   gؗҜ<g7yAC)g7yACg?g7yAgc                 <    g | ]}d |z  d |dz   z  z
  d |dz   z  z   S )r   2   4   rm   r8  s     r   r:  z&MathTests.testFsum.<locals>.<listcomp>  s6    LLL!b!eb1R4j 2":-LLLr   i  rI   g      z0x1.5555555555555p+970c                     g | ]}d |z  S )g333333?rm   )r9  r$   s     r   r:  z&MathTests.testFsum.<locals>.<listcomp>  s    ---Aa---r   c                 8    g | ]}|d z            |         z
  S r   rm   )r9  r$   termss     r   r:  z&MathTests.testFsum.<locals>.<listcomp>  s*    888qU1Q3Z%("888r   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      rG  )sysr$  r1  min_expr    r;   fromhexappend	enumeraterU   fsumr   r{   r   r   rD  rE  rF  )rc   r$  r2  test_valuesr$   valsr)   actualrD  rE  rF  jsvr0  r1  rC  s                 @@@r   testFsumzMathTests.testFsumk  s    	#"""""&"X-	+ 	+ 	+ 	+ 	+ 	+8 IUCL<<<fE'''5&&&4+++\:)));7++E!TNN+++]]122411%4..111]]2335 34===sCLLuUC7K7KLLL[]]3446* .-t---8888E$KK888U4[L>I1XI
 	 	 	
 $-[#9#9 		/ 		/AhI4  I I I		 256$4GH I I I I I I I I		 256$4GH I I I I II VX....1111111111t 
	: 
	:A8882=DA3ZZ  E!VVXX&&!+a/QAGDMMMT

ATT$ZZ49999
	: 
	:s   E33%G$G Gc                    t           j        }|                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d	           |                      |dd
          d	           |                      |dd          d           d}d}dD ]}||z  }||z  }|                      |||          |           |                      |||          |           |                      || |          |           |                      |||           |           |                      |||           |           |                      || |          |           |                      || |           |           |                      || |           |           |                      |            d           |                      |d          d           |                      |d
          d           |                      |ddd          d           |                      |ddd          d           |                     t          |d           |                     t          |dd           |                     t          |dd           |                     t          |ddd           |                      |t          d          t          d                    d	           d S )Nr   r   r   rG     x   T          j9W    P)}    "o  `T"-    l   8P9cC/[N
S9bXl	   9@{wM275k )	 l   Z'^%#>;*Q!/61^f            ^@      U@)rU   gcdr   r   r   rs   )rc   re  r   ycabs          r   testGcdzMathTests.testGcd  s   h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AASSAYY***SSAYY***SS!QZZ+++SSQBZZ+++SSQBZZ+++SS!QZZ+++SS!aR[[!,,,SS!aR[[!,,,,"""S3'''TC(((S"c**A...S!R!,,,)S%000)S%444)S#t444)S#q$777[--{2??DDDDDr   c                    ddl m} ddlm} t          j        }t          j        t          j        t	          j        d          t	          j	        d          t	          j
        d          f}t          t          |          dz             D ]T}|                      ||d |          t	          j        t          d |d |         D                                            U|                      |d	d
          d           |                      |dd          d           |                      | |d           |d                    d           |                      | |dd           |dd                     |dd                     |                      |t!          d          t!          d          t!          d          t!          d                    t	          j        d                     |                      |dd          d           |                      |d          d           |                      |            d           |                     dt	          j        d |d                               |                      |ddd           |ddd                     |                     t&                    5   |d           d d d            n# 1 swxY w Y   |                     t&                    5   |ddd           d d d            n# 1 swxY w Y   dt(          j        j        dz   z  }|                     t.          t0          f          5   |d|           d d d            n# 1 swxY w Y   |                      |t2                    t2                     |                      |dt2                    t2                     |                      |dt2                    t2                     |                      |dt2                    t2                     |                      |t4          t2                    t2                     |                      |t2          t4                    t2                     |                      |t6          t4                    t2                     |                      |t4          t6                    t2                     |                      |t2           t2                    t2                     |                      |t2           t2                     t2                     |                      |dt2                     t2                     |                     t	          j         |t4                                         |                     t	          j         |dt4                                         |                     t	          j         |t4          d                               |                     t	          j         |dt4                                         |                     t	          j         |t4          t4                                         |                     t	          j         |t4                                         t<          dz  }t          d          D ]F}|                     t	          j         ||g|z   |t	          j        |          z                       Gt          d          D ]A}	t@          d|	z  z  }
|                     t	          j        d|
z  d|
z            d|
z             Bd S ) Nr   r   Fractionr         @g @r   c              3       K   | ]	}|d z  V  
dS )rI   Nrm   )r9  rS  s     r   	<genexpr>z&MathTests.testHypot.<locals>.<genexpr>  s&      55qad555555r   g      (@r         *@r[  rP      r_  r   rQ         %      %@r   r   r   r   r   皙?string皙@r   r  r   r   )!r   r   	fractionsrn  rU   hypotr   r   sqrtgammasinr    r(  assertAlmostEqualsumr   r*  r   r   r   rI  r$  
max_10_expr   r   r   r   r   r   rV   	FLOAT_MAXisclose	FLOAT_MIN)rc   r   rn  r{  r   r$   int_too_big_for_float	fourthmaxr   rE   scales              r   	testHypotzMathTests.testHypot  sT   ######&&&&&&
 vtw	#
3#Ns4yy{## 	 	A""tBQBx 	#55D!H5555566    	tS))4000r1r***wwr{{GGAJJ77<<<xxB//!RAA88BPRCSCSTTTtAwwQa$q''BBDIaLLQQQ 	sC#...ut,,,#&&&M#uuT{{++	
 	
 	
 	E#sC  E#sC  	
 	
 	
 y)) 	 	EAJJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y)) 	& 	&E#x%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& "s~'@1'D E
M:;; 	, 	,E!*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	sS)))q#,,,r3---sC#...sC#...sC#...tS))3///sD))3///tS))3///tcT**C000rC4#... 	
55::..///
55C==11222
55b>>22333
55S>>22333
55c??33444
55::../// O	r 	D 	DAOODL)Q)@)2TYq\\)AC C D D D D 99 	D 	DCs
*ETZ%5991U7CCCC	D 	Ds6   K$$K(+K(	L##L'*L'&M??NNz7hypot() loses accuracy on machines with double roundingc           	      J   t           j        }t          j        }t          j        d          }dD ]\  }}t
                              |          }t
                              |          }|                     ||||          5  t          j        |          5  t           ||          dz   ||          dz  z   	                                          }d d d            n# 1 swxY w Y   | 
                     |||          |           d d d            n# 1 swxY w Y   d S )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   rf  rI   )rU   r{  r   r   Contextr;   rK  subTestlocalcontextr|  r   )	rc   r{  r   high_precisionr  r  r   rf  zs	            r   testHypotAccuracyzMathTests.testHypotAccuracyA  s    
/ c222$
 *	1 *	1FBJ b!!Ab!!Aa155 1 1).99 F Fwwqzz1}wwqzz1}<BBDDEEAF F F F F F F F F F F F F F F  q!a0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1O*	1 *	1s6   D=C D C$$D'C$(#DD	D	c                    ddl m} ddlm} t          j        }t          j        }|                      |dd          d           |                      |dd          d           t          d	          D ]}t          d
          D ]}t          d t          |          D                       }t          d t          |          D                       }| 
                     |||           |t          d t          ||          D                                            |                      |g dg d          d           |                      |t          g d          t          g d                    d           |                      |dd          d           |                      |dd          d           |                      | |d           |d          f |d           |d          f           |d                     |                      | |dd           |dd          f |dd           |dd          f           |dd                     |                      |dd           |d                     |                      |dd          d           |                      |dd          d           |                     dt	          j        d |d d!                               |                     dt	          j        d |d!d                                |                      |d"d#           |d$d#                      G d% d&t                    }	|                      | |	d          d          d           |                     t                     5   |dd'(           d d d            n# 1 swxY w Y   |                     t                     5   |d           d d d            n# 1 swxY w Y   |                     t                     5   |dd'd)           d d d            n# 1 swxY w Y   |                     t                     5   |dd           d d d            n# 1 swxY w Y   |                     t                     5   |d*d           d d d            n# 1 swxY w Y   |                     t"                    5   |d+d,           d d d            n# 1 swxY w Y   |                     t"                    5   |dd-           d d d            n# 1 swxY w Y   |                     t                     5   |d.d/           d d d            n# 1 swxY w Y   d0t$          j        j        d
z   z  }
|                     t"          t*          f          5   |d|
fd1           d d d            n# 1 swxY w Y   |                     t"          t*          f          5   |d1d|
f           d d d            n# 1 swxY w Y   t          d2          D ]Z}t-          j                    t-          j                    }}|                      ||f|f          t/          ||z
                       [t0          d3d4dd5t2          t4          g}t7          j        |d67          D ]}t7          j        |d67          D ]}d8 t          ||          D             }t;          t=          t          j        |                    r&|                      |||          t2                     it;          t=          t          j         |                    r1| !                    t	          j          |||                               tD          d9z  }t          d          D ]}|f|z  }d!|z  }| !                    t	          j#         |||          |t	          j        |          z                       | !                    t	          j#         |||          |t	          j        |          z                       t          d          D ]s}tH          d|z  z  }d:|z  d6|z  f}d;}|                     t	          j        ||          d
|z             |                     t	          j        ||          d
|z             td S )<Nr   rl  rm  )r   r   r   )r   r   r   r   )r   rI   r   )r   rI   r   	   rP   c              3   @   K   | ]}t          j        d d          V  dS rP   NrD  uniformr9  ks     r   rq  z%MathTests.testDist.<locals>.<genexpr>  .      BBA&.Q//BBBBBBr   c              3   @   K   | ]}t          j        d d          V  dS r  r  r  s     r   rq  z%MathTests.testDist.<locals>.<genexpr>  r  r   c              3   ,   K   | ]\  }}||z
  d z  V  dS )r   Nrm   r9  pxqxs      r   rq  z%MathTests.testDist.<locals>.<genexpr>  s/      FF&"bb2g#-FFFFFFr   )g      ,@r   )r   r   rr  )   r   )rI   rs  r  r   rI   r  r_  )TTFTF)TFTTFr   )g     *@g      )@g      
rQ   rm   r   )r   )rQ   )r   r   r   )r   r   r   )r   r   r   c                       e Zd ZdS )MathTests.testDist.<locals>.TNrq   rm   r   r   Tr    r   r   r  )r   rP   rb  )pq)rG  r   r  )rw  rx  ry  )r   rI   r   r   )rP   rb  rG  )r   rP   rb  rG  abcxyzr   )rI   r      rt  r   ru  r   )repeatc                     g | ]
\  }}||z
  S rm   rm   r  s      r   r:  z&MathTests.testDist.<locals>.<listcomp>  s     999VRb999r   r   r   )rQ   rQ   )%r   r   rz  rn  rU   distr|  r   r    tupler  r  zipiterr   r   r   r   rI  r$  r  r   rD  r'   r   r   r   	itertoolsproductanymaprW   rV   r   r  r  r  )rc   DFr  r|  r$   rR  r  r  r  r  valuesdiffsr  r   rE   r  s                    r   testDistzMathTests.testDist  s   ((((((++++++yy 	o/?@@#FFFi44c::: q 	 	A1XX  BBqBBBBBBBqBBBBB&&DAJJDFFC1IIFFFFFGG    	ooo/?/?/?@@#FFFd???33T:J:J:J5K5KLLcRRR 	k;77>>>gw//444qquuaaddmaaddAAbEE];;QQrUUCCCqqRyy!!Ar((3aa2hh"b		5JKK2r	$ 	$ 	$>>@ @c	$ 	$ 	$
 	224 4	 	 	 	b"s+++M#ttGV4455	
 	
 	
 	M#ttFG4455	
 	
 	
 	D),,D),,	
 	
 	
	 	 	 	 	 	 	 	aa	llZ993??? y)) 	+ 	+D9	****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+y)) 	 	DOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y)) 	2 	2DIy111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2y)) 	 	DAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y)) 	2 	2D%y111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2z** 	* 	*Dy)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*z** 	* 	*DL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*y)) 	 	D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "s~'@1'D E
M:;; 	5 	5D!*+V444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
M:;; 	5 	5D!23444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 r 	; 	;A=??FMOOqATT1$--s1q5zz:::: tS$S9"6!444 	< 	<A&va888 < <99s1ayy999s4:u--.. <$$TT!QZZ5555TZ//00 <OODJttAqzz$:$:;;;< O	r 	P 	PAq A
AOODLaY15MNNOOOOODLaY15MNNOOOO 99 	7 	7Cs
*E5!E'"AATYq!__ag666TYq!__ag6666	7 	7s   ;OOO:PPP7QQQ6RRR4SSS2TTT0U		UU.VVV
W%%W),W)X,,X03X0c                     |                      t                    5  t          j        ddgg d           d d d            d S # 1 swxY w Y   d S )Nr   rI   )r   r   rP   )r   r   rU   r  rg   s    r   test_math_dist_leakzMathTests.test_math_dist_leak  s    z** 	) 	)Iq!fiii(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AA	Ac                    t          t          d                    t          t          dd                    z   d t          dd          D             z   ddz  d	d
z  gz   }|D ]}|                     |          5  t          j        |          }|                     t          |          t                     |                     ||z  |           | 	                    ||dz   |dz   z             d d d            n# 1 swxY w Y   | 
                    t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        d          }|                     t          |          t                     |                     |d           t          j        d          }|                     t          |          t                     |                     |d            G d dt                    }t          j         |d                    }|                     t          |          t                     |                     |d           | 
                    t                    5  t          j         |d                     d d d            n# 1 swxY w Y   ddt          j        d          dddg}|D ]v}|                     |          5  | 
                    t                     5  t          j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   wd S )Nr   iX> i(F c                 D    g | ]}t          d d          D ]
}d|z  |z   S )i(   rI   )r    )r9  r   r$   s      r   r:  z'MathTests.testIsqrt.<locals>.<listcomp>  s5    HHHAsBHHAq!taxHHHHr   <   rH  r   i'  r   i  r`   r   r   TFr   c                       e Zd Zd Zd ZdS )(MathTests.testIsqrt.<locals>.IntegerLikec                     || _         d S r_   r`   rb   s     r   rd   z1MathTests.testIsqrt.<locals>.IntegerLike.__init__  s    "


r   c                     | j         S r_   r`   rg   s    r   rv   z2MathTests.testIsqrt.<locals>.IntegerLike.__index__  s
    z!r   Nrw   rm   r   r   IntegerLiker    s2        # # #" " " " "r   r  i  r  r   ro  za stringz3.5y              @g      Y@r   )listr    r  rU   isqrtassertIsr   rT   assertLessEqual
assertLessr   r   r   objectr   r   r   )rc   rO  ra   rS  r  
bad_valuess         r   	testIsqrtzMathTests.testIsqrt  sU    t5|44556HHr3HHHI $wD!" 	 ! 	4 	4EE** 4 4Ju%%d1ggs+++$$QqS%000!ac{333	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 z** 	 	JrNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Jtd1ggs###AJud1ggs###A	" 	" 	" 	" 	"& 	" 	" 	" J{{4(())d1ggs###Bz** 	( 	(J{{2'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 W_U33T4

   	& 	&EE** & &&&y11 & &Ju%%%& & & & & & & & & & & & & & && & & & & & & & & & & & & & &	& 	&sm   ;A5C<<D 	D 	"EE
E:J$$J(+J(#L6>LL6L##L6&L#'L66L:	=L:	c                    t           j        }|                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd          d           |                      |dd	          d
           |                      |d	d          d
           |                      |dd          d           d}d}dD ]}||z  }||z  }||z  |z  }|                      |||          |           |                      |||          |           |                      || |          |           |                      |||           |           |                      |||           |           |                      || |          |           |                      || |           |           |                      || |           |           |                      |            d           |                      |d          d           |                      |d          d           |                      |dd	d          d           |                      |ddd	          d           |                     t          |d           |                     t          |dd	           |                     t          |dd           |                     t          |ddd           |                      |t          d          t          d	                    d
           d S )Nr   r   r   rG  rW  rX  iY  rY  rZ  iH  r\  r]  r^  l    ,`aUx-xB:Vn
Ldbl   me%Y% l   };T^	 )r`  l   |/Kr2 ra  i7  rc  rd  )rU   lcmr   r   r   rs   )rc   r  r   rf  rg  rh  ri  ds           r   test_lcmzMathTests.test_lcm+  s   hQA&&&QA&&&RQ'''QA&&&QQ'''QA&&&QQ'''S"s+++S"s+++R,,,98: :R	T 	T 	T ! ( 	- 	-AAAAAA	ASSAYY***SSAYY***SS!QZZ+++SSQBZZ+++SSQBZZ+++SS!QZZ+++SS!aR[[!,,,SS!aR[[!,,,,"""S3'''TC(((S"c**E222S!R!,,,)S%000)S%444)S#t444)S#q$777[--{2??EEEEEr   c           	      p	   |                      t          t          j                   |                     dt          j        dd          d           |                     dt          j        dd          d           |                     dt          j        dd          d           |                     d	t          j        dd          d
           |                      t
          t          j        dd           |                      t
          t          j        dd           |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        t          d          t                     |                     t          j        t          d          t                     | 	                    t          j
        t          j        t          d                               dddddz  fD ]}|                     t          j        t          |           t                     |                     t          j        t          |           t                     |                     t          j        d|           d           |                     t          j        d|           d           |                     t          j        d|           d           |                     t          j        d|           d           | 	                    t          j
        t          j        t          |                                |                      t
          t          j        d|           |                      t
          t          j        d|           |                     t          j        d|          d           |                     t          j        d|          d           |                     t          j        t          |          t                     |                     t          j        t          |          t                     | 	                    t          j
        t          j        t          |                               d S )Nz
ldexp(0,1)r   r   z
ldexp(1,1)rI   zldexp(1,-1)r   r   zldexp(-1,1)r   r   r   r   irQ   r      i+i l    d(	       Fx:^V r   r  )r   r   rU   r&  r}   r   r   r   r   r   rV   r   rc   r   s     r   	testLdexpzMathTests.testLdexpW  s   )TZ000

<Aa!444

<Aa!444

=$*Qr"2"2C888

=$*R"2"2B777-RAAA-S'BBBB112666C22C888C,,c222D$//666
4:c1#5#566777 R0 	< 	<ATZaR00#666TZqb114888TZQB//444TZaR00#666TZQB//444TZaR00#666OODJtz#r':':;;<<<mTZQ???mTZa@@@TZA..333TZQ//555TZQ//555TZa00$777OODJtz#q'9'9::;;;;	< 	<r   c                    |                      t          t          j                   |                     dt          j        dt          j        z            d           |                     dt          j        d          d           |                     dt          j        t          j                  d           |                     dt          j        dd	          d
           |                     dt          j        ddz  d          d           |                     dt          j        ddz  d          d	           |                     dt          j        ddz            d           |                      t          t          j        d           |                      t          t          j        ddz              |                      t          t          j        t                     |                     t          j        t                    t                     | 
                    t          j        t          j        t                                         d S )Nzlog(1/e)r   r   zlog(1)r   zlog(e)z	log(32,2)r_  rI   rP   zlog(10**40, 10)r   r  zlog(10**40, 10**20)r  zlog(10**1000)r   gO+@r   )r   r   rU   logr}   r   r   r   r   r   r   rV   r   rg   s    r   testLogzMathTests.testLogw  s   )TX...

:tx$&112666

8TXa[[!,,,

8TXdf--q111

;A222

$dhr2vr&:&:B???

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

?DHRX$6$6%	' 	' 	'*dh555*dhT	:::*dh555#,,,
48C==1122222r   c           	         |                      t          t          j                   dddz  ddz  fD ]I}|                     t          j        |          t          j        t          |                               J|                      t          t          j        d           |                     t          j        t                    t                     d S )NrI   Z   i,  r   )	r   r   rU   log1pr  r;   r   r   r   r  s     r   	testLog1pzMathTests.testLog1p  s    )TZ000QUAsF# 	H 	HA""4:a==$*U1XX2F2FGGGG*dj"555C#.....r   c                 `   |                      t          t          j                   |                     t          j        d          d           |                     t          j        d          d           |                     t          j        d          d           |                     t          j        ddz            d           |                     t          j        dd	z            d
           |                     t          j        ddz            d           |                      t
          t          j        d           |                      t
          t          j        t                     |                     t          j        t          j        t                                         d S )Nr   rQ   rI   r   r   r   i  g     @   g      @i  g     @@r   )
r   r   rU   log2r   r   r   r   rV   r   rg   s    r   testLog2zMathTests.testLog2  sB   )TY/// 	1s+++1s+++1s+++ 	1d7++V4441d7++V4441d7++V444*di666*di666
49S>>2233333r   r   c                     d t          dd          D             }d t          dd          D             }|                     ||           d S )Nc                 \    g | ])}t          j        t          j        d |                    *S r7  )rU   r  r&  r8  s     r   r:  z+MathTests.testLog2Exact.<locals>.<listcomp>  s.    LLLA$)DJsA..//LLLr   r?  r  c                 ,    g | ]}t          |          S rm   r;   r8  s     r   r:  z+MathTests.testLog2Exact.<locals>.<listcomp>      999E!HH999r   )r    r   )rc   rQ  r)   s      r   testLog2ExactzMathTests.testLog2Exact  s[    
 MLud9K9KLLL99eE4&8&8999*****r   c                 t   |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     d	t          j        dd
z            d           |                      t
          t          j        d           |                      t
          t          j        dd
z              |                      t
          t          j        t                     |                     t          j        t                    t                     | 
                    t          j        t          j        t                                         d S )Nz
log10(0.1)皙?r   zlog10(1)r   r   z	log10(10)r   zlog10(10**1000)r   g     @@r   )r   r   rU   log10r}   r   r   r   r  r   r   rV   r   rg   s    r   	testLog10zMathTests.testLog10  s5   )TZ000

<C"555

:tz!}}a000

;
2222

$djT&:&:FCCC*dj$777*dj2t8)<<<*dj$777#,,,
4:c??3344444r   c                                           t          t          j                    fd} |dt          j        d          d            |dt          j        d          d                                t          j        t
                    dt
          f                                t          j        t                    d	t          f           t          j        t                    }                     t          j	        |d
                                                   t          j	        |d                              d S )Nc                     ||c\  }}\  }}t          ||z
            t          k    st          ||z
            r                    | d|d|           d S d S r  r  )r|   r  r)   v1v2e1e2rc   s          r   testmodfz$MathTests.testModf.<locals>.testmodf  sy    !'HRhr22b5zzC3r"u::		443 4 4 4 4 4  r   z	modf(1.5)r   )r   r   z
modf(-1.5)r   )r   r   rQ   r   r   r   )
r   r   rU   modfr   r   r   r   r   rV   )rc   r  modf_nans   `  r   testModfzMathTests.testModf  s   )TY///	4 	4 	4 	4 	4 	dinnj999ty===3#s44444,7779S>>
8A;//000
8A;//00000r   c                 (   |                      t          t          j                   |                     dt          j        dd          d           |                     dt          j        dd          d           |                     dt          j        dd          d           |                     dt          j        dd          d	           |                     t          j        t          d          t                     |                     t          j        t          d          t                     |                     t          j        dt                    d
           |                     t          j        dt                    d
           |                     t          j	        t          j        t          d                               |                     t          j	        t          j        dt                                         |                     t          j	        t          j        dt                                         |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dd          d
           |                     t          j        dd          d
           |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        dd           |                     t          j        dt                    t                     |                     t          j	        t          j        dt                                         |                     t          j        t          t                    t                     |                     t          j        t          d          t                     |                     t          j        t          d          t                     |                     t          j        t          d          t                     |                     t          j        t          d          d
           |                     t          j        t          d          d
           |                     t          j        t          d          d           |                     t          j        t          d          d           |                     t          j        t          d          d           |                     t          j        t          t                    d           |                     t          j	        t          j        t          t                                         |                     t          j        dt                    d           |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dd          d           |                     t          j        dd          d
           |                     t          j        dd          d
           |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        dd           |                     t          j        dt                    t                     |                     t          j	        t          j        dt                                         |                     t          j        t          t                    t                     |                     t          j        t          d          t                     |                     t          j        t          d          t                     |                     t          j        t          d          t                     |                     t          j        t          d          d
           |                     t          j        t          d          d
           |                     t          j        t          d          d           |                     t          j        t          d          d           |                     t          j        t          d          d           |                     t          j        t          t                    d           |                     t          j	        t          j        t          t                                         |                     t          j        dt                    d
           |                     t          j        dd          d           |                      t          t          j        dd           |                     t          j        dd          d
           |                     t          j        dd          d
           |                     t          j        dd          d
           |                     t          j        dd          d
           |                      t          t          j        dd           |                     t          j        dd          d           |                     t          j        dt                    d
           |                     t          j	        t          j        dt                                         |                     t          j        d
t                    d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
d          d
           |                     t          j        d
t                    d
           |                     t          j        d
t                    d
           |                     t          j        dd          d
           |                     t          j        dd          d
           |                     t          j        t          d          d
           |                     t          j        dd          d
           |                     t          j        dd          d
           |                     t          j        t          d          d
           |                      t          t          j        dd           |                      t          t          j        dd           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    t                     |                     t          j        dt                    t                     |                     t          j        dt                    t                     |                     t          j        dt                    t                     |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    t                     |                     t          j        dt                    t                     |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    d           |                     t          j        dt                    t                     |                     t          j        dt                    t                     |                     dt          j        dd          d           |                     d t          j        dd          d!           |                     d"t          j        dd
          d           |                     d#t          j        dd          d
           |                     d$t          j        dd          d
           |                     d%t          j        dd          d&           |                     d't          j        dd          d(           |                     d)t          j        dd          d*           |                      t          t          j        dd&           |                      t          t          j        dd	           d S )+Nzpow(0,1)r   r   zpow(1,0)zpow(2,1)rI   z	pow(2,-1)r   r   r   rQ   r   r   r   r   g       r   r  r   g      .ggffffff?rw  ?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.      ?z
(-2.)**-3.g      )r   r   rU   powr}   r   r   r   r   rV   r   r   rg   s    r   testPowzMathTests.testPow  s   )TX...

:tx!}}a000

:tx!}}a000

:tx!}}a000

;2444#q))3///$**D111$(1c**R000$(1d++b111
48C#3#344555
48As#3#344555
48As#3#344555!S))1--- 	"c**B///"b))2..."c**B///"b))2..."b))2..."c**B///*dhC888*dhD999*dhC888"d++S111
48B#4#455666 	#s++S111#r**C000#s++S111#r**C000#r**B///#s++R000#s++R000#t,,b111#s++R000#t,,b111
48C#5#566777 	#s++R000#r**C000#s++R000#r**B///#r**B///#s++R000*dhS999*dhT:::*dhS999#t,,c222
48C#5#566777 	$,,c222$++T222$,,c222$++S111$++R000$,,b111$,,b111$--r222$,,c222$--r222
48D##6#677888 	#s++R000#r**C000*dhS999#r**B///#r**B///#s++R000#s++R000*dhT:::#s++S111#t,,b111
48C#5#566777 	"c**B///"b))2..."c**B///"b))2..."b))2..."c**B///"c**B///"d++R000"c**B///"d++R000"c**B/// 	#r**B///$++R000#r**B///#s++R000$,,b111#s++R000 	*dhS999*dhd;;; 	#t,,b111#t,,b111#t,,c222#t,,c222$--s333$--s333$--r222$--r222 	#s++S111#s++S111#s++R000#s++R000$,,b111$,,b111$,,c222$,,c222 	

;s 3 3T:::

;s 3 3S999

;s 3 3T:::

;s 3 3S999

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

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

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

<$!5!5v>>>*dhd;;;*dhc:::::r   c                    |                      t          t          j                   |                     dt          j        d          t          j                   |                     dt          j        d          t          j        dz             |                     dt          j        d          t          j         dz             |                     d	t          j        d
          d
           d S )Nzradians(180)   zradians(90)r  rI   zradians(-45)ir   z
radians(0)r   )r   r   rU   radiansr}   r   rg   s    r   testRadianszMathTests.testRadians]  s    )T\222

>4<#4#4dg>>>

=$,r"2"2DGAI>>>

>4<#4#4twhqjAAA

<a!44444r   c                 f    ddl m  fd}g d}|D ]}                     |          5  |                                \  }}}t                              |          }t                              |          }t                              |          }	 ||||	           t          j        ||          }
                     |
	                                |		                                           d d d            n# 1 swxY w Y   t                              d          }t          dd          D ]k}|dk    r	||z  }t          d	          D ]M}||z  }t          j        ||          }
 ||||
           t          j        | |          }
 || ||
           Nlt          d
dddt          t          fD ]\}                     t          j        t          |                                          t          j        |t                               ]dD ]^}                     t          j        |t                    |                                t          j        |t                    |           _t          ddd
dt          fD ])}                     t                     5  t          j        t          |           d d d            n# 1 swxY w Y                        t                     5  t          j        t          |           d d d            n# 1 swxY w Y                        t                     5  t          j        |d
           d d d            n# 1 swxY w Y                        t                     5  t          j        |d           d d d            n# 1 swxY w Y   +d S )Nr   rm  c                    	  |            |           |          }}}                     t          |          t          |dz                       ||z
  |z  }                    |t          |                     t          |          t          |dz            k    r+                    |dz  t          |dz                       d S d S )NrI   )r  r'   r   rT   )	r   rf  rfxfyfrr   rn  rc   s	          r   validate_specz.MathTests.testRemainder.<locals>.validate_spech  s     "!hhqkk88A;;BB  R#bd))444bBAQA'''2ww#bd))##  1c!A#hh///// $#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-1074i   r   rQ   r   r   r   )r   r   rQ   r   r   )rz  rn  r  r:   r;   rK  rU   	remainderr   hexr    r   r   r   assertIsNaNr   r   )rc   r  	testcasesr  x_hexy_hexexpected_hexr   rf  r)   rQ  tinyr   mra   rn  s   `              @r   testRemainderzMathTests.testRemainderd  s   &&&&&&	0 	0 	0 	0 	0 	0 9
 9
 9
	v  
	? 
	?D4(( 	? 	?-1ZZ\\*ulMM%((MM%(( ==66aH---1--   x||~~>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? }}Y''sB 		- 		-AAvvDA3ZZ - -H1--aF+++A..qb!V,,,,- 3c4s; 	9 	9ET^C77888T^E3778888 , 	A 	AET^E377???T^E488%@@@@ D$S#6 	, 	,E"":.. + +sE***+ + + + + + + + + + + + + + +"":.. , ,tU+++, , , , , , , , , , , , , , ,"":.. + +uc***+ + + + + + + + + + + + + + +"":.. , ,ud+++, , , , , , , , , , , , , , ,	, 	,sZ   CC<<D 	D 	#K

K	K	/LL	L	;MM!	$M!	N$$N(	+N(	c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        t          j        dz            d           |                     dt          j        t          j         dz            d           	 |                     t          j        t          j        t                                         |                     t          j        t          j        t                                         nf# t          $ rY |                      t          t          j        t                     |                      t          t          j        t                     Y nw xY w|                     t          j        t          j        t                                         d S )Nzsin(0)r   z	sin(pi/2)rI   r   z
sin(-pi/2)r   )r   r   rU   r~  r}   r   r   rV   r   r   r   r   rg   s    r   testSinzMathTests.testSin  sW   )TX...

8TXa[[!,,,

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

<47(1*!5!5r:::	:OODJtx}}55666OODJtx~~667777 	: 	: 	:j$(C888j$(D99999	: 	
48C==1122222s   =A<D: :A FFc                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          dz  t          j        d          dz  z
  d           |                     dt          j        d          t          j        d          z   d           |                     t          j        t                    t                     |                     t          j        t                    t                     | 	                    t          j
        t          j        t                                         d S )Nzsinh(0)r   zsinh(1)**2-cosh(1)**2r   rI   r   zsinh(1)+sinh(-1))r   r   rU   sinhr}   r   r   r   r   r   rV   r   rg   s    r   testSinhzMathTests.testSinh  s    )TY///

9dillA...

*DIaLL!ODIaLL!O,KRPPP

%ty||DIbMM'A1EEE3---4$///
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d	           |                     d
t          j        d          d           |                     dt          j        d          d           |                     dt          j        d          d           |                     t          j        t                    t                     |                      t          t          j        d           |                      t          t          j        t                     | 	                    t          j
        t          j        t                                         d S )Nzsqrt(0)r   rQ   z	sqrt(2.5)g      @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   rU   r|  r}   r   r   r   r   r   rV   r   rg   s    r   testSqrtzMathTests.testSqrt  sl   )TY///

9dillA...

9dinnc222

;	#0BCCC

<4#666

=$)E"2"24EFFF

9dillA...

9dillA...3---*di444*di666
49S>>2233333r   c                    |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        t          j        dz            d           |                     dt          j        t          j         dz            d           	 |                     t          j        t          j        t                                         |                     t          j        t          j        t                                         n]#  |                      t          t          j        t                     |                      t          t          j        t                     Y nxY w|                     t          j        t          j        t                                         d S )Nztan(0)r   z	tan(pi/4)r   r   z
tan(-pi/4)r   )r   r   rU   tanr}   r   r   rV   r   r   r   r   rg   s    r   testTanzMathTests.testTan	  sC   )TX...

8TXa[[!,,,

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

<47(1*!5!5r:::	:OODJtx}}55666OODJtx~~667777	:j$(C888j$(D99999
48C==1122222s   =A<D: :AFc                 z   |                      t          t          j                   |                     dt          j        d          d           |                     dt          j        d          t          j        d          z   dt          j        d                     |                     dt          j        t                    d           |                     dt          j        t                    d           |                     t          j	        t          j        t                                         d S )	Nztanh(0)r   ztanh(1)+tanh(-1)r   r   r   z	tanh(inf)z
tanh(-inf))r   r   rU   tanhr}   r   r   r   r   rV   r   rg   s    r   testTanhzMathTests.testTanh  s    )TY///

9dillA...

%ty||DIbMM'A18A;; 	 	( 	( 	(

;	#222

<4"555
49S>>2233333r   c                     |                      t          j        d          d           |                      t          j        dt          j        d                    t          j        dd                     d S )Nr   r   )r   rU   r  r   rg   s    r   testTanhSignzMathTests.testTanhSign  si     	3---r49S>>::r3//	1 	1 	1 	1 	1r   c                    |                      t          j        d          d           |                      t          j        d          d           |                      t          t          j        d                    t                     |                      t          t          j        d                    t                     |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d	          d
            G d d          } G d dt
                    } G d d          }|                      t          j         |                      d           |                      t          j         |                      d           |                     t          t          j                   |                     t          t          j        dd           |                     t          t          j        t          d                     |                     t          t          j         |                       d S )Nr   r   r   r   g?gg!r   g-?Yic                       e Zd Zd ZdS )'MathTests.test_trunc.<locals>.TestTruncc                     dS N   rm   rg   s    r   	__trunc__z1MathTests.test_trunc.<locals>.TestTrunc.__trunc__3  r   r   Nrj   rk   rl   r(  rm   r   r   	TestTruncr$  2  r   r   r*  c                       e Zd Zd ZdS )(MathTests.test_trunc.<locals>.FloatTruncc                     dS r&  rm   rg   s    r   r(  z2MathTests.test_trunc.<locals>.FloatTrunc.__trunc__6  r   r   Nr)  rm   r   r   
FloatTruncr,  5  r   r   r.  c                       e Zd ZdS ))MathTests.test_trunc.<locals>.TestNoTruncNrq   rm   r   r   TestNoTruncr0  8  r   r   r1  r'  rI   g     7@)	r   rU   truncr   rT   r;   r   r   r]   )rc   r*  r.  r1  s       r   
test_trunczMathTests.test_trunc&  s   A***B,,,djmm,,c222djoo..444C!,,,D))2...H--q111I..333I..333H--t444	 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	IIKK00"555JJLL112666)TZ000)TZA666)TZ4AAA)TZ?????r   c                 v   |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                     t          j        t	          d                               |                     t          j        t	          d                               |                     t          j        t	          d                               d S )NrQ   r   r   r   r   r   r   )r   rU   isfiniteassertFalser;   rg   s    r   testIsfinitezMathTests.testIsfiniteC  s    c**+++d++,,,c**+++d++,,,uU||44555uU||44555uV}}5566666r   c                 H   |                      t          j        t          d                               |                      t          j        t          d                               |                      t          j        t          d          dz                       |                     t          j        t          d                               |                     t          j        d                     |                     t          j        d                     d S )Nr   z-nanr   rQ   r   )r   rU   rV   r;   r6  rg   s    r   	testIsnanzMathTests.testIsnanL  s    
5<<00111
5==11222
5<<"#455666E%LL11222B(((B(((((r   c                 v   |                      t          j        t          d                               |                      t          j        t          d                               |                      t          j        d                     |                      t          j        d                     |                     t          j        t          d                               |                     t          j        d                     |                     t          j        d                     d S )Nr   r   g      g      r   rQ   r   )r   rU   rW   r;   r6  rg   s    r   	testIsinfzMathTests.testIsinfT  s    
5<<00111
5==11222
5))***
6**+++E%LL11222B(((B(((((r   c                 h    |                      t          j        t          j                             d S r_   )r   rU   rV   r   rg   s    r   test_nan_constantzMathTests.test_nan_constant]  s&    
48,,-----r   c                 ^   |                      t          j        t          j                             |                     t          j        d           |                     t          j        t          d                     |                     t          j         t          d                     d S )NrQ   r   r   )r   rU   rW   r   assertGreaterr   r;   rg   s    r   test_inf_constantzMathTests.test_inf_constanta  s|    
48,,---48S)))5<<000$(E&MM22222r   zrequires verbose modec                    	 t          j        d          }n#  |                     d           Y nxY w|dk    r|                     d           	 t          j        d          }|                     d           n# t          $ r Y nw xY w	 t          j        d          }|                     d           d S # t
          $ r Y d S w xY w)	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)rU   rE   r{   r   r|  r   rc   r   s     r   test_exceptionszMathTests.test_exceptionsm  s   	(%%AA	( II ' ( ( ( ( (66IIABBB	H$$A IIFGGGG  	 	 	D		:	$A II899999  	 	 	DD	s,    0A9 9
BB
B5 5
CCc                    dh}d }t           j        dk    r`t          j                    d         }	 t          t	          t
          |                    d                              }n# t          $ r Y nw xY wd}g }t          t                    D ]\  }}}}	}
}}|	dk    s|dk    r|dv r||dk     r||v r)t          t          |          }d	|v sd
|v rd}
nd|v rd}
	  ||          }n# t          $ r d}Y nt          $ r d}Y nw xY wd\  }}t          |
|||          }||                    ||||          }|                    |           |r-|                     dd                    |          z              d S d S )Ntan0064darwinr   .{}: {}({!r}): {}rQ   )rectpolar)r   rP   invaliddivide-by-zeror   overflowr   rP   rQ   zFailures in test_testfile:
  
  )rI  platformmac_verr  r  rT   r:   r   rO   	test_filegetattrrU   r   r[   r(   rL  r{   join)rc   SKIP_ON_TIGERosx_versionversion_txtrY   failuresrA   rB   araiereirF   funcr  r+   r,   rX   msgs                      r   test_testfilezMathTests.test_testfile  s    #<8##"*,,Q/K#C[->->s-C-C$D$DEE    &-;I-F-F "	! "	!)BBBESyyB#II&&&&;+@+@&&4$$DE!!%5%>%>!u$$$)b & & &%  ) ) )()  &GW"2vw@@G//"b"g66COOC     	-II6kk(++, - - - - -	- 	-s)   5A& &
A32A3C**D8DDc                 <   d}g }t          t                    D ]\  }}}}}t          t          |          }d|v sd|v rd}nd|v rd}	  ||          }	n# t          $ r d}	Y nt
          $ r d}	Y nw xY wd\  }
}|dk    rd	}
n)|d
k    rd}n |dk    r|dk    r|dk     rd}
n|dk     rd}
nd}
t          ||	|
|          }||                    ||||          }|                    |           |r-| 	                    dd
                    |          z              d S d S )NrH  rK  rL  r   rM  r   rN  r}  r  lgammagV瞯<erfcrQ   r   r         $@r   r   zFailures in test_mtestfile:
  rO  )rG   math_testcasesrS  rU   r   r   r[   r(   rL  r{   rT  )rc   rY   rX  rA   rB   rC   r)   rF   r]  r*   r+   r,   rX   r^  s                 r   test_mtestfilezMathTests.test_mtestfile  s   %,;N,K,K 8	! 8	!(BC54$$DE!!%5%>%>'u$$*&d3ii # # #"  & & &%&  &GW W}} x
  v#** 99 GG4ZZ!GG"G"8S'7CCG//"b#w77COOC     	-II7kk(++, - - - - -	- 	-s   AA0"A0/A0c                 H   t           j        }|                      |g           d           |                      |g d          d           |                      |t          t	          dd                              d           |                      |t          t          t	          dd                                        d           |                      |t	          dd          d          d           |                      |g d	          d
           |                      |g d          d           |                      |g d          d           |                      |g d          d           |                      |g d          d           |                      |g d          t          d                     |                     t          |           |                     t          |d           |                     t          |g d           |                     t          |g dd           |                     t          |ddgd           t          d          t          d          g}|                     t          ||t          d                     |                     t          |dgdgdgg           |                     t          |ddig           |                     t          |ddigdz  ddi           |                     t          |dgdgdggg            |                      |ddgd          d           |                      |ddgddg          g d           |                      |g ddi          ddi           |                     t                    5   |ddgd           d d d            n# 1 swxY w Y   |                      |g d          d           |                      |g d           d           |                      |g d!          d           d5d"}t	          dd#          }|                      ||           ||                     t	          d$d%          }|                      ||           ||                     t	          d&d'          }|                      ||          d           d( t	          dd'          D             }|                      ||           ||                     d) t	          d&d%          D             }|                      ||           ||                     d* t	          d&d'          D             }| 
                     ||                     | 
                     |dddt          d+          ddg                     | 
                     |ddt          d+          ddg                     | 
                     |dt          d+          ddg                     | 
                     |dt          d,          t          d+          dg                     | 
                     |dt          d-          t          d+          dg                     | 
                     |dt          d+          t          d,          dg                     | 
                     |dt          d+          t          d-          dg                     |                      |dddt          d,          d.d/g          t          d-                     |                      |dddt          d-          d.d/g          t          d,                     | 
                     |dddt          d,          d.d/g                     | 
                     |dddt          d-          d.d/g                     | 
                     |dddt          d,          d.ddg                     | 
                     |dddt          d-          d.ddg                     |                     t           |g d0                    t                     |                     t           |g d1                    t                     |                     t           |t	          dd#                              t                     |                     t           |t	          dd#          d2                    t                     |                     t           |dt          j        d3          dd/dd4g                    t          j                   d S )6Nr   rP   )r   rI   r   i  r   i _7 )r   rI   r   r   rP   rY  )r   r   r   r   r   rc  )r   rI   r   r   r   )r   r   r   r   rP   )r   r           r   r   rg  )r   r   rg  r   r   r   )rh  ri  rg      a   cr      br   ababababababab)r   rI   r   rI   r   rI   r   rI   r   rI   r   rI   r  )r   r   rI   r   r   )r   r   rI   r   )r   rI   r   r   c                     | D ]}||z  }|S r_   rm   )r+  r   elems      r   _naive_prodz(MathTests.test_prod.<locals>._naive_prod3  s!       Lr   i'  ir   ir   c                 ,    g | ]}t          |          S rm   r  r9  r   s     r   r:  z'MathTests.test_prod.<locals>.<listcomp>C  s    555E!HH555r   c                 ,    g | ]}t          |          S rm   r  rr  s     r   r:  z'MathTests.test_prod.<locals>.<listcomp>E  s    777E!HH777r   c                 ,    g | ]}t          |          S rm   r  rr  s     r   r:  z'MathTests.test_prod.<locals>.<listcomp>G  r  r   r   r   r   r   r   )r   rI   r   r   rP   rb  )r   r   r   r   rP   rb  r   r   rb  rB  )rU   prodr   r  r    r  r;   r   r   	bytearrayr  r   rT   r   r   )rc   ru  r  rp  r+  s        r   	test_prodzMathTests.test_prod	  s	   yb1%%%b***A...d51::..//666d4a

#3#34455t<<<eArll"555w???ooo..44477788%@@@11122E:::33344e<<< 	11122E:::55566eEEE)T***)T2...)T???;;;)T???"EEE)TD$<sCCCD//9T??3)T63HHH)TQC!qc?;;;)TQqE7333)TQqE719QqEBBB)TQC!qc?"EEE 	q!fD111>BBBq!fQF3335Y5Y5YZZZbA///!A777y)) 	 	D"b1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	lll++Q///lll++Q///lll++Q///	 	 	 	 E??hX)>)>???$$hX)>)>???%%h+++ 65eAtnn555hX)>)>???77eE2&6&6777hX)>)>???99eE4&8&8999h((( 	q!Qea;<<===q!U5\\1a899:::q%,,1566777q%,,eQ?@@AAAq%--ua@AABBBq%,,eQ?@@AAAq%,,fa@AABBBq!QeR:;;U6]]KKKq!Qfb;<<eEllKKKq1U5\\2q9::;;;q1U6]]B:;;<<<q!Qeb!Q?@@AAAq!Qfr1a@AABBB 	dd#5#5#56677===dd#7#7#788995AAAdd5E??3344c:::dd5E??#>>>??GGGddAws';';Q1a#HIIJJ 	* 	* 	* 	* 	*s   OO!$O!c                    t           j        }t           j        }t          d          D ]y}|dk     rt          |dz             n#|dk     rt          d          nt          d          D ]:}|                      |||           ||           |||z
            z             ;zt          dd          D ]X}t          d|          D ]E}|                      |||           ||dz
  |dz
            |z   ||dz
  |          z              FYt          dd          D ]k}|                      ||d          d           |                      ||d          |           |                      |||           ||                     lt          d          D ]S}|                      ||           ||                     |                      ||d            ||                     T|                     t          |dd	           |                     t          |dt          j        d	                     |                     t          |dd
           |                     t          |dd           |                     t          |t          j        d          d           |                     t          |dd           |                     t          |           |                     t          |ddd           |                     t          |           |                     t          |dd           |                     t          |ddz   d           |                     t          |dd           |                     t          |dddz              |                      |dd          d           |                      |dddz            d           ddz  }|                      ||d          d           |                      ||d          |           |                      ||d          ||dz
  z             t          j        d          r|                     t          |||           dD ]W\  }}|                      |||          d           |                     t           |||                    t                     X|                      |t!          d          t!          d                    d           |                      |t#          d          t#          d                    d           t          d          D ]}|                     t           |t!          d          t!          |                              t                     |                     t           |t#          d          t#          |                              t                     d S )Nr  r   r   rH  r  r   r   r  r   1rc  10r   r   rI   r   Tcpython)TT)TF)FFrP   )rU   permr   r    r   r   r   r   r   r   r   check_impl_detailr   r  r   rT   rp   rs   )rc   r~  r   r   r  s        r   testPermzMathTests.testPerme  s   yN	s 	C 	CA&'#ggeAElllC5999USUYY C C  a!*11q51A1A!AC C C CC
 q# 	V 	VA1a[[ V V  aTT!a%Q-?-?!-Cdd1q5RSnn-TUUUUV q# 	7 	7ATT!QZZ+++TT!QZZ+++TT!QZZ16666 r 	: 	:ATT!WWiill333TT!T]]IIaLL9999 	)T2s333)T2ws/C/CDDD)T2s333)T4333)T7?4+@+@!DDD)T4333)T***)T2q!444)T*** 	*dB222*dQWHa888*dAr222*dA4x888 	aQ'''aD))1---tGaQ'''aQ'''aQ!A#Y///$T222 	9mT1a888? 	1 	1DAqTT!QZZ+++MM$ttAqzz**C0000k!nnk!nn==rBBBk!nnk!nn==rBBBq 	K 	KAMM$ttKNNKNNCCDDcJJJMM$ttKNNKNNCCDDcJJJJ	K 	Kr   c                    t           j        }t           j        }t          d          D ]}|dk     rt          |dz             n#|dk     rt          d          nt          d          D ]F}|                      |||           ||           ||           |||z
            z  z             Gt          dd          D ]U}t          d|          D ]B}|                      |||           ||dz
  |dz
             ||dz
  |          z              CVt          d          D ]B}|                      ||d          d           |                      |||          d           Ct          dd          D ]E}|                      ||d          |           |                      |||dz
            |           Ft          d          D ]D}t          |dz            D ]/}|                      |||           ||||z
                       0E|                     t          |dd	           |                     t          |dt          j        d	                     |                     t          |dd
           |                     t          |dd           |                     t          |t          j        d          d           |                     t          |dd           |                     t          |d           |                     t          |ddd           |                     t          |           |                     t          |dd           |                     t          |ddz   d           |                     t          |dd           |                     t          |dddz              |                      |dd          d           |                      |dddz            d           ddz  }|                      ||d          d           |                      ||d          |           |                      ||d          ||dz
  z  dz             |                      |||          d           |                      |||dz
            |           |                      |||dz
            ||dz
  z  dz             t          j        d          r |                     t          |||dz             dD ]W\  }}|                      |||          d           |                     t           |||                    t                     X|                      |t!          d          t!          d                    d           |                      |t#          d          t#          d                    d           t          d          D ]}|                     t           |t!          d          t!          |                              t                     |                     t           |t#          d          t#          |                              t                     d S )Nr  r   r   rH  r  r   r   rI   r   ry  rc  rz  r   r   r   Tr{  r}  rP   )rU   combr   r    r   r   r   r   r   r   r   r  r   r  r   rT   rp   rs   )rc   r  r   r   r  s        r   testCombzMathTests.testComb  s}   yN	s 	: 	:A&'#ggeAElllC5999USUYY : :  aYYq\\!	!yyQ'7'77.9 : : : ::
 q# 	R 	RA1a[[ R R  aTT!a%Q-?-?$$q1ua..-PQQQQR s 	, 	,ATT!QZZ+++TT!QZZ++++q# 	0 	0ATT!QZZ+++TT!QU^^Q//// s 	= 	=A16]] = =  aTT!QU^^<<<<=
 	)T2s333)T2ws/C/CDDD)T2s333)T4333)T7?4+@+@!DDD)T4333)T2...)T2q!444)T*** 	*dB222*dQWHa888*dAr222*dA4x888 	aQ'''aD))1---tGaQ'''aQ'''aQ!A#Y!^444aQ'''a1q)))a1qAaCyA~666$T222 	<mT1ad;;;? 	1 	1DAqTT!QZZ+++MM$ttAqzz**C0000k!nnk!nn==rBBBk!nnk!nn==rBBBq 	K 	KAMM$ttKNNKNNCCDDcJJJMM$ttKNNKNNCCDDcJJJJ	K 	Kr   c                 F	   |                      t          j        dt                     d           |                      t          j        dt                    d           |                      t          j        dd          d           |                      t          j        dd          d           |                      t          j        d	t                     t                              d
                     |                      t          j        d	t                    t                              d                     |                      t          j        dd          d           |                     t          j        dd          d           |                     t          j        dd          d           t          j        j	        t          j        j
        z  }|                      t          j        dt                    |           |                      t          j        dt                    |           |                      t          j        dt                     |            |                      t          j        dt                     |            |                     t          j        |d          d           |                     t          j        | d          d           |                     t          j        |d          d           |                     t          j        | d          d           t          j        j        }|                      t          j        t          d          |           |                      t          j        t           d          |            |                      t          j        |t                    t                     |                      t          j        | t                     t                      |                     t          j        t          d	                     |                     t          j        d	t                               |                     t          j        t          t                               d S )Ng      0Cg/Cg     0Cg      CrQ   gCg      gr   z0x1.fffffffffffffp-1z0x1.0000000000001p+0r   r   )r   rU   	nextafterr   r;   rK  assertEqualSignrI  r$  minepsilonr'  r  r   )rc   smallest_subnormallargest_normals      r   test_nextafterzMathTests.test_nextafter  s    	(:SDAA+	- 	- 	-(:C@@+	- 	- 	-(=sCC.	0 	0 	0(>DD/	1 	1 	1 	cT22'=>>	@ 	@ 	@S11'=>>	@ 	@ 	@ 	S113777T^D$77>>>T^D$77>>> !^/#.2HHc224FGGGc224FGGGsd336H5HIIIsd336H5HIIIT^,>EEtLLLT^-?,?FFMMMT^,>EEtLLLT^-?,?FFMMM +S11>BBBc22^ODDD<<cBBB#>>EEE 	S11222S11222S1122222r   c                 R   |                      t          j        d          t          j        j                   |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          t          j        j        t          j        j        z             |                      t          j        t                    t          t          j        t          t                     z
             |                      t          j        t                    t                     | 
                    t          j        t          j                             ddddt          fD ]k}|                     |          5  |                      t          j        |           t          j        |                     d d d            n# 1 swxY w Y   ld S )	Nr   l          l          r   l            g      @rQ   rv  )r   rU   r   rI  r$  r  r  r  r  r   r  r   r  rB  s     r   test_ulpzMathTests.test_ulp  s   #(>???'**C000'**C000'**F333 	#+cn.DD	F 	F 	F),,"T^It%D%DD	F 	F 	F 	#,,,$(++,,, sGWc2 	< 	<A"" < <  1"tx{{;;;< < < < < < < < < < < < < < <	< 	<s   <HH	"H	c                 D    G d d          }t           j        t           j        t           j        fD ]n} |            }|                     t
                    5   |d|           d d d            n# 1 swxY w Y   |                     t          |dd                     od S )Nc                       e Zd Zd ZdS )$MathTests.test_issue39871.<locals>.Fc                     d| _         ddz   d S )NTr   r   )	convertedrg   s    r   rh   z.MathTests.test_issue39871.<locals>.F.__float__4  s    !%!r   N)rj   rk   rl   rh   rm   r   r   r  r  3  s#            r   r  znot a numberr  F)rU   r   r   r	  r   r   r6  rS  )rc   r  r]  rf  s       r   test_issue39871zMathTests.test_issue398710  s    	 	 	 	 	 	 	 	 Jt~= 	= 	=DA""9-- ( (^Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 WQU;;<<<<	= 	=s   A00A4	7A4	c                     t          j        |          s*|                     d                    |                     d S d S )NzExpected a NaN, got {!r}.)rU   rV   r{   r(   rb   s     r   r  zMathTests.assertIsNaNB  sH    z%   	AII188??@@@@@	A 	Ar   c                     	 |                      ||           |                      t          j        d|          t          j        d|                     d S )Nr   )r   rU   r   )rc   r   rf  s      r   r  zMathTests.assertEqualSignF  sS    	 	AsA..c10E0EFFFFFr   NrN  )Prj   rk   rl   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipIfrI  rP  machiner   r   r   r   r   r   r   r   cpython_onlyr   r  r  r"  HAVE_DOUBLE_ROUNDINGrU  rj  r  r  r  r  r  r  r  r  r  r  requires_mac_verr  r  r  r  r  r  r  r  r  r  r  r!  r3  r7  r9  r;  r=  r@  
skipUnlessr   rC  r_  re  rw  r  r  r  r  r  r  r  rm   r   r   ry   ry      s       6 6 6 6. . .	4 	4 	45 5 5	4 	4 	45 5 54 4 4	5 	5 	5;: ;: ;:z4 4 4 6 6 6B : : :B3 3 3 X_S\W,W1A1A1C1CGW1W[] ]4 4] ]45 5 5< < <	= 	= 	=/ / /@ @ @: : : < < <7 7 7>4 4 4,8 8 8$ X_)MO O\: \:O O \:|(E (E (ETID ID IDV X_)NP P:1 :1P P :1xo7 o7 o7b) ) )
3& 3& 3&j*F *F *FX< < <@3 3 3 / / / 4 4 4" Wb!$$+ + %$ +
5 
5 
51 1 1&G; G; G;j5 5 5 ~, ~, ~,@3 3 34 4 44 4 43 3 34 4 4 1 1 1@ @ @:7 7 7) ) )) ) ) . . . 3 3 3 X"9::: : ;::> 6- 6- 6-p @- @- @-DZ* Z* Z*x>K >K >K@DK DK DKL +3 +3 +3Z < < <,= = =$A A AG G G G Gr   ry   c                   v    e Zd Zej        Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )IsCloseTestsc                 `    |                       | j        ||g|R i ||d|d           d S )N and z should be close!r^  )r   r  rc   rh  ri  r   kwargss        r   assertIsClosezIsCloseTests.assertIsCloseR  s\    Q;D;;;F;;<=AAqqqA 	 	C 	C 	C 	C 	Cr   c                 `    |                       | j        ||g|R i ||d|d           d S )Nr  z should not be close!r  )r6  r  r  s        r   assertIsNotClosezIsCloseTests.assertIsNotCloseV  s^    a<T<<<V<<ABAAAF 	 	H 	H 	H 	H 	Hr   c                 :    |D ]\  }} | j         ||g|R i | d S r_   )r  rc   examplesr   r  rh  ri  s         r   assertAllClosezIsCloseTests.assertAllCloseZ  sG     	6 	6DAqDq!5d555f5555	6 	6r   c                 :    |D ]\  }} | j         ||g|R i | d S r_   )r  r  s         r   assertAllNotClosezIsCloseTests.assertAllNotClose^  sG     	9 	9DAq!D!!Q88888888	9 	9r   c                 2   |                      t                    5  |                     ddd           d d d            n# 1 swxY w Y   |                      t                    5  |                     dddd           d d d            d S # 1 swxY w Y   d S )Nr   g0.+rel_tolr3  g    _©r  r,   )r   r   r  rg   s    r   test_negative_tolerancesz%IsCloseTests.test_negative_tolerancesb  s/   z** 	6 	6q!W555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6z** 	D 	Dq!VUCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds#   A  AA%BBBc                 >    g d}|                      |dd           d S )N))r   r   )N@ir  );r  )i90  g    @)rQ   r   )NF r  rQ   r  r  )rc   identical_exampless     r   test_identicalzIsCloseTests.test_identicali  s8    0 0 0 	.SIIIIIr   c                 j    g d}|                      |d           |                     |d           d S )N))g    חAg   חA)g:0yEgnyE)g	ѭ?gfNӭ?:0yE>r  &.>r  r  )rc   eight_decimal_places_exampless     r   test_eight_decimal_placesz&IsCloseTests.test_eight_decimal_placess  sS    )C )C )C% 	94HHH<dKKKKKr   c                 j    g d}|                      |d           |                     |d           d S )N))r  rQ   )g&.rQ   )gu?j/ʠrQ   r  r  r  r   )r  r  )rc   near_zero_exampless     r   test_near_zerozIsCloseTests.test_near_zero{  sP    . . . 	13???.=====r   c                    |                      t          t                     |                      t          t          d           |                      t          t                     |                      t          t          d           d S )NrQ   r   )r  r   r   rg   s    r   test_identical_infinitez$IsCloseTests.test_identical_infinite  sj    3$$$3S1114&&&4s33333r   c                     t           t           ft           dfdt           ft          t           ft           t          ft          t          ft          dfdt          ft          dfdt          fg
}|                     |d           d S )Nr3  r   gg?r   )r   r   r   r  )rc   not_close_exampless     r   test_inf_ninf_nanzIsCloseTests.test_inf_ninf_nan  ss    "Cj"Fm%sm"Cj"Cj"Dk"Cj"Cj"El$cl	, 	1;LMMMMMr   c                 r    g d}|                      |d           g d}|                     |d           d S )N))r   r   )333333r  )Ynr  rQ   r  ))r   g     ?)g?r   )gZbtigTbtir  )rc   zero_tolerance_close_examples!zero_tolerance_not_close_exampless      r   test_zero_tolerancez IsCloseTests.test_zero_tolerance  sg    )= )= )=% 	93GGG-N -N -N) 	@#NNNNNr   c                 8    |                      ddgd           d S )N)r  r   )r   r  r  r  r  rg   s    r   test_asymmetryzIsCloseTests.test_asymmetry  s&    Wg.<<<<<r   c                 j    ddg}|                      |d           |                     |d           d S )N) )i[i[r  r  r  r  )rc   integer_exampless     r   test_integerszIsCloseTests.test_integers  sL    224 	,d;;;/>>>>>r   c                    ddl m}  |d           |d          f |d           |d          f |d           |d          f |d	           |d
          fg}|                     |d           |                     |d           d S )Nr   rl  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_decimalszIsCloseTests.test_decimals  s    ######$W\22GGENNC$W%566	8J8JK$W%6779L9LM$W_55wwx7H7HIK 	,d;;;/>>>>>r   c                     ddl m}  |dd          dz    |d          f |d           |d          f |dd           |dd          fg}|                     |d	           |                     |d
	           d S )Nr   rm  r   r  r  l       	(qe	 r  r  r  r  )rz  rn  r  r  )rc   rn  fraction_exampless      r   test_fractionszIsCloseTests.test_fractions  s    &&&&&& Xa##a'!5Xi  ((9"5"56Xi((((1f*=*=>@ 	-t<<<0$?????r   N)rj   rk   rl   rU   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   r   r   r  r  O  s       lGC C CH H H6 6 69 9 9D D DJ J JL L L> > >4 4 4N N N
O 
O 
O= = =? ? ?	? 	? 	?	@ 	@ 	@ 	@ 	@r   r  c                 N    ddl m} |                     |d                     |S )Nr   )DocFileSuitezieee754.txt)doctestr  addTest)loadertestspatternr  s       r   
load_testsr    s5    $$$$$$	MM,,}--...Lr   rN  )8test.supportr   r   testr   r  r  r   rU   osrP  rD  r   rI  r   r;   r   r   r   r$  r'  r  r  r  r   rf  r  rj   argvfile__file__pathdirnamecurdirtest_dirrT  rd  rR  r   r   r   r%   r0   rG   rO   r[   r]   rT   rp   r  rs   TestCasery   r  r  mainrm   r   r   <module>r     s   4 3 3 3 3 3 3 3              				    



 eElleElluV}}N	N	 1A)  z8A;DDD7??4  -BIh(<==GLL#899	  L5 5 5H H H	, 	, 	,B B B$: : :4  0+ + + +Z       	 	 	 	 	# 	 	 	    &   _G _G _G _G _G! _G _G _GD;x@ x@ x@ x@ x@8$ x@ x@ x@v  
 zHMOOOOO r   