U
    ,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 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_scipyc                   @   s   e Zd ZdS )MyErrorN)__name__
__module____qualname__ r   r   ?/tmp/pip-unpacked-wheel-eu7e0c37/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+   r7   r>   r5   r@   r6   rB   r8   r9   r   r:   rA   rC   )
r=   r   r/   r   r   r%   getvaluesplitr0   r1   )r'   r#   r3   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>.udtr7      r>   0123r8   r?   r)   r5   r   r:   r+   )r=   r   r   r%   rF   rG   r'   r#   rH   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?   r@   A  {   r;   r   r   r   r   r#      s    z0TestTryBareExcept.test_raise_in_try.<locals>.udtTr>   r@   rT   Fr?   rU   r   r   r%   rF   rG   rR   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   r1   )r<   
ValueErrorr   foor   r   r\      s    z-TestTryBareExcept.test_recursion.<locals>.foo
   rX   )r   r   assertIsNoner%   rF   rG   )r'   rH   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      r1   rX   )rZ   	Exceptionr<   r   r   r   r   r\      s    z)TestTryBareExcept.test_yield.<locals>.fooc                    s   t  | S r   )nextrE   r[   r   r   bar   s    z)TestTryBareExcept.test_yield.<locals>.barr]   r`   rV   )r'   rd   rH   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 )Nr1   rX   rY   rZ   r<   r   r   r   r   rd      s
    z9TestTryBareExcept.test_closure2.<locals>.foo.<locals>.barr   r   rd   r   r   r   r\      s    z,TestTryBareExcept.test_closure2.<locals>.foor]   rX   rV   r'   r\   rH   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 )Nr1   rX   rf   rc   r   r   r   rd     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+   r7   )maprg   r   r   r   r\   	  s    z,TestTryBareExcept.test_closure3.<locals>.foor]   r)   r+   r7   rX   rV   r'   r\   rH   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   r1   rZ   rc   r   r   r   rd     s    z9TestTryBareExcept.test_closure4.<locals>.foo.<locals>.barc                 S   s   g | ]}|qS r   r   rj   r   r   r   rl   "  s     z@TestTryBareExcept.test_closure4.<locals>.foo.<locals>.<listcomp>r)   r+   r7   rX   )rm   r<   rg   r   r   r   r\     s
    z,TestTryBareExcept.test_closure4.<locals>.foor.   rX       r)   r+   r7   )r   r   r%   rF   stripr^   rn   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)rq   rq   rX   )npzerosZlinalgZcholeskyr<   )aZcholr   r   r   r\   3  s    
z0TestTryBareExcept.test_real_problem.<locals>.foorX   rV   rh   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 )NrM   rX   ZCAUGHT1ZCAUGHT2ZCAUGHT3)rJ   rZ   r<   )rK   rL   r   r   r   r\   B  s&    z,TestTryBareExcept.test_for_loop.<locals>.foor]   rX   rq   c                 S   s   g | ]}d | qS )zCAUGHT%sr   )rk   rL   r   r   r   rl   _  s     z3TestTryBareExcept.test_for_loop.<locals>.<listcomp>r)   )r   r   r%   rF   rG   rJ   rh   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>.foorU   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ERRORrp   r   r   r   r   r#   o  s    z6TestTryBareExcept.test_try_except_reraise.<locals>.udt4The re-raising of an exception is not yet supported.r   r/   r
   assertInr0   r1   r2   r   r   r   test_try_except_reraisen  s    
z)TestTryBareExcept.test_try_except_reraiseN)r   r   r   __doc__r(   r4   r=   rI   rS   rW   r_   re   ri   ro   rt   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?   r@   rA   r<   ZeroDivisionErrorra   r   r   r   r   r#     s    z5TestTryExceptCaught.test_catch_exception.<locals>.udtTr>   r@   rA   Fr?   rV   )r'   r#   rH   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?   rU   r@   rT   rA   r   )r   rr   r   r   r#     s    
z5TestTryExceptCaught.test_return_in_catch.<locals>.udtTr>   r@   rT   Fr?   rA   rU   rV   rR   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 )NrU   rT   )r   ra   )r   r   er   r   r   r#     s    z1TestTryExceptCaught.test_save_caught.<locals>.udtTz3Exception object cannot be stored into variable (e)r~   r2   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{   rZ   ra   r   r   r   r   r#     s    z8TestTryExceptCaught.test_try_except_reraise.<locals>.udtr}   r~   r2   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~   r2   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)     )ra   rD   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   rF   r%   format)r'   ZcfuncpyfuncargskwargsrH   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 | rt 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?   r@   rA   rD   rB   rC   HIJrE   KLMNOPGQRr<   r   ra   r   rD   rE   pr   r   r   r#     s:    z5TestTryExceptNested.test_try_except_else.<locals>.udtTFrq   repeatr   r   listr   
assertTruer   Zpy_func)r'   r#   casesr   rD   rE   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   rB   rC   r   r   r>   r?   r@   rA   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   ListrJ   
IndexErrorappendra   )rK   raise_atlstrL   r   r   r   r#   d  s    
z6TestTryExceptRefct.test_list_direct_raise.<locals>.udtr]   rM   r   r   r%   r   rJ   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   )rJ   r   r   )r   rK   r   rL   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   ra   )rK   r   r   r   r   r   r#     s    

z8TestTryExceptRefct.test_list_indirect_raise.<locals>.udtr]   rM   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fdar@   rA   )r   r   r<   r   ra   )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   r/   r   ZassertRegexpMatchesr0   r1   r2   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                   @   s<   e Zd Zdd Zdd Z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   )rJ   rZ   ra   )rK   r   rL   r   r   r   r#     s    
z5TestTryExceptOtherControlFlow.test_yield.<locals>.udtr]   rM   r   r&   r   r   r   re     s    
	z(TestTryExceptOtherControlFlow.test_yieldc              	   C   sP   t dd }| t}|  W 5 Q R X tdkr6d}n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<   objectra   r   r   r   r   r#     s
    z7TestTryExceptOtherControlFlow.test_objmode.<locals>.udtr7   r`   Dunsupported control flow: due to return statements inside with blocklunsupported control flow: with-context contains branches (i.e. break/return/raise) that can leave the block r   r/   r   r   r   r0   r1   )r'   r#   r3   r   r   r   r   test_objmode  s    
z*TestTryExceptOtherControlFlow.test_objmodec              	      s\   dd  t  fdd}| t}|  W 5 Q R X tdkrBd}nd}| |t|j d S )Nc                 S   s   t tt|  S r   )ru   Zasarrayr   reversedtolistr   r   r   r   rd     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 )NrM   zintp[:]r   )ru   arangeZ
zeros_liker   ra   )r   rD   rd   r   r   r     s    

zLTestTryExceptOtherControlFlow.test_objmode_output_type.<locals>.test_objmoder   r   r   r   )r'   r   r3   r   r   r   r   test_objmode_output_type  s    z6TestTryExceptOtherControlFlow.test_objmode_output_type)r7   	   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{   )ra   rZ   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blkZstmtr   r   r   r   test_reraise_opcode_unreachable  s    

z=TestTryExceptOtherControlFlow.test_reraise_opcode_unreachableN)
r   r   r   re   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   ra   rK   crL   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   r0   )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   sizerZ   ra   Zarrr   r   rL   r   r   r   r#   0  s    z8TestTryExceptParfors.test_try_in_prange_map.<locals>.udtr]      Fr   Tru   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#   A  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   Znumpyru   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   ra   r   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s*      i ]C`L
