
    ܙd>                        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	 d dl
mZmZ d dlmZmZ d dlZ e            Zde_         e            Z e            Zde_         e            Zde_        de_         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)compile_isolatedFlags)jitnjit)typeserrors)TestCaseexpected_failure_py311Tc                       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   r,   zUDEArgsToSuper.__hash__-   s,    U>**3355t{CDDDr   r   r   r   r   r)   r,   __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   r2   r   deferargr   r   s      r   r   zUDENoArgSuper.__init__2   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%   r4   r   r&   s      r   r)   zUDENoArgSuper.__eq__7   s^    %00 	5	UZ''//u|++r   c                     t          t          t                                                    | j        | j        f          S r   )r+   r   r2   r,   r4   r   r-   s    r   r,   zUDENoArgSuper.__hash__@   s9    U=))2244dm[" # # 	#r   r.   r0   s   @r   r2   r2   1   s`            
  # # # # # # # # #r   r2   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>.raiserF   s9    66I!VV!VV)''r   r   rC   rD   s   ` r   raise_classrF   E   s#         Mr   c                       fd}|S )Nc                     | dk    r d          | dk    rt          d          | dk    r t          j                            d          | S r9   r=   rB   r    rC   s    r   rD   zraise_instance.<locals>.raiserS   [    66#c1++!VVS!$$$!VV)''Q///r   r   )rC   r    rD   s   `` r   raise_instancerK   R   s)          Mr   c                       fd}|S )Nc                     | dk    r |d          | dk    rt          |d          | dk    r t          j                            |d          | S r9   r=   rI   s     r   rD   z+raise_instance_runtime_args.<locals>.raiser_   rJ   r   r   rE   s   ` r   raise_instance_runtime_argsrN   ^   s#         Mr   c                        r   r   r   r   r   reraiserP   j   s    	r   c                       fd}|S )Nc                 F    | dk    rt          dd           |           S )Nr<   bar)r   )rB   inners    r   outerzouter_function.<locals>.outero   s)    66UA&&&uQxxr   r   )rT   rU   s   ` r   outer_functionrV   n   s#         Lr   c                 &    | dk    s
J d            d S )Nr:   rS   r   rB   s    r   assert_usecaserY   v   s    666566666r   c                      t                      r   r   r   r   r   ude_bug_usecaser\   z   s    


r   c                      t          |           r   r>   )r    s    r   raise_runtime_valuer_   ~   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*d(             Z+d)S )*TestRaisingc                    d }t          |t          j        t          j        dd          t          j        f          }|j        }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)arB   s     r   pyfuncz5TestRaising.test_unituple_index_error.<locals>.pyfunc   s    71:r   r:   Ar;   )dtyper   ztuple index out of range)r   r   Arrayint32entry_pointr?   emptyassertEqualassertRaises
IndexErrorstr	exception)r   rf   crescfuncre   cms         r   test_unituple_index_errorz%TestRaising.test_unituple_index_error   s&   	 	 	  U[!S)I)I).)6 7 7  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_flagsrn   rm   rq   r%   r$   r   r2   
assertTrue	Exception	tracebackformat_exceptionsysexc_infozipassertIn)r   	exec_moderf   rs   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|          }|j        }|                      |d          d           |                     |||t          d           |                     |||t          d           |                     |||t          j
        j
        j        d           d S )Nflagsr   r:   r;   r<   )rF   r   r   r   rj   rk   rm   r   r>   r?   r@   rA   r   r   rf   rr   rs   s        r   check_raise_classzTestRaising.check_raise_class   s    W%%eDDD q1%%%!!%CCC!!%
