o
    HXhj                    @   s  d dl mZ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 d	kZed
kr^ejd  ZneZe
j !ephe
j"Z#e
j $e#dZ%e
j $e#dZ&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,dd Z-d+ddZ.G dd  d Z/G d!d" d"e0Z1G d#d$ d$e2Z3G d%d& d&ej4Z5G d'd( d(ej4Z6d)d* Z7ed
kre7  dS dS ),    )run_unittestverboserequires_IEEE_754)supportNgh㈵>naninf-inf) 7yACg):@g7yAC__main__zmath_testcases.txtzcmath_testcases.txtc                 C   s0   	 t dt d| d }|dk r|d  }|S )Nz<qz<dr   l            )structunpackpack)xn r   8/opt/python-3.10.19/usr/lib/python3.10/test/test_math.pyto_ulps'   s
   

r   c                 C   s   	 | rdt | | d @  S dS )N   r   )count_set_bits)r   r   r   r   r   M   s   r   c                 C   sB   	 ||  d? }|sdS |dkr| S | | dB }t | |t || S Nr   )partial_product)startstopZ
numfactorsZmidr   r   r   r   Q   s   r   c                 C   sb   	 d }}t t|  D ]}|t| |d ? d dB | |? d dB 9 }||9 }q|| t|  > S r   )reversedrange
bit_lengthr   r   )r   innerZouterir   r   r   py_factorial_   s   *
r   c                 C   sJ   	 t t| t| }t | | }||ks||krd S d}|||||S )NzAerror = {:.3g} ({:d} ulps); permitted error = {:.3g} or {:d} ulps)absr   format)expectedgotulp_tolabs_tolZ	ulp_errorZ	abs_errorfmtr   r   r   ulp_abs_checkj   s   r&   c                 c   s    	 t | ddH}|D ]<}d|v r|d |d }| sq|d\}}| \}}}| }|d }	|dd  }
||t|t|	|
fV  qW d    d S 1 sSw   Y  d S )Nutf-8encoding--->r   r   )openindexstripsplitfloat)fnamefplinelhsrhsidfnarg
rhs_piecesexpflagsr   r   r   parse_mtestfile|   s    "r<   c              	   c   s    	 t | ddL}|D ]@}|ds| sq|d\}}| \}}}}| }	|	d |	d }
}|	dd  }||t|t|t|
t||fV  qW d    d S 1 sWw   Y  d S )Nr'   r(   r*   r+   r   r      )r,   
startswithr.   r/   r0   )r1   r2   r3   r4   r5   r6   r7   Zarg_realZarg_imagr9   Zexp_realZexp_imagr;   r   r   r   parse_testfile   s$   "r?              c                 C   s   	 || krd S d}t | trt |trt|}nt |tr&t | tr&t| } t | trOt |trOt| r=t|r=d }nt| sGt|rHnt| |||}|d urdd}|| |}|d|7 }|S d S )Nz	not equalzexpected {!r}, got {!r}z ({}))
isinstancer0   intmathisnanisinfr&   r    )r!   r"   r#   r$   failurefail_fmtZfail_msgr   r   r   result_check   s(   
rI   c                   @      e Zd Zdd Zdd ZdS )	FloatLikec                 C   
   || _ d S NvalueselfrO   r   r   r   __init__      
zFloatLike.__init__c                 C      | j S rM   rN   rQ   r   r   r   	__float__      zFloatLike.__float__N)__name__
__module____qualname__rR   rV   r   r   r   r   rK          rK   c                   @      e Zd ZdS )IntSubclassNrX   rY   rZ   r   r   r   r   r]          r]   c                   @   rJ   )MyIndexablec                 C   rL   rM   rN   rP   r   r   r   rR      rS   zMyIndexable.__init__c                 C   rT   rM   rN   rU   r   r   r   	__index__   rW   zMyIndexable.__index__NrX   rY   rZ   rR   ra   r   r   r   r   r`      r[   r`   c                   @   s  e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zedd Zdd ZeejdkoCe dv ddd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zejd*d+ Zd,d- Zd.d/ Zd0d1 Z eee!d2d3d4 Z"d5d6 Z#d7d8 Z$eee!d9d:d; Z%d<d= Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,edJdK Z-ee.dLddMdN Z/dOdP Z0dQdR Z1dSdT Z2dUdV Z3edWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9edcdd Z:dedf Z;dgdh Z<didj Z=dkdl Z>edmdn Z?edodp Z@eAeBdqdrds ZCedtdu ZDedvdw ZEdxdy ZFdzd{ ZGd|d} ZHed~d ZIedd ZJdd ZKdd ZLdd ZMdS )	MathTestsr@   rA   c                 C   s2   	 t ||||}|d ur| d|| d S d S )Nz{}: {})rI   failr    )rQ   namer"   r!   r#   r$   rG   r   r   r   ftest   s
   zMathTests.ftestc                 C   s8   |  dtjd |  dtjd | tjdtj  d S )Npig-DT!	@egiW
@r=   )rf   rD   rg   rh   assertEqualtaurU   r   r   r   testConstants   s   zMathTests.testConstantsc                 C   s   |  ttj | dtdtj | dtdtjd  | dtdd |  ttjt |  ttjt |  ttjdt	  |  ttjdt	  | 
ttt d S )Nzacos(-1)zacos(0)r   r=   zacos(1)r   )assertRaises	TypeErrorrD   acosrf   rg   
ValueErrorINFNINFeps
assertTruerE   NANrU   r   r   r   testAcos  s   zMathTests.testAcosc                 C   s   |  ttj | dtdd | dtdd |  ttjd |  ttjd | ttt |  ttjt | 	t
tt d S )Nzacosh(1)r   r   zacosh(2)r=   g5qB?rl   )rm   rn   rD   acoshrf   rp   ri   rq   rr   rt   rE   ru   rU   r   r   r   	testAcosh  s   zMathTests.testAcoshc                 C   s   |  ttj | dtdtj d  | dtdd | dtdtjd  |  ttjt |  ttjt |  ttjdt	  |  ttjdt	  | 
ttt d S )Nzasin(-1)rl   r=   zasin(0)r   zasin(1)r   )rm   rn   rD   asinrf   rg   rp   rq   rr   rs   rt   rE   ru   rU   r   r   r   testAsin  s   zMathTests.testAsinc                 C   s   |  ttj | dtdd | dtdd | dtdd | ttt | ttt | t	tt
 d S )	Nzasinh(0)r   zasinh(1)r   g'ya64?z	asinh(-1)rl   g'ya64)rm   rn   rD   asinhrf   ri   rq   rr   rt   rE   ru   rU   r   r   r   	testAsinh"  s   zMathTests.testAsinhc                 C   s   |  ttj | dtdtj d  | dtdd | dtdtjd  | dtttjd	  | d
