o
    8ήc                     @   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 ddlmZmZmZ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! 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/m0Z0 dZ1edddd Z2dd Z3ee3dddd Z4G dd de*Z5dZ6dd Z7G dd de-e5Z8G dd de-e5Z9G dd  d e-e5Z:G d!d" d"e5Z;G d#d$ d$e-e5Z<G d%d& d&e*Z=G d'd( d(e*Z>e?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)overloadoverload_methodoverload_attributeregister_modeltypeof_implunboxNativeValuemodelsmake_attribute_wrapper	intrinsicregister_jitable)OpaqueModel)InlineOptions)DefaultPassBuilderCompilerBase)InlineOverloads	signature)TestCaseunittestskip_py38_or_laterMemoryLeakMixinIRPreservingTestPipelineskip_parfors_unsupportedignore_internal_warningsialwaysinlinec                 C      | d S N    xr+   r+   C/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_ir_inlining.py_global_func*      r/   c                 C   r(   r)   r+   r,   r+   r+   r.   _global_defn0      r1   c                 C   s   t S Nr1   r,   r+   r+   r.   _global_overload4      r5   c                   @   s2   e Zd ZdZdddZ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_modelB   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>i       z&InliningBase.check.<locals>.<listcomp>Fopcall)popitemsr>   strboolr   r"   assertEqual	overloads
