U
    9%e                     @   sX   d dl Zd dlmZ d dlmZmZmZ d dlm	Z	 G dd deZ
edkrTe  dS )    N)cuda)unittestxfail_unless_cudasimCUDATestCase)configc                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
dS )TestExceptionc              	   C   s   dd }t |}t jddd|}tjs@|d tddg | t}|d tddg W 5 Q R X | d	t	|j
 d S )
Nc                 S   s    t jj}|dkr| j|   d S )N   )r   	threadIdxxshape)Zaryr
    r   e/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_exception.pyfoo
   s    z)TestException.test_exception.<locals>.fooTFdebugopt)      r   r   ztuple index out of range)r   jitr   ENABLE_CUDASIMnparrayassertRaises
IndexErrorassertInstr	exception)selfr   Z
unsafe_fooZsafe_foocmr   r   r   test_exception	   s    
 zTestException.test_exceptionc              	   C   sH   t jddddd }|d d | t |d d W 5 Q R X d S )NTFr   c                 S   s   | rt d S N
ValueError)Zdo_raiser   r   r   r      s    z*TestException.test_user_raise.<locals>.foor   r   )r   r   r   r"   )r   r   r   r   r   test_user_raise   s
    
zTestException.test_user_raisec           
      C   s   | }t j||ddd }t jdd }d}dt|d  }dt|d  }|d	|f || dt|d  }dt|d  }	|d	|f ||	 tj|| tj|	| d
S )zTesting issue #2655.

        Exception raising code can cause the compiler to miss location
        of unifying branch target and resulting in unexpected warp
        divergence.
        r   c                 S   s   t jj}t jj}|dkrBt|D ] }||  | | ||  7  < q t   |dk r|t|D ] }| |  | | ||  7  < qZd S )N      r   r	   r
   ZblockDimrangeZsyncthreadsr
   ytidZntidir   r   r   problematic1   s    zBTestException.case_raise_causing_warp_diverge.<locals>.problematicc                 S   s   t jj}t jj}|dkrNt|D ],}|| dkr ||  | | ||  7  < q t   |dk rt|D ],}|| dkrf| |  | | ||  7  < qfd S )Nr%   r   r&   r'   r)   r   r   r   oracle?   s    z=TestException.case_raise_causing_warp_diverge.<locals>.oracle    g      ?g{Gz?r   N)r   r   r   ZarangetestingZassert_almost_equal)
r   with_debug_modeZwith_opt_moder-   r.   nZgot_xZgot_yZexpect_xZexpect_yr   r   r   case_raise_causing_warp_diverge(   s    

z-TestException.case_raise_causing_warp_divergec                 C   s   | j dd dS )z#Test case for issue #2655.
        F)r1   N)r3   )r   r   r   r   test_raise_causing_warp_diverge[   s    z-TestException.test_raise_causing_warp_divergec                 C   sl   t jdd }td}td}td}|d ||| | t|d d | |d |d d d S )	Nc                 S   s$   |d |d  | d< |d | d< d S Nr   r   r   rr
   r*   r   r   r   fg   s    z4TestException.test_no_zero_division_error.<locals>.fr   r   r#   r   zExpected inf from div by zerozExpected execution to continue)r   r   r   zerosones
assertTrueisinfassertEqual)r   r8   r7   r
   r*   r   r   r   test_no_zero_division_errorc   s    



z)TestException.test_no_zero_division_errorc              	   C   s   t jddddd }td}td}td}tjr@t}nt}| 	| |d ||| W 5 Q R X | 
|d	 d	d
 | 
|d d	d d S )NTFr   c                 S   s$   |d |d  | d< |d | d< d S r5   r   r6   r   r   r   r8   y   s    z:TestException.test_zero_division_error_in_debug.<locals>.fr   r   r#   r   z Expected result to be left unsetzExpected execution to stop)r   r   r   r9   r:   r   r   FloatingPointErrorZeroDivisionErrorr   r=   )r   r8   r7   r
   r*   excr   r   r   !test_zero_division_error_in_debugu   s    



z/TestException.test_zero_division_error_in_debugc              	      sj   dt jddfdd t jdd fdd}| t}|d	   W 5 Q R X | t|j d S )
NzDevice Function ErrorT)Zdevicec                      s   t  d S r    r!   r   )msgr   r   r8      s    z6TestException.test_raise_in_device_function.<locals>.f)r   c                      s
      d S r    r   r   )r8   r   r   kernel   s    z;TestException.test_raise_in_device_function.<locals>.kernelr#   )r   r   r   r"   r   r   r   )r   rD   Zraisesr   )r8   rC   r   test_raise_in_device_function   s    

z+TestException.test_raise_in_device_functionN)__name__
__module____qualname__r   r$   r3   r4   r>   rB   r   rE   r   r   r   r   r      s   
3r   __main__)numpyr   Znumbar   Znumba.cuda.testingr   r   r   Z
numba.corer   r   rF   mainr   r   r   r   <module>   s     