tttj d	  | t	tt
 d S )Nzatan(-1)rl      zatan(0)r   zatan(1)r   z	atan(inf)r=   z
atan(-inf))rm   rn   rD   atanrf   rg   rq   rr   rt   rE   ru   rU   r   r   r   testAtan+  s   zMathTests.testAtanc                 C   s   |  ttj | dtdd | dtdd | dtdd |  ttjd	 |  ttjd
 |  ttjt |  ttjt | 	t
tt d S )Nzatanh(0)r   z
atanh(0.5)      ?gz?zatanh(-0.5)      gzr   rl   )rm   rn   rD   r~   rf   atanhrp   rq   rr   rt   rE   ru   rU   r   r   r   	testAtanh4  s   zMathTests.testAtanhc                 C   s  |  ttj | dtddtj d  | dtddtj d  | dtddd | d	tddtjd  | d
tddtjd  | dtdttj | dtddtj | dtddtj | tddd | tddd | tdtd | 	t
tdt | dtdttj  | dtddtj  | dtddtj  | tddd | tddd | tdtd | 	t
tdt | dttttjd d  | dttdtjd  | dttdtjd  | dttdtjd  | dttdtjd  | dttttjd  | 	t
ttt | dttttj d d  | dttdtj d  | dttdtj d  | dttdtj d  | d ttdtj d  | d!ttttj d  | 	t
ttt | d"tdttj | d#tddtjd  | d$tddtjd  | tdtd | 	t
tdt | d%tdttj  | d&tddtj d  | d'tddtj d  | tdtd | 	t
tdt | 	t
ttt | 	t
ttd | 	t
ttd | 	t
ttd | 	t
ttd | 	t
ttt | 	t
ttt d S )(Nzatan2(-1, 0)rl   r   r=   zatan2(-1, 1)r   r}   zatan2(0, 1)zatan2(1, 1)zatan2(1, 0)zatan2(0., -inf)rA   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.))rm   rn   rD   atan2rf   rg   rr   ri   rq   rt   rE   ru   rU   r   r   r   	testAtan2?  sf    "zMathTests.testAtan2c                 C   sf  |  ttj | tttd | tdd | tdd | tdd | tdd | tdd	 | td
d	 | tdd | tdd G dd d}G dd dt}G dd d}| t| d | t| d | ttdd |  ttj|  | }dd |_	|  ttj| |  ttj|d d S )Nr   r         ?      ?r=   r   r         rl         rA   r   c                   @      e Zd Zdd ZdS )z$MathTests.testCeil.<locals>.TestCeilc                 S      dS N*   r   rU   r   r   r   __ceil__     z-MathTests.testCeil.<locals>.TestCeil.__ceil__NrX   rY   rZ   r   r   r   r   r   TestCeil      r   c                   @   r   )z%MathTests.testCeil.<locals>.FloatCeilc                 S   r   r   r   rU   r   r   r   r     r   z.MathTests.testCeil.<locals>.FloatCeil.__ceil__Nr   r   r   r   r   	FloatCeil  r   r   c                   @   r\   )z&MathTests.testCeil.<locals>.TestNoCeilNr^   r   r   r   r   
TestNoCeil  r_   r   r   g     @E@+   c                  W      | S rM   r   argsr   r   r   <lambda>      z$MathTests.testCeil.<locals>.<lambda>)
rm   rn   rD   ceilri   rC   typer0   rK   r   )rQ   r   r   r   tr   r   r   testCeil|  s*   
zMathTests.testCeilc                 C   s  |  tddd |  tddd |  tddd |  tddd |  td	d
d | ttj |  tddd |  tdd
d |  ttdt |  ttd
t |  ttdt |  ttd
t |  tdtd |  tdtd |  tttt |  tttt |  tttt |  tttt | ttt	d | ttt	t | ttt	t | ttt	t	 | t
ttt	 |  ttdt	d d S )Nr   r   r   rA   ir   r         @      @r                @)ri   rD   copysignrm   rn   rq   rr   rt   rE   ru   rF   r   rU   r   r   r   testCopysign  s0   zMathTests.testCopysignc                 C   s   |  ttj | jdttj d dtdd | dtdd | jdttjd dtdd | dttjd	 z| ttt	 | ttt
 W n tyr   |  ttjt	 |  ttjt
 Y nw | ttt d S )
Nz
cos(-pi/2)r=   r   r   r$   zcos(0)z	cos(pi/2)zcos(pi)rl   )rm   rn   rD   cosrf   rg   ulprt   rE   rq   rr   rp   ru   rU   r   r   r   testCos  s   &$zMathTests.testCoswin32)ZARMZARM64zEWindows UCRT is off by 2 ULP this test requires accuracy within 1 ULPc                 C   s   |  ttj | dtdd | dtddtdd   d | ttt | ttt | t	tt
 d S )Nzcosh(0)r   r   zcosh(2)-2*cosh(1)**2r=   rl   )rm   rn   rD   coshrf   ri   rq   rr   rt   rE   ru   rU   r   r   r   testCosh  s   &zMathTests.testCoshc                 C   sr   |  ttj | dttjd | dttjd d | dttj d d | d	td
d
 d S )Nzdegrees(pi)g     f@zdegrees(pi/2)r=   g     V@zdegrees(-pi/4)r}   g     Fz
degrees(0)r   )rm   rn   rD   degreesrf   rg   rU   r   r   r   testDegrees  
   zMathTests.testDegreesc                 C   s   |  ttj | dtddtj  | dtdd | dtdtj | ttt | ttd | 	t
