o
    i?                     @   s2  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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 deZG dd deZG dd deZG dd deZdd Zdd Zdd Zdd Zdd Zdd Z dd Z!d d! Z"G d"d# d#eZ#e$d$kre%  dS dS )%    N)jitnjit)typeserrorsutils)TestCaseexpected_failure_py311expected_failure_py312expected_failure_py313expected_failure_py314FT)nopythonforceobj)r   _nrt)r   nogilr   c                   @      e Zd ZdS )MyErrorN__name__
__module____qualname__ r   r   Y/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_exceptions.pyr          r   c                   @   r   )
OtherErrorNr   r   r   r   r   r      r   r   c                       0   e Zd Z fddZdd Z fddZ  ZS )UDEArgsToSuperc                    s   t t| | || _d S N)superr   __init__value0selfargr   	__class__r   r   r      s   
zUDEArgsToSuper.__init__c                 C   s8   t || jsdS d}|| j|jkO }|| j|jkO }|S NFT)
isinstancer$   argsr   r!   othersamer   r   r   __eq__"   s   zUDEArgsToSuper.__eq__c                    s   t tt | jfS r   )hashr   r   __hash__r   r!   r#   r   r   r-   *   s   zUDEArgsToSuper.__hash__r   r   r   r   r+   r-   __classcell__r   r   r#   r   r      s    r   c                       r   )UDENoArgSuperc                    s   t t|   || _|| _d S r   )r   r1   r   deferargr   r    r#   r   r   r   /   s   
zUDENoArgSuper.__init__c                 C   sH   t || jsdS d}|| j|jkO }|| j|jkO }|| j|jkO }|S r%   )r&   r$   r'   r2   r   r(   r   r   r   r+   4   s   zUDENoArgSuper.__eq__c                    s   t tt | j| jfS r   )r,   r   r1   r-   r2   r   r.   r#   r   r   r-   =   s   zUDENoArgSuper.__hash__r/   r   r   r#   r   r1   .   s    	r1   c                        fdd}|S )Nc                    s,   | dkr | dkrt | dkrtjj| S N         
ValueErrornplinalgLinAlgErroriexcr   r   raiserC   s   zraise_class.<locals>.raiserr   r@   rA   r   r?   r   raise_classB   s   	rC   c                    s    fdd}|S )Nc                    s>   | dkr	 d| dkrt  d| dkrtj d| S r4   r8   r=   r"   r@   r   r   rA   P      

zraise_instance.<locals>.raiserr   )r@   r"   rA   r   rD   r   raise_instanceO   s   rF   c                    r3   )Nc                    s>   | dkr	 |d| dkrt |d| dkrtj|d| S r4   r8   )r>   r"   r?   r   r   rA   \   rE   z+raise_instance_runtime_args.<locals>.raiserr   rB   r   r?   r   raise_instance_runtime_args[   s   rG   c                    C   s    r   r   r   r   r   r   reraiseg   s   rH   c                    r3   )Nc                    s   | dkr	t dd | S )Nr7   bar)r   r=   innerr   r   outerl   s   
zouter_function.<locals>.outerr   )rK   rL   r   rJ   r   outer_functionk   s   rM   c                 C   s   | dksJ dd S )Nr5   rI   r   r=   r   r   r   assert_usecases      rN   c                   C   s   t  r   r   r   r   r   r   ude_bug_usecasew   s   rQ   c                 C      t | r   r9   )r"   r   r   r   raise_runtime_value{   s   rT   c                   @   s\  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)e*e+e,e-dOdP Z.dQS )RTestRaisingc                 C   s   dd }t ttjddtjf|}tjdtjd}| ||d||d | t}||d W d    n1 s<w   Y  | t	|j
d d S )	Nc                 S   s
   | j | S r   )shape)ar>   r   r   r   pyfunc      
