U
    iâËd�\  ã                   @   s   d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZmZmZmZmZm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!G dd„ deeƒZ"G dd„ deƒZ#eG dd„ deƒƒZ$e%dk�re &¡  dS )é    N)Úproduct)ÚnjitÚtypedÚobjmodeÚprange)Ú	PYVERSION)Úir_utilsÚir)ÚUnsupportedErrorÚCompilerErrorÚNumbaPerformanceWarningÚTypingError)ÚTestCaseÚunittestÚcaptured_stdoutÚMemoryLeakMixinÚskip_parfors_unsupportedÚskip_unless_scipyÚexpected_failure_py311c                   @   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_try_except.pyr      s   r   c                   @   sŒ   e Zd 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edd„ ƒZdd„ Zdd„ Zdd„ Zd S )!ÚTestTryBareExceptzhTest the following pattern:

        try:
            <body>
        except:
            <handling>
    c                    s@   t dd„ ƒ‰ t ‡ fdd„ƒ}|  |dƒd¡ |  |dƒd¡ d S )	Nc                 S   s   | rt ‚d S ©N©r   ©Úxr   r   r   Úinner    s    z5TestTryBareExcept.test_try_inner_raise.<locals>.innerc                    s"   zˆ | ƒ W dS    Y dS X d S )Nú
not raisedÚcaughtr   r   ©r    r   r   Úudt%   s
    z3TestTryBareExcept.test_try_inner_raise.<locals>.udtFr!   Tr"   ©r   ÚassertEqual©Úselfr$   r   r#   r   Útest_try_inner_raise   s    
z&TestTryBareExcept.test_try_inner_raisec              	      sp   t dd„ ƒ‰ t ‡ fdd„ƒ}|  t¡�}|dƒ W 5 Q R X |  t|jƒd¡ |  |dƒd¡ |  |d	ƒd
¡ d S )Nc                 S   s&   | dkrt dƒ‚n| dkr"t dƒ‚d S )Né   Úoneé   Útwor   r   r   r   r   r    1   s    
z5TestTryBareExcept.test_try_state_reset.<locals>.innerc                    s6   zˆ | ƒ d}W n   d}Y nX | dkr2ˆ dƒ |S )Nr!   r"   r   r,   r   )r   Úresr#   r   r   r$   8   s    
z3TestTryBareExcept.test_try_state_reset.<locals>.udtr   r-   r*   r"   éÿÿÿÿr!   )r   ÚassertRaisesr   r&   ÚstrÚ	exception©r(   r$   Úraisesr   r#   r   Útest_try_state_reset0   s    

z&TestTryBareExcept.test_try_state_resetc                 C   s   t dd„ ƒ}|S )Nc                 S   sZ   | dkrt dƒ tdƒ‚n<| dkr4t dƒ tdƒ‚n"| dkrNt dƒ td	ƒ‚nt d
ƒ d S )Nr*   Úcall_oner+   r,   Úcall_twor-   é   Ú
call_threeÚthreeÚ
call_other©Úprintr   r   r   r   r   r    J   s    


z-TestTryBareExcept._multi_inner.<locals>.inner)r   )r(   r    r   r   r   Ú_multi_innerI   s    
zTestTryBareExcept._multi_innerc              
      sþ   |   ¡ ‰ t‡ fdd„ƒ}|  t¡�$}tƒ �}|dddƒ W 5 Q R X W 5 Q R X |  | ¡  ¡ dddd	d
dg¡ |  t|j	ƒd¡ tƒ �}|dddƒ W 5 Q R X |  | ¡  ¡ dddddg¡ tƒ �}|dddƒ W 5 Q R X |  | ¡  ¡ dddd	d
ddg¡ d S )Nc                    sp   zFzt dƒ ˆ | ƒ t dƒ W n$   t dƒ ˆ |ƒ t dƒ Y nX W n$   t dƒ ˆ |ƒ t dƒ Y nX d S )NÚAÚBÚCÚDÚEÚF)r=   )r   ÚyÚzr#   r   r   r$   ]   s    z.TestTryBareExcept.test_nested_try.<locals>.udtr*   r,   r8   r?   r6   rA   r7   rC   r9   r:   r   r;   rB   rD   )
r>   r   r0   r   r   r&   ÚgetvalueÚsplitr1   r2   )r(   r$   r4   Ústdoutr   r#   r   Útest_nested_tryZ   s.     
þ
þ
þz!TestTryBareExcept.test_nested_tryc              
      sò   |   ¡ ‰ t‡ fdd„ƒ}tƒ �}|ddƒ}W 5 Q R X |  | ¡  ¡ ddddd	d