tt |  ttjd d S )	Nzexp(-1)rl   r   zexp(0)r   zexp(1)rA   @B )rm   rn   rD   r:   rf   rh   ri   rq   rr   rt   rE   ru   OverflowErrorrU   r   r   r   testExp  s   zMathTests.testExpc                 C   sN   |  ttj | dtdd | dtdd | dtdd d S )Nzfabs(-1)rl   r   zfabs(0)r   zfabs(1))rm   rn   rD   fabsrf   rU   r   r   r   testFabs  s   zMathTests.testFabsc                 C   s   |  tdd d}tddD ]}||9 }|  t|| |  t|t| q| ttjd | ttjdd   d S )Nr   r     rl   
   d   )ri   rD   	factorialr   r   rm   rp   )rQ   totalr   r   r   r   testFactorial  s   zMathTests.testFactorialc                 C   s   |  ttjd |  ttjd |  ttjd |  ttjd |  ttjtd |  ttjtd |  ttjd d S )N      @g@r   }Ô%I5z5.2)rm   rn   rD   r   decimalDecimalrU   r   r   r   testFactorialNonIntegers  s   z"MathTests.testFactorialNonIntegersc                 C   s(   |  ttjdd  |  ttjd d S )Nr   r   }Ô%IT)rm   r   rD   r   rn   rU   r   r   r   testFactorialHugeInputs  s   z!MathTests.testFactorialHugeInputsc                 C   sB  |  ttj | tttd | tdd | tdd | tdd | tdd | tdd | td	d
 G dd d}G dd dt}G dd d}| t| d | t| d | ttdd |  ttj|  | }dd |_	|  ttj| |  ttj|d d S )Nr   r   r   r   r   r   rl   r   r   c                   @   r   )z&MathTests.testFloor.<locals>.TestFloorc                 S   r   r   r   rU   r   r   r   	__floor__  r   z0MathTests.testFloor.<locals>.TestFloor.__floor__NrX   rY   rZ   r   r   r   r   r   	TestFloor  r   r   c                   @   r   )z'MathTests.testFloor.<locals>.FloatFloorc                 S   r   r   r   rU   r   r   r   r     r   z1MathTests.testFloor.<locals>.FloatFloor.__floor__Nr   r   r   r   r   
FloatFloor  r   r   c                   @   r\   )z(MathTests.testFloor.<locals>.TestNoFloorNr^   r   r   r   r   TestNoFloor  r_   r   r   g33333D@)   c                  W   r   rM   r   r   r   r   r   r   $  r   z%MathTests.testFloor.<locals>.<lambda>)
rm   rn   rD   floorri   rC   r   r0   rK   r   )rQ   r   r   r   r   r   r   r   	testFloor	  s&   
zMathTests.testFloorc                 C   s  |  ttj | dtddd | dtddd | dtddd	 | d
tddd | dtddd | dtddd | tttd	 | ttd	t | tttt |  ttjd	d |  ttjt	d	 |  ttjt
d	 |  ttjt	d | tdt	d | tdt	d | tdt
d | tdt
d | tddd | tdt
d d S )Nzfmod(10, 1)r   r   rA   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         )rm   rn   rD   fmodrf   rt   rE   ru   rp   rq   rr   ri   rU   r   r   r   testFmod(  s(   zMathTests.testFmodc                    s     ttj  fdd}|dtdd |dtdd |d	td
d |dtdd  ttd t  ttd t  ttt	d  d S )Nc                    sF   ||\}}\}}t || tks||kr! d| ||f  d S d S Nz%s returned %r, expected %rr   rs   rd   )re   resultr!   mantr:   ZemantZeexprU   r   r   	testfrexpA  s   
z&MathTests.testFrexp.<locals>.testfrexpz	frexp(-1)rl   )r   r   zfrexp(0)r   r   r   zfrexp(1)r   )r   r   zfrexp(2)r=   )r   r=   )
rm   rn   rD   frexpri   rq   rr   rt   rE   ru   )rQ   r   r   rU   r   	testFrexp>  s   zMathTests.testFrexpz2fsum is not exact on machines with double roundingc                    s.  ddl m} |j|j   fdd}g dfdgdfg ddfg dd	fg d
dfg ddfg ddfdd tddD tdfdd tddD tdfg ddfg ddfdd tdddD dg tdfg}d d tdD |fd!dtd"D d"  g d  f t|D ]9\}\}}zt	
|}W n% ty   | d#|||f  Y n ty   | d$|||f  Y nw | || qdd%lm}m}	m}
 td"D ]7}g d&d' }d}td(D ]}|	d| d) | }||7 }|| q|
| ||}| ||t	
| qd S )*Nr   )
float_infoc                    s   	 d\}}| D ]-}t |\}}tt || }}||kr*||| K }|}n||| K }||7 }qtttt|d   | }|dkrhd|d > }|d|  t||@ oa|d| d @  }||7 }t ||S )Nr   r=   r   r   r   )	rD   r   rC   ldexpmaxlenbinr   bool)iterableZtmantZtexpr   r   r:   tailh)etinymant_digr   r   msumc  s    
"(z MathTests.testFsum.<locals>.msumrA   )r   r   r   0.++gd~QJr   gd~Qr   )      @Cr   g      g?C)r   r         9g     @C)g     @Cr   r   g     @C)g?Cr   g      <g?Cc                 S   s   g | ]}d | qS r   r   .0r   r   r   r   
<listcomp>      z&MathTests.testFsum.<locals>.<listcomp>r   i  z0x1.df11f45f4e61ap+2c                 S   s   g | ]}d | | qS )r   r   r   r   r   r   r         z-0x1.62a2af1bd3624p-1)r	   r   gؗҜ<g7yAC)g7yACg?g7yAgc                 S   s,   g | ]}d | d |d   d |d   qS )r   2   4   r   r   r   r   r   r     s   , i  r=   g      z0x1.5555555555555p+970c                 S   s   g | ]}d | qS )g333333?r   r   r   r   r   r   r     r   c                    s    g | ]} |d    |  qS r   r   r   )termsr   r   r     s     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      r   )sysr   r   min_expr   r0   fromhexappend	enumeraterD   fsumr   rd   rp   ri   r   r   r   )rQ   r   r   test_valuesr   Zvalsr!   actualr   r   r   jsvr   )r   r   r   r   testFsumP  sn   







 

zMathTests.testFsumc                 C   sB  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}|| }|| }| |||| | |||| | || || | ||| | | ||| | | || || | || | | | || | | ql| | 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   rl   r      x   T          j9W    P)}    "o  `T"-    l   8P9cC/[N
S9bXl	   9@{wM275k )	 l   Z'^%#>;*Q!/61^f            ^@      U@)rD   gcdri   rm   rn   r`   )rQ   r  r   ycabr   r   r   testGcd  sN   zMathTests.testGcdc                 C   s  ddl m} ddlm} tj}tjtjtdt	dt
df}tt|d D ]}| ||d |  ttdd	 |d | D  q)| |d
dd | |ddd | ||d|dd | ||dd|dd|dd | |tdtdtdtdtd | |ddd | |dd | | d | dtd|d | |ddd|ddd | t |dd W d    n1 sw   Y  | t |ddd W d    n1 sw   Y  dtjjd  }| ttf |d| W d    n	1 sw   Y  | |tt | |dtt | |dtt | |dtt | |ttt | |ttt | |ttt | |ttt | |t tt | |t t t | |dt t | t|t | t|dt | t|td | t|dt | t|tt | t|t td }tdD ]}| t||g|  |t|  qtdD ]}	t d|	  }
| td |
 d|
 d|
  qd S )!Nr   r   Fractionr         @g @r   c                 s   s    | ]}|d  V  qdS )r=   Nr   )r   r  r   r   r   	<genexpr>  s    z&MathTests.testHypot.<locals>.<genexpr>g      (@r         *@r  r@      r  r   rA         %      %@r   r   r   r   r   皙?string皙@r   r   r   r}   )!r   r   	fractionsr  rD   hypotrh   rg   sqrtgammasinr   r   assertAlmostEqualsumri   r   r   rm   rn   r   r   
