a
    
dd                     @   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rVe3R  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   ZbcZinterpZfunc_ir r"   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/tests/test_withlifting.pyget_func_ir   s
    


r$   c                   C   sF   t d t t d t  W d    n1 s00    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 sD0    Y  | d7 } t( t d|  t  | d7 } W d    n1 s0    Y  | d7 } t d|  d S )N   r%   r&   d   r'   
   Dr(   xr"   r"   r#   lift2.   s    

$
&r2   c               	   C   s   d} d}t d| | t` t d t  | d7 } t& t d |d7 }t  W d    n1 s`0    Y  W d    n1 s~0    Y  | d7 } |d7 }t d| | d S )Nr,   r-   r%   r&   r'   i r/   r(   r1   yr"   r"   r#   lift3?   s    Br5   c               
   C   s   d} t d|  | d7 } tn t d t  | d7 } tdD ]>}t& t d t  | |7 } W d    q:1 sn0    Y  q:W d    n1 s0    Y  t* t d t  | r| d9 } W d    n1 s0    Y  | d7 } t d|  d S )	Nr   r%   r.   r&   r,   r'   r/   E)r)   r   r*   ranger1   ir"   r"   r#   lift4P   s&    
F&r:   c                   C   s   t d d S )Nr%   r)   r"   r"   r"   r#   lift5f   s    r<   c                  C   sH   d} t d|  t | d7 } W d    n1 s00    Y  t d|  | S )Nr,   r%   r&   r)   r   r0   r"   r"   r#   	liftcall1j   s    
&
r>   c                  C   s~   d} t d|  t | d7 } W d    n1 s00    Y  t d|  t | d7 } W d    n1 sf0    Y  t d|  | S )Nr,   r%   r&   r.   r'   r=   r0   r"   r"   r#   	liftcall2s   s    
&
&
r?   c                  C   s   d} t d|  t  | dkr$| d7 } W d    n1 s80    Y  t d|  t& tdD ]}| |7 } qZW d    n1 s|0    Y  t d|  | S )Nr,   r%   r   r&   r.   r'   )r)   r   r7   r8   r"   r"   r#   	liftcall3   s    
&
(
r@   c                	   C   sL   t 4 t  W d    n1 s 0    Y  W d    n1 s>0    Y  d S N)r   r"   r"   r"   r#   	liftcall4   s    rB   c               	   C   s^   t dD ]P} t8 t|  | dkr:td W d     qZW d    q1 sN0    Y  q| S )Nr.      r%   )r7   r   r)   )r9   r"   r"   r#   	liftcall5   s    0rD   c                   C   s(   t  W d    n1 s0    Y  d S rA   )Zundefined_global_varr"   r"   r"   r#   lift_undefiend   s    rE   c                   C   s(   t  W d    n1 s0    Y  d S rA   )bogus_contextmanagerr"   r"   r"   r#   lift_invalid   s    rG   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,   rM   )rP   r+   rL   r"   r"   r#   
test_lift1   s    zTestWithFinding.test_lift1c                 C   s   | j tdd d S N   rR   )rP   r2   rS   r"   r"   r#   
test_lift2   s    zTestWithFinding.test_lift2c                 C   s   | j tdd d S rQ   )rP   r5   rS   r"   r"   r#   
test_lift3   s    zTestWithFinding.test_lift3c                 C   s   | j tdd d S rU   )rP   r:   rS   r"   r"   r#   
test_lift4   s    zTestWithFinding.test_lift4c                 C   s   | j tdd d S )Nr   rR   )rP   r<   rS   r"   r"   r#   
test_lift5   s    zTestWithFinding.test_lift5N)	__name__
__module____qualname__rP   rT   rW   rX   rY   rZ   r"   r"   r"   r#   rH      s   rH   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 rA   )superr^   setUpr
   Context	typingctxr   Z
CPUContext	targetctxr   flagsrS   	__class__r"   r#   r`      s    
zBaseTestWithLifting.setUpc           	      C   s   t |}t|| j| j| ji d\}}| t|| | |}t }|	  W d    n1 sb0    Y  | |
 | d S Nlocals)r$   r   rb   rc   rd   rK   rJ   r   r   entry_pointgetvalue)	rL   r!   rM   expected_stdoutrN   Znew_irZ	extractedZ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 sJ0    Y  d S rg   )rb   rc   rd   r   Znested_contextr   )rL   rN   argsreturn_typerb   rc   rd   r"   r"   r#   r      s    
