o
    Z۷i>                     @   s.  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 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_py313FT)nopythonforceobj)r   _nrt)r   nogilr   c                   @      e Zd ZdS )MyErrorN__name__
__module____qualname__ r   r   Q/home/ubuntu/vllm_env/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   r0   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&   r1   r   r'   r   r   r   r*   3   s   zUDENoArgSuper.__eq__c                    s   t tt | j| jfS r   )r+   r   r0   r,   r1   r   r-   r"   r   r   r,   <   s   zUDENoArgSuper.__hash__r.   r   r   r"   r   r0   -   s    	r0   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   raiserB   s   zraise_class.<locals>.raiserr   r?   r@   r   r>   r   raise_classA   s   	rB   c                    s    fdd}|S )Nc                    s>   | dkr	 d| dkrt  d| dkrtj d| S r3   r7   r<   r!   r?   r   r   r@   O      

zraise_instance.<locals>.raiserr   )r?   r!   r@   r   rC   r   raise_instanceN   s   rE   c                    r2   )Nc                    s>   | dkr	 |d| dkrt |d| dkrtj|d| S r3   r7   )r=   r!   r>   r   r   r@   [   rD   z+raise_instance_runtime_args.<locals>.raiserr   rA   r   r>   r   raise_instance_runtime_argsZ   s   rF   c                    C   s    r   r   r   r   r   r   reraisef   s   rG   c                    r2   )Nc                    s   | dkr	t dd | S )Nr6   bar)r   r<   innerr   r   outerk   s   
zouter_function.<locals>.outerr   )rJ   rK   r   rI   r   outer_functionj   s   rL   c                 C   s   | dksJ dd S )Nr4   rH   r   r<   r   r   r   assert_usecaser      rM   c                   C   s   t  r   r   r   r   r   r   ude_bug_usecasev   s   rP   c                 C      t | r   r8   )r!   r   r   r   raise_runtime_valuez   s   rS   c                   @   sX  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,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>.pyfuncr4   Ar5   )dtyper   ztuple index out of range)r   r   Arrayint32r9   emptyassertEqualassertRaises
IndexErrorstr	exception)r    rW   cfuncrV   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^   rb   r&   r%   r   r0   
assertTrue	Exception	tracebackformat_exceptionsysexc_infozipassertIn)r    	exec_moderW   rc   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   sp   t t}ttjffi ||}| |dd | |||td | |||td | |||tj	j	j
d d S )Nr   r4   r5   r6   )rB   r   r   r   r\   r^   r}   r8   r9   r:   r;   r    flagsrW   rc   r   r   r   check_raise_class   s   

zTestRaising.check_raise_classc                 C      | j td d S Nr   )r   rh   r-   r   r   r   test_raise_class_nopython      z%TestRaising.test_raise_class_nopythonc                 C   r   r   )r   rg   r-   r   r   r   test_raise_class_objmode   r   z$TestRaising.test_raise_class_objmodec                 C   s   t ttfD ]9}t|d}ttjffi ||}| |dd | ||||d | |||t	d | |||t
jjjd qd S )Nsome messager   r4   r5   r6   )r   r   r0   rE   r   r   r\   r^   r}   r8   r9   r:   r;   r    r   clazzrW   rc   r   r   r   check_raise_instance   s   


z TestRaising.check_raise_instancec                 C   r   r   )r   rg   r-   r   r   r   test_raise_instance_objmode   r   z'TestRaising.test_raise_instance_objmodec                 C   r   r   )r   rh   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   r4   r5   r6   Nr   )	r   r   r0   rE   rL   r   r}   r8   r   )r    r   jit_argsr   inner_pyfuncrW   inner_cfuncrc   r   r   r   check_raise_nested   s   
zTestRaising.check_raise_nestedc                 C      | j tdd d S )NT)r   )r   rg   r-   r   r   r   test_raise_nested_objmode      z%TestRaising.test_raise_nested_objmodec                 C   r   )NT)r   )r   rh   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msgr4   rO   r   r   r   r   r          c                      r   r   )r0   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   )rG   r   r   r   r0   r}   )r    r   rW   rc   r   pybasedcbasedr   )r   r   r   r   check_reraise   s$   


