U
    iâËds  ã                   @   sª   d dl Z d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ dee	ƒZedkr¦e ¡  dS )é    N)Ú	vectorizeÚguvectorize)ÚTestCaseÚCheckWarningsMixinÚskip_m1_fenv_errorsc                 C   s   | dk rt dƒ‚| d S )Nç        úValue must be positiveg      à?)Ú
ValueError)Úval© r   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/npyufunc/test_errors.pyÚsqrt   s    r   c                 C   s@   t | jd ƒD ],}| | dk r&tdƒ‚| | |d  ||< qd S )Nr   r   )ÚrangeÚshaper	   )ZinpÚnÚoutÚir   r   r   Ú
gufunc_foo   s    r   c                 C   s   | | S ©Nr   ©ÚaÚbr   r   r   Útruediv   s    r   c                 C   s   | | S r   r   r   r   r   r   Úfloordiv   s    r   c                 C   s   | | S r   r   r   r   r   r   Ú	remainder   s    r   c                 C   s   | | S r   r   r   r   r   r   Úpower"   s    r   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestExceptionsz0
    Test raising exceptions inside ufuncs.
    c              	   K   sŠ   t dgf|Žtƒ}tjddddddgtjd�}t |¡}|  t¡�}|||ƒ W 5 Q R X |  d	t	|j
ƒ¡ |  t|ƒdd
ddddg¡ d S )Nzfloat64(float64)é   é   éþÿÿÿé	   éÿÿÿÿé   ©Údtyper   é   r   é   )r   r   ÚnpÚarrayÚfloat64Ú
zeros_likeÚassertRaisesr	   ZassertInÚstrÚ	exceptionÚassertEqualÚlist©ÚselfZvectorize_argsÚfZarrr   Úcmr   r   r   Úcheck_ufunc_raise+   s    
z TestExceptions.check_ufunc_raisec                 C   s   | j dd� d S ©NT©Znopython©r4   ©r1   r   r   r   Útest_ufunc_raise5   s    zTestExceptions.test_ufunc_raisec                 C   s   | j dd� d S ©NT)Zforceobjr7   r8   r   r   r   Útest_ufunc_raise_objmode8   s    z'TestExceptions.test_ufunc_raise_objmodec              	   K   st   t dgdf|Žtƒ}tjddddgtjd�}t |¡}|  t¡�}||d|ƒ W 5 Q R X |  t	|ƒddddg¡ d S )	Nzint32[:], int32[:], int32[:]z(n),()->(n)r   r%   éýÿÿÿr   r#   r   )
r   r   r'   r(   Úint32r*   r+   r	   r.   r/   r0   r   r   r   Úcheck_gufunc_raise;   s    
ÿÿ
z!TestExceptions.check_gufunc_raisec                 C   s   | j dd� d S r5   ©r>   r8   r   r   r   Útest_gufunc_raiseE   s    z TestExceptions.test_gufunc_raisec                 C   s   | j dd� d S r:   r?   r8   r   r   r   Útest_gufunc_raise_objmodeH   s    z(TestExceptions.test_gufunc_raise_objmodeN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   r9   r;   r>   r@   rA   r   r   r   r   r   &   s   

r   c                   @   sl   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestFloatingPointExceptionsz{
    Test floating-point exceptions inside ufuncs.

    Note the warnings emitted by Numpy reflect IEEE-754 semantics.
    c              	   C   sˆ   t dd�tƒ}tjddddg|d�}tjdddd	g|d�}t dtd
ƒtdƒdg¡}|  ddg¡� |||ƒ}|  ||¡ W 5 Q R X dS )z'
        Test 1 / 0 and 0 / 0.
        Tr6   ç      @ç      @r   ç       @r#   ç      ð?ç      @ÚinfÚnanç       @údivide by zero encounteredúinvalid value encounteredN)r   r   r'   r(   ÚfloatÚcheck_warningsÚassertPreciseEqual©r1   r$   r2   r   r   ÚexpectedÚresr   r   r   Úcheck_truediv_realR   s    ÿ