dg¡ |  |d¡ tƒ �}|ddƒ}W 5 Q R X |  | ¡  ¡ dddddg¡ |  |d¡ tƒ �}|ddƒ}W 5 Q R X |  | ¡  ¡ dddddg¡ |  |d¡ d S )Nc                    sL   z2t dƒ t|ƒD ]}t |ƒ || krˆ |ƒ qW n   t dƒ Y nX |S )Nr?   r@   )r=   Úrange)r   ÚnÚir#   r   r   r$   Š   s    z/TestTryBareExcept.test_loop_in_try.<locals>.udtr8   é   r?   Ú0Ú1Ú2Ú3r9   r@   r*   r6   r   r;   r,   )r>   r   r   r&   rG   rH   ©r(   r$   rI   r.   r   r#   r   Útest_loop_in_try‡   s0    
þ
þ
þz"TestTryBareExcept.test_loop_in_tryc              	   C   sŒ   t dd„ ƒ}tƒ �}|dƒ}W 5 Q R X |  | ¡  ¡ ddg¡ |  |d¡ tƒ �}|dƒ}W 5 Q R X |  | ¡  ¡ ddg¡ |  |d	¡ d S )
Nc                 S   s<   z t dƒ | rtdƒ‚t dƒ W n   t dƒ Y dS X dS )Nr?   Zmy_errorr@   rA   éA  é{   r<   r   r   r   r   r$   ²   s    z0TestTryBareExcept.test_raise_in_try.<locals>.udtTr?   rA   rU   Fr@   rV   ©r   r   r&   rG   rH   rS   r   r   r   Útest_raise_in_try±   s     

þ
þz#TestTryBareExcept.test_raise_in_tryc              	      sN   t ‡ fdd„ƒ‰ tƒ �}ˆ dƒ}W 5 Q R X |  |¡ |  | ¡  ¡ dg¡ d S )Nc                    sD   | dkr0zˆ | d ƒ W n   t dƒ Y dS X | dkr@tdƒ‚d S )Nr   r*   ÚCAUGHTé   r2   )r=   Ú
ValueErrorr   ©Úfoor   r   r]   Ó   s    z-TestTryBareExcept.test_recursion.<locals>.fooé
   rY   )r   r   ÚassertIsNoner&   rG   rH   )r(   rI   r.   r   r\   r   Útest_recursionÒ   s    

z TestTryBareExcept.test_recursionc              	      sZ   t dd„ ƒ‰ t ‡ fdd„ƒ}tƒ �}|dƒ}W 5 Q R X |  |d¡ |  | ¡  ¡ g ¡ d S )Nc                 s   s<   | dkr8zdV  t dƒ‚W n tk
r6   tdƒ Y nX d S )Nr   é   r2   rY   )r[   Ú	Exceptionr=   r   r   r   r   r]   å   s    z)TestTryBareExcept.test_yield.<locals>.fooc                    s   t ˆ | ƒƒS r   )Únext©rF   r\   r   r   Úbarî   s    z)TestTryBareExcept.test_yield.<locals>.barr^   ra   rW   )r(   re   rI   r.   r   r\   r   Ú
test_yieldä   s    
zTestTryBareExcept.test_yieldc              	   C   s@   t dd„ ƒ}tƒ �}|dƒ W 5 Q R X |  | ¡  ¡ dg¡ d S )Nc                 S   s   dd„ }|ƒ  d S )Nc                   S   s(   zt dƒ‚W n   tdƒ Y dS X d S )Nr2   rY   rZ   ©r[   r=   r   r   r   r   re   û   s
    z9TestTryBareExcept.test_closure2.<locals>.foo.<locals>.barr   ©r   re   r   r   r   r]   ù   s    z,TestTryBareExcept.test_closure2.<locals>.foor^   rY   rW   ©r(   r]   rI   r   r   r   Útest_closure2ø   s
    
	zTestTryBareExcept.test_closure2c              	   C   sV   t dd„ ƒ}tƒ �}|dƒ}W 5 Q R X |  |dddg¡ |  | ¡  ¡ dgd ¡ d S )Nc                 S   s"   dd„ }dd„ t |dddgƒD ƒS )Nc                 S   s*   zt dƒ‚W n   tdƒ |  Y S X d S )Nr2   rY   rg   rd   r   r   r   re     s
    z9TestTryBareExcept.test_closure3.<locals>.foo.<locals>.barc                 S   s   g | ]}|‘qS r   r   ©Ú.0r   r   r   r   Ú
