U
    ,d57  ć                   @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	 ddl
T d dlZdZdZed	Zed
ZG dd deZG dd deZedkre ”  dS )é    N)Śjit)Śutils)ŚTestCaseŚforbid_codegené   )Ś*g      °<g      >ŚinfŚnanc                   @   sÜ   e Zd ZdZegZejejgZ	e
ge	 ZejejgZege Zeejg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 d! Z#d"d# Z$d$d% Z%d&S )'ŚTestAssertPreciseEqualz2
    Tests for TestCase.assertPreciseEqual().
    c                    s@    fdd}||| |||f||f |||g||g d S )Nc                    s$   j | |f  j || f  d S )N)ŚassertPreciseEqual©ŚleftŚright©ŚkwargsŚself© ś</tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_support.pyŚassert_succeed   s    z1TestAssertPreciseEqual.eq.<locals>.assert_succeedr   )r   r   r   r   r   r   r   r   Śeq   s    
zTestAssertPreciseEqual.eqc                    sn    fdd}||| ||| |||f||f |||f||f |||g||g |||g||g d S )Nc                    s@   zj | |f  W n tk
r(   Y nX  d| |f ” d S )Nz'%s and %s unexpectedly considered equal)r   ŚAssertionErrorZfailr   r   r   r   Śassert_fail'   s
    z.TestAssertPreciseEqual.ne.<locals>.assert_failr   )r   r   r   r   r   r   r   r   Śne&   s    