zBaseTestWithLifting.compile_ir)r"   N)r[   r\   r]   r`   rn   r   __classcell__r"   r"   re   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
rM   rl   )rn   r+   rS   r"   r"   r#   rT      s    zTestLiftByPass.test_lift1c                 C   s   | j tddd d S )NrV   zA 1
D 3
rs   )rn   r2   rS   r"   r"   r#   rW      s    zTestLiftByPass.test_lift2c                 C   s   | j tddd d S )Nr,   zA 1 100
D 2 101
rs   )rn   r5   rS   r"   r"   r#   rX      s    zTestLiftByPass.test_lift3c                 C   s   | j tddd d S )NrV   z	A 0
E 11
rs   )rn   r:   rS   r"   r"   r#   rY      s    zTestLiftByPass.test_lift4c                 C   s   | j tddd d S )Nr   zA
rs   )rn   r<   rS   r"   r"   r#   rZ      s    zTestLiftByPass.test_lift5N)r[   r\   r]   rT   rW   rX   rY   rZ   r"   r"   r"   r#   rr      s
   rr   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   sx   t |}t }|  W d   n1 s*0    Y  t }|  W d   n1 sV0    Y  | | |  dS )z2Ensure same semantic with non-jitted code
        N)r   r   rK   rk   )rL   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
rs   )rn   r>   rw   rS   r"   r"   r#   test_liftcall1  s    zTestLiftCall.test_liftcall1c                 C   s   | j tddd | t d S )NrV   zA 1
B 2
C 12
rs   )rn   r?   rw   rS   r"   r"   r#   test_liftcall2  s    zTestLiftCall.test_liftcall2c                 C   s   | j tddd | t d S )NrV   zA 1
B 2
C 47
rs   )rn   r@   rw   rS   r"   r"   r#   test_liftcall3  s    zTestLiftCall.test_liftcall3c                 C   sb   t jt jt jt jf}| |}tt  W d    n1 s>0    Y  d}| |t	|j
 d S )Nz2compiler re-entrant to the same function signature)r   TypingErrorZNumbaRuntimeErrorZNumbaValueErrorCompilerErrorassertRaisesr   rB   assertInstr	exception)rL   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
rs   )rn   rD   rw   rS   r"   r"   r#   test_liftcall5!  s    zTestLiftCall.test_liftcall5N)r[   r\   r]   rw   rx   ry   rz   r   unittestZskipIfr   r   r   r"   r"   r"   r#   rt      s   
rt   c                    s    fdd}|S )Nc                    sX   |  tj&} | g|R i | W d    n1 s80    Y  | dt|j d S )NzDoes not support list typer}   r   r{   r~   r   r   rL   ro   kwargsr   fnr"   r#   core+  s
    4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                    sX   |  tj&} | g|R i | W d    n1 s80    Y  | dt|j d S )NzDoes not support function typer   r   r   r"   r#   r   4  s
    4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NumbaWarningrS   r"   r"   r#   r`   >  s    zTestLiftObj.setUpc                 C   s   t   d S rA   r   resetwarningsrS   r"   r"   r#   tearDownA  s    zTestLiftObj.tearDownc                 G   s   t |}t |}t|}t  }|| }| }W d    n1 sH0    Y  |ttt| t  }|| }	| }
W d    n1 s0    Y  | 	||
 | 
||	 d S rA   )copydeepcopyr   r   rk   compiletuplemapr   rK   assertPreciseEqual)rL   pyfuncro   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 =ivalrV   r;   r   r"   r"   r#   barW  s    z0TestLiftObj.test_lift_objmode_basic.<locals>.barc                    s<   | d7 } t   |  W d    n1 s*0    Y  | d S Nr,   r   r   r   r"   r#   fooZ  s    &z0TestLiftObj.test_lift_objmode_basic.<locals>.fooc                    s>   | d7 } t j  |  W d    n1 s,0    Y  | d S r   numbar   r   r   r"   r#   foo_nonglobal`  s    &z:TestLiftObj.test_lift_objmode_basic.<locals>.foo_nonglobal{   r   )rL   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arrrV   r;   )r   r"   r"   r#   r   j  s    z3TestLiftObj.test_lift_objmode_array_in.<locals>.barc                    sF   t | t j}t  | W d    n1 s40    Y  |d S r   )nparangeastypeint64r   )nelemr   r   r"   r#   r   o  s    &z3TestLiftObj.test_lift_objmode_array_in.<locals>.foor.   r   )rL   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 rA   r;   r4   r"   r"   r#   r   z  s    z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.barc                    sD   t  * d|  }t|} | W d    n1 s60    Y  | S NrV   )r   r   r   )r1   r4   ar   r"   r#   r   }  s
    
