Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_math.cpython-34.pyo

�
g f���@s�ddlmZmZmZddlmZddlZddlZddlZddl	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"ej(�Z)d#d$�Z*edkr�e*�ndS)%�)�run_unittest�verbose�requires_IEEE_754)�supportNg�h㈵��>�nan�infz-infg��7y�ACg�):��@��__main__zmath_testcases.txtzcmath_testcases.txtcCs@tjdtjd|��d}|dkr<|d}n|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/python34/lib64/python3.4/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|krD|d|jd��}n|j�sVqn|jd�\}}|j�\}}}|j�}|d}	|dd�}
||t|�t|	�|
fVqWWdQXdS)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>qn|jd�\}}|j�\}}}}|j�}	|	d|	d}
}|	dd�}||t|�t|�t|
�t|�|fVqWWdQXdS)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�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Ze
ejed)�d*d+���Zd,d-�Zd.d/�Zd0d1�Zd2d3�Ze
d4d5��Z e
e!j"d6d7�d8d9���Z#d:d;�Z$d<d=�Z%d>d?�Z&d@dA�Z'dBdC�Z(dDdE�Z)dFdG�Z*dHdI�Z+dJdK�Z,e
eje-j.dL�dMkdN�dOdP���Z/dQdR�Z0dSdT�Z1dUdV�Z2dWdX�Z3ej4e5dY�dZd[��Z6e
d\d]��Z7e
d^d_��Z8d`S)a�	MathTestscCs7t||�tkr3|jd|||f�ndS)Nz%s returned %r, expected %r)r�eps�fail)�self�name�valuerrrr�ftest�s	zMathTests.ftestcCs0|jdtjd�|jdtjd�dS)N�pigJ�M�!	@�egB�
�@)rCr#rDrE)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#ZacosrCrD�
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�?rG)rHrIr#ZacoshrCrJ�assertEqualrKrLrMrNrO)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)rG)rHrIr#ZasinrCrDrJrKrLrMrNrO)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)rGg'�ya64�)rHrIr#ZasinhrCrQrKrLrMrNrO)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)rG)rHrIr#�atanrCrDrKrLrMrNrO)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��rG)rHrIr#rUrCZatanhrJrKrLrMrNrO)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.)rGrGgffffff�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�)rHrIr#Zatan2rCrDrLrQrKrMrNrO)r@rrr�	testAtan2�sf''&&""""###"*&&&&&"+'''''""&&"#''"""""""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__Esz-MathTests.testCeil.<locals>.TestCeil.__ceil__N)�__name__�
__module__�__qualname__r[rrrr�TestCeilDsr_c@seZdZdS)z&MathTests.testCeil.<locals>.TestNoCeilN)r\r]r^rrrr�
TestNoCeilGsr`zceil(TestCeil())rZcWs|S)Nr)�argsrrr�<lambda>Msz$MathTests.testCeil.<locals>.<lambda>g�g�rGg��rG)	rHrIr#ZceilrQ�int�typerCr[)r@r_r`�trrr�testCeil7s 	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)NrrZg�?grXg@g@g@i���g�g�g�g�g�g�g�g�)rQr#�copysignrHrIrKrLrMrNrOr$r)r@rrr�testCopysignQs0"""""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)rG)rHrIr#ZcosrCrDrMrNrKrLrJrO)r@rrr�testCosss$##
zMathTests.testCoscCs�|jttj�|jdtjd�d�|jdtjd�dtjd�dd�|jtjt�t�|jtjt�t�|jtj	tjt
���dS)Nzcosh(0)rrzcosh(2)-2*cosh(1)**2r
rG)rHrIr#�coshrCrQrKrLrMrNrO)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�)rHrIr#ZdegreesrCrD)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)grG)rHrIr#r8rCrErQrKrLrMrNrO)r@rrr�testExp�s#zMathTests.testExpcCsk|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�dS)Nzfabs(-1)rzfabs(0)rzfabs(1)rG)rHrIr#ZfabsrC)r@rrr�testFabs�szMathTests.testFabscCs/|jtjd�d�|jtjd�d�d}xxtdd�D]g}||9}|jtj|�|�|jtjt|��|�|jtj|�t|��qHW|jttjd�|jttjd�|jttjtj�|jt	tjt
jd�|jt	tjd�dS)	Nrrgi�g�?g\�n��TrGg�)rQr#Z	factorialrr.r"rHrJrD�
OverflowError�sys�maxsize)r@Ztotalr!rrr�
testFactorial�s
#zMathTests.testFactorialcCs�|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)NrZr)r@rrr�	__floor__�sz0MathTests.testFloor.<locals>.TestFloor.__floor__N)r\r]r^rsrrrr�	TestFloor�srtc@seZdZdS)z(MathTests.testFloor.<locals>.TestNoFloorN)r\r]r^rrrr�TestNoFloor�sruzfloor(TestFloor())rZcWs|S)Nr)rarrrrb�sz%MathTests.testFloor.<locals>.<lambda>g�rGg�rGg�����g��Nݯ��g��Nݯ��)	rHrIr#ZfloorrQrcrdrCrs)r@rtrurerrr�	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)�
rgz
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�)rHrIr#ZfmodrCrMrNrOrJrKrLrQ)r@rrr�testFmod�s("""zMathTests.testFmodcs��jttj��fdd�}|dtjd�d
�|dtjd�d�|dtjd�d�|d	tjd
�d��jtjt�dt��jtjt�dt��jtjtjt	�d��dS)Ncs\||\}}\}}t||�tks;||krX�jd|||f�ndS)Nz%s returned %r, expected %r)rr>r?)rA�resultr�mantr8ZemantZeexp)r@rr�	testfrexp�s"	z&MathTests.testFrexp.<locals>.testfrexpz	frexp(-1)r��?zfrexp(0)rzfrexp(1)zfrexp(2)r
rG��)r~r)rr)r}r)r}r
)
rHrIr#�frexprQrKrLrMrNrO)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_infocs"d\}}x�|D]y}tj|�\}}ttj|���|�}}||krt|||K}|}n|||K}||7}qWtttt|���d��|�}|dkrd|d>}|d|t||@o�|d|d@�}||7}ntj||�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
rrX)rr)	r#rrc�ldexpr%�len�binr�bool)�iterableZtmantZtexpr
r{r8�tail�h)�etiny�mant_digrr�msums
#	-.
z MathTests.testFsum.<locals>.msumgg}Ô%�I�Tg�?g0��.�++g�d~�QJg@�5g�?�6�dg$@g(@g@g@cSsg|]}d|�qS)g�?r)�.0rrrr�
<listcomp>)s	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�1s	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����;rx��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���)rpr�r��min_exprr.�fromhex�	enumerater#Zfsumror?rJrQr�r�r��append)r@r�r�Ztest_valuesr!�valsr�actualr�r�r��j�s�vr)r�r�r�testFsum�sT	
	#
	
	

