o
    8ήc                     @   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- d dl.m/Z/ d dl0m1Z1 d dl2Z2dd Z3d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>e? Z@d&d' ZAe#jBZCG d(d) d)e(ZDG d*d+ d+e(ZEG d,d- d-eEZFG d.d/ d/eEZGd0d1 ZHd2d3 ZIG d4d5 d5e'e(ZJd6d7 ZKd8d9 ZLG d:d; d;e'e(ZMG d<d= d=eEZNG d>d? d?e(ZOePd@kr+e2Q  dS 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)	PYVERSION)jitclassc                 C   s*   t | }t|d}t|}||}|S )N)func_id)r   from_functionr   r	   	interpret)funcr   bcinterpfunc_ir r%   C/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_withlifting.pyget_func_ir   s
   


r'   c                   C   sF   t d t t d t  W d    n1 sw   Y  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 d    n1 s"w   Y  | d7 } t t d|  t  | d7 } W d    n1 sDw   Y  | d7 } t d|  d S )N   r(   r)   d   r*   
   Dr+   xr%   r%   r&   lift2-   s    



r5   c               	   C   s   d} d}t d| | t0 t d t  | d7 } t t d |d7 }t  W d    n1 s0w   Y  W d    n1 s?w   Y  | d7 } |d7 }t d| | d S )Nr/   r0   r(   r)   r*   i r2   r+   r4   yr%   r%   r&   lift3>   s"   r8   c               
   C   s   d} t d|  | d7 } t7 t d t  | d7 } tdD ]}t t d t  | |7 } W d    n1 s7w   Y  qW d    n1 sGw   Y  t t d t  | r\| d9 } W d    n1 sfw   Y  | d7 } t d|  d S )	Nr   r(   r1   r)   r/   r*   r2   E)r,   r   r-   ranger4   ir%   r%   r&   lift4O   s2   

	r=   c                   C   s   t d d S )Nr(   r,   r%   r%   r%   r&   lift5e      r?   c                  C   sH   d} t d|  t | d7 } W d    n1 sw   Y  t d|  | S )Nr/   r(   r)   r,   r   r3   r%   r%   r&   	liftcall1i   s   


rB   c                  C   s~   d} t d|  t | d7 } W d    n1 sw   Y  t d|  t | d7 } W d    n1 s3w   Y  t d|  | S )Nr/   r(   r)   r1   r*   rA   r3   r%   r%   r&   	liftcall2r   s   




rC   c                  C   s   d} t d|  t | dkr| d7 } W d    n1 sw   Y  t d|  t tdD ]}| |7 } q-W d    n1 s>w   Y  t d|  | S )Nr/   r(   r   r)   r1   r*   )r,   r   r:   r;   r%   r%   r&   	liftcall3~   s   



rD   c                	   C   s^   t # t  W d    n1 sw   Y  W d    d S W d    d S 1 s(w   Y  d S N)r   r%   r%   r%   r&   	liftcall4   s   "rF   c               	   C   sb   t dD ]*} t t|  | dkrtd 	 W d     | S W d    n1 s)w   Y  q| S )Nr1      r(   )r:   r   r,   )r<   r%   r%   r&   	liftcall5   s   rH   c                   C   *   t 	 W d    d S 1 sw   Y  d S rE   )undefined_global_varr%   r%   r%   r&   lift_undefiend      "rK   c                   C   rI   rE   )bogus_contextmanagerr%   r%   r%   r&   lift_invalid   rL   rN   c                   @   <   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      | j tdd d S Nr/   rU   )rX   r.   rT   r%   r%   r&   
test_lift1      zTestWithFinding.test_lift1c                 C   rY   N   r[   )rX   r5   r\   r%   r%   r&   
test_lift2   r^   zTestWithFinding.test_lift2c                 C   rY   rZ   )rX   r8   r\   r%   r%   r&   
test_lift3   r^   zTestWithFinding.test_lift3c                 C   rY   r_   )rX   r=   r\   r%   r%   r&   
test_lift4   r^   zTestWithFinding.test_lift4c                 C   rY   )Nr   r[   )rX   r?   r\   r%   r%   r&   
test_lift5   r^   zTestWithFinding.test_lift5N)	__name__
__module____qualname__rX   r]   ra   rb   rc   rd   r%   r%   r%   r&   rP      s    rP   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 rE   )superrh   setUpr
   Context	typingctxr   
CPUContext	targetctxr   flagsr\   	__class__r%   r&   rj      s   

zBaseTestWithLifting.setUpc           	      C   s   t |}t|| j| j| ji d\}}| t|| | |}t }|	  W d    n1 s1w   Y  | |
 | d S Nlocals)r'   r   rl   rn   ro   rS   rR   r   r   entry_pointgetvalue)	rT   r!   rU   expected_stdoutrV   new_ir	extractedcresoutr%   r%   r&   check_extracted_with   s   


