U
    b»{jd‹  ã                   @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZ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mZ d dlmZmZ d dlmZ d dl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% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd„ Z9dd„ Z:dd„ Z;dd„ Z<d d!„ Z=d"d#„ Z>d$d%„ Z?e@ƒ ZAd&d'„ ZBe#jCZDG d(d)„ d)e(ƒZEG d*d+„ d+e(ƒZFG d,d-„ d-eFƒZGG d.d/„ d/eFƒZHd0d1„ ZId2d3„ ZJG d4d5„ d5e'e(ƒZKd6d7„ ZLd8d9„ ZMG d:d;„ d;e'e(ƒZNG d<d=„ d=eFƒZOG d>d?„ d?e(ƒZPeQd@k�rVe3 R¡  dS )Aé    N)Úfind_setupwithsÚwith_lifting)Úbypass_contextÚcall_contextÚobjmode_context)ÚFunctionIdentityÚByteCode)ÚInterpreter)ÚtypingÚerrorsÚcpu)Ú
cpu_target)Ú
compile_irÚDEFAULT_FLAGS)ÚnjitÚtypeofÚobjmodeÚtypes)Úoverload)Ú
MemoryLeakÚTestCaseÚcaptured_stdoutÚskip_unless_scipyÚ
linux_onlyÚstrace_supportedÚstraceÚexpected_failure_py311)Ú	PYVERSION)Újitclassc                 C   s*   t  | ¡}t|d�}t|ƒ}| |¡}|S )N)Úfunc_id)r   Úfrom_functionr   r	   Z	interpret)Úfuncr   ÚbcÚinterpZfunc_ir© r$   ú[/var/www/html/bwave/python/venv/lib/python3.8/site-packages/numba/tests/test_withlifting.pyÚget_func_ir   s
    


r&   c                	   C   s2   t dƒ t� t dƒ tƒ  W 5 Q R X t dƒ d S )NÚAÚBÚC©Úprintr   Úbr$   r$   r$   r%   Úlift1&   s
    r-   c               	   C   s€   d} t d| ƒ d} t� t d| ƒ | d7 } tƒ  W 5 Q R X | d7 } t� t d| ƒ tƒ  | d7 } W 5 Q R X | d7 } t d| ƒ d S )Né   r'   r(   éd   r)   é
   ÚDr*   ©Úxr$   r$   r%   Úlift2.   s    


r4   c               
   C   s€   d} d}t d| |ƒ t�B t dƒ tƒ  | d7 } t� t dƒ |d7 }tƒ  W 5 Q R X W 5 Q R X | d7 } |d7 }t d| |ƒ d S )Nr.   r/   r'   r(   r)   i † r1   r*   ©r3   Úyr$   r$   r%   Úlift3?   s    r7   c                  C   s°   d} t d| ƒ | d7 } t�P t dƒ tƒ  | d7 } tdƒD ]*}t� t dƒ tƒ  | |7 } W 5 Q R X q:W 5 Q R X t�  t dƒ tƒ  | r�| d9 } W 5 Q R X | d7 } t d| ƒ d S )	Nr   r'   r0   r(   r.   r)   r1   ÚE)r+   r   r,   Úrange©r3   Úir$   r$   r%   Úlift4P   s&    
r<   c                   C   s   t dƒ d S )Nr'   ©r+   r$   r$   r$   r%   Úlift5f   s    r>   c               	   C   s4   d} t d| ƒ t� | d7 } W 5 Q R X t d| ƒ | S )Nr.   r'   r(   ©r+   r   r2   r$   r$   r%   Ú	liftcall1j   s    

r@   c               	   C   sV   d} t d| ƒ t� | d7 } W 5 Q R X t d| ƒ t� | d7 } W 5 Q R X t d| ƒ | S )Nr.   r'   r(   r0   r)   r?   r2   r$   r$   r%   Ú	liftcall2s   s    


rA   c               	   C   sl   d} t d| ƒ t� | dkr$| d7 } W 5 Q R X t d| ƒ t� tdƒD ]}| |7 } qFW 5 Q R X t d| ƒ | S )Nr.   r'   r   r(   r0   r)   )r+   r   r9   r:   r$   r$   r%   Ú	liftcall3   s    


rB   c                
   C   s$   t � t � W 5 Q R X W 5 Q R X d S ©N)r   r$   r$   r$   r%   Ú	liftcall4�   s    rD   c               
   C   sH   t dƒD ]:} t�, t| ƒ | dkr8tdƒ W 5 Q R £  qDW 5 Q R X q| S )Nr0   é   r'   )r9   r   r+   )r;   r$   r$   r%   Ú	liftcall5“   s    rF   c                	   C   s   t � W 5 Q R X d S rC   )Zundefined_global_varr$   r$   r$   r%   Úlift_undefiend�   s    rG   c                	   C   s   t � W 5 Q R X d S rC   )Úbogus_contextmanagerr$   r$   r$   r%   Úlift_invalid¥   s    rI   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 )ÚTestWithFindingc                 C   s(   t |ƒ}tt|ƒd ƒ}|  ||¡ d S ©Nr   )r&   Úlenr   ÚassertEqual)Úselfr!   Úexpect_countÚthe_irÚctr$   r$   r%   Úcheck_num_of_with®   s    z!TestWithFinding.check_num_of_withc                 C   s   | j tdd� d S ©Nr.   ©rO   )rR   r-   ©rN   r$   r$   r%   Ú