max_10_exprp   r   rq   ru   rr   rt   rE   	FLOAT_MAXisclose	FLOAT_MIN)rQ   r   r  r)  r   r   int_too_big_for_float	fourthmaxr   r:   scaler   r   r   	testHypot  sx   $$,


$zMathTests.testHypotz7hypot() loses accuracy on machines with double roundingc           	   
   C   s   t j}tj}tjdd}dD ]U\}}t|}t|}| j||||d6 t| t||d ||d  	 }W d    n1 sFw   Y  | 
|||| W d    n1 s^w   Y  qd S )Ni  )Z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   r  r=   )rD   r)  r   r   ZContextr0   r   subTestZlocalcontextr*  ri   )	rQ   r)  r   Zhigh_precisionr7  r8  r   r  zr   r   r   testHypotAccuracy&  s   
%
"zMathTests.testHypotAccuracyc                 C   s  ddl m} ddlm} tj}tj}| |ddd | |ddd td	D ]4}td
D ]-}t	dd t|D }t	dd t|D }| 
||||tdd t||D  q.q(| |g dg dd | |tg dtg dd | |ddd | |ddd | ||d|df|d|df|d | ||dd|ddf|dd|ddf|dd | |dd|d | |ddd | |ddd | d td |d!d" | d td |d"d! | |d#d$|d%d$ G d&d' d't	}	| ||	ddd | t |dd(d) W d    n	1 s-w   Y  | t |d W d    n	1 sGw   Y  | t |dd(d* W d    n	1 scw   Y  | t |dd W d    n	1 s~w   Y  | t |d+d W d    n	1 sw   Y  | t |d,d- W d    n	1 sw   Y  | t |dd. W d    n	1 sw   Y  | t |d/d0 W d    n	1 sw   Y  d1tjjd
  }
| ttf |d|
fd2 W d    n	1 sw   Y  | ttf |d2d|
f W d    n	1 s0w   Y  td3D ]}t t }}| ||f|ft||  q9td4d5dd6ttg}tj|d7d8D ]@}tj|d7d8D ]5}d9d: t||D }tttj|r| |||t qntttj |r| !t ||| qnqet"d; }tdD ].}|f| }d"| }| !t#||||t|  | !t#||||t|  qtdD ]+}t$d|  }d<| d7| f}d=}| t||d
|  | t||d
|  qd S )>Nr   r  r  )r   r   r   )r   r   r   r   )r   r=   r   )r}   r=   rl   	   r@   c                 s       | ]	}t d dV  qdS r@   Nr   uniformr   kr   r   r   r  t      z%MathTests.testDist.<locals>.<genexpr>c                 s   r=  r>  r@  rB  r   r   r   r  u  rD  c                 s   s     | ]\}}|| d  V  qdS )r   Nr   r   ZpxZqxr   r   r   r  x  s    )g      ,@r   )r   r   r   )   r   )r=   r!  rF  r   r=   rG  r  )TTFTF)TFTTFr   )g     *@g      )@g      
rA   r   r   )r   )rA   )r   r   r   )r   r   r   )r   r   r   c                   @   r\   )zMathTests.testDist.<locals>.TNr^   r   r   r   r   T  r_   rH  )r}   r@   r  )pq)r      r<  )r%  r&  r'  )r   r=   r   r}   )r@   r  r   )r}   r@   r  r   abcZxyzr   )r=   r      r"  r   r#  r   )repeatc                 S   s   g | ]\}}|| qS r   r   rE  r   r   r   r     r   z&MathTests.testDist.<locals>.<listcomp>r   r}   )rA   rA   )%r   r   r(  r  rD   distr*  ri   r   tupler-  r.  zipiterr   rm   rn   rp   r   r   r/  r   r   r   rr   rq   ru   	itertoolsproductanymaprF   rE   rt   r0  r1  r2  )rQ   DFrO  r*  r   r  rI  rJ  rH  r3  valuesZdiffsr4  r   r:   r5  r   r   r   testDiste  s   	".,
"

"&zMathTests.testDistc                 C   sD   |  t tddgg d W d    d S 1 sw   Y  d S )Nr   r=   )r   r}   r@   )rm   rp   rD   rO  rU   r   r   r   test_math_dist_leak  s   "zMathTests.test_math_dist_leakc              
   C   s.  t tdt tdd dd tddD  dd	 d
d g }|D ]9}| j|d) t|}| t|t | || | | 	||d |d   W d    n1 sUw   Y  q!| 
t td W d    n1 spw   Y  td}| t|t | |d td}| t|t | |d G dd dt}t|d}| t|t | |d | 
t t|d W d    n1 sw   Y  ddtddddg}|D ]3}| j|d" | 
t t| W d    n1 sw   Y  W d    n	1 sw   Y  qd S )Nr   iX> i(F c                 S   s(   g | ]}t d dD ]}d| | q	qS )i(   r=   )r   )r   rh   r   r   r   r   r     s   ( z'MathTests.testIsqrt.<locals>.<listcomp><   r   r   i'  r   i  rN   r   rl   TFr   c                   @   rJ   )z(MathTests.testIsqrt.<locals>.IntegerLikec                 S   rL   rM   rN   rP   r   r   r   rR     rS   z1MathTests.testIsqrt.<locals>.IntegerLike.__init__c                 S   rT   rM   rN   rU   r   r   r   ra     rW   z2MathTests.testIsqrt.<locals>.IntegerLike.__index__Nrb   r   r   r   r   IntegerLike  r[   r^  i  r   r  za stringz3.5y              @g      Y@r   )listr   r9  rD   isqrtassertIsr   rC   assertLessEqualZ
assertLessrm   rp   ri   objectr   r   rn   )rQ   r  rO   r  r^  Z
bad_valuesr   r   r   	testIsqrt  sX   



zMathTests.testIsqrtc                 C   sN  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 ]`}|| }|| }|| | }| |||| | |||| | || || | ||| | | ||| | | || || | || | | | || | | ql| | 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   rl   r   r  r  iY  r	  r
  iH  r  r  r  l    ,`aUx-xB:Vn
