U
    9%e>                     @   s6  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 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r2e'  dS )"    N)compile_isolatedFlags)jitnjit)typeserrors)TestCaseexpected_failure_py311Tc                   @   s   e Zd ZdS )MyErrorN__name__
__module____qualname__ r   r   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_exceptions.pyr
      s   r
   c                   @   s   e Zd ZdS )
OtherErrorNr   r   r   r   r   r      s   r   c                       s0   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   otherZ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                       s0   e Zd Z fddZdd Z fddZ  ZS )UDENoArgSuperc                    s   t t|   || _|| _d S r   )r   r'   r   deferargr   r   r   r   r   r   2   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   r(   r   r   r   r   r   r!   7   s    zUDENoArgSuper.__eq__c                    s   t tt | j| jfS r   )r"   r   r'   r#   r(   r   r$   r   r   r   r#   @   s    zUDENoArgSuper.__hash__r%   r   r   r   r   r'   1   s   	r'   c                    s    fdd}|S )Nc                    s0   | dkr n| dkrt n| dkr,tjj| S N         
ValueErrornplinalgLinAlgErroriexcr   r   raiserF   s    zraise_class.<locals>.raiserr   r5   r6   r   r4   r   raise_classE   s    	r8   c                    s    fdd}|S )Nc                    sB   | dkr dn*| dkr(t  dn| dkr>tj d| S r)   r-   r2   r   r5   r   r   r6   S   s    zraise_instance.<locals>.raiserr   )r5   r   r6   r   r9   r   raise_instanceR   s    r:   c                    s    fdd}|S )Nc                    sB   | dkr |dn*| dkr(t |dn| dkr>tj|d| S r)   r-   )r3   r   r4   r   r   r6   _   s    z+raise_instance_runtime_args.<locals>.raiserr   r7   r   r4   r   raise_instance_runtime_args^   s    r;   c                    C   s    d S r   r   r   r   r   r   reraisej   s    r<   c                    s    fdd}|S )Nc                    s   | dkrt dd | S )Nr,   bar)r   r2   innerr   r   outero   s    
zouter_function.<locals>.outerr   )r?   r@   r   r>   r   outer_functionn   s    rA   c                 C   s   | dkst dd S )Nr*   r=   )AssertionErrorr2   r   r   r   assert_usecasev   s    rC   c                   C   s
   t  d S r   r   r   r   r   r   ude_bug_usecasez   s    rE   c                 C   s   t | d S r   r.   )r   r   r   r   raise_runtime_value~   s    rG   c                   @   sP  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*dOdP Z+dQS )RTestRaisingc              	   C   s   dd }t |ttjddtjf}|j}tjdtjd}| ||d||d | t	}||d W 5 Q R X | t
|jd d S )	Nc                 S   s
   | j | S r   )shape)ar3   r   r   r   pyfunc   s    z5TestRaising.test_unituple_index_error.<locals>.pyfuncr*   Ar+   )Zdtyper   ztuple index out of range)r   r   ZArrayint32entry_pointr/   emptyassertEqualassertRaises
IndexErrorstr	exception)r   rK   crescfuncrJ   cmr   r   r   test_unituple_index_error   s    z%TestRaising.test_unituple_index_errorc              	   G   s0  |t tttfkst| |}||  W 5 Q R X | |}||  W 5 Q R X | |jj|jj t	|jt
tfr| |j|jk |tkr,z||  W n. tk
r   tjt  }|dd  }	Y nX z||  W n0 tk
r   tjt  }
|
dd  }Y nX t|	|D ]\}}| || qd S )N)force_pyobj_flagsno_pyobj_flagsno_pyobj_flags_w_nrtno_gil_flagsrB   rQ   rP   rT   r   r   r   r'   
assertTrue	Exception	tracebackformat_exceptionsysexc_infozipassertIn)r   Z	exec_moderK   rV   Zexpected_error_classr   ZpyerrZjiterrZ	py_framesZexpected_framesZc_framesZ
got_framesZexpfZgotfr   r   r   check_against_python   s0     