&z<TestLiftObj.test_lift_objmode_define_new_unused.<locals>.foor   r   rL   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;   r0   r"   r"   r#   inverse  s    z<TestLiftObj.test_lift_objmode_return_simple.<locals>.inversec                    s:   t dd  | }W d    n1 s(0    Y  | |fS Nfloat64r   r   r3   r   r"   r#   r     s    &z8TestLiftObj.test_lift_objmode_return_simple.<locals>.fooc                    s<   t jdd  | }W d    n1 s*0    Y  | |fS r   r   r3   r   r"   r#   r     s    &zBTestLiftObj.test_lift_objmode_return_simple.<locals>.foo_nonglobalr   r   )rL   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;   r0   r"   r"   r#   r     s    z;TestLiftObj.test_lift_objmode_return_array.<locals>.inversec                    sJ   t ddd$  | }t|d }W d    n1 s60    Y  | ||fS )N
float64[:]r   )r4   zr   )r   intr1   r4   r   r   r"   r#   r     s    *z7TestLiftObj.test_lift_objmode_return_array.<locals>.foor,   r.   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 }g d}|  || d S )Nc                 S   sj   t ddH t|  d| d< t|  g d|  }tdd |D }W d    n1 sX0    Y  | |fS )Nr   r      r   r,   rV   r   c                 S   s   g | ]}d | qS )r,   r"   ).0r9   r"   r"   r#   
<listcomp>      zITestLiftObj.test_lift_objmode_using_list.<locals>.foo.<locals>.<listcomp>)r   r)   r   asarrayr3   r"   r"   r#   r     s    2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F t|  | d8 } t|  t | D ]}| |7 } t|  qFW d    n1 sp0    Y  | S )Nr,   intpr0   )r7   r   r)   r8   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   st   || d< t   t|  W d    n1 s,0    Y  t  $ d| | d< t|  W d    n1 sf0    Y  | S r   r   r)   r1   r   r"   r"   r#   r     s    &&z=TestLiftObj.test_case01_mutate_list_ahead_of_ctx.<locals>.foor      r   rL   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   st   || d< t   t|  W d    n1 s,0    Y  t  $ d| | d< t|  W d    n1 sf0    Y  | S r   r   r   r"   r"   r#   r     s    &&z>TestLiftObj.test_case02_mutate_array_ahead_of_ctx.<locals>.foor   r   r   arrayr   rL   r   r1   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   sd   t dd g d}W d    n1 s(0    Y  t   d|d< W d    n1 sV0    Y  |S NzList(int64)r   r   r.   rV   r   r3   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   sh   dd }t g d}t|}| tj}|| W d    n1 sH0    Y  | dt|j d S )Nc                 S   s6   t dd t|  W d    n1 s(0    Y  | S )Nr   kr   r0   r"   r"   r#   r     s    &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   rL   r   r1   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 sF0    Y  | dt|j d S )Nc                 S   s6   t dd | d }W d    n1 s(0    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   )rL   r   r1   r   r   ru   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 s60    Y  d}| t|j| d S )Nc              	   S   sX   t  > t   t|  W d    n1 s,0    Y  W d    n1 sJ0    Y  | S rA   r   r0   r"   r"   r#   r     s    Dz3TestLiftObj.test_case06_double_objmode.<locals>.foor   z@During: resolving callee type: type\(ObjModeLiftedWith\(<.*>\)\))r}   r   r{   r   assertRegexr   r   )rL   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 sH0    Y  t|j}| d| | d| d S )Nc                 S   s<   t   d| i}d}W d    n1 s(0    Y  | ||fS )Nr   r   r   )r1   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~   )rL   r   r1   r   r   Z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 sP0    Y  | t|jd d S )Nc              	      s`   t t| D ]N}t 4 t|}| | }| |< t d  W d    q1 sP0    Y  q| S )N2)r7   rJ   r   r   r)   )r1   r9   r   vdr"   r#   r   E  s    ,z8TestLiftObj.test_case08_raise_from_external.<locals>.foor   z'2')	dictr   r   r   r}   KeyErrorrK   r   r   r   r"   r   r#   test_case08_raise_from_external@  s    	&z+TestLiftObj.test_case08_raise_from_externalc                 C   sh   dd }t g d}t|}| tj}|| W d    n1 sH0    Y  | dt|j d S )Nc                 S   s0   t   t W d    n1 s"0    Y  | S rA   )r   
ValueErrorr0   r"   r"   r#   r   U  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_raiseT  s    &z&TestLiftObj.test_case09_explicit_raisec                 C   s&   dd }t g d}| || d S )Nc                 S   sd   t dd g d}W d    n1 s(0    Y  t   d|d< W d    n1 sV0    Y  |S r   r   r3   r"   r"   r#   r   g  s
    &&z;TestLiftObj.test_case10_mutate_across_contexts.<locals>.foor   r   r   r"   r"   r#   "test_case10_mutate_across_contextsd  s    z.TestLiftObj.test_case10_mutate_across_contextsc                 C   s&   dd }t g d}| || d S )Nc                 S   sn   t dd" tjg ddd}W d    n1 s20    Y  t   d|d< W d    n1 s`0    Y  |S )Nint64[:]r   r   r   r   r.   rV   )r   r   r   r3   r"   r"   r#   r   s  s
    0&zATestLiftObj.test_case10_mutate_array_across_contexts.<locals>.foor   r   r   r"   r"   r#   (test_case10_mutate_array_across_contextsq  s    z4TestLiftObj.test_case10_mutate_array_across_contextsc                 C   sf   dd }t g d}t|}| t}|| W d    n1 sF0    Y  | dt|j d S )Nc                 S   s2   t   dd }W d    n1 s$0    Y  | 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   r1   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   s   | d S r   r"   r   r"   r"   r#   r     s    z>TestLiftObj.test_case12_njit_inside_a_objmode_ctx.<locals>.barc                    sD   t dd" t | d}W d    n1 s20    Y  | | S )Nr   r   r   )r   r   r   r3   r   r"   r#   r     s    0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 dkrn| tj*}t|}|tg d W d    n1 sL0    Y  d}| |t|j	 n*|tg d}tj
