o
    i                     @   s  d Z ddlZddlZddlmZ ddlZddlmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZm Z  dd	l!m"Z" dd
l#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ dZ,edddd Z-dd Z.ee.dddd Z/G dd de&Z0dZ1dd Z2G dd de(e0Z3G dd de(e0Z4G dd de(e0Z5G d d! d!e0Z6G d"d# d#e(e0Z7G d$d% d%e&Z8G d&d' d'e&Z9e:d(kre';  dS dS ))zn
This tests the inline kwarg to @jit and @overload etc, it has nothing to do with
LLVM or low level inlining.
    N)product)njittypeof	literallyprange)typesirir_utilscgutilserrorsutils)overloadoverload_methodoverload_attributeregister_modelmodelsmake_attribute_wrapper	intrinsicregister_jitable)InlineOptions)DefaultPassBuilderCompilerBase)InlineOverloads	signature)TestCaseunittestMemoryLeakMixinIRPreservingTestPipelineskip_parfors_unsupportedignore_internal_warningsialwaysinlinec                 C      | d S N    xr'   r'   Z/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_ir_inlining.py_global_func&      r+   c                 C   r$   r%   r'   r(   r'   r'   r*   _global_defn,      r-   c                 C   s   t S Nr-   r(   r'   r'   r*   _global_overload0      r1   c                   @   s*   e Zd ZdZdddZdd Zdd ZdS )	InliningBaseFTr!   neverc                 C   sN   |j  D ]}|jD ]}t|tjr#t|jtjr#|jjdkr#  dS q
qdS )N   TF)blocksvaluesbody
isinstancer   AssignvalueFreeVar)selffunc_irblkstmtr'   r'   r*   sentinel_17_cost_model>   s   
z#InliningBase.sentinel_17_cost_modelc                 O   sx  | dd }|s
J | dd}|rJ | D ]\}}t|ts#J t|ts*J qttd|}| || ||  |j|j	d  j
d }	t|	j|	_| jr]tddd	 |	  |d
krj| t|	j| tt|	j }
dd |
 D }|sJ | D ]5\}}d}|D ]%}t|dddkr|	|j}||j|kO }qt|r||jj|kO }q| ||k q|	S )Ninline_expectblock_countr&   pipeline_classr   preserved_irFIRP   -SKIPc                 S      g | ]}|qS r'   r'   .0r)   r'   r'   r*   
<listcomp>e       z&InliningBase.check.<locals>.<listcomp>Fopcall)popitemsr:   strboolr   r   assertEqual	overloads
signaturesmetadatar	   simplify_CFGr7   _DEBUGprintcenterdumplennextiterr8   
find_exprsgetattrget_definitionfuncnameis_operator_or_getitemfn__name__assertFalse)r>   	test_implargskwargsrC   rD   kvj_funcfirblockexprsfoundexpr	func_defnr'   r'   r*   checkK   s<   
zInliningBase.checkN)rj   
__module____qualname__r\   inline_opt_as_boolrB   rx   r'   r'   r'   r*   r3   5   s
    
r3     c                     s   d d fdd	} | S )Ni                   ?c                    s6  | | }|  7 } t j|t jd}|| }d| }d}	d}
t |dkr|| }t d|d }t || ||  }t |d dk r]t| D ]}|	d7 }	t |	dk rV nqG|	|d 7 }	|| }g }tt|D ]#}|||  |dkrd}d}
|d	| kr|
|7 }
|
|d t	 7 }
qi|| | |
 | |  |	 S )