z TestRaising.check_against_pythonc                 C   sp   t t}t|tjf|d}|j}| |dd | |||td | |||td | |||t	j
j
jd d S )Nflagsr   r*   r+   r,   )r8   r
   r   r   rM   rN   rP   rf   r.   r/   r0   r1   r   rh   rK   rU   rV   r   r   r   check_raise_class   s    
 zTestRaising.check_raise_classc                 C   s   | j td d S Nrg   )rj   r[   r$   r   r   r   test_raise_class_nopython   s    z%TestRaising.test_raise_class_nopythonc                 C   s   | j td d S rk   )rj   rZ   r$   r   r   r   test_raise_class_objmode   s    z$TestRaising.test_raise_class_objmodec                 C   s   t ttfD ]r}t|d}t|tjf|d}|j}| |dd | 	||||d | 	|||t
d | 	|||tjjjd q
d S )Nsome messagerg   r   r*   r+   r,   )r
   r   r'   r:   r   r   rM   rN   rP   rf   r.   r/   r0   r1   r   rh   clazzrK   rU   rV   r   r   r   check_raise_instance   s    

 z TestRaising.check_raise_instancec                 C   s   | j td d S rk   )rq   rZ   r$   r   r   r   test_raise_instance_objmode   s    z'TestRaising.test_raise_instance_objmodec                 C   s   | j td d S rk   )rq   r[   r$   r   r   r   test_raise_instance_nopython   s    z(TestRaising.test_raise_instance_nopythonc                 K   s|   t ttfD ]l}t|d}t|}tf ||}tf |t|}| ||||d | |||td | |||td q
dS )zD
        Check exception propagation from nested functions.
        rn   r*   r+   r,   N)	r
   r   r'   r:   rA   r   rf   r.   r   )r   rh   Zjit_argsrp   Zinner_pyfuncrK   Zinner_cfuncrV   r   r   r   check_raise_nested   s    
zTestRaising.check_raise_nestedc                 C   s   | j tdd d S )NT)Zforceobj)rt   rZ   r$   r   r   r   test_raise_nested_objmode   s    z%TestRaising.test_raise_nested_objmodec                 C   s   | j tdd d S )NT)Znopython)rt   r[   r$   r   r   r   test_raise_nested_nopython   s    z&TestRaising.test_raise_nested_nopythonc                    s   dd t }t|d|d}|j}fddtffddtffddtffD ]6\  fd	d
}||}||}| |||  qNd S )Nc                 S   s   | d S r   r   r4   r   r   r   	raise_exc   s    z,TestRaising.check_reraise.<locals>.raise_excr   rg   c                      s    t S r   )ZeroDivisionErrorr   rw   r   r   <lambda>       z+TestRaising.check_reraise.<locals>.<lambda>c                      s    t ddS Nmsgr*   rD   r   ry   r   r   rz      r{   c                      s    t ddS r|   )r'   r   ry   r   r   rz      r{   c                    s    fdd}|S )Nc                      s*   z
  W n  k
r$     Y nX d S 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<   r   rN   rx   r   r'   rf   )r   rh   rK   rU   rV   r   ZpybasedZcbasedr   )r~   r   rw   r   check_reraise   s$    