tg d| d S )Nc                 S   s:   t dd | d7 } | W  d    S 1 s,0    Y  d S )Nr   r0   r,   r   r0   r"   r"   r#   r     s    zCTestLiftObj.test_case14_return_direct_from_objmode_ctx.<locals>.foor   r   zDunsupported control flow: due to return statements inside with block)rV   r   r   )r   r}   r   r|   r   r   r   r~   r   r   ZtestingZassert_array_equal)rL   r   r   r   r   resultr"   r"   r#   *test_case14_return_direct_from_objmode_ctx  s    0z6TestLiftObj.test_case14_return_direct_from_objmode_ctxc                 C   s&   dd }t g d}| || d S )Nc                    s   d  fdd}|| d S )Nr.   c                    s>   t dd  t|  |   W  d    S 1 s00    Y  d S )Nr   r0   r   r0   jr"   r#   r     s    zHTestLiftObj.test_case15_close_over_objmode_ctx.<locals>.foo.<locals>.barrV   r"   r   r"   r   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                    sN   t dd0 t|   | }t|d }W d    n1 s@0    Y  |S )Nr   r   )r   r   )r   r)   Z
csr_matrixr   r   )r1   Zspxr   spr"   r#   r     s
    
,z>TestLiftObj.test_case16_scipy_call_in_objmode_ctx.<locals>.foor   )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                    s4   dd l   fddtg d}| | d S )Nr   c                    s4   t     W d    n1 s&0    Y  d S rA   )r   disr0   r  r   r"   r#   r     s    z7TestLiftObj.test_case17_print_own_bytecode.<locals>.foor   )r  r   r   r   )rL   r1   r"   r  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   s6   t   | |d  W d    n1 s(0    Y  d S rI   r   )r!   r1   r"   r"   r#   r     s    zCTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.foor   c                 S   s   | d S )NrC   r"   r   r"   r"   r#   <lambda>  r   zHTestLiftObj.test_case18_njitfunc_passed_to_objmode_ctx.<locals>.<lambda>)r   r   r   r   )rL   r   r1   r   r"   r"   r#   *test_case18_njitfunc_passed_to_objmode_ctx  s    z6TestLiftObj.test_case18_njitfunc_passed_to_objmode_ctxc                    sr    fdd |  tjtjf*}t }|tg d W d    n1 sN0    Y  d}| |t|j	 d S )Nc                    sN   t  ( | dkr W d    dS W d    n1 s40    Y   | d }|S )Nr      r,   r   )r1   retr   r"   r#   r     s
    .z.TestLiftObj.test_case19_recursion.<locals>.foor   zUntyped global name 'foo')
