
    5\h}                       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          Z3 G d d ej4                  Z5 G d! d"ej4                  Z6d# Z7ed
k    r ej8                     dS dS )%    )verboserequires_IEEE_754)supportNgh㈵>naninf-inf) 7yACg):@g7yAC__main__zmath_testcases.txtzcmath_testcases.txtc                 z    t          j        dt          j        d|                     d         }|dk     r|dz    }|S )a  Convert a non-NaN float x to an integer, in such a way that
    adjacent floats are converted to adjacent integers.  Then
    abs(ulps(x) - ulps(y)) gives the difference in ulps between two
    floats.

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

    Note: 0.0 and -0.0 are converted to 0 and -1, respectively.
    z<qz<dr   l            )structunpackpack)xns     8/opt/python-3.11.14/usr/lib/python3.11/test/test_math.pyto_ulpsr   '   s?     	dFKa0011!4A1uugJH    c                 :    | rdt          | | dz
  z            z   ndS )zANumber of '1' bits in binary expansion of a nonnnegative integer.   r   )count_set_bits)r   s    r   r   r   M   s'    ,-41~a!a%i((((14r   c                 |    || z
  dz	  }|sdS |dk    r| S | |z   dz  }t          | |          t          ||          z  S )zProduct of integers in range(start, stop, 2), computed recursively.
    start and stop should both be odd, with start <= stop.

    r   )partial_product)startstop
numfactorsmids       r   r   r   Q   s\    
 ,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 )zFactorial of nonnegative integer n, via "Binary Split Factorial Formula"
    described at http://www.luschny.de/math/factorial/binarysplitfact.html

    r   )reversedrange
bit_lengthr   r   )r   innerouteris       r   py_factorialr$   _   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 )zGiven finite floats `expected` and `got`, check that they're
    approximately equal to within the given number of ulps or the
    given absolute tolerance, whichever is bigger.

    Returns None on success and an error message on failure.
    NzAerror = {:.3g} ({:d} ulps); permitted error = {:.3g} or {:d} ulps)absr   format)expectedgotulp_tolabs_tol	ulp_error	abs_errorfmts          r   ulp_abs_checkr/   j   sp     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 )zParse a file with test values

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

    utf-8encoding--N->r   r   )openindexstripsplitfloat)fnamefplinelhsrhsidfnarg
rhs_piecesexpflagss              r   parse_mtestfilerF   |   s9      
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 )	zParse a file with test values

    Empty lines or lines starting with -- are ignored
    yields id, fn, arg_real, arg_imag, exp_real, exp_imag
    r1   r2   r4   r5   r   r      N)r6   
startswithr8   r9   r:   )r;   r<   r=   r>   r?   r@   rA   arg_realarg_imagrC   exp_realexp_imagrE   s                r   parse_testfilerN      sO      
eg	&	&	& " 	 	Dt$$ DJJLL zz$''HC),&BHhJ!+A
1hHqrrNEr??E(OO??E(OO    	                 s   CC00C47C4           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 )a  Compare arguments expected and got, as floats, if either
    is a float, using a tolerance expressed in multiples of
    ulp(expected) or absolutely (if given and greater).

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

    Returns None on success and an error message on failure.
    Nz	not equalzexpected {!r}, got {!r}z ({}))
isinstancer:   intmathisnanisinfr/   r'   )r(   r)   r*   r+   failurefail_fmtfail_msgs          r   result_checkrZ      sA    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selfr`   s     r   __init__zFloatLike.__init__       


r   c                     | j         S r^   r_   rb   s    r   	__float__zFloatLike.__float__   
    zr   N)__name__
__module____qualname__rc   rg    r   r   r\   r\      2              r   r\   c                       e Zd ZdS )IntSubclassNri   rj   rk   rl   r   r   ro   ro      s        Dr   ro   c                       e Zd Zd Zd ZdS )MyIndexablec                     || _         d S r^   r_   ra   s     r   rc   zMyIndexable.__init__   rd   r   c                     | j         S r^   r_   rf   s    r   	__index__zMyIndexable.__index__   rh   r   Nri   rj   rk   rc   ru   rl   r   r   rr   rr      rm   r   rr   c                       e Zd ZddZdS )BadDescrNc                     t           r^   )
ValueError)rb   objobjtypes      r   __get__zBadDescr.__get__   s    r   r^   )ri   rj   rk   r}   rl   r   r   rx   rx      s(             r   rx   c                      e Zd ZdMd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 ZOdK ZPdLS )N	MathTestsrO   rP   c                     t          ||||          }|+|                     d                    ||                     dS dS )aa  Compare arguments expected and got, as floats, if either
        is a float, using a tolerance expressed in multiples of
        ulp(expected) or absolutely, whichever is greater.

        As a convenience, when neither argument is a float, and for
        non-finite floats, exact equality is demanded. Also, nan==nan
        in this function.
        Nz{}: {})rZ   failr'   )rb   namer)   r(   r*   r+   rW   s          r   ftestzMathTests.ftest   sK     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