Ndtyper~   r   r&            {   z   )
npzeros	complex64absarangesqrtranger`   append_GLOBAL)abcdefghintro   lmopqrs_FREEVARr'   r*   foo{   s:   z_gen_involved.<locals>.foo)r}   r~   Nr'   r   r'   r   r*   _gen_involvedx   s    r   c                   @   s   e Zd Zdd Zdd Zdd Zeddd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%TestFunctionInliningc                    4   t dddd   fdd}| j|ddid	 d S )
Nr5   r"   c                   S      d S r/   r'   r'   r'   r'   r*   r      r2   z9TestFunctionInlining.test_basic_inline_never.<locals>.fooc                           S r/   r'   r'   r   r'   r*   impl      z:TestFunctionInlining.test_basic_inline_never.<locals>.implr   FrC   r   rx   r>   r   r'   r   r*   test_basic_inline_never      
z,TestFunctionInlining.test_basic_inline_neverc                    r   )
Nr!   r"   c                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_always.<locals>.fooc                      r   r/   r'   r'   r   r'   r*   r      r   z;TestFunctionInlining.test_basic_inline_always.<locals>.implr   Tr   r   r   r'   r   r*   test_basic_inline_always   r   z-TestFunctionInlining.test_basic_inline_alwaysc                    s    fdd}d}t |||D ]6\}}}t|ddd t|ddd  t|dd	d
 | j| | j| | j| d}| j||d qd S )Nc                         }   } }| ||fS r/   r'   r)   yzbarbazr   r'   r*   r         
z;TestFunctionInlining.test_basic_inline_combos.<locals>.implr4   r"   c                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.barc                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.bazr   r   r   r   )r   r   r{   rx   )r>   r   opts
inline_foo
inline_bar
inline_bazrC   r'   r   r*   test_basic_inline_combos   s   


z-TestFunctionInlining.test_basic_inline_combosz$Need to work out how to prevent thisc                    s>   t ddfddd  fdd}| j|dd	id
 d S )Nr!   r"   c                    s   | dkrdS  | d  d S )Nr   r}   r&   r'   r(   r   r'   r*   r      s   z7TestFunctionInlining.test_recursive_inline.<locals>.foor   c                     s4   d}  dkr
| d7 } d |  k r| d8 } d S d S )Nr   r&   r   r'   r   r   r   r'   r*   r      s   z8TestFunctionInlining.test_recursive_inline.<locals>.implr   Tr   r   r   r'   r   r*   test_recursive_inline   s
   z*TestFunctionInlining.test_recursive_inlinec                    s   dd } fdd}d}t |||D ]-\}}}||dd||dd	 ||d
d| j| | j| | j| d}| j||d qd S )Nc                    s&    d t | d fdd}|S )Nr}   r"   c                          d fS Nr   r'   r'   r   r'   r*   rf      s   zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r#   r)   r   rf   r'   r   r*   factory   s   z;TestFunctionInlining.test_freevar_bindings.<locals>.factoryc                     r   r/   r'   r   r   r'   r*   r      r   z8TestFunctionInlining.test_freevar_bindings.<locals>.implr4   
         (   2   <   r   r   r   r{   rx   )r>   r   r   r   r   r   r   rC   r'   r   r*   test_freevar_bindings   s   z*TestFunctionInlining.test_freevar_bindingsc                 C      dd }| j |ddid d S )Nc                  S      d} t | S N   )r+   r(   r'   r'   r*   r        z6TestFunctionInlining.test_global_binding.<locals>.implr+   Tr   rx   r   r'   r'   r*   test_global_binding     z(TestFunctionInlining.test_global_bindingc                    .   ddl m   fdd}| j|ddid d S )Nr&   r   c                        t d }   | fS Nr   _GLOBAL1r   r   r'   r*   r        
zBTestFunctionInlining.test_inline_from_another_module.<locals>.implr   Tr   )inlining_usecasesr   rx   r   r'   r   r*   test_inline_from_another_module
     z4TestFunctionInlining.test_inline_from_another_modulec                    4   dd l m  m   fdd}| j|ddid d S )Nr   c                        t d }   | fS r   )r   r   r   iucr'   r*   r        zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   numba.tests.inlining_usecasestestsr   rx   r   r'   r   r*   )test_inline_from_another_module_w_getattr     z>TestFunctionInlining.test_inline_from_another_module_w_getattrc                    6   dd l }dd lm   fdd}| j|ddid d S )Nr   c                        t d }  j | fS r   )r   r   r   r   ntr'   r*   r   #     zNTestFunctionInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r   numba.testsr   rx   r>   numbar   r'   r   r*   +test_inline_from_another_module_w_2_getattr     z@TestFunctionInlining.test_inline_from_another_module_w_2_getattrc                    0   dd }|   fdd}| j |ddid d S )Nc                     &   ddl m  tdd fdd} | S )Nr&   r   r!   r"   c                      r   r/   r'   r'   r   r'   r*   tmp.     z]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r'   r   r*   r   +     zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   r   r'   r*   r   5  r   zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r>   r   r   r'   r   r*   *test_inline_from_another_module_as_freevar)     z?TestFunctionInlining.test_inline_from_another_module_as_freevarc                    8   ddl m   fdd}|dd}| j|ddid	 d S )
Nr&   baz_factoryc                         fdd}|S )Nc                        t    }  |  fS r/   r   r   r   r   r   r'   r*   r   B     zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr'   r   r   r   r  r  r*   gen?     zKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r  rx   r>   r  r   r'   r  r*   )test_inline_w_freevar_from_another_module;     
z>TestFunctionInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ]"\t |dfddfd	d
}j|dddkid qdD ]"\t |dfdd  fdd
}j|dddkid q3d S )Nc                    s&     | tj  | jd  |S NrR   assertIsInstancer   ExprrW   rQ   rB   rv   caller_infocallee_infor>   r'   r*   s17_caller_modelL     
zCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelc                    s&     | tj  | jd  |S r  r  r  r  r'   r*   s17_callee_modelQ  r  zCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_model)   r6   r6   r  r"   c                          S r/   r'   r'   calleer'   r*   r   Y  r2   z6TestFunctionInlining.test_inlining_models.<locals>.fooc                       |   } }|d |fS r   r'   r   r)   r   callerr   r'   r*   r   ]     z7TestFunctionInlining.test_inlining_models.<locals>.implr   r   r6   r   c                      r  r/   r'   r'   r  r'   r*   r   g  r2   z6TestFunctionInlining.test_inlining_models.<locals>.barc                       |  }  }|d |fS r   r'   r  r   r!  r'   r*   r   k  r"  r   r   )r>   r  r  r   r'   r   r  r!  r   r>   r*   test_inlining_modelsJ  s   z)TestFunctionInlining.test_inlining_modelsc                    6   t dddd   fdd}| j|ddid	d
 d S )Nr!   r"   c                   S      dS Nr}   r'   r'   r'   r'   r*   r   s  r2   z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dD ]}|   7 } q| S )N        r   r   )accr   r   r'   r*   r   w  s   z:TestFunctionInlining.test_inline_inside_loop.<locals>.implr   T   rC   rD   r   r   r'   r   r*   test_inline_inside_loopr  s   
z,TestFunctionInlining.test_inline_inside_loopc                    r'  )Nr!   r"   c                   S   r(  r)  r'   r'   r'   r'   r*   r     r2   zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.fooc                     s,   d} t dD ]} fdd}| | 7 } q| S )Nr*  r   c                      s
     d S N   r'   r'   r   r'   r*   r        
zVTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl.<locals>.barr+  )r,  r   r   r   r'   r*   r     s
   zITestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.implr   Tr-  r.  r   r   r'   r   r*   &test_inline_inside_closure_inside_loop  s   
z;TestFunctionInlining.test_inline_inside_closure_inside_loopc                    r'  )Nr!   r"   c                    s    fdd}| d S )Nc                      s   d  S r)  r'   r'   r   r'   r*   r     r.   zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.baz   r'   )r   r   r'   r4  r*   r     s   
zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.fooc                        d  fdd} |  d S )N	   c                        d |  S r0  r'   r(   r   r   r'   r*   r        zcTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl.<locals>.barr   r'   r   r   r   r*   r        zVTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.implr   Tr&   r.  r   r   r'   r   r*   3test_inline_closure_inside_inlinable_inside_closure  s   
zHTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closurec                    s   t ddt t ddfdd t dd fddfdd}tjd	v r-d
}ntjdv r5d}nttj| j|dddd|d d S )Nr!   r"   c              
      sF   d  fdd}t | D ]} |d  d dd|  7  q S )Nr   c                    s   |   S r/   r'   )r   r,  r'   r*   biz  r.   zCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.bizr5         @r&   y              (@r+  )jr>  r)   )fortranr=  r*   boz  s
   &z6TestFunctionInlining.test_inline_involved.<locals>.bozc                    sX   d}t dD ]}ddddd fdd}|||d |  7 }q||d S )Nr   r}   r&   c                    s   d  |   S r)  r'   r(   r   r   r'   r*   r     r:  zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazr5  r   r+  )r   r,  r   r   )rB  rA  rC  r*   r     s   z6TestFunctionInlining.test_inline_involved.<locals>.fooc                     r6  )Nr7  c                    r8  r0  r'   r(   r9  r'   r*   r     r:  zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.barr   r'   r   r   r   r*   r     r;  z7TestFunctionInlining.test_inline_involved.<locals>.impl))r   r}   )r      )r      '   ))r   r   )r   r  #   T)r   rB  rA  r.  )r   r   r   	PYVERSIONNotImplementedErrorrx   )r>   r   bcr'   )rB  r   rA  r*   test_inline_involved  s    	





z)TestFunctionInlining.test_inline_involvedc           
         s   t dddd  t td fdd}| |dd	d
 |j|jd  jd }g }|j D ] }|jD ]}t	|t
jrNt	|jt
jrN|jjdkrN|| q4q/| t|d |D ]}|jj}|  | j}| d}	| ||	 qZd S )Nr!   r"   c                 S   s   d}d}|| |  S )Nr   r   r'   r  r'   r'   r*   r     s   z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.barrE   c                    s    |  |fS r/   r'   r   r   r   r'   r*   r        z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foor   r   )   rG  r   rG   r   r   z__locals__bar_v[0-9]+.x)r   r   rW   rX   rY   rZ   r7   r8   r9   r:   r   r;   r<   Constr   r`   targetrg   idlstripry   assertRegex)
r>   r   r?   storer@   rA   r   rg   basenameregexr'   r   r*   test_inline_renaming_scheme  s,   