r}   r   r{   r|   r   r   r   r~   r   r   )rL   r   r   r   r"   r  r#   test_case19_recursion  s    0z!TestLiftObj.test_case19_recursionc                 C   s&   dd }t g d}| || d S )Nc                 S   sV   t jd t j }tdd t j }W d    n1 s@0    Y  | | | S Nr   r   r   r   randomseedZ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  s    z$TestLiftObj.test_case20_rng_works_okc                 C   s&   dd }t g d}| || d S )Nc                 S   sb   t jd t j }tdd& t jd t j }W d    n1 sL0    Y  | | | S r  r  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 rA   )r   r   listreversedtolistr0   r"   r"   r#   r     s    z'TestLiftObj.test_example01.<locals>.barc                     sD   t d} tdd |  |  }W d    n1 s60    Y  |S )NrC   zintp[:]r   )r   r   r   r3   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 rA   r"   )sr"   r"   r#   r     s    z1TestLiftObj.test_objmode_in_overload.<locals>.fooc                 S   s   dd }|S )Nc                 S   s6   t dd | d }W d    n1 s(0    Y  |S )Nr   rm   r   r   )r  rm   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   rK   )rL   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   s2   t td d} W d    n1 s$0    Y  | S Nval皙(@)r   gv_typer!  r"   r"   r#   
global_var,  s    "z8TestLiftObj.test_objmode_gv_variable.<locals>.global_var   )r   assertIsInstancer   rK   )rL   r%  r  r"   r"   r#   test_objmode_gv_variable+  s
    
z$TestLiftObj.test_objmode_gv_variablec                 C   sD   t dd }| tjd |  W d    n1 s60    Y  d S )Nc                  S   s2   t td d} W d    n1 s$0    Y  | 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|   )rL   r%  r"   r"   r#   test_objmode_gv_variable_error7  s    
z*TestLiftObj.test_objmode_gv_variable_errorc              	   C   sx   t dd }t dd }||fD ]R}| jt|d. | }| |t | |d W d    q 1 sh0    Y  q d S )Nc                  S   s4   t tjd d} W d    n1 s&0    Y  | S r   )r   r   r   r!  r"   r"   r#   modattr1F  s    "z6TestLiftObj.test_objmode_gv_mod_attr.<locals>.modattr1c                  S   s6   t tjjd d} W d    n1 s(0    Y  | 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   rK   )rL   r,  r-  r   r  r"   r"   r#   test_objmode_gv_mod_attrE  s    