signaturesmetadatar	   simplify_CFGr;   _DEBUGprintcenterdumplennextiterr<   
find_exprsgetattrget_definitionfuncnameis_operator_or_getitemfn__name__assertFalse)rB   	test_implargskwargsrG   rH   kvj_funcfirblockexprsfoundexpr	func_defnr+   r+   r.   checkO   s<   
zInliningBase.checkc                    sp   |   }td|tjfi }|d t|t G dd dt}t	| fdd}t
|dd }||fS )	z Use to generate a dummy type zDummyTypeFor{}my_dummyc                   @   s   e Zd ZdS )z+InliningBase.make_dummy_type.<locals>.DummyN)rn   
__module____qualname__r+   r+   r+   r.   Dummy   s    r   c                        S r3   r+   )valc
dummy_typer+   r.   typeof_dummy   r6   z2InliningBase.make_dummy_type.<locals>.typeof_dummyc                 S   s   t |j S r3   )r   contextget_dummy_value)typobjr   r+   r+   r.   unbox_dummy      z1InliningBase.make_dummy_type.<locals>.unbox_dummy)idtypeformatr   Opaquer   r   objectr   registerr   )rB   test_id	DummyTyper   r   r   r+   r   r.   make_dummy_typew   s   
zInliningBase.make_dummy_typeN)rn   r~   r   r`   inline_opt_as_boolrF   r|   r   r+   r+   r+   r.   r7   9   s    
(r7     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rangerd   append_GLOBAL)abr   defghintrs   lmopqrs_FREEVARr+   r.   foo   s:   z_gen_involved.<locals>.foo)r   r   Nr+   r   r+   r   r.   _gen_involved   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e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 )
Nr9   r&   c                   S      d S r3   r+   r+   r+   r+   r.   r      r6   z9TestFunctionInlining.test_basic_inline_never.<locals>.fooc                           S r3   r+   r+   r   r+   r.   impl      z:TestFunctionInlining.test_basic_inline_never.<locals>.implr   FrG   r   r|   rB   r   r+   r   r.   test_basic_inline_never      
z,TestFunctionInlining.test_basic_inline_neverc                    r   )
Nr%   r&   c                   S   r   r3   r+   r+   r+   r+   r.   r      r6   z:TestFunctionInlining.test_basic_inline_always.<locals>.fooc                      r   r3   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 r3   r+   r-   yzbarbazr   r+   r.   r         
z;TestFunctionInlining.test_basic_inline_combos.<locals>.implr8   r&   c                   S   r   r3   r+   r+   r+   r+   r.   r      r6   z:TestFunctionInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r3   r+   r+   r+   r+   r.   r      r6   z:TestFunctionInlining.test_basic_inline_combos.<locals>.barc                   S   r   r3   r+   r+   r+   r+   r.   r      r6   z:TestFunctionInlining.test_basic_inline_combos.<locals>.bazr   r   r   r   )r   r   r   r|   )rB   r   opts
inline_foo
inline_bar
inline_bazrG   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.   rj     r   zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r'   r-   r   rj   r+   r   r.   factory  s   z;TestFunctionInlining.test_freevar_bindings.<locals>.factoryc                     r   r3   r+   r   r   r+   r.   r   
  r   z8TestFunctionInlining.test_freevar_bindings.<locals>.implr8   
         (   2   <   r   r   r   r   r|   )rB   r   r   r   r   r   r   rG   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   r|   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   r|   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   3     zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   numba.tests.inlining_usecasestestsr   r|   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  r|   rB   numbar   r+   r  r.   +test_inline_from_another_module_w_2_getattr9     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   r3   r+   r+   r   r+   r.   tmpI     z]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r  r+   r   r.   r   F     zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   r   r+   r.   r   P  r   zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   rB   r   r   r+   r  r.   *test_inline_from_another_module_as_freevarD     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 r3   r   r   r   r   r   r+   r.   r   ]     zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr+   r   r   r   r  r  r.   genZ     zKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r  r|   rB   r"  r   r+   r  r.   )test_inline_w_freevar_from_another_moduleV     
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 NrV   assertIsInstancer   Exprr[   rU   rF   rz   caller_infocallee_inforB   r+   r.   s17_caller_modelg     
zCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelc                    s&     | tj  | jd  |S r'  r(  r+  r.  r+   r.   s17_callee_modell  r0  zCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_model)   r:   r:   r3  r&   c                      r   r3   r+   r+   calleer+   r.   r   t  r6   z6TestFunctionInlining.test_inlining_models.<locals>.fooc                       |   } }|d |fS r   r+   r   r-   r   callerr   r+   r.   r   x     z7TestFunctionInlining.test_inlining_models.<locals>.implr   r   r:   r   c                      r   r3   r+   r+   r5  r+   r.   r     r6   z6TestFunctionInlining.test_inlining_models.<locals>.barc                       |  }  }|d |fS r   r+   r8  r   r:  r+   r.   r     r;  r   r   )rB   r/  r1  r   r+   r   r6  r:  r   rB   r.   test_inlining_modelse  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     r6   z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dD ]}|   7 } q| S )N        r   r   )accr   r   r+   r.   r     s   z:TestFunctionInlining.test_inline_inside_loop.<locals>.implr   T   rG   rH   r   r   r+   r   r.   test_inline_inside_loop  s   
z,TestFunctionInlining.test_inline_inside_loopc                    r@  )Nr%   r&   c                   S   rA  rB  r+   r+   r+   r+   r.   r     r6   zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.fooc                     s,   d} t dD ]} fdd}| | 7 } q| S )NrC  r   c                      s
     d S N   r+   r+   r   r+   r.   r        
zVTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl.<locals>.barrD  )rE  r   r   r   r+   r.   r     s
   zITestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.implr   TrF  rG  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 rB  r+   r+   r   r+   r.   r     r2   zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.baz   r+   )r   r   r+   rM  r.   r     s   
zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.fooc                        d  fdd} |  d S )N	   c                        d |  S rI  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*   rG  r   r   r+   r   r.   3test_inline_closure_inside_inlinable_inside_closure  s   
zHTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closurec                    sf   t ddt t ddfdd t dd fddfdd}| j|d	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 r3   r+   )r   rE  r+   r.   biz  r2   zCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.bizrN         @r*   y              (@rD  )jrW  r-   )fortranrV  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 rB  r+   r,   r   r  r+   r.   r     rS  zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazrN  r   rD  )r   rE  r   r   )r[  rZ  r\  r.   r     s   z6TestFunctionInlining.test_inline_involved.<locals>.fooc                     rO  )NrP  c                    rQ  rI  r+   r,   rR  r+   r.   r     rS  zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.barr   r+   r   r   r   r.   r     rT  z7TestFunctionInlining.test_inline_involved.<locals>.implT)r   r[  rZ  %   rG  )r   r   r|   r   r+   )r[  r   rZ  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+   r8  r+   r+   r.   r     s   z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.barrI   c                    s    |  |fS r3   r+   r   r   r   r+   r.   r        z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foor   r   )   #   r   rK   r   r   z__locals__bar_v[0-9]+.x)r   r"   r[   r\   r]   r^   r;   r<   r=   r>   r   r?   r@   Constr   rd   targetrk   r   lstripr~   assertRegex)
rB   r   rC   storerD   rE   r   rk   basenameregexr+   r   r.   test_inline_renaming_scheme  s,   



z0TestFunctionInlining.test_inline_renaming_schemeN)rn   r~   r   r   r   r   r   skipr   r   r   r   r  r  r  r%  r?  rH  rL  rU  r    r^  rj  r+   r+   r+   r.   r      s(    		


(
#r   c                   @      e Zd Zdd ZdS )TestRegisterJitableInliningc                    r   )
Nr%   r&   c                   S   rA  r)   r+   r+   r+   r+   r.   r     r6   zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.fooc                      
      d S r3   r+   r+   r   r+   r.   r     rK  zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.implr   Tr   )r   r|   r   r+   r   r.   test_register_jitable_inlines  s   
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)rn   r~   r   ro  r+   r+   r+   r.   rm        rm  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   r3   r+   r+   r+   r+   r.   r        z9TestOverloadInlining.test_basic_inline_never.<locals>.foor9   r&   c                  S      dd } | S )Nc                   S   r   r3   r+   r+   r+   r+   r.   foo_impl  rs  zTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_implr+   )ru  r+   r+   r.   foo_overload     zBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overloadc                      r   r3   r+   r+   r   r+   r.   r     r   z:TestOverloadInlining.test_basic_inline_never.<locals>.implr   Fr   r   r|   rB   rv  r   r+   r   r.   r     s
   

z,TestOverloadInlining.test_basic_inline_neverc                    rr  )Nc                   S   r   r3   r+   r+   r+   r+   r.   r   $  rs  z:TestOverloadInlining.test_basic_inline_always.<locals>.foor%   r&   c                  S   rt  )Nc                   S   r   r3   r+   r+   r+   r+   r.   r   )  rs  zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.implr+   r   r+   r+   r.   rv  '  rw  zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overloadc                      r   r3   r+   r+   r   r+   r.   r   -  r   z;TestOverloadInlining.test_basic_inline_always.<locals>.implr   Tr   rx  ry  r+   r   r.   r   "  s
   

z-TestOverloadInlining.test_basic_inline_alwaysc                    rr  )Nc                 S      | | S r3   r+   r_  r+   r+   r.   r   4  r2   zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foor%   r&   c                 S      dd S )Nc                 S   r{  r3   r+   r_  r+   r+   r.   <lambda>9  s    z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>r+   r_  r+   r+   r.   overload_foo7  r0   zKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_fooc                          dddS )Nr   rF  r   r+   r+   r   r+   r.   r   ;     zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.implr   Tr   rx  rB   r~  r   r+   r   r.    test_inline_always_kw_no_default2  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 r3   r+   r,   r+   r+   r.   impl_inlineB  r   zETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inlinec                 S   s   | 
 S r3   r+   r,   r+   r+   r.   impl_noinlineE  r   zGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinlinec                 S   rA  NTr+   r,   r+   r+   r.   r}  H      zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>__neg____pos__r%   r&   c                       t |  rS d S r3   r>   r,   r   dummy_unary_implr+   r.   overload_dummy_negM     
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_negr9   c                    r  r3   r  r,   r  r+   r.   overload_dummy_posR  r  zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_posnegTr   posF)r   setattrr   operatorr  r  r|   )rB   r  r  r   r  r  r+   r  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.   r  \  r2   zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlinec                 S   s   | dkS r)   r+   r,   r+   r+   r.   r  _  r2   zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlinec                 S   rA  r  r+   r_  r+   r+   r.   r}  d  r  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>__eq____ne__r%   r&   c                    r  r3   r  r_  r   dummy_binop_implr+   r.   overload_dummy_eqh  r  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqr9   c                    r  r3   r  r_  r  r+   r.   overload_dummy_nem  r  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neeqTr   neF)r   r  r   r  r  r  r|   )rB   r  r  r   r  r  r+   r  r.   test_inline_operators_binopZ  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.   r  w  r  zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinec                 S   s   | d8 } d S r)   r+   r,   r+   r+   r.   r  z  r  zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlinec                 S   rA  r  r+   r_  r+   r+   r.   r}    r  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>__iadd____isub__r%   r&   c                    r  r3   r  r_  r   dummy_inplace_binop_implr+   r.   overload_dummy_iadd  r  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddr9   c                    r  r3   r  r_  r  r+   r.   overload_dummy_isub  r  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubc                    r  r3   r  r_  r  r+   r.   overload_dummy_add  r  zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_addc                    r  r3   r  r_  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subr|   )rB   r  r  r   r  r  r  r  r+   r  r.   #test_inline_operators_inplace_binopu  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 r3   r+   r-   idxr+   r+   r.   r     r2   zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.implc                 S      | d S r)   r+   r,   r+   r+   r.   impl_static_getitem  r2   zVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitemc                 S   r   r3   r+   r   r  r+   r+   r.   r}    r  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>__getitem__r%   r&   c                    r  r3   r  r  r   dummy_getitem_implr+   r.   overload_dummy_getitem  r  zYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitemr*   getitemTr   r   r  r   r  r  r|   rB   r   r  r   r  r+   r  r.   $test_inline_always_operators_getitem     

z9TestOverloadInlining.test_inline_always_operators_getitemc                    r  )Nc                 S   r  r3   r+   r  r+   r+   r.   r     r2   zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   r  r)   r+   r,   r+   r+   r.   r    r2   zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   r   r3   r+   r  r+   r+   r.   r}    r  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>r  r9   r&   c                    r  r3   r  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+   r_  r+   r+   r.   r     r  z;TestOverloadInlining.test_inline_stararg_error.<locals>.foor%   r&   c                 W   r|  )Nc                 W   r  r  r+   r_  r+   r+   r.   r}    s    zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>r+   r_  r+   r+   r.   r~    r0   zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_fooc                      s    dddS )Nr   r   r+   r+   r   r+   r.   r     r  z<TestOverloadInlining.test_inline_stararg_error.<locals>.implr   Tr   z-Stararg not supported in inliner for arg 1 *b)r   assertRaisesNotImplementedErrorr|   assertInrY   	exception)rB   r~  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   r3   r+   r   r   r+   r.   r     r   z;TestOverloadInlining.test_basic_inline_combos.<locals>.implr8   c                   S   r   r3   r+   r+   r+   r+   r.   r     rs  z:TestOverloadInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r3   r+   r+   r+   r+   r.   r     rs  z:TestOverloadInlining.test_basic_inline_combos.<locals>.barc                   S   r   r3   r+   r+   r+   r+   r.   r     rs  z:TestOverloadInlining.test_basic_inline_combos.<locals>.bazr&   c                  S   rt  )Nc                   S   r   r3   r+   r+   r+   r+   r.   r     rs  zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.implr+   rz  r+   r+   r.   rv    rw  zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overloadc                  S   rt  )Nc                   S   r   r3   r+   r+   r+   r+   r.   r     rs  zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.implr+   rz  r+   r+   r.   bar_overload  rw  zCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overloadc                  S   rt  )Nc                   S   r   r3   r+   r+   r+   r+   r.   r      rs  zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.implr+   rz  r+   r+   r.   baz_overload  rw  zCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overloadr   r   )r   r   r   r|   )
rB   r   r   r   r   r   rv  r  r  rG   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   r3   r+   r   r   r+   r.   r     r   z8TestOverloadInlining.test_freevar_bindings.<locals>.implr8   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   rM   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+   rz  r   r+   r.   rj   ,  s   zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )rd  r-   r   r'   rj   r+   r   r.   r   )  s   
z;TestOverloadInlining.test_freevar_bindings.<locals>.factoryr   r   r&   r   r   r   rM   r   r   r3   r   )rB   r   r   r   r   r   r   rG   r+   r   r.   r   	  s    
	z*TestOverloadInlining.test_freevar_bindingsc                 C   r   )Nc                  S   r   r   r4   r   r+   r+   r.   r   >  r   z?TestOverloadInlining.test_global_overload_binding.<locals>.implr1   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   H  r   zBTestOverloadInlining.test_inline_from_another_module.<locals>.implr   Tr   )r   r   r|   r   r+   r  r.   r   D  r   z4TestOverloadInlining.test_inline_from_another_modulec                    r   )Nr   c                     r   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  N  r  z>TestOverloadInlining.test_inline_from_another_module_w_getattrc                    r  )Nr   c                     r  r   )r   r   r   r   r  r+   r.   r   ]  r	  zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r
  r  r+   r  r.   r  X  r  z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrc                    r  )Nc                     r  )Nr*   r  r%   r&   c                      r   r3   r+   r+   r  r+   r.   r  h  r  z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r  r+   r  r.   r   e  r  zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   bopr+   r.   r   o  r   zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r  r+   r  r.   r  c  r  z?TestOverloadInlining.test_inline_from_another_module_as_freevarc                    r  )
Nr*   bop_factoryc                    r  )Nc                     r  r3   r   r   r  r+   r.   r   |  r   zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr+   r!  r  r  r.   r"  y  r#  zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r  r|   r$  r+   r  r.   r%  u  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*  r[   rU   rF   rC   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.   r1    r  zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_model))r   r3  r4  c                      r   r3   r+   r+   r5  r+   r.   r     rs  z6TestOverloadInlining.test_inlining_models.<locals>.foor&   c                         fdd} | S )Nc                      r   r3   r+   r+   r5  r+   r.   r     rs  zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.implr+   rz  r5  r+   r.   foo_ol     z9TestOverloadInlining.test_inlining_models.<locals>.foo_olc                    r7  r   r+   r8  r9  r+   r.   r     r;  z7TestOverloadInlining.test_inlining_models.<locals>.implr   r   r:   r   )r2  )r3  r   c                      r   r3   r+   r+   r5  r+   r.   r     rs  z6TestOverloadInlining.test_inlining_models.<locals>.barc                     r  )Nc                      r   r3   r+   r+   r5  r+   r.   r     rs  zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.implr+   rz  r5  r+   r.   bar_ol  r  z9TestOverloadInlining.test_inlining_models.<locals>.bar_olc                    r<  r   r+   r8  r=  r+   r.   r     r;  r   rx  )rB   r/  r1  r  r   r  r+   r>  r.   r?    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     r2   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_olr9   c                 S   r  )Nc                 S   r(   )Nr   r+   r,   r+   r+   r.   r     r2   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   rA  r  r+   rq   r+   r+   r.   always_inline_cost_model  rs  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     r2   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*   rG  c                 S   rP   r+   r+   rQ   r+   r+   r.   rS     rT   zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.<listcomp>rV   )rU   c                 S   s&   g | ]}t t|d dtjr|jqS )r@   N)r>   rh   r   rc  r@   rQ   r+   r+   r.   rS     s    r   )r   r|   re   rf   r;   rX   rg   
assertTruerd   
find_instsr   r?   assertNotEqualr@   )rB   r  r  r  r  r   rv   rw   callsconstsr   r+   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 r3   )r   r   r+   r+   r.   foo_noop  r2   znTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_nooprY   c                 S   rA  Nr   r+   r   r+   r+   r.   foo_as_str_impl  rs  zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl)int64float64c                 S   rA  Nr   r+   r   r+   r+   r.   foo_as_num_impl  rs  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   rA  r  r+   r   r+   r+   r.   r     rs  zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor%   r&   c                        | S r3   r+   r   r   r+   r.   rp     r2   z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_implrY   r   Tr   c                 S   rA  r  r+   r   r+   r+   r.   r     rs  r  rx  )rB   r  rp   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   rA  r  r+   Ar+   r+   r.   r     rs  z8TestOverloadInlining.test_inline_always_ssa.<locals>.foor%   r&   c                        fdd}|S )Nc                    s6    }t t| D ]} }| | r| | }||9 }q|S r3   )r   rd   )r  r   r   dummy
dummy_truer+   r.   r   #  s   
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr+   )r  r   r  r+   r.   rv     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>.implrO   r   rH   rG   rx  ry  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   5  s
   zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.barr%   r&   c                      r   r3   r+   r+   r   r+   r.   bar_impl<  r6   zLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_implc                      rn  r3   r+   r+   r   r+   r.   r   @  s   
zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.fooT)recordr   )r   r   warningscatch_warningssimplefilterr   NumbaIRAssumptionWarningr$   r[   py_funcrd   )rB   r  r   wr+   r   r.   %test_inline_always_ssa_scope_validity2  s   
z:TestOverloadInlining.test_inline_always_ssa_scope_validityN)rn   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.   rq    s.    ',3

28*rq  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 r3   )r   superr  setUpr.  	__class__r+   r.   r  O  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 )NrI   r   rK   rV   r   r"   r[   r\   r]   r^   r;   rd   r<   listrg   ro   r  )rB   rp   rq   expectedrH   expects_inlinedru   rv   rw   r  allcallsr+   r+   r.   check_methodS     z+TestOverloadMethsAttrsInlining.check_methodc                 C   r  )NrI   r   rK   rh   r	  )rB   rp   rq   r  rH   r  ru   rv   rw   getattrsallgetattrsr+   r+   r.   check_getattri  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.   get  rK  zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.getNNr+   )r   r   r  r  r+   r+   r.   _get_inlined_method     
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        zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r  r   N)r  Nr  r*   )rp   rq   r  rH   r  r   r   r  )rB   r   r   r  r   r+   r+   r.   (test_overload_method_default_args_always  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   r3   r+   r  should_inliner+   r.   	costmodel  rs  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    r2   zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr+   )r   r   r  r+   r+   r.   r    rw  zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |  dS Nr   r  r  r+   r+   r.   r     rK  zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)r$  r   r*   rp   rq   r  rH   r  r  )rB   r"  r!  r   r   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(  Nr9   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   rA  r  r+   r  r+   r+   r.   r}    r  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   r0  )Nc                  W   rA  NFr+   r  r+   r+   r.   r}    r  z[TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline.<locals>.<lambda>Fr*  r+  r.  r+   r+   r.   *test_overload_method_cost_driven_no_inline  r2  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   rA  )NMY INLINED ATTRSr+   r  r+   r+   r.   r    rs  z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.getr+   )r   r  r+   r+   r.   _get_inlineme  rw  zRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlinemec                 S   s   | j S r3   )r5  r  r+   r+   r.   r     r   zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foor6  r*   r&  )r   r   r  )rB   r"  r!  r   r   r7  r   r+   r+   r.   make_overload_attribute_test  s   

z;TestOverloadMethsAttrsInlining.make_overload_attribute_testc                 C   r(  r)  r8  r.  r+   r+   r.   test_overload_attribute_always  r-  z=TestOverloadMethsAttrsInlining.test_overload_attribute_alwaysc                 C   r(  r.  r9  r.  r+   r+   r.   test_overload_attribute_never  r-  z<TestOverloadMethsAttrsInlining.test_overload_attribute_neverc                 C   r0  )Nc                  W   rA  r  r+   r  r+   r+   r.   r}    r  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>Tr*  r9  r.  r+   r+   r.   -test_overload_attribute_costmodel_must_inline  r2  zLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inlinec                 C   r0  )Nc                  W   rA  r3  r+   r  r+   r+   r.   r}    r  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>Fr*  r9  r.  r+   r+   r.   +test_overload_attribute_costmodel_no_inline  r2  zJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline)T)rn   r~   r   r  r  r  r  r'  r,  r/  r1  r4  r8  r:  r;  r<  r=  __classcell__r+   r+   r  r.   r  N  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   r3   r+   r  r+   r+   r.   overload_len  r6   zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t g dS )N)r   r   rF  )rd   r+   r+   r+   r.   r     r  zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implrd   Fr   )r   rd   r|   )rB   r@  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 r3   r+   r  r+   r+   r.   r     r  z1TestGeneralInlining.test_with_kwargs.<locals>.foor%   r&   c                 S   s   ddd}|S )Nr   r   c                 S   rB  r3   r+   r  r+   r+   r.   r     r  zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.implr   r   r+   )r   r   r   r   r+   r+   r.   r~    r  z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      r  )Nr   r   r   r+   r+   r   r+   r.   r     r  z2TestGeneralInlining.test_with_kwargs.<locals>.implr   Tr   rC  rx  r  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   rP  c                 S   r{  r3   r+   r  r+   r+   r.   r     r0   z2TestGeneralInlining.test_with_kwargs2.<locals>.barrJ  r   c                    s    | | ddS )Nr   rD  r+   r  r   r+   r.   r     rS  z3TestGeneralInlining.test_with_kwargs2.<locals>.implr   rF  r   Tr   )r   rP  )rJ  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+   r_  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>.implrO   r   Tr  r  r   r   r+   r   r.   test_inlining_optional_constant  s   z3TestGeneralInlining.test_inlining_optional_constantN)rn   r~   r   rA  rE  rF  rG  r+   r+   r+   r.   r?    s
    r?  c                   @   rl  )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%   r9   c                 S   s   | S r3   r+   r,   r+   r+   r.   
cost_model:  rs  z0TestInlineOptions.test_basic.<locals>.cost_model)	r   r  is_always_inlinero   is_never_inlinehas_cost_modelr[   r@   assertIs)rB   r%   r9   rI  modelr+   r+   r.   
test_basic-  s    zTestInlineOptions.test_basicN)rn   r~   r   rO  r+   r+   r+   r.   rH  +  rp  rH  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   r3   r+   )r  r   r+   r+   r.   output_factoryF  rs  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   rS  r+   r+   r.   r   L  s   zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r>   r   npytypesArray)r  r   r   r+   r+   r.   ol_output_factoryI  s   z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)nogilc                    s    | | j }|S r3   r   )r  outrQ  r+   r.   rm   R  s   z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd  | jdS rR  )r   r   rS  r   r  r+   r+   r.   fn2W  s   z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r   r   r   r   r   )r   r   r   ones)rB   rV  rm   r[  r+   rY  r.   test_issue4691E  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
ValueErrorrZ  r+   r+   r.   inlining`  s   
z5TestInlineMiscIssues.test_issue4693.<locals>.inliningc                    r  r3   r+   rZ  r`  r+   r.   rm   g  r0   z/TestInlineMiscIssues.test_issue4693.<locals>.fnr   )r   r   r   )rB   rm   r+   ra  r.   test_issue4693^  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)r_  )msgr+   r+   r.   r`  p  s   z5TestInlineMiscIssues.test_issue5476.<locals>.inliningc                      r   r3   r+   r+   ra  r+   r.   rm   u  r  z/TestInlineMiscIssues.test_issue5476.<locals>.fnrc  )r   r  r_  r  rY   r  )rB   rm   raisesr+   ra  r.   test_issue5476m  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 r3   datarB   rh  r+   r+   r.   __init__  rK  z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__c                    s
    |j  S r3   rg  rB   otherrg  r+   r.   div  rK  z6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divN)rn   r~   r   rj  rm  r+   rg  r+   r.   r     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())rk   rh  r  rj  ri  r  r+   r.   rj    s   z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__rn   r~   r   rj  r>  r+   r+   r  r.   r     s    r   c                       rn  )z;TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                    s    d|j fg}t ||| d S )Nrh  rp  )rB   dmmfe_typemembersr  r+   r.   rj    s   zDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__rq  r+   r+   r  r.   DummyTypeModel  s    ru  rh  _datac                    s"   dd } |}t ||}||fS )Nc                 S   sF   |j }|\}t|| |}||_| jr| j||jd | | S r  )	return_typer
   create_struct_proxyrh  
