U
    ,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re  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   D/tmp/pip-unpacked-wheel-eu7e0c37/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	   )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r5   r2   r   r   r   test_ufunc_raise5   s    zTestExceptions.test_ufunc_raisec                 C   s   | j dd d S NT)Zforceobjr8   r9   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/   r0   r1   r   r   r   check_gufunc_raise;   s    

z!TestExceptions.check_gufunc_raisec                 C   s   | j dd d S r6   r?   r9   r   r   r   test_gufunc_raiseE   s    z TestExceptions.test_gufunc_raisec                 C   s   | j dd d S r;   r@   r9   r   r   r   test_gufunc_raise_objmodeH   s    z(TestExceptions.test_gufunc_raise_objmodeN)
__name__
__module____qualname____doc__r5   r:   r<   r?   rA   rB   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.
        Tr7         @      @r          @r$         ?      @infnan       @divide by zero encounteredinvalid value encounteredN)r   r   r(   r)   floatcheck_warningsassertPreciseEqualr2   r%   r3   r   r   expectedresr   r   r   check_truediv_realR   s    
z.TestFloatingPointExceptions.check_truediv_realc                 C   s   |  tj d S r   )rX   r(   r*   r9   r   r   r   test_truediv_float_   s    z.TestFloatingPointExceptions.test_truediv_floatc                 C   s   |  tj d S r   )rX   r(   r>   r9   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.
        Tr7   rH   rI   r   g      "@rK   rL   Nr   r(   r)   rS   rT   )	r2   pyfuncvaluesmessagesr3   r   r   rV   rW   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 )NrH   rM   rN   rO   rP   rQ   )r_   r   rR   r9   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   rN   rK   rQ   )r_   r   rR   r9   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.
        Tr7         r   r!   r   r   Nr[   )r2   r\   r]   r3   r   r   rV   rW   r   r   r   check_divmod_int}   s    

z,TestFloatingPointExceptions.check_divmod_intc                 C   s   |  tddddg d S )Nrb   r   r&   )rd   r   r9   r   r   r   test_floordiv_int   s    z-TestFloatingPointExceptions.test_floordiv_intc                 C   s   |  tddddg d S )Nr   r   )rd   r   r9   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>.
        Tr7   rH   r   rO   rJ   rK   g      g@xDrL   rM   g      @rP   zoverflow encounteredN)r   r   r(   r)   rR   rS   rT   )r2   r3   r   r   rV   rW   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)Tr7   rb   r   rc   r$   r   r"   r&   l         $   N)r(   Zint64r   r   r)   rS   rT   rU   r   r   r   test_power_integer   s    
z.TestFloatingPointExceptions.test_power_integerN)rC   rD   rE   rF   rX   rY   rZ   r_   r`   r   ra   rd   re   rf   rg   ri   r   r   r   r   rG   K   s   
rG   __main__)
contextlibsysZnumpyr(   Znumbar   r   Znumba.tests.supportr   r   r   Zunittestr   r   r   r   r   r   r   rG   rC   mainr   r   r   r   <module>   s   %b