zTestRaising.check_reraisec                 C   r   r   )r   rg   r-   r   r   r   test_reraise_objmode  r   z TestRaising.test_reraise_objmodec                 C   r   r   )r   rh   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 )Nr4   z)exceptions must derive from BaseException)	rB   r   r   r\   r_   	TypeErrorr^   ra   rb   )r    clsr   rW   rc   rd   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   r4   )r   intrg   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   r4   )	r_   r   UnsupportedErrorr   r   rh   rr   ra   rb   )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   rr   ra   rb   )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 )Nr4   r5   )rM   r   r   r\   r}   AssertionErrorr~   r   r   r   check_assert_statement)  s   z"TestRaising.check_assert_statementc                 C   r   r   )r   rg   r-   r   r   r   test_assert_statement_objmode/  r   z)TestRaising.test_assert_statement_objmodec                 C   r   r   )r   rh   r-   r   r   r   test_assert_statement_nopython2  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)r6      r?   fr4   )r   r   r0   r   	PYVERSIONappendexecr   r   r\   r}   )r    r   simple_raiseassert_raisepy312_pep695_raisepy312_pep695_raise_2
test_casesf_textr?   locrW   rc   r   r   r   check_raise_from_exec_string5  s$   
z(TestRaising.check_raise_from_exec_stringc                 C   r   r   )r   rg   r-   r   r   r   $test_assert_from_exec_string_objmodeK  r   z0TestRaising.test_assert_from_exec_string_objmodec                 C   r   r   )r   rh   r-   r   r   r   %test_assert_from_exec_string_nopythonN  r   z1TestRaising.test_assert_from_exec_string_nopythonc                 C   s*   t }tdi ||}| |||t d S )Nr   r   )rP   r   r}   r   r~   r   r   r   check_user_code_error_tracebackQ  s   z+TestRaising.check_user_code_error_tracebackc                 C   r   r   )r   rg   r-   r   r   r   &test_user_code_error_traceback_objmodeY  r   z2TestRaising.test_user_code_error_traceback_objmodec                 C   r   r   )r   rh   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)rS   r   r   stringr}   r8   r~   r   r   r   check_raise_runtime_value_  s   z%TestRaising.check_raise_runtime_valuec                 C   r   r   )r   rg   r-   r   r   r    test_raise_runtime_value_objmoded  r   z,TestRaising.test_raise_runtime_value_objmodec                 C   r   r   )r   ri   r-   r   r   r   !test_raise_runtime_value_nopythong  r   z-TestRaising.test_raise_runtime_value_nopythonc                 C   r   r   )r   rj   r-   r   r   r   test_raise_runtime_value_nogilj  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jdd qd S )	Nr   testr4   r   r5   worldr6   r:   )r   r   r0   rF   r   r   r\   r   r^   r}   r8   r9   r:   r;   r   r   r   r   &check_raise_instance_with_runtime_argsm  s   
z2TestRaising.check_raise_instance_with_runtime_argsc                 C   r   r   )r   rg   r-   r   r   r   -test_raise_instance_with_runtime_args_objmodez  r   z9TestRaising.test_raise_instance_with_runtime_args_objmodec                 C   r   r   )r   ri   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   rj   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)Nr4      rV   b)r8   r9   onesr   r   r   r   raise_literal_dict  rN   zCTestRaising.test_dynamic_raise_bad_args.<locals>.raise_literal_dictc                   S   s   t td)Nr6   )r8   ranger   r   r   r   raise_range  s   z<TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rangec                 S   s
   t | jr   )r8   bit_generator)rngr   r   r   	raise_rng  rX   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   funcsrW   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)Nr4   r6   r   rR   r   r   r   r   raise_literal_dict2  s   z@TestRaising.test_dynamic_raise_dict.<locals>.raise_literal_dict2z{a: 1, b: 3})r   r   r8   )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   rQ   r   rR   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   rQ   r   rR   rV   r   r   r   raise_  r   z*TestRaising.test_try_raise.<locals>.raise_c                    s,   z	 |  W | d S  t y   Y | d S w )Nr4   )rl   r   r   r   r   	try_raise  s   
z-TestRaising.test_try_raise.<locals>.try_raiser6   )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   rQ   r   rR   r   r   r   r   r     r   z.TestRaising.test_dynamic_raise.<locals>.raise_c                    s&   z |  W d S  t y   t| w r   )rl   r8   r   r   r   r   
try_raise_  s
   z2TestRaising.test_dynamic_raise.<locals>.try_raise_r4   g?r   r6   r5   )r4   r5   )	r   r9   r   setr_   r8   r^   rb   r&   )r    r   r&   r   r!   er   r   r   test_dynamic_raise  s(   

	
zTestRaising.test_dynamic_raiseN).r   r   r   re   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   rT   ~   sX    *		
		rT   __main__)%numpyr9   ro   rm   numbar   r   
numba.corer   r   r   numba.tests.supportr   r   r	   r
   unittestrg   rh   ri   rj   rl   r   r   r   r0   rB   rE   rF   rG   rL   rM   rP   rS   rT   r   mainr   r   r   r   <module>   s:    


  ^