
    
fp>                     r   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mZmZmZ d dlZdddZdddZdddZdddd	Z G d
 de          Z G d de          Z G d de          Z G d de          Zd Zd Zd Zd Zd Zd Zd Zd Z  G d de          Z!e"dk    r ej#                     dS dS )    N)jitnjit)typeserrorsutils)TestCaseexpected_failure_py311expected_failure_py312FT)nopythonforceobj)r   _nrt)r   nogilr   c                       e Zd ZdS )MyErrorN__name__
__module____qualname__     ;lib/python3.11/site-packages/numba/tests/test_exceptions.pyr   r              Dr   r   c                       e Zd ZdS )
OtherErrorNr   r   r   r   r   r      r   r   r   c                   .     e Zd Z fdZd Z fdZ xZS )UDEArgsToSuperc                 f    t          t          |                               |           || _        d S N)superr   __init__value0selfargr!   	__class__s      r   r    zUDEArgsToSuper.__init__   s,    nd##,,S111r   c                     t          || j                  sdS d}|| j        |j        k    z  }|| j        |j        k    z  }|S NFT)
isinstancer%   argsr!   r#   othersames      r   __eq__zUDEArgsToSuper.__eq__    sK    %00 	5	UZ''u|++r   c                 x    t          t          t                                                    | j        f          S r   )hashr   r   __hash__r!   r#   r%   s    r   r0   zUDEArgsToSuper.__hash__(   s,    U>**3355t{CDDDr   r   r   r   r    r-   r0   __classcell__r%   s   @r   r   r      si              E E E E E E E E Er   r   c                   .     e Zd Z fdZd Z fdZ xZS )UDENoArgSuperc                 r    t          t          |                                            || _        || _        d S r   )r   r6   r    deferargr!   r"   s      r   r    zUDENoArgSuper.__init__-   s1    mT""++---r   c                     t          || j                  sdS d}|| j        |j        k    z  }|| j        |j        k    z  }|| j        |j        k    z  }|S r'   )r(   r%   r)   r8   r!   r*   s      r   r-   zUDENoArgSuper.__eq__2   s^    %00 	5	UZ''//u|++r   c                     t          t          t                                                    | j        | j        f          S r   )r/   r   r6   r0   r8   r!   r1   s    r   r0   zUDENoArgSuper.__hash__;   s9    U=))2244dm[" # # 	#r   r2   r4   s   @r   r6   r6   ,   s`            
  # # # # # # # # #r   r6   c                       fd}|S )Nc                 `    | dk    r| dk    rt           | dk    rt          j        j        | S N         