enable_nrtnrtincrefrq   	_getvalue)r   buildersigrq   r   rh  r  r+   r+   r.   codegen  s   zHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegenr   )	typingctxrh  r  ret_typr~  )r   r+   r.   
init_dummy  s   
z7TestInlineMiscIssues.test_issue5792.<locals>.init_dummyr%   r&   c                    r  )Nc                    r  r3   r+   rg  r  r+   r.   ctor  r2   zITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctorr+   )rh  r  r  r+   r.   dummy_overload  s   z;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overloadrm  c                 S   r#  )Nc                 S   s   | j |j  S r3   )rv  rk  r+   r+   r.   r     r  zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.implr+   )rB   rl  r   r+   r+   r.   div_overload  s   z9TestInlineMiscIssues.test_issue5792.<locals>.div_overloadc                    s    | } |}| |S r3   )rm  )rh  
other_datar  rl  )r   r+   r.   rp     s   
z6TestInlineMiscIssues.test_issue5792.<locals>.test_implg      ?rX  )r   Typer   r   StructModelr   r   r   r   r   r[   )rB   ru  r  r  rp   r  resr+   )r   r   rh  r  r.   test_issue5792~  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                   @   rl  )z;TestInlineMiscIssues.test_issue5824.<locals>.CustomCompilerc                 S   s&   t | j}|tt |  |gS r3   )r   define_nopython_pipelinestateadd_pass_afterr   finalize)rB   pmr+   r+   r.   define_pipelines  s   zLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelinesN)rn   r~   r   r  r+   r+   r+   r.   CustomCompiler  rp  r  c                 S   r   r3   r+   r,   r+   r+   r.   r     rs  z0TestInlineMiscIssues.test_issue5824.<locals>.barr%   r&   c                 S   r  )Nc                 S   r(   )Ng?r+   r,   r+   r+   r.   r     r2   zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.implr  r  r+   r+   r.   ol_bar  r  z3TestInlineMiscIssues.test_issue5824.<locals>.ol_barrI   c                    s    |  | fS r3   r+   r   r   r+   r.   r     r`  z0TestInlineMiscIssues.test_issue5824.<locals>.foor   )皙&@r  N)r   r   r   r[   )rB   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   rS  )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   rS  r   r  )r   r   r-   r+   r+   r.   foo_bad  s   z4TestInlineMiscIssues.test_issue7380.<locals>.foo_badz Overwrite of parallel loop index)r   r   r\  assertPreciseEqual	ones_liker  r   UnsupportedRewriteErrorr  rY   r  )rB   r   r   r  r   r+   r   r.   test_issue7380  s   	



z#TestInlineMiscIssues.test_issue7380N)
rn   r~   r   r]  rb  rf  r  r  r#   r  r+   r+   r+   r.   rP  C  s    FrP  __main__)A__doc__r  r  	itertoolsr   numpyr   r  r   r   r   r   
numba.corer   r   r	   r
   r   numba.core.extendingr   r   r   r   r   r   r   r   r   r   r   numba.core.datamodel.modelsr   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   r5   r7   r   r   r   rm  rq  r  r?  rH  rP  rn   mainr+   r+   r+   r.   <module>   sR    4$


W&  L    A "< E