test_lift1³   s    zTestWithFinding.test_lift1c                 C   s   | j tdd� d S ©Né   rT   )rR   r4   rU   r$   r$   r%   Ú
test_lift2¶   s    zTestWithFinding.test_lift2c                 C   s   | j tdd� d S rS   )rR   r7   rU   r$   r$   r%   Ú
test_lift3¹   s    zTestWithFinding.test_lift3c                 C   s   | j tdd� d S rW   )rR   r<   rU   r$   r$   r%   Ú
test_lift4¼   s    zTestWithFinding.test_lift4c                 C   s   | j tdd� d S )Nr   rT   )rR   r>   rU   r$   r$   r%   Ú
test_lift5¿   s    zTestWithFinding.test_lift5N)	Ú__name__Ú
__module__Ú__qualname__rR   rV   rY   rZ   r[   r\   r$   r$   r$   r%   rJ   ­   s   rJ   c                       s.   e Zd Z‡ fdd„Zdd„ Zd	dd„Z‡  ZS )
ÚBaseTestWithLiftingc                    s0   t t| ƒ ¡  t ¡ | _t | j¡| _t	| _
d S rC   )Úsuperr`   ÚsetUpr
   ÚContextÚ	typingctxr   Z
CPUContextÚ	targetctxr   ÚflagsrU   ©Ú	__class__r$   r%   rb   Ä   s    
zBaseTestWithLifting.setUpc           	   	   C   sl   t |ƒ}t|| j| j| ji d�\}}|  t|ƒ|¡ |  |¡}tƒ �}| 	¡  W 5 Q R X |  | 
¡ |¡ d S ©N©Úlocals)r&   r   rd   re   rf   rM   rL   r   r   Úentry_pointÚgetvalue)	rN   r!   rO   Úexpected_stdoutrP   Znew_irZ	extractedZcresÚoutr$   r$   r%   Úcheck_extracted_withÊ   s       þ

z(BaseTestWithLifting.check_extracted_withr$   Nc              
   C   sL   | j }| j}| j}t ||¡�$ t||||||i d�W  5 Q R £ S Q R X d S ri   )rd   re   rf   r   Znested_contextr   )rN   rP   ÚargsÚreturn_typerd   re   rf   r$   r$   r%   r   Ø   s    
  ÿzBaseTestWithLifting.compile_ir)r$   N)r]   r^   r_   rb   rp   r   Ú__classcell__r$   r$   rg   r%   r`   Ã   s   r`   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestLiftByPassc                 C   s   | j tddd� d S )Nr.   zA
C
©rO   rn   )rp   r-   rU   r$   r$   r%   rV   ä   s    ÿzTestLiftByPass.test_lift1c                 C   s   | j tddd� d S )NrX   zA 1
D 3
ru   )rp   r4   rU   r$   r$   r%   rY   è   s    ÿzTestLiftByPass.test_lift2c                 C   s   | j tddd� d S )Nr.   zA 1 100
D 2 101
ru   )rp   r7   rU   r$   r$   r%   rZ   ì   s    ÿzTestLiftByPass.test_lift3c                 C   s   | j tddd� d S )NrX   z	A 0
E 11
ru   )rp   r<   rU   r$   r$   r%   r[   ð   s    ÿzTestLiftByPass.test_lift4c                 C   s   | j tddd� d S )Nr   zA
ru   )rp   r>   rU   r$   r$   r%   r\   ô   s    ÿzTestLiftByPass.test_lift5N)r]   r^   r_   rV   rY   rZ   r[   r\   r$   r$   r$   r%   rt   â   s
   rt   c                   @   sP   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
dkd¡edd„ ƒƒZdS )ÚTestLiftCallc              	   C   sP   t |ƒ}tƒ �}|ƒ  W 5 Q R X tƒ �}|ƒ  W 5 Q R X |  | ¡ | ¡ ¡ dS )z2Ensure same semantic with non-jitted code
        N)r   r   rM   rm   )rN   r!   ZjittedÚgotÚexpectr$   r$   r%   Úcheck_same_semanticû   s    z TestLiftCall.check_same_semanticc                 C   s   | j tddd� |  t¡ d S )Nr.   zA 1
B 2
ru   )rp   r@   ry   rU   r$   r$   r%   Útest_liftcall1  s    ÿzTestLiftCall.test_liftcall1c                 C   s   | j tddd� |  t¡ d S )NrX   zA 1
B 2
C 12
ru   )rp   rA   ry   rU   r$   r$   r%   Útest_liftcall2  s    ÿzTestLiftCall.test_liftcall2c                 C   s   | j tddd� |  t¡ d S )NrX   zA 1
B 2
C 47
ru   )rp   rB   ry   rU   r$   r$   r%   Útest_liftcall3  s    ÿzTestLiftCall.test_liftcall3c              	   C   sN   t jt jt jt jf}|  |¡�}ttƒƒ  W 5 Q R X d}|  |t	|j
ƒ¡ d S )Nz2compiler re-entrant to the same function signature)r   ÚTypingErrorZNumbaRuntimeErrorZNumbaValueErrorÚCompilerErrorÚassertRaisesr   rD   ÚassertInÚstrÚ	exception)rN   ÚacceptÚraisesÚmsgr$   r$   r%   Útest_liftcall4  s     ÿzTestLiftCall.test_liftcall4©é   é   zunsupported on py3.8 and beforec                 C   s   | j tddd� |  t¡ d S )Nr.   z0
1
2
3
4
5
A
ru   )rp   rF   ry   rU   r$   r$   r%   Útest_liftcall5!  s    ÿzTestLiftCall.test_liftcall5N)r]   r^   r_   ry   rz   r{   r|   r†   ÚunittestZskipIfr   r   rŠ   r$   r$   r$   r%   rv   ù   s   
ÿrv   c                    s   ‡ fdd„}|S )Nc              	      s>   |   tj¡�}ˆ | f|ž|Ž W 5 Q R X |  dt|jƒ¡ d S )NzDoes not support list type©r   r   r}   r€   r�   r‚   ©rN   rq   Úkwargsr„   ©Úfnr$   r%   Úcore+  s
    ÿz+expected_failure_for_list_arg.<locals>.corer$   ©r�   r‘   r$   r�   r%   Úexpected_failure_for_list_arg*  s    r“   c                    s   ‡ fdd„}|S )Nc              	      s>   |   tj¡�}ˆ | f|ž|Ž W 5 Q R X |  dt|jƒ¡ d S )NzDoes not support function typerŒ   r�   r�   r$   r%   r‘   4  s
    ÿz/expected_failure_for_function_arg.<locals>.corer$   r’   r$   r�   r%   Ú!expected_failure_for_function_arg3  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d„ Z	dd„ Z
edd„ ƒZdd„ Zedd„ ƒZdd„ Ze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/d0„ Zejd1d2„ ƒZed3d4„ ƒZ d5d6„ Z!e"d7d8„ ƒZ#e$d9d:„ ƒZ%ejd;d<„ ƒZ&d=d>„ Z'd?d@„ Z(dAdB„ Z)dCdD„ Z*dEdF„ Z+dGdH„ Z,dIdJ„ Z-dKdL„ Z.dMdN„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2dUdV„ Z3e4dWdX„ ƒZ5dYdZ„ Z6d[d\„ Z7d]d^„ Z8d_d`„ Z9dadb„ Z:dcS )dÚTestLiftObjc                 C   s   t  dtj¡ d S ©NÚerror©ÚwarningsÚsimplefilterr   ZNumbaWarningrU   r$   r$   r%   rb   >  s    zTestLiftObj.setUpc                 C   s   t  ¡  d S rC   ©r™   ÚresetwarningsrU   r$   r$   r%   ÚtearDownA  s    zTestLiftObj.tearDownc              	   G   s�   t  |¡}t  |¡}t|ƒ}tƒ �}||Ž }| ¡ }W 5 Q R X | ttt|ƒƒ¡ tƒ �}||Ž }	| ¡ }
W 5 Q R X |  	||
¡ |  
||	¡ d S rC   )ÚcopyÚdeepcopyr   r   rm   ÚcompileÚtupleÚmapr   rM   ÚassertPreciseEqual)rN   Úpyfuncrq   Zpy_argsZc_argsZcfuncÚstreamZ
expect_resZ
expect_outZgot_resZgot_outr$   r$   r%   Úassert_equal_return_and_stdoutD  s    

