HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_math.cpython-37.pyc
B

��g���@spddlmZmZmZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZdZ
ed�Zed�Zed�ZejjZd\ZZeed	kZed
kr�ejdZneZej�e�p�ejZej� ed�Z!ej� ed�Z"d
d�Z#dd�Z$dd�Z%dd�Z&dd�Z'dd�Z(dd�Z)dd�Z*d)dd �Z+Gd!d"�d"e,�Z-Gd#d$�d$ej.�Z/Gd%d&�d&ej.�Z0d'd(�Z1ed
k�rle1�dS)*�)�run_unittest�verbose�requires_IEEE_754)�supportNg�h㈵��>�nan�infz-inf)g��7y�ACg�):��@g��7y�AC�__main__zmath_testcases.txtzcmath_testcases.txtcCs.t�dt�d|��d}|dkr*|d}|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<drl)�struct�unpack�pack)�x�n�r�*/usr/local/lib/python3.7/test/test_math.py�to_ulps#s
rcCs�tt|��}t�|�s t�|�r$|St�dt�d|��d}t�dt�d|d��d}t�|�r�t�dt�d|d��d}||S||SdS)a�Return the value of the least significant bit of a
    float x, such that the first float bigger than x is x+ulp(x).
    Then, given an expected result x and a tolerance of n ulps,
    the result y should be such that abs(y-x) <= n * ulp(x).
    The results from this function will only make sense on platforms
    where native doubles are represented in IEEE 754 binary64 format.
    z<qz<dr�N)�abs�float�math�isnan�isinfr	r
r)rr
Zx_nextZx_prevrrr�ulp4s
rcCs|rdt||d@�SdS)zANumber of '1' bits in binary expansion of a nonnnegative integer.rr)�count_set_bits)r
rrrrasrcCsD||d?}|sdS|dkr |S||dB}t||�t||�SdS)z�Product of integers in range(start, stop, 2), computed recursively.
    start and stop should both be odd, with start <= stop.

    rN)�partial_product)�start�stopZ
numfactorsZmidrrrresrcCsdd}}xJtt|����D]6}|t||d?ddB||?ddB�9}||9}qW||t|�>S)z�Factorial of nonnegative integer n, via "Binary Split Factorial Formula"
    described at http://www.luschny.de/math/factorial/binarysplitfact.html

    r)�reversed�range�
bit_lengthrr)r
�innerZouter�irrr�py_factorialss
*r!cCsLtt|�t|��}t||�}||ks0||kr4dSd}|�||||�SdS)z�Given 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)rr�format)�expected�got�ulp_tol�abs_tolZ	ulp_errorZ	abs_errorZfmtrrr�
ulp_abs_check~sr'c	cs�t|���}x�|D]x}d|kr.|d|�d��}|��s8q|�d�\}}|��\}}}|��}|d}	|dd�}
||t|�t|	�|
fVqWWdQRXdS)z�Parse 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]*

    z--Nz->rr)�open�index�strip�splitr)�fname�fp�line�lhs�rhs�id�fn�arg�
rhs_pieces�exp�flagsrrr�parse_mtestfile�s	

r7c
	cs�t|���}x�|D]�}|�d�s|��s(q|�d�\}}|��\}}}}|��}	|	d|	d}
}|	dd�}||t|�t|�t|
�t|�|fVqWWdQRXdS)z�Parse a file with test values

    Empty lines or lines starting with -- are ignored
    yields id, fn, arg_real, arg_imag, exp_real, exp_imag
    z--z->rr�N)r(�
startswithr*r+r)
r,r-r.r/r0r1r2Zarg_realZarg_imagr4Zexp_realZexp_imagr6rrr�parse_testfile�s