z(BaseTestWithLifting.check_extracted_withr%   Nc              
   C   sX   | j }| j}| j}t|| t||||||i dW  d    S 1 s%w   Y  d S rr   )rl   rn   ro   r   nested_contextr   )rT   rV   argsreturn_typerl   rn   ro   r%   r%   r&   r      s   
$zBaseTestWithLifting.compile_ir)r%   N)re   rf   rg   rj   r|   r   __classcell__r%   r%   rp   r&   rh      s    rh   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      | j tddd d S )Nr/   zA
C
rU   rw   )r|   r.   r\   r%   r%   r&   r]         
zTestLiftByPass.test_lift1c                 C   r   )Nr`   zA 1
D 3
r   )r|   r5   r\   r%   r%   r&   ra      r   zTestLiftByPass.test_lift2c                 C   r   )Nr/   zA 1 100
D 2 101
r   )r|   r8   r\   r%   r%   r&   rb      r   zTestLiftByPass.test_lift3c                 C   r   )Nr`   z	A 0
E 11
r   )r|   r=   r\   r%   r%   r&   rc      r   zTestLiftByPass.test_lift4c                 C   r   )Nr   zA
r   )r|   r?   r\   r%   r%   r&   rd      r   zTestLiftByPass.test_lift5N)re   rf   rg   r]   ra   rb   rc   rd   r%   r%   r%   r&   r      s    r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	e
dkddd ZdS )TestLiftCallc                 C   sx   t |}t }|  W d   n1 sw   Y  t }|  W d   n1 s+w   Y  | | |  dS )z2Ensure same semantic with non-jitted code
        N)r   r   rS   rv   )rT   r!   jittedgotexpectr%   r%   r&   check_same_semantic   s   z TestLiftCall.check_same_semanticc                 C      | j tddd | t d S )Nr/   zA 1
B 2
r   )r|   rB   r   r\   r%   r%   r&   test_liftcall1     zTestLiftCall.test_liftcall1c                 C   r   )Nr`   zA 1
B 2
C 12
r   )r|   rC   r   r\   r%   r%   r&   test_liftcall2  r   zTestLiftCall.test_liftcall2c                 C   r   )Nr`   zA 1
B 2
C 47
r   )r|   rD   r   r\   r%   r%   r&   test_liftcall3  r   zTestLiftCall.test_liftcall3c                 C   sb   t jt jt jt jf}| |}tt  W d    n1 sw   Y  d}| |t	|j
 d S )Nz2compiler re-entrant to the same function signature)r   TypingErrorNumbaRuntimeErrorNumbaValueErrorCompilerErrorassertRaisesr   rF   assertInstr	exception)rT   acceptraisesmsgr%   r%   r&   test_liftcall4  s   zTestLiftCall.test_liftcall4      zunsupported on py3.8 and beforec                 C   r   )Nr/   z0
1
2
3
4
5
A
r   )r|   rH   r   r\   r%   r%   r&   test_liftcall5   s   zTestLiftCall.test_liftcall5N)re   rf   rg   r   r   r   r   r   unittestskipIfr   r   r%   r%   r%   r&   r      s    
r   c                        fdd}|S )Nc                    X   |  tj} | g|R i | W d    n1 sw   Y  | dt|j d S )NzDoes not support list typer   r   r   r   r   r   rT   r~   kwargsr   fnr%   r&   core)     z+expected_failure_for_list_arg.<locals>.corer%   r   r   r%   r   r&   expected_failure_for_list_arg(     r   c                    r   )Nc                    r   )NzDoes not support function typer   r   r   r%   r&   r   2  r   z/expected_failure_for_function_arg.<locals>.corer%   r   r%   r   r&   !expected_failure_for_function_arg1  r   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d1d2 Zejd3d4 Ze d5d6 Z!d7d8 Z"e#d9d: Z$d;d< Z%ejd=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.dOdP Z/dQdR Z0dSdT Z1dUdV Z2dWdX Z3e4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:deS )fTestLiftObjc                 C      t dtj d S Nerrorwarningssimplefilterr   NumbaWarningr\   r%   r%   r&   rj   <  r^   zTestLiftObj.setUpc                 C      t   d S rE   r   resetwarningsr\   r%   r%   r&   tearDown?  r@   zTestLiftObj.tearDownc                 G   s   t |}t |}t|}t }|| }| }W d    n1 s$w   Y  |ttt| t }|| }	| }
W d    n1 sIw   Y  | 	||
 | 