Ldbl   me%Y% l   };T^	 )r  l   |/Kr2 r  i7  r  r  )rD   lcmri   rm   rn   r`   )rQ   rf  r   r  r  r  r  dr   r   r   test_lcm  sP   zMathTests.test_lcmc              	   C   s6  |  ttj | dtddd | dtddd | dtddd | d	tddd
 |  ttjdd |  ttjdd | tddd | tddd | ttdt | ttdt | 	t
ttd ddddd fD ]}| tt| t | tt| t | td| d | td| d | td| d | td| d | 	t
tt|  |  ttjd| |  ttjd| | td|d | td|d | tt|t | tt|t | 	t
tt| qd S )Nz
ldexp(0,1)r   r   z
ldexp(1,1)r=   zldexp(1,-1)rl   r   zldexp(-1,1)r   r   r   r   irA   r      i+i l    d(	       Fx:^V r   r\  )rm   rn   rD   r   rf   r   ri   rq   rr   rt   rE   ru   rQ   r   r   r   r   	testLdexp<  s8   zMathTests.testLdexpc                 C   s  |  ttj | dtdtj d | dtdd | dttjd | dtdd	d
 | dtdd dd | dtdd dd	 | dtdd d |  ttjd |  ttjdd   |  ttjt | tt	t	 | 
ttt d S )Nzlog(1/e)r   rl   zlog(1)r   zlog(e)z	log(32,2)r  r=   r@   zlog(10**40, 10)r   r\  zlog(10**40, 10**20)rj  zlog(10**1000)r   gO+@r   )rm   rn   rD   logrf   rh   rp   rr   ri   rq   rt   rE   ru   rU   r   r   r   testLog\  s   zMathTests.testLogc                 C   sh   |  ttj ddd dd fD ]}| t|tt| q|  ttjd | ttt d S )Nr=   Z   i,  rl   )	rm   rn   rD   log1pr-  r0   rp   ri   rq   rk  r   r   r   	testLog1pl  s
   zMathTests.testLog1pc                 C   s   |  ttj | tdd | tdd | tdd | tdd d | tdd	 d
 | tdd d |  ttjd |  ttjt | ttt	 d S )Nr   rA   r=   r   r}   r   i  g     @   g      @i  g     @@r   )
rm   rn   rD   log2ri   rp   rr   rt   rE   ru   rU   r   r   r   testLog2s  s   zMathTests.testLog2r   c                 C   s8   dd t ddD }dd t ddD }| || d S )Nc                 S   s   g | ]}t t d |qS r   )rD   rs  r   r   r   r   r   r     s    z+MathTests.testLog2Exact.<locals>.<listcomp>r   rr  c                 S      g | ]}t |qS r   r0   r   r   r   r   r     r   )r   ri   )rQ   r  r!   r   r   r   testLog2Exact  s   zMathTests.testLog2Exactc                 C   s   |  ttj | dtdd | dtdd | dtdd | d	tdd
 d |  ttjd |  ttjdd
   |  ttjt | tt	t	 | 
ttt d S )Nz
log10(0.1)皙?rl   zlog10(1)r   r   z	log10(10)r   zlog10(10**1000)r   g     @@r   )rm   rn   rD   log10rf   rp   rr   ri   rm  rq   rt   rE   ru   rU   r   r   r   	testLog10  s   zMathTests.testLog10c                    s     ttj  fdd}|dtdd |dtdd  ttd	tf  ttd
tf tt} t	|d   t	|d  d S )Nc                    sJ   ||\}}\}}t || tkst || r# d| ||f  d S d S r   r   )re   r   r!   Zv1Zv2e1e2rU   r   r   testmodf  s   
z$MathTests.testModf.<locals>.testmodfz	modf(1.5)r   )r   r   z
modf(-1.5)r   )r   r   rA   r   r   r   )
rm   rn   rD   modfri   rq   rr   ru   rt   rE   )rQ   r}  Zmodf_nanr   rU   r   testModf  s   
zMathTests.testModfc                 C   s  |  ttj | dtddd | dtddd | dtddd | dtddd	 | ttdt | ttdt | tdtd
 | tdtd
 | t	tt
d | t	tdt
 | t	tdt
 | tdt
d | 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tjdd |  ttjdd |  ttjdd |  ttjdt | t	tdt
 | tttt | ttdt | ttdt | ttdt | ttdd
 | ttdd
 | ttdd | ttdd | ttdd | tttd | t	ttt
 | 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tjdd |  ttjdd |  ttjdd |  ttjdt | t	tdt
 | tttt | ttdt | ttdt | ttdt | ttdd
 | ttdd
 | ttdd | ttdd | ttdd | tttd | t	ttt
 | tdtd
 | tddd |  ttjdd | tddd
 | tddd
 | tddd
 | tddd
 |  ttjdd | tddd | tdtd
 | t	tdt
 | 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ddd
 | tt
dd
 | tddd
 | tddd
 | tt
dd
 |  ttjdd |  ttjdd | tdtd | tdtd | tdtt | tdtt | tdtt | tdtt | tdtd | tdtd | tdtt | tdtt | tdtd | tdtd | tdtd | tdtd | tdtt | tdtt | dtddd | d tddd! | d"tdd
d | d#tddd
 | d$tddd
 | d%tddd& | d'tddd( | d)t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)r=   z	pow(2,-1)rl   r   r   rA   r   r   r   r   g       r   r   r   g      .ggffffff?r%  ?rx  ggggffffffz	(-2.)**3.g       z	(-2.)**2.r   z	(-2.)**1.z	(-2.)**0.z
(-2.)**-0.z
(-2.)**-1.r   z
(-2.)**-2.g      ?z
(-2.)**-3.g      )rm   rn   rD   powrf   ri   rq   rr   rt   rE   ru   rp   rU   r   r   r   testPow  s   zMathTests.testPowc                 C   sr   |  ttj | dtdtj | dtdtjd  | dtdtj d  | d	td
d
 d S )Nzradians(180)   zradians(90)ro  r=   zradians(-45)ir}   z
radians(0)r   )rm   rn   rD   radiansrf   rg   rU   r   r   r   testRadiansB  r   zMathTests.testRadiansc              	      s  ddl m   fdd}g d}|D ]D}j|d4 | \}}}t|}t|}t|}	||||	 t||}
|
	 |		  W d    n1 sRw   Y  qtd}t
dd	D ]0}|dkriqb|| }t
d
D ] }|| }t||}
||||
 t| |}
|| ||
 qqqbtddddttfD ]}tt| t|t qdD ]}t|t| t|t| qtddddtfD ]q}t tt| W d    n1 sw   Y  t tt| W d    n	1 sw   Y  t t|d W d    n	1 s"w   Y  t t|d W d    n	1 s>w   Y  qd S )Nr   r  c                    s   	  |  | |}}} t|t|d  || | }|t| t|t|d krA|d t|d  d S d S )Nr=   )rc  r   ri   rC   )r   r  rZfxZfyfrr   r  rQ   r   r   validate_specM  s   z.MathTests.testRemainder.<locals>.validate_spec)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   rA   r   r   r   )r   r   rA   r   r   )r(  r  r9  r/   r0   r   rD   	remainderri   hexr   ru   rr   rq   assertIsNaNrm   rp   )rQ   r  Z	testcasesr  Zx_hexZy_hexZexpected_hexr   r  r!   r  Ztinyr   mrO   r   r  r   testRemainderI  s^   ;



	zMathTests.testRemainderc                 C   s   |  ttj | dtdd | dttjd d | dttj d d z| ttt | ttt	 W n t
y]   |  t
tjt |  t
tjt	 Y nw | ttt d S )Nzsin(0)r   z	sin(pi/2)r=   r   z
sin(-pi/2)rl   )rm   rn   rD   r,  rf   rg   rt   rE   rq   rr   rp   ru   rU   r   r   r   testSin  s   zMathTests.testSinc                 C   s   |  ttj | dtdd | dtdd tdd  d | dtdtd d | ttt | ttt | 	t
tt d S )Nzsinh(0)r   zsinh(1)**2-cosh(1)**2r   r=   rl   zsinh(1)+sinh(-1))rm   rn   rD   sinhrf   r   ri   rq   rr   rt   rE   ru   rU   r   r   r   testSinh  s   &zMathTests.testSinhc                 C   s   |  ttj | dtdd | dtdd | dtdd | ttt |  ttjd |  ttjt | 	t
tt d S )	Nzsqrt(0)r   zsqrt(1)r   zsqrt(4)r}   r=   rl   )rm   rn   rD   r*  rf   ri   rq   rp   rr   rt   rE   ru   rU   r   r   r   testSqrt  s   zMathTests.testSqrtc                 C   s   |  ttj | dtdd | dttjd d | dttj d d z| ttt | ttt	 W n   |  t
tjt |  t
tjt	 Y | ttt d S )Nztan(0)r   z	tan(pi/4)r}   r   z
tan(-pi/4)rl   )rm   rn   rD   tanrf   rg   rt   rE   rq   rr   rp   ru   rU   r   r   r   testTan  s   zMathTests.testTanc                 C   s   |  ttj | dtdd | jdtdtd dtdd | dttd | dttd | t	tt
 d S )	Nztanh(0)r   ztanh(1)+tanh(-1)r   rl   r   z	tanh(inf)z
tanh(-inf))rm   rn   rD   tanhrf   r   rq   rr   rt   rE   ru   rU   r   r   r   testTanh  s   zMathTests.testTanhc                 C   s8   |  tdd |  tdtdtdd d S )Nr   r   )ri   rD   r  r   rU   r   r   r   testTanhSign   s   
zMathTests.testTanhSignc                 C   sZ  |  tdd |  tdd |  ttdt |  ttdt |  tdd |  tdd |  tdd |  tdd |  tdd |  td	d
 G dd d}G dd dt}G dd d}|  t| d |  t| d | ttj | ttjdd | ttjtd | ttj|  d S )Nr   rl   r   r   g?gg!r   g-?Yic                   @   r   )z'MathTests.test_trunc.<locals>.TestTruncc                 S   r   N   r   rU   r   r   r   	__trunc__  r   z1MathTests.test_trunc.<locals>.TestTrunc.__trunc__NrX   rY   rZ   r  r   r   r   r   	TestTrunc  r   r  c                   @   r   )z(MathTests.test_trunc.<locals>.FloatTruncc                 S   r   r  r   rU   r   r   r   r    r   z2MathTests.test_trunc.<locals>.FloatTrunc.__trunc__Nr  r   r   r   r   
FloatTrunc  r   r  c                   @   r\   )z)MathTests.test_trunc.<locals>.TestNoTruncNr^   r   r   r   r   TestNoTrunc  r_   r  r  r=   g     7@)	ri   rD   truncr   rC   r0   rm   rn   rK   )rQ   r  r  r  r   r   r   
test_trunc  s&   zMathTests.test_truncc                 C   s   |  td |  td |  td |  td | ttd | ttd | ttd d S )NrA   r   r   r   r   r   r   )rt   rD   isfiniteassertFalser0   rU   r   r   r   testIsfinite$  s   zMathTests.testIsfinitec                 C   sx   |  ttd |  ttd |  ttdd  | ttd | td | td d S )Nr   z-nanr   rA   r   )rt   rD   rE   r0   r  rU   r   r   r   	testIsnan-  s   zMathTests.testIsnanc                 C   s   |  ttd |  ttd |  td |  td | ttd | td | td d S )Nr   r   g      g      r   rA   r   )rt   rD   rF   r0   r  rU   r   r   r   	testIsinf5  s   zMathTests.testIsinfc                 C   s   |  ttj d S rM   )rt   rD   rE   r   rU   r   r   r   test_nan_constant>     zMathTests.test_nan_constantc                 C   sJ   |  ttj | tjd | tjtd | tj td d S )NrA   r   r   )rt   rD   rF   r   ZassertGreaterri   r0   rU   r   r   r   test_inf_constantB  s   zMathTests.test_inf_constantzrequires verbose modec                 C   s   zt d}W n	   | d Y |dkr| d zt d}W n	 ty*   Y nw | d zt d}W n
 tyA   Y d S w | d d S )	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)rD   r:   rd   r   r*  rp   rQ   r   r   r   r   test_exceptionsN  s$   

zMathTests.test_exceptionsc              	   C   sd  dh}d }t jdkr&t d }zttt|d}W n	 ty%   Y nw d}g }tt	D ]s\}}}}	}
}}|	dks?|dkr@q.|dv rEq.|d urR|dk rR||v rRq.t
t|}d	|v s_d
|v rbd}
nd|v rhd}
z||}W n tyy   d}Y n ty   d}Y nw d\}}t|
|||}|d u rq.|||||}|| q.|r| dd|  d S d S )NZtan0064darwinr   .{}: {}({!r}): {}rA   )ZrectZpolar)r   r@   invaliddivide-by-zerorp   overflowr   r@   rA   zFailures in test_testfile:
  
  )r   platformZmac_verrP  rV  rC   r/   rp   r?   	test_filegetattrrD   r   rI   r    r   rd   join)rQ   ZSKIP_ON_TIGERZosx_versionZversion_txtrH   failuresr6   r7   arZaiZereir;   funcr   r#   r$   rG   msgr   r   r   test_testfilen  sT   


zMathTests.test_testfilec              	   C   s*  d}g }t tD ]|\}}}}}tt|}d|v sd|v rd}nd|v r%d}z||}	W n ty6   d}	Y n ty@   d}	Y nw d\}
}|dkrLd	}
n|d
krSd}n|dkrk|dkrk|dk rbd}
n	|dk rid}
nd}
t||	|
|}|d u rwq|||||}|| q|r| 	dd
|  d S d S )Nr  r  r  rp   r  r   r  r+  rM  lgammagV瞯<erfcrA   r   r         $@r   r   zFailures in test_mtestfile:
  r  )r<   math_testcasesr  rD   rp   r   rI   r    r   rd   r  )rQ   rH   r  r6   r7   r8   r!   r;   r  r"   r#   r$   rG   r  r   r   r   test_mtestfile  sH   

zMathTests.test_mtestfilec              
   C   s  t j}| |g d | |g ddd | |ttddd | |tttddd | |tddddd | |g d	d
 | |g dd | |g dd | |g dd | |g dd | |g dtd | t| | t|d | t|g d | jt|g ddd | jt|ddgdd t	dt	dg}| jt||t	dd | t|dgdgdgg | t|ddig | jt|ddigd ddid | jt|dgdgdggg d | |ddgddd | |ddgddgdg d | |g ddidddi | t |ddgd W d    n	1 s3w   Y  | |g dd | |g d d | |g d!d d7d"d#}tdd$}| |||| td%d&}| |||| td'd(}| ||d d)d* tdd(D }| |||| d+d* td'd&D }| |||| d,d* td'd(D }| 
|| | 
|dddtd-ddg | 
|ddtd-ddg | 
|dtd-ddg | 
|dtd.td-dg | 
|dtd/td-dg | 
|dtd-td.dg | 
|dtd-td/dg | |dddtd.d0d1gtd/ | |dddtd/d0d1gtd. | 
|dddtd.d0d1g | 
|dddtd/d0d1g | 
|dddtd.d0ddg | 
|dddtd/d0ddg | t|g d2t | t|g d3t | t|tdd$t | t|tdd$d4dt | t|dtd5dd1dd6gtj d S )8Nr   r@   )r   r=   rK  i  r   i _7 )r   r=   r   r}   r@   r	  )r   r   r   r   r   r  )r   r=   r   r   r   )r   r   r   r}   r@   )r   r           r   r   r  )r   r   r  r   r   r   )r  r  r      a   c       br   abZabababababab)r   r=   r   r=   r   r=   r   r=   r   r=   r   r=   rM  )r   r   r=   r   r   )r   r   r=   r   )r   r=   r   r   c                 S   s   | D ]}||9 }q|S rM   r   )r   r   elemr   r   r   _naive_prod  s   
z(MathTests.test_prod.<locals>._naive_prodi'  irl   ir   c                 S   ru  r   rv  r   r   r   r   r   r   $  r   z'MathTests.test_prod.<locals>.<listcomp>c                 S   ru  r   rv  r  r   r   r   r   &  r   c                 S   ru  r   rv  r  r   r   r   r   (  r   r   r   r   r_  r}   )r   r=   r   r}   r@   r  )r   r   r   r}   r@   r  r   r   r  r   )rD   prodri   r`  r   rR  r0   rm   rn   	bytearrayr  r   rC   r   r   )rQ   r  rY  r  r   r   r   r   	test_prod  s     



