o
    1&iF`                     @   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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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re&  dS dS )    N)product)njittypedobjmodeprange)ir_utilsir)CompilerErrorNumbaPerformanceWarningTypingErrorUnsupportedBytecodeError)	TestCaseunittestcaptured_stdoutMemoryLeakMixinskip_parfors_unsupportedskip_unless_scipyexpected_failure_py311expected_failure_py312expected_failure_py313c                   @   s   e Zd ZdS )MyErrorN)__name__
__module____qualname__ r   r   FC:\wamp64\www\opt\env\Lib\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 )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                    s   t dd  t  fdd}| t}|d W d    n1 s"w   Y  | t|jd | |dd | |d	d
 d S )Nc                 S   s$   | dkrt d| dkrt dd S )N   one   twor   r   r   r   r   r!   2   s
   z5TestTryBareExcept.test_try_state_reset.<locals>.innerc                    s2   z |  d}W n   d}Y | dkr d |S )Nr"   r#   r   r-   r   )r    resr$   r   r   r%   9   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_reset1   s   


z&TestTryBareExcept.test_try_state_resetc                 C   s   t dd }|S )Nc                 S   sT   | dkrt d td| dkrt d td| dkr$t d td	t d
 d S )Nr+   call_oner,   r-   call_twor.      
call_threethree
call_otherprintr   r   r   r   r   r!   K   s   z-TestTryBareExcept._multi_inner.<locals>.inner)r   )r)   r!   r   r   r   _multi_innerJ   s   
zTestTryBareExcept._multi_innerc              	      s6  |    t fdd}| t!}t }|ddd W d    n1 s&w   Y  W d    n1 s5w   Y  | |  g d | t|j	d t }|ddd W d    n1 scw   Y  | |  g d	 t }|ddd W d    n1 sw   Y  | |  g d
 d S )Nc                    sn   z$zt d  |  t d W W d S    t d  | t d Y W d S    t d  | t d Y 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-   r9   )r@   r7   rB   r8   rD   r:   r;   r   )r@   r7   rB   r<   rC   )r@   r7   rB   r8   rD   r<   rE   )
r?   r   r1   r   r   r'   getvaluesplitr2   r3   )r)   r%   r5   stdoutr   r$   r   test_nested_try[   s8   


z!TestTryBareExcept.test_nested_tryc                    s  |    t fdd}t }|dd}W d    n1 sw   Y  | |  g d | |d t }|dd}W d    n1 sIw   Y  | |  g d | |d t }|dd}W d    n1 ssw   Y  | |  g d	 | |d
 d S )Nc                    sJ   zt d t|D ]}t | || kr | q	W |S    t d Y |S )Nr@   rA   )r>   range)r    nir$   r   r   r%      s   
z/TestTryBareExcept.test_loop_in_try.<locals>.udtr9      )r@   0123r:   rA   r+   )r@   rP   rQ   r7   rA   r   )r@   rP   r<   rQ   rR   r-   )r?   r   r   r'   rH   rI   r)   r%   rJ   r/   r   r$   r   test_loop_in_try   s6   


z"TestTryBareExcept.test_loop_in_tryc                 C   s   t dd }t }|d}W d    n1 sw   Y  | |  ddg | |d t }|d}W d    n1 sAw   Y  | |  ddg | |d	 d S )
Nc                 S   s8   zt d | rtdt d W dS    t d Y dS )Nr@   Zmy_errorrA   rB   A  {   r=   r   r   r   r   r%      s   
z0TestTryBareExcept.test_raise_in_try.<locals>.udtTr@   rB   rV   FrA   rW   r   r   r'   rH   rI   rT   r   r   r   test_raise_in_try   s$   




z#TestTryBareExcept.test_raise_in_tryc                    sb   t  fdd t } d}W d    n1 sw   Y  | | | |  dg d S )Nc                    sB   | dkrz | d  W n
   t d Y dS | dkrtdd S )Nr   r+   CAUGHT   r3   )r>   
ValueErrorr   foor   r   r^      s   z-TestTryBareExcept.test_recursion.<locals>.foo
   rZ   )r   r   assertIsNoner'   rH   rI   )r)   rJ   r/   r   r]   r   test_recursion   s   


z TestTryBareExcept.test_recursionc                    sn   t dd  t  fdd}t }|d}W d    n1 s w   Y  | |d | |  g  d S )Nc                 s   s:    | dkrzdV  t d ty   td Y d S w d S )Nr      r3   rZ   )r\   	Exceptionr>   r   r   r   r   r^      s   z)TestTryBareExcept.test_yield.<locals>.fooc                    s   t  | S r   )nextrG   r]   r   r   bar   s   z)TestTryBareExcept.test_yield.<locals>.barr_   rb   rX   )r)   rf   rJ   r/   r   r]   r   
test_yield   s   

zTestTryBareExcept.test_yieldc                 C   sT   t dd }t }|d W d    n1 sw   Y  | |  dg d S )Nc                 S   s   dd }|  d S )Nc                   S   s   zt d   td Y dS )Nr3   rZ   r[   r\   r>   r   r   r   r   rf      s
   z9TestTryBareExcept.test_closure2.<locals>.foo.<locals>.barr   r    rf   r   r   r   r^      s   
z,TestTryBareExcept.test_closure2.<locals>.foor_   rZ   rX   r)   r^   rJ   r   r   r   test_closure2   s   
	
zTestTryBareExcept.test_closure2c                 C   sh   t dd }t }|d}W d    n1 sw   Y  | |g d | |  dgd  d S )Nc                 S   s    dd }dd t |g dD S )Nc                 S   s    zt d   td |  Y S )Nr3   rZ   rh   re   r   r   r   rf     s
   z9TestTryBareExcept.test_closure3.<locals>.foo.<locals>.barc                 S      g | ]}|qS r   r   .0r    r   r   r   
<listcomp>      z@TestTryBareExcept.test_closure3.<locals>.foo.<locals>.<listcomp>r+   r-   r9   )mapri   r   r   r   r^   
  s   z,TestTryBareExcept.test_closure3.<locals>.foor_   rq   rZ   r9   rX   r)   r^   rJ   r/   r   r   r   test_closure3	  s   
	
zTestTryBareExcept.test_closure3c                 C   s   t dd }t }|d}W d    n1 sw   Y  | |  d | | t }|d}W d    n1 s>w   Y  | | d | |g d d S )Nc                 S   s<   dd }zdd t |ddd| gD W S    td Y d S )	Nc                 S   s   | dk rt d| S )Nr   r3   r\   re   r   r   r   rf     s   z9TestTryBareExcept.test_closure4.<locals>.foo.<locals>.barc                 S   rl   r   r   rm   r   r   r   ro   #  rp   z@TestTryBareExcept.test_closure4.<locals>.foo.<locals>.<listcomp>r+   r-   r9   rZ   )rr   r>   ri   r   r   r   r^     s
   z,TestTryBareExcept.test_closure4.<locals>.foor0   rZ       )r+   r-   r9   rv   )r   r   r'   rH   stripr`   rs   r   r   r   test_closure4  s   