AFFF!!%"$)"2">	C 	C 	C 	C 	Cr   c                 <    |                      t                     d S Nr   )r   ry   r   s    r   test_raise_class_nopythonz%TestRaising.test_raise_class_nopython   s    ^44444r   c                 <    |                      t                     d S r   )r   rx   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|          }|j        }|                      |d          d           | 	                    ||||d           | 	                    |||t          d           | 	                    |||t          j        j        j        d           d S )Nsome messager   r   r:   r;   r<   )r   r   r2   rK   r   r   rj   rk   rm   r   r>   r?   r@   rA   r   r   clazzrf   rr   rs   s         r   check_raise_instancez TestRaising.check_raise_instance   s    ~#% 
	G 
	GE#E>::F#FU[N%HHHD$E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   rx   r   s    r   test_raise_instance_objmodez'TestRaising.test_raise_instance_objmode   s     !!(9!:::::r   c                 <    |                      t                     d S r   )r   ry   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   r2   rK   rV   r   r   r>   r   )r   r   jit_argsr   inner_pyfuncrf   inner_cfuncrs   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)forceobj)r   rx   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)nopython)r   ry   r   s    r   test_raise_nested_nopythonz&TestRaising.test_raise_nested_nopython   s!    >>>>>r   c                   	
 d 
t           }t          |d|          }|j        }
fdt          f
fdt          f
fdt
          ffD ]9\  		fd} ||          } ||          }|                     |||           :d S )Nc                     | r   r   )rC   s    r   	raise_excz,TestRaising.check_reraise.<locals>.raise_exc   s    Ir   r   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   )r2   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   )rP   r   rk   r   r   r2   r   )r   r   rf   rr   rs   r   pybasedcbasedr   r   r   s           @@@r   check_reraisezTestRaising.check_reraise   s    	 	 	%888 >>>>*,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   rx   r   s    r   test_reraise_objmodez TestRaising.test_reraise_objmode  s     !233333r   c                 <    |                      t                     d S r   )r   ry   r   s    r   test_reraise_nopythonz!TestRaising.test_reraise_nopython  s    00000r   c                 6   t          |          }t          |t          j        f|          }|j        }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     t          |j	                  d           d S )Nr   r:   z)exceptions must derive from BaseException)