$$   zMathTests.test_prodc              	   C   sL  t j}t j}tdD ]}t|d D ]}| ||||||||   qq
tddD ]#}td|D ]}| |||||d |d | ||d |  q3q,tddD ]}| ||dd | ||d| | ||||| qUtdD ]}| |||| | ||d || qy| t|dd | t|dtd | t|dd | t|dd | t|tdd | t|d	d | t| | t|ddd
 | t| | t	|dd | t	|dd  d | t	|dd | t	|ddd   | |ddd | |ddd d dd }| ||dd | ||d| | ||d||d   t
jddrH| t||| dD ]\}}| |||d | t|||t qJ| |tdtdd | |tdtdd td
D ]!}| t|tdt|t | t|tdt|t qd S )Nr   r   r   rM  r   r   1r  10r   rl   r=   r   TZcpython)TT)TF)FFr@   )rD   permr   r   ri   rm   rn   r   r   rp   r   check_impl_detailr   rb  r   rC   r]   r`   )rQ   r  r   r   rC  r   r   r   testPermF  sb   4"zMathTests.testPermc              
   C   s  t j}t j}tdD ] }t|d D ]}| ||||||||||    qq
tddD ]!}td|D ]}| |||||d |d ||d |  q7q0tdD ]}| ||dd | |||d qVtddD ]}| ||d| | |||d | qptdD ]}t|d D ]}| |||||||  qq| t|dd | t|dtd | t|dd | t|dd | t|tdd | t|d	d | t|d | t|ddd
 | t| | t	|dd | t	|dd  d | t	|dd | t	|ddd   | |ddd | |ddd d dd }| ||dd | ||d| | ||d||d  d  | |||d | |||d | | |||d ||d  d  t
jddr| t|||d  dD ]\}}| |||d | t|||t q| |tdtdd | |tdtdd td
D ]!}| t|tdt|t | t|tdt|t qd S )Nr   r   r   r=   r   r   r  r  r  r   rl   r   Tr  r  r@   )rD   combr   r   ri   rm   rn   r   r   rp   r   r  r   rb  r   rC   r]   r`   )rQ   r  r   r   rC  r   r   r   testComb  sn   0""zMathTests.testCombc                 C   s  |  tdt d |  tdtd |  tddd |  tddd |  td	t td
 |  td	ttd |  tddd | tddd | tddd tjj	tjj
 }|  tdt| |  tdt| |  tdt |  |  tdt |  | t|dd | t| dd | t|dd | t| dd tjj}|  ttd| |  tt d|  |  t|tt |  t| t t  | ttd	 | td	t | ttt d S )Ng      0Cg/Cg     0Cg      CrA   gCg      gr   z0x1.fffffffffffffp-1z0x1.0000000000001p+0r   r   )ri   rD   	nextafterrq   r0   r   assertEqualSignr   r   minepsilonr   r  ru   )rQ   Zsmallest_subnormalZlargest_normalr   r   r   test_nextafter  sL   zMathTests.test_nextafterc              	   C   s  |  tdtjj |  tdd |  tdd |  tdd |  tdtjjtjj  |  tttttt	   |  tt	t	 | 