zTestTryBareExcept.test_closure4c                 C   sR   t dd }t }|  W d    n1 sw   Y  | |  dg d S )Nc                  S   s4   t d} z	t j| }W d S    td | Y S )N)rv   rv   rZ   )npZzerosZlinalgZcholeskyr>   )aZcholr   r   r   r^   4  s   
z0TestTryBareExcept.test_real_problem.<locals>.foorZ   rX   rj   r   r   r   test_real_problem2  s   
z#TestTryBareExcept.test_real_problemc                 C   sl   t dd }t }|d W d    n1 sw   Y  | |  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z zz|dkr!tW n	   td tW W d S    td t   td Y d S )NrO   rZ   ZCAUGHT1ZCAUGHT2ZCAUGHT3)rL   r\   r>   )rM   rN   r   r   r   r^   C  s,   z,TestTryBareExcept.test_for_loop.<locals>.foor_   rZ   rv   c                 S   s   g | ]}d | qS )zCAUGHT%sr   )rn   rN   r   r   r   ro   `  s    z3TestTryBareExcept.test_for_loop.<locals>.<listcomp>r+   )r   r   r'   rH   rI   rL   rj   r   r   r   test_for_loopB  s   


zTestTryBareExcept.test_for_loopc                 C   s$   t dd }|d}| |d d S )Nc                 S   s   zW | S    Y | S r   r   r   r   r   r   r^   d  s   z,TestTryBareExcept.test_try_pass.<locals>.foorW   r&   )r)   r^   r/   r   r   r   test_try_passc  s   
zTestTryBareExcept.test_try_passc                 C   R   t dd }| t}|  W d    n1 sw   Y  | dt|j d S )Nc                   S   s   zt d    NERRORru   r   r   r   r   r%   p  s   z6TestTryBareExcept.test_try_except_reraise.<locals>.udt4The re-raising of an exception is not yet supported.r   r1   r   assertInr2   r3   r4   r   r   r   test_try_except_reraiseo     
z)TestTryBareExcept.test_try_except_reraiseN)r   r   r   __doc__r*   r6   r?   rK   rU   rY   ra   rg   rk   rt   ry   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d Zd	d
 Zdd ZdS )TestTryExceptCaughtc                 C   s   t dd }t }|d W d    n1 sw   Y  | |  g d t }|d W d    n1 s;w   Y  | |  g d d S )Nc                 S   sH   zt d | rtdt d W n ty   t d Y nw t d d S )Nr@   Z321rA   rB   rC   r>   ZeroDivisionErrorrc   r   r   r   r   r%     s   z5TestTryExceptCaught.test_catch_exception.<locals>.udtT)r@   rB   rC   Fr@   rA   rC   rX   )r)   r%   rJ   r   r   r   test_catch_exception  s    