@rH   )r   rT   r   r   assertEqualtaurf   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   rH   zacos(1)r   )assertRaises	TypeErrorrT   acosr   r   rz   INFNINFeps
assertTruerU   NANrf   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)rH   g5qB?r   )r   r   rT   acoshr   rz   r   r   r   r   rU   r   rf   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   rH   zasin(0)r   zasin(1)r   )r   r   rT   asinr   r   rz   r   r   r   r   rU   r   rf   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   rT   asinhr   r   r   r   r   rU   r   rf   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)rH   z
atan(-inf))r   r   rT   atanr   r   r   r   r   rU   r   rf   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   rT   r   r   atanhrz   r   r   r   rU   r   rf   s    r   	testAtanhzMathTests.testAtanh8  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                 0   |                      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d          dt          j        z  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   rH   zatan2(-1, 1)r   r   zatan2(0, 1)zatan2(1, 1)zatan2(1, 0)zatan2(1, -1)   zatan2(0., -inf)rP   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   rT   atan2r   r   r   r   r   r   rU   r   rf   s    r   	testAtan2zMathTests.testAtan2C  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>>>

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

$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)   rH   z	cbrt(0.0)rP   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   rT   cbrtr   r   r   r   r   rU   r   rf   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          } G d d          }|                     t          j         |                      d           |                     t          j         |                      d           |                     t          j        t          d                    d           |                      t          t          j         |                       |                      t          t          j         |                        |            }d |_
        |                      t          t          j        |           |                      t          t          j        |d           |                     t          j        t          d                    d           |                     t          j        t          d                    d           d S )Nr   r         ?      ?rH   r   r         r         rP   r   c                       e Zd Zd ZdS )$MathTests.testCeil.<locals>.TestCeilc                     dS N*   rl   rf   s    r   __ceil__z-MathTests.testCeil.<locals>.TestCeil.__ceil__      rr   Nri   rj   rk   r   rl   r   r   TestCeilr     #            r   r   c                       e Zd Zd ZdS )%MathTests.testCeil.<locals>.FloatCeilc                     dS r   rl   rf   s    r   r   z.MathTests.testCeil.<locals>.FloatCeil.__ceil__  r   r   Nr   rl   r   r   	FloatCeilr     r   r   r   c                       e Zd ZdS )&MathTests.testCeil.<locals>.TestNoCeilNrp   rl   r   r   
TestNoCeilr             Dr   r   c                   "    e Zd Z e            ZdS )'MathTests.testCeil.<locals>.TestBadCeilN)ri   rj   rk   rx   r   rl   r   r   TestBadCeilr     s        xzzHHHr   r   r   g     @E@+   c                      | S r^   rl   argss    r   <lambda>z$MathTests.testCeil.<locals>.<lambda>  s    4 r   )r   r   rT   ceilr   rS   typer:   r\   rz   r   )rb   r   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

===*di???JLL''
)TY222)TY15559T??33T:::9T??33T:::::r   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   rP   ir   r         @      @r                @)r   rT   copysignr   r   r   r   r   rU   r   rV   r&   rf   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)rH   r   r   r+   zcos(0)z	cos(pi/2)zcos(pi)r   )r   r   rT   cosr   r   ulpr   rU   r   r   rz   r   rf   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)**2rH   r   )r   r   rT   coshr   r   r   r   r   rU   r   rf   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)rH   g     V@zdegrees(-pi/4)r   g     Fz
degrees(0)r   )r   r   rT   degreesr   r   rf   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)rP   @B )r   r   rT   rD   r   r   r   r   r   r   rU   r   OverflowErrorrf   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)rH   z	exp2(2.3)r   g){Ĳ@rP   r   )r   r   rT   exp2r   r   r   r   r   rU   r   r   rf   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   rT   fabsr   rf   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   rT   	factorialr   r$   r   rz   )rb   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   rT   r   decimalDecimalrf   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   rT   r   r   rf   s    r   testFactorialHugeInputsz!MathTests.testFactorialHugeInputs(  sB     	-SAAA)T^U;;;;;r   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
            G d d          } G d dt                    } G d d          } G d d          }|                     t          j         |                      d           |                     t          j         |                      d           |                     t          j        t          d                    d           |                      t          t          j         |                       |                      t          t          j         |                        |            }d |_
        |                      t          t          j        |           |                      t          t          j        |d           |                     t          j        t          d                    d           |                     t          j        t          d                    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   rl   rf   s    r   	__floor__z0MathTests.testFloor.<locals>.TestFloor.__floor__=  r   r   Nri   rj   rk   r  rl   r   r   	TestFloorr
  <  r   r   r  c                       e Zd Zd ZdS )'MathTests.testFloor.<locals>.FloatFloorc                     dS r   rl   rf   s    r   r  z1MathTests.testFloor.<locals>.FloatFloor.__floor__@  r   r   Nr  rl   r   r   