||	 d S rE   )copydeepcopyr   r   rv   compiletuplemapr   rS   assertPreciseEqual)rT   pyfuncr~   py_argsc_argscfuncstream
expect_res
expect_outgot_resgot_outr%   r%   r&   assert_equal_return_and_stdoutB  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 =ivalr`   r>   r   r%   r%   r&   barU     z0TestLiftObj.test_lift_objmode_basic.<locals>.barc                    sB   | d7 } t   |  W d    | d S 1 sw   Y  | d S Nr/   r   r   r   r%   r&   fooX  s   

z0TestLiftObj.test_lift_objmode_basic.<locals>.fooc                    sD   | d7 } t j  |  W d    | d S 1 sw   Y  | d S r   numbar   r   r   r%   r&   foo_nonglobal^  s   

z:TestLiftObj.test_lift_objmode_basic.<locals>.foo_nonglobal{   r   )rT   r   r   r%   r   r&   test_lift_objmode_basicT  s
   z#TestLiftObj.test_lift_objmode_basicc                    (   dd   fdd}d}|  || d S )Nc                 S   s   t d| d i | d9 } d S )Narrr`   r>   )r   r%   r%   r&   r   h  s   z3TestLiftObj.test_lift_objmode_array_in.<locals>.barc                    sL   t | t j}t  | W d    |d S 1 sw   Y  |d S r   )nparangeastypeint64r   )nelemr   r   r%   r&   r   m  s   

z3TestLiftObj.test_lift_objmode_array_in.<locals>.foor1   r   )rT   r   r   r%   r   r&   test_lift_objmode_array_ing  s   z&TestLiftObj.test_lift_objmode_array_inc                    r   )Nc                 S   s   t |  d S rE   r>   r7   r%   r%   r&   r   x  r@   z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.barc                    sF   t   d|  }t|} | W d    | S 1 sw   Y  | S Nr`   )r   r   r   )r4   r7   ar   r%   r&   r   {  s   


z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.foor   r   rT   r   argr%   r   r&   #test_lift_objmode_define_new_unusedw  s   z/TestLiftObj.test_lift_objmode_define_new_unusedc                    s@   dd   fdd} fdd}d}|  || |  || d S )Nc                 S      t |  d|  S r   r>   r3   r%   r%   r&   inverse     z<TestLiftObj.test_lift_objmode_return_simple.<locals>.inversec                    s@   t dd  | }W d    | |fS 1 sw   Y  | |fS Nfloat64r   r   r6   r   r%   r&   r     s   

z8TestLiftObj.test_lift_objmode_return_simple.<locals>.fooc                    sB   t jdd  | }W d    | |fS 1 sw   Y  | |fS r   r   r6   r   r%   r&   r     s   

zBTestLiftObj.test_lift_objmode_return_simple.<locals>.foo_nonglobalr   r   )rT   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   r   r   r>   r3   r%   r%   r&   r     r   z;TestLiftObj.test_lift_objmode_return_array.<locals>.inversec                    sJ   t ddd  | }t|d }W d    n1 sw   Y  | ||fS )N
float64[:]r   )r7   zr   )r   intr4   r7   r   r   r%   r&   r     s
   
z7TestLiftObj.test_lift_objmode_return_array.<locals>.foor/   r1   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 }g d}|  || d S )Nc                 S   sp   t dd' t|  d| d< t|  g d|  }tdd |D }W d    | |fS 1 s/w   Y  | |fS )Nr   r      r   r/   r`   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   asarrayr6   r%   r%   r&   r     s   
z5TestLiftObj.test_lift_objmode_using_list.<locals>.foor   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   s   t | D ]} q| r| d7 } tdd$ t|  | d8 } t|  t | D ]
}| |7 } t|  q#W d    | S 1 s9w   Y  | S )Nr/   intpr3   )r:   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 }|  |g dd d S )Nc                 S   v   || d< t   t|  W d    n1 sw   Y  t   d| | d< t|  W d    | S 1 s4w   Y  | S r   r   r,   r4   r   r%   r%   r&   r        