z5TestRaising.test_unituple_index_error.<locals>.pyfuncr5   Ar6   )dtyper   ztuple index out of range)r   r   Arrayint32r:   emptyassertEqualassertRaises
IndexErrorstr	exception)r!   rX   cfuncrW   cmr   r   r   test_unituple_index_error   s   z%TestRaising.test_unituple_index_errorc                 G   sR  |t tttfv s
J | |}||  W d    n1 sw   Y  | |}||  W d    n1 s7w   Y  | |jj|jj t|jt	t
frW| |j|jk |tu rz||  W n tyw   tjt  }|dd  }	Y nw z||  W n ty   tjt  }
|
dd  }Y nw t|	|D ]\}}| || qd S d S )N)force_pyobj_flagsno_pyobj_flagsno_pyobj_flags_w_nrtno_gil_flagsr`   r_   rc   r'   r&   r   r1   
assertTrue	Exception	tracebackformat_exceptionsysexc_infozipassertIn)r!   	exec_moderX   rd   expected_error_classr'   pyerrjiterr	py_framesexpected_framesc_frames
got_framesexpfgotfr   r   r   check_against_python   s:   


z TestRaising.check_against_pythonc                 C   sn   t t}ttjffi ||}| |dd | |||td | |||td | |||tj	j
d d S )Nr   r5   r6   r7   )rC   r   r   r   r]   r_   r~   r9   r:   r;   r<   r!   flagsrX   rd   r   r   r   check_raise_class   s   
zTestRaising.check_raise_classc                 C      | j td d S Nr   )r   ri   r.   r   r   r   test_raise_class_nopython      z%TestRaising.test_raise_class_nopythonc                 C   r   r   )r   rh   r.   r   r   r   test_raise_class_objmode   r   z$TestRaising.test_raise_class_objmodec                 C   s   t ttfD ]8}t|d}ttjffi ||}| |dd | ||||d | |||t	d | |||t
jjd qd S )Nsome messager   r5   r6   r7   )r   r   r1   rF   r   r   r]   r_   r~   r9   r:   r;   r<   r!   r   clazzrX   rd   r   r   r   check_raise_instance   s   

z TestRaising.check_raise_instancec                 C   r   r   )r   rh   r.   r   r   r   test_raise_instance_objmode   r   z'TestRaising.test_raise_instance_objmodec                 C   r   r   )r   ri   r.   r   r   r   test_raise_instance_nopython   r   z(TestRaising.test_raise_instance_nopythonc                 K   s   t ttfD ]:}t|d}t|}tdi ||}tdi |t|}| ||||d | |||td | |||td qdS )zD
        Check exception propagation from nested functions.
        r   r5   r6   r7   Nr   )	r   r   r1   rF   rM   r   r~   r9   r   )r!   r   jit_argsr   inner_pyfuncrX   inner_cfuncrd   r   r   r   check_raise_nested   s   
zTestRaising.check_raise_nestedc                 C      | j tdd d S )NT)r   )r   rh   r.   r   r   r   test_raise_nested_objmode      z%TestRaising.test_raise_nested_objmodec                 C   r   )NT)r   )r   ri   r.   r   r   r   test_raise_nested_nopython   r   z&TestRaising.test_raise_nested_nopythonc                    s   dd t }td
i ||}fddtffddtffddtffD ]\  fdd	}||}||}| |||  q&d S )Nc                 S   s   | r   r   r?   r   r   r   	raise_exc   s   z,TestRaising.check_reraise.<locals>.raise_excr   c                      s    t S r   )ZeroDivisionErrorr   r   r   r   <lambda>   s    z+TestRaising.check_reraise.<locals>.<lambda>c                          t ddS Nmsgr5   rP   r   r   r   r   r          c                      r   r   )r1   r   r   r   r   r      r   c                    s    fdd}|S )Nc                      s(   z  W d S   y     Y d S w r   r   r   )errfnopr   r   impl   s
   z9TestRaising.check_reraise.<locals>.gen_impl.<locals>.implr   )r   r   )r   r   )r   r   gen_impl   s   z+TestRaising.check_reraise.<locals>.gen_implr   )rH   r   r   r   r1   r~   )r!   r   rX   rd   r   pybasedcbasedr   )r   r   r   r   check_reraise   s$   


zTestRaising.check_reraisec                 C   r   r   )r   rh   r.   r   r   r   test_reraise_objmode  r   z TestRaising.test_reraise_objmodec                 C   r   r   )r   ri   r.   r   r   r   test_reraise_nopython  r   z!TestRaising.test_reraise_nopythonc                 C   sh   t |}ttjffi ||}| t}|d W d    n1 s$w   Y  | t|jd d S )Nr5   z)exceptions must derive from BaseException)	rC   r   r   r]   r`   	TypeErrorr_   rb   rc   )r!   clsr   rX   rd   re   r   r   r   check_raise_invalid_class  s   
z%TestRaising.check_raise_invalid_classc                 C   s    | j ttd | j dtd d S )Nr   r5   )r   intrh   r.   r   r   r    test_raise_invalid_class_objmode  s   z,TestRaising.test_raise_invalid_class_objmodec                 C   s   d}|  tj}| jttd W d    n1 sw   Y  | |t|j |  tj}| jdtd W d    n1 s@w   Y  | |t|j d S )Nz8Encountered unsupported constant type used for exceptionr   r5   )	r`   r   UnsupportedErrorr   r   ri   rs   rb   rc   )r!   r   raisesr   r   r   !test_raise_invalid_class_nopython  s   z-TestRaising.test_raise_invalid_class_nopythonc                 C   sX   t dd }d}| tj}|  W d    n1 sw   Y  | |t|j d S )Nc                   S   s   d)Nillegalr   r   r   r   r   foo!  s   z8TestRaising.test_raise_bare_string_nopython.<locals>.foozCDirectly raising a string constant as an exception is not supported)r   r`   r   r   rs   rb   rc   )r!   r   r   r   r   r   r   test_raise_bare_string_nopython   s   
z+TestRaising.test_raise_bare_string_nopythonc                 C   s:   t }ttjffi ||}|d | |||td d S )Nr5   r6   )rN   r   r   r]   r~   AssertionErrorr   r   r   r   check_assert_statement*  s   z"TestRaising.check_assert_statementc                 C   r   r   )r   rh   r.   r   r   r   test_assert_statement_objmode0  r   z)TestRaising.test_assert_statement_objmodec                 C   r   r   )r   ri   r.   r   r   r   test_assert_statement_nopython3  r   z*TestRaising.test_assert_statement_nopythonc                 C   s   d}d}d}d}|t f|tf|tfg}tjdkr&||t f ||t f |D ]'\}}i }	t|d|i|	 |	d }
ttj	ffi ||
}| 
||
||d q(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)r7      r@   fr5   )r   r   r1   r   	PYVERSIONappendexecr   r   r]   r~   )r!   r   simple_raiseassert_raisepy312_pep695_raisepy312_pep695_raise_2
test_casesf_textr@   locrX   rd   r   r   r   check_raise_from_exec_string6  s$   
z(TestRaising.check_raise_from_exec_stringc                 C   r   r   )r   rh   r.   r   r   r   $test_assert_from_exec_string_objmodeL  r   z0TestRaising.test_assert_from_exec_string_objmodec                 C   r   r   )r   ri   r.   r   r   r   %test_assert_from_exec_string_nopythonO  r   z1TestRaising.test_assert_from_exec_string_nopythonc                 C   s*   t }tdi ||}| |||t d S )Nr   r   )rQ   r   r~   r   r   r   r   r   check_user_code_error_tracebackR  s   z+TestRaising.check_user_code_error_tracebackc                 C   r   r   )r   rh   r.   r   r   r   &test_user_code_error_traceback_objmodeZ  r   z2TestRaising.test_user_code_error_traceback_objmodec                 C   r   r   )r   ri   r.   r   r   r   'test_user_code_error_traceback_nopython]  r   z3TestRaising.test_user_code_error_traceback_nopythonc                 C   s2   t }ttjffi ||}| |||td d S )Nhello)rT   r   r   stringr~   r9   r   r   r   r   check_raise_runtime_value`  s   z%TestRaising.check_raise_runtime_valuec                 C   r   r   )r   rh   r.   r   r   r    test_raise_runtime_value_objmodee  r   z,TestRaising.test_raise_runtime_value_objmodec                 C   r   r   )r   rj   r.   r   r   r   !test_raise_runtime_value_nopythonh  r   z-TestRaising.test_raise_runtime_value_nopythonc                 C   r   r   )r   rk   r.   r   r   r   test_raise_runtime_value_nogilk  r   z*TestRaising.test_raise_runtime_value_nogilc              	   C   s   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dd qd S )	Nr   testr5   r   r6   worldr7   r;   )r   r   r1   rG   r   r   r]   r   r_   r~   r9   r:   r;   r<   r   r   r   r   &check_raise_instance_with_runtime_argsn  s   