zTestAssertPreciseEqual.nec                 C   sX  t  | j| j| j”D ]F\}}}|  |d|d” |  |d|d” |  |d|d” qt  | j| j”D ]\}}|  |d|d” qlt  | j| j”D ]\}}|  |d|d” qt  | j| j”D ]:\}}||krī|  |d|d” qČ|  |d|d” qČt  | j	| j	”D ]>\}}||kr<|  |d|d” n|  |d|d” qd S ©Nr   )
Ś	itertoolsŚproductŚ	int_typesŚfloat_typesŚcomplex_typesr   r   Ś
bool_typesŚnp_float_typesŚnp_complex_types)r   ŚiŚfŚcŚuŚvr   r   r   Ś
test_types5   s$    ’
z!TestAssertPreciseEqual.test_typesc                 C   s   | j D ]z}dD ]p}| j|d|d|d | j|d|d|d | j|d|d|d | j|dd |ddd  |d qqd S )N©ŚexactŚsingleŚdoubler   ©Śprecr   é’’’’é   éP   )r   r   r   ©r   Śtpr-   r   r   r   Śtest_int_valuesP   s    
z&TestAssertPreciseEqual.test_int_valuesc                 C   sZ   t  | j| j”D ]D\}}|  |d|d” |  |d|d” |  |d|d” qd S )NTF)r   r   r   r   r   )r   ZtpaZtpbr   r   r   Śtest_bool_valuesX   s    z'TestAssertPreciseEqual.test_bool_valuesc              	   C   sl   |   t”" | jt d”t d”dd W 5 Q R X |   t”& | jt d”t d”tdd W 5 Q R X d S )NēŌFFõg<Śinvalid)Śabs_tolr   r/   é   )ŚassertRaisesŚ
ValueErrorr   ŚnpŚfloat64Śint)r   r   r   r   Śtest_abs_tol_parse^   s    &z)TestAssertPreciseEqual.test_abs_tol_parsec                 C   s`  | j D ]R}dD ]F}| j|d|d|d | j|d|d|d | j|d|d|d | j|d|d|d | j|d|d|dd | j|t|t|d | j|t|d|d | j|t |t |d | j|t|t |d | j|t|t|d | j|t|d	|d | j|t|t|d | j|t|t |d qqd S )
Nr(   g      ų?r,   ē        ē       T)r-   Zignore_sign_on_zerog±”*ÓĪŅGr   )r   r   r   ŚINFŚNANr1   r   r   r   Śtest_float_valuese   s    
z(TestAssertPreciseEqual.test_float_valuesc                 C   s,   t tjfD ]}|  |dt |d” q
d S ©Nē      š?)Śfloatr;   r<   r   ŚDBL_EPSILON©r   r2   r   r   r   Śtest_float64_valuesy   s    z*TestAssertPreciseEqual.test_float64_valuesc                 C   s"   t j}|  |dt |d” d S rD   )r;   Śfloat32r   ŚFLT_EPSILONrH   r   r   r   Śtest_float32_values}   s    z*TestAssertPreciseEqual.test_float32_valuesc                 C   s  t tjfD ]}dD ]}|d }|dt  }|dtd   }|dtd   }|  ||||” | j||||dd | j||||dd | j||||ddd	 | j||||dd | j||||ddd	 | j||||ddd	 | j||||dd
d	 | j||||dd
d	 q| j|d|dddd | j|d|dddd | j|d|dddd | j|d|dddd q
d S )N©rE   ių’’’g      °?g      °¾rE   r/   é   r)   r,   r+   r   ©r-   Zulpsé   g¼Ų²Ņ<gMgāńµ<Śeps©r-   r7   g¼Ų²Ņ¼<r5   g¬CŅŃ]r2<gqµō7K<)rF   r;   r<   rG   r   r   ©r   r2   ŚscaleŚaŚbr$   Śdr   r   r   Śtest_float64_values_inexact   s&    
z2TestAssertPreciseEqual.test_float64_values_inexactc                 C   s  t j}dD ]}|d }|dt  }|dtd   }|dtd   }|  ||||” | j||||dd | j||||dd | j||||dd | j||||dd | j||||ddd	 | j||||ddd	 | j||||dd
d	 | j||||dd
d	 q
| j|d|dddd | j|d|dddd | j|d|dddd | j|d|dddd d S )NrM   rE   r/   rN   r)   r,   r+   r*   rO   rP   gHÆ¼ņ×z>gHÆ¼ņ×>rQ   rR   gvōõ!>g:0āyE>)r;   rJ   rK   r   r   rS   r   r   r   Śtest_float32_values_inexact   s&    
z2TestAssertPreciseEqual.test_float32_values_inexactc                 C   sĪ  t ddt ddt ddt ddg\}}}}| jD ]}dD ]d}| j|d|d|d | j|d|d|d | j|d|d|d | j|||||d | j|||||d | j|||||d | j|||||d | j|||||d | j|t tt|t tt|d | j|t tt |t tt |d | j|t t t |t t t |d | j|t tt|t tt |d | j|t tt|t t t|d | j|t td|t td|d | j|t td|t td|d | j|t dt|t dt|d | j|t tt|t tt|d | j|t tt|t tt|d | j|t tt |t tt |d q<| j|t td|t td	d
d q2d S )Nr?   r@   r(   y      š?       @r,   y      š?      š?y       @       @r   r   r)   )Ścomplexr   r   r   rA   rB   )r   Zc_ppZc_pnZc_npZc_nnr2   r-   r   r   r   Śtest_complex_values±   s4     ’
$(,&&$$$$$*z*TestAssertPreciseEqual.test_complex_valuesc                 C   s~  t tjfD ]l}dD ]`}|d }|dt  }|dtd   }|t ||}|t ||}|t ||}|  ||||” | j||||dd | j||||dd | j||||dd |t ||}	|t ||}
| j||||	dd | j||	||
dd | j||||	ddd | j||	||
ddd | j||||
ddd | j||||
dd qq
d S )NrM   rE   r/   r+   r,   rO   r*   )rZ   r;   Ś
complex128rG   r   r   ©r   r2   rT   rU   rV   r$   ZaaŚabZbbŚacŚccr   r   r   Śtest_complex128_values_inexact×   s(    
z5TestAssertPreciseEqual.test_complex128_values_inexactc                 C   sr  t j}dD ]`}|d }|dt  }|dtd   }|t||}|t||}|t||}|  ||||” | j||||dd | j||||dd | j||||dd | j||||dd |t||}	|t||}
| j||||	dd | j||	||
dd | j||||	ddd | j||	||
ddd | j||||
ddd q
d S )NrM   rE   r/   r+   r,   r*   rO   )r;   Ś	complex64rK   rZ   r   r   r]   r   r   r   Śtest_complex64_values_inexactķ   s(    
z4TestAssertPreciseEqual.test_complex64_values_inexactc                 C   sn   t jt jt jtjtjtjt	j
t	jg}|D ]}|  ||” |  ||j” q(t |d”D ]\}}|  ||” qTd S )Nr/   )ZColorZredZgreenZblueZShakeZmintZShapeZcircleZsquareZPlanetZEARTHZMERCURYr   r   Śvaluer   Ścombinations)r   ŚvaluesŚvalrU   rV   r   r   r   Ś
test_enums  s       ’z!TestAssertPreciseEqual.test_enumsc                 C   s  t jddt jd d”}| ” }|  ||” |  ||d ” |  ||d d ” |  ||j” |  || t j	”” |  ||j ” j” |  || 
” ” d|j_|  ||” t jddt jd}|dt  }|dtd	   }|  ||” | j||d
d | j||d
d d S )Nr   r8   )Zdtype)r/   rP   r.   FrP   rE   r/   r+   r,   )r;   ZarangeZint16ZreshapeŚcopyr   r   ŚTZastypeZint32ŚflattenŚflagsZ	writeabler<   rG   )r   rU   rV   r$   r   r   r   Śtest_arrays  s"    z"TestAssertPreciseEqual.test_arraysc                 C   sX   t  dd”}t  dd”}t  dd”}t  dd”}|  ||” |  ||” |  ||” d S )NZ1900ŚYz
1900-01-01ŚDZ1901)r;   Z
datetime64r   r   ©r   rU   rV   r$   rW   r   r   r   Śtest_npdatetime%  s    z&TestAssertPreciseEqual.test_npdatetimec                 C   sX   t  dd”}t  dd”}t  dd”}t  dd”}|  ||” |  ||” |  ||” d S )Nr   Śhé<   Śmr/   )r;   Ztimedelta64r   r   rp   r   r   r   Śtest_nptimedelta0  s    z'TestAssertPreciseEqual.test_nptimedeltaN)&Ś__name__Ś
__module__Ś__qualname__Ś__doc__r=   r   r;   rJ   r<   r    rF   r   rb   r\   r!   rZ   r   ŚboolZbool_r   r   r   r'   r3   r4   r>   rC   rI   rL   rX   rY   r[   ra   rc   rh   rm   rq   ru   r   r   r   r   r
      s2   


&	r
   c                   @   s   e Zd Zdd Zdd ZdS )ŚTestMiscc              
   C   sr   d}d}g }|   ||” W 5 Q R X |  t”(}|   ||” | |” W 5 Q R X W 5 Q R X |  dt|j” d S )Ng     K@g     P@Z66)ZassertRefCountr9   r   ŚappendŚassertInŚstrŚ	exception)r   ŚxŚyŚlŚcmr   r   r   Śtest_assertRefCount>  s    
zTestMisc.test_assertRefCountc              
   C   sZ   dd }t  0 |  t”}tdd|}|  W 5 Q R X W 5 Q R X |  dt|j” dS )zg
        Test that forbid_codegen() prevents code generation using the @jit
        decorator.
        c                   S   s   dS r   r   r   r   r   r   r#   P  s    z'TestMisc.test_forbid_codegen.<locals>.fT)Znopythonzcodegen forbidden by test caseN)r   r9   ŚRuntimeErrorr   r}   r~   r   )r   r#   ZraisesZcfuncr   r   r   Śtest_forbid_codegenK  s    zTestMisc.test_forbid_codegenN)rv   rw   rx   r   r   r   r   r   r   r{   <  s   r{   Ś__main__)r   Znumpyr;   Znumbar   Z
numba.corer   Znumba.tests.supportr   r   Zenum_usecasesZunittestrG   rK   rF   rA   rB   r
   r{   rv   Śmainr   r   r   r   Ś<module>   s      ,