z=TestLiftObj.test_case01_mutate_list_ahead_of_ctx.<locals>.foor      r   rT   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 g d}| ||d d S )Nc                 S   r   r   r   r   r%   r%   r&   r     r   z>TestLiftObj.test_case02_mutate_array_ahead_of_ctx.<locals>.foor   r   r   arrayr   rT   r   r4   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   f   t dd g d}W d    n1 sw   Y  t   d|d< W d    |S 1 s,w   Y  |S NzList(int64)r   r   r1   r`   r   r6   r%   r%   r&   r        


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   h   dd }t g d}t|}| tj}|| W d    n1 s$w   Y  | dt|j d S )Nc                 S   s8   t dd t|  W d    | S 1 sw   Y  | S )Nr   kr   r3   r%   r%   r&   r        

z=TestLiftObj.test_case04_bogus_variable_type_info.<locals>.foor   z1Invalid type annotation on non-outgoing variables)	r   r  r   r   r   r   r   r   r   rT   r   r4   cfoor   r%   r%   r&   $test_case04_bogus_variable_type_info  s   
z0TestLiftObj.test_case04_bogus_variable_type_infoc                 C   sf   dd }t g d}t|}| t}||}W d    n1 s#w   Y  | dt|j d S )Nc                 S   8   t dd | d }W d    |S 1 sw   Y  |S )Nr   r   y              ?r   r   r%   r%   r&   r     s   

z4TestLiftObj.test_case05_bogus_type_info.<locals>.foor   zXcan't unbox array from PyObject into native value.  The object maybe of a different type)r   r  r   r   	TypeErrorr   r   r   )rT   r   r4   r  r   r   r%   r%   r&   test_case05_bogus_type_info  s   
z'TestLiftObj.test_case05_bogus_type_infoc                 C   sZ   dd }|  tj}t|d W d    n1 sw   Y  d}| t|j| d S )Nc              	   S   sj   t  ( t   t|  W d    n1 sw   Y  W d    | S W d    | S 1 s.w   Y  | S rE   r   r3   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   )rT   r   r   patr%   r%   r&   test_case06_double_objmode  s   	z&TestLiftObj.test_case06_double_objmodec                 C   sx   dd }t g d}t|}| tj}|| W d    n1 s$w   Y  t|j}| d| | d| d S )Nc                 S   s<   t   d| i}d}W d    n1 sw   Y  | ||fS )Nr   r   r   )r4   tur%   r%   r&   r   +  s
   
z6TestLiftObj.test_case07_mystery_key_error.<locals>.foor   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   )rT   r   r4   r  r   exstrr%   r%   r&   test_case07_mystery_key_error)  s   

z)TestLiftObj.test_case07_mystery_key_errorc                    sp   t    fdd}tg d}t|}| t}|| W d    n1 s(w   Y  | t|jd d S )Nc              	      s`   t t| D ]'}t  t|}| | }| |< t d  W d    n1 s(w   Y  q| S )N2)r:   rR   r   r   r,   )r4   r<   r  vdr%   r&   r   C  s   z8TestLiftObj.test_case08_raise_from_external.<locals>.foor   z'2')	dictr   r  r   r   KeyErrorrS   r   r   r  r%   r  r&   test_case08_raise_from_external>  s   	
z+TestLiftObj.test_case08_raise_from_externalc                 C   r  )Nc                 S   s"   t   t 1 s
w   Y  | S rE   )r   
ValueErrorr3   r%   r%   r&   r   S  s   z3TestLiftObj.test_case09_explicit_raise.<locals>.foor   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_raiseR  s   
z&TestLiftObj.test_case09_explicit_raisec                 C   &   dd }t g d}| || d S )Nc                 S   r  r  r   r6   r%   r%   r&   r   e  r	  z;TestLiftObj.test_case10_mutate_across_contexts.<locals>.foor   r  r  r%   r%   r&   "test_case10_mutate_across_contextsb  s   z.TestLiftObj.test_case10_mutate_across_contextsc                 C   r&  )Nc                 S   sp   t dd tjg ddd}W d    n1 sw   Y  t   d|d< W d    |S 1 s1w   Y  |S )Nint64[:]r   r   r   r   r1   r`   )r   r   r   r6   r%   r%   r&   r   q  s   

zATestLiftObj.test_case10_mutate_array_across_contexts.<locals>.foor   r  r  r%   r%   r&   (test_case10_mutate_array_across_contextso     z4TestLiftObj.test_case10_mutate_array_across_contextsc                 C   sf   dd }t g d}t|}| t}|| W d    n1 s#w   Y  | dt|j d S )Nc                 S   s4   t   dd }W d    | S 1 sw   Y  | S )Nc                 S      | d S r   r%   r   r%   r%   r&   r        zLTestLiftObj.test_case11_define_function_in_context.<locals>.foo.<locals>.barr   r4   r   r%   r%   r&   r   ~  s   