zMathTests.testFsumcCs	|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)rXr�g�?g@g�)rHrIr#ZhypotrCrQrOrKrLrMrN)r@rrr�	testHypotNs"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���rxr�r�(rGrGrvg�i���g�i���g�i+���i��ld(	l F�x:^Vl	�O�z��p�cg�g�g�g�g�g�g�)rHrIr#r�rCrorQrKrLrMrNrO)r@rrrr�	testLdexpYs6"#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�zlog(10**40, 10)rxr�zlog(10**40, 10**20)rz
log(10**1000)i�gO�+��@g�?rGl	�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)
rHrIr#�logrCrErJrLrQrKrMrNrO)r@rrr�testLogys#zMathTests.testLogcCsE|jttj�d}|jtj|�tjt|���dS)Nr
�Zl)rHrIr#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��)
rHrIr#�log2rQrJrLrMrNrO)r@rrr�testLog2�szMathTests.testLog2rxr�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���)rrQ)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)rxzlog10(10**1000)i�g@�@g�?rGl�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)
rHrIr#Zlog10rCrJrLrQr�rKrMrNrO)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||�r\�jd|||f�ndS)Nz%s returned %r, expected %r)rr>r?)rArzrZv1Zv2Ze1Ze2)r@rr�testmodf�s&	z$MathTests.testModf.<locals>.testmodfz	modf(1.5)g�?��?��?z
modf(-1.5)grr)r�r�g������)r�r�g�)
rHrIr#ZmodfrQrKrLrOrMrN)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�?rGg�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�)rHrIr#�powrCrQrKrLrMrNrOrJ)r@rrr�testPow�s�""""""""zMathTests.testPowcCs}|jttj�|jdtjd�tj�|jdtjd�tjd�|jdtjd	�tjd�dS)
Nzradians(180)�zradians(90)r�r
zradians(-45)�-ri���)rHrIr#ZradiansrCrD)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)rG)rHrIr#ZsinrCrDrMrNrKrLrJrO)r@rrr�testSincs#$#
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)rGrG)rHrIr#ZsinhrCrjrQrKrLrMrNrO)r@rrr�testSinhps1)zMathTests.testSinhcCs�|jttj�|jdtjd�d�|jdtjd�d�|jdtjd�d�|jtjt�t�|jttjt�|j	tj
tjt���dS)Nzsqrt(0)rzsqrt(1)rzsqrt(4)rr
)rHrIr#�sqrtrCrQrKrJrLrMrNrO)r@rrr�testSqrtyszMathTests.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)rG)rHrIr#ZtanrCrDrMrNrKrLrJrO)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)rGrG)
rHrIr#�tanhrCrKrLrMrNrO)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�)rQr#r�rg)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@r�c@seZdZdd�ZdS)z'MathTests.test_trunc.<locals>.TestTrunccSsdS)N�r)r@rrr�	__trunc__�sz1MathTests.test_trunc.<locals>.TestTrunc.__trunc__N)r\r]r^r�rrrr�	TestTrunc�sr�c@seZdZdS)z)MathTests.test_trunc.<locals>.TestNoTruncN)r\r]r^rrrr�TestNoTrunc�sr�r�r
rGrGg��rGg�����rGg�!��rg-���?Y�i����)rQr#Ztruncrdrc�objectrHrI)r@r�r�rrr�
test_trunc�s zMathTests.test_trunccCs�|jtjd��|jtjd��|jtjd��|jtjd��|jtjtd���|jtjtd���|jtjtd���dS)Ngg�?rrz-infg�g�)rMr#Zisfinite�assertFalser.)r@rrr�testIsfinite�szMathTests.testIsfinitecCs�|jtjtd���|jtjtd�d��|jtjtd���|jtjd��|jtjd��dS)Nrrgg�?)rMr#rNr.r�)r@rrr�	testIsnan�s
 zMathTests.testIsnancCs�|jtjtd���|jtjtd���|jtjd��|jtjd��|jtjtd���|jtjd��|jtjd��dS)Nrz-infg�rgg�?g�)rMr#r$r.r�)r@rrr�	testIsinf�szMathTests.testIsinfzrequires verbose modecCs�ytjd�}Wn|jd�YnX|dkrG|jd�nytjd�}Wntk