r:��cCs�||krdSd}t|t�r.t|t�r.t|�}nt|t�rJt|t�rJt|�}t|t�r�t|t�r�t�|�rxt�|�rxd}n$t�|�s�t�|�r�nt||||�}|dk	r�d}|�||�}|d�|�7}|SdSdS)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 equalzexpected {!r}, got {!r}z ({}))�
isinstancer�intrrrr'r")r#r$r%r&�failure�fail_fmtZfail_msgrrr�result_check�s&
rAc@seZdZdd�Zdd�ZdS)�MyIndexablecCs
||_dS)N)�value)�selfrCrrr�__init__�szMyIndexable.__init__cCs|jS)N)rC)rDrrr�	__index__�szMyIndexable.__index__N)�__name__�
__module__�__qualname__rErFrrrrrB�srBc@seZdZdpdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zejd%d&��Zd'd(�Zd)d*�Zd+d,�Ze
e�ed-�d.d/���Zd0d1�Zd2d3�Z d4d5�Z!d6d7�Z"d8d9�Z#e
d:d;��Z$e
e�%d<d�d=d>���Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*e
dGdH��Z+dIdJ�Z,dKdL�Z-dMdN�Z.dOdP�Z/dQdR�Z0e
e�e1�2dS�dTkdU�dVdW���Z3dXdY�Z4dZd[�Z5d\d]�Z6d^d_�Z7e
d`da��Z8e
dbdc��Z9e�:e;dd�dedf��Z<e
dgdh��Z=e
didj��Z>dkdl�Z?dmdn�Z@doS)q�	MathTestsr;�cCs,t||||�}|dk	r(|�d�||��dS)aaCompare 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{}: {})rA�failr")rD�namer$r#r%r&r?rrr�ftest�s	zMathTests.ftestcCs8|�dtjd�|�dtjd�|�tjdtj�dS)N�pig-DT�!	@�egiW�
�@r8)rNrrOrP�assertEqualZtau)rDrrr�
testConstantsszMathTests.testConstantscCs�|�ttj�|�dt�d�tj�|�dt�d�tjd�|�dt�d�d�|�ttjt�|�ttjt�|�ttjdt	�|�ttjdt	�|�
t�t�t���dS)Nzacos(-1)���zacos(0)rr8zacos(1)r)
�assertRaises�	TypeErrorrZacosrNrO�
ValueError�INF�NINF�eps�
assertTruer�NAN)rDrrr�testAcosszMathTests.testAcoscCs�|�ttj�|�dt�d�d�|�dt�d�d�|�ttjd�|�ttjd�|�t�t�t�|�ttjt�|�	t�
t�t���dS)Nzacosh(1)rrzacosh(2)r8g5�qB�?rS)rTrUrZacoshrNrVrQrWrXrZrr[)rDrrr�	testAcoshszMathTests.testAcoshcCs�|�ttj�|�dt�d�tjd�|�dt�d�d�|�dt�d�tjd�|�ttjt�|�ttjt�|�ttjdt	�|�ttjdt	�|�
t�t�t���dS)Nzasin(-1)rSr8zasin(0)rzasin(1)r)
rTrUrZasinrNrOrVrWrXrYrZrr[)rDrrr�testAsin!szMathTests.testAsincCs�|�ttj�|�dt�d�d�|�dt�d�d�|�dt�d�d�|�t�t�t�|�t�t�t�|�t�	t�t
���dS)	Nzasinh(0)rzasinh(1)rg'�ya64�?z	asinh(-1)rSg'�ya64�)rTrUrZasinhrNrQrWrXrZrr[)rDrrr�	testAsinh,szMathTests.testAsinhcCs�|�ttj�|�dt�d�tjd�|�dt�d�d�|�dt�d�tjd�|�dt�t�tjd	�|�d
t�t�tjd	�|�t�	t�t
���dS)Nzatan(-1)rS�zatan(0)rzatan(1)rz	atan(inf)r8z
atan(-inf))rTrUr�atanrNrOrWrXrZrr[)rDrrr�testAtan5szMathTests.testAtancCs�|�ttj�|�dt�d�d�|�dt�d�d�|�dt�d�d�|�ttjd	�|�ttjd
�|�ttjt�|�ttjt�|�	t�
t�t���dS)Nzatanh(0)rz
atanh(0.5)g�?g�z��?zatanh(-0.5)g�g�z��rrS)rTrUrrarNZatanhrVrWrXrZrr[)rDrrr�	testAtanh>szMathTests.testAtanhcCs|�ttj�|�dt�dd�tjd�|�dt�dd�tjd�|�dt�dd�d�|�d	t�dd�tjd�|�d
t�dd�tjd�|�dt�dt�tj�|�d
t�dd�tj�|�dt�dd�tj�|�t�dd�d�|�t�dd�d�|�t�dt�d�|�	t�
t�dt���|�dt�dt�tj�|�dt�dd�tj�|�dt�dd�tj�|�t�dd�d�|�t�dd�d�|�t�dt�d�|�	t�
t�dt���|�dt�tt�tjdd�|�dt�td�tjd�|�dt�td�tjd�|�dt�td�tjd�|�dt�td�tjd�|�dt�tt�tjd�|�	t�
t�tt���|�dt�tt�tjdd�|�dt�td�tjd�|�dt�td�tjd�|�dt�td�tjd�|�d t�td�tjd�|�d!t�tt�tjd�|�	t�
t�tt���|�d"t�dt�tj�|�d#t�dd�tjd�|�d$t�dd�tjd�|�t�dt�d�|�	t�
t�dt���|�d%t�dt�tj�|�d&t�dd�tjd�|�d't�dd�tjd�|�t�dt�d�|�	t�
t�dt���|�	t�
t�tt���|�	t�
t�td���|�	t�
t�td���|�	t�
t�td���|�	t�
t�td���|�	t�
t�tt���|�	t�
t�tt���dS)(Nzatan2(-1, 0)rSrr8zatan2(-1, 1)rr`zatan2(0, 1)zatan2(1, 1)zatan2(1, 0)zatan2(0., -inf)gzatan2(0., -2.3)gffffff�zatan2(0., -0.)g�gffffff@zatan2(-0., -inf)zatan2(-0., -2.3)zatan2(-0., -0.)zatan2(inf, -inf)�zatan2(inf, -2.3)zatan2(inf, -0.)zatan2(inf, 0.)zatan2(inf, 2.3)zatan2(inf, inf)zatan2(-inf, -inf)zatan2(-inf, -2.3)zatan2(-inf, -0.)zatan2(-inf, 0.)zatan2(-inf, 2.3)zatan2(-inf, inf)zatan2(2.3, -inf)zatan2(2.3, -0.)zatan2(2.3, 0.)zatan2(-2.3, -inf)zatan2(-2.3, -0.)zatan2(-2.3, 0.))rTrUr�atan2rNrOrXrQrWrZrr[)rDrrr�	testAtan2Isf "zMathTests.testAtan2cCs|�ttj�|�ttt�d���|�dt�d�d�|�dt�d�d�|�dt�d�d�|�d	t�d
�d�|�dt�d
�d�|�dt�d�d�Gdd�d�}Gdd�d�}|�dt�|��d�|�ttj|��|�}dd�|_|�ttj|�|�ttj|d�dS)Ng�?z	ceil(0.5)rz	ceil(1.0)g�?z	ceil(1.5)g�?r8z
ceil(-0.5)g�rz
ceil(-1.0)g�rSz
ceil(-1.5)g��c@seZdZdd�ZdS)z$MathTests.testCeil.<locals>.TestCeilcSsdS)N�*r)rDrrr�__ceil__�sz-MathTests.testCeil.<locals>.TestCeil.__ceil__N)rGrHrIrhrrrr�TestCeil�sric@seZdZdS)z&MathTests.testCeil.<locals>.TestNoCeilN)rGrHrIrrrr�
TestNoCeil�srjzceil(TestCeil())rgcWs|S)Nr)�argsrrr�<lambda>��z$MathTests.testCeil.<locals>.<lambda>)	rTrUrZceilrQr>�typerNrh)rDrirj�trrr�testCeil�s 
zMathTests.testCeilcCs�|�t�dd�d�|�t�dd�d�|�t�dd�d�|�t�dd�d�|�t�d	d
�d�|�ttj�|�t�dd�d�|�t�dd
�d�|�t�td�t�|�t�td
�t�|�t�td�t�|�t�td
�t�|�t�dt�d�|�t�dt�d�|�t�tt�t�|�t�tt�t�|�t�tt�t�|�t�tt�t�|�t�t�t	d���|�t�t�t	t���|�t�t�t	t���|�t�t�t	t	���|�t�
t�tt	���|�tt�dt	��d�dS)
Nrrgg�?gi���g�rdg@g@g�g�g@)rQr�copysignrTrUrWrXrZrr[rr)rDrrr�testCopysign�s0zMathTests.testCopysigncCs�|�ttj�|jdt�tjd�dtd�d�|�dt�d�d�|jdt�tjd�dtd�d�|�dt�tj�d	�y0|�t�t�t	���|�t�t�t
���Wn4tk
r�|�ttjt	�|�ttjt
�YnX|�t�t�t���dS)
Nz
cos(-pi/2)r8rr)r&zcos(0)z	cos(pi/2)zcos(pi)rS)
rTrUrZcosrNrOrrZrrWrXrVr[)rDrrr�testCos�s$"zMathTests.testCoscCs�|�ttj�|�dt�d�d�|�dt�d�dt�d�dd�|�t�t�t�|�t�t�t�|�t�	t�t
���dS)Nzcosh(0)rrzcosh(2)-2*cosh(1)**2r8rS)rTrUr�coshrNrQrWrXrZrr[)rDrrr�testCosh�s&zMathTests.testCoshcCsr|�ttj�|�dt�tj�d�|�dt�tjd�d�|�dt�tjd�d�|�d	t�d
�d
�dS)Nzdegrees(pi)g�f@z
degrees(pi/2)r8g�V@zdegrees(-pi/4)r`g�F�z
degrees(0)r)rTrUrZdegreesrNrO)rDrrr�testDegrees�s
zMathTests.testDegreescCs�|�ttj�|�dt�d�dtj�|�dt�d�d�|�dt�d�tj�|�t�t�t�|�t�t�d�|�	t�
t�t���|�ttjd�dS)	Nzexp(-1)rSrzexp(0)rzexp(1)gi@B)
rTrUrr5rNrPrQrWrXrZrr[�
OverflowError)rDrrr�testExp�szMathTests.testExpcCsN|�ttj�|�dt�d�d�|�dt�d�d�|�dt�d�d�dS)Nzfabs(-1)rSrzfabs(0)rzfabs(1))rTrUrZfabsrN)rDrrr�testFabs�szMathTests.testFabscCs�|�t�d�d�|�t�d�d�d}xXtdd�D]J}||9}|�t�|�|�|�t�t|��|�|�t�|�t|��q4W|�ttjd�|�ttjd�|�ttjdd�|�ttjd	�|�ttjtj�dS)
Nrrgi�rSg��
�dg}Ô%�I��)	rQr�	factorialrrr!rTrVrO)rDZtotalr rrr�
testFactorial�szMathTests.testFactorialcCs(|�ttjdd�|�ttjd�dS)Nrzr{g}Ô%�I�T)rTrwrr|)rDrrr�testFactorialHugeInputs�sz!MathTests.testFactorialHugeInputscCs>|�ttj�|�ttt�d���|�dt�d�d�|�dt�d�d�|�dt�d�d�|�d	t�d
�d�|�dt�d
�d�|�dt�d�d�|�dt�d�d�|�dt�d�d�Gdd�d�}Gdd�d�}|�dt�|��d�|�ttj|��|�}dd�|_|�ttj|�|�ttj|d�dS)Ng�?z
floor(0.5)rz
floor(1.0)g�?rz
floor(1.5)g�?zfloor(-0.5)g�rSzfloor(-1.0)g�zfloor(-1.5)g�����zfloor(1.23e167)g��Nݯ�bzfloor(-1.23e167)g��Nݯ��c@seZdZdd�ZdS)z&MathTests.testFloor.<locals>.TestFloorcSsdS)Nrgr)rDrrr�	__floor__sz0MathTests.testFloor.<locals>.TestFloor.__floor__N)rGrHrIr�rrrr�	TestFloorsr�c@seZdZdS)z(MathTests.testFloor.<locals>.TestNoFloorN)rGrHrIrrrr�TestNoFloorsr�zfloor(TestFloor())rgcWs|S)Nr)rkrrrrl rmz%MathTests.testFloor.<locals>.<lambda>)	rTrUrZfloorrQr>rnrNr�)rDr�r�rorrr�	testFloors$
zMathTests.testFloorcCs�|�ttj�|�dt�dd�d�|�dt�dd�d�|�dt�dd�d	�|�d
t�dd�d�|�d
t�dd�d�|�dt�dd�d�|�t�t�td	���|�t�t�d	t���|�t�t�tt���|�ttjd	d�|�ttjt	d	�|�ttjt
d	�|�ttjt	d�|�t�dt	�d�|�t�dt	�d�|�t�dt
�d�|�t�dt
�d�|�t�dd�d�|�t�dt
�d�dS)Nzfmod(10, 1)rzrgz
fmod(10, 0.5)g�?z
fmod(10, 1.5)g�?g�?zfmod(-10, 1)i����g�zfmod(-10, 0.5)zfmod(-10, 1.5)g�g@g�)rTrUrZfmodrNrZrr[rVrWrXrQ)rDrrr�testFmod$s(zMathTests.testFmodcs���ttj��fdd�}|dt�d�d�|dt�d�d�|d	t�d
�d�|dt�d
�d���t�t�dt���t�t�dt���t�t�t	�d��dS)NcsB||\}}\}}t||�tks*||kr>��d|||f�dS)Nz%s returned %r, expected %r)rrYrL)rM�resultr#�mantr5ZemantZeexp)rDrr�	testfrexp=sz&MathTests.testFrexp.<locals>.testfrexpz	frexp(-1)rS)g�rzfrexp(0)r)rrzfrexp(1)r)g�?rzfrexp(2)r8)g�?r8)
rTrUr�frexprQrWrXrZrr[)rDr�r)rDr�	testFrexp:szMathTests.testFrexpz2fsum is not exact on machines with double roundingcs>ddlm}|j�|j����fdd�}gdfdgdfdddd	d
ddgd	fd
ddgdfd
ddgdfdddgdfdddgdfdd�tdd�D�t�d�fdd�tdd�D�t�d�fd d�td!�D�d"gdfd#dd$gd%fd&d'd(d)gdfd*d�td+d,d-�D�d.gt�d/�fg
}x�t|�D]|\}\}}yt�	|�}WnRt
k
�r^|�d0|||f�Yn*tk
�r�|�d1|||f�YnX|�
||��qWdd2lm}m}	m}
x�td!�D]~}d3dd4dd5d6gd7}d}x8td8�D],}|	d|��d3|}
||
7}|�|
��q�W|
|�||�}|�
||�t�	|���q�WdS)9Nr)�
float_infocs�d\}}xb|D]Z}t�|�\}}tt�|���|�}}||krT|||K}|}n|||K}||7}qWtttt|���d��|�}|dkr�d|d>}|d|t||@o�|d|d@�}||7}t�||�S)z�Full precision summation.  Compute sum(iterable) without any
            intermediate accumulation of error.  Based on the 'lsum' function
            at http://code.activestate.com/recipes/393090/

            )rrr8rrrd)	rr�r>�ldexp�max�len�binr�bool)�iterableZtmantZtexprr�r5�tail�h)�etiny�mant_digrr�msum_s
"(z MathTests.testFsum.<locals>.msumgg}Ô%�I�Tg�?g}Ô%�I��g0��.�++g�d~�QJg�g�d~�Q�g@Cg�g��g������?Cg�9g@Cg@Cg@Cg������?Cg�?g�<g������?CcSsg|]}d|�qS)g�?r)�.0r
rrr�
<listcomp>�sz&MathTests.testFsum.<locals>.<listcomp>ri�z0x1.df11f45f4e61ap+2cSsg|]}d||�qS)g�r)r�r
rrrr��sz-0x1.62a2af1bd3624p-1cSs g|]}d|dd|�qS)g333333�?rr)r�r rrrr��si�g����-��g��7y�ACg��ؗ�Ҝ<g��7y�ACg��7y�ACg�������?g��7y�A�g�������cSs,g|]$}d|d|dd|d�qS)g@�2�4r)r�r
rrrr��si���i�r8g�z0x1.5555555555555p+970zDtest %d failed: got OverflowError, expected %r for math.fsum(%.100r)zAtest %d failed: got ValueError, expected %r for math.fsum(%.100r))�random�gauss�shuffle�i����gh�$.5���g#B����;rz��)�sysr�r��min_exprr�fromhex�	enumeraterZfsumrwrLrVrQr�r�r��append)rDr�r�Ztest_valuesr Zvalsr#�actualr�r�r��j�s�vr)r�r�r�testFsumLsT


zMathTests.testFsumcCsztj}|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d�|�|dd�d	�|�|dd
�d	�|�|dd�d
�d}d}d}||}||}|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�d}||}||}|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�|||�|�|�t|dd�|�t|dd�|�|td�td��d	�dS)NrrrSr�i����x�T�i����l j9W P)�}l "o�`T"-� i�	l�8P9�cC�/�[�N
S�9�b�Xl	9@{�wM�2�75�k lZ��'^%#�>�;�*Q!/61^g^@gU@)r�gcdrQrTrUrB)rDr��cr�y�a�brrr�testGcd�sP
zMathTests.testGcdcCs�|�ttj�|�dt�dd�d�|�dt�dd�d�|�t�tt�t�|�t�tt�t�|�t�tt�t�|�t�tt�t�|�t	tjt
t
�|�t�t�dt���|�t�t�td���dS)	Nz
hypot(0,0)rz
hypot(3,4)rdr`r;g�?g�)
rTrUrZhypotrNrQr[rWrXrw�	FLOAT_MAXrZr)rDrrr�	testHypot�szMathTests.testHypotc	Cs@|�ttj�|�dt�dd�d�|�dt�dd�d�|�dt�dd�d�|�d	t�dd�d
�|�ttjdd�|�ttjd
d�|�t�dd�d�|�t�d
d�d�|�t�td�t�|�t�td�t�|�	t�
t�td����xFdddddgD�]0}|�t�t|�t�|�t�t|�t�|�t�d|�d�|�t�d
|�d�|�t�d|�d�|�t�d|�d�|�	t�
t�t|���|�ttjd|�|�ttjd
|�|�t�d|�d�|�t�d|�d�|�t�t|�t�|�t�t|�t�|�	t�
t�t|����qWdS)Nz
ldexp(0,1)rrz
ldexp(1,1)r8zldexp(1,-1)rSg�?zldexp(-1,1)rg�?i@Bg�i���gg��i+���i��ld(	l F�x:^Vrz�()rTrUrr�rNrwrQrWrXrZrr[)rDr
rrr�	testLdexp�s6zMathTests.testLdexpcCs|�ttj�|�dt�dtj�d�|�dt�d�d�|�dt�tj�d�|�dt�dd	�d
�|�dt�dd
d�d
�|�dt�dd
d�d	�|�dt�dd�d�|�ttjd�|�ttjdd�|�ttjt�|�t�t	�t	�|�
t�t�t���dS)Nzlog(1/e)rrSzlog(1)rzlog(e)z	log(32,2)r�r8r;zlog(10**40, 10)rzr�zlog(10**40, 10**20)l F�x:^Vz
log(10**1000)i�gO�+��@g��)
rTrUr�logrNrPrVrXrQrWrZrr[)rDrrr�testLog�szMathTests.testLogcCsl|�ttj�x6dddddgD] }|�t�|�t�t|���q"W|�ttjd�|�t�t�t�dS)Nr8�Zi,rS)	rTrUrZlog1pZassertAlmostEqualrrVrQrW)rDr
rrr�	testLog1ps
 zMathTests.testLog1pcCs�|�ttj�|�t�d�d�|�t�d�d�|�t�d�d�|�t�dd�d�|�t�dd	�d
�|�t�dd�d�|�ttjd
�|�ttjt�|�t�t�t	���dS)Nrgr8g�?r`g@i�g��@ig�@i�g@�@g��)
rTrUr�log2rQrVrXrZrr[)rDrrr�testLog2szMathTests.testLog2rzcCs8dd�tdd�D�}dd�tdd�D�}|�||�dS)NcSsg|]}t�t�d|���qS)g�?)rr�r�)r�r
rrrr�,sz+MathTests.testLog2Exact.<locals>.<listcomp>i���icSsg|]}t|��qSr)r)r�r
rrrr�-s)rrQ)rDr�r#rrr�
testLog2Exact'szMathTests.testLog2ExactcCs�|�ttj�|�dt�d�d�|�dt�d�d�|�dt�d�d�|�d	t�dd
�d�|�ttjd�|�ttjdd
�|�ttjt�|�t�t	�t	�|�
t�t�t���dS)
Nz
log10(0.1)g�������?rSzlog10(1)rrz	log10(10)rzzlog10(10**1000)i�g@�@g��)
rTrUrZlog10rNrVrXrQr�rWrZrr[)rDrrr�	testLog100szMathTests.testLog10cs���ttj��fdd�}|dt�d�d�|dt�d�d���t�t�d	tf���t�t�d
tf�t�t�}��t�	|d����t�	|d��dS)
NcsF||\}}\}}t||�tks.t||�rB��d|||f�dS)Nz%s returned %r, expected %r)rrYrL)rMr�r#Zv1Zv2Ze1Ze2)rDrr�testmodf?sz$MathTests.testModf.<locals>.testmodfz	modf(1.5)g�?)g�?g�?z
modf(-1.5)g��)g�g�gg�rr)
rTrUrZmodfrQrWrXr[rZr)rDr�Zmodf_nanr)rDr�testModf<s
zMathTests.testModfcCs�|�ttj�|�dt�dd�d�|�dt�dd�d�|�dt�dd�d�|�dt�dd�d	�|�t�td�t�|�t�td�t�|�t�dt�d
�|�t�dt�d
�|�t�	t�t
d���|�t�	t�dt
���|�t�	t�dt
���|�t�dt
�d�|�t�dt�d�|�t�dd�d�|�t�dd
�d�|�t�dd�d�|�t�dd�d
�|�t�dd�d
�|�ttjdd�|�ttjdd�|�ttjdd�|�ttjdt�|�t�	t�dt
���|�t�tt�t�|�t�td�t�|�t�td
�t�|�t�td�t�|�t�td�d
�|�t�td�d
�|�t�td�d�|�t�td�d�|�t�td�d�|�t�tt�d�|�t�	t�tt
���|�t�dt�d�|�t�dd�d�|�t�dd
�d�|�t�dd�d�|�t�dd�d
�|�t�dd�d
�|�ttjdd�|�ttjdd�|�ttjdd�|�ttjdt�|�t�	t�dt
���|�t�tt�t�|�t�td�t�|�t�td
�t�|�t�td�t�|�t�td�d
�|�t�td�d
�|�t�td�d�|�t�td�d�|�t�td�d�|�t�tt�d�|�t�	t�tt
���|�t�dt�d
�|�t�dd�d�|�ttjdd
�|�t�dd�d
�|�t�dd�d
�|�t�dd�d
�|�t�dd�d
�|�ttjdd�|�t�dd�d�|�t�dt�d
�|�t�	t�dt
���|�t�d
t�d
�|�t�d
d�d
�|�t�d
d
�d
�|�t�d
d�d
�|�t�d
d�d
�|�t�d
d�d
�|�t�d
d�d
�|�t�d
d�d
�|�t�d
d�d
�|�t�d
t�d
�|�t�d
t
�d
�|�t�d
d�d
�|�t�dd�d
�|�t�t
d�d
�|�t�d
d�d
�|�t�dd�d
�|�t�t
d�d
�|�ttjdd
�|�ttjdd�|�t�dt�d�|�t�dt�d�|�t�dt�t�|�t�dt�t�|�t�dt�t�|�t�dt�t�|�t�dt�d�|�t�dt�d�|�t�dt�t�|�t�dt�t�|�t�dt�d�|�t�dt�d�|�t�dt�d�|�t�dt�d�|�t�dt�t�|�t�dt�t�|�dt�dd�d�|�d t�dd�d!�|�d"t�dd
�d�|�d#t�dd�d
�|�d$t�dd�d
�|�d%t�dd�d&�|�d't�dd�d(�|�d)t�dd�d*�|�ttjdd&�|�ttjdd	�dS)+Nzpow(0,1)rrzpow(1,0)zpow(2,1)r8z	pow(2,-1)rSg�?g�?gg@gffffff@g@g�g�gffffff�g�g�g.�g�������gffffff�?g�������?g�������?g�������?g��������g�������g�������gffffff��z	(-2.)**3.g �z	(-2.)**2.g@z	(-2.)**1.z	(-2.)**0.z
(-2.)**-0.z
(-2.)**-1.g�z
(-2.)**-2.g�?z
(-2.)**-3.g��)rTrUr�powrNrQrWrXrZrr[rV)rDrrr�testPowOs�zMathTests.testPowcCsr|�ttj�|�dt�d�tj�|�dt�d�tjd�|�dt�d�tjd�|�d	t�d
�d
�dS)Nzradians(180)�zradians(90)r�r8zradians(-45)i���r`z
radians(0)r)rTrUrZradiansrNrO)rDrrr�testRadians�s
zMathTests.testRadiansc0s�ddlm���fdd�}ddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4g0}x||D]t}�j|d5��^|��\}}}t�|�}t�|�}t�|�}	||||	�t�||�}
��|
�	�|	�	��WdQRXq�Wt�d6�}xzt
d7d8�D]l}|dk�r$�q||}xNt
d9�D]B}
|
|}t�||�}
||||
�t�||�}
||||
��q6W�qWx@td:d;d<d=tt
gD]*}��t�t|����t�|t���q�Wx6d>D].}��t�|t
�|���t�|t�|��q�Wx�td=d;d:d?t
gD]�}��t��t�t
|�WdQRX��t��t�t|�WdQRX��t��t�|d:�WdQRX��t��t�|d;�WdQRX�qWdS)@Nr)�Fractioncs��|��|��|�}}}��t|�t|d��|||}��|t|��t|�t|d�kr|��|dt|d��dS)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.
            r8N)ZassertLessEqualrrQr>)rr��rZfxZfy�frr
)r�rDrr�
validate_spec�sz.MathTests.testRemainder.<locals>.validate_specz-4.0 1 -0.0z-3.8 1  0.8z-3.0 1 -0.0z-2.8 1 -0.8z-2.0 1 -0.0z-1.8 1  0.8z-1.0 1 -0.0z-0.8 1 -0.8z-0.0 1 -0.0z 0.0 1  0.0z 0.8 1  0.8z 1.0 1  0.0z 1.8 1 -0.8z 2.0 1  0.0z 2.8 1  0.8z 3.0 1  0.0z 3.8 1 -0.8z 4.0 1  0.0z&0x0.0p+0 0x1.921fb54442d18p+2 0x0.0p+0z?0x1.921fb54442d18p+0 0x1.921fb54442d18p+2  0x1.921fb54442d18p+0z?0x1.921fb54442d17p+1 0x1.921fb54442d18p+2  0x1.921fb54442d17p+1z?0x1.921fb54442d18p+1 0x1.921fb54442d18p+2  0x1.921fb54442d18p+1z?0x1.921fb54442d19p+1 0x1.921fb54442d18p+2 -0x1.921fb54442d17p+1z?0x1.921fb54442d17p+2 0x1.921fb54442d18p+2 -0x0.0000000000001p+2z00x1.921fb54442d18p+2 0x1.921fb54442d18p+2  0x0p0z?0x1.921fb54442d19p+2 0x1.921fb54442d18p+2  0x0.0000000000001p+2z?0x1.2d97c7f3321d1p+3 0x1.921fb54442d18p+2  0x1.921fb54442d14p+1z?0x1.2d97c7f3321d2p+3 0x1.921fb54442d18p+2 -0x1.921fb54442d18p+1z?0x1.2d97c7f3321d3p+3 0x1.921fb54442d18p+2 -0x1.921fb54442d14p+1z?0x1.921fb54442d17p+3 0x1.921fb54442d18p+2 -0x0.0000000000001p+3z00x1.921fb54442d18p+3 0x1.921fb54442d18p+2  0x0p0z?0x1.921fb54442d19p+3 0x1.921fb54442d18p+2  0x0.0000000000001p+3z?0x1.f6a7a2955385dp+3 0x1.921fb54442d18p+2  0x1.921fb54442d14p+1z?0x1.f6a7a2955385ep+3 0x1.921fb54442d18p+2  0x1.921fb54442d18p+1z?0x1.f6a7a2955385fp+3 0x1.921fb54442d18p+2 -0x1.921fb54442d14p+1z?0x1.1475cc9eedf00p+5 0x1.921fb54442d18p+2  0x1.921fb54442d10p+1z?0x1.1475cc9eedf01p+5 0x1.921fb54442d18p+2 -0x1.921fb54442d10p+1z 1  0.c  0.4z-1  0.c -0.4z 1 -0.c  0.4z-1 -0.c -0.4z 1.4  0.c -0.4z-1.4  0.c  0.4z 1.4 -0.c -0.4z-1.4 -0.c  0.4z$0x1.dp+1023 0x1.4p+1023  0x0.9p+1023z$0x1.ep+1023 0x1.4p+1023 -0x0.ap+1023z$0x1.fp+1023 0x1.4p+1023 -0x0.9p+1023)�casez1p-1074i���r{gg�g@gffffff�)gffffff�g�ggffffff@gffffff@)�	fractionsr�ZsubTestr+rr�r�	remainderrQ�hexrr[rXrW�assertIsNaNrTrV)rDr�Z	testcasesr�Zx_hexZy_hexZexpected_hexrr�r#r�Ztinyr
�mrCr)r�rDr�
testRemainder�s�



"


zMathTests.testRemaindercCs�|�ttj�|�dt�d�d�|�dt�tjd�d�|�dt�tjd�d�y0|�t�t�t���|�t�t�t	���Wn4t
k
r�|�t
tjt�|�t
tjt	�YnX|�t�t�t���dS)Nzsin(0)rz	sin(pi/2)r8rz
sin(-pi/2)rS)rTrUrZsinrNrOrZrrWrXrVr[)rDrrr�testSinlszMathTests.testSincCs�|�ttj�|�dt�d�d�|�dt�d�dt�d�dd�|�dt�d�t�d�d�|�t�t�t�|�t�t�t�|�	t�
t�t���dS)Nzsinh(0)rzsinh(1)**2-cosh(1)**2rr8rSzsinh(1)+sinh(-1))rTrUrZsinhrNrtrQrWrXrZrr[)rDrrr�testSinhys&zMathTests.testSinhcCs�|�ttj�|�dt�d�d�|�dt�d�d�|�dt�d�d�|�t�t�t�|�ttjd�|�ttjt�|�	t�
t�t���dS)	Nzsqrt(0)rzsqrt(1)rzsqrt(4)r`r8rS)rTrUr�sqrtrNrQrWrVrXrZrr[)rDrrr�testSqrt�szMathTests.testSqrtcCs�|�ttj�|�dt�d�d�|�dt�tjd�d�|�dt�tjd�d�y0|�t�t�t���|�t�t�t	���Wn,|�t
tjt�|�t
tjt	�YnX|�t�t�t���dS)Nztan(0)rz	tan(pi/4)r`rz
tan(-pi/4)rS)rTrUrZtanrNrOrZrrWrXrVr[)rDrrr�testTan�szMathTests.testTancCs�|�ttj�|�dt�d�d�|jdt�d�t�d�dtd�d�|�dt�t�d�|�dt�t�d�|�t�	t�t
���dS)	Nztanh(0)rztanh(1)+tanh(-1)rrS)r&z	tanh(inf)z
tanh(-inf))rTrUr�tanhrNrrWrXrZrr[)rDrrr�testTanh�szMathTests.testTanhZTANH_PRESERVES_ZERO_SIGNrz,system tanh() function doesn't copy the signcCs8|�t�d�d�|�t�dt�d��t�dd��dS)Ng�g�?)rQrr�rq)rDrrr�testTanhSign�szMathTests.testTanhSigncCs&|�t�d�d�|�t�d�d�|�tt�d��t�|�tt�d��t�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d	�d
�Gdd�dt�}Gd
d�dt�}|�t�|��d�|�ttj�|�ttjdd�|�ttj|��dS)NrrSg�?g��g����?g�����g�!��rg-���?Y�i����c@seZdZdd�ZdS)z'MathTests.test_trunc.<locals>.TestTrunccSsdS)N�r)rDrrr�	__trunc__�sz1MathTests.test_trunc.<locals>.TestTrunc.__trunc__N)rGrHrIr�rrrr�	TestTrunc�sr�c@seZdZdS)z)MathTests.test_trunc.<locals>.TestNoTruncN)rGrHrIrrrr�TestNoTrunc�sr�r�r8)rQrZtruncrnr>�objectrTrU)rDr�r�rrr�
test_trunc�s zMathTests.test_trunccCs�|�t�d��|�t�d��|�t�d��|�t�d��|�t�td���|�t�td���|�t�td���dS)Ngg�g�?g�rrz-inf)rZrZisfinite�assertFalser)rDrrr�testIsfinite�szMathTests.testIsfinitecCsx|�t�td���|�t�td���|�t�td�d��|�t�td���|�t�d��|�t�d��dS)Nrz-nanrgg�?)rZrrrr�)rDrrr�	testIsnan�szMathTests.testIsnancCs�|�t�td���|�t�td���|�t�d��|�t�d��|�t�td���|�t�d��|�t�d��dS)Nrz-infg�g�rgg�?)rZrrrr�)rDrrr�	testIsinf�szMathTests.testIsinfcCs|�t�tj��dS)N)rZrrr)rDrrr�test_nan_constant�szMathTests.test_nan_constantcCsJ|�t�tj��|�tjd�|�tjtd��|�tjtd��dS)Ngrz-inf)rZrrrZ
assertGreaterrQr)rDrrr�test_inf_constant�szMathTests.test_inf_constantzrequires verbose modecCs�yt�d�}Wn|�d�YnX|dkr8|�d�yt�d�}Wntk
rZYnX|�d�yt�d�}Wntk
r�YnX|�d�dS)	Ni6e�z6underflowing exp() should not have raised an exceptionrz)underflowing exp() should have returned 0iʚ;z.overflowing exp() didn't trigger OverflowErrorg�z sqrt(-1) didn't raise ValueError)rr5rLrwr�rV)rDrrrr�test_exceptions�s 

zMathTests.test_exceptionsc	Cspdh}d}tjdkrNt��d}yttt|�d���}Wntk
rLYnXd}g}x�tt	�D]�\}}}}	}
}}|	dks`|dkr�q`|dkr�q`|dk	r�|dkr�||kr�q`t
t|�}
d	|ks�d
|kr�d}
nd|kr�d
}
y|
|�}Wn0tk
r�d}Yntk
�rd
}YnXd\}}t
|
|||�}|dk�r4q`|�||||�}|�|�q`W|�rl|�dd�|��dS)NZtan0064�darwinr�.z{}: {}({!r}): {}g)ZrectZpolar)rzr;�invalidzdivide-by-zerorV�overflowrw)r;gzFailures in test_testfile:
  z
  )r��platformZmac_ver�tuple�mapr>r+rVr:�	test_file�getattrrrwrAr"r�rL�join)rDZ
SKIP_ON_TIGERZosx_versionZversion_txtr@�failuresr1r2�arZaiZerZeir6�funcr�r%r&r?�msgrrr�
test_testfilesL



zMathTests.test_testfilec	Cs2d}g}�xtt�D]�\}}}}}tt|�}d|ks<d|krBd}nd|krNd}y||�}	Wn.tk
rrd}	Yntk
r�d}	YnXd\}
}|dkr�d	}
n>|d
kr�d}n0|dkr�|d
kr�|dkr�d}
n|dkr�d}
nd}
t||	|
|�}|dkr�q|�||||�}
|�|
�qW|�r.|�	dd�
|��dS)Nz{}: {}({!r}): {}r�zdivide-by-zerorVr�rw)r;gZgamma�ZlgammagV瞯�<Zerfcgg�?rzg$@r{i�zFailures in test_mtestfile:
  z
  )r7�math_testcasesr�rrVrwrAr"r�rLr�)rDr@r�r1r2r3r#r6r�r$r%r&r?r�rrr�test_mtestfileGsB

zMathTests.test_mtestfilec
CsdGdd�d�}xPtjtjtjfD]<}|�}|�t��|d|�WdQRX|�t|dd��q WdS)Nc@seZdZdd�ZdS)z$MathTests.test_issue39871.<locals>.FcSsd|_dddS)NTrr)�	converted)rDrrr�	__float__�sz.MathTests.test_issue39871.<locals>.F.__float__N)rGrHrIr�rrrr�F�sr�znot a numberr�F)rrerqr�rTrUr�r�)rDr�r�r�rrr�test_issue39871�szMathTests.test_issue39871cCst�|�s|�d�|��dS)NzExpected a NaN, got {!r}.)rrrLr")rDrCrrrr��s
zMathTests.assertIsNaNN)r;rK)ArGrHrIrNrRr\r]r^r_rbrcrfrprrrrsrurvrxryr}rZcpython_onlyr~r�r�r��unittestZskipIf�HAVE_DOUBLE_ROUNDINGr�r�r�r�r�r�r�Zrequires_mac_verr�r�r�r�r�r�r�r�r�r�r��	sysconfigZget_config_varr�r�r�r�r�r�r�Z
skipUnlessrr�r�r�r�r�rrrrrJ�st


		="
Y+ 
	

			 9CrJc@s�eZdZejZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �IsCloseTestscOs*|j|j||f|�|�d||fd�dS)Nz%s and %s should be close!)r�)rZ�isclose)rDr�r�rk�kwargsrrr�
assertIsClose�szIsCloseTests.assertIsClosecOs*|j|j||f|�|�d||fd�dS)Nz%s and %s should not be close!)r�)r�r)rDr�r�rkrrrr�assertIsNotClose�szIsCloseTests.assertIsNotClosecOs*x$|D]\}}|j||f|�|�qWdS)N)r)rD�examplesrkrr�r�rrr�assertAllClose�szIsCloseTests.assertAllClosecOs*x$|D]\}}|j||f|�|�qWdS)N)r)rDrrkrr�r�rrr�assertAllNotClose�szIsCloseTests.assertAllNotClosec	CsR|�t��|jdddd�WdQRX|�t��|jddddd�WdQRXdS)Nrg0��.�+�)�rel_tolg0��.�++g _��)r	r&)rTrVr)rDrrr�test_negative_tolerances�sz%IsCloseTests.test_negative_tolerancescCs$ddddddg}|j|ddd�dS)	N)g@g@)g�N���@ig�N���@i)g;���g;���)i90g��@)gg�)iNFiNFg)r	r&)r)rDZidentical_examplesrrr�test_identical�szIsCloseTests.test_identicalcCs*dddg}|j|dd�|j|dd�dS)N)g�חAg�חA)g:�0�yE�g��n�yE�)g�	ѭ��?gfN�ӭ��?g:�0�yE>)r	g��&�.>)rr)rDZeight_decimal_places_examplesrrr�test_eight_decimal_places�s
z&IsCloseTests.test_eight_decimal_placescCs*dddg}|j|dd�|j|dd�dS)N)g��&�.>g)g��&�.�g)gu�?j�/ʠgg�������?)r	g:�0�yE>)r&)rr)rDZnear_zero_examplesrrr�test_near_zero�s
zIsCloseTests.test_near_zerocCs<|�tt�|jttdd�|�tt�|jttdd�dS)Ng)r&)rrWrX)rDrrr�test_identical_infinite�sz$IsCloseTests.test_identical_infinitecCsRttftdfdtfttfttfttftdfdtftdfdtfg
}|j|dd�dS)Ng0��.�++g�?g������g�������?)r&)r[rWrXr)rDZnot_close_examplesrrr�test_inf_ninf_nan�s
zIsCloseTests.test_inf_ninf_nancCs4dddg}|j|dd�dddg}|j|dd�dS)	N)g�?g�?)g333333�g333333�)gY��n��gY��n��g)r	)g�?g�?)g�������?g�?)gZb���tigTb���ti)rr)rDZzero_tolerance_close_examplesZ!zero_tolerance_not_close_examplesrrr�test_zero_tolerance�sz IsCloseTests.test_zero_tolerancecCs|jddgdd�dS)N)�	rz)rzrg�������?)r	)r)rDrrr�test_asymmetry�szIsCloseTests.test_asymmetrycCs(ddg}|j|dd�|j|dd�dS)N)i�i�)i�[i�[g:�0�yE>)r	g��&�.>)rr)rDZinteger_examplesrrr�
test_integers�szIsCloseTests.test_integerscCshddlm}|d�|d�f|d�|d�f|d�|d�f|d	�|d
�fg}|j|dd�|j|d
d�dS)Nr)�Decimalz
1.00000001z1.0z1.00000001e-20z1.0e-20z1.00000001e-100z1.0e-100z
1.00000001e20z1.0e20g:�0�yE>)r	g��&�.>)�decimalrrr)rDrZdecimal_examplesrrr�
test_decimalsszIsCloseTests.test_decimalscCsdddlm}|dd�d|d�f|d�|d�f|dd�|dd�fg}|j|dd	�|j|d
d	�dS)Nr)r�ri�i�l �	(q�e�	l F�x:^Vg:�0�yE>)r	g��&�.>)r�r�rr)rDr�Zfraction_examplesrrr�test_fractionsszIsCloseTests.test_fractionsN)rGrHrIrrrrrrr
rrr
rrrrrrrrrrrr�s 

rcCsNddlm}t��}|�t�t��|�t�t��|�|d��t|�dS)Nr)�DocFileSuitezieee754.txt)	Zdoctestrr�Z	TestSuiteZaddTestZ	makeSuiterJrr)rZsuiterrr�	test_mainsr)r;r<)2Ztest.supportrrrZtestrr�r�osr�r	r�rrYrr[rWrXr�r�r�rr�r�rG�argv�file�__file__�path�dirname�curdirZtest_dirr�r�r�rrrrr!r'r7r:rAr�rBZTestCaserJrrrrrr�<module>sZ-
.3{