ValueErrornplinalgLinAlgError)iexcs    r   raiserzraise_class.<locals>.raiserA   s9    66I!VV!VV)''r   r   rG   rH   s   ` r   raise_classrJ   @   s#         Mr   c                       fd}|S )Nc                     | dk    r d          | dk    rt          d          | dk    r t          j                            d          | S r=   rA   rF   r$   rG   s    r   rH   zraise_instance.<locals>.raiserN   [    66#c1++!VVS!$$$!VV)''Q///r   r   )rG   r$   rH   s   `` r   raise_instancerO   M   s)          Mr   c                       fd}|S )Nc                     | dk    r |d          | dk    rt          |d          | dk    r t          j                            |d          | S r=   rA   rM   s     r   rH   z+raise_instance_runtime_args.<locals>.raiserZ   rN   r   r   rI   s   ` r   raise_instance_runtime_argsrR   Y   s#         Mr   c                        r   r   r   r   r   reraiserT   e   s    	r   c                       fd}|S )Nc                 F    | dk    rt          dd           |           S )Nr@   bar)r   )rF   inners    r   outerzouter_function.<locals>.outerj   s)    66UA&&&uQxxr   r   )rX   rY   s   ` r   outer_functionrZ   i   s#         Lr   c                 &    | dk    s
J d            d S )Nr>   rW   r   rF   s    r   assert_usecaser]   q   s    666566666r   c                      t                      r   r   r   r   r   ude_bug_usecaser`   u   s    


r   c                      t          |           r   rB   )r$   s    r   raise_runtime_valuerc   y   s    
S//r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)e*e+d(                         Z,d)S )*TestRaisingc                    d } t          t          j        t          j        dd          t          j        f          |          }t	          j        dt          j                  }|                      ||d           ||d                     |                     t                    5 } ||d           d d d            n# 1 swxY w Y   |                     t          |j
                  d           d S )Nc                     | j         |         S r   )shape)arF   s     r   pyfuncz5TestRaising.test_unituple_index_error.<locals>.pyfunc   s    71:r   r>   Ar?   )dtyper   ztuple index out of range)r   r   Arrayint32rC   emptyassertEqualassertRaises
IndexErrorstr	exception)r#   rj   cfuncri   cms        r   test_unituple_index_errorz%TestRaising.test_unituple_index_error   s   	 	 	 Gek%+q#66DFFvNNHQbh'''q!ffQll333z** 	bE!QKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R\**,FGGGGGs   *CC
Cc                 T   |t           t          t          t          fv sJ |                     |          5 } ||  d d d            n# 1 swxY w Y   |                     |          5 } ||  d d d            n# 1 swxY w Y   |                     |j        j        |j        j                   t          |j        t          t          f          r#|                     |j        |j        k               |t          u r	  ||  n9# t          $ r, t          j        t          j                     }|dd          }	Y nw xY w	  ||  n9# t          $ r, t          j        t          j                     }
|
dd          }Y nw xY wt#          |	|          D ]\  }}|                     ||           d S d S )N)force_pyobj_flagsno_pyobj_flagsno_pyobj_flags_w_nrtno_gil_flagsrq   rp   rt   r)   r(   r   r6   
assertTrue	Exception	tracebackformat_exceptionsysexc_infozipassertIn)r#   	exec_moderj   ru   expected_error_classr)   pyerrjiterr	py_framesexpected_framesc_frames
got_framesexpfgotfs                 r   check_against_pythonz TestRaising.check_against_python   sg    .1<A A A A A 344 	FDMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	344 	E4LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	-v/?/DEEE eo'FGG 	AOOEOv/??@@@ &&1 1 1 1%6G	"+BCC.1+t + + +$5s|~~F%bcc]


+
 "/:>> * *
d dD))))+ '&"* *sG   AA
A
&A88A<?A<;D 3D76D7;E 3E76E7c                    t          t                    } t          t          j        ffi ||          }|                      |d          d           |                     |||t          d           |                     |||t          d           |                     |||t          j	        j	        j
        d           d S )Nr   r>   r?   r@   )rJ   r   r   r   rn   rp   r   rB   rC   rD   rE   r#   flagsrj   ru   s       r   check_raise_classzTestRaising.check_raise_class   s    W%%,U[N,,e,,V44q1%%%!!%CCC!!%
AFFF!!%"$)"2">	C 	C 	C 	C 	Cr   c                 <    |                      t                     d S Nr   )r   r{   r#   s    r   test_raise_class_nopythonz%TestRaising.test_raise_class_nopython   s    ^44444r   c                 <    |                      t                     d S r   )r   rz   r   s    r   test_raise_class_objmodez$TestRaising.test_raise_class_objmode   s     %677777r   c                    t           t          t          fD ]}t          |d          } t	          t
          j        ffi ||          }|                      |d          d           |                     ||||d           |                     |||t          d           |                     |||t          j        j        j        d           d S )Nsome messager   r>   r?   r@   )r   r   r6   rO   r   r   rn   rp   r   rB   rC   rD   rE   r#   r   clazzrj   ru   s        r   check_raise_instancez TestRaising.check_raise_instance   s    ~#% 		G 		GE#E>::F0C00%0088EUU1XXq)))%%eVUE1EEE%%eVUJJJJ%%eVU&(i&6&BAG G G G		G 		Gr   c                 <    |                      t                     d S r   )r   rz   r   s    r   test_raise_instance_objmodez'TestRaising.test_raise_instance_objmode   s     !!(9!:::::r   c                 <    |                      t                     d S r   )r   r{   r   s    r   test_raise_instance_nopythonz(TestRaising.test_raise_instance_nopython   s    !!!77777r   c                    t           t          t          fD ]}t          |d          }t	          |          } t          di ||          } t          di |t	          |                    }|                     ||||d           |                     |||t          d           |                     |||t          d           dS )zD
        Check exception propagation from nested functions.
        r   r>   r?   r@   Nr   )	r   r   r6   rO   rZ   r   r   rB   r   )r#   r   jit_argsr   inner_pyfuncrj   inner_cfuncru   s           r   check_raise_nestedzTestRaising.check_raise_nested   s     ~#% 		K 		KE)%@@L#L11F)#////,77K#COO(OON;$?$?@@E%%eVUE1EEE%%eVUJJJJ%%eVUJJJJJ		K 		Kr   c                 >    |                      t          d           d S )NT)r   )r   rz   r   s    r   test_raise_nested_objmodez%TestRaising.test_raise_nested_objmode   s"     1DAAAAAr   c                 >    |                      t          d           d S )NT)r   )r   r{   r   s    r   test_raise_nested_nopythonz&TestRaising.test_raise_nested_nopython   s!    >>>>>r   c                   	 d 	t           } t          di ||          }	fdt          f	fdt          f	fdt          ffD ]9\  fd} ||          } ||          }|                     |||           :d S )Nc                     | r   r   )rG   s    r   	raise_excz,TestRaising.check_reraise.<locals>.raise_exc   s    Ir   r   c                  $      t                     S r   )ZeroDivisionErrorr   s   r   <lambda>z+TestRaising.check_reraise.<locals>.<lambda>   s    )),=">"> r   c                  6      t          dd                    S Nmsgr>   r_   r   s   r   r   z+TestRaising.check_reraise.<locals>.<lambda>   s    ))N5!,D,D"E"E r   c                  6      t          dd                    S r   )r6   r   s   r   r   z+TestRaising.check_reraise.<locals>.<lambda>   s    ))M%,C,C"D"D r   c                       fd}|S )Nc                  J    	               d S #  $ r               Y d S w xY wr   r   )errfnops   r   implz9TestRaising.check_reraise.<locals>.gen_impl.<locals>.impl   sC       s   
 ""r   )r   r   r   r   s   ` r   gen_implz+TestRaising.check_reraise.<locals>.gen_impl   s.          
 r   r   )rT   r   r   r   r6   r   )