FloatFloorr  ?  r   r   r  c                       e Zd ZdS )(MathTests.testFloor.<locals>.TestNoFloorNrp   rl   r   r   TestNoFloorr  B  r   r   r  c                   "    e Zd Z e            ZdS ))MathTests.testFloor.<locals>.TestBadFloorN)ri   rj   rk   rx   r  rl   r   r   TestBadFloorr  D           

IIIr   r  r   g33333D@)   c                      | S r^   rl   r   s    r   r   z%MathTests.testFloor.<locals>.<lambda>M  s    D r   )r   r   rT   floorr   rS   r   r:   r\   rz   r  )rb   r  r  r  r  r   s         r   	testFloorzMathTests.testFloor/  s   )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???*dj,,..AAAKMM(()TZ333)TZA666IdOO44d;;;IdOO44d;;;;;r   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           |                      t          t          j        t          t                     d S )Nzfmod(10, 1)r   r   rP   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   rT   fmodr   r   rU   r   rz   r   r   r   rf   s    r   testFmodzMathTests.testFmodT  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*dic:::::r   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(   mantrD   emanteexprb   s          r   	testfrexpz&MathTests.testFrexp.<locals>.testfrexpn  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)rH   )r   rH   )
r   r   rT   frexpr   r   r   r   rU   r   )rb   r+  s   ` r   	testFrexpzMathTests.testFrexpk  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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
        |                     |                     t          j
        d)t          j        g          t          j                   |                     t          j        t          j
        t          j        d)g                               |                     t          j
        d*t-          d)          d+dd,t-          d-          d.g          d           |                     t          t          j
        d/d/g           |                     t          t          j
        t          j        t          j         g           |                     t0          t          j
        d0g           |                     t0          t          j
        d           |                     t          t          j
        d&d!z  g           d1 }|                     t2          t          j
         |                       d S )2Nr   )
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 )zFull precision summation.  Compute sum(iterable) without any
            intermediate accumulation of error.  Based on the 'lsum' function
            at http://code.activestate.com/recipes/393090/

            r,  rH   r   r   r   )	rT   r-  rS   ldexpmaxlenbinr&   bool)
iterabletmanttexpr   r(  rD   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   rP   )r  r   r   0.++d~QJr   d~Qr?  )r  r   r   r?  r@  r   rA  )      @Cr   g      g?C)rB  r         9g     @C)g     @Cr   rC  g     @C)g?Cr   g      <g?Cc                     g | ]}d |z  S r   rl   .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   rl   rF  s     r   rH  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   rl   rF  s     r   rH  z&MathTests.testFsum.<locals>.<listcomp>  s6    LLL!b!eb1R4j 2":-LLLr   i  rH   g      z0x1.5555555555555p+970c                     g | ]}d |z  S )g333333?rl   )rG  r#   s     r   rH  z&MathTests.testFsum.<locals>.<listcomp>  s    ---Aa---r   c                 8    g | ]}|d z            |         z
  S r   rl   )rG  r#   termss     r   rH  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      rU  r   r  r   r@  r   rA  spamc               3      K   dV  t           )Nr   )ZeroDivisionErrorrl   r   r   bad_iterz$MathTests.testFsum.<locals>.bad_iter  s      III##r   )sysr0  r=  min_expr   r:   fromhexappend	enumeraterT   fsumr   r   rz   r   rR  rS  rT  r   r   rU   r   r\   r   r   rZ  )rb   r0  r>  test_valuesr#   valsr(   actualrR  rS  rT  jsvr[  r<  r=  rQ  s                  @@@r   testFsumzMathTests.testFsum}  s$    	#"""""&"X-	+ 	+ 	+ 	+ 	+ 	+8 IUCL<<<fE:::FC'''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C?33TX>>>
49dh_#=#=>>???E9S>>66$()D//5$B C CDJ	L 	L 	L-VV4DEEE*di$(TXI1FGGG)TY999)TY222-RXJ???	$ 	$ 	$ 	+TY

CCCCCs   #E88%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   rU     x   T          j9W    P)}    "o  `T"-    l   8P9cC/[N
S9bXl	   9@{wM275k )	 l   Z'^%#>;*Q!/61^f            ^@      U@)rT   gcdr   r   r   rr   )rb   rx  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          t	          j        d                     |                      |dt!          d                    t	          j        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  }|                     t0          t2          f          5   |d|           d d d            n# 1 swxY w Y   |                      |t4                    t4                     |                      |dt4                    t4                     |                      |dt4                    t4                     |                      |d t4                    t4                     |                      |t6          t4                    t4                     |                      |t4          t6                    t4                     |                      |t8          t6                    t4                     |                      |t6          t8                    t4                     |                      |t4           t4                    t4                     |                      |t4           t4                     t4                     |                      |dt4                     t4                     |                     t	          j         |t6                                         |                     t	          j         |dt6                                         |                     t	          j         |t6          d                               |                     t	          j         |dt6                                         |                     t	          j         |t6          t6                                         |                     t	          j         |t6                                         t>          d!z  }t          d          D ]F}|                     t	          j          ||g|z   |t	          j        |          z                       Gt          d          D ]A}	tB          d|	z  z  }
|                     t	          j        d"|
z  d|
z            d|
z             B | j        t(          t          j        gdgd#z  d$R   d S )%Nr   r  Fractionr         @g @r   c              3       K   | ]	}|d z  V  
dS )rH   Nrl   )rG  rf  s     r   	<genexpr>z&MathTests.testHypot.<locals>.<genexpr>%  s&      55qad555555r   g      (@r         *@rn  rO      r   rH   r   rr  r   rP         %      %@r   r   r   r   r   皙?string皙@r   r  r   r      rX  )"r  r  	fractionsr  rT   hypotr   r   sqrtgammasinr   r4  assertAlmostEqualsumr   r\   r6  r   r   r   r\  r0  
max_10_exprz   r   r   r   r   r   rU   	FLOAT_MAXisclose	FLOAT_MIN)rb   r  r  r  r   r#   int_too_big_for_float	fourthmaxr   rD   scales              r   	testHypotzMathTests.testHypot  s   ######&&&&&&
 vtw	#