z(TestTryExceptCaught.test_catch_exceptionc                 C   s   t dd }t }|d}W d    n1 sw   Y  | |  ddg | |d t }|d}W d    n1 sAw   Y  | |  g d | |d	 d S )
Nc                 S   sP   zt d | r	tt d d}W n ty!   t d d}| Y S w t d |S )Nr@   rA   rW   rB   rV   rC   r   )r    rr   r   r   r%     s   z5TestTryExceptCaught.test_return_in_catch.<locals>.udtTr@   rB   rV   Fr   rW   rX   rT   r   r   r   test_return_in_catch  s$   




z(TestTryExceptCaught.test_return_in_catchc                 C   sT   t dd }| t}|d W d    n1 sw   Y  | dt|j d S )Nc              
   S   s@   z	| rt d}W |S  ty } z
d}|W  Y d }~S d }~ww )NrW   rV   )r   rc   )r    r   er   r   r   r%     s   z1TestTryExceptCaught.test_save_caught.<locals>.udtTz3Exception object cannot be stored into variable (e)r   r4   r   r   r   test_save_caught  s   


z$TestTryExceptCaught.test_save_caughtc                 C   r   )Nc                   S   s   zt d ty    w r   r\   rc   r   r   r   r   r%     s
   z8TestTryExceptCaught.test_try_except_reraise.<locals>.udtr   r   r4   r   r   r   r     r   z+TestTryExceptCaught.test_try_except_reraisec                 C   r   )Nc                   S   s,   zt d ty   z  ty    w w r   r   r   r   r   r   r%     s   z>TestTryExceptCaught.test_try_except_reraise_chain.<locals>.udtr   r   r4   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   s(   z	d|   W d|  S  t y   Y dS w )Nr+     )rc   rF   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   s   t  }||i | W d    n1 sw   Y  | }t  }||i | W d    n1 s3w   Y  | }| j||d||d d S )Nzargs={} kwargs={})msg)r   rH   r'   format)r)   ZcfuncpyfuncargskwargsrJ   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 | rvt d zt d |rt d tdt d W nO tym   t d z,t d zt d	 |r=t d
 tdt d W n tyO   t d Y nw t d W n tyb   t d Y nw t d t d Y nw t d t d t d d S )Nr@   rA   rB   rC   rF   rD   rE   HIJrG   KLMNOPGQRr>   r   rc   r    rF   rG   pr   r   r   r%     sB   z5TestTryExceptNested.test_try_except_else.<locals>.udtTFrv   repeatr   r   listr   
assertTruer   Zpy_func)r)   r%   casesr    rF   rG   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  zPzt d | rt d tt d W n   t d Y W z.zt d |r+t d tW n ty9   t d Y nw t d W t d	 d S W t d	 d S t d	 w z,zt d |r_t d tW n tym   t d Y nw t d W t d	 w W t d	 w t d	 w )
Nr@   rA   rB   rC   rD   rE   r   r   r   r   r   qr   r   r   r%   C  sF   



z8TestTryExceptNested.test_try_except_finally.<locals>.udtTFr-   r   r   r   )r)   r%   r   r   r   r   r   r   test_try_except_finallyB  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   sJ   t  }zt| D ]}||krt|| q	W |S  ty$   | Y S w r   )r   ListrL   
IndexErrorappendrc   )rM   raise_atlstrN   r   r   r   r%   e  s   z6TestTryExceptRefct.test_list_direct_raise.<locals>.udtr_   rO   r   r   r'   r   rL   r)   r%   outr   r   r   test_list_direct_raised  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   )rL   r   r   )r   rM   r   rN   r   r   r   appenderx  s
   z=TestTryExceptRefct.test_list_indirect_raise.<locals>.appenderc                    s<   t  }|d z	 || | W |S  ty   | Y S w )N  )r   r   r   rc   )rM   r   r   r   r   r   r%     s   