<listcomp>  s     z@TestTryBareExcept.test_closure3.<locals>.foo.<locals>.<listcomp>r*   r,   r8   )Úmaprh   r   r   r   r]   	  s    z,TestTryBareExcept.test_closure3.<locals>.foor^   r*   r,   r8   rY   rW   ©r(   r]   rI   r.   r   r   r   Útest_closure3  s    
	zTestTryBareExcept.test_closure3c              	   C   s†   t dd„ ƒ}tƒ �}|dƒ}W 5 Q R X |  | ¡  ¡ d¡ |  |¡ tƒ �}|dƒ}W 5 Q R X |  | ¡ d¡ |  |ddd	dg¡ d S )
Nc                 S   s@   dd„ }zdd„ t |ddd| gƒD ƒW S    tdƒ Y nX d S )	Nc                 S   s   | dk rt dƒ‚| S )Nr   r2   ©r[   rd   r   r   r   re     s    z9TestTryBareExcept.test_closure4.<locals>.foo.<locals>.barc                 S   s   g | ]}|‘qS r   r   rk   r   r   r   rm   "  s     z@TestTryBareExcept.test_closure4.<locals>.foo.<locals>.<listcomp>r*   r,   r8   rY   )rn   r=   rh   r   r   r   r]     s
    z,TestTryBareExcept.test_closure4.<locals>.foor/   rY   é   Ú r*   r,   r8   )r   r   r&   rG   Ústripr_   ro   r   r   r   Útest_closure4  s    

zTestTryBareExcept.test_closure4c              	   C   s>   t dd„ ƒ}tƒ �}|ƒ  W 5 Q R X |  | ¡  ¡ dg¡ d S )Nc                  S   s8   t  d¡} zt j | ¡}W n   tdƒ | Y S X d S )N)rr   rr   rY   )ÚnpZzerosZlinalgZcholeskyr=   )ÚaZcholr   r   r   r]   3  s    
z0TestTryBareExcept.test_real_problem.<locals>.foorY   rW   ri   r   r   r   Útest_real_problem1  s
    
z#TestTryBareExcept.test_real_problemc              	   C   sX   t dd„ ƒ}tƒ �}|dƒ W 5 Q R X |  | ¡  ¡ dgd dd„ tddƒD ƒ ¡ d S )	Nc                 S   sš   t | ƒD ]*}z|dkrt‚W q   tdƒ Y qX qzLz.z|dkrFt‚W n   tdƒ t‚Y nX W n   tdƒ t‚Y nX W n   tdƒ Y nX d S )NrN   rY   ZCAUGHT1ZCAUGHT2ZCAUGHT3)rK   r[   r=   )rL   rM   r   r   r   r]   B  s&    z,TestTryBareExcept.test_for_loop.<locals>.foor^   rY   rr   c                 S   s   g | ]}d | ‘qS )zCAUGHT%sr   )rl   rM   r   r   r   rm   _  s     z3TestTryBareExcept.test_for_loop.<locals>.<listcomp>r*   )r   r   r&   rG   rH   rK   ri   r   r   r   Útest_for_loopA  s    

þzTestTryBareExcept.test_for_loopc                 C   s$   t dd„ ƒ}|dƒ}|  |d¡ d S )Nc                 S   s   zW n   Y nX | S r   r   r   r   r   r   r]   c  s
    z,TestTryBareExcept.test_try_pass.<locals>.foorV   r%   )r(   r]   r.   r   r   r   Útest_try_passb  s    