z*TestLiftObj.assert_equal_return_and_stdoutc                    s<   dd„ ‰ ‡ fdd„}‡ fdd„}|   |d¡ |   |d¡ d S )Nc                 S   s   t dd| d iƒ d S )Nzival =ÚivalrX   r=   ©r§   r$   r$   r%   ÚbarW  s    z0TestLiftObj.test_lift_objmode_basic.<locals>.barc              	      s(   | d7 } t � ˆ | ƒ W 5 Q R X | d S ©Nr.   ©r   r¨   ©r©   r$   r%   ÚfooZ  s    z0TestLiftObj.test_lift_objmode_basic.<locals>.fooc              	      s*   | d7 } t j� ˆ | ƒ W 5 Q R X | d S rª   ©Únumbar   r¨   r¬   r$   r%   Úfoo_nonglobal`  s    z:TestLiftObj.test_lift_objmode_basic.<locals>.foo_nonglobalé{   ©r¦   )rN   r­   r°   r$   r¬   r%   Útest_lift_objmode_basicV  s
    z#TestLiftObj.test_lift_objmode_basicc                    s(   dd„ ‰ ‡ fdd„}d}|   ||¡ d S )Nc                 S   s   t d| d iƒ | d9 } d S )NÚarrrX   r=   )r´   r$   r$   r%   r©   j  s    z3TestLiftObj.test_lift_objmode_array_in.<locals>.barc              	      s2   t  | ¡ t j¡}t� ˆ |ƒ W 5 Q R X |d S rª   )ÚnpÚarangeÚastypeÚint64r   )Únelemr´   r¬   r$   r%   r­   o  s    z3TestLiftObj.test_lift_objmode_array_in.<locals>.foor0   r²   )rN   r­   r¹   r$   r¬   r%   Útest_lift_objmode_array_ini  s    z&TestLiftObj.test_lift_objmode_array_inc                    s(   dd„ ‰ ‡ fdd„}d}|   ||¡ d S )Nc                 S   s   t | ƒ d S rC   r=   ©r6   r$   r$   r%   r©   z  s    z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.barc              	      s0   t ƒ �  d|  }t |¡}ˆ |ƒ W 5 Q R X | S ©NrX   )r   rµ   r¶   )r3   r6   Úar¬   r$   r%   r­   }  s
    
z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.foor±   r²   ©rN   r­   Úargr$   r¬   r%   Ú#test_lift_objmode_define_new_unusedy  s    z/TestLiftObj.test_lift_objmode_define_new_unusedc                    s@   dd„ ‰ ‡ fdd„}‡ fdd„}d}|   ||¡ |   ||¡ d S )Nc                 S   s   t | ƒ d|  S rª   r=   r2   r$   r$   r%   Úinverseˆ  s    z<TestLiftObj.test_lift_objmode_return_simple.<locals>.inversec              	      s&   t dd�� ˆ | ƒ}W 5 Q R X | |fS ©NÚfloat64r»   r«   r5   ©rÁ   r$   r%   r­   Œ  s    z8TestLiftObj.test_lift_objmode_return_simple.<locals>.fooc              	      s(   t jdd�� ˆ | ƒ}W 5 Q R X | |fS rÂ   r®   r5   rÄ   r$   r%   r°   ‘  s    zBTestLiftObj.test_lift_objmode_return_simple.<locals>.foo_nonglobalr±   r²   )rN   r­   r°   r¿   r$   rÄ   r%   Útest_lift_objmode_return_simple‡  s    z+TestLiftObj.test_lift_objmode_return_simplec                    s6   dd„ ‰ ‡ fdd„}t jddt jd�}|  ||¡ d S )Nc                 S   s   t | ƒ d|  S rª   r=   r2   r$   r$   r%   rÁ   ›  s    z;TestLiftObj.test_lift_objmode_return_array.<locals>.inversec              	      s6   t ddd�� ˆ | ƒ}t|d ƒ}W 5 Q R X | ||fS )Nú
float64[:]r¸   )r6   Úzr   )r   Úint©r3   r6   rÇ   rÄ   r$   r%   r­   Ÿ  s    z7TestLiftObj.test_lift_objmode_return_array.<locals>.foor.   r0   ©Zdtype)rµ   r¶   rÃ   r¦   r¾   r$   rÄ   r%   Útest_lift_objmode_return_arrayš  s    z*TestLiftObj.test_lift_objmode_return_arrayc                 C   s"   dd„ }dddg}|   ||¡ d S )Nc              	   S   sX   t dd��@ t| ƒ d| d< t| ƒ dddg|  }t dd	„ |D ƒ¡}W 5 Q R X | |fS )
NrÆ   r»   é   r   r.   rX   rˆ   c                 S   s   g | ]}d | ‘qS )r.   r$   )Ú.0r;   r$   r$   r%   Ú
<listcomp>°  s     zITestLiftObj.test_lift_objmode_using_list.<locals>.foo.<locals>.<listcomp>)r   r+   rµ   Úasarrayr5   r$   r$   r%   r­   ª  s    z5TestLiftObj.test_lift_objmode_using_list.<locals>.foor.   rX   rˆ   r²   r¾   r$   r$   r%   Útest_lift_objmode_using_list¨  s    	
z(TestLiftObj.test_lift_objmode_using_listc                 C   s   dd„ }d}|   ||¡ d S )Nc              	   S   sj   t | ƒD ]} q| r| d7 } tdd��< t| ƒ | d8 } t| ƒ t | ƒD ]}| |7 } t| ƒ qFW 5 Q R X | S )Nr.   Úintpr2   )r9   r   r+   r:   r$   r$   r%   r­   ·  s    z4TestLiftObj.test_lift_objmode_var_redef.<locals>.foor±   r²   r¾   r$   r$   r%   Útest_lift_objmode_var_redef¶  s    z'TestLiftObj.test_lift_objmode_var_redefc                 C   s    dd„ }|   |dddgd¡ d S )Nc              	   S   sL   || d< t ƒ � t| ƒ W 5 Q R X t ƒ � d| | d< t| ƒ W 5 Q R X | S r¼   ©r   r+   ©r3   rÇ   r$   r$   r%   r­   Ê  s    z=TestLiftObj.test_case01_mutate_list_ahead_of_ctx.<locals>.foor.   rX   rˆ   é   r²   ©rN   r­   r$   r$   r%   Ú$test_case01_mutate_list_ahead_of_ctxÈ  s    z0TestLiftObj.test_case01_mutate_list_ahead_of_ctxc                 C   s*   dd„ }t  dddg¡}|  ||d¡ d S )Nc              	   S   sL   || d< t ƒ � t| ƒ W 5 Q R X t ƒ � d| | d< t| ƒ W 5 Q R X | S r¼   rÓ   rÔ   r$   r$   r%   r­   Û  s    z>TestLiftObj.test_case02_mutate_array_ahead_of_ctx.<locals>.foor.   rX   rˆ   rÕ   ©rµ   Úarrayr¦   ©rN   r­   r3   r$   r$   r%   Ú%test_case02_mutate_array_ahead_of_ctxÚ  s    z1TestLiftObj.test_case02_mutate_array_ahead_of_ctxc                 C   s   dd„ }|   |d¡ d S )Nc              	   S   s>   t dd�� dddg}W 5 Q R X t ƒ � d|d< W 5 Q R X |S ©NzList(int64)r»   r.   rX   rˆ   r0   r«   r5   r$   r$   r%   r­   î  s
    z6TestLiftObj.test_case03_create_and_mutate.<locals>.foor.   r²   rÖ   r$   r$   r%   Útest_case03_create_and_mutateì  s    z)TestLiftObj.test_case03_create_and_mutatec              	   C   sV   dd„ }t  dddg¡}t|ƒ}|  tj¡�}||ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc              	   S   s"   t dd�� t| ƒ W 5 Q R X | S )NrÆ   ©ÚkrÓ   r2   r$   r$   r%   r­   ø  s    z=TestLiftObj.test_case04_bogus_variable_type_info.<locals>.foor.   rX   rˆ   z1Invalid type annotation on non-outgoing variables)	rµ   rÙ   r   r   r   r}   r€   r�   r‚   ©rN   r­   r3   Úcfoor„   r$   r$   r%   Ú$test_case04_bogus_variable_type_infoö  s    þz0TestLiftObj.test_case04_bogus_variable_type_infoc              	   C   sT   dd„ }t  dddg¡}t|ƒ}|  t¡�}||ƒ}W 5 Q R X |  dt|jƒ¡ d S )Nc              	   S   s"   t dd�� | d }W 5 Q R X |S )NrÆ   ©rÇ   y              ð?r«   rÔ   r$   r$   r%   r­     s    z4TestLiftObj.test_case05_bogus_type_info.<locals>.foor.   rX   rˆ   zXcan't unbox array from PyObject into native value.  The object maybe of a different type)rµ   rÙ   r   r   Ú	TypeErrorr€   r�   r‚   )rN   r­   r3   rá   r„   rw   r$   r$   r%   Útest_case05_bogus_type_info  s    ýz'TestLiftObj.test_case05_bogus_type_infoc              	   C   sF   dd„ }|   tj¡�}t|ƒdƒ W 5 Q R X d}|  t|jƒ|¡ d S )Nc              
   S   s0   t ƒ �  t ƒ � t| ƒ W 5 Q R X W 5 Q R X | S rC   rÓ   r2   r$   r$   r%   r­     s    z3TestLiftObj.test_case06_double_objmode.<locals>.foor±   z@During: resolving callee type: type\(ObjModeLiftedWith\(<.*>\)\))r   r   r}   r   ÚassertRegexr�   r‚   )rN   r­   r„   Úpatr$   r$   r%   Útest_case06_double_objmode  s
    	z&TestLiftObj.test_case06_double_objmodec              	   C   sf   dd„ }t  dddg¡}t|ƒ}|  tj¡�}||ƒ W 5 Q R X t|jƒ}|  d|¡ |  d|¡ d S )Nc              	   S   s(   t ƒ � d| i}d}W 5 Q R X | ||fS )Nr½   rˆ   r«   )r3   ÚtÚur$   r$   r%   r­   -  s    z6TestLiftObj.test_case07_mystery_key_error.<locals>.foor.   rX   rˆ   z;Missing type annotation on outgoing variable(s): ['t', 'u']z9Example code: with objmode(t='<add_type_as_string_here>'))	rµ   rÙ   r   r   r   r}   r�   r‚   r€   )rN   r­   r3   rá   r„   Zexstrr$   r$   r%   Útest_case07_mystery_key_error+  s    
þþz)TestLiftObj.test_case07_mystery_key_errorc              	      s^   t ƒ ‰ ‡ fdd„}t dddg¡}t|ƒ}|  t¡�}||ƒ W 5 Q R X |  t|jƒd¡ d S )Nc              
      sL   t t| ƒƒD ]:}tƒ �* t|ƒ}| | }|ˆ |< tˆ d ƒ W 5 Q R X q| S )NÚ2)r9   rL   r   r�   r+   )r3   r;   rß   Úv©Údr$   r%   r­   E  s    z8TestLiftObj.test_case08_raise_from_external.<locals>.foor.   rX   rˆ   z'2')	Údictrµ   rÙ   r   r   ÚKeyErrorrM   r�   r‚   rà   r$   rî   r%   Útest_case08_raise_from_external@  s    	z+TestLiftObj.test_case08_raise_from_externalc              	   C   sV   dd„ }t  dddg¡}t|ƒ}|  tj¡�}||ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc              	   S   s   t ƒ � tƒ ‚W 5 Q R X | S rC   )r   Ú
ValueErrorr2   r$   r$   r%   r­   U  s    z3TestLiftObj.test_case09_explicit_raise.<locals>.foor.   rX   rˆ   zBunsupported control flow due to raise statements inside with block)	rµ   rÙ   r   r   r   r~   r€   r�   r‚   rà   r$   r$   r%   Útest_case09_explicit_raiseT  s    ýz&TestLiftObj.test_case09_explicit_raisec                 C   s(   dd„ }t  dddg¡}|  ||¡ d S )Nc              	   S   s>   t dd�� dddg}W 5 Q R X t ƒ � d|d< W 5 Q R X |S rÜ   r«   r5   r$   r$   r%   r­   g  s
    z;TestLiftObj.test_case10_mutate_across_contexts.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r$   r%   Ú"test_case10_mutate_across_contextsd  s    z.TestLiftObj.test_case10_mutate_across_contextsc                 C   s(   dd„ }t  dddg¡}|  ||¡ d S )Nc              	   S   sH   t dd�� tjdddgdd�}W 5 Q R X t ƒ � d|d< W 5 Q R X |S )	Núint64[:]r»   r.   rX   rˆ   r¸   rÊ   r0   )r   rµ   rÏ   r5   r$   r$   r%   r­   s  s
    zATestLiftObj.test_case10_mutate_array_across_contexts.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r$   r%   Ú(test_case10_mutate_array_across_contextsq  s    z4TestLiftObj.test_case10_mutate_array_across_contextsc              	   C   sT   dd„ }t  dddg¡}t|ƒ}|  t¡�}||ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc              	   S   s   t ƒ � dd„ }W 5 Q R X | S )Nc                 S   s   | d S rª   r$   r»   r$   r$   r%   r©   ‚  s    zLTestLiftObj.test_case11_define_function_in_context.<locals>.foo.<locals>.barr«   ©r3   r©   r$   r$   r%   r­   €  s    z?TestLiftObj.test_case11_define_function_in_context.<locals>.foor.   rX   rˆ   z global name 'bar' is not defined)rµ   rÙ   r   r   Ú	NameErrorr€   r�   r‚   rà   r$   r$   r%   Ú&test_case11_define_function_in_context~  s    þz2TestLiftObj.test_case11_define_function_in_contextc                    s4   dd„ ‰ ‡ fdd„}t  dddg¡}|  ||¡ d S )Nc                 S   s   | d S rª   r$   r»   r$   r$   r%   r©   “  s    z>TestLiftObj.test_case12_njit_inside_a_objmode_ctx.<locals>.barc              	      s0   t dd�� tˆ ƒ| ƒ d¡}W 5 Q R X | | S )Nrö   r»   r¸   )r   r   r·   r5   r¬   r$   r%   r­   –  s    z>TestLiftObj.test_case12_njit_inside_a_objmode_ctx.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r¬   r%   Ú%test_case12_njit_inside_a_objmode_ctx�  s    z1TestLiftObj.test_case12_njit_inside_a_objmode_ctxc              	   C   sŽ   dd„ }t dkr\|  tj¡�"}t|ƒ}|t dddg¡ƒ W 5 Q R X d}|  |t|j	ƒ¡ n.|t dddg¡ƒ}tj
 t dddg¡|¡ d S )	Nc              
   S   s.   t dd�� | d7 } | W  5 Q R £ S Q R X d S )Nrö   r2   r.   r«   r2   r$   r$   r%   r­   Ÿ  s    zCTestLiftObj.test_case14_return_direct_from_objmode_ctx.<locals>.foor‡   r.   rX   rˆ   zDunsupported control flow: due to return statements inside with blockrÌ   )r   r   r   r~   r   rµ   rÙ   r€   r�   r‚   ZtestingZassert_array_equal)rN   r­   r„   rá   r…   Úresultr$   r$   r%   Ú*test_case14_return_direct_from_objmode_ctxž  s    z6TestLiftObj.test_case14_return_direct_from_objmode_ctxc                 C   s(   dd„ }t  dddg¡}|  ||¡ d S )Nc                    s   d‰ ‡ fdd„}|| ƒd S )Nr0   c              
      s2   t dd�� t| ƒ | ˆ  W  5 Q R £ S Q R X d S )Nrö   r2   rÓ   r2   ©Újr$   r%   r©   ¶  s    zHTestLiftObj.test_case15_close_over_objmode_ctx.<locals>.foo.<locals>.barrX   r$   rø   r$   rþ   r%   r­   ³  s    z;TestLiftObj.test_case15_close_over_objmode_ctx.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r$   r%   Ú"test_case15_close_over_objmode_ctx°  s    z.TestLiftObj.test_case15_close_over_objmode_ctxc                    s8   ddl m‰  ‡ fdd„}t dddg¡}|  ||¡ d S )Nr   )Úsparsec              	      s:   t dd��& t| ƒ ˆ  | ¡}t |d ¡}W 5 Q R X |S )Nr¸   rÞ   )r   r   )r   r+   Z
csr_matrixrµ   r¸   )r3   Zspxrß   ©Úspr$   r%   r­   Â  s
    
z>TestLiftObj.test_case16_scipy_call_in_objmode_ctx.<locals>.foor.   rX   rˆ   )Zscipyr  rµ   rÙ   r¦   rÚ   r$   r  r%   Ú%test_case16_scipy_call_in_objmode_ctx¾  s    	z1TestLiftObj.test_case16_scipy_call_in_objmode_ctxc                    s6   dd l ‰ ‡ ‡fdd„‰t dddg¡}|  ˆ|¡ d S )Nr   c              	      s    t ƒ � ˆ  ˆ¡ W 5 Q R X d S rC   )r   Údisr2   ©r  r­   r$   r%   r­   Ñ  s    z7TestLiftObj.test_case17_print_own_bytecode.<locals>.foor.   rX   rˆ   )r  rµ   rÙ   r¦   )rN   r3   r$   r  r%   Útest_case17_print_own_bytecodeÎ  s    z*TestLiftObj.test_case17_print_own_bytecodec                 C   s6   dd„ }t  dddg¡}tdd„ ƒ}|  |||¡ d S )Nc              	   S   s"   t ƒ � | |d ƒ W 5 Q R X d S rK   r«   )r!   r3   r$   r$   r%   r­   Ù  s    zCTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.foor.   rX   rˆ   c                 S   s   | d S )NrE   r$   rã   r$   r$   r%   Ú<lambda>Þ  ó    zHTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.<lambda>)rµ   rÙ   r   r¦   )rN   r­   r3   r�   r$   r$   r%   Ú*test_case18_njitfunc_passed_to_objmode_ctx×  s    z6TestLiftObj.test_case18_njitfunc_passed_to_objmode_ctxc              	      s`   ‡ fdd„‰ |   tjtjf¡�"}tˆ ƒ}|t dddg¡ƒ W 5 Q R X d}|  |t|j	ƒ¡ d S )Nc              	      s8   t ƒ � | dkrW 5 Q R £ dS W 5 Q R X ˆ | d ƒ}|S )Nr   é   r.   r«   )r3   Úret©r­   r$   r%   r­   ã  s
    z.TestLiftObj.test_case19_recursion.<locals>.foor.   rX   rˆ   zUntyped global name 'foo')