z8TestTryExceptRefct.test_list_indirect_raise.<locals>.udtr_   rO   r   r   r   r   r   r   r   test_list_indirect_raisew  s   

"z+TestTryExceptRefct.test_list_indirect_raisec                 C   sR   t dd }| t}|  W d    n1 sw   Y  | t|jd d S )Nc                  S   sX   zt  } td | d td | d td | W S  ty+   td Y d S w )Nr@   r   rA   ZfdarB   rC   )r   r   r>   r   rc   )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   r1   r   assertRegexr2   r3   r4   r   r   r   test_incompatible_refinement  s   
z/TestTryExceptRefct.test_incompatible_refinementN)r   r   r   r   r   r   r   r   r   r   r   c  s    r   c                   @   sD   e Zd Zdd Zeeedd Zeeedd Z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   s@    t | D ]}z||krt|V  W q ty   Y  d S w d S r   )rL   r\   rc   )rM   r    rN   r   r   r   r%     s   
z5TestTryExceptOtherControlFlow.test_yield.<locals>.udtr_   rO   r   r(   r   r   r   rg     s   
	"z(TestTryExceptOtherControlFlow.test_yieldc                 C   sV   t dd }| t}|  W d    n1 sw   Y  d}| |t|j d S )Nc                   S   sP   zt   tt  W d    W d S 1 sw   Y  W d S  ty'   Y d S w r   )r   r>   objectrc   r   r   r   r   r%     s   &z7TestTryExceptOtherControlFlow.test_objmode.<locals>.udtlunsupported control flow: with-context contains branches (i.e. break/return/raise) that can leave the block r   r1   r	   r   r2   r3   )r)   r%   r5   r   r   r   r   test_objmode  s   
z*TestTryExceptOtherControlFlow.test_objmodec                    sb   dd  t  fdd}| t}|  W d    n1 sw   Y  d}| |t|j d S )Nc                 S   s   t tt|  S r   )rz   Zasarrayr   reversedtolistr   r   r   r   rf     s   zCTestTryExceptOtherControlFlow.test_objmode_output_type.<locals>.barc                     sj   t d} t | }z tdd | | 7 }W d    W |S 1 s#w   Y  W |S  ty4   Y |S w )NrO   zintp[:]r   )rz   arangeZ
zeros_liker   rc   )r    rF   rf   r   r   r     s   

zLTestTryExceptOtherControlFlow.test_objmode_output_type.<locals>.test_objmoder   r   )r)   r   r5   r   r   r   r   test_objmode_output_type  s   z6TestTryExceptOtherControlFlow.test_objmode_output_typec           	      C   s   dd }t |D ]	}|jdkr nq	| d ti |j}d}|j D ]\}}|	t
jD ]}d}|jr@||jd v r@d}q0q&|sK| d	 d S d S )
Nc                   S   s   zt  t y   tdw r   )rc   r\   r   r   r   r   r     s
   zMTestTryExceptOtherControlFlow.test_reraise_opcode_unreachable.<locals>.pyfunc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   rg   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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y   |d7 }Y qw |S )Nr   r+   r   rc   rM   crN   r   r   r   r%     s   z>TestTryExceptParfors.test_try_in_prange_reduction.<locals>.udtr_   FZ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 d    n1 s<w   Y  |  t|d	 | d
t|d  d S )Nc                 S   s6   d}zt | D ]}|d7 }qW |S  ty   Y dS w )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   r2   )r)   r%   r   r   wr   r   r   !test_try_outside_prange_reduction  s   

z6TestTryExceptParfors.test_try_outside_prange_reductionc                 C   V   dd }t ddg}|| }| tdd|| | | tdd|| | d S )Nc              	   S   sV   |   }t| jD ]}z||krt| | | ||< W q	 ty(   d||< Y q	w |S Nr0   copyr   sizer\   rc   Zarrr    r   rN   r   r   r   r%   .  s   z8TestTryExceptParfors.test_try_in_prange_map.<locals>.udtr_      Fr   Trz   r   ZassertPreciseEqualr   r   r   r   r   test_try_in_prange_map-  
   z+TestTryExceptParfors.test_try_in_prange_mapc                 C   r   )Nc                 S   sX   |   }zt| jD ]}||krt| | | ||< q
W |S  ty+   d||< Y |S w 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>  r   z0TestTryExceptParfors.test_try_outside_prange_mapN)r   r   r   r   r   r   r   r   r   r   r   r     s
    r   __main__)'r   r   	itertoolsr   numpyrz   Znumbar   r   r   r   Z
numba.corer   r   Znumba.core.errorsr	   r
   r   r   Znumba.tests.supportr   r   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s,    ,  i ]C]L