Your IP : 216.73.216.85


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_math.cpython-35.pyc



��Yf
��@sddlmZmZmZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZdZ
ed�Zed�Zed�Zdd	f\ZZeedd
kZedkr�e
jdZneZejje�p
ejZejjed�Zejjed
�Zdd�Z ddd�Z!dd�Z"dd�Z#dd�Z$dddd�Z%dd�Z&dd �Z'Gd!d"�d"e(�Z)Gd#d$�d$ej*�Z+Gd%d&�d&ej*�Z,d'd(�Z-edkre-�dS))�)�run_unittest�verbose�requires_IEEE_754)�supportNg�h㈵��>�nan�infz-infg��7y�ACg�):��@��__main__zmath_testcases.txtzcmath_testcases.txtcCs=tjdtjd|��d}|dkr9|d}|S)aVConvert 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 C doubles are represented in IEEE 754 binary64 format.

    z<qz<dr��?l)�structZunpackZpack)�x�n�r�3/opt/alt/python35/lib64/python3.5/test/test_math.py�to_ulps!s
"r�cCs<t|�t|�}t|�|kr,dSdj||�S)z�Given non-NaN floats `expected` and `got`,
    check that they're equal to within the given number of ulps.

    Returns None on success and an error message on failure.Nz*error = {} ulps; permitted error = {} ulps)r�abs�format)�expected�gotZulpsZ
ulps_errorrrr�
ulps_check0s
	rcCs |rdt||d@�SdS)zANumber of '1' bits in binary expansion of a nonnnegative integer.�r)�count_set_bits)rrrrrQsrcCsT||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
numfactorsZmidrrrrUsrcCsxd}}xYtt|j���D]?}|t||d?ddB||?ddB�9}||9}q#W||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_factorialcs

/r"gV瞯�<g
cCshtj|�r||krdS||}t||t|��}t|�|krXdSdj||�S)aDetermine whether non-NaN floats a and b are equal to within a
    (small) rounding error.  The default values for rel_err and
    abs_err are chosen to be suitable for platforms where a float is
    represented by an IEEE 754 double.  They allow an error of between
    9 and 19 ulps.Nz error = {}; permitted error = {})�math�isinf�maxrr)rr�rel_err�abs_err�errorZpermitted_errorrrr�	acc_checkns
	r)c
cs�t|���}x�|D]�}d|krA|d|jd��}|j�sPq|jd�\}}|j�\}}}|j�}|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�split�float)�fname�fp�line�lhs�rhs�id�fn�arg�
rhs_pieces�exp�flagsrrr�parse_mtestfile�s	