r   r   r}   r~   r   rµ   rÙ   r€   r�   r‚   )rN   r„   rá   r…   r$   r  r%   Útest_case19_recursioná  s    z!TestLiftObj.test_case19_recursionc                 C   s(   dd„ }t  dddg¡}|  ||¡ d S )Nc              	   S   sB   t j d¡ t j ¡ }tdd�� t j ¡ }W 5 Q R X | | | S ©Nr   rÃ   rã   ©rµ   ÚrandomÚseedZrandr   rÉ   r$   r$   r%   r­   ñ  s
    
z1TestLiftObj.test_case20_rng_works_ok.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r$   r%   Útest_case20_rng_works_okï  s    z$TestLiftObj.test_case20_rng_works_okc                 C   s(   dd„ }t  dddg¡}|  ||¡ d S )Nc              	   S   sN   t j d¡ t j ¡ }tdd�� t j d¡ t j ¡ }W 5 Q R X | | | S r  r  rÉ   r$   r$   r%   r­   ý  s    
z6TestLiftObj.test_case21_rng_seed_works_ok.<locals>.foor.   rX   rˆ   rØ   rÚ   r$   r$   r%   Útest_case21_rng_seed_works_okü  s    	z)TestLiftObj.test_case21_rng_seed_works_okc                    s:   dd„ ‰ t ‡ fdd„ƒ}|  |ƒ | ¡ ¡ |  tt¡ d S )Nc                 S   s   t  tt|  ¡ ƒƒ¡S rC   )rµ   rÏ   ÚlistÚreversedÚtolistr2   r$   r$   r%   r©     s    z'TestLiftObj.test_example01.<locals>.barc               	      s0   t  d¡} tdd�� | ˆ | ƒ }W 5 Q R X |S )NrE   zintp[:]r»   )rµ   r¶   r   r5   r¬   r$   r%   r­     s    
z'TestLiftObj.test_example01.<locals>.foo)r   r£   Úpy_funcZassertIsr   r   rÖ   r$   r¬   r%   Útest_example01	  s
    zTestLiftObj.test_example01c                    s<   dd„ ‰ t ˆ ƒdd„ ƒ}tj‡ fdd„ƒ}|  |ƒ d¡ d S )Nc                 S   s   d S rC   r$   )Úsr$   r$   r%   r­     s    z1TestLiftObj.test_objmode_in_overload.<locals>.fooc                 S   s   dd„ }|S )Nc              	   S   s"   t dd�� | d }W 5 Q R X |S )NrÑ   ©ro   rˆ   ©r   )r  ro   r$   r$   r%   Úimpl  s    zHTestLiftObj.test_objmode_in_overload.<locals>.foo_overload.<locals>.implr$   )r  r  r$   r$   r%   Úfoo_overload  s    z:TestLiftObj.test_objmode_in_overload.<locals>.foo_overloadc                      s   ˆ dƒS rª   r$   r$   r  r$   r%   Úf%  s    z/TestLiftObj.test_objmode_in_overload.<locals>.frÌ   )r   r¯   r   rM   )rN   r  r  r$   r  r%   Útest_objmode_in_overload  s    