z0TestFunctionInlining.test_inline_renaming_schemeN)rj   ry   rz   r   r   r   r   skipr   r   r   r   r   r   r   r  r&  r/  r3  r<  rK  rW  r'   r'   r'   r*   r      s&    		


(+r   c                   @      e Zd Zdd ZdS )TestRegisterJitableInliningc                    r   )
Nr!   r"   c                   S   r(  r%   r'   r'   r'   r'   r*   r     r2   zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.fooc                      
      d S r/   r'   r'   r   r'   r*   r     r2  zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.implr   Tr   )r   rx   r   r'   r   r*   test_register_jitable_inlines  s   
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)rj   ry   rz   r\  r'   r'   r'   r*   rZ        rZ  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
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).TestOverloadInliningc                    >   dd  t  dddd } fdd}| j|d	d
id d S )Nc                   S   r   r/   r'   r'   r'   r'   r*   r         z9TestOverloadInlining.test_basic_inline_never.<locals>.foor5   r"   c                  S      dd } | S )Nc                   S   r   r/   r'   r'   r'   r'   r*   foo_impl  r`  zTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_implr'   )rb  r'   r'   r*   foo_overload     zBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overloadc                      r   r/   r'   r'   r   r'   r*   r   	  r   z:TestOverloadInlining.test_basic_inline_never.<locals>.implr   Fr   r   rx   r>   rc  r   r'   r   r*   r     s
   

z,TestOverloadInlining.test_basic_inline_neverc                    r_  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  z:TestOverloadInlining.test_basic_inline_always.<locals>.foor!   r"   c                  S   ra  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.implr'   r   r'   r'   r*   rc    rd  zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overloadc                      r   r/   r'   r'   r   r'   r*   r     r   z;TestOverloadInlining.test_basic_inline_always.<locals>.implr   Tr   re  rf  r'   r   r*   r     s
   

z-TestOverloadInlining.test_basic_inline_alwaysc                    r_  )Nc                 S      | | S r/   r'   rL  r'   r'   r*   r      r.   zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foor!   r"   c                 S      dd S )Nc                 S   rh  r/   r'   rL  r'   r'   r*   <lambda>%  s    z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>r'   rL  r'   r'   r*   overload_foo#  r,   zKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_fooc                          dddS )Nr   r-  r   r'   r'   r   r'   r*   r   '     zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.implr   Tr   re  r>   rk  r   r'   r   r*    test_inline_always_kw_no_default  s
   