3#Ns4yy{## 	 	A""tBQBx 	#55D!H5555566    	tS))4000r1r***q"ty||444q)C..1149Q<<@@@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)TZEC58EfEEEEEEs6   <MMM:NNNO00O47O4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   ry  rH   )rT   r  r  r  Contextr:   r^  subTestlocalcontextr  r   )	rb   r  r  high_precisionr  r  r   ry  zs	            r   testHypotAccuracyzMathTests.testHypotAccuracyh  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                 B   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           |                      |t          d          dfd          d           |                      |dt          d          df          d           |                      |dt          d          f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   |d0d1           d d d            n# 1 swxY w Y   |                     t$                    5   |dd2           d d d            n# 1 swxY w Y   |                     t"                    5   |d3d4           d d d            n# 1 swxY w Y   |                     t"                    5   |d5d6           d d d            n# 1 swxY w Y   d7t&          j        j        d
z   z  }
|                     t$          t,          f          5   |d|
fd8           d d d            n# 1 swxY w Y   |                     t$          t,          f          5   |d8d|
f           d d d            n# 1 swxY w Y   |                     t"                    5   |d9d           d d d            n# 1 swxY w Y   |                     t"                    5   |dgd           d d d            n# 1 swxY w Y    G d: d;          }|                     t$                    5   |dg |            g           d d d            n# 1 swxY w Y   t          d<          D ]Z}t/          j                    t/          j                    }}|                      ||f|f          t1          ||z
                       [t2          d=d>d"d?t4          t6          g}t9          j        |d@A          D ]}t9          j        |d@A          D ]}dB t          ||          D             }t=          t?          t          j         |                    r&|                      |||          t4                     it=          t?          t          j!        |                    r1| "                    t	          j!         |||                               tF          dCz  }t          d          D ]}|f|z  }d&|z  }| "                    t	          j$         |||          |t	          j        |          z                       | "                    t	          j$         |||          |t	          j        |          z                       t          d          D ]s}tJ          d |z  z  }dD|z  d@|z  f}dE}|                     t	          j        ||          d
|z             |                     t	          j        ||          d
|z             td S )FNr   r  r  )r   r   r   )r   r   r   r   )r   rH   r   )r   rH   r   	   rO   c              3   @   K   | ]}t          j        d d          V  dS rO   NrR  uniformrG  ks     r   r  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   r  z%MathTests.testDist.<locals>.<genexpr>  r  r   c              3   ,   K   | ]\  }}||z
  d z  V  dS )r   Nrl   rG  pxqxs      r   r  z%MathTests.testDist.<locals>.<genexpr>  s/      FF&"bb2g#-FFFFFFr   )      ,@r   )r   r   r  )   r   )rH   r  r  r   )   r   r   r  r  )rH   i)r  r   rH   rr  )TTFTF)TFTTFr   )g     *@g      )@g      