r#   r   rj   ru   r   pybasedcbasedr   r   r   s
          @@@r   check_reraisezTestRaising.check_reraise   s    	 	 	   %  ((>>>>*,EEEE')DDDD&(	) 	D 	DGB      hv&&GXe__F%%eWfcCCCC	D 	Dr   c                 <    |                      t                     d S r   )r   rz   r   s    r   test_reraise_objmodez TestRaising.test_reraise_objmode  s     !233333r   c                 <    |                      t                     d S r   )r   r{   r   s    r   test_reraise_nopythonz!TestRaising.test_reraise_nopython  s    00000r   c                 0   t          |          } t          t          j        ffi ||          }|                     t
                    5 } |d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr>   z)exceptions must derive from BaseException)	rJ   r   r   rn   rq   	TypeErrorrp   rs   rt   )r#   clsr   rj   ru   rv   s         r   check_raise_invalid_classz%TestRaising.check_raise_invalid_class	  s    S!!,U[N,,e,,V44y)) 	RE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R\**D	F 	F 	F 	F 	Fs   A##A'*A'c                     |                      t          t                     |                      dt                     d S )Nr   r>   )r   intrz   r   s    r    test_raise_invalid_class_objmodez,TestRaising.test_raise_invalid_class_objmode  s<    &&s2C&DDD&&q0A&BBBBBr   c                     d}|                      t          j                  5 }|                     t          t
                     d d d            n# 1 swxY w Y   |                     |t          |j                             |                      t          j                  5 }|                     dt
                     d d d            n# 1 swxY w Y   |                     |t          |j                             d S )Nz8Encountered unsupported constant type used for exceptionr   r>   )	rq   r   UnsupportedErrorr   r   r{   r   rs   rt   )r#   r   raisess      r   !test_raise_invalid_class_nopythonz-TestRaising.test_raise_invalid_class_nopython  so   Hv677 	F6**3n*EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fc3v/00111v677 	D6**1N*CCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dc3v/0011111s#   "AAA"CCCc                     t           d             }d}|                     t          j                  5 } |             d d d            n# 1 swxY w Y   |                     |t          |j                             d S )Nc                      d)Nillegalr   r   r   r   fooz8TestRaising.test_raise_bare_string_nopython.<locals>.foo  s    Or   zCDirectly raising a string constant as an exception is not supported)r   rq   r   r   r   rs   rt   )r#   r   r   r   s       r   test_raise_bare_string_nopythonz+TestRaising.test_raise_bare_string_nopython  s    		 	 
	v677 	6CEEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	c3v/0011111s   A		AAc                     t           } t          t          j        ffi ||          } |d           |                     |||t
          d           d S )Nr>   r?   )r]   r   r   rn   r   AssertionErrorr   s       r   check_assert_statementz"TestRaising.check_assert_statement(  sY    ,U[N,,e,,V44a!!%JJJJJr   c                 <    |                      t                     d S r   )r   rz   r   s    r   test_assert_statement_objmodez)TestRaising.test_assert_statement_objmode.  s     ##*;#<<<<<r   c                 <    |                      t                     d S r   )r   r{   r   s    r   test_assert_statement_nopythonz*TestRaising.test_assert_statement_nopython1  s    ##.#99999r   c                    d}d}d}d}|t           f|t          f|t          fg}t          j        dk    r8|                    |t           f           |                    |t           f           |D ]\\  }}i }	t          |d|i|	           |	d         }
 t          t          j	        ffi ||
          }| 
                    ||