z5TestOverloadInlining.test_inline_always_kw_no_defaultc                    s   dd }dd }dd |   \} t|d t|d ttjd	d
 fdd}ttjdd
 fdd}| j|| ddid | j|| ddid d S )Nc                 S   s   |  S r/   r'   r(   r'   r'   r*   impl_inline.  r   zETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inlinec                 S   s   | 
 S r/   r'   r(   r'   r'   r*   impl_noinline1  r   zGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinlinec                 S   r(  NTr'   r(   r'   r'   r*   rj  4      zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>__neg____pos__r!   r"   c                       t |  rS d S r/   r:   r(   	DummyTypedummy_unary_implr'   r*   overload_dummy_neg9     
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_negr5   c                    rv  r/   rw  r(   rx  r'   r*   overload_dummy_pos>  r|  zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_posnegTr   posF)make_dummy_typesetattrr   operatorr~  r  rx   )r>   rp  rq  Dummyr{  r}  r'   rx  r*   test_inline_operators_unary,  s   z0TestOverloadInlining.test_inline_operators_unaryc                    s   dd }dd }|   \} dd t|d t|d ttjd	d
 fdd}ttjdd
 fdd}| j|| ddid | j|| ddid d S )Nc                 S   s   | dkS r%   r'   r(   r'   r'   r*   rp  H  r.   zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlinec                 S   s   | dkS r%   r'   r(   r'   r'   r*   rq  K  r.   zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlinec                 S   r(  rr  r'   rL  r'   r'   r*   rj  P  rs  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>__eq____ne__r!   r"   c                    rv  r/   rw  rL  ry  dummy_binop_implr'   r*   overload_dummy_eqT  r|  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqr5   c                    rv  r/   rw  rL  r  r'   r*   overload_dummy_neY  r|  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neeqTr   neF)r  r  r   r  r  r  rx   )r>   rp  rq  r  r  r  r'   r  r*   test_inline_operators_binopF  s   z0TestOverloadInlining.test_inline_operators_binopc                    s   dd }dd }|   \} dd t|d t|d ttjd	d
 fdd}ttjdd
 fdd}ttjd	d
 fdd}ttjdd
 fdd}| j|| ddid | j|| ddid d S )Nc                 S   s   | d7 } d S r%   r'   r(   r'   r'   r*   rp  c  rm  zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinec                 S   s   | d8 } d S r%   r'   r(   r'   r'   r*   rq  f  rm  zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlinec                 S   r(  rr  r'   rL  r'   r'   r*   rj  k  rs  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>__iadd____isub__r!   r"   c                    rv  r/   rw  rL  ry  dummy_inplace_binop_implr'   r*   overload_dummy_iaddo  r|  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddr5   c                    rv  r/   rw  rL  r  r'   r*   overload_dummy_isubt  r|  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubc                    rv  r/   rw  rL  r  r'   r*   overload_dummy_add{  r|  zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_addc                    rv  r/   rw  rL  r  r'   r*   overload_dummy_sub  r|  zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_subiaddTr   isubF)	r  r  r   r  r  r  addsubrx   )r>   rp  rq  r  r  r  r  r  r'   r  r*   #test_inline_operators_inplace_binopa  s    z8TestOverloadInlining.test_inline_operators_inplace_binopc                    ~   dd }dd }|   \} dd t|d ttjdd	 fd
d}| j|| dddid | j|| ddid d S )Nc                 S      | | S r/   r'   r)   idxr'   r'   r*   r     r.   zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.implc                 S      | d S r%   r'   r(   r'   r'   r*   impl_static_getitem  r.   zVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitemc                 S   r   r/   r'   objr  r'   r'   r*   rj    rs  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>__getitem__r!   r"   c                    rv  r/   rw  r  ry  dummy_getitem_implr'   r*   overload_dummy_getitem  r|  zYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitemr&   getitemTr   r  r  r   r  r  rx   r>   r   r  r  r  r'   r  r*   $test_inline_always_operators_getitem     

z9TestOverloadInlining.test_inline_always_operators_getitemc                    r  )Nc                 S   r  r/   r'   r  r'   r'   r*   r     r.   zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   r  r%   r'   r(   r'   r'   r*   r    r.   zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   r   r/   r'   r  r'   r'   r*   rj    rs  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>r  r5   r"   c                    rv  r/   rw  r  r  r'   r*   r    r|  zXTestOverloadInlining.test_inline_never_operators_getitem.<locals>.overload_dummy_getitemr&   r  Fr   r  r  r'   r  r*   #test_inline_never_operators_getitem  r  z8TestOverloadInlining.test_inline_never_operators_getitemc                    sz   dd  t  dddd } fdd}| t}| j|d	d
id W d    n1 s-w   Y  | dt|j d S )Nc                 W      | |d  S Nr   r'   rL  r'   r'   r*   r     rm  z;TestOverloadInlining.test_inline_stararg_error.<locals>.foor!   r"   c                 W   ri  )Nc                 W   r  r  r'   rL  r'   r'   r*   rj    s    zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>r'   rL  r'   r'   r*   rk    r,   zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_fooc                      s    dddS )Nr   r   r'   r'   r   r'   r*   r     rm  z<TestOverloadInlining.test_inline_stararg_error.<locals>.implr   Tr   z-Stararg not supported in inliner for arg 1 *b)r   assertRaisesrI  rx   assertInrU   	exception)r>   rk  r   r   r'   r   r*   test_inline_stararg_error  s   

z.TestOverloadInlining.test_inline_stararg_errorc           
         s    fdd}d}t |||D ]E\}}}dd dd  dd	 t|d
dd }t |d
dd }t|d
dd }| j| | j| | j| d}	| j||	d qd S )Nc                     r   r/   r'   r   r   r'   r*   r     r   z;TestOverloadInlining.test_basic_inline_combos.<locals>.implr4   c                   S   r   r/   r'   r'   r'   r'   r*   r     r`  z:TestOverloadInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  z:TestOverloadInlining.test_basic_inline_combos.<locals>.barc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  z:TestOverloadInlining.test_basic_inline_combos.<locals>.bazr"   c                  S   ra  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.implr'   rg  r'   r'   r*   rc    rd  zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overloadc                  S   ra  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.implr'   rg  r'   r'   r*   bar_overload  rd  zCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overloadc                  S   ra  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     r`  zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.implr'   rg  r'   r'   r*   baz_overload  rd  zCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overloadr   r   )r   r   r{   rx   )
r>   r   r   r   r   r   rc  r  r  rC   r'   r   r*   r     s$   





z-TestOverloadInlining.test_basic_inline_combosc                    s    fdd}d}t |||D ]D\}}}dd dd  dd	 dd
d}|dd|d | dd|d |dd|d | j| | j| | j| d}| j||d qd S )Nc                     r   r/   r'   r   r   r'   r*   r     r   z8TestOverloadInlining.test_freevar_bindings.<locals>.implr4   c                  S      d} d}| d }| |d |fS )Nr   r   r}   r   r'   r   r'   r'   r*   r        z7TestOverloadInlining.test_freevar_bindings.<locals>.fooc                  S   r  )Nr   r   r}   r   r'   r   r'   r'   r*   r   	  r  z7TestOverloadInlining.test_freevar_bindings.<locals>.barc                  S   r  )Nr   rI   r}   r   r'   r   r'   r'   r*   r     r  z7TestOverloadInlining.test_freevar_bindings.<locals>.bazc                    s(    d t | |d fdd}d S )Nr}   r"   c                     s    fdd} | S )Nc                      r   r   r'   r'   r   r'   r*   r     s   zWTestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func.<locals>.implr'   rg  r   r'   r*   rf     s   zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )rP  r)   r   r#   rf   r'   r   r*   r     s   
z;TestOverloadInlining.test_freevar_bindings.<locals>.factoryr   r   r"   r   r   r   rI   r   r   r/   r   )r>   r   r   r   r   r   r   rC   r'   r   r*   r     s    
	z*TestOverloadInlining.test_freevar_bindingsc                 C   r   )Nc                  S   r   r   r0   r   r'   r'   r*   r   *  r   z?TestOverloadInlining.test_global_overload_binding.<locals>.implr-   Tr   r   r   r'   r'   r*   test_global_overload_binding(  r   z1TestOverloadInlining.test_global_overload_bindingc                    r   )Nr&   r   c                     r   r   r   r   r   r'   r*   r   4  r   zBTestOverloadInlining.test_inline_from_another_module.<locals>.implr   Tr   )r   r   rx   r   r'   r   r*   r   0  r   z4TestOverloadInlining.test_inline_from_another_modulec                    r   )Nr   c                     r   r   )r   r   r   r   r'   r*   r   >  r   zLTestOverloadInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   r   r   r'   r   r*   r   :  r   z>TestOverloadInlining.test_inline_from_another_module_w_getattrc                    r   )Nr   c                     r   r   )r   r   r   r   r   r'   r*   r   I  r   zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r   r   r'   r   r*   r   D  r   z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrc                    r   )Nc                     r   )Nr&   r   r!   r"   c                      r   r/   r'   r'   r   r'   r*   r   T  r   z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r'   r   r*   r   Q  r   zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   bopr'   r*   r   [  r   zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r   r'   r  r*   r   O  r   z?TestOverloadInlining.test_inline_from_another_module_as_freevarc                    r   )
