
    J/Ph}                         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                   X     e Zd Z fdZd Zd Zd Zd Zd Zd Z	e
d             Z xZS )	TestExceptionc                 r    t                                                       |                     d           d S )Nz!Exceptions not supported with LTO)supersetUpskip_if_lto)self	__class__s    f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_exception.pyr   zTestException.setUp	   s1     	<=====    c                    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     r   fooz)TestException.test_exception.<locals>.foo   s/     AAvv 	1"	 vr   TFdebugopt)      r   r   ztuple index out of range)r   jitr   ENABLE_CUDASIMnparrayassertRaises
IndexErrorassertInstr	exception)r   r   
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#   r0   )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>.problematic7   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 )Nr6   r   r7   r8   r<   s        r   oraclez=TestException.case_raise_causing_warp_diverge.<locals>.oracleE   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_moderA   rC   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)rH   N)rO   )r   s    r   test_raise_causing_warp_divergez-TestException.test_raise_causing_warp_divergea   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   r=   s      r   fz4TestException.test_no_zero_division_error.<locals>.fm   (    Q4!A$;AaDQ4AaDDDr   r   r   r2   r   zExpected inf from div by zerozExpected execution to continue)r   r   r!   zerosones
assertTrueisinfassertEqual)r   rX   rW   r   r=   s        r   test_no_zero_division_errorz)TestException.test_no_zero_division_errori   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 rT   rU   rV   s      r   rX   z:TestException.test_zero_division_error_in_debug.<locals>.f   rY   r   r   r   r2   r   z Expected result to be left unsetzExpected execution to stop)r   r   r!   rZ   r[   r   r    FloatingPointErrorZeroDivisionErrorr#   r^   )r   rX   rW   r   r=   excs         r   !test_zero_division_error_in_debugz/TestException.test_zero_division_error_in_debug{   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   rX   z6TestException.test_raise_in_device_function.<locals>.f   s    S//!r   )r   c                                     d S r.   rU   )rX   s   r   kernelz;TestException.test_raise_in_device_function.<locals>.kernel   s    ACCCCCr   r2   )r   r   r#   r0   r%   r&   r'   )r   rk   raisesrX   ri   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 )__name__
__module____qualname__r   r+   r3   rO   rQ   r_   re   r   rm   __classcell__)r   s   @r   r	   r	      s        > > > > >E E E*  18 18 18fD D DG G G$@ @ @: 2 2 2 2 2 2 2r   r	   __main__)numpyr!   numbar   numba.cuda.testingr   r   r   
numba.corer   r	   rn   mainrU   r   r   <module>rx      s              K K K K K K K K K K      b2 b2 b2 b2 b2L b2 b2 b2J zHMOOOOO r   