U
    iâË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© úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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/   )ÚColorÚredÚgreenÚblueZShakeZmintZShapeÚ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   ru   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   rm   rr   rv   rz   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)r{   r|   r}   r‰   r‹   r   r   r   r   r€   <  s   r€   Ú__main__)r   Únumpyr;   Znumbar   Z
numba.corer   Znumba.tests.supportr   r   Zenum_usecasesZunittestrG   rK   rF   rA   rB   r
   r€   r{   Úmainr   r   r   r   Ú<module>   s      ,