zTestTryBareExcept.test_try_passc              	   C   s>   t dd„ ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                   S   s    zt dƒ‚W n   ‚ Y nX d S ©NÚERRORrq   r   r   r   r   r$   o  s    z6TestTryBareExcept.test_try_except_reraise.<locals>.udtú4The re-raising of an exception is not yet supported.©r   r0   r
   ÚassertInr1   r2   r3   r   r   r   Útest_try_except_reraisen  s    
þz)TestTryBareExcept.test_try_except_reraiseN)r   r   r   Ú__doc__r)   r5   r>   rJ   rT   rX   r`   rf   rj   rp   ru   r   rx   ry   rz   r€   r   r   r   r   r      s"   -*!
!r   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S )ÚTestTryExceptCaughtc              	   C   sx   t dd„ ƒ}tƒ �}|dƒ W 5 Q R X |  | ¡  ¡ dddg¡ tƒ �}|dƒ W 5 Q R X |  | ¡  ¡ dddg¡ d S )	Nc                 S   sJ   z t dƒ | rtdƒ‚t dƒ W n tk
r<   t dƒ Y nX t dƒ d S )Nr?   Z321r@   rA   rB   ©r=   ÚZeroDivisionErrorrb   r   r   r   r   r$   €  s    z5TestTryExceptCaught.test_catch_exception.<locals>.udtTr?   rA   rB   Fr@   rW   )r(   r$   rI   r   r   r   Útest_catch_exception  s    

þ
þz(TestTryExceptCaught.test_catch_exceptionc              	   C   sŽ   t dd„ ƒ}tƒ �}|dƒ}W 5 Q R X |  | ¡  ¡ ddg¡ |  |d¡ tƒ �}|dƒ}W 5 Q R X |  | ¡  ¡ ddd	g¡ |  |d
¡ d S )Nc                 S   sR   z t dƒ | rt‚t dƒ d}W n$ tk
rD   t dƒ d}| Y S X t dƒ |S )Nr?   r@   rV   rA   rU   rB   rƒ   )r   Úrr   r   r   r$   ž  s    
z5TestTryExceptCaught.test_return_in_catch.<locals>.udtTr?   rA   rU   Fr@   rB   rV   rW   rS   r   r   r   Útest_return_in_catch�  s     

þ
þz(TestTryExceptCaught.test_return_in_catchc              	   C   s@   t dd„ ƒ}|  t¡�}|dƒ W 5 Q R X |  dt|jƒ¡ d S )Nc              
   S   sD   z| r
t ‚d}W n. tk
r> } zd}| W Y ¢S d }~X Y nX |S )NrV   rU   )r„   rb   )r   r†   Úer   r   r   r$   Â  s    z1TestTryExceptCaught.test_save_caught.<locals>.udtTz3Exception object cannot be stored into variable (e)r~   r3   r   r   r   Útest_save_caughtÁ  s    

þz$TestTryExceptCaught.test_save_caughtc              	   C   s>   t dd„ ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                   S   s(   zt dƒ‚W n tk
r"   ‚ Y nX d S r{   ©r[   rb   r   r   r   r   r$   Õ  s    z8TestTryExceptCaught.test_try_except_reraise.<locals>.udtr}   r~   r3   r   r   r   r€   Ô  s    
þz+TestTryExceptCaught.test_try_except_reraisec              	   C   s>   t dd„ ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                   S   sD   zt dƒ‚W n2 tk
r>   z‚ W n tk
r8   ‚ Y nX Y nX d S r{   rŠ   r   r   r   r   r$   ä  s    z>TestTryExceptCaught.test_try_except_reraise_chain.<locals>.udtr}   r~   r3   r   r   r   Útest_try_except_reraise_chainã  s    
	þz1TestTryExceptCaught.test_try_except_reraise_chainc                 C   s0   t dd„ ƒ}|  |dƒd¡ |  |dƒd¡ d S )Nc                 S   s0   zd|   W n t k
r"   Y dS X d|  S d S )Nr*   é­Þ  )rb   ©rE   r   r   r   r$   ø  s
    z7TestTryExceptCaught.test_division_operator.<locals>.udtr   rŒ   r,   g      à?r%   r'   r   r   r   Útest_division_operatorõ  s    
z*TestTryExceptCaught.test_division_operatorN)	r   r   r   r…   r‡   r‰   r€   r‹   rŽ   r   r   r   r   r‚   ~  s   $r‚   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestTryExceptNestedzTests for complicated nestingc              	   O   sd   t ƒ �}|||Ž W 5 Q R X | ¡ }t ƒ �}|||Ž W 5 Q R X | ¡ }| j||d ||¡d� d S )Nzargs={} kwargs={})Úmsg)r   rG   r&   Úformat)r(   ZcfuncÚpyfuncÚargsÚkwargsrI   ÚexpectÚgotr   r   r   Úcheck_compare  s     
þz!TestTryExceptNested.check_comparec              	   C   sX   t dd„ ƒ}ttddgdd�ƒ}|  |¡ |D ]$\}}}}| j||j||||d� q.d S )Nc                 S   sþ   t dƒ | ròt dƒ z(t dƒ |r2t dƒ tdƒ‚t dƒ W n¤ tk
rà   t dƒ zZt dƒ z(t d	ƒ |r|t d
ƒ tdƒ‚t dƒ W n tk
r¢   t dƒ Y n
X t dƒ W n tk
rÊ   t dƒ Y n
X t dƒ t dƒ Y n
X t dƒ t dƒ t dƒ d S )Nr?   r@   rA   rB   rE   rC   rD   ÚHÚIÚJrF   ÚKÚLÚMÚNÚOÚPÚGÚQÚR©r=   r   rb   ©r   rE   rF   Úpr   r   r   r$     s:    z5TestTryExceptNested.test_try_except_else.<locals>.udtTFrr   ©Úrepeatr¥   ©r   Úlistr   Ú
assertTruer—   Zpy_func)r(   r$   Úcasesr   rE   rF   r¦   r   r   r   Útest_try_except_else  s    
"
    þz(TestTryExceptNested.test_try_except_elsec                 C   sP   t dd„ ƒ}ttddgdd�ƒ}|  |¡ |D ]\}}| j||j||d� q.d S )Nc                 S   s˜   z>z$t dƒ | rt dƒ t‚t dƒ W n   t d	ƒ Y nX W 5 zFzt dƒ |r\t dƒ t‚W n tk
rz   t dƒ Y n
X t dƒ W 5 t dƒ X X d S )
Nr™   rC   rD   r¡   r˜   r?   r@   rA   rB   r¤   ©r¦   Úqr   r   r   r$   B  s"    z8TestTryExceptNested.test_try_except_finally.<locals>.udtTFr,   r§   r®   r©   )r(   r$   r¬   r¦   r¯   r   r   r   Útest_try_except_finallyA  s    

  þz+TestTryExceptNested.test_try_except_finallyN)r   r   r   r�   r—   r­   r°   r   r   r   r   r�     s   ,r�   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTryExceptRefctc                 C   sX   t dd„ ƒ}|ddd�}|  t|ƒttdƒƒ¡ |ddd�}|  t|ƒttdƒƒ¡ d S )Nc                 S   sR   t  ¡ }z(t| ƒD ]}||kr"t‚| |¡ qW n tk
rH   | Y S X |S d S r   )r   ÚListrK   Ú
IndexErrorÚappendrb   )rL   Úraise_atÚlstrM   r   r   r   r$   d  s    
z6TestTryExceptRefct.test_list_direct_raise.<locals>.udtr^   rN   ©rµ   ©r   r&   rª   rK   ©r(   r$   Úoutr   r   r   Útest_list_direct_raisec  s    
z)TestTryExceptRefct.test_list_direct_raisec                    st   t dd„ ƒ‰ t ‡ fdd„ƒ}|ddd�}|  t|ƒdgttdƒƒ ¡ |ddd�}|  t|ƒdgttdƒƒ ¡ d S )	Nc                 S   s(   t |ƒD ]}||krt‚|  |¡ q| S r   )rK   r³   r´   )r¶   rL   rµ   rM   r   r   r   Úappenderw  s
    z=TestTryExceptRefct.test_list_indirect_raise.<locals>.appenderc                    sD   t  ¡ }| d¡ zˆ || |ƒ W n tk
r:   | Y S X |S d S )Né¾  )r   r²   r´   rb   )rL   rµ   r¶   ©r¼   r   r   r$     s    

z8TestTryExceptRefct.test_list_indirect_raise.<locals>.udtr^   rN   r·   r½   r¸   r¹   r   r¾   r   Útest_list_indirect_raisev  s    

z+TestTryExceptRefct.test_list_indirect_raisec              	   C   s>   t dd„ ƒ}|  t¡�}|ƒ  W 5 Q R X |  t|jƒd¡ d S )Nc                  S   s\   z:t  ¡ } tdƒ |  d¡ tdƒ |  d¡ tdƒ | W S  tk
rV   tdƒ Y nX d S )Nr?   r   r@   ZfdarA   rB   )r   r²   r=   r´   rb   )r¶   r   r   r   r$   �  s    

z<TestTryExceptRefct.test_incompatible_refinement.<locals>.udtz@Cannot refine type|cannot safely cast unicode_type to int(32|64))r   r0   r   ZassertRegexpMatchesr1   r2   r3   r   r   r   Útest_incompatible_refinement�  s    
þz/TestTryExceptRefct.test_incompatible_refinementN)r   r   r   r»   r¿   rÀ   r   r   r   r   r±   b  s   r±   c                   @   sD   e Zd Zdd„ Zedd„ ƒZedd„ ƒZe e	dk d¡d	d
„ ƒZ
dS )ÚTestTryExceptOtherControlFlowc                 C   sL   t dd„ ƒ}|  t|ddƒƒttdƒƒ¡ |  t|ddƒƒttdƒƒ¡ d S )Nc              	   s   sB   t | ƒD ]4}z||krt‚|V  W q tk
r:   Y  d S X qd S r   )rK   r[   rb   )rL   r   rM   r   r   r   r$   §  s    
z5TestTryExceptOtherControlFlow.test_yield.<locals>.udtr^   rN   r¸   r'   r   r   r   rf   ¦  s    
	z(TestTryExceptOtherControlFlow.test_yieldc              	   C   sB   t dd„ ƒ}|  t¡�}|ƒ  W 5 Q R X d}|  |t|jƒ¡ d S )Nc                	   S   s<   z t ƒ � ttƒ ƒ W 5 Q R X W n tk
r6   Y d S X d S r   )r   r=   Úobjectrb   r   r   r   r   r$   ¶  s
    z7TestTryExceptOtherControlFlow.test_objmode.<locals>.udtúlunsupported control flow: with-context contains branches (i.e. break/return/raise) that can leave the block ©r   r0   r   r   r1   r2   )r(   r$   r4   r�   r   r   r   Útest_objmode´  s    
þz*TestTryExceptOtherControlFlow.test_objmodec              	      sN   dd„ ‰ t ‡ fdd„ƒ}|  t¡�}|ƒ  W 5 Q R X d}|  |t|jƒ¡ d S )Nc                 S   s   t  tt|  ¡ ƒƒ¡S r   )rv   Zasarrayrª   ÚreversedÚtolistr   r   r   r   re   É  s    zCTestTryExceptOtherControlFlow.test_objmode_output_type.<locals>.barc               	      sT   t  d¡} t  | ¡}z&tdd�� |ˆ | ƒ7 }W 5 Q R X W n tk
rN   Y nX |S )NrN   zintp[:]r�   )rv   ÚarangeZ
zeros_liker   rb   )r   rE   ©re   r   r   rÅ   Ì  s    

zLTestTryExceptOtherControlFlow.test_objmode_output_type.<locals>.test_objmoderÃ   rÄ   )r(   rÅ   r4   r�   r   rÉ   r   Útest_objmode_output_typeÇ  s    þz6TestTryExceptOtherControlFlow.test_objmode_output_type)r8   é	   zPython 3.9+ onlyc           	      C   s–   dd„ }t  |¡D ]}|jdkr q0q|  d¡ t i |j¡}d}|j ¡ D ]6\}}| 	t
j¡D ] }d}|jr`||jd kr`d}q`qL|s’|  d	¡ d S )
Nc                   S   s*   zt ‚W n t k
r$   tdƒ‚Y nX d S r{   )rb   r[   r   r   r   r   r’   ç  s    zMTestTryExceptOtherControlFlow.test_reraise_opcode_unreachable.<locals>.pyfuncZRERAISEz!expected RERAISE opcode not foundFz8Unreachable condition reached (op code RERAISE executed)r   Tz.expected RERAISE unreachable message not found)ÚdisÚget_instructionsÚopnameZfailr   Zget_ir_of_codeÚ__code__ÚblocksÚitemsZ
find_instsr	   ZStaticRaiseZexc_args)	r(   r’   ÚinstZfunc_irÚfoundZlblZblkÚstmtr�   r   r   r   Útest_reraise_opcode_unreachableá  s    

z=TestTryExceptOtherControlFlow.test_reraise_opcode_unreachableN)r   r   r   rf   r   rÅ   rÊ   r   ZskipIfr   rÕ   r   r   r   r   rÁ   ¥  s   