Nr&   bop_factoryc                    r  )Nc                     r  r/   r   r   r  r'   r*   r   h  r  zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr'   r  r  r  r*   r  e  r	  zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r  rx   r
  r'   r  r*   r  a  r  z>TestOverloadInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ])\fddt |dfd	d
}fdd}j|dddkid qdD ])\fdd t  |dfdd} fdd}j|dddkid q:d S )Nc                    s(     | tj  | jd  |jS r  r  r   r  rW   rQ   rB   r?   r  r  r'   r*   r  r     zCTestOverloadInlining.test_inlining_models.<locals>.s17_caller_modelc                    s(     | tj  | jd  |jS r  r  r  r  r'   r*   r  w  r  zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_model))r   r  r  c                      r  r/   r'   r'   r  r'   r*   r     r`  z6TestOverloadInlining.test_inlining_models.<locals>.foor"   c                         fdd} | S )Nc                      r  r/   r'   r'   r  r'   r*   r     r`  zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.implr'   rg  r  r'   r*   foo_ol     z9TestOverloadInlining.test_inlining_models.<locals>.foo_olc                    r  r   r'   r  r   r'   r*   r     r"  z7TestOverloadInlining.test_inlining_models.<locals>.implr   r   r6   r   )r  )r  r   c                      r  r/   r'   r'   r  r'   r*   r     r`  z6TestOverloadInlining.test_inlining_models.<locals>.barc                     r  )Nc                      r  r/   r'   r'   r  r'   r*   r     r`  zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.implr'   rg  r  r'   r*   bar_ol  r  z9TestOverloadInlining.test_inlining_models.<locals>.bar_olc                    r#  r   r'   r  r$  r'   r*   r     r"  r   re  )r>   r  r  r  r   r  r'   r%  r*   r&  p  s   

z)TestOverloadInlining.test_inlining_modelsc                    s   dd  t  dddd }t  dddd	 }d
d }t  |ddd } fdd}| j|ddidd}tt|j d }dd |jddD }| t|dk dd |	t
jD }	|	D ]	}
| |
jd qbd S )Nc                 S   s    t t| tjr| d S | d S )Nr|   r&   )r:   r   r   Floatr(   r'   r'   r*   r     s   z_TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.barr!   r"   c                 S      t | tjrdd }|S d S )Nc                 S   r$   r%   r'   r(   r'   r'   r*   r     r.   ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol.<locals>.implr:   r   Integerr)   r   r'   r'   r*   
bar_int_ol     zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_olr5   c                 S   r  )Nc                 S   r$   )Nr|   r'   r(   r'   r'   r*   r     r.   zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl)r:   r   r  r  r'   r'   r*   bar_float_ol  r  zhTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_olc                  W   r(  rr  r'   rm   r'   r'   r*   always_inline_cost_model  r`  ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.always_inline_cost_modelc                 S   r  )Nc                 S   r$   r%   r'   r(   r'   r'   r*   r     r.   zxTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol.<locals>.impl)r:   r   Complexr  r'   r'   r*   bar_complex_ol  r  zjTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_olc                     s$    d}  d} d}| | | S )Nr&   gffffff@y              @r'   r   r   r   r   r'   r*   r     s   z`TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.implr   Fr&   r.  c                 S   rL   r'   r'   rM   r'   r'   r*   rO     rP   zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.<listcomp>rR   )rQ   c                 S   s&   g | ]}t t|d dtjr|jqS )r<   N)r:   rd   r   rO  r<   rM   r'   r'   r*   rO     s    r|   )r   rx   ra   rb   r7   rT   rc   
assertTruer`   
find_instsr   r;   assertNotEqualr<   )r>   r  r  r  r  r   rr   rs   callsconstsvalr'   r   r*   =test_multiple_overloads_with_different_inline_characteristics  s"   





zRTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristicsc                    sx   dd }dd  t  dd|  fdd}d	}| j||d
did dd  t  dd| d}| j||d
did d S )Nc                 S   sH   t | tjsdd }|S | jdkrdd }|S | jdv r"dd }|S d S )	Nc                 S   s   t | S r/   )r   r   r'   r'   r*   foo_noop  r.   znTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_nooprU   c                 S   r(  Nr   r'   r   r'   r'   r*   foo_as_str_impl  r`  zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl)int64float64c                 S   r(  Nr   r'   r   r'   r'   r*   foo_as_num_impl  r`  zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_num_impl)r:   r   StringLiteralliteral_value)r   r  r  r  r'   r'   r*   foo_ovld  s   

z\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovldc                 S   r(  r  r'   r   r'   r'   r*   r     r`  zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor!   r"   c                        | S r/   r'   r   r   r'   r*   rl     r.   z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_implrU   r   Tr   c                 S   r(  r  r'   r   r'   r'   r*   r     r`  r  re  )r>   r  rl   r   r'   r   r*   5test_overload_inline_always_with_literally_in_inlinee  s   zJTestOverloadInlining.test_overload_inline_always_with_literally_in_inlineec                    sH   d dd t dd fdd}fdd	}| j|d
ddid d S )NTc                 S   r(  rr  r'   Ar'   r'   r*   r   	  r`  z8TestOverloadInlining.test_inline_always_ssa.<locals>.foor!   r"   c                        fdd}|S )Nc                    s6    }t t| D ]} }| | r| | }||9 }q|S r/   )r   r`   )r  r   r   dummy
dummy_truer'   r*   r     s   
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr'   )r  r   r  r'   r*   rc    s   zATestOverloadInlining.test_inline_always_ssa.<locals>.foo_overloadc                      s    t g dS )N)TFT)r   arrayr'   r   r'   r*   r     s   z9TestOverloadInlining.test_inline_always_ssa.<locals>.implrK   r   rD   rC   re  rf  r'   )r  r   r*   test_inline_always_ssa  s   
z+TestOverloadInlining.test_inline_always_ssac                    s   dd  t  dd fdd}t fdd}tjd	d
}tdtj t  | | |	  W d    n1 s<w   Y  | t
|d d S )Nc                  S   s    d} | dkr| d } | dksdS )Nr   r&   r   r   r'   r   r'   r'   r*   r   !  s
   zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.barr!   r"   c                      r  r/   r'   r'   r   r'   r*   bar_impl(  r2   zLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_implc                      r[  r/   r'   r'   r   r'   r*   r   ,  s   
zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.fooT)recordr   )r   r   warningscatch_warningssimplefilterr   NumbaIRAssumptionWarningr    rW   py_funcr`   )r>   r  r   wr'   r   r*   %test_inline_always_ssa_scope_validity  s   
z:TestOverloadInlining.test_inline_always_ssa_scope_validityN)rj   ry   rz   r   r   ro  r  r  r  r  r  r  r   r   r  r   r   r   r   r  r&  r  r  r  r  r'   r'   r'   r*   r^    s.    ',3

28*r^  c                       s   e Zd Z fddZ	dddZ	dddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Z  ZS )TestOverloadMethsAttrsInliningc                    s   |    tt|   d S r/   )r  superr  setUpr  	__class__r'   r*   r  ;  s   z$TestOverloadMethsAttrsInlining.setUpTc                 C      t td|}| || | |j|jd  jd }|j|_| t|j| |r?|j D ]}t	|
d}	| |	 q.d S g }
|j D ]}|
t	|
d7 }
qF| |
 d S )NrE   r   rG   rR   r   r   rW   rX   rY   rZ   r7   r`   r8   listrc   rk   r  )r>   rl   rm   expectedrD   expects_inlinedrq   rr   rs   r  allcallsr'   r'   r*   check_method?     z+TestOverloadMethsAttrsInlining.check_methodc                 C   r  )NrE   r   rG   rd   r  )r>   rl   rm   r  rD   r  rq   rr   rs   getattrsallgetattrsr'   r'   r*   check_getattrU  r   z,TestOverloadMethsAttrsInlining.check_getattrc                 C   sF   |   \}}t|dddddd}dd }| j|| gdd	d
 d S )Ninline_methodr!   r"   c                 S   s   ddd}|S )Nc                 S   s
   d||fS )NTHIS IS INLINEDr'   )r  r  val2r'   r'   r*   getp  r2  zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.getNNr'   )r  r  r  r  r'   r'   r*   _get_inlined_methodn     
zdTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_methodc                 S   s   |  d| j ddfS )Nr   A  )r  r  r  r'   r'   r*   r   t     zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r  r   N)r  Nr  r&   )rl   rm   r  rD   r  r  r   r  )r>   r  ry  r	  r   r'   r'   r*   (test_overload_method_default_args_alwaysk  s   
zGTestOverloadMethsAttrsInlining.test_overload_method_default_args_alwaysc                    sR    fdd}|   \}}t|d|ddd }dd }| j|| gd	d
 d d S )Nc                     r  r/   r'   r  should_inliner'   r*   	costmodel  r`  zKTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.costmodelr  r"   c                 S      dd }|S )Nc                 S   s   d|fS )NTHIS IS INLINED!!!r'   )r  r  r'   r'   r*   r    r.   zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr'   )r  r  r  r'   r'   r*   r	    rd  zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |  dS Nr   r  r  r'   r'   r*   r     r2  zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)r  r   r&   rl   rm   r  rD   r  r  )r>   r  r  r  ry  r	  r   r'   r  r*   make_overload_method_test  s   

z8TestOverloadMethsAttrsInlining.make_overload_method_testc                 C      | j ddd d S Nr!   Tr  r  r  r  r'   r'   r*   'test_overload_method_cost_driven_always     
zFTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_alwaysc                 C   r  Nr5   Fr  r  r  r'   r'   r*   &test_overload_method_cost_driven_never  r  zETestOverloadMethsAttrsInlining.test_overload_method_cost_driven_neverc                 C      | j dd dd d S )Nc                  W   r(  rr  r'   r  r'   r'   r*   rj    rs  z]TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inline.<locals>.<lambda>Tr  r  r  r'   r'   r*   ,test_overload_method_cost_driven_must_inline     
zKTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inlinec                 C   r!  )Nc                  W   r(  NFr'   r  r'   r'   r*   rj    rs  z[TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline.<locals>.<lambda>Fr  r  r  r'   r'   r*   *test_overload_method_cost_driven_no_inline  r#  zITestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inlinec                 C   sF   |   \}}t|d|ddd }dd }| j|| gdd|d	 d S )
Ninlinemer"   c                 S   s   dd }|S )Nc                 S   r(  )NMY INLINED ATTRSr'   r  r'   r'   r*   r    r`  z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.getr'   )r  r  r'   r'   r*   _get_inlineme  rd  zRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlinemec                 S   s   | j S r/   )r&  r  r'   r'   r*   r     r   zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foor'  r&   r  )r  r   r  )r>   r  r  r  ry  r(  r   r'   r'   r*   make_overload_attribute_test  s   

z;TestOverloadMethsAttrsInlining.make_overload_attribute_testc                 C   r  r  r)  r  r'   r'   r*   test_overload_attribute_always  r  z=TestOverloadMethsAttrsInlining.test_overload_attribute_alwaysc                 C   r  r  r*  r  r'   r'   r*   test_overload_attribute_never  r  z<TestOverloadMethsAttrsInlining.test_overload_attribute_neverc                 C   r!  )Nc                  W   r(  rr  r'   r  r'   r'   r*   rj    rs  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>Tr  r*  r  r'   r'   r*   -test_overload_attribute_costmodel_must_inline  r#  zLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inlinec                 C   r!  )Nc                  W   r(  r$  r'   r  r'   r'   r*   rj    rs  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>Fr  r*  r  r'   r'   r*   +test_overload_attribute_costmodel_no_inline  r#  zJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline)T)rj   ry   rz   r  r  r  r  r  r  r   r"  r%  r)  r+  r,  r-  r.  __classcell__r'   r'   r  r*   r  :  s"    

r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestGeneralInliningc                 C   s2   t tdddd }dd }| j|ddid	 d S )
Nr!   r"   c                 S   r   r/   r'   r  r'   r'   r*   overload_len  r2   zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t g dS )N)r   r   r-  )r`   r'   r'   r'   r*   r     rm  zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implr`   Fr   )r   r`   rx   )r>   r1  r   r'   r'   r*   )test_with_inlined_and_noninlined_variants  s   