z?TestLiftObj.test_case11_define_function_in_context.<locals>.foor   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                    s2   dd   fdd}t g d}| || d S )Nc                 S   r+  r   r%   r   r%   r%   r&   r     r,  z>TestLiftObj.test_case12_njit_inside_a_objmode_ctx.<locals>.barc                    sJ   t dd t | d}W d    | | S 1 sw   Y  | | S )Nr(  r   r   )r   r   r   r6   r   r%   r&   r     s   
z>TestLiftObj.test_case12_njit_inside_a_objmode_ctx.<locals>.foor   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 jg ddd}tjdd}tdt | ||d W d    n1 s+w   Y  |D ]}| j|j	d	d
d q2d S )Nc                 S   sZ   |r%t dd | d d}W d    | | S 1 sw   Y  | | S | d }| | S )Nr(  r   r/   r   r`   )r   r   )r4   wobjr7   r%   r%   r&   r     s   
z:TestLiftObj.test_case13_branch_to_objmode_ctx.<locals>.foor   r   r   T)recordalwayszdataflow.pyz"there were warnings in dataflow.py)r   )
r   r  r   catch_warningsr   RuntimeWarningr   assertFalsefilenameendswith)rT   r   r4   weachr%   r%   r&   !test_case13_branch_to_objmode_ctx  s   	z-TestLiftObj.test_case13_branch_to_objmode_ctxc                 C   s   dd }t dkr8| tj}t|}|tg d W d    n1 s&w   Y  d}| |t|j	 d S |tg d}tj
tg d| d S )Nc                 S   s:   t dd | d7 } | W  d    S 1 sw   Y  d S )Nr(  r3   r/   r   r3   r%   r%   r&   r     s   $zCTestLiftObj.test_case14_return_direct_from_objmode_ctx.<locals>.foor   r   Dunsupported control flow: due to return statements inside with block)r`   r   r   )r   r   r   r   r   r   r  r   r   r   testingassert_array_equal)rT   r   r   r  r   resultr%   r%   r&   *test_case14_return_direct_from_objmode_ctx  s   z6TestLiftObj.test_case14_return_direct_from_objmode_ctxc                 C   r&  )Nc                    s   d  fdd}|| d S )Nr1   c                    s>   t dd t|  |   W  d    S 1 sw   Y  d S )Nr(  r3   r   r3   jr%   r&   r     s   $zHTestLiftObj.test_case15_close_over_objmode_ctx.<locals>.foo.<locals>.barr`   r%   r-  r%   rA  r&   r     s   z;TestLiftObj.test_case15_close_over_objmode_ctx.<locals>.foor   r  r  r%   r%   r&   "test_case15_close_over_objmode_ctx  s   z.TestLiftObj.test_case15_close_over_objmode_ctxc                    s6   ddl m   fdd}tg d}| || d S )Nr   )sparsec                    sP   t dd t|   | }t|d }W d    |S 1 s!w   Y  |S )Nr   r  )r   r   )r   r,   
csr_matrixr   r   )r4   spxr  spr%   r&   r     s   

z>TestLiftObj.test_case16_scipy_call_in_objmode_ctx.<locals>.foor   )scipyrD  r   r  r   r  r%   rG  r&   %test_case16_scipy_call_in_objmode_ctx  s   	z1TestLiftObj.test_case16_scipy_call_in_objmode_ctxc                    s4   dd l   fddtg d}| | d S )Nr   c                    s6   t     W d    d S 1 sw   Y  d S rE   )r   disr3   rK  r   r%   r&   r     s   "z7TestLiftObj.test_case17_print_own_bytecode.<locals>.foor   )rK  r   r  r   )rT   r4   r%   rL  r&   test_case17_print_own_bytecode  s   z*TestLiftObj.test_case17_print_own_bytecodec                 C   s4   dd }t g d}tdd }| ||| d S )Nc                 S   s8   t   | |d  W d    d S 1 sw   Y  d S rQ   r   )r!   r4   r%   r%   r&   r     s   "zCTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.foor   c                 S   r+  )NrG   r%   r  r%   r%   r&   <lambda>  s    zHTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.<lambda>)r   r  r   r   )rT   r   r4   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g d W d    n1 s'w   Y  tdkr3d}nd}| |t	|j
 d S )Nc                    sP   t   | dkr	 W d    dS W d    n1 sw   Y   | d }|S )Nr      r/   r   )r4   retr   r%   r&   r     s   z.TestLiftObj.test_case19_recursion.<locals>.foor   )r   rP  r<  zUntyped global name 'foo')r   r   r   r   r   r   r  r   r   r   r   )rT   r   r  r   r%   rR  r&   test_case19_recursion  s   z!TestLiftObj.test_case19_recursionc                 C   r&  )Nc                 S   sV   t jd t j }tdd t j }W d    n1 s w   Y  | | | S Nr   r   r  r   randomseedrandr   r   r%   r%   r&   r   	  s   
z1TestLiftObj.test_case20_rng_works_ok.<locals>.foor   r  r  r%   r%   r&   test_case20_rng_works_ok  r*  z$TestLiftObj.test_case20_rng_works_okc                 C   r&  )Nc                 S   sb   t jd t j }tdd t jd t j }W d    n1 s&w   Y  | | | S rT  rU  r   r%   r%   r&   r     s   
z6TestLiftObj.test_case21_rng_seed_works_ok.<locals>.foor   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 rE   )r   r   listreversedtolistr3   r%   r%   r&   r   #  r   z'TestLiftObj.test_example01.<locals>.barc                     sF   t d} tdd |  |  }W d    |S 1 sw   Y  |S )NrG   zintp[:]r   )r   r   r   r6   r   r%   r&   r   &  s   

z'TestLiftObj.test_example01.<locals>.foo)r   r   py_func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      d S rE   r%   )sr%   r%   r&   r   2     z1TestLiftObj.test_objmode_in_overload.<locals>.fooc                 S   s   dd }|S )Nc                 S   r  )Nr   r{   r   r   )rb  r{   r%   r%   r&   impl7     

zHTestLiftObj.test_objmode_in_overload.<locals>.foo_overload.<locals>.implr%   )rb  rf  r%   r%   r&   foo_overload5  s   z:TestLiftObj.test_objmode_in_overload.<locals>.foo_overloadc                      s    dS r   r%   r%   rR  r%   r&   f=     z/TestLiftObj.test_objmode_in_overload.<locals>.fr   )r   r   r   rS   )rT   rh  ri  r%   rR  r&   test_objmode_in_overload1  s   
z$TestLiftObj.test_objmode_in_overloadc                 C   s.   t dd }| }| |t | |d d S )Nc                  S   4   t td d} W d    | S 1 sw   Y  | S Nval皙(@)r   gv_typern  r%   r%   r&   
global_varD     
z8TestLiftObj.test_objmode_gv_variable.<locals>.global_var   )r   assertIsInstancer   rS   )rT   rr  rQ  r%   r%   r&   test_objmode_gv_variableC  s
   
z$TestLiftObj.test_objmode_gv_variablec                 C   F   t dd }| tjd |  W d    d S 1 sw   Y  d S )Nc                  S   rl  )Nrn  r   )r   gv_type2rn  r%   r%   r&   rr  P  rs  z>TestLiftObj.test_objmode_gv_variable_error.<locals>.global_varzIError handling objmode argument 'val'. Global 'gv_type2' is not defined\.r   assertRaisesRegexr   r   )rT   rr  r%   r%   r&   test_objmode_gv_variable_errorO  s   
"z*TestLiftObj.test_objmode_gv_variable_errorc              	   C   sx   t dd }t dd }||fD ])}| jt|d | }| |t | |d W d    n1 s4w   Y  qd S )Nc                  S   6   t tjd d} W d    | S 1 sw   Y  | S rm  )r   r   r   rn  r%   r%   r&   modattr1^     
z6TestLiftObj.test_objmode_gv_mod_attr.<locals>.modattr1c                  S   s8   t tjjd d} W d    | S 1 sw   Y  | S rm  )r   r   r   r   rn  r%   r%   r&   modattr2d  s   
z6TestLiftObj.test_objmode_gv_mod_attr.<locals>.modattr2r   rt  )r   subTestr   ru  r   rS   )rT   r}  r  r   rQ  r%   r%   r&   test_objmode_gv_mod_attr]  s   

z$TestLiftObj.test_objmode_gv_mod_attrc                 C   rw  )Nc                  S   r|  rm  )r   r   THIS_DOES_NOT_EXISTrn  r%   r%   r&   moderrorr  r~  z<TestLiftObj.test_objmode_gv_mod_attr_error.<locals>.moderrorzQError handling objmode argument 'val'. Getattr cannot be resolved at compile-timery  rT   r  r%   r%   r&   test_objmode_gv_mod_attr_errorq  s   
"z*TestLiftObj.test_objmode_gv_mod_attr_errorc                 C   rw  )Nc                  S   sF   t tjtjtjd d} d}d}W d    tS 1 sw   Y  tS )Nv1v2v3rp  )r   r   r   r  float32ro  r  r%   r%   r&   r    s   

zETestLiftObj.test_objmode_gv_mod_attr_error_multiple.<locals>.moderrorzPError handling objmode argument 'v2'. Getattr cannot be resolved at compile-timery  r  r%   r%   r&   'test_objmode_gv_mod_attr_error_multiple~  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   ra  rE   r%   r%   r%   r%   r&   r     rc  z>TestLiftObj.test_objmode_closure_type_in_overload.<locals>.fooc                     s   t jd d    fdd} | S )Nc                     B   t  d tdtj} W d    | S 1 sw   Y  | S Nrd  r1   r   r   r   r   r   rd  	shrubberyr%   r&   rf       
zUTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overload.<locals>.implr   r   rf  r%   r  r&   rh    s   zGTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overloadc                           S rE   r%   r%   rR  r%   r&   r        z>TestLiftObj.test_objmode_closure_type_in_overload.<locals>.barr1   )r   r   r   r   r   r   r   rT   rh  r   r%   rR  r&   %test_objmode_closure_type_in_overload  s   
 z1TestLiftObj.test_objmode_closure_type_in_overloadc                    sb   dd  t  dd }t fdd}| tjd |  W d    d S 1 s*w   Y  d S )Nc                   S   ra  rE   r%   r%   r%   r%   r&   r     rc  zDTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.fooc                     s    t jd d    fdd}  | S )Nc                     r  r  r  rd  r  r%   r&   rf    r  z[TestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overload.<locals>.implr  r  r%   r  r&   rh    s   zMTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overloadc                      r  rE   r%   r%   rR  r%   r&   r     r  zDTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.barzIError handling objmode argument 'out'. Freevar 'shrubbery' is not defined)r   r   rz  r   r   r  r%   rR  r&   +test_objmode_closure_type_in_overload_error  s   
"z7TestLiftObj.test_objmode_closure_type_in_overload_errorc                 C   rw  )Nc                  S   s4   t dd d} W d    tS 1 sw   Y  tS )Nr`   )badr/   )r   ro  rd  r%   r%   r&   r    rs  z6TestLiftObj.test_objmode_invalid_use.<locals>.moderrorzError 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.ry  r  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                     sR   t dt d d} | }tdtj}W d    n1 sw   Y  | ||fS )Nr   t1t2t3    :(ArG   )r   rq  r   r   r   int32r  array_tyr%   r&   r     s   
z5TestLiftObj.test_objmode_multi_type_args.<locals>.foor  i  rG   )r   r  r   r   r   r   r   )rT   r   r  r  r  r%   r  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   )r  r   zerosr  r  )rT   r  r%   r%   r&   __init__  s   z7TestLiftObj.test_objmode_jitclass.<locals>.Bag.__init__c                 S   s   | j jS rE   )r  sizer\   r%   r%   r&   r    rj  z3TestLiftObj.test_objmode_jitclass.<locals>.Bag.sizec                 S   s(   t | jD ]}| j|  |7  < q| jS rE   )r:   r  r  )rT   ro  r<   r%   r%   r&   	increment  s   z8TestLiftObj.test_objmode_jitclass.<locals>.Bag.incrementc                 S   s   | | S rE   r%   r6   r%   r%   r&   add  rj  z2TestLiftObj.test_objmode_jitclass.<locals>.Bag.addN)	re   rf   rg   r  propertyr  r  staticmethodr  r%   r%   r%   r&   Bag  s    
r     c                   S   ra  rE   r%   r%   r%   r%   r&   r     rc  z.TestLiftObj.test_objmode_jitclass.<locals>.fooc                     s   j   fdd} | S )Nc                     sB   t d  d} | d W d    | S 1 sw   Y  | S )Nrd  r   r   )r   r  rd  )r  r  r%   r&   rf    s   
zETestLiftObj.test_objmode_jitclass.<locals>.foo_overload.<locals>.impl)_numba_type_r  )r  mybagr  r&   rh    s   z7TestLiftObj.test_objmode_jitclass.<locals>.foo_overloadc                      r  rE   r%   r%   rR  r%   r&   r     r  z.TestLiftObj.test_objmode_jitclass.<locals>.barr`   r   rG   r   r   )r   r  r  r   objectr   r   ru  rS   r  r   r  r   r  )rT   specnrh  r   r   	exp_arrayr%   )r  r   r  r&   test_objmode_jitclass  s"   	z!TestLiftObj.test_objmode_jitclassc                 C   8   t dd | d }W d    |S 1 sw   Y  |S Nr   outputr1   re  r4   r  r%   r%   r&   case_objmode_cache  r  zTestLiftObj.case_objmode_cachec                    sd   t g d t fdd}| tj}|  W d    n1 s"w   Y  | t|jd d S )Nr/   r`   r   r   rG   c                     s8   t  d g d} W d    | S 1 sw   Y  | S )Nrd  r  re  rd  ret_typer%   r&   test2  r  z6TestLiftObj.test_objmode_reflected_list.<locals>.test2zObjmode 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   rT   r  r   r%   r  r&   test_objmode_reflected_list     z'TestLiftObj.test_objmode_reflected_listc                    sd   t h d t fdd}| tj}|  W d    n1 s"w   Y  | t|jd d S )N   r/   r`   r   r   rG   c                     s8   t  d h d} W d    | S 1 sw   Y  | S )Nr?  r  re  r  r  r%   r&   r  +  r  z5TestLiftObj.test_objmode_reflected_set.<locals>.test2zObjmode context failed. Argument 'result' is declared as an unsupported type: reflected set\(int(32|64)\). Reflected types are not supported.r  r  r%   r  r&   test_objmode_reflected_set)  r  z&TestLiftObj.test_objmode_reflected_setc                    sf   t t jt j t fdd}| t}|  W d    n1 s#w   Y  | dt|j	 d S )Nc                     s:   t  d ddd} W d    | S 1 sw   Y  | S )Nresr/   r`   )r(   r)   re  r  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   DictTypeunicode_typer   r   r   r  r   r   r   rT   r  r   r%   r  r&   test_objmode_typed_dict;  s   z#TestLiftObj.test_objmode_typed_dictc                    sb   t t j t fdd}| t}|  W d    n1 s!w   Y  | t|jd d S )Nc                     s8   t  d ddg} W d    | S 1 sw   Y  | S )Nr  r/   r`   re  r  r  r%   r&   r  M  r  z2TestLiftObj.test_objmode_typed_list.<locals>.test4zLcan't unbox a <class 'list'> as a (<class ')?numba.typed.typedlist.List('>)?)	r   ListTyper   r   r   r  r  r   r   r  r%   r  r&   test_objmode_typed_listK  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 d    |S 1 sw   Y  |S )Nz
int64[::1]r   r   )r   r   viewr6   r%   r%   r&   r   `  s   
z1TestLiftObj.test_objmode_use_of_view.<locals>.foor/   r   )r   r   onesr   r  r^  r   )rT   r   r   expectedr   r%   r%   r&   test_objmode_use_of_view]  s   

z$TestLiftObj.test_objmode_use_of_viewN);re   rf   rg   rj   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r#  r%  r'  r)  r/  r0  r;  r@  r   expectedFailurerC  r   rJ  rM  r   rO  rS  rY  rZ  r`  rk  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%   r%   r%   r&   r   :  sx    


	


	
	