rF   r   r   rj   rk   rn   	TypeErrorrm   rp   rq   )r   clsr   rf   rr   rs   rt   s          r   check_raise_invalid_classz%TestRaising.check_raise_invalid_class  s    S!!eDDD 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   intrx   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:   )	rn   r   UnsupportedErrorr   r   ry   r   rp   rq   )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   rn   r   r   r   rp   rq   )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|          }|j        } |d           |                     |||t          d           d S )Nr   r:   r;   )rY   r   r   rj   rk   r   AssertionErrorr   s        r   check_assert_statementz"TestRaising.check_assert_statement3  sV    eDDD a!!%JJJJJr   c                 <    |                      t                     d S r   )r   rx   r   s    r   test_assert_statement_objmodez)TestRaising.test_assert_statement_objmode:  s     ##*;#<<<<<r   c                 <    |                      t                     d S r   )r   ry   r   s    r   test_assert_statement_nopythonz*TestRaising.test_assert_statement_nopython=  s    ##.#99999r   c                    d}d}|t           f|t          f|t          ffD ]_\  }}i }t          |d|i|           |d         }t	          |t
          j        f|          }|j        }	|                     |||	|d           `d S )Nz def f(a):
  raise exc('msg', 10)zdef f(a):
  assert a != 1rC   fr   r:   )	r   r   r2   execr   r   rj   rk   r   )
r   r   simple_raiseassert_raisef_textrC   locrf   rr   rs   s
             r   check_raise_from_exec_stringz(TestRaising.check_raise_from_exec_string@  s    :3)>:)>:)=9; 	D 	DKFC C%s+++XF#FU[N%HHHD$E%%eVUCCCCC	D 	Dr   c                 <    |                      t                     d S r   )r   rx   r   s    r   $test_assert_from_exec_string_objmodez0TestRaising.test_assert_from_exec_string_objmodeN  s     ))0A)BBBBBr   c                 <    |                      t                     d S r   )r   ry   r   s    r   %test_assert_from_exec_string_nopythonz1TestRaising.test_assert_from_exec_string_nopythonQ  s    )))?????r   c                     t           }t          |d|          }|j        }|                     |||t                     d S )Nr   r   )r\   r   rk   r   r   r   s        r   check_user_code_error_tracebackz+TestRaising.check_user_code_error_tracebackT  sE     !%888 !!%	BBBBBr   c                 <    |                      t                     d S r   )r   rx   r   s    r   &test_user_code_error_traceback_objmodez2TestRaising.test_user_code_error_traceback_objmode]  s     ,,3D,EEEEEr   c                 <    |                      t                     d S r   )r   ry   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|          }|j        }|                     |||t          d           d S )Nr   hello)r_   r   r   stringrk   r   r>   r   s        r   check_raise_runtime_valuez%TestRaising.check_raise_runtime_valuec  sI    $uEEE !!%
GLLLLLr   c                 <    |                      t                     d S r   )r   rx   r   s    r    test_raise_runtime_value_objmodez,TestRaising.test_raise_runtime_value_objmodei  s     &&->&?????r   c                 <    |                      t                     d S r   )r   rz   r   s    r   !test_raise_runtime_value_nopythonz-TestRaising.test_raise_runtime_value_nopythonl  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_nogilo  s    &&\&:::::r   c           	         t           t          t          fD ]}t          |          }t	          |t
          j        t
          j        f|          }|j        }| 	                     |dd          d           | 
                    ||||dd           | 
                    |||t          dd           | 
                    |||t          j        j        j        dd	           d S )
Nr   r   testr:   r   r;   worldr<   r@   )r   r   r2   rN   r   r   rj   r   rk   rm   r   r>   r?   r@   rA   r   s         r   &check_raise_instance_with_runtime_argsz2TestRaising.check_raise_instance_with_runtime_argsr  s    ~#% 	Q 	QE077F#FU[%,,G*/1 1 1D$E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   rx   r   s    r   -test_raise_instance_with_runtime_args_objmodez9TestRaising.test_raise_instance_with_runtime_args_objmode  s     33:K3LLLLLr   c                 <    |                      t                     d S r   )r   rz   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 ]O\  }}d}|                     t          j        |          5  t          ||           d d d            n# 1 swxY w Y   Pd S )Nc                  J    t          dt          j        d          d          )Nr:      re   b)r>   r?   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<   )r>   ranger   r   r   raise_rangez<TestRaising.test_dynamic_raise_bad_args.<locals>.raise_range  s    U1XX&&&r   c                 *    t          | j                  r   )r>   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  funcsrf   argtypesr   s           r   test_dynamic_raise_bad_argsz'TestRaising.test_dynamic_raise_bad_args  s    	8 	8 	8	' 	' 	'	0 	0 	0  $"()
 !& 	3 	3FHCC''(:C@@ 3 3 2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3s   	A&&A*	-A*	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  r^   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  r>   )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)_nrtc                      t          |           r   r^   rX   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   r^   re   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}   re   r'  s    r   	try_raisez-TestRaising.test_try_raise.<locals>.try_raise  s@    q				   q5Ls    
r<   )r   rm   py_func)r   r*  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   r^   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}   r>   r)  s    r   
try_raise_z2TestRaising.test_dynamic_raise.<locals>.try_raise_  s@    $q					 $ $ $ mm#$s    *r:   g?r   r<   r;   )r:   r;   )	r   r?   r	  setrn   r>   assertEqualsrq   r%   )r   r0  r%   r   r    er'  s         @r   test_dynamic_raisezTestRaising.test_dynamic_raise  s>    
	  	  
	  
	$ 	$ 	$ 	$ 
	$ GAJJFAKK
 :& 	< 	<B < <&&z22 aBsGGG              !!3&!+*:;;;;<	< 	<s   4BBBN),r   r   r   ru   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#  r,  r
   r4  r   r   r   ra   ra      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3 3 3*" " "# # #= = =  < < < < <r   ra   __main__)(numpyr?   r   r~   numba.core.compilerr   r   numbar   r   
numba.corer   r   numba.tests.supportr	   r
   unittestrx   force_pyobjectry   rz   nrtr{   release_gilr}   r   r   r   r2   rF   rK   rN   rP   rV   rY   r\   r_   ra   r   mainr   r   r   <module>r@     s`       



     7 7 7 7 7 7 7 7         $ $ $ $ $ $ $ $ @ @ @ @ @ @ @ @ EGG #'   uww   uww  	 	 	 	 	i 	 	 		 	 	 	 	 	 	 	E E E E EY E E E"# # # # #I # # #(
 
 
	 	 		 	 	
 
 
        Z< Z< Z< Z< Z<( Z< Z< Z<z
 zHMOOOOO r   