z2TestRaising.check_raise_instance_with_runtime_argsc                 C   r   r   )r   rh   r.   r   r   r   -test_raise_instance_with_runtime_args_objmode{  r   z9TestRaising.test_raise_instance_with_runtime_args_objmodec                 C   r   r   )r   rj   r.   r   r   r   .test_raise_instance_with_runtime_args_nopython~  r   z:TestRaising.test_raise_instance_with_runtime_args_nopythonc                 C   r   r   )r   rk   r.   r   r   r   +test_raise_instance_with_runtime_args_nogil  r   z7TestRaising.test_raise_instance_with_runtime_args_nogilc              	   C   s   dd }dd }dd }|df|df|t jffg}|D ]#\}}d}| tj| t|| W d    n1 s9w   Y  qd S )	Nc                   S   s   t dtdd)Nr5      rW   b)r9   r:   onesr   r   r   r   raise_literal_dict  rO   zCTestRaising.test_dynamic_raise_bad_args.<locals>.raise_literal_dictc                   S   s   t td)Nr7   )r9   ranger   r   r   r   raise_range  s   z<TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rangec                 S   s
   t | jr   )r9   bit_generator)rngr   r   r   	raise_rng  rY   z:TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rngr   z/.*Cannot convert native .* to a Python object.*)r   npy_rngassertRaisesRegexr   TypingErrorr   )r!   r   r   r   funcsrX   argtypesr   r   r   r   test_dynamic_raise_bad_args  s   