4
r   c                 C      | d S Nr1   r%   r3   r%   r%   r&   case_inner_pyfuncl  r,  r  c                 C   s8   t dd t| }W d    |S 1 sw   Y  |S Nr   r  )r   r  r  r%   r%   r&   r  p  rg  r  c                   @   rO   )TestLiftObjCachingc                 C   r   r   r   r\   r%   r%   r&   rj   y  r^   zTestLiftObjCaching.setUpc                 C   r   rE   r   r\   r%   r%   r&   r   |  r@   zTestLiftObjCaching.tearDownc                 C   sX   t dd|}| |dd t dd|}| |j | |dd | |j d S )NT)cacher   rp  )r   rS   r6  _cache_hits
assertTrue)rT   r^  firstsecondr%   r%   r&   check  s   zTestLiftObjCaching.checkc                 C   s   dd }|  | d S )Nc                 S   r  r  re  r  r%   r%   r&   r     rg  z=TestLiftObjCaching.test_objmode_caching_basic.<locals>.pyfuncr  rT   r   r%   r%   r&   test_objmode_caching_basic  s   z-TestLiftObjCaching.test_objmode_caching_basicc                    s"   dd   fdd}|  | d S )Nc                 S   r  r  r%   r3   r%   r%   r&   other_pyfunc  r,  zNTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.other_pyfuncc                    s8   t dd  | }W d    |S 1 sw   Y  |S r  re  r  r  r%   r&   r     rg  zHTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.pyfuncr  r  r%   r  r&   %test_objmode_caching_call_closure_bad  s   z8TestLiftObjCaching.test_objmode_caching_call_closure_badc                 C   s   |  t d S rE   )r  r  r\   r%   r%   r&   &test_objmode_caching_call_closure_good  s   z9TestLiftObjCaching.test_objmode_caching_call_closure_goodN)	re   rf   rg   rj   r   r  r  r  r  r%   r%   r%   r&   r  v  s    	r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestBogusContextc                 C   b   t t}| tj}t|| j| j| ji d W d    n1 s!w   Y  | 	dt
|j d S )Nrs   z*Undefined variable used as context manager)r'   rK   r   r   r   r   rl   rn   ro   r   r   r   rT   rV   r   r%   r%   r&   test_undefined_global     z&TestBogusContext.test_undefined_globalc                 C   r  )Nrs   z"Unsupported context manager in use)r'   rN   r   r   r   r   rl   rn   ro   r   r   r   r  r%   r%   r&   test_invalid  r  zTestBogusContext.test_invalidc                 C   s\   t dd }| tj}|  W d    n1 sw   Y  t|j}d}| || d S )Nc                  S   s.   t d	} W d    d S 1 sw   Y  d S )N )openri  r%   r%   r&   r        
"z;TestBogusContext.test_with_as_fails_gracefully.<locals>.foozGThe 'with (context manager) as (variable):' construct is not supported.)r   r   r   UnsupportedErrorr   r   r   )rT   r   r   excstrr   r%   r%   r&   test_with_as_fails_gracefully  s   