rnYnX|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#r8r?ror�rJ)r@r
rrr�test_exceptions�s 


zMathTests.test_exceptionscCs0x)tt�D]\}}}}}}}|dks
|dks
|rLq
n|d
kr^q
ntt|�}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#rJrar?rorC)r@r4r5�arZaiZerZeir9�funcrz�exc�messagerrr�
test_testfile�s"(
zMathTests.test_testfilecCs:d}g}xtt�D]�\}}}}}tt|�}d|ksUd|kr^d}nd|krsd}ny||�}	Wn/tk
r�d}	Yntk
r�d}	YnXd}
t|	t�r�t|t�r�tj|�r�tj|	�r�qntj|�r�tj|	�r�|dkrGt	||	dd	d
d	�}
n3|dkrht
||	d�}
nt
||	d
�}
|
dkr�qq�q�nt|	t�r�t|t�r�|	|kr�qq�n|j|||||	�}|
dk	r|dj|
�7}n|j
|�qW|r6|jddj|��ndS)Nz${}:{}({!r}): expected {!r}, got {!r}Zinvalidzdivide-by-zerorJZoverflowroZlgammar&g�+�����<r'Zerfci�rz ({})zFailures in test_mtestfile:
  z
  )r:�math_testcasesr�r#rJro�
isinstancer.rNr)r�strrr�r?�join)r@Zfail_fmtZfailuresr4r5r6rr9r�rZaccuracy_failureZfail_msgrrr�test_mtestfilesL"		


 		zMathTests.test_mtestfileN)9r\r]r^rCrFrPrRrSrTrVrWrYrfrrhrirkrlrmrnrrrwryr��unittestZskipIf�HAVE_DOUBLE_ROUNDINGr�r�r�r�r�r�rZrequires_mac_verr�r�r�r�r�r�r�r�r�r��	sysconfig�get_config_varr�r�r�r�r�Z
skipUnlessrr�r�r�rrrrr=�sb		
			="		Y !�
		
	 r=cCsSddlm}tj�}|jtjt��|j|d��t|�dS)Nr)�DocFileSuitezieee754.txt)Zdoctestr�r�Z	TestSuiteZaddTestZ	makeSuiter=r)r�Zsuiterrr�	test_mainKs
r�)+Ztest.supportrrrZtestrr�r#�os�platformrprr�r>r.rOrKrLr
�yr�r\�argv�file�__file__�path�dirname�curdirZtest_dirr�r�r�rrrrr"r)r:r<ZTestCaser=r�rrrr�<module>sF!����