z=TestGeneralInlining.test_with_inlined_and_noninlined_variantsc                    sB   ddd t  ddddd} fd	d
}| j|ddid d S )Nr   r   c                 S      | | | S r/   r'   r  r'   r'   r*   r     rm  z1TestGeneralInlining.test_with_kwargs.<locals>.foor!   r"   c                 S   s   ddd}|S )Nr   r   c                 S   r3  r/   r'   r  r'   r'   r*   r     rm  zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.implr   r   r'   )r   r   r   r   r'   r'   r*   rk    r
  z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      rl  )Nr   r   r   r'   r'   r   r'   r*   r     rm  z2TestGeneralInlining.test_with_kwargs.<locals>.implr   Tr   r4  re  rn  r'   r   r*   test_with_kwargs  s
   

z$TestGeneralInlining.test_with_kwargsc                    s<   t ddddd d fd	d
	}| j|ddddid d S )Nr!   r"   r}   r7  c                 S   rh  r/   r'   r  r'   r'   r*   r     r,   z2TestGeneralInlining.test_with_kwargs2.<locals>.barr1  r   c                    s    | | ddS )Nr   r5  r'   r  r   r'   r*   r     r:  z3TestGeneralInlining.test_with_kwargs2.<locals>.implr   r-  r   Tr   )r}   r7  )r1  r   r   r   r'   r   r*   test_with_kwargs2  s   z%TestGeneralInlining.test_with_kwargs2c                    s8   t ddddd  fdd}| j|ddd	id
 d S )Nr!   r"   c                 S   s   |d u rd}| |fS r  r'   rL  r'   r'   r*   r     s   z@TestGeneralInlining.test_inlining_optional_constant.<locals>.barc                      s      d ddfS )Nr   r  r   r'   r'   r   r'   r*   r     r  zATestGeneralInlining.test_inlining_optional_constant.<locals>.implrK   r   Tr  r  r   r   r'   r   r*   test_inlining_optional_constant  s   z3TestGeneralInlining.test_inlining_optional_constantN)rj   ry   rz   r2  r6  r7  r8  r'   r'   r'   r*   r0    s
    r0  c                   @   rY  )TestInlineOptionsc                 C   s   t d}| |j | |j | |j | |jd t d}| |j | |j | |j | |jd dd }t |}| |j | |j | |j | |j| d S )Nr!   r5   c                 S   s   | S r/   r'   r(   r'   r'   r*   
cost_model&  r`  z0TestInlineOptions.test_basic.<locals>.cost_model)	r   r  is_always_inlinerk   is_never_inlinehas_cost_modelrW   r<   assertIs)r>   r!   r5   r:  modelr'   r'   r*   
test_basic  s    zTestInlineOptions.test_basicN)rj   ry   rz   r@  r'   r'   r'   r*   r9    r]  r9  c                   @   s@   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	dS )TestInlineMiscIssuesc                    sd   dd  t  dddd }tdd fd	d
}tdddd }|td |td d S )Nc                 S   r   r/   r'   )r  r   r'   r'   r*   output_factory2  r`  z;TestInlineMiscIssues.test_issue4691.<locals>.output_factoryr!   r"   c                 S   s   t | tjjrdd }|S d S )Nc                 S   s   | j dd  }tj||dS Nr   r   )shaper   r   )r  r   rD  r'   r'   r*   r   8  s   zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r:   r   npytypesArray)r  r   r   r'   r'   r*   ol_output_factory5  s   z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)nogilc                    s    | | j }|S r/   r   )r  outrB  r'   r*   ri   >  s   z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd  | jdS rC  )r   r   rD  r   r  r'   r'   r*   fn2C  s   z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r   r   r   r   r   )r   r   r   ones)r>   rG  ri   rL  r'   rJ  r*   test_issue46911  s   


z#TestInlineMiscIssues.test_issue4691c                    s4   t dddd  t  fdd}|td d S )Nr!   r"   c                 S   s   | j dkr	td| S )Nr&   zInvalid number of dimensions)ndim
ValueErrorrK  r'   r'   r*   inliningL  s   
z5TestInlineMiscIssues.test_issue4693.<locals>.inliningc                    r  r/   r'   rK  rQ  r'   r*   ri   S  r,   z/TestInlineMiscIssues.test_issue4693.<locals>.fnr   )r   r   r   )r>   ri   r'   rR  r*   test_issue4693J  s
   