z$TestLiftObj.test_objmode_gv_mod_attrc                 C   sD   t dd }| tjd |  W d    n1 s60    Y  d S )Nc                  S   s4   t tjd d} W d    n1 s&0    Y  | 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)  rL   r0  r"   r"   r#   test_objmode_gv_mod_attr_errorY  s    
z*TestLiftObj.test_objmode_gv_mod_attr_errorc                 C   sD   t dd }| tjd |  W d    n1 s60    Y  d S )Nc                  S   sD   t tjtjtjd d} d}d}W d    n1 s60    Y  tS )NZv1Zv2Zv3r#  )r   r   r   r/  float32r"  r3  r"   r"   r#   r0  g  s    
"zETestLiftObj.test_objmode_gv_mod_attr_error_multiple.<locals>.moderrorzPError handling objmode argument 'v2'. Getattr cannot be resolved at compile-timer)  r1  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 rA   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 d    n1 s20    Y  | S Nr  r.   r   r   r   r   r   r  	shrubberyr"   r#   r  }  s    0zUTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overload.<locals>.implr   r   r  r"   r8  r#   r  z  s    zGTestLiftObj.test_objmode_closure_type_in_overload.<locals>.foo_overloadc                      s     S rA   r"   r"   r  r"   r#   r     s    z>TestLiftObj.test_objmode_closure_type_in_overload.<locals>.barr.   )r   r   r   r   r   r   r   rL   r  r   r"   r  r#   %test_objmode_closure_type_in_overloadv  s    
z1TestLiftObj.test_objmode_closure_type_in_overloadc                    s`   dd  t  dd }t fdd}| tjd |  W d    n1 sR0    Y  d S )Nc                   S   s   d S rA   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 d    n1 s20    Y  | S r6  r7  r  r8  r"   r#   r    s    0z[TestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overload.<locals>.implr:  r;  r"   r8  r#   r    s    zMTestLiftObj.test_objmode_closure_type_in_overload_error.<locals>.foo_overloadc                      s     S rA   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   sD   t dd }| tjd |  W d    n1 s60    Y  d S )Nc                  S   s2   t dd d} W d    n1 s$0    Y  tS )NrV   )badr,   )r   r"  r  r"   r"   r#   r0    s    "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.r)  r1  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>0    Y  | ||fS )Nr   t1t2t3    :(ArC   )r   r$  r   r   r   int32rA  Zarray_tyr"   r#   r     s
    0z5TestLiftObj.test_objmode_multi_type_args.<locals>.foorE  i  rC   )r   rF  r   r   r   r   r   )rL   r   rB  rC  rD  r"   rG  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   )rI  r   zerosr4  r   )rL   rI  r"   r"   r#   __init__  s    z7TestLiftObj.test_objmode_jitclass.<locals>.Bag.__init__c                 S   s   | j jS rA   )r   sizerS   r"   r"   r#   rL    s    z3TestLiftObj.test_objmode_jitclass.<locals>.Bag.sizec                 S   s(   t | jD ]}| j|  |7  < q
| jS rA   )r7   rL  r   )rL   r"  r9   r"   r"   r#   	increment  s    z8TestLiftObj.test_objmode_jitclass.<locals>.Bag.incrementc                 S   s   | | S rA   r"   r3   r"   r"   r#   add  s    z2TestLiftObj.test_objmode_jitclass.<locals>.Bag.addN)	r[   r\   r]   rK  propertyrL  rM  staticmethodrN  r"   r"   r"   r#   Bag  s   
rQ     c                   S   s   d S rA   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 d    n1 s20    Y  | S )Nr  r   r   )r   rM  r  )rQ  r9  r"   r#   r    s    (zETestLiftObj.test_objmode_jitclass.<locals>.foo_overload.<locals>.impl)Z_numba_type_r;  )rQ  mybagr8  r#   r    s    z7TestLiftObj.test_objmode_jitclass.<locals>.foo_overloadc                      s     S rA   r"   r"   r  r"   r#   r     s    z.TestLiftObj.test_objmode_jitclass.<locals>.barrV   r   rC   r   r   )r   rF  r4  r   objectr   r   r'  rK   rN  r   rJ  r   r   )rL   specnr  r   r   Z	exp_arrayr"   )rQ  r   rS  r#   test_objmode_jitclass  s"    	z!TestLiftObj.test_objmode_jitclassc                 C   s6   t dd | d }W d    n1 s(0    Y  |S Nr   outputr.   r  r1   rZ  r"   r"   r#   case_objmode_cache  s    &zTestLiftObj.case_objmode_cachec                    sd   t g d t fdd}| tj}|  W d    n1 sD0    Y  | t|jd d S )Nr,   rV   r   r   rC   c                     s6   t  d g d} W d    n1 s(0    Y  | S )Nr  r]  r  r  Zret_typer"   r#   test2  s    &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   rL   r_  r   r"   r^  r#   test_objmode_reflected_list  s    $z'TestLiftObj.test_objmode_reflected_listc                    sd   t h d t fdd}| tj}|  W d    n1 sD0    Y  | t|jd d S )N   r,   rV   r   r   rC   c                     s6   t  d h d} W d    n1 s(0    Y  | S )Nr   rc  r  rd  r^  r"   r#   r_    s    &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`  ra  r"   r^  r#   test_objmode_reflected_set  s    $z&TestLiftObj.test_objmode_reflected_setc                    sf   t t jt j t fdd}| t}|  W d    n1 sF0    Y  | dt|j	 d S )Nc                     s8   t  d ddd} W d    n1 s*0    Y  | S )Nresr,   rV   )r%   r&   r  rf  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   rL   rh  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 sB0    Y  | t|jd d S )Nc                     s6   t  d ddg} W d    n1 s(0    Y  | S )Nrf  r,   rV   r  rf  r^  r"   r#   rh  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   ri  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 d    n1 s,0    Y  |S )Nz
int64[::1]r   r   )r   r   viewr3   r"   r"   r#   r   F  s    (z1TestLiftObj.test_objmode_use_of_view.<locals>.foor,   r   )r   r   Zonesr   rl  r  r   )rL   r   r   expectedru   r"   r"   r#   test_objmode_use_of_viewC  s    