rÁ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestTryExceptParforsc                 C   sN   dd„ }dg}||Ž }|   tdd�|ƒ|Ž |¡ |   tdd�|ƒ|Ž |¡ d S )Nc              	   S   s@   d}t | ƒD ].}z|d7 }W q tk
r8   |d7 }Y qX q|S )Nr   r*   ©r   rb   ©rL   ÚcrM   r   r   r   r$     s    z>TestTryExceptParfors.test_try_in_prange_reduction.<locals>.udtr^   F©ÚparallelT)r&   r   ©r(   r$   r“   r•   r   r   r   Útest_try_in_prange_reduction  s
    	z1TestTryExceptParfors.test_try_in_prange_reductionc              	   C   s–   dd„ }dg}||Ž }|   tdd�|ƒ|Ž |¡ tjdd��,}t dt¡ |   tdd�|ƒ|Ž |¡ W 5 Q R X |   t|ƒd	¡ |  d
t|d ƒ¡ d S )Nc                 S   s>   d}zt | ƒD ]}|d7 }qW n tk
r4   Y dS X |S d S )Nr   r*   rŒ   r×   rØ   r   r   r   r$     s    zCTestTryExceptParfors.test_try_outside_prange_reduction.<locals>.udtr^   FrÚ   T)ÚrecordÚalwaysr*   z5no transformation for parallel execution was possibler   )	r&   r   ÚwarningsÚcatch_warningsÚsimplefilterr   Úlenr   r1   )r(   r$   r“   r•   Úwr   r   r   Ú!test_try_outside_prange_reduction  s    
$
ÿz6TestTryExceptParfors.test_try_outside_prange_reductionc                 C   sV   dd„ }t  d¡dg}||Ž }|  tdd�|ƒ|Ž |¡ |  tdd�|ƒ|Ž |¡ d S )Nc              	   S   sZ   |   ¡ }t| jƒD ]B}z ||kr$t‚| | | ||< W q tk
rR   d||< Y qX q|S ©Nr/   ©Úcopyr   Úsizer[   rb   ©Zarrr   rº   rM   r   r   r   r$   *  s    z8TestTryExceptParfors.test_try_in_prange_map.<locals>.udtr^   é   FrÚ   T©rv   rÈ   ZassertPreciseEqualr   rÜ   r   r   r   Útest_try_in_prange_map)  s
    z+TestTryExceptParfors.test_try_in_prange_mapc                 C   sV   dd„ }t  d¡dg}||Ž }|  tdd�|ƒ|Ž |¡ |  tdd�|ƒ|Ž |¡ d S )Nc                 S   sZ   |   ¡ }z0t| jƒD ] }||kr$t‚| | | ||< qW n tk
rT   d||< Y nX |S ræ   rç   rê   r   r   r   r$   ;  s    z=TestTryExceptParfors.test_try_outside_prange_map.<locals>.udtr^   rë   FrÚ   Trì   rÜ   r   r   r   Útest_try_outside_prange_map:  s
    z0TestTryExceptParfors.test_try_outside_prange_mapN)r   r   r   rÝ   rå   rí   rî   r   r   r   r   rÖ   ÿ  s   rÖ   Ú__main__)'rà   rÌ   Ú	itertoolsr   Únumpyrv   Znumbar   r   r   r   Znumba.core.utilsr   Z
numba.corer   r	   Znumba.core.errorsr
   r   r   r   Znumba.tests.supportr   r   r   r   r   r   r   rb   r   r   r‚   r�   r±   rÁ   rÖ   r   Úmainr   r   r   r   Ú<module>   s*   $  i ]CZL