z#TestInlineMiscIssues.test_issue4693c                    sh   t dddd  t  fdd}| t}|  W d    n1 s$w   Y  | dt|j d S )Nr!   r"   c                  S   s   d} t | )NSomething happened)rP  )msgr'   r'   r*   rQ  \  s   z5TestInlineMiscIssues.test_issue5476.<locals>.inliningc                      r   r/   r'   r'   rR  r'   r*   ri   a  r   z/TestInlineMiscIssues.test_issue5476.<locals>.fnrT  )r   r  rP  r  rU   r  )r>   ri   raisesr'   rR  r*   test_issue5476Y  s   
z#TestInlineMiscIssues.test_issue5476c                    s   G fddd G dd dt jtG dd dtj}tdd tfd	d
t ddfdd}tddddd }t	 fdd}dd}||}| 
||  d S )Nc                       s    e Zd Zdd Z fddZdS )z2TestInlineMiscIssues.test_issue5792.<locals>.Dummyc                 S   s
   || _ d S r/   datar>   rY  r'   r'   r*   __init__o  r2  z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__c                    s
    |j  S r/   rX  r>   otherrX  r'   r*   divr  r2  z6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divN)rj   ry   rz   r[  r^  r'   rX  r'   r*   r  n  s    r  c                          e Zd Z fddZ  ZS )z6TestInlineMiscIssues.test_issue5792.<locals>.DummyTypec                    s"   || _ t jd| j  dd d S )NzDummy())rg   rY  r  r[  rZ  r  r'   r*   r[  v  s   z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__rj   ry   rz   r[  r/  r'   r'   r  r*   ry  u  s    ry  c                       r_  )z;TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                    s    d|j fg}t ||| d S )NrY  ra  )r>   dmmfe_typemembersr  r'   r*   r[  |  s   zDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__rb  r'   r'   r  r*   DummyTypeModelz  s    rf  rY  _datac                    s"   dd } |}t ||}||fS )Nc                 S   sF   |j }|\}t|| |}||_| jr| j||jd | | S r  )	return_typer
   create_struct_proxyrY  
enable_nrtnrtincrefrm   	_getvalue)contextbuildersigrm   typrY  r  r'   r'   r*   codegen  s   zHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegenr   )	typingctxrY  rr  ret_typrp  )ry  r'   r*   
init_dummy  s   
z7TestInlineMiscIssues.test_issue5792.<locals>.init_dummyr!   r"   c                    r  )Nc                    r  r/   r'   rX  ru  r'   r*   ctor  r.   zITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctorr'   )rY  rw  rv  r'   r*   dummy_overload  s   z;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overloadr^  c                 S   r  )Nc                 S   s   | j |j  S r/   )rg  r\  r'   r'   r*   r     rm  zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.implr'   )r>   r]  r   r'   r'   r*   div_overload  s   z9TestInlineMiscIssues.test_issue5792.<locals>.div_overloadc                    s    | } |}| |S r/   )r^  )rY  
other_datar  r]  )r  r'   r*   rl     s   
z6TestInlineMiscIssues.test_issue5792.<locals>.test_implg      ?r?  )r   Typer   r   StructModelr   r   r   r   r   rW   )r>   rf  rx  ry  rl   rz  resr'   )r  ry  rY  ru  r*   test_issue5792j  s"   


z#TestInlineMiscIssues.test_issue5792c                    sV   G dd dt }dd  t dddd }t|d	 fd
d}| |dd dS )z] Similar to the above test_issue5792, checks mutation of the inlinee
        IR is local onlyc                   @   rY  )z;TestInlineMiscIssues.test_issue5824.<locals>.CustomCompilerc                 S   s&   t | j}|tt |  |gS r/   )r   define_nopython_pipelinestateadd_pass_afterr   finalize)r>   pmr'   r'   r*   define_pipelines  s   zLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelinesN)rj   ry   rz   r  r'   r'   r'   r*   CustomCompiler  r]  r  c                 S   r   r/   r'   r(   r'   r'   r*   r     r`  z0TestInlineMiscIssues.test_issue5824.<locals>.barr!   r"   c                 S   r  )Nc                 S   r$   )Ng?r'   r(   r'   r'   r*   r     r.   zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.implr  r  r'   r'   r*   ol_bar  r  z3TestInlineMiscIssues.test_issue5824.<locals>.ol_barrE   c                    s    |  | fS r/   r'   r   r   r'   r*   r     rM  z0TestInlineMiscIssues.test_issue5824.<locals>.foor   )皙&@r  N)r   r   r   rW   )r>   r  r  r   r'   r   r*   test_issue5824  s   	

z#TestInlineMiscIssues.test_issue5824c                    s   t dddd  t dd fdd}td	}|| | |d
t|  t dddd }| tj}|| W d    n1 sFw   Y  | dt	|j
 d S )Nr!   r"   c                 S   s$   t | jD ]
}| |  d7  < qd S r%   )r   size)r)   r   r'   r'   r*   r     s   z0TestInlineMiscIssues.test_issue7380.<locals>.barT)parallelc                    s$   t | jd D ]} | |  qd S r  )r   rD  )r   r   r   r'   r*   r     s   z0TestInlineMiscIssues.test_issue7380.<locals>.foo)r   r   r   c                 S   s@   t | jd D ]}| | }t|jD ]
}||  d7  < qqd S )Nr   r&   )r   rD  r   r  )r   r   r)   r'   r'   r*   foo_bad  s   z4TestInlineMiscIssues.test_issue7380.<locals>.foo_badz Overwrite of parallel loop index)r   r   rM  assertPreciseEqual	ones_liker  r   UnsupportedRewriteErrorr  rU   r  )r>   r   r   r  r   r'   r   r*   test_issue7380  s   	



z#TestInlineMiscIssues.test_issue7380N)
rj   ry   rz   rN  rS  rW  r~  r  r   r  r'   r'   r'   r*   rA  /  s    FrA  __main__)<__doc__r  r  	itertoolsr   numpyr   r   r   r   r   r   
numba.corer   r   r	   r
   r   r   numba.core.extendingr   r   r   r   r   r   r   r   numba.core.cpur   numba.core.compilerr   r   numba.core.typed_passesr   numba.core.typingr   numba.tests.supportr   r   r   r   r   r    r   r+   r-   r1   r3   r   r   r   rZ  r^  r  r0  r9  rA  rj   mainr'   r'   r'   r*   <module>   sP     (
 


@&  S    A "< E