z$TestLiftObj.test_objmode_use_of_viewN);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   r   r   r   r   ZexpectedFailurer   r   r  r  r   r	  r   r  r  r  r  r  r(  r+  r.  r2  r5  r=  r>  r@  rH  rW  rP  r\  rb  re  rj  rk  rn  r"   r"   r"   r#   r   <  sv   


	


	
	

4
r   c                 C   s   | d S Nr.   r"   r0   r"   r"   r#   case_inner_pyfuncR  s    rp  c                 C   s6   t dd t| }W d    n1 s(0    Y  |S Nr   rY  )r   rp  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   rS   r"   r"   r#   r`   _  s    zTestLiftObjCaching.setUpc                 C   s   t   d S rA   r   rS   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   rK   assertFalseZ_cache_hits
assertTrue)rL   r  firstsecondr"   r"   r#   checke  s    zTestLiftObjCaching.checkc                 C   s   dd }|  | d S )Nc                 S   s6   t dd | d }W d    n1 s(0    Y  |S rX  r  r[  r"   r"   r#   r   o  s    &z=TestLiftObjCaching.test_objmode_caching_basic.<locals>.pyfuncrx  rL   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 ro  r"   r0   r"   r"   r#   other_pyfuncw  s    zNTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.other_pyfuncc                    s6   t dd  | }W d    n1 s(0    Y  |S rq  r  r[  r|  r"   r#   r   z  s    &zHTestLiftObjCaching.test_objmode_caching_call_closure_bad.<locals>.pyfuncry  rz  r"   r}  r#   %test_objmode_caching_call_closure_badv  s    z8TestLiftObjCaching.test_objmode_caching_call_closure_badc                 C   s   |  t d S rA   )rx  r\  rS   r"   r"   r#   &test_objmode_caching_call_closure_good  s    z9TestLiftObjCaching.test_objmode_caching_call_closure_goodN)	r[   r\   r]   r`   r   rx  r{  r~  r  r"   r"   r"   r#   rr  \  s   	rr  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestBogusContextc                 C   sb   t t}| tj(}t|| j| j| ji d W d    n1 sB0    Y  | 	dt
|j d S )Nrh   z*Undefined variable used as context manager)r$   rE   r}   r   r|   r   rb   rc   rd   r~   r   r   rL   rN   r   r"   r"   r#   test_undefined_global  s    $z&TestBogusContext.test_undefined_globalc                 C   sb   t t}| tj(}t|| j| j| ji d W d    n1 sB0    Y  | 	dt
|j d S )Nrh   z"Unsupported context manager in use)r$   rG   r}   r   r|   r   rb   rc   rd   r~   r   r   r  r"   r"   r#   test_invalid  s    $zTestBogusContext.test_invalidc                 C   s\   t dd }| tj}|  W d    n1 s40    Y  t|j}d}| || d S )Nc                  S   s,   t d} W d    n1 s0    Y  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~   )rL   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   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    n1 s0    Y  d S rA   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   rt  )rL   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+   r2   r5   r:   r<   r>   r?   r@   rB   rD   rE   rT  rF   rG   r   r$  rH   r^   rr   rt   r   r   r   rp  r\  rr  r  r  r[   mainr"   r"   r"   r#   <module>   sr   (	
1		      )( 
