
    ܙd                         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e          Z
edk    r ej                     dS dS )    N)cuda)unittestxfail_unless_cudasimCUDATestCase)configc                   H    e Zd Zd Zd Zd Zd Zd Zd Ze	d             Z
dS )	TestExceptionc                    d }t          j        |          } t          j        dd          |          }t          j        s% |d         t	          j        ddg                     |                     t                    5 } |d         t	          j        ddg                     d d d            n# 1 swxY w Y   |                     dt          |j
                             d S )	Nc                 T    t           j        j        }|dk    r| j        |           d S d S )N   )r   	threadIdxxshape)aryr   s     Flib/python3.11/site-packages/numba/cuda/tests/cudapy/test_exception.pyfooz)TestException.test_exception.<locals>.foo
   s/     AAvv 	1"	 v    TFdebugopt)      r   r   ztuple index out of range)r   jitr   ENABLE_CUDASIMnparrayassertRaises
IndexErrorassertInstr	exception)selfr   
unsafe_foosafe_foocms        r   test_exceptionzTestException.test_exception	   s   	 	 	 Xc]]
248$E222377$ 	/ JtRXq!f--...z** 	-bHTN28QF++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-0#bl2C2CDDDDDs   &B44B8;B8c                     t          j        dd          d             } |d         d           |                     t                    5   |d         d           d d d            d S # 1 swxY w Y   d S )NTFr   c                     | rt           d S N
ValueError)do_raises    r   r   z*TestException.test_user_raise.<locals>.foo   s     !  ! !r   r   r   )r   r   r   r+   )r"   r   s     r   test_user_raisezTestException.test_user_raise   s    	%	(	(	(	! 	! 
)	(	! 	D	%z** 	 	CIdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A**A.1A.c                    | }t          j        ||          d             }t           j        d             }d}dt          j        |          dz   z  }dt          j        |          dz   z  } |d|f         ||           dt          j        |          dz   z  }dt          j        |          dz   z  }	 |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                 P   t           j        j        }t           j        j        }|dk    r1t	          |          D ]!}||xx         | |         ||         z  z  cc<   "t          j                     |dk     r1t	          |          D ]#}| |xx         | |         ||         z  z  cc<   "d S d S )N      r   r   r   blockDimrangesyncthreadsr   ytidntidis        r   problematiczBTestException.case_raise_causing_warp_diverge.<locals>.problematic1   s    ."C=?DRxxt ) )AaDDDAaDAaDL(DDDDRxxt ) )AaDDDAaDAaDL(DDDD x) )r   c                    t           j        j        }t           j        j        }|dk    r=t	          |          D ]-}||         dk    r||xx         | |         ||         z  z  cc<   .t          j                     |dk     r=t	          |          D ]/}||         dk    r| |xx         | |         ||         z  z  cc<   .d S d S )Nr1   r   r2   r3   r7   s        r   oraclez=TestException.case_raise_causing_warp_diverge.<locals>.oracle?   s    ."C=?DRxxt - -Atqyy!!!,Rxxt - -Atqyy!!!, x- -r       g      ?g{Gz?r   N)r   r   r   arangetestingassert_almost_equal)
r"   with_debug_modewith_opt_moder<   r>   ngot_xgot_yexpect_xexpect_ys
             r   case_raise_causing_warp_divergez-TestException.case_raise_causing_warp_diverge(   s     ,+	]	;	;	;	) 	) 
<	;	) 
	- 	- 
	- billT)*billT)*AqD%'''1,-1,-q!tXx(((

&&x777

&&x77777r   c                 2    |                      d           dS )z#Test case for issue #2655.
        F)rC   N)rJ   )r"   s    r   test_raise_causing_warp_divergez-TestException.test_raise_causing_warp_diverge[   s!     	,,U,CCCCCr   c                 p   t           j        d             }t          j        d          }t          j        d          }t          j        d          } |d         |||           |                     t          j        |d                   d           |                     |d         |d         d           d S )Nc                 D    |d         |d         z  | d<   |d         | d<   d S Nr   r    rr   r8   s      r   fz4TestException.test_no_zero_division_error.<locals>.fg   (    Q4!A$;AaDQ4AaDDDr   r   r   r-   r   zExpected inf from div by zerozExpected execution to continue)r   r   r   zerosones
assertTrueisinfassertEqual)r"   rS   rR   r   r8   s        r   test_no_zero_division_errorz)TestException.test_no_zero_division_errorc   s     
	 	 
	 HQKKHQKKGAJJ$1a1(GHHH1qt%EFFFFFr   c                    t          j        dd          d             }t          j        d          }t          j        d          }t          j        d          }t
          j        rt          }nt          }| 	                    |          5   |d         |||           d d d            n# 1 swxY w Y   | 
                    |d         dd	           | 
                    |d         dd
           d S )NTFr   c                 D    |d         |d         z  | d<   |d         | d<   d S rO   rP   rQ   s      r   rS   z:TestException.test_zero_division_error_in_debug.<locals>.fy   rT   r   r   r   r-   r   z Expected result to be left unsetzExpected execution to stop)r   r   r   rU   rV   r   r   FloatingPointErrorZeroDivisionErrorr   rY   )r"   rS   rR   r   r8   excs         r   !test_zero_division_error_in_debugz/TestException.test_zero_division_error_in_debugu   s2    
%	(	(	(	 	 
)	(	 HQKKHQKKGAJJ   	$$CC#Cs## 	 	AdGAq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	1q"DEEE1q">?????s   B,,B03B0c                 b   dt          j        d          fd            t          j        d          fd            }|                     t                    5 } |d                      d d d            n# 1 swxY w Y   |                     t          |j                             d S )NzDevice Function ErrorT)devicec                  "    t                     r)   r*   )msgs   r   rS   z6TestException.test_raise_in_device_function.<locals>.f   s    S//!r   )r   c                                     d S r)   rP   )rS   s   r   kernelz;TestException.test_raise_in_device_function.<locals>.kernel   s    ACCCCCr   r-   )r   r   r   r+   r   r    r!   )r"   rf   raisesrS   rd   s      @@r   test_raise_in_device_functionz+TestException.test_raise_in_device_function   s   
 &					" 	" 	" 	" 
		" 
				 	 	 	 
		 z** 	fF4LNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	c3v/0011111s   A<<B B N)__name__
__module____qualname__r&   r.   rJ   rL   rZ   r`   r   rh   rP   r   r   r	   r	      s        E E E*  18 18 18fD D DG G G$@ @ @: 2 2 2 2 2r   r	   __main__)numpyr   numbar   numba.cuda.testingr   r   r   
numba.corer   r	   ri   mainrP   r   r   <module>rr      s              K K K K K K K K K K      \2 \2 \2 \2 \2L \2 \2 \2~ zHMOOOOO r   