U
    iâËd×>  ã                   @   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   úT/home/sam/Atlas/atlas_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@     _