z$TestLiftObj.test_objmode_in_overloadc                 C   s.   t dd„ ƒ}|ƒ }|  |t¡ |  |d¡ d S )Nc               	   S   s   t td��
 d} W 5 Q R X | S ©N©Úvalçš™™™™™(@)r   Úgv_typer"  r$   r$   r%   Ú
global_var,  s    z8TestLiftObj.test_objmode_gv_variable.<locals>.global_varé   )r   ÚassertIsInstancerÈ   rM   )rN   r&  r  r$   r$   r%   Útest_objmode_gv_variable+  s
    
z$TestLiftObj.test_objmode_gv_variablec              	   C   s0   t dd„ ƒ}|  tjd¡� |ƒ  W 5 Q R X d S )Nc               	   S   s   t td��
 d} W 5 Q R X | S )Nr"  r±   )r   Zgv_type2r"  r$   r$   r%   r&  8  s    z>TestLiftObj.test_objmode_gv_variable_error.<locals>.global_varzIError handling objmode argument 'val'. Global 'gv_type2' is not defined\.©r   ÚassertRaisesRegexr   r~   )rN   r&  r$   r$   r%   Útest_objmode_gv_variable_error7  s    
þz*TestLiftObj.test_objmode_gv_variable_errorc              
   C   sd   t dd„ ƒ}t dd„ ƒ}||fD ]>}| jt|ƒd��$ |ƒ }|  |t¡ |  |d¡ W 5 Q R X q d S )Nc               	   S   s    t tjd��
 d} W 5 Q R X | S r!  )r   r   rÑ   r"  r$   r$   r%   Úmodattr1F  s    z6TestLiftObj.test_objmode_gv_mod_attr.<locals>.modattr1c               	   S   s"   t tjjd��
 d} W 5 Q R X | S r!  )r   r¯   r   rÑ   r"  r$   r$   r%   Úmodattr2L  s    z6TestLiftObj.test_objmode_gv_mod_attr.<locals>.modattr2r�   r'  )r   ZsubTestr�   r(  rÈ   rM   )rN   r-  r.  r�   r  r$   r$   r%   Útest_objmode_gv_mod_attrE  s    