rP   rl   r   )r   )rP   )r   r   r   )r   r   r   )r   r   r   c                       e Zd ZdS )MathTests.testDist.<locals>.TNrp   rl   r   r   Tr    r   r   r  )r   rO   ru  )pq)rU  r   r  )r  r  r  )r   rH   r   r   )rO   ru  rU  )r   rO   ru  rU  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   abcxyzr   )rH   r   rP  c                   "    e Zd Z e            ZdS )$MathTests.testDist.<locals>.BadFloatN)ri   rj   rk   rx   rg   rl   r   r   BadFloatr    r  r   r     r  r   r  r   )repeatc                     g | ]
\  }}||z
  S rl   rl   r  s      r   rH  z&MathTests.testDist.<locals>.<listcomp>  s     999VRb999r   r   r   )rP   rP   )&r  r  r  r  rT   distr  r   r   tupler  r  zipiterr\   r   r   r   rz   r\  r0  r  r   rR  r&   r   r   r   	itertoolsproductanymaprV   rU   r   r  r  r  )rb   DFr  r  r#   re  r  r  r  r  r  valuesdiffsr  r   rD   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y~~q17;;R@@@g	#';<<bAAAr9S>>2G<<bAAAh00"555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$g...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/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y)) 	 	DqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y)) 	 	D!aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 		# 	# 	# 	# 	# 	# 	# 	# z** 	$ 	$D!xxzzl###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 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   (RR	R'R??SS$S>>TT#T<<U U !U::U>U>V88V<?V<W66W:=W:X44X8;X8Y22Y69Y65[[[<\\\<]]]:^^^_))_-0_-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   rH   )r   r   rO   )r   rz   rT   r  rf   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(   rH   )r   )rG  r   r#   s      r   rH  z'MathTests.testIsqrt.<locals>.<listcomp>2  s5    HHHAsBHHAq!taxHHHHr   <   rV  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_   ra   s     r   rc   z1MathTests.testIsqrt.<locals>.IntegerLike.__init__K  s    "


r   c                     | j         S r^   r_   rf   s    r   ru   z2MathTests.testIsqrt.<locals>.IntegerLike.__index__N  s
    z!r   Nrv   rl   r   r   IntegerLiker  J  s2        # # #" " " " "r   r  i  r  r   r  za stringz3.5y              @g      Y@r   )listr   r  rT   isqrtassertIsr   rS   assertLessEqual
assertLessr   rz   r   objectr  r  r   )rb   rb  r`   rf  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   rU  rj  rk  iY  rl  rm  iH  ro  rp  rq  l    ,`aUx-xB:Vn
Ldbl   me%Y% l   };T^	 )rs  l   |/Kr2 rt  i7  rv  rw  )rT   lcmr   r   r   rr   )rb   r  r   ry  rz  r{  r|  ds           r   test_lcmzMathTests.test_lcmb  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           	      	   |                      t          t          j                   |                      t          t          j        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           |                     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 )Nr   r  z
ldexp(0,1)r   r   z
ldexp(1,1)rH   zldexp(1,-1)r   r   zldexp(-1,1)r  r   r   r   irP   r      i+i l    d(	       Fx:^V r   r  )r   r   rT   r2  r   r   r   r   r   r   rU   r   rb   r   s     r   	testLdexpzMathTests.testLdexp  s   )TZ000)TZc:::

<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                 H   |                      t          t          j                   |                      t          t          j        ddd           |                     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        dd           |                      t          t          j        t                     |                     t          j        t                    t                     | 
                    t          j        t          j        t                                         d S )Nr   rH   r   zlog(1/e)r   zlog(1)r   zlog(e)z	log(32,2)rr  rO   zlog(10**40, 10)r   r  zlog(10**40, 10**20)r  zlog(10**1000)r   gO+@r   r  )r   r   rT   logr   r   rz   r   r   r   r   rU   r   rf   s    r   testLogzMathTests.testLog  s   )TX...)TXq!Q777

: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C888*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 )NrH   Z   i,  r   )	r   r   rT   log1pr  r:   rz   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   rP   rH   r   r   r   i  g     @   g      @i  g     @@r   )
r   r   rT   log2r   rz   r   r   rU   r   rf   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 rE  )rT   r  r2  rF  s     r   rH  z+MathTests.testLog2Exact.<locals>.<listcomp>  s.    LLLA$)DJsA..//LLLr   rM  r  c                 ,    g | ]}t          |          S rl   r:   rF  s     r   rH  z+MathTests.testLog2Exact.<locals>.<listcomp>      999E!HH999r   )r   r   )rb   rd  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   rT   log10r   rz   r   r   r  r   r   rU   r   rf   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e2rb   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   rP   r   r   r   )
r   r   rT   modfr   r   r   r   r   rU   )rb   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          t          j        d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)rH   z	pow(2,-1)r   r   r   r  rP   r   r   r   r   g       r   r   r   g      .ggffffff?r  ?r  ggggffffffz	(-2.)**3.g       z	(-2.)**2.r   z	(-2.)**1.z	(-2.)**0.z
(-2.)**-0.z
(-2.)**-1.r   z
(-2.)**-2.      ?z
(-2.)**-3.g      )r   r   rT   powr   r   r   r   r   rU   r   r   rz   rf   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----66BBB 	"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  rH   zradians(-45)ir   z
radians(0)r   )r   r   rT   radiansr   r   rf   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   r  c                     |            |           |          }}}                     t          |          t          |dz                       ||z
  |z  }                    |t          |                     t          |          t          |dz            k    r+                    |dz  t          |dz                       dS dS )z
            Check that r matches remainder(x, y) according to the IEEE 754
            specification. Assumes that x, y and r are finite and y is nonzero.
            rH   N)r  r&   r   rS   )	r   ry  rfxfyfrr   r  rb   s	          r   validate_specz.MathTests.testRemainder.<locals>.validate_spec  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   rP   r   r   r   )r   r   rP   r   r   )r  r  r  r9   r:   r^  rT   	remainderr   hexr   r   r   r   assertIsNaNr   rz   )rb   r  	testcasesr   x_hexy_hexexpected_hexr   ry  r(   rd  tinyr   mr`   r  s   `              @r   testRemainderzMathTests.testRemainder  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)rH   r   z