z'TestRaising.test_dynamic_raise_bad_argsc                 C   sH   t dd }d}| t| |  W d    d S 1 sw   Y  d S )Nc                   S   s   t ddd)Nr5   r7   r   rS   r   r   r   r   raise_literal_dict2  s   z@TestRaising.test_dynamic_raise_dict.<locals>.raise_literal_dict2z{a: 1, b: 3})r   r   r9   )r!   r   r   r   r   r   test_dynamic_raise_dict  s   
"z#TestRaising.test_dynamic_raise_dictc                 C   sR   t dddd }d}| tj| |d W d    d S 1 s"w   Y  d S )NF)r   c                 S   rR   r   rS   r=   r   r   r   raise_with_no_nrt     z7TestRaising.test_disable_nrt.<locals>.raise_with_no_nrtzNRT required but not enabled{   )r   r   r   NumbaRuntimeError)r!   r   r   r   r   r   test_disable_nrt  s   

"zTestRaising.test_disable_nrtc                    s6   t dd  t  fdd}| |d|d d S )Nc                 S   rR   r   rS   rW   r   r   r   raise_  r   z*TestRaising.test_try_raise.<locals>.raise_c                    s,   z	 |  W | d S  t y   Y | d S w )Nr5   )rm   r   r   r   r   	try_raise  s   
z-TestRaising.test_try_raise.<locals>.try_raiser7   )r   r_   py_func)r!   r   r   r   r   test_try_raise  s
   
zTestRaising.test_try_raisec              
      s   t dd  t  fdd}dddtddd	gd
tdd	gg} |fD ])}|D ]$}| t}|| W d    n1 s>w   Y  | |f|jj q(q$d S )Nc                 S   rR   r   rS   r   r   r   r   r     r   z.TestRaising.test_dynamic_raise.<locals>.raise_c                    s&   z |  W d S  t y   t| w r   )rm   r9   r   r   r   r   
try_raise_  s
   z2TestRaising.test_dynamic_raise.<locals>.try_raise_r5   g?r   r7   r6   )r5   r6   )	r   r:   r   setr`   r9   r_   rc   r'   )r!   r   r'   r   r"   er   r   r   test_dynamic_raise  s(   

	
zTestRaising.test_dynamic_raiseN)/r   r   r   rf   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   r	   r
   r   r   r   r   r   r   rU      sZ    *		
		rU   __main__)&numpyr:   rp   rn   numbar   r   
numba.corer   r   r   numba.tests.supportr   r   r	   r
   r   unittestrh   ri   rj   rk   rm   r   r   r   r1   rC   rF   rG   rH   rM   rN   rQ   rT   rU   r   mainr   r   r   r   <module>   s:    


  _