||d           ]d S )	Nz def f(a):
  raise exc('msg', 10)zdef f(a):
  assert a != 1z)def f[T: int](a: T) -> T:
  assert a != 1z*def f[T: int
](a: T) -> T:
  assert a != 1)r@      rG   fr>   )r   r   r6   r   	PYVERSIONappendexecr   r   rn   r   )r#   r   simple_raiseassert_raisepy312_pep695_raisepy312_pep695_raise_2
test_casesf_textrG   locrj   ru   s               r   check_raise_from_exec_stringz(TestRaising.check_raise_from_exec_string4  s   :3IM>*>*=)


 ?g%%1>BCCC3^DEEE% 	D 	DKFCC%s+++XF0C00%0088E%%eVUCCCCC	D 	Dr   c                 <    |                      t                     d S r   )r   rz   r   s    r   $test_assert_from_exec_string_objmodez0TestRaising.test_assert_from_exec_string_objmodeJ  s     ))0A)BBBBBr   c                 <    |                      t                     d S r   )r   r{   r   s    r   %test_assert_from_exec_string_nopythonz1TestRaising.test_assert_from_exec_string_nopythonM  s    )))?????r   c                 x    t           } t          di ||          }|                     |||t                     d S )Nr   r   )r`   r   r   r   r   s       r   check_user_code_error_tracebackz+TestRaising.check_user_code_error_tracebackP  sF     !   %  ((!!%	BBBBBr   c                 <    |                      t                     d S r   )r   rz   r   s    r   &test_user_code_error_traceback_objmodez2TestRaising.test_user_code_error_traceback_objmodeX  s     ,,3D,EEEEEr   c                 <    |                      t                     d S r   )r   r{   r   s    r   'test_user_code_error_traceback_nopythonz3TestRaising.test_user_code_error_traceback_nopython[  s    ,,>,BBBBBr   c                     t           } t          t          j        ffi ||          }|                     |||t
          d           d S )Nhello)rc   r   r   stringr   rB   r   s       r   check_raise_runtime_valuez%TestRaising.check_raise_runtime_value^  sL    $-U\O--u--f55!!%
GLLLLLr   c                 <    |                      t                     d S r   )r   rz   r   s    r    test_raise_runtime_value_objmodez,TestRaising.test_raise_runtime_value_objmodec  s     &&->&?????r   c                 <    |                      t                     d S r   )r   r|   r   s    r   !test_raise_runtime_value_nopythonz-TestRaising.test_raise_runtime_value_nopythonf  s     &&-A&BBBBBr   c                 <    |                      t                     d S r   )r   r}   r   s    r   test_raise_runtime_value_nogilz*TestRaising.test_raise_runtime_value_nogili  s    &&\&:::::r   c           	         t           t          t          fD ]}t          |          } t	          t
          j        t
          j        ffi ||          }|                      |dd          d           | 	                    ||||dd           | 	                    |||t          dd           | 	                    |||t          j        j        j        dd           d S )	Nr   testr>   r   r?   worldr@   rD   )r   r   r6   rR   r   r   rn   r   rp   r   rB   rC   rD   rE   r   s        r   &check_raise_instance_with_runtime_argsz2TestRaising.check_raise_instance_with_runtime_argsl  s    ~#% 
	Q 
	QE077F=Cel3==u==fEEEUU1f--q111%%eVUE1gNNN%%eVUJ&-/ / /%%eVU&(i&6&BAxQ Q Q Q
	Q 
	Qr   c                 <    |                      t                     d S r   )r  rz   r   s    r   -test_raise_instance_with_runtime_args_objmodez9TestRaising.test_raise_instance_with_runtime_args_objmodey  s     33:K3LLLLLr   c                 <    |                      t                     d S r   )r  r|   r   s    r   .test_raise_instance_with_runtime_args_nopythonz:TestRaising.test_raise_instance_with_runtime_args_nopython|  s     33:N3OOOOOr   c                 <    |                      t                     d S r   )r  r}   r   s    r   +test_raise_instance_with_runtime_args_nogilz7TestRaising.test_raise_instance_with_runtime_args_nogil  s    33,3GGGGGr   c                     d }d }d }|df|df|t           j        ffg}|D ]W\  }}d}|                     t          j        |          5   t          |          |           d d d            n# 1 swxY w Y   Xd S )Nc                  J    t          dt          j        d          d          )Nr>      ri   b)rB   rC   onesr   r   r   raise_literal_dictzCTestRaising.test_dynamic_raise_bad_args.<locals>.raise_literal_dict  s     1271::66777r   c                  :    t          t          d                    )Nr@   )rB   ranger   r   r   raise_rangez<TestRaising.test_dynamic_raise_bad_args.<locals>.raise_range  s    U1XX&&&r   c                 *    t          | j                  r   )rB   bit_generator)rngs    r   	raise_rngz:TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rng  s    S.///r   r   z/.*Cannot convert native .* to a Python object.*)r   npy_rngassertRaisesRegexr   TypingErrorr   )r#   r  r  r  funcsrj   argtypesr   s           r   test_dynamic_raise_bad_argsz'TestRaising.test_dynamic_raise_bad_args  s    	8 	8 	8	' 	' 	'	0 	0 	0  $"()
 !& 	' 	'FHCC''(:C@@ ' 'Xv&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	's   	A..A2	5A2	c                     t           d             }d}|                     t          |          5   |             d d d            d S # 1 swxY w Y   d S )Nc                  &    t          ddd          )Nr>   r@   r  rb   r   r   r   raise_literal_dict2z@TestRaising.test_dynamic_raise_dict.<locals>.raise_literal_dict2  s    11--...r   z{a: 1, b: 3})r   r  rB   )r#   r!  r   s      r   test_dynamic_raise_dictz#TestRaising.test_dynamic_raise_dict  s    		/ 	/ 
	/ ##J44 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   AA
A
c                     t          d          d             }d}|                     t          j        |          5   |d           d d d            d S # 1 swxY w Y   d S )NF)r   c                      t          |           r   rb   r\   s    r   raise_with_no_nrtz7TestRaising.test_disable_nrt.<locals>.raise_with_no_nrt      Q--r   zNRT required but not enabled{   )r   r  r   NumbaRuntimeError)r#   r%  r   s      r   test_disable_nrtzTestRaising.test_disable_nrt  s    	5				  	  
		  -##F$<cBB 	# 	#c"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AAAc                     t           d             t           fd            }|                     |                    d           |d                     d S )Nc                      t          |           r   rb   ri   s    r   raise_z*TestRaising.test_try_raise.<locals>.raise_  r&  r   c                 H    	  |            n# t           $ r Y nw xY w| dz   S )Nr>   )r   ri   r-  s    r   	try_raisez-TestRaising.test_try_raise.<locals>.try_raise  s@    q				   q5Ls    
r@   )r   rp   py_func)r#   r0  r-  s     @r   test_try_raisezTestRaising.test_try_raise  su    		  	  
	  
	 	 	 	 
	 	**1--yy||<<<<<r   c           
      x   t           d             t           fd            }dddt          j        d          ddgdt          ddg          g}|fD ]e}|D ]`}|                     t
                    5 } ||           d d d            n# 1 swxY w Y   |                     |f|j        j                   afd S )	Nc                      t          |           r   rb   r,  s    r   r-  z.TestRaising.test_dynamic_raise.<locals>.raise_  r&  r   c                 Z    	  |            d S # t           $ r t          |           w xY wr   )r   rB   r/  s    r   