zTestRaising.check_reraisec                 C   s   | j td d S rk   )r   rZ   r$   r   r   r   test_reraise_objmode  s    z TestRaising.test_reraise_objmodec                 C   s   | j td d S rk   )r   r[   r$   r   r   r   test_reraise_nopython  s    z!TestRaising.test_reraise_nopythonc              	   C   sT   t |}t|tjf|d}|j}| t}|d W 5 Q R X | t|j	d d S )Nrg   r*   z)exceptions must derive from BaseException)
r8   r   r   rM   rN   rQ   	TypeErrorrP   rS   rT   )r   clsrh   rK   rU   rV   rW   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 )Nrg   r*   )r   intrZ   r$   r   r   r    test_raise_invalid_class_objmode  s    z,TestRaising.test_raise_invalid_class_objmodec              	   C   sx   d}|  tj}| jttd W 5 Q R X | |t|j |  tj}| jdtd W 5 Q R X | |t|j d S )Nz8Encountered unsupported constant type used for exceptionrg   r*   )	rQ   r   UnsupportedErrorr   r   r[   re   rS   rT   )r   r}   raisesr   r   r   !test_raise_invalid_class_nopython   s    z-TestRaising.test_raise_invalid_class_nopythonc              	   C   sD   t dd }d}| tj}|  W 5 Q R X | |t|j d S )Nc                   S   s   dd S )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   rQ   r   r   re   rS   rT   )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|d}|j}|d | |||td d S )Nrg   r*   r+   )rC   r   r   rM   rN   rf   rB   ri   r   r   r   check_assert_statement3  s
    z"TestRaising.check_assert_statementc                 C   s   | j td d S rk   )r   rZ   r$   r   r   r   test_assert_statement_objmode:  s    z)TestRaising.test_assert_statement_objmodec                 C   s   | j td d S rk   )r   r[   r$   r   r   r   test_assert_statement_nopython=  s    z*TestRaising.test_assert_statement_nopythonc           
      C   sr   d}d}|t f|tf|tffD ]N\}}i }t|d|i| |d }t|tjf|d}|j}	| |||	|d qd S )Nz def f(a):
  raise exc('msg', 10)zdef f(a):
  assert a != 1r5   frg   r*   )	rB   r   r'   execr   r   rM   rN   rf   )
r   rh   Zsimple_raiseZassert_raiseZf_textr5   locrK   rU   rV   r   r   r   check_raise_from_exec_string@  s    z(TestRaising.check_raise_from_exec_stringc                 C   s   | j td d S rk   )r   rZ   r$   r   r   r   $test_assert_from_exec_string_objmodeN  s    z0TestRaising.test_assert_from_exec_string_objmodec                 C   s   | j td d S rk   )r   r[   r$   r   r   r   %test_assert_from_exec_string_nopythonQ  s    z1TestRaising.test_assert_from_exec_string_nopythonc                 C   s,   t }t|d|d}|j}| |||t d S )Nr   rg   )rE   r   rN   rf   r   ri   r   r   r   check_user_code_error_tracebackT  s    z+TestRaising.check_user_code_error_tracebackc                 C   s   | j td d S rk   )r   rZ   r$   r   r   r   &test_user_code_error_traceback_objmode]  s    z2TestRaising.test_user_code_error_traceback_objmodec                 C   s   | j td d S rk   )r   r[   r$   r   r   r   'test_user_code_error_traceback_nopython`  s    z3TestRaising.test_user_code_error_traceback_nopythonc                 C   s2   t }t|tjf|d}|j}| |||td d S )Nrg   hello)rG   r   r   stringrN   rf   r.   ri   r   r   r   check_raise_runtime_valuec  s    z%TestRaising.check_raise_runtime_valuec                 C   s   | j td d S rk   )r   rZ   r$   r   r   r    test_raise_runtime_value_objmodei  s    z,TestRaising.test_raise_runtime_value_objmodec                 C   s   | j td d S rk   )r   r\   r$   r   r   r   !test_raise_runtime_value_nopythonl  s    z-TestRaising.test_raise_runtime_value_nopythonc                 C   s   | j td d S rk   )r   r]   r$   r   r   r   test_raise_runtime_value_nogilo  s    z*TestRaising.test_raise_runtime_value_nogilc              	   C   s   t ttfD ]|}t|}t|tjtjf|d}|j}| 	|ddd | 
||||dd | 
|||tdd | 
|||tjjjdd	 q
d S )
Nrg   r   testr*   r   r+   Zworldr,   r0   )r
   r   r'   r;   r   r   rM   r   rN   rP   rf   r.   r/   r0   r1   ro   r   r   r   &check_raise_instance_with_runtime_argsr  s$    
  z2TestRaising.check_raise_instance_with_runtime_argsc                 C   s   | j td d S rk   )r   rZ   r$   r   r   r   -test_raise_instance_with_runtime_args_objmode  s    z9TestRaising.test_raise_instance_with_runtime_args_objmodec                 C   s   | j td d S rk   )r   r\   r$   r   r   r   .test_raise_instance_with_runtime_args_nopython  s    z:TestRaising.test_raise_instance_with_runtime_args_nopythonc                 C   s   | j td d S rk   )r   r]   r$   r   r   r   +test_raise_instance_with_runtime_args_nogil  s    z7TestRaising.test_raise_instance_with_runtime_args_nogilc              
   C   sl   dd }dd }dd }|df|df|t jffg}|D ]0\}}d}| tj| t|| W 5 Q R X q6d S )	Nc                   S   s   t dtddd S )Nr*      rJ   b)r.   r/   onesr   r   r   r   raise_literal_dict  s    zCTestRaising.test_dynamic_raise_bad_args.<locals>.raise_literal_dictc                   S   s   t tdd S )Nr,   )r.   ranger   r   r   r   raise_range  s    z<TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rangec                 S   s   t | jd S r   )r.   Zbit_generator)rngr   r   r   	raise_rng  s    z:TestRaising.test_dynamic_raise_bad_args.<locals>.raise_rngr   z/.*Cannot convert native .* to a Python object.*)r   Znpy_rngassertRaisesRegexr   ZTypingErrorr   )r   r   r   r   funcsrK   Zargtypesr}   r   r   r   test_dynamic_raise_bad_args  s    