z.TestFloatingPointExceptions.check_truediv_realc                 C   s   |   tj¡ d S r   )rW   r'   r)   r8   r   r   r   Útest_truediv_float_   s    z.TestFloatingPointExceptions.test_truediv_floatc                 C   s   |   tj¡ d S r   )rW   r'   r=   r8   r   r   r   Útest_truediv_integerb   s    z0TestFloatingPointExceptions.test_truediv_integerc           	   	   C   sl   t dd�|ƒ}t ddddg¡}t ddddg¡}t |¡}|  |¡� |||ƒ}|  ||¡ W 5 Q R X d	S )
z)
        Test 1 // 0 and 0 // 0.
        Tr6   rG   rH   r   g      "@rJ   rK   N©r   r'   r(   rR   rS   )	r1   ÚpyfuncÚvaluesÚmessagesr2   r   r   rU   rV   r   r   r   Úcheck_divmod_floate   s    

z.TestFloatingPointExceptions.check_divmod_floatc                 C   s&   |   tdtdƒtdƒdgddg¡ d S )NrG   rL   rM   rN   rO   rP   )r^   r   rQ   r8   r   r   r   Útest_floordiv_floatq   s    ÿþz/TestFloatingPointExceptions.test_floordiv_floatc                 C   s$   |   tdtdƒtdƒdgdg¡ d S )Nr   rM   rJ   rP   )r^   r   rQ   r8   r   r   r   Útest_remainder_floatw   s    þz0TestFloatingPointExceptions.test_remainder_floatc              	   C   sl   t dd�|ƒ}t ddddg¡}t ddddg¡}t |¡}|  g ¡� |||ƒ}|  ||¡ W 5 Q R X d	S )
z'
        Test 1 % 0 and 0 % 0.
        Tr6   é   é   r   r    r   r   NrZ   )r1   r[   r\   r2   r   r   rU   rV   r   r   r   Úcheck_divmod_int}   s    

z,TestFloatingPointExceptions.check_divmod_intc                 C   s   |   tddddg¡ d S )Nra   r   r%   )rc   r   r8   r   r   r   Útest_floordiv_intŠ   s    z-TestFloatingPointExceptions.test_floordiv_intc                 C   s   |   tddddg¡ d S )Nr   r   )rc   r   r8   r   r   r   Útest_remainder_int�   s    z.TestFloatingPointExceptions.test_remainder_intc              	   C   s€   t dd�tƒ}t ddddg¡}t ddd	d
g¡}t dtdƒtdƒdg¡}|  ddg¡� |||ƒ}|  ||¡ W 5 Q R X dS )z5
        Test 0 ** -1 and 2 ** <big number>.
        Tr6   rG   r   rN   rI   rJ   g      ð¿g@Œµx¯DrK   rL   g      °@rO   zoverflow encounteredN)r   r   r'   r(   rQ   rR   rS   )r1   r2   r   r   rU   rV   r   r   r   Útest_power_float�   s    ÿ
z,TestFloatingPointExceptions.test_power_floatc              	   C   s„   t j}tdgdd�tƒ}t jdddg|d�}t jdd	d
g|d�}t jdddg|d�}|  g ¡� |||ƒ}|  ||¡ W 5 Q R X dS )z
        Test 0 ** -1.
        Note 2 ** <big number> returns an undefined value (depending
        on the algorithm).
        zint64(int64, int64)Tr6   ra   r   rb   r#   r   r!   r%   lûÿÿÿ         é$   N)r'   Zint64r   r   r(   rR   rS   rT   r   r   r   Útest_power_integer�   s    
z.TestFloatingPointExceptions.test_power_integerN)rB   rC   rD   rE   rW   rX   rY   r^   r_   r   r`   rc   rd   re   rf   rh   r   r   r   r   rF   K   s   
rF   Ú__main__)Ú
contextlibÚsysÚnumpyr'   Znumbar   r   Znumba.tests.supportr   r   r   Zunittestr   r   r   r   r   r   r   rF   rB   Úmainr   r   r   r   Ú<module>   s   %b