U
    9%e57                     @   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re  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 W/var/www/html/Darija-Ai-API/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 qt | j| jD ]:\}}||kr| |d|d q| |d|d qt | 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 )NFF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   ig      ?g      rE   r/      r)   r,   r+   r   r-   Zulps   gؗҜ<gMg<epsr-   r7   gؗҼ<r5   gC]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   gHz>gH׊>rQ   rR   gv!>g:0yE>)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      ,