z$TestLiftObj.test_objmode_gv_mod_attrc              	   C   s0   t dd„ ƒ}|  tjd¡� |ƒ  W 5 Q R X d S )Nc               	   S   s    t tjd��
 d} W 5 Q R X | S r!  )r   r   ÚTHIS_DOES_NOT_EXISTr"  r$   r$   r%   ÚmoderrorZ  s    z<TestLiftObj.test_objmode_gv_mod_attr_error.<locals>.moderrorzQError handling objmode argument 'val'. Getattr cannot be resolved at compile-timer*  ©rN   r1  r$   r$   r%   Útest_objmode_gv_mod_attr_errorY  s    
þz*TestLiftObj.test_objmode_gv_mod_attr_errorc              	   C   s0   t dd„ ƒ}|  tjd¡� |ƒ  W 5 Q R X d S )Nc               	   S   s0   t tjtjtjd�� d} d}d}W 5 Q R X tS )N©Zv1Zv2Zv3r$  )r   r   rÑ   r0  Úfloat32r#  r4  r$   r$   r%   r1  g  s    
ÿzETestLiftObj.test_objmode_gv_mod_attr_error_multiple.<locals>.moderrorzPError handling objmode argument 'v2'. Getattr cannot be resolved at compile-timer*  r2  r$   r$   r%   Ú'test_objmode_gv_mod_attr_error_multiplef  s    
þz3TestLiftObj.test_objmode_gv_mod_attr_error_multiplec                    sH   dd„ ‰ t ˆ ƒdd„ ƒ}t‡ fdd„ƒ}|  |ƒ t d¡ tj¡¡ d S )Nc                   S   s   d S rC   r$   r$   r$   r$   r%   r­   w  s    z>TestLiftObj.test_objmode_closure_type_in_overload.<locals>.fooc                     s   t jd d … ‰ ‡ fdd„} | S )Nc               	      s,   t ˆ d�� t d¡ tj¡} W 5 Q R X | S ©Nr  r0   ©r   rµ   r¶   r·   rÃ   r  ©Ú	shrubberyr$   r%   r  }  s    zUTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overload.<locals>.impl©r   rÃ   ©r  r$   r9  r%   r  z  s    zGTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overloadc                      s   ˆ ƒ S rC   r$   r$   r  r$   r%   r©   ƒ  s    z>TestLiftObj.test_objmode_closure_type_in_overload.<locals>.barr0   )r   r   r£   rµ   r¶   r·   rÃ   ©rN   r  r©   r$   r  r%   Ú%test_objmode_closure_type_in_overloadv  s    
z1TestLiftObj.test_objmode_closure_type_in_overloadc              	      sL   dd„ ‰ t ˆ ƒdd„ ƒ}t‡ fdd„ƒ}|  tjd¡� |ƒ  W 5 Q R X d S )Nc                   S   s   d S rC   r$   r$   r$   r$   r%   r­   Š  s    zDTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.fooc                     s    t jd d … ‰ ‡ fdd„} Š | S )Nc               	      s,   t ˆ d�� t d¡ tj¡} W 5 Q R X | S r7  r8  r  r9  r$   r%   r  �  s    z[TestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overload.<locals>.implr;  r<  r$   r9  r%   r  �  s    zMTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overloadc                      s   ˆ ƒ S rC   r$   r$   r  r$   r%   r©   ™  s    zDTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.barzIError handling objmode argument 'out'. Freevar 'shrubbery' is not defined)r   r   r+  r   r}   r=  r$   r  r%   Ú+test_objmode_closure_type_in_overload_error‰  s    
þz7TestLiftObj.test_objmode_closure_type_in_overload_errorc              	   C   s0   t dd„ ƒ}|  tjd¡� |ƒ  W 5 Q R X d S )Nc               	   S   s   t dd��
 d} W 5 Q R X tS )NrX   )Úbadr.   )r   r#  r  r$   r$   r%   r1  ¥  s    z6TestLiftObj.test_objmode_invalid_use.<locals>.moderrorz¤Error handling objmode argument 'bad'. The value must be a compile-time constant either as a non-local variable or a getattr expression that refers to a Numba type.r*  r2  r$   r$   r%   Útest_objmode_invalid_use¤  s    