try_raise_z2TestRaising.test_dynamic_raise.<locals>.try_raise_  s@    $q					 $ $ $ mm#$s    *r>   g?r   r@   r?   )r>   r?   )	r   rC   r  setrq   rB   rp   rt   r)   )r#   r6  r)   r   r$   er-  s         @r   test_dynamic_raisezTestRaising.test_dynamic_raise  s>    
	  	  
	  
	$ 	$ 	$ 	$ 
	$ GAJJFAKK
 :& 	; 	;B ; ;&&z22 aBsGGG                #)9::::;	; 	;s   4BBBN)-r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r"  r)  r2  r	   r
   r9  r   r   r   re   re   }   s       H H H(* (* (*TC C C5 5 58 8 8
G 
G 
G; ; ;8 8 8K K KB B B? ? ?D D D,4 4 41 1 1F F FC C C2 2 22 2 2K K K= = =: : :D D D,C C C@ @ @C C CF F FC C CM M M
@ @ @C C C; ; ;Q Q QM M MP P PH H H' ' '*" " "# # #= = =  ; ;  ; ; ;r   re   __main__)$numpyrC   r   r   numbar   r   
numba.corer   r   r   numba.tests.supportr   r	   r
   unittestrz   r{   r|   r}   r   r   r   r   r6   rJ   rO   rR   rT   rZ   r]   r`   rc   re   r   mainr   r   r   <module>rA     sT       



             + + + + + + + + + +# # # # # # # # # #  "'D99 "E22$($77  4>>	 	 	 	 	i 	 	 		 	 	 	 	 	 	 	E E E E EY E E E"# # # # #I # # #(
 
 
	 	 		 	 	
 
 
        X; X; X; X; X;( X; X; X;v
 zHMOOOOO r   