sin(-pi/2)r   )r   r   rT   r  r   r   r   rU   r   r   rz   r   rf   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   rH   r   zsinh(1)+sinh(-1))r   r   rT   sinhr   r   r   r   r   r   rU   r   rf   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   rP   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   rH   r   )r   r   rT   r  r   r   r   rz   r   r   rU   r   rf   s    r   testSqrtzMathTests.testSqrt6  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   rT   tanr   r   r   rU   r   r   rz   r   rf   s    r   testTanzMathTests.testTanD  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   rT   tanhr   r   r   r   r   rU   r   rf   s    r   testTanhzMathTests.testTanhQ  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   rT   r7  r   rf   s    r   testTanhSignzMathTests.testTanhSignZ  si     	3---r49S>>::r3//	1 	1 	1 	1 	1r   c                 X   |                      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          } 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         |                       |                     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   rl   rf   s    r   	__trunc__z1MathTests.test_trunc.<locals>.TestTrunc.__trunc__n  r   r   Nri   rj   rk   rA  rl   r   r   	TestTruncr=  m  r   r   rC  c                       e Zd Zd ZdS )(MathTests.test_trunc.<locals>.FloatTruncc                     dS r?  rl   rf   s    r   rA  z2MathTests.test_trunc.<locals>.FloatTrunc.__trunc__q  r   r   NrB  rl   r   r   
FloatTruncrE  p  r   r   rG  c                       e Zd ZdS ))MathTests.test_trunc.<locals>.TestNoTruncNrp   rl   r   r   TestNoTruncrI  s  r   r   rJ  c                   "    e Zd Z e            ZdS )*MathTests.test_trunc.<locals>.TestBadTruncN)ri   rj   rk   rx   rA  rl   r   r   TestBadTruncrL  u  r  r   rM  r@  rH   g     7@)
r   rT   truncr   rS   r:   r   r   r\   rz   )rb   rC  rG  rJ  rM  s        r   
test_trunczMathTests.test_trunca  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???*dj,,..AAAAAr   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 )NrP   r   r   r   r   r   r   )r   rT   isfiniteassertFalser:   rf   s    r   testIsfinitezMathTests.testIsfinite  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   rP   r   )r   rT   rU   r:   rR  rf   s    r   	testIsnanzMathTests.testIsnan  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   rP   r   )r   rT   rV   r:   rR  rf   s    r   	testIsinfzMathTests.testIsinf  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   rT   rU   r   rf   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 )NrP   r   r   )r   rT   rV   r   assertGreaterr   r:   rf   s    r   test_inf_constantzMathTests.test_inf_constant  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)rT   rD   r   r   r  rz   rb   r   s     r   test_exceptionszMathTests.test_exceptions  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}): {}rP   )rectpolar)r   rO   invaliddivide-by-zerorz   overflowr   rO   rP   zFailures in test_testfile:
  
  )r\  platformmac_verr  r  rS   r9   rz   rN   	test_filegetattrrT   r   rZ   r'   r_  r   join)rb   SKIP_ON_TIGERosx_versionversion_txtrX   failuresr@   rA   araiereirE   funcr'  r*   r+   rW   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 )Nrd  rg  rh  rz   ri  r   rj  r  r  lgammagV瞯<erfcrP   r   r         $@r   r   zFailures in test_mtestfile:
  rk  )rF   math_testcasesro  rT   rz   r   rZ   r'   r_  r   rp  )rb   rX   rt  r@   rA   rB   r(   rE   ry  r)   r*   r+   rW   rz  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                 R   ddl m} 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           |                      |d |dd          g          d            G d d          }|                     t                    5   |d |            g           d d d            n# 1 swxY w Y   |                      |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           d:d(}t          dd)          }|                      ||           ||                     t          d*d+          }|                      ||           ||                     t          d,d-          }|                      ||          d           d. t          dd-          D             }|                      ||           ||                     d/ t          d,d+          D             }|                      ||           ||                     d0 t          d,d-          D             }|                      ||                     |                      |dddt          d1          ddg                     |                      |ddt          d1          ddg                     |                      |dt          d1          ddg                     |                      |dt          d2          t          d1          dg                     |                      |dt          d3          t          d1          dg                     |                      |dt          d1          t          d2          dg                     |                      |dt          d1          t          d3          dg                     |                      |dddt          d2          d4d5g          t          d3                     |                      |dddt          d3          d4d5g          t          d2                     |                      |dddt          d2          d4d5g                     |                      |dddt          d3          d4d5g                     |                      |dddt          d2          d4ddg                     |                      |dddt          d3          d4ddg                     |                     t           |g d6                    t                     |                     t           |g d7                    t                     |                     t           |t          dd)                              t                     |                     t           |t          dd)          d                    t                     |                     t           |dt!          j        d8          dd5dd9g                    t           j                   d S );Nr   r  r   rO   )r   rH   r   i  r   i _7 )r   rH   r   r   rO   rl  )r   r   r   r   r   rv  )r   rH   r   r   r   )r   r   r   r   rO   r   r   r   c                       e Zd Zd ZdS )(MathTests.test_prod.<locals>.BadMultiplyc                     t           r^   )RuntimeError)rb   others     r   __rmul__z1MathTests.test_prod.<locals>.BadMultiply.__rmul__Y  s    ""r   N)ri   rj   rk   r  rl   r   r   BadMultiplyr  X  s#        # # # # #r   r  r  )r   r           r   r   r  )r   r   r  r   r   r   )r{  r|  rz      a   cr      bababababababab)r   rH   r   rH   r   rH   r   rH   r   rH   r   rH   r  )r   r   rH   r   )r   r   rH   r   )r   rH   r   r   c                     | D ]}||z  }|S r^   rl   )r7  r   elems      r   _naive_prodz(MathTests.test_prod.<locals>._naive_prod{  s!       Lr   i'  ir   ir   c                 ,    g | ]}t          |          S rl   r  rG  r   s     r   rH  z'MathTests.test_prod.<locals>.<listcomp>  s    555E!HH555r   c                 ,    g | ]}t          |          S rl   r  r  s     r   rH  z'MathTests.test_prod.<locals>.<listcomp>  s    777E!HH777r   c                 ,    g | ]}t          |          S rl   r  r  s     r   rH  z'MathTests.test_prod.<locals>.<listcomp>  r   r   r   r   r   r   r   )r   rH   r   r   rO   ru  )r   r   r   r   rO   ru  r   ru  rP  )r  r  rT   prodr   r  r   r  r   r  r:   r   	bytearrayr$  r   rS   r  r  )rb   r  r  r  r  r  r7  s          r   	test_prodzMathTests.test_prodG  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<<<r11Q77m,,c222	# 	# 	# 	# 	# 	# 	# 	# |,, 	' 	'D#{{}}%&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	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$   G;;G?G?Q""Q&)Q&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   rV  r  r   r   r  r   1r  10r   r   rH   r   Tcpython)TT)TF)FFrO   )rT   permr   r   r   r   r   r  r  rz   r   check_impl_detailr   r  r   rS   ro   rr   )rb   r  r   r   r  s        r   testPermzMathTests.testPerm  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   rV  r  r   r   rH   r   r  r  r  r   r   r   Tr  r  rO   )rT   combr   r   r   r   r   r  r  rz   r   r  r   r  r   rS   ro   rr   )rb   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      CrP   gCg      gr   z0x1.fffffffffffffp-1z0x1.0000000000001p+0r   r   )r   rT   	nextafterr   r:   r^  assertEqualSignr\  r0  minepsilonr3  r$  r   )rb   smallest_subnormallargest_normals      r   test_nextafterzMathTests.test_nextafter3  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      @rP   r  )r   rT   r   r\  r0  r  r  r  r  r   r$  r   r  r^  s     r   test_ulpzMathTests.test_ulpa  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   )	convertedrf   s    r   rg   z.MathTests.test_issue39871.<locals>.F.__float__|  s    !%!r   N)ri   rj   rk   rg   rl   r   r   r  r  {  s#            r   r  znot a numberr  F)rT   r   r   r"  r   r   rR  ro  )rb   r  ry  ry  s       r   test_issue39871zMathTests.test_issue39871x  s    	 	 	 	 	 	 	 	 Jt~= 	= 	=DA""9-- ( (^Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 WQU;;<<<<	= 	=s   A00A4	7A4	c                    |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        d           |                      t          t          j        ddd           d S )NrX  r   r   r   )r   r   rT   rD   erfr   rf   s    r   test_input_exceptionszMathTests.test_input_exceptions  s    )TXv666)TXv666)TZ===)TZf===)TZ555)TZc3?????r   c                     t          j        |          s*|                     d                    |                     d S d S )NzExpected a NaN, got {!r}.)rT   rU   r   r'   ra   s     r   r$  zMathTests.assertIsNaN  sH    z%   	AII188??@@@@@	A 	Ar   c                     |                      ||           |                      t          j        d|          t          j        d|                     dS )zSimilar to assertEqual(), but compare also the sign with copysign().

        Function useful to compare signed zeros.
        r   N)r   rT   r   )rb   r   ry  s      r   r  zMathTests.assertEqualSign  sN    
 	AsA..c10E0EFFFFFr   Nrj  )Qri   rj   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipIfr\  rl  machiner   r   r   r   r   r   r  r   cpython_onlyr  r  r"  r.  HAVE_DOUBLE_ROUNDINGrh  r}  r  r  r  r  r  r  r  r  r  r  requires_mac_verr  r  r  r  r  r+  r-  r0  r2  r5  r8  r:  rO  rS  rU  rW  rY  r\  