z'TestRaising.test_dynamic_raise_bad_argsc              	   C   s2   t dd }d}| t| |  W 5 Q R X d S )Nc                   S   s   t dddd S )Nr*   r,   r   rF   r   r   r   r   raise_literal_dict2  s    z@TestRaising.test_dynamic_raise_dict.<locals>.raise_literal_dict2z{a: 1, b: 3})r   r   r.   )r   r   r}   r   r   r   test_dynamic_raise_dict  s
    
z#TestRaising.test_dynamic_raise_dictc              	   C   s<   t dddd }d}| tj| |d W 5 Q R X d S )NF)Z_nrtc                 S   s   t | d S r   rF   r2   r   r   r   raise_with_no_nrt  s    z7TestRaising.test_disable_nrt.<locals>.raise_with_no_nrtzNRT required but not enabled{   )r   r   r   Z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   s   t | d S r   rF   rJ   r   r   r   raise_  s    z*TestRaising.test_try_raise.<locals>.raise_c                    s*   z |  W n t k
r    Y nX | d S )Nr*   )r_   r   r   r   r   	try_raise  s
    z-TestRaising.test_try_raise.<locals>.try_raiser,   )r   rP   Z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 ]4}| t}|| W 5 Q R X | |f|jj qPqHd S )Nc                 S   s   t | d S r   rF   r   r   r   r   r     s    z.TestRaising.test_dynamic_raise.<locals>.raise_c                    s.   z |  W n t k
r(   t| Y nX d S r   )r_   r.   r   r   r   r   
try_raise_  s    z2TestRaising.test_dynamic_raise.<locals>.try_raise_r*   g?r   r,   r+   )r*   r+   )	r   r/   r   setrQ   r.   ZassertEqualsrT   r   )r   r   r   r   r   er   r   r   test_dynamic_raise  s"    

	zTestRaising.test_dynamic_raiseN),r   r   r   rX   rf   rj   rl   rm   rq   rr   rs   rt   ru   rv   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   rH      sR   *
		
			rH   __main__)(numpyr/   rb   r`   Znumba.core.compilerr   r   Znumbar   r   Z
numba.corer   r   Znumba.tests.supportr   r	   ZunittestrZ   Zforce_pyobjectr[   r\   Znrtr]   Zrelease_gilr_   r
   r   r   r'   r8   r:   r;   r<   rA   rC   rE   rG   rH   r   mainr   r   r   r   <module>   s@     _