z.TestBogusContext.test_with_as_fails_gracefullyN)re   rf   rg   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   s8   t  s| d dd }g d}t||}| | d S )Nzstrace support missingc                  S   s   t ddd } d S )Nzvoid()c                   S   s.   t  	 W d    d S 1 sw   Y  d S rE   r   r%   r%   r%   r&   ri    r  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   skipTestr   r6  )rT   r  syscallsstrace_datar%   r%   r&   test_no_fork_in_compilation  s   	

z$TestMisc.test_no_fork_in_compilationN)re   rf   rg   _numba_parallel_test_r   r   run_test_in_subprocessr  r%   r%   r%   r&   r    s
    r  __main__)Rr   ossignal
subprocesssystempfile	threadingr   numpyr   r   numba.core.transformsr   r   numba.core.withcontextsr   r   r   numba.core.bytecoder   r   numba.core.interpreterr	   
numba.corer
   r   r   numba.core.registryr   numba.core.compilerr   r   r   r   r   r   numba.core.extendingr   numba.tests.supportr   r   r   r   r   r   r   numba.core.utilsr   numba.experimentalr   r   r'   r.   r5   r8   r=   r?   rB   rC   rD   rF   rH   rK   r  rM   rN   r   rq  rP   rh   r   r   r   r   r   r  r  r  r  r  re   mainr%   r%   r%   r&   <module>   sv    $	
0		      8)(
 