ttj ddddt	fD ]%}| j|d |  t| t| W d    n1 s~w   Y  q^d S )	Nr   l          l          r   l            g      @rA   r$  )ri   rD   r   r   r   r  r  r0  r  rq   r  r   r9  r  r   r   r   test_ulp  s$   zMathTests.test_ulpc              	   C   st   G dd d}t jt jt jfD ](}| }| t |d| W d    n1 s)w   Y  | t|dd qd S )Nc                   @   r   )z$MathTests.test_issue39871.<locals>.Fc                 S   s   d| _ dd  d S )NTr   r   )	convertedrU   r   r   r   rV     s   z.MathTests.test_issue39871.<locals>.F.__float__N)rX   rY   rZ   rV   r   r   r   r   rX    r   rX  znot a numberr  F)rD   r   r   r  rm   rn   r  r  )rQ   rX  r  r  r   r   r   test_issue39871  s   zMathTests.test_issue39871c                 C   s"   t |s| d| d S d S )NzExpected a NaN, got {!r}.)rD   rE   rd   r    rP   r   r   r   r  #  s   
zMathTests.assertIsNaNc                 C   s.   	 |  || |  td|td| d S )Nr   )ri   rD   r   )rQ   r   r  r   r   r   r  '  s    zMathTests.assertEqualSignNr  )NrX   rY   rZ   rf   rk   rv   rx   rz   r|   r   r   r   r   r   r   r   unittestZskipIfr   r  machiner   r   r   r   r   r   r   Zcpython_onlyr   r   r   r   HAVE_DOUBLE_ROUNDINGr  r  r6  r;  rZ  r[  re  rh  rl  rn  rq  rt  Zrequires_mac_verrw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z
skipUnlessr   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rc      s    

		=!