r:c
cs�t|���}x�|D]�}|jd�s|j�r;q|jd�\}}|j�\}}}}|j�}	|	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->rrr
N)r*�
startswithr,r-r.)
r/r0r1r2r3r4r5Zarg_realZarg_imagr7Zexp_realZexp_imagr9rrr�parse_testfile�s
r<c@s(eZdZdd�Zdd�ZdS)�MyIndexablecCs
||_dS)N)�value)�selfr>rrr�__init__�szMyIndexable.__init__cCs|jS)N)r>)r?rrr�	__index__�szMyIndexable.__index__N)�__name__�
__module__�__qualname__r@rArrrrr=�sr=c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zejd#d$��Zd%d&�Zd'd(�Zd)d*�Ze
ejed+�d,d-���Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#e
d8d9��Z$e
ej%d:d;�d<d=���Z&d>d?�Z'd@dA�Z(dBdC�Z)dDdE�Z*dFdG�Z+dHdI�Z,dJdK�Z-dLdM�Z.dNdO�Z/e
eje0j1dP�dQkdR�dSdT���Z2dUdV�Z3dWdX�Z4dYdZ�Z5d[d\�Z6e
d]d^��Z7e
d_d`��Z8ej9e:da�dbdc��Z;e
ddde��Z<e
dfdg��Z=dhS)i�	MathTestscCs4t||�tkr0|jd|||f�dS)Nz%s returned %r, expected %r)r�eps�fail)r?�namer>rrrr�ftest�s	zMathTests.ftestcCs0|jdtjd�|jdtjd�dS)N�pigJ�M�!	@�egB�
�@)rIr#rJrK)r?rrr�
testConstants�szMathTests.testConstantscCs�|jttj�|jdtjd�tj�|jdtjd�tjd�|jdtjd�d�|jttjt�|jttjt�|j	tj
tjt���dS)Nzacos(-1)rzacos(0)rr
zacos(1)���)�assertRaises�	TypeErrorr#ZacosrIrJ�
ValueError�INF�NINF�
assertTrue�isnan�NAN)r?rrr�testAcos�s#zMathTests.testAcoscCs�|jttj�|jdtjd�d�|jdtjd�d�|jttjd�|jttjd�|jtjt�t�|jttjt�|j	tj
tjt���dS)Nzacosh(1)rrzacosh(2)r
g5�qB�?rM)rNrOr#ZacoshrIrP�assertEqualrQrRrSrTrU)r?rrr�	testAcosh�szMathTests.testAcoshcCs�|jttj�|jdtjd�tjd�|jdtjd�d�|jdtjd�tjd�|jttjt�|jttjt�|j	tj
tjt���dS)Nzasin(-1)rr
zasin(0)rzasin(1)rM)rNrOr#ZasinrIrJrPrQrRrSrTrU)r?rrr�testAsin�s$#zMathTests.testAsincCs�|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�|jtjt�t�|jtjt�t�|jtj	tjt
���dS)	Nzasinh(0)rzasinh(1)rg'�ya64�?z	asinh(-1)rMg'�ya64�)rNrOr#ZasinhrIrWrQrRrSrTrU)r?rrr�	testAsinh�szMathTests.testAsinhcCs�|jttj�|jdtjd
�tjd�|jdtjd�d�|jdtjd�tjd�|jdtjt�tjd�|jd	tjt�tjd�|jtj	tjt
���dS)Nzatan(-1)rrzatan(0)rzatan(1)z	atan(inf)r
z
atan(-inf)rM)rNrOr#�atanrIrJrQrRrSrTrU)r?rrr�testAtan�s$##$zMathTests.testAtancCs�|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d	�|jttjd�|jttjd
�|jttjt�|jttjt�|j	tj
tjt���dS)Nzatanh(0)rz
atanh(0.5)g�?g�z��?zatanh(-0.5)rg�g�z��rM)rNrOr#r[rIZatanhrPrQrRrSrTrU)r?rrr�	testAtanh�szMathTests.testAtanhcCs�|jttj�|jdtjd%d�tjd�|jdtjd&d�tjd�|jdtjdd�d�|jdtjdd�tjd�|jd	tjdd�tjd�|jd
tjdt�tj�|jdtjdd'�tj�|jdtjdd(�tj�|jtjdd�d�|jtjdd
�d�|jtjdt�d�|j	tj
tjdt���|jdtjd)t�tj�|jdtjd*d+�tj�|jdtjd,d-�tj�|jtjd.d�d/�|jtjd0d
�d1�|jtjd2t�d3�|j	tj
tjd4t���|jdtjtt�tjdd�|jdtjtd5�tjd�|jdtjtd6�tjd�|jdtjtd�tjd�|jdtjtd
�tjd�|jdtjtt�tjd�|j	tj
tjtt���|jdtjtt�tjdd�|jdtjtd7�tjd�|jdtjtd8�tjd�|jdtjtd�tjd�|jdtjtd
�tjd�|jdtjtt�tjd�|j	tj
tjtt���|jdtjd
t�tj�|jd tjd
d9�tjd�|jd!tjd
d�tjd�|jtjd
t�d�|j	tj
tjd
t���|jd"tjd:t�tj�|jd#tjd;d<�tjd�|jd$tjd=d�tjd�|jtjd>t�d?�|j	tj
tjd@t���|j	tj
tjtt���|j	tj
tjtdA���|j	tj
tjtdB���|j	tj
tjtd���|j	tj
tjtd
���|j	tj
tjtt���|j	tj
tjtt���dS)CNzatan2(-1, 0)rrr
zatan2(-1, 1)rzatan2(0, 1)zatan2(1, 1)zatan2(1, 0)zatan2(0., -inf)gzatan2(0., -2.3)gffffff@zatan2(0., -0.)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.)rMrMgffffff�g�g�g�gffffff�g�g�g�g�g�g�g�g�g�gffffff�g�gffffff�g�g�gffffff�gffffff�g�gffffff�gffffff�g�gffffff�gffffff�g�)rNrOr#Zatan2rIrJrRrWrQrSrTrU)r?rrr�	testAtan2sf''&&""""###"*&&&&&"+'''''""&&"#''"""""""zMathTests.testAtan2cCs�|jttj�|jtttjd���|jdtjd�d�|jdtjd�d�|jdtjd�d�|jd	tjd�d
�|jdtjd�d�|jdtjd�d�Gd
d�d�}Gdd�d�}|jdtj|��d�|jttj|��|�}dd�|_|jttj|�|jttj|d
�dS)Ng�?z	ceil(0.5)rz	ceil(1.0)g�?z	ceil(1.5)g�?r
z
ceil(-0.5)rz
ceil(-1.0)z
ceil(-1.5)c@seZdZdd�ZdS)z$MathTests.testCeil.<locals>.TestCeilcSsdS)N�*r)r?rrr�__ceil__Msz-MathTests.testCeil.<locals>.TestCeil.__ceil__N)rBrCrDrarrrr�TestCeilLsrbc@seZdZdS)z&MathTests.testCeil.<locals>.TestNoCeilN)rBrCrDrrrr�
TestNoCeilOsrczceil(TestCeil())r`cWs|S)Nr)�argsrrr�<lambda>Usz$MathTests.testCeil.<locals>.<lambda>g�g�rMg��rM)	rNrOr#ZceilrW�int�typerIra)r?rbrc�trrr�testCeil?s 	zMathTests.testCeilcCs�|jtjdd�d�|jtjdd�d�|jtjdd	�d
�|jtjdd�d�|jtjdd�d�|jttj�|jtjdd�d�|jtjdd
�d�|jtjtd�t�|jtjtd�t�|jtjtd�t�|jtjtd�t�|jtjdt�d�|jtjdt�d�|jtjtt�t�|jtjtt�t�|jtjtt�t�|jtjtt�t�|jtjtjt	d���|jtjtjt	t���|jtjtjt	t���|jtjtjt	t	���|jtj
tjtt	���|jttjdt	��d�dS)Nrr`g�?gr^g@g@g@i���g�g�g�g�g�g�g�g�)rWr#�copysignrNrOrQrRrSrTrUr$r)r?rrr�testCopysignYs0"""""zMathTests.testCopysigncCs;|jttj�|jdtjtjd�d�|jdtjd�d�|jdtjtjd�d�|jdtjtj�d�yB|jtjtjt���|jtjtjt	���Wn>t
k
r|jt
tjt�|jt
tjt	�YnX|jtjtjt���dS)	Nz
cos(-pi/2)r
rzcos(0)rz	cos(pi/2)zcos(pi)rM)rNrOr#ZcosrIrJrSrTrQrRrPrU)r?rrr�testCos{s$##
zMathTests.testCoscCs�|jttj�|jdtjd�d�|jdtjd�dtjd�dd�|jtjt�t�|jtjt�t�|jtj	tjt
���dS)Nzcosh(0)rrzcosh(2)-2*cosh(1)**2r
rM)rNrOr#�coshrIrWrQrRrSrTrU)r?rrr�testCosh�s1zMathTests.testCoshcCs}|jttj�|jdtjtj�d�|jdtjtjd�d�|jdtjtjd�d	�dS)
Nzdegrees(pi)g�f@z
degrees(pi/2)r
g�V@zdegrees(-pi/4)rg�F@g�F�)rNrOr#ZdegreesrIrJ)r?rrr�testDegrees�s#zMathTests.testDegreescCs�|jttj�|jdtjd�dtj�|jdtjd�d�|jdtjd�tj�|jtjt�t�|jtjt�d�|j	tj
tjt���dS)Nzexp(-1)rzexp(0)rzexp(1)grM)rNrOr#r8rIrKrWrQrRrSrTrU)r?rrr�testExp�s#zMathTests.testExpcCsk|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�dS)Nzfabs(-1)rzfabs(0)rzfabs(1)rM)rNrOr#ZfabsrI)r?rrr�testFabs�szMathTests.testFabscCs(|jtjd�d�|jtjd�d�d}xxtdd�D]g}||9}|jtj|�|�|jtjt|��|�|jtj|�t|��qHW|jttjd	�|jttjd
�|jttjd�|jttjd
�|jttjtj�dS)Nrrgi�g�?�
�dg}Ô%�I�TrMg�lDG��d�r���Y�|g�O�s&YR5Il��DG��d�r���Y�|g�O�s&YR5Ig}Ô%�I��)	rWr#�	factorialrr.r"rNrPrJ)r?Ztotalr!rrr�
testFactorial�s
#zMathTests.testFactorialcCs0|jttjd�|jttjd�dS)Nrrrsg}Ô%�I�TlDG��d�r���Y�|g�O�s&YR5I)rN�
OverflowErrorr#rt)r?rrr�testFactorialHugeInputs�sz!MathTests.testFactorialHugeInputscCs�|jttj�|jtttjd���|jdtjd�d�|jdtjd�d�|jdtjd�d�|jd	tjd�d�|jd
tjd�d�|jdtjd�d�|jd
tjd�d�|jdtjd�d�Gdd�d�}Gdd�d�}|jdtj|��d�|jttj|��|�}dd�|_|jttj|�|jttj|d�dS) Ng�?z
floor(0.5)rz
floor(1.0)g�?rz
floor(1.5)g�?zfloor(-0.5)zfloor(-1.0)zfloor(-1.5)r
zfloor(1.23e167)g��Nݯ�bzfloor(-1.23e167)c@seZdZdd�ZdS)z&MathTests.testFloor.<locals>.TestFloorcSsdS)Nr`r)r?rrr�	__floor__�sz0MathTests.testFloor.<locals>.TestFloor.__floor__N)rBrCrDrxrrrr�	TestFloor�sryc@seZdZdS)z(MathTests.testFloor.<locals>.TestNoFloorN)rBrCrDrrrr�TestNoFloor�srzzfloor(TestFloor())r`cWs|S)Nr)rdrrrre�sz%MathTests.testFloor.<locals>.<lambda>g�rMg�rMg�����g��Nݯ��g��Nݯ��)	rNrOr#ZfloorrWrfrgrIrx)r?ryrzrhrrr�	testFloor�s$	zMathTests.testFloorcCsC|jttj�|jdtjdd�d�|jdtjdd�d�|jdtjdd�d	�|jd
tjdd�d�|jdtjdd�d�|jdtjdd�d�|jtjtjtd	���|jtjtjd	t���|jtjtjtt���|jttjd	d�|jttjt	d	�|jttjt
d	�|jttjt	d�|jtjd
t	�d
�|jtjdt	�d�|jtjd
t
�d
�|jtjdt
�d�|jtjdd
�d�|jtjdt
�d�dS)Nzfmod(10, 1)rrrgz
fmod(10, 0.5)g�?z
fmod(10, 1.5)g�?g�?zfmod(-10, 1)zfmod(-10, 0.5)zfmod(-10, 1.5)g@i����g�i����g�i����g�g�g�g�g�)rNrOr#ZfmodrIrSrTrUrPrQrRrW)r?rrr�testFmod�s("""zMathTests.testFmodcs��jttj��fdd�}|dtjd�d
�|dtjd�d�|dtjd�d�|d	tjd
�d��jtjt�dt��jtjt�dt��jtjtjt	�d��dS)NcsY||\}}\}}t||�tks;||krU�jd|||f�dS)Nz%s returned %r, expected %r)rrFrG)rH�resultr�mantr8ZemantZeexp)r?rr�	testfrexp�s"	z&MathTests.testFrexp.<locals>.testfrexpz	frexp(-1)r��?zfrexp(0)rzfrexp(1)zfrexp(2)r
rM��)r�r)rr)r�r)r�r
)
rNrOr#�frexprWrQrRrSrTrU)r?r�r)r?r�	testFrexp�szMathTests.testFrexpz2fsum is not exact on machines with double roundingcs�ddlm}|j�|j����fdd�}gdfdgdfddd.dd	d/d0gdfd1d2d5gd7fd8dd:gd<fd>dd@gdBfdDddFgdHfdd�tdd�D�tjd�fdd�tdd�D�tjd�fdd�td�D�dJgdKfdddgdfdLdOdQdUgdfd d�tdVd"d#�D�dXgtjd%�fg
}x�t|�D]�\}\}}ytj	|�}WnWt
k
r�|jd&|||f�Yn,tk
r|jd'|||f�YnX|j
||�q�Wdd(lm}m}	m}
x�td�D]�}d)ddYdZd[d+gd,}d}xEtd-�D]7}|	d|��d)|}
||
7}|j|
�q�W|
|�||�}|j
||�tj	|��qQWdS)\Nr)�
float_infocsd\}}x�|D]y}tj|�\}}ttj|���|�}}||krt|||K}|}n|||K}||7}qWtttt|���d��|�}|dkrd|d>}|d|t||@o�|d|d@�}||7}tj||�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/

            rr
rr^)rr)	r#r�rf�ldexpr%�len�binr�bool)�iterableZtmantZtexpr
rr8�tail�h)�etiny�mant_digrr�msums
#	-.
z MathTests.testFsum.<locals>.msumgg}Ô%�I�Tg�?g0��.�++g�d~�QJg@�5g�?�6rsg$@g(@g@g@cSsg|]}d|�qS)g�?r)�.0rrrr�
<listcomp>9s	z&MathTests.testFsum.<locals>.<listcomp>ri�z0x1.df11f45f4e61ap+2cSsg|]}d||�qS)g�?g�r)r�rrrrr�;s	z-0x1.62a2af1bd3624p-1cSs&g|]}d|dd|�qS)g333333�?rr)r�r!rrrr�=s	i�g333333�?g��7y�ACg��ؗ�Ҝ<g��7y�ACcSs2g|](}d|d|dd|d�qS)g@�2�4r)r�rrrrr�As	i2i�r
i�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�gh�$.5��;g#B����;rr��g}Ô%�I��g�g�d~�Q�g@Cg�i���g�<g��g@Cg������?Cg@Ci����g�9g@Cg@Cg@Cg@Ci����g�9g@Cg@Cg@Cg������?Ci���g�<g@Cg������?Cg����-�og����-��g�g��7y�ACi���g�<g�������?g��7y�ACg��7y�A�i���g�<g�������?g�������i���g�g�i����g}Ô%�I��gh�$.5���)�sysr�r��min_exprr.�fromhex�	enumerater#ZfsumrvrGrPrWr�r�r��append)r?r�r�Ztest_valuesr!�valsr�actualr�r�r��j�s�vr)r�r�r�testFsumsT	
	#
	
	

zMathTests.testFsumcCsQtj}|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|dd�d�|j|d	d
�d�d}d
}d}||}||}|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�d}||}||}|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|j|||�|�|jt|dd�|jt|dd�|j|td�td��d�dS)Nrrr����x�T�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@rMrMrMi��i����)r#�gcdrWrNrOr=)r?r��cr
�y�a�brrr�testGcd^sP	




zMathTests.testGcdcCs	|jttj�|jdtjdd�d�|jdtjdd�d�|jtjtt�t�|jtjtt�t�|jtjtt�t�|jtjtt�t�|j	tj
tjdt���|j	tj
tjtd	���dS)
Nz
hypot(0,0)rz
hypot(3,4)r^r�g�?g@g�)rNrOr#ZhypotrIrWrUrQrRrSrT)r?rrr�	testHypot�s"zMathTests.testHypotcCs	|jttj�|jdtjdd�d�|jdtjdd�d�|jdtjdd�d�|jdtjdd�d�|jttjd	d
�|jttjdd
�|jtjd	d�d�|jtjdd�d�|jtjtd�t�|jtjtd�t�|j	tj
tjtd���x�ddddgD]�}|jtjt|�t�|jtjt|�t�|jtjd	|�d�|jtjd|�d �|jtjd|�d�|jtjd!|�d"�|j	tj
tjt|���|jttjd	|�|jttjd#|�|jtjd|�d�|jtjd$|�d%�|jtjt|�t�|jtjt|�t�|j	tj
tjt|���qfWdS)&Nz
ldexp(0,1)rrz
ldexp(1,1)r
zldexp(1,-1)g�?zldexp(-1,1)g�?i@Bg���rrr�r�(rMrMr{g�i���g�i���g�i+���i��ld(	l F�x:^Vl	�O�z��p�cg�g�g�g�g�g�g�)rNrOr#r�rIrvrWrQrRrSrTrU)r?rrrr�	testLdexp�s6"#zMathTests.testLdexpcCsh|jttj�|jdtjdtj�d�|jdtjd�d�|jdtjtj�d�|jdtjdd�d	�|jd
tjdd�d�|jd
tjdd�d�|jdtjd�d�|jttjd�|jttjd�|jttjt�|jtjt	�t	�|j
tjtjt���dS)Nzlog(1/e)rzlog(1)rzlog(e)z	log(32,2)r�r
r�zlog(10**40, 10)rrr�zlog(10**40, 10**20)rz
log(10**1000)i�gO�+��@g�?rMl	�O�z��p�cl	�O�z��p�cl F�x:^Vl�3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcyg��l�3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcyl"���3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcy)
rNrOr#�logrIrKrPrRrWrQrSrTrU)r?rrr�testLog�s#zMathTests.testLogcCsE|jttj�d}|jtj|�tjt|���dS)Nr
�Zl)rNrOr#Zlog1pZassertAlmostEqualr.)r?rrrr�	testLog1p�szMathTests.testLog1pcCs�|jttj�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d
�|jtjd�d�|jttjd�|jttjt�|jtjtjt	���dS)Nrgr
g�?rg@i�g��@ig�@i�g@�@g�?lElEl� g��)
rNrOr#�log2rWrPrRrSrTrU)r?rrr�testLog2�szMathTests.testLog2rrr�cCsLdd�tdd�D�}dd�tdd�D�}|j||�dS)NcSs+g|]!}tjtjd|���qS)g�?)r#r�r�)r�rrrrr��s	z+MathTests.testLog2Exact.<locals>.<listcomp>i2icSsg|]}t|��qSr)r.)r�rrrrr��s	i���i���)rrW)r?r�rrrr�
testLog2Exact�szMathTests.testLog2ExactcCs|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�|jdtjd
�d
�|jttjd�|jttjd�|jttjt�|jtjt	�t	�|j
tjtjt���dS)Nz
log10(0.1)g�������?rzlog10(1)rz	log10(10)rrzlog10(10**1000)i�g@�@g�?rMl�3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcyg��l�3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcyl"���3qvN�h�iKa��K�P�"�q����!��a�0mvK0<tI	D�[��7�fj�wld:,"�P�S�^
g�2�$�({P_R�U��vD9�{�)P�Anf�YD8�5PgH�#�q�EgS�d27�}��W>�Y��y�{A\<	�z�kZ� �p�+�*�eX9��E��i�/�\;��:�8bG�((ema!� �6�o�}Zs'%COd�
�YP]��[BT�vWL?F�Ch_"!�x"'��j�j�4�x�o�CD<Y#!*�vYyv�#�e�JU>�+i[�9*-Jc+`�S;?lcy)
rNrOr#Zlog10rIrPrRrWr�rQrSrTrU)r?rrr�	testLog10�szMathTests.testLog10cs��jttj��fdd�}|dtjd�d�|dtjd�d��jtjt�dtf��jtjt�dtf�tjt�}�jtj	|d	���jtj	|d
��dS)Ncs]||\}}\}}t||�tks?t||�rY�jd|||f�dS)Nz%s returned %r, expected %r)rrFrG)rHr~rZv1Zv2Ze1Ze2)r?rr�testmodf�s&	z$MathTests.testModf.<locals>.testmodfz	modf(1.5)g�?��?��?z
modf(-1.5)grr)r�r�g������)r�r�g�)
rNrOr#ZmodfrWrQrRrUrSrT)r?r�Zmodf_nanr)r?r�testModf�szMathTests.testModfcCs�|jttj�|jdtjdd�d�|jdtjdd�d�|jdtjdd�d�|jdtjdd �d�|jtjtd�t�|jtjtd�t�|jtjdt�d	�|jtjdt�d	�|jtj	tjt
d���|jtj	tjdt
���|jtj	tjdt
���|jtjdt
�d�|jtjd
t�d
�|jtjd
d�d
�|jtjd
d�d
�|jtjd
d
�d
�|jtjd
d
�d	�|jtjd
d!�d	�|jttjd
d"�|jttjd
d#�|jttjd
d$�|jttjd
t�|jtj	tjd
t
���|jtjtt�t�|jtjtd�t�|jtjtd�t�|jtjtd
�t�|jtjtd
�d	�|jtjtd%�d	�|jtjtd&�d
�|jtjtd'�d
�|jtjtd(�d
�|jtjtt�d
�|jtj	tjtt
���|jtjd)t�d
�|jtjd*d�d+�|jtjd,d�d
�|jtjd-d
�d
�|jtjd.d
�d	�|jtjd/d0�d	�|jttjd1d2�|jttjd3d4�|jttjd5d6�|jttjd7t�|jtj	tjd8t
���|jtjtt�t�|jtjtd�t�|jtjtd�t�|jtjtd
�t�|jtjtd
�d	�|jtjtd9�d	�|jtjtd:�d
�|jtjtd;�d
�|jtjtd<�d=�|jtjtt�d
�|jtj	tjtt
���|jtjd>t�d	�|jtjd?d�d@�|jttjdAd�|jtjdBd
�d	�|jtjdCd
�d	�|jtjdDdE�d	�|jtjdFdG�d	�|jttjdHdI�|jtjdJdK�dL�|jtjdMt�d	�|jtj	tjdNt
���|jtjd	t�d	�|jtjd	d�d	�|jtjd	d�d	�|jtjd	d
�d	�|jtjd	d
�d	�|jtjd	dO�d	�|jtjd	dP�d	�|jtjd	dQ�d	�|jtjd	dR�d	�|jtjd	t�d	�|jtjd	t
�d	�|jtjdd
�d	�|jtjdSd
�d	�|jtjt
d
�d	�|jtjddT�d	�|jtjdUdV�d	�|jtjt
dW�d	�|jttjdXd�|jttjdYdZ�|jtjdt�d
�|jtjdt�d
�|jtjdt�t�|jtjdt�t�|jtjd[t�t�|jtjd\t�t�|jtjd]t�d
�|jtjd^t�d
�|jtjdt�t�|jtjdt�t�|jtjdt�d
�|jtjdt�d
�|jtjd_t�d
�|jtjd`t�d
�|jtjdat�t�|jtjdbt�t�|jdtjdcd�dd�|jdtjded
�d�|jdtjdfd	�dg�|jdtjdhd
�d	�|jdtjdidj�d	�|jdtjdkdl�dm�|jdtjdndo�d�|jdtjdpdq�dr�|jttjdsdt�|jttjdud�dS)vNzpow(0,1)rrzpow(1,0)zpow(2,1)r
z	pow(2,-1)g�?g�?gg@gffffff@g@g.@g������@gffffff�?g�������?g�������?g�������?z	(-2.)**3.g @z	(-2.)**2.g@z	(-2.)**1.z	(-2.)**0.z
(-2.)**-0.z
(-2.)**-1.z
(-2.)**-2.g�?z
(-2.)**-3.g�?rMg�g�gffffff�g�g�g�gffffff�g�g�g�g�g�g�g�g�g�g�g�g�gffffff�g�g�g�g�g�g�gffffff�g�g�g�g�g�g�g�g�g�g�g�g�g�gffffff�g�g�g�g�g�g�g�gffffff�g�gffffff�g�gffffff�g�g�g�g.�g�������g��������g�������g�������gffffff��g��������g�������g�������gffffff��g�g �g�g�g�g�g�g�g�g�g�g�g�g�g�g��g�g�g�)rNrOr#�powrIrWrQrRrSrTrUrP)r?rrr�testPows�""""""""zMathTests.testPowcCs}|jttj�|jdtjd�tj�|jdtjd�tjd�|jdtjd	�tjd�dS)
Nzradians(180)�zradians(90)r�r
zradians(-45)�-ri���)rNrOr#ZradiansrIrJ)r?rrr�testRadians�s#zMathTests.testRadianscCs|jttj�|jdtjd�d�|jdtjtjd�d�|jdtjtjd�d�yB|jtjtjt���|jtjtjt	���Wn>t
k
r�|jt
tjt�|jt
tjt	�YnX|jtjtjt���dS)Nzsin(0)rz	sin(pi/2)r
rz
sin(-pi/2)rM)rNrOr#ZsinrIrJrSrTrQrRrPrU)r?rrr�testSin�s#$#
zMathTests.testSincCs�|jttj�|jdtjd�d�|jdtjd�dtjd�dd�|jdtjd�tjd�d�|jtjt�t�|jtjt�t�|j	tj
tjt���dS)	Nzsinh(0)rzsinh(1)**2-cosh(1)**2rr
zsinh(1)+sinh(-1)rMrM)rNrOr#ZsinhrIrmrWrQrRrSrTrU)r?rrr�testSinh�s1)zMathTests.testSinhcCs�|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�|jtjt�t�|jttjt�|j	tj
tjt���dS)Nzsqrt(0)rzsqrt(1)rzsqrt(4)rr
)rNrOr#�sqrtrIrWrQrPrRrSrTrU)r?rrr�testSqrt�szMathTests.testSqrtc
Cs|jttj�|jdtjd�d�|jdtjtjd�d�|jdtjtjd�d�yB|jtjtjt���|jtjtjt	���Wn4|jt
tjt�|jt
tjt	�YnX|jtjtjt���dS)Nztan(0)rz	tan(pi/4)rrz
tan(-pi/4)rM)rNrOr#ZtanrIrJrSrTrQrRrPrU)r?rrr�testTan�s#$#zMathTests.testTancCs�|jttj�|jdtjd�d�|jdtjd�tjd�d�|jdtjt�d�|jdtjt�d�|jtjtjt	���dS)	Nztanh(0)rztanh(1)+tanh(-1)rz	tanh(inf)z
tanh(-inf)rMrM)
rNrOr#�tanhrIrQrRrSrTrU)r?rrr�testTanh�s)zMathTests.testTanh�TANH_PRESERVES_ZERO_SIGNrz,system tanh() function doesn't copy the signcCsN|jtjd�d�|jtjdtjd��tjdd��dS)Ngg�?g�g�g�g�)rWr#r�rj)r?rrr�testTanhSign�szMathTests.testTanhSigncCs�|jtjd�d�|jtjd�d�|jttjd��t�|jttjd��t�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�Gdd	�d	t�}Gd
d�dt�}|jtj|��d�|jttj�|jttjdd
�|jttj|��dS)Nrg�?g����?g�!��?rg-���?Y@rsc@seZdZdd�ZdS)z'MathTests.test_trunc.<locals>.TestTrunccSsdS)Nr�r)r?rrr�	__trunc__�sz1MathTests.test_trunc.<locals>.TestTrunc.__trunc__N)rBrCrDr�rrrr�	TestTrunc�sr�c@seZdZdS)z)MathTests.test_trunc.<locals>.TestNoTruncN)rBrCrDrrrr�TestNoTrunc�sr�r�r
rMrMg��rMg�����rMg�!��rg-���?Y�i����)rWr#Ztruncrgrf�objectrNrO)r?r�r�rrr�
test_trunc�s zMathTests.test_trunccCs�|jtjd��|jtjd��|jtjd��|jtjd��|jtjtd���|jtjtd���|jtjtd���dS)Ngg�?rrz-infg�g�)rSr#Zisfinite�assertFalser.)r?rrr�testIsfinite�szMathTests.testIsfinitecCs�|jtjtd���|jtjtd�d��|jtjtd���|jtjd��|jtjd��dS)Nrrgg�?)rSr#rTr.r�)r?rrr�	testIsnan�s
 zMathTests.testIsnancCs�|jtjtd���|jtjtd���|jtjd��|jtjd��|jtjtd���|jtjd��|jtjd��dS)Nrz-infg�rgg�?g�)rSr#r$r.r�)r?rrr�	testIsinfszMathTests.testIsinfcCs|jtjtj��dS)N)rSr#rTr)r?rrr�test_nan_constant
szMathTests.test_nan_constantcCsc|jtjtj��|jtjd�|jtjtd��|jtjtd��dS)Ngrz-inf)rSr#r$rZ
assertGreaterrWr.)r?rrr�test_inf_constantszMathTests.test_inf_constantzrequires verbose modecCs�ytjd�}Wn|jd�YnX|dkrD|jd�ytjd�}Wntk
rkYnX|jd�ytjd	�}Wntk
r�YnX|jd�dS)
Niʚ;z6underflowing exp() should not have raised an exceptionrz)underflowing exp() should have returned 0z.overflowing exp() didn't trigger OverflowErrorg�?z sqrt(-1) didn't raise ValueErrori6e�g�)r#r8rGrvr�rP)r?r
rrr�test_exceptionss 



zMathTests.test_exceptionscCs*x#tt�D]\}}}}}}}|dks
|dks
|rIq
|d
krXq
tt|�}y||�}	Wn�tk
r�}
z3dd|
jd|||f}|j|�WYdd}
~
Xn6tk
rdd|||f}|j|�YnX|jd	|||f|	|�q
WdS)Ng�rect�polarz"Unexpected ValueError: %s
        zin test %s:%s(%r)
rzUnexpected OverflowError in ztest %s:%s(%r)
z	%s:%s(%r))r�r�)	r<�	test_file�getattrr#rPrdrGrvrI)r?r4r5�arZaiZerZeir9�funcr~�exc�messagerrr�
test_testfile=s"(
zMathTests.test_testfilecCsd}g}x�tt�D]�\}}}}}tt|�}d|ksUd|kr^d}nd|krpd}y||�}	Wn/tk
r�d}	Yntk
r�d}	YnXd}
t|	t�r�t|t�r�tj|�r�tj|	�r�qtj|�r�tj|	�r�|dkrAt	||	dd	d
d	�}
n3|dkrbt
||	d�}
nt
||	d
�}
|
dkr�qt|	t�r�t|t�r�|	|kr�q|j|||||	�}|
dk	r�|dj|
�7}|j
|�qW|r|jddj|��dS)Nz${}:{}({!r}): expected {!r}, got {!r}Zinvalidzdivide-by-zerorPZoverflowrvZlgammar&g�+�����<r'Zerfci�rz ({})zFailures in test_mtestfile:
  z
  )r:�math_testcasesr�r#rPrv�
isinstancer.rTr)r�strrr�rG�join)r?Zfail_fmtZfailuresr4r5r6rr9r�rZaccuracy_failureZfail_msgrrr�test_mtestfileTsL"	


 	zMathTests.test_mtestfileN)>rBrCrDrIrLrVrXrYrZr\r]r_rirrkrlrnrorprqrurZcpython_onlyrwr|r}r��unittestZskipIf�HAVE_DOUBLE_ROUNDINGr�r�r�r�r�r�r�Zrequires_mac_verr�r�r�r�r�r�r�r�r�r��	sysconfig�get_config_varr�r�r�r�r�r�r�Z
skipUnlessrr�r�r�rrrrrE�sj		
			="		Y+ !�
		
		 rEc@s�eZdZejZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �IsCloseTestscOs3|j|j||||�dd||f�dS)N�msgz%s and %s should be close!)rS�isclose)r?r�r�rd�kwargsrrr�
assertIsClose�szIsCloseTests.assertIsClosecOs3|j|j||||�dd||f�dS)Nr�z%s and %s should not be close!)r�r�)r?r�r�rdr�rrr�assertIsNotClose�szIsCloseTests.assertIsNotClosecOs1x*|D]"\}}|j||||�qWdS)N)r�)r?�examplesrdr�r�r�rrr�assertAllClose�szIsCloseTests.assertAllClosecOs1x*|D]"\}}|j||||�qWdS)N)r�)r?r�rdr�r�r�rrr�assertAllNotClose�szIsCloseTests.assertAllNotClosecCsd|jt��|jdddd�WdQRX|jt��!|jdddddd�WdQRXdS)Nr�rel_tolg0��.�++�abs_tolg _�Bg0��.�+�g _��)rNrPr�)r?rrr�test_negative_tolerances�sz%IsCloseTests.test_negative_tolerancescCs5d
ddd
ddg}|j|ddd	d�dS)N�@�N���@i�;����90���@��NFr�r�)r�r�)r�r�)rr)rr��)rr)rr)r�)r?Zidentical_examplesrrr�test_identical�s	zIsCloseTests.test_identicalcCs9d
d
dg}|j|dd�|j|dd�dS)N��חArg:�0�yE>g��n�yE>�	ѭ��?�fN�ӭ��?r�g��&�.>��חA)rr
�:�0�yE�縦n�yE�)rr)rr	)r�r�)r?Zeight_decimal_places_examplesrrr�test_eight_decimal_places�s
	z&IsCloseTests.test_eight_decimal_placescCs9dd
dg}|j|dd�|j|dd�dS)
N��&�.>�gu�?j�/� r�g�������?r�g:�0�yE>)rr��&�.�)rr�u�?j�/ʠ)rr)r�r�)r?Znear_zero_examplesrrr�test_near_zero�s
	zIsCloseTests.test_near_zerocCsP|jtt�|jttdd�|jtt�|jttdd�dS)Nr�g)r�rQrR)r?rrr�test_identical_infinite�sz$IsCloseTests.test_identical_infinitecCswttftdfdtfttfttfttftdfdtftdfdtfg
}|j|dd�dS)Ng0��.�++g�?g������r�g�������?)rUrQrRr�)r?Znot_close_examplesrrr�test_inf_ninf_nan�s									zIsCloseTests.test_inf_ninf_nancCsHd
d
dg}|j|dd�dddg}|j|dd�dS)N��?g333333@gY��n�r�g��?������?�Zb���ti�Tb���ti)rr�333333��333333�)rr�Y��n���Y��n��)rr)rr)rr)rr)r�r�)r?Zzero_tolerance_close_examplesZ!zero_tolerance_not_close_examplesrrr�test_zero_tolerance�s		z IsCloseTests.test_zero_tolerancecCs|jddgdd�dS)N�	rrr�g�������?)rrr)rrr)r�)r?rrr�test_asymmetry�szIsCloseTests.test_asymmetrycCs6dd	g}|j|dd�|j|dd�dS)
N������[��[r�g:�0�yE>g��&�.>)r!r")r#r$)r�r�)r?Zinteger_examplesrrr�
test_integers�s	zIsCloseTests.test_integerscCsddlm}|d�|d�f|d�|d�f|d�|d�fg}|j|d	d
�|j|d	d�dS)Nr)�Decimalz
1.00000001z1.0z1.00000001e-20z1.0e-20z1.00000001e-100z1.0e-100r�g:�0�yE>g��&�.>)�decimalr&r�r�)r?r&Zdecimal_examplesrrr�
test_decimals�szIsCloseTests.test_decimalscCs\ddlm}|dd�d|d�fg}|j|dd�|j|dd�dS)Nr)�Fractionri�r�g:�0�yE>g��&�.>)Z	fractionsr)r�r�)r?r)Zfraction_examplesrrr�test_fractions�s"zIsCloseTests.test_fractionsN)rBrCrDr#r�r�r�r�r�r�rr
rrrrr r%r(r*rrrrr��s 	


r�cCsiddlm}tj�}|jtjt��|jtjt��|j|d��t|�dS)Nr)�DocFileSuitezieee754.txt)	Zdoctestr+r�Z	TestSuiteZaddTestZ	makeSuiterEr�r)r+Zsuiterrr�	test_main	sr,).Ztest.supportrrrZtestrr�r#�os�platformr�rr�rFr.rUrQrRr
r�r�rB�argv�file�__file__�path�dirname�curdirZtest_dirr�r�r�rrrrr"r)r:r<r�r=ZTestCaserEr�r,rrrr�<module>sJ!����x