þz$TestLiftObj.test_objmode_invalid_usec                    s`   t jd d … ‰ t‡ fdd„ƒ}|ƒ \}}}|  |d¡ |  |d¡ |  |t d¡ tj¡¡ d S )Nc               	      s>   t dtˆ d��  d} | }t d¡ tj¡}W 5 Q R X | ||fS )NrÃ   ©Út1Út2Út3ç    :(ArE   )r   r%  rµ   r¶   r·   Úint32rB  ©Zarray_tyr$   r%   r­   µ  s
    z5TestLiftObj.test_objmode_multi_type_args.<locals>.foorF  i  rE   )r   rG  r   r£   rµ   r¶   r·   )rN   r­   rC  rD  rE  r$   rH  r%   Útest_objmode_multi_type_args³  s    
z(TestLiftObj.test_objmode_multi_type_argsc                    sº   dt jfdt jd d … fg}t|ƒG dd„ dtƒƒ‰ d}ˆ |ƒ‰dd„ ‰tˆƒ‡ ‡fdd	„ƒ}t‡fd
d„ƒ}|ƒ }|  |ˆ ¡ |  | 	dd¡d¡ t
jdt
jd�d }|  |j|¡ d S )NÚvaluerÙ   c                   @   s4   e Zd Zdd„ Zedd„ ƒZdd„ Zedd„ ƒZd	S )
z.TestLiftObj.test_objmode_jitclass.<locals>.Bagc                 S   s   || _ tj|tjd�| _d S )NrÊ   )rJ  rµ   Úzerosr5  rÙ   )rN   rJ  r$   r$   r%   Ú__init__Í  s    z7TestLiftObj.test_objmode_jitclass.<locals>.Bag.__init__c                 S   s   | j jS rC   )rÙ   ÚsizerU   r$   r$   r%   rM  Ñ  s    z3TestLiftObj.test_objmode_jitclass.<locals>.Bag.sizec                 S   s(   t | jƒD ]}| j|  |7  < q
| jS rC   )r9   rM  rÙ   )rN   r#  r;   r$   r$   r%   Ú	incrementÕ  s    z8TestLiftObj.test_objmode_jitclass.<locals>.Bag.incrementc                 S   s   | | S rC   r$   r5   r$   r$   r%   ÚaddÚ  s    z2TestLiftObj.test_objmode_jitclass.<locals>.Bag.addN)	r]   r^   r_   rL  ÚpropertyrM  rN  ÚstaticmethodrO  r$   r$   r$   r%   ÚBagË  s   
rR  é   c                   S   s   d S rC   r$   r$   r$   r$   r%   r­   á  s    z.TestLiftObj.test_objmode_jitclass.<locals>.fooc                     s   ˆj ‰ ‡‡ fdd„} | S )Nc               	      s,   t ˆd�� ˆ dƒ} |  d¡ W 5 Q R X | S )Nr  r±   rˆ   )r   rN  r  )rR  r:  r$   r%   r  ç  s    zETestLiftObj.test_objmode_jitclass.<locals>.foo_overload.<locals>.impl)Z_numba_type_r<  )rR  Úmybagr9  r%   r  ä  s    z7TestLiftObj.test_objmode_jitclass.<locals>.foo_overloadc                      s   ˆ ƒ S rC   r$   r$   r  r$   r%   r©   î  s    z.TestLiftObj.test_objmode_jitclass.<locals>.barrX   rˆ   rE   r±   rÊ   )r   rG  r5  r   Úobjectr   r   r(  rM   rO  rµ   rK  r£   rÙ   )rN   ÚspecÚnr  r©   rÇ   Z	exp_arrayr$   )rR  r­   rT  r%   Útest_objmode_jitclassÅ  s"    þ	z!TestLiftObj.test_objmode_jitclassc              	   C   s"   t dd�� | d }W 5 Q R X |S ©NrÃ   ©Úoutputr0   r  ©r3   r[  r$   r$   r%   Úcase_objmode_cacheù  s    zTestLiftObj.case_objmode_cachec              	      sV   t dddddgƒ‰ t‡ fdd„ƒ}|  tj¡�}|ƒ  W 5 Q R X |  t|jƒd¡ d S )	Nr.   rX   rˆ   rÌ   rE   c               	      s(   t ˆ d�� dddddg} W 5 Q R X | S )Nr  r.   rX   rˆ   rÌ   rE   r  r  ©Zret_typer$   r%   Útest2  s    z6TestLiftObj.test_objmode_reflected_list.<locals>.test2z”Objmode context failed. Argument 'out' is declared as an unsupported type: reflected list\(int(32|64)\)<iv=None>. Reflected types are not supported.©r   r   r   r   r~   ræ   r�   r‚   ©rN   r_  r„   r$   r^  r%   Útest_objmode_reflected_listÿ  s    þz'TestLiftObj.test_objmode_reflected_listc              	      sV   t dddddhƒ‰ t‡ fdd„ƒ}|  tj¡�}|ƒ  W 5 Q R X |  t|jƒd¡ d S )	Nr.   rX   rˆ   rÌ   rE   c               	      s(   t ˆ d�� dddddh} W 5 Q R X | S )N©rü   r.   rX   rˆ   rÌ   rE   r  rc  r^  r$   r%   r_    s    z5TestLiftObj.test_objmode_reflected_set.<locals>.test2z�Objmode context failed. Argument 'result' is declared as an unsupported type: reflected set\(int(32|64)\). Reflected types are not supported.r`  ra  r$   r^  r%   Útest_objmode_reflected_set  s    þz&TestLiftObj.test_objmode_reflected_setc              	      sR   t  t jt j¡‰ t‡ fdd„ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|j	ƒ¡ d S )Nc               	      s$   t ˆ d�� dddœ} W 5 Q R X | S )N©Úresr.   rX   )r'   r(   r  re  r^  r$   r%   Útest4%  s    z2TestLiftObj.test_objmode_typed_dict.<locals>.test4zFcan't unbox a <class 'dict'> as a <class 'numba.typed.typeddict.Dict'>)
r   ZDictTypeZunicode_typer¸   r   r   rä   r€   r�   r‚   ©rN   rg  r„   r$   r^  r%   Útest_objmode_typed_dict#  s    ýz#TestLiftObj.test_objmode_typed_dictc              	      sN   t  t j¡‰ t‡ fdd„ƒ}|  t¡�}|ƒ  W 5 Q R X |  t|jƒd¡ d S )Nc               	      s"   t ˆ d�� ddg} W 5 Q R X | S )Nre  r.   rX   r  re  r^  r$   r%   rg  5  s    z2TestLiftObj.test_objmode_typed_list.<locals>.test4zLcan't unbox a <class 'list'> as a (<class ')?numba.typed.typedlist.List('>)?)	r   ZListTyper¸   r   r   rä   ræ   r�   r‚   rh  r$   r^  r%   Útest_objmode_typed_list3  s    þz#TestLiftObj.test_objmode_typed_listc                 C   sB   t dd„ ƒ}t dtj¡ d¡}| |¡}||ƒ}|  ||¡ d S )Nc              	   S   s&   t jdd�� |  d¡}W 5 Q R X |S )Nz
int64[::1]r»   r¸   )r¯   r   Úviewr5   r$   r$   r%   r­   F  s    z1TestLiftObj.test_objmode_use_of_view.<locals>.foor.   rÃ   )r   rµ   Zonesr¸   rk  r  r£   )rN   r­   r½   Úexpectedrw   r$   r$   r%   Útest_objmode_use_of_viewC  s    