!




^*K<q5, 

 
 	
	
		




8
B\@F
-
rc   c                   @   s   e Zd ZejZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) IsCloseTestsc                 O   0   | j | j||g|R i |d||f d d S )Nz%s and %s should be close!r  )rt   r1  rQ   r  r  r   kwargsr   r   r   assertIsClose3     

zIsCloseTests.assertIsClosec                 O   r  )Nz%s and %s should not be close!r  )r  r1  r  r   r   r   assertIsNotClose7  r  zIsCloseTests.assertIsNotClosec                 O   ,   |D ]\}}| j ||g|R i | qd S rM   )r  rQ   Zexamplesr   r  r  r  r   r   r   assertAllClose;     zIsCloseTests.assertAllClosec                 O   r  rM   )r  r  r   r   r   assertAllNotClose?  r  zIsCloseTests.assertAllNotClosec                 C   s|   |  t | jdddd W d    n1 sw   Y  |  t | jddddd W d    d S 1 s7w   Y  d S )Nr   g0.+rel_tolr   g    _©r  r$   )rm   rp   r  rU   r   r   r   test_negative_tolerancesC  s   "z%IsCloseTests.test_negative_tolerancesc                 C   s   g d}| j |ddd d S )N))r   r   )N@ir  );r  )i90  g    @)rA   r   )NF r  rA   r  r  )rQ   Zidentical_examplesr   r   r   test_identicalJ  s   zIsCloseTests.test_identicalc                 C   s(   g d}| j |dd | j|dd d S )N))g    חAg   חA)g:0yEgnyE)g	ѭ?gfNӭ?:0yE>r  &.>r  r  )rQ   Zeight_decimal_places_examplesr   r   r   test_eight_decimal_placesT  s   z&IsCloseTests.test_eight_decimal_placesc                 C   s(   g d}| j |dd | j|dd d S )N))r  rA   )g&.rA   )gu?j/ʠrA   r  r  r  r   )r  r  )rQ   Znear_zero_examplesr   r   r   test_near_zero\  s   zIsCloseTests.test_near_zeroc                 C   s<   |  tt | j ttdd |  tt | j ttdd d S )NrA   r   )r  rq   rr   rU   r   r   r   test_identical_infinitef  s   z$IsCloseTests.test_identical_infinitec                 C   sR   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
}| j|dd d S )Nr   r   gg?r   )ru   rq   rr   r  )rQ   Znot_close_examplesr   r   r   test_inf_ninf_nanm  s   zIsCloseTests.test_inf_ninf_nanc                 C   s0   g d}| j |dd g d}| j|dd d S )N))r   r   )333333r  )Ynr  rA   r  ))r   g     ?)g?r   )gZbtigTbtir  )rQ   Zzero_tolerance_close_examplesZ!zero_tolerance_not_close_examplesr   r   r   test_zero_tolerance|  s   z IsCloseTests.test_zero_tolerancec                 C   s   | j ddgdd d S )N)r<  r   )r   r<  rx  r  r  rU   r   r   r   test_asymmetry  r  zIsCloseTests.test_asymmetryc                 C   s(   ddg}| j |dd | j|dd d S )N) )i[i[r  r  r  r  )rQ   Zinteger_examplesr   r   r   test_integers  s
   zIsCloseTests.test_integersc                 C   sh   ddl m} |d|df|d|df|d|df|d	|d
fg}| j|dd | j|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  )rQ   r   Zdecimal_examplesr   r   r   test_decimals  s   zIsCloseTests.test_decimalsc                 C   sd   ddl m} |ddd |df|d|df|dd|ddfg}| j|dd	 | j|d
d	 d S )Nr   r  r   r  r  l       	(qe	 rj  r  r  r  )r(  r  r  r  )rQ   r  Zfraction_examplesr   r   r   test_fractions  s   zIsCloseTests.test_fractionsN)rX   rY   rZ   rD   r1  r  r  r  r  r  r  r  r  r   r  r  r  r  r	  r
  r   r   r   r   r  0  s"    

r  c                  C   sN   ddl m}  t }|tt |tt || d t| d S )Nr   )DocFileSuitezieee754.txt)	doctestr  r  Z	TestSuiteZaddTestZ	makeSuiterc   r  r   )r  Zsuiter   r   r   	test_main  s   r  r  )8Ztest.supportr   r   r   testr   r  rS  r   rD   osr  r   r   r   rs   r0   ru   rq   rr   r   r   r0  r  r2  r   r  r  rX   argvfile__file__pathdirnamecurdirZtest_dirr  r  r  r   r   r   r   r&   r<   r?   rI   rK   rC   r]   rd  r`   ZTestCaserc   r  r  r   r   r   r   <module>   sp   &
-              Q{