skipUnlessr   r_  r{  r  r  r  r  r  r  r  r  r$  r  rl   r   r   r   r      s       6 6 6 6. . .	4 	4 	45 5 5	4 	4 	45 5 54 4 4	5 	5 	5<: <: <:|4 4 4 %; %; %;N : : :B3 3 3 X_S\W,W1A1A1C1CGW1W[] ]4 4] ]45 5 5< < <	= 	= 	=/ / /@ @ @: : : < < <#< #< #<J; ; ;.8 8 8$ X_)MO OmD mDO O mD^(E (E (ETMF MF MF^ X_)NP P:1 :1P P :1x7 7 7B) ) )
3& 3& 3&j*F *F *FX< < <B3 3 3$/ / / 4 4 4" Wb!$$+ + %$ +
5 
5 
51 1 1&H; H; H;l5 5 5 ~, ~, ~,@3 3 34 4 44 4 43 3 34 4 4 1 1 1B B B@7 7 7) ) )) ) ) . . . 3 3 3 X"9::: : ;::> 6- 6- 6-p @- @- @-Dd* d* d*L>K >K >K@DK DK DKL +3 +3 +3Z < < <,= = = @ @ @A A AG G G G Gr   r   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!rz  )r   r  rb   r{  r|  r   kwargss        r   assertIsClosezIsCloseTests.assertIsClose  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  )rR  r  r  s        r   assertIsNotClosezIsCloseTests.assertIsNotClose  s^    a<T<<<V<<ABAAAF 	 	H 	H 	H 	H 	Hr   c                 :    |D ]\  }} | j         ||g|R i | d S r^   )r  rb   examplesr   r  r{  r|  s         r   assertAllClosezIsCloseTests.assertAllClose  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_tolr?  g    _©r  r+   )r   rz   r  rf   s    r   test_negative_tolerancesz%IsCloseTests.test_negative_tolerances  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    @)rP   r   )NF r  rP   r  r  )rb   identical_exampless     r   test_identicalzIsCloseTests.test_identical  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  )rb   eight_decimal_places_exampless     r   test_eight_decimal_placesz&IsCloseTests.test_eight_decimal_places  sS    )C )C )C% 	94HHH<dKKKKKr   c                 j    g d}|                      |d           |                     |d           d S )N))r  rP   )g&.rP   )gu?j/ʠrP   r  r  r  r   )r  r  )rb   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 )NrP   r   )r  r   r   rf   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 )Nr?  r   rW  g?r   )r   r   r   r  )rb   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  rP   r  ))r   g     ?)g?r   )gZbtigTbtir  )rb   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  rf   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  )rb   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   r  z
1.00000001z1.0z1.00000001e-20z1.0e-20z1.00000001e-100z1.0e-100z1.00000001e20z1.0e20r  r  r  )r  r  r  r  )rb   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   r  r   r  r  l       	(qe	 r  r  r  r  )r  r  r  r  )rb   r  fraction_exampless      r   test_fractionszIsCloseTests.test_fractions	  s    &&&&&& Xa##a'!5Xi  ((9"5"56Xi((((1f*=*=>@ 	-t<<<0$?????r   N)ri   rj   rk   rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rl   r   r   r  r    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   rj  )9test.supportr   r   testr   r  r  r  rT   osrl  rR  r   r\  r   r:   r   r   r   r0  r3  r  r  r  r   ry  r  ri   argvfile__file__pathdirnamecurdirtest_dirrp  r  rn  r   r   r   r$   r/   rF   rN   rZ   r\   rS   ro   r  rr   rx   TestCaser   r  r  mainrl   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       	 	 	 	 	# 	 	 	    &          kG kG kG kG kG! kG kG kG\=x@ x@ x@ x@ x@8$ x@ x@ x@v  
 zHMOOOOO r   