z$TestLiftObj.test_objmode_use_of_viewN);r]   r^   r_   rb   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‹   ZexpectedFailurer   r   r  r  r”   r
  r   r  r  r  r  r   r)  r,  r/  r3  r6  r>  r?  rA  rI  rX  rQ  r]  rb  rd  ri  rj  rm  r$   r$   r$   r%   r•   <  sv   


	


	
	

4
r•   c                 C   s   | d S ©Nr0   r$   r2   r$   r$   r%   Úcase_inner_pyfuncR  s    ro  c              	   C   s"   t dd�� t| ƒ}W 5 Q R X |S ©NrÃ   rZ  )r   ro  r\  r$   r$   r%   r]  V  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 )ÚTestLiftObjCachingc                 C   s   t  dtj¡ d S r–   r˜   rU   r$   r$   r%   rb   _  s    zTestLiftObjCaching.setUpc                 C   s   t  ¡  d S rC   r›   rU   r$   r$   r%   r�   b  s    zTestLiftObjCaching.tearDownc                 C   sX   t dd�|ƒ}|  |dƒd¡ t dd�|ƒ}|  |j¡ |  |dƒd¡ |  |j¡ d S )NT)Úcacher±   r$  )r   rM   ÚassertFalseZ_cache_hitsZ
assertTrue)rN   r  ÚfirstÚsecondr$   r$   r%   Úchecke  s    zTestLiftObjCaching.checkc                 C   s   dd„ }|   |¡ d S )Nc              	   S   s"   t dd�� | d }W 5 Q R X |S rY  r  r\  r$   r$   r%   r¤   o  s    z=TestLiftObjCaching.test_objmode_caching_basic.<locals>.pyfunc©rv  ©rN   r¤   r$   r$   r%   Útest_objmode_caching_basicn  s    z-TestLiftObjCaching.test_objmode_caching_basicc                    s"   dd„ ‰ ‡ fdd„}|   |¡ d S )Nc                 S   s   | d S rn  r$   r2   r$   r$   r%   Úother_pyfuncw  s    zNTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.other_pyfuncc              	      s"   t dd�� ˆ | ƒ}W 5 Q R X |S rp  r  r\  ©rz  r$   r%   r¤   z  s    zHTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.pyfuncrw  rx  r$   r{  r%   Ú%test_objmode_caching_call_closure_badv  s    z8TestLiftObjCaching.test_objmode_caching_call_closure_badc                 C   s   |   t¡ d S rC   )rv  r]  rU   r$   r$   r%   Ú&test_objmode_caching_call_closure_good�  s    z9TestLiftObjCaching.test_objmode_caching_call_closure_goodN)	r]   r^   r_   rb   r�   rv  ry  r|  r}  r$   r$   r$   r%   rq  \  s   	rq  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBogusContextc              	   C   sN   t tƒ}|  tj¡�}t|| j| j| ji d� W 5 Q R X |  	dt
|jƒ¡ d S )Nrj   z*Undefined variable used as context manager)r&   rG   r   r   r~   r   rd   re   rf   r€   r�   r‚   ©rN   rP   r„   r$   r$   r%   Útest_undefined_global†  s        ÿþz&TestBogusContext.test_undefined_globalc              	   C   sN   t tƒ}|  tj¡�}t|| j| j| ji d� W 5 Q R X |  	dt
|jƒ¡ d S )Nrj   z"Unsupported context manager in use)r&   rI   r   r   r~   r   rd   re   rf   r€   r�   r‚   r  r$   r$   r%   Útest_invalid’  s        ÿþzTestBogusContext.test_invalidc              	   C   sH   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X t|jƒ}d}|  ||¡ d S )Nc               	   S   s   t dƒ�} W 5 Q R X d S )NÚ )Úopen©r  r$   r$   r%   r­   Ÿ  s    
z;TestBogusContext.test_with_as_fails_gracefully.<locals>.foozGThe 'with (context manager) as (variable):' construct is not supported.)r   r   r   ZUnsupportedErrorr�   r‚   r€   )rN   r­   r„   Zexcstrr…   r$   r$   r%   Útest_with_as_fails_gracefullyž  s    

z.TestBogusContext.test_with_as_fails_gracefullyN)r]   r^   r_   r€  r�  r…  r$   r$   r$   r%   r~  …  s   r~  c                   @   s"   e Zd ZdZeejdd„ ƒƒZdS )ÚTestMiscFc                 C   s:   t ƒ s|  d¡ dd„ }dddg}t||ƒ}|  |¡ d S )Nzstrace support missingc                  S   s   t dƒdd„ ƒ} d S )Nzvoid()c                	   S   s   t  ¡ � W 5 Q R X d S rC   r®   r$   r$   r$   r%   r  À  s    
zFTestMisc.test_no_fork_in_compilation.<locals>.force_compile.<locals>.f)r   r„  r$   r$   r%   Úforce_compile¿  s    z;TestMisc.test_no_fork_in_compilation.<locals>.force_compileÚforkÚcloneÚexecve)r   ZskipTestr   rs  )rN   r‡  ZsyscallsZstrace_datar$   r$   r%   Útest_no_fork_in_compilation²  s    	


z$TestMisc.test_no_fork_in_compilationN)r]   r^   r_   Z_numba_parallel_test_r   r   Zrun_test_in_subprocessr‹  r$   r$   r$   r%   r†  ­  s   r†  Ú__main__)Srž   ÚosÚsignalÚ
subprocessÚsysÚtempfileÚ	threadingr™   Únumpyrµ   r¯   Znumba.core.transformsr   r   Znumba.core.withcontextsr   r   r   Znumba.core.bytecoder   r   Znumba.core.interpreterr	   Z
numba.corer
   r   r   Znumba.core.registryr   Znumba.core.compilerr   r   r   r   r   r   Znumba.core.extendingr   Znumba.tests.supportr   r   r   r   r   r   r   r   Znumba.core.utilsr   Znumba.experimentalr   r‹   r&   r-   r4   r7   r<   r>   r@   rA   rB   rD   rF   rG   rU  rH   rI   rÑ   r%  rJ   r`   rt   rv   r“   r”   r•   ro  r]  rq  r~  r†  r]   Úmainr$   r$   r$   r%   Ú<module>   sr   (	
1		      )( 
