U
    9%e                     @   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 ))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   s   | d S N    xr&   r&   [/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_ir_inlining.py_global_func&   s    r*   c                 C   s   | d S r$   r&   r'   r&   r&   r)   _global_defn,   s    r+   c                 C   s   t S Nr+   r'   r&   r&   r)   _global_overload0   s    r.   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 ]2}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valueZFreeVar)selffunc_irblkstmtr&   r&   r)   sentinel_17_cost_model>   s    
z#InliningBase.sentinel_17_cost_modelc                 O   s  | dd }|st| dd}|r(t| D ]$\}}t|tsFtt|ts0tq0ttd|}| || ||  |j	|j
d  jd }	t|	j|	_| jrtddd	 |	  |d
kr| t|	j| tt|	j }
dd |
 D }|st| D ]r\}}d}|D ]P}t|dddkrL|	|j}||j|kO }nt|r||jj|kO }q| ||k q
|	S )Ninline_expectblock_countr%   Zpipeline_classr   preserved_irZFIRP   -SKIPc                 S   s   g | ]}|qS r&   r&   .0r(   r&   r&   r)   
<listcomp>e   s     z&InliningBase.check.<locals>.<listcomp>Fopcall) popAssertionErroritemsr6   strboolr   r   assertEqual	overloads
signaturesmetadatar	   Zsimplify_CFGr3   _DEBUGprintcenterdumplennextiterr4   
find_exprsgetattrZget_definitionfuncnameZis_operator_or_getitemfn__name__assertFalse)r9   	test_implargskwargsr>   r?   kvj_funcfirblockexprsfoundexprZ	func_defnr&   r&   r)   checkK   s:    
zInliningBase.checkN)r_   
__module____qualname__rS   inline_opt_as_boolr=   rl   r&   r&   r&   r)   r/   5   s   
r/     c                     s   d d fdd	} | S )Ni                   ?c                    s<  | | }|  7 } t j|t jd}|| }d| }d}	d}
t |dkr || }t d|d }t || ||  }t |d dk rt| D ]}|	d7 }	t |	dk r qq|	|d 7 }	|| }g }tt|D ]J}|||  |dkrd}d}
|d	| kr|
|7 }
|
|d t	 7 }
q|| | |
 | |  |	 S )
Ndtyperr   r   r%            {   z   )
npzerosZ	complex64absZarangesqrtrangerW   append_GLOBAL)abcdefghintrd   lmopqrsZ_FREEVARr&   r)   foo{   s8    
z_gen_involved.<locals>.foo)rq   rr   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                    s4   t dddd   fdd}| j|ddid	 d S )
Nr1   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z9TestFunctionInlining.test_basic_inline_never.<locals>.fooc                      s     S r,   r&   r&   r   r&   r)   impl   s    z:TestFunctionInlining.test_basic_inline_never.<locals>.implr   Fr>   r   rl   r9   r   r&   r   r)   test_basic_inline_never   s    
z,TestFunctionInlining.test_basic_inline_neverc                    s4   t dddd   fdd}| j|ddid	 d S )
Nr!   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z:TestFunctionInlining.test_basic_inline_always.<locals>.fooc                      s     S r,   r&   r&   r   r&   r)   r      s    z;TestFunctionInlining.test_basic_inline_always.<locals>.implr   Tr   r   r   r&   r   r)   test_basic_inline_always   s    
z-TestFunctionInlining.test_basic_inline_alwaysc                    s    fdd}d}t |||D ]l\}}}t|ddd t|ddd  t|dd	d
 | j| | j| | j| d}| j||d q d S )Nc                     s    }   } }| ||fS r,   r&   r(   yzbarbazr   r&   r)   r      s    z;TestFunctionInlining.test_basic_inline_combos.<locals>.implr0   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.fooc                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.barc                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.bazr   r   r   r   )r   r   ro   rl   )r9   r   opts
inline_foo
inline_bar
inline_bazr>   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   rq   r%   r&   r'   r   r&   r)   r      s    z7TestFunctionInlining.test_recursive_inline.<locals>.fooru   c                     s0   d}  dkr| d7 } d |  k r,| d8 } d S )Nr   r%   rw   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 ]Z\}}}||dd||dd	 ||d
d| j| | j| | j| d}| j||d q(d S )Nc                    s&    d t | d fdd}|S )Nrq   r"   c                      s    d fS Nru   r&   r&   r   r&   r)   r\      s    zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r#   r(   r   r\   r&   r   r)   factory   s    z;TestFunctionInlining.test_freevar_bindings.<locals>.factoryc                     s    }   } }| ||fS r,   r&   r   r   r&   r)   r      s    z8TestFunctionInlining.test_freevar_bindings.<locals>.implr0   
         (   2   <   r   r   r   ro   rl   )r9   r   r   r   r   r   r   r>   r&   r   r)   test_freevar_bindings   s    z*TestFunctionInlining.test_freevar_bindingsc                 C   s   dd }| j |ddid d S )Nc                  S   s   d} t | S N   )r*   r'   r&   r&   r)   r     s    z6TestFunctionInlining.test_global_binding.<locals>.implr*   Tr   rl   r   r&   r&   r)   test_global_binding  s    z(TestFunctionInlining.test_global_bindingc                    s.   ddl m   fdd}| j|ddid d S )Nr%   r   c                     s   t d }   | fS Nrv   _GLOBAL1r   r   r&   r)   r     s    zBTestFunctionInlining.test_inline_from_another_module.<locals>.implr   Tr   )inlining_usecasesr   rl   r   r&   r   r)   test_inline_from_another_module
  s    z4TestFunctionInlining.test_inline_from_another_modulec                    s4   dd l m  m   fdd}| j|ddid d S )Nr   c                     s   t d }   | fS r   )r   r   r   Ziucr&   r)   r     s    zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   numba.tests.inlining_usecasestestsr   rl   r   r&   r   r)   )test_inline_from_another_module_w_getattr  s    z>TestFunctionInlining.test_inline_from_another_module_w_getattrc                    s6   dd l }dd lm   fdd}| j|ddid d S )Nr   c                     s   t d }  j | fS r   )r   r   r   r   ntr&   r)   r   #  s    zNTestFunctionInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r   Znumba.testsr   rl   r9   numbar   r&   r   r)   +test_inline_from_another_module_w_2_getattr  s    z@TestFunctionInlining.test_inline_from_another_module_w_2_getattrc                    s0   dd }|   fdd}| j |ddid d S )Nc                     s&   ddl m  tdd fdd} | S )Nr%   r   r!   r"   c                      s     S r,   r&   r&   r   r&   r)   tmp.  s    z]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r&   r   r)   r   +  s    zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     s   t d }   | fS r   r   r   r   r&   r)   r   5  s    zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r9   r   r   r&   r   r)   *test_inline_from_another_module_as_freevar)  s    z?TestFunctionInlining.test_inline_from_another_module_as_freevarc                    s8   ddl m   fdd}|dd}| j|ddid	 d S )
Nr%   baz_factoryc                    s     fdd}|S )Nc                     s   t    }  |  fS r,   r   r   r   r   r   r&   r)   r   B  s    zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr&   r   r   r   r   r   r)   gen?  s    zKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r   rl   r9   r   r   r&   r   r)   )test_inline_w_freevar_from_another_module;  s    
z>TestFunctionInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ]D\t |dfddfd	d
}j|dddkid qdD ]D\t |dfdd  fdd
}j|dddkid qfd S )Nc                    s&     | tj  | jd  |S NrI   assertIsInstancer   ExprrO   rH   r=   rk   Zcaller_infoZcallee_infor9   r&   r)   s17_caller_modelL  s    zCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelc                    s&     | tj  | jd  |S r   r   r   r   r&   r)   s17_callee_modelQ  s    zCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_model)   r2   r2   r   r"   c                      s    S r,   r&   r&   calleer&   r)   r   Y  s    z6TestFunctionInlining.test_inlining_models.<locals>.fooc                    s   |   } }|d |fS r   r&   r   r(   r   callerr   r&   r)   r   ]  s    z7TestFunctionInlining.test_inlining_models.<locals>.implr   r   r2   r   c                      s    S r,   r&   r&   r   r&   r)   r   g  s    z6TestFunctionInlining.test_inlining_models.<locals>.barc                    s   |  }  }|d |fS r   r&   r   r   r   r&   r)   r   k  s    r   r   )r9   r   r   r   r&   r   r   r   r   r9   r)   test_inlining_modelsJ  s    z)TestFunctionInlining.test_inlining_modelsc                    s6   t dddd   fdd}| j|ddid	d
 d S )Nr!   r"   c                   S   s   dS Nrq   r&   r&   r&   r&   r)   r   s  s    z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dD ]}|   7 } q| S )N        rw   r~   )accr   r   r&   r)   r   w  s    z:TestFunctionInlining.test_inline_inside_loop.<locals>.implr   T   r>   r?   r   r   r&   r   r)   test_inline_inside_loopr  s    
z,TestFunctionInlining.test_inline_inside_loopc                    s6   t dddd   fdd}| j|ddid	d
 d S )Nr!   r"   c                   S   s   dS r   r&   r&   r&   r&   r)   r     s    zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.fooc                     s,   d} t dD ]} fdd}| | 7 } q| S )Nr   rw   c                      s
     d S N   r&   r&   r   r&   r)   r     s    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                    s6   t dddd   fdd}| j|ddid	d
 d S )Nr!   r"   c                    s    fdd}| d S )Nc                      s   d  S r   r&   r&   r   r&   r)   r     s    zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.baz   r&   )r   r   r&   r   r)   r     s    zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.fooc                     s   d  fdd} |  d S )N	   c                    s    d |  S r   r&   r'   r   r   r&   r)   r     s    zcTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl.<locals>.barrv   r&   r   r   r   r)   r     s    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	krZd
}n tjdkrjd}ntd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  s    zCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.bizr          @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   rq   r%   c                    s   d  |   S r   r&   r'   r   r   r&   r)   r     s    zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazr   rv   r   )r   r   r   r   )r   r   r  r)   r     s    z6TestFunctionInlining.test_inline_involved.<locals>.fooc                     s   d  fdd} |  d S )Nr   c                    s    d |  S r   r&   r'   r   r&   r)   r     s    zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.barrv   r&   r   r   r   r)   r     s    z7TestFunctionInlining.test_inline_involved.<locals>.impl))ru   r   )ru   r   !   ))ru   r   )ru   r   #   zUnsupported Python version: T)r   r   r   r   )r   r   r   Z	PYVERSION
ValueErrorrl   )r9   r   bcr&   )r   r   r   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 ]4}t	|t
jrht	|jt
jrh|jjdkrh|| qhq^| t|d |D ]2}|jj}|  | j}| d}	| ||	 qd S )Nr!   r"   c                 S   s   d}d}|| |  S )Nrw   r   r&   r   r&   r&   r)   r     s    z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.barr@   c                    s    |  |fS r,   r&   r   r   r   r&   r)   r     s    z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foor   r   )   r  r   rA   rw   rv   z__locals__bar_v[0-9]+.x)r   r   rO   rP   rQ   rR   r3   r4   r5   r6   r   r7   r8   Constr   rW   targetr]   idlstriprm   assertRegex)
r9   r   r:   storer;   r<   r   r]   basenameregexr&   r   r)   test_inline_renaming_scheme  s&    


z0TestFunctionInlining.test_inline_renaming_schemeN)r_   rm   rn   r   r   r   r   skipr   r   r   r   r   r   r   r   r   r   r   r   r  r  r&   r&   r&   r)   r      s$   		


(+r   c                   @   s   e Zd Zdd ZdS )TestRegisterJitableInliningc                    s4   t dddd   fdd}| j|ddid	 d S )
Nr!   r"   c                   S   s   dS r$   r&   r&   r&   r&   r)   r     s    zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.fooc                      s
      d S r,   r&   r&   r   r&   r)   r     s    zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.implr   Tr   )r   rl   r   r&   r   r)   test_register_jitable_inlines  s    
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)r_   rm   rn   r  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	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                    s>   dd  t  dddd } fdd}| j|d	d
id d S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r      s    z9TestOverloadInlining.test_basic_inline_never.<locals>.foor1   r"   c                  S   s   dd } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   foo_impl  s    zTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_implr&   )r  r&   r&   r)   foo_overload  s    zBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overloadc                      s     S r,   r&   r&   r   r&   r)   r   	  s    z:TestOverloadInlining.test_basic_inline_never.<locals>.implr   Fr   r   rl   r9   r  r   r&   r   r)   r     s
    

z,TestOverloadInlining.test_basic_inline_neverc                    s>   dd  t  dddd } fdd}| j|d	d
id d S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    z:TestOverloadInlining.test_basic_inline_always.<locals>.foor!   r"   c                  S   s   dd } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.implr&   r   r&   r&   r)   r    s    zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overloadc                      s     S r,   r&   r&   r   r&   r)   r     s    z;TestOverloadInlining.test_basic_inline_always.<locals>.implr   Tr   r  r  r&   r   r)   r     s
    

z-TestOverloadInlining.test_basic_inline_alwaysc                    s>   dd  t  dddd } fdd}| j|d	d
id d S )Nc                 S   s   | | S r,   r&   r  r&   r&   r)   r      s    zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foor!   r"   c                 S   s   dd S )Nc                 S   s   | | S r,   r&   r  r&   r&   r)   <lambda>%      z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>r&   r  r&   r&   r)   overload_foo#  s    zKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_fooc                      s    dddS )Nru   r   r   r&   r&   r   r&   r)   r   '  s    zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.implr   Tr   r  r9   r  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.  s    zETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inlinec                 S   s   | 
 S r,   r&   r'   r&   r&   r)   impl_noinline1  s    zGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinlinec                 S   s   dS NTr&   r'   r&   r&   r)   r  4  r  zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>__neg____pos__r!   r"   c                    s   t |  rS d S r,   r6   r'   	DummyTypeZdummy_unary_implr&   r)   overload_dummy_neg9  s    
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_negr1   c                    s   t |  rS d S r,   r%  r'   r&  r&   r)   overload_dummy_pos>  s    
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_posnegTr   posF)make_dummy_typesetattrr   operatorr*  r+  rl   )r9   r   r!  Dummyr(  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   H  s    zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlinec                 S   s   | dkS r$   r&   r'   r&   r&   r)   r!  K  s    zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlinec                 S   s   dS r"  r&   r  r&   r&   r)   r  P  r  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>__eq____ne__r!   r"   c                    s   t |  rS d S r,   r%  r  r'  Zdummy_binop_implr&   r)   overload_dummy_eqT  s    
zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqr1   c                    s   t |  rS d S r,   r%  r  r3  r&   r)   overload_dummy_neY  s    
zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neeqTr   neF)r,  r-  r   r.  r6  r7  rl   )r9   r   r!  r/  r4  r5  r&   r3  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)   r   c  s    zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinec                 S   s   | d8 } d S r$   r&   r'   r&   r&   r)   r!  f  s    zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlinec                 S   s   dS r"  r&   r  r&   r&   r)   r  k  r  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>__iadd____isub__r!   r"   c                    s   t |  rS d S r,   r%  r  r'  Zdummy_inplace_binop_implr&   r)   overload_dummy_iaddo  s    
zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddr1   c                    s   t |  rS d S r,   r%  r  r;  r&   r)   overload_dummy_isubt  s    
zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubc                    s   t |  rS d S r,   r%  r  r;  r&   r)   overload_dummy_add{  s    
zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_addc                    s   t |  rS d S r,   r%  r  r;  r&   r)   overload_dummy_sub  s    
zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_subiaddTr   isubF)	r,  r-  r   r.  r@  rA  addsubrl   )r9   r   r!  r/  r<  r=  r>  r?  r&   r;  r)   #test_inline_operators_inplace_binopa  s     z8TestOverloadInlining.test_inline_operators_inplace_binopc                    s~   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   | | S r,   r&   r(   idxr&   r&   r)   r     s    zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.implc                 S   s   | d S r$   r&   r'   r&   r&   r)   impl_static_getitem  s    zVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitemc                 S   s   d S r,   r&   objrF  r&   r&   r)   r    r  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>__getitem__r!   r"   c                    s   t |  rS d S r,   r%  rH  r'  Zdummy_getitem_implr&   r)   overload_dummy_getitem  s    
zYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitemr%   getitemTr   r,  r-  r   r.  rM  rl   r9   r   rG  r/  rL  r&   rK  r)   $test_inline_always_operators_getitem  s    
z9TestOverloadInlining.test_inline_always_operators_getitemc                    s~   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   | | S r,   r&   rE  r&   r&   r)   r     s    zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   s   | d S r$   r&   r'   r&   r&   r)   rG    s    zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   s   d S r,   r&   rH  r&   r&   r)   r    r  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>rJ  r1   r"   c                    s   t |  rS d S r,   r%  rH  rK  r&   r)   rL    s    
zXTestOverloadInlining.test_inline_never_operators_getitem.<locals>.overload_dummy_getitemr%   rM  Fr   rN  rO  r&   rK  r)   #test_inline_never_operators_getitem  s    
z8TestOverloadInlining.test_inline_never_operators_getitemc              	      sf   dd  t  dddd } fdd}| t}| j|d	d
id W 5 Q R X | dt|j d S )Nc                 W   s   | |d  S Nr   r&   r  r&   r&   r)   r     s    z;TestOverloadInlining.test_inline_stararg_error.<locals>.foor!   r"   c                 W   s   dd S )Nc                 W   s   | |d  S rR  r&   r  r&   r&   r)   r    r  zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>r&   r  r&   r&   r)   r    s    zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_fooc                      s    dddS )Nru   rw   r&   r&   r   r&   r)   r     s    z<TestOverloadInlining.test_inline_stararg_error.<locals>.implr   Tr   z-Stararg not supported in inliner for arg 1 *b)r   assertRaisesNotImplementedErrorrl   assertInrM   	exception)r9   r  r   r   r&   r   r)   test_inline_stararg_error  s    

z.TestOverloadInlining.test_inline_stararg_errorc           
         s    fdd}d}t |||D ]\}}}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                     s    }   } }| ||fS r,   r&   r   r   r&   r)   r     s    z;TestOverloadInlining.test_basic_inline_combos.<locals>.implr0   c                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.fooc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.barc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.bazr"   c                  S   s   dd } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.implr&   r  r&   r&   r)   r    s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overloadc                  S   s   dd } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.implr&   r  r&   r&   r)   bar_overload  s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overloadc                  S   s   dd } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r     s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.implr&   r  r&   r&   r)   baz_overload  s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overloadr   r   )r   r   ro   rl   )
r9   r   r   r   r   r   r  rX  rY  r>   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 | j| | j| | j| d}| j||d q d S )Nc                     s    }   } }| ||fS r,   r&   r   r   r&   r)   r     s    z8TestOverloadInlining.test_freevar_bindings.<locals>.implr0   c                  S   s   d} d}| d }| |d |fS )Nr   r   rq   ru   r&   r   r&   r&   r)   r     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.fooc                  S   s   d} d}| d }| |d |fS )Nr   r   rq   ru   r&   r   r&   r&   r)   r   	  s    z7TestOverloadInlining.test_freevar_bindings.<locals>.barc                  S   s   d} d}| d }| |d |fS )Nr   rB   rq   ru   r&   r   r&   r&   r)   r     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.bazc                    s(    d t | |d fdd}d S )Nrq   r"   c                     s    fdd} | S )Nc                      s    d fS r   r&   r&   r   r&   r)   r     s    zWTestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func.<locals>.implr&   r  r   r&   r)   r\     s    zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r
  r(   r   r#   r\   r&   r   r)   r     s    
z;TestOverloadInlining.test_freevar_bindings.<locals>.factoryr   r   r"   r   r   r   rB   r   r   )Nr   )r9   r   r   r   r   r   r   r>   r&   r   r)   r     s    
	z*TestOverloadInlining.test_freevar_bindingsc                 C   s   dd }| j |ddid d S )Nc                  S   s   d} t | S r   r-   r   r&   r&   r)   r   *  s    z?TestOverloadInlining.test_global_overload_binding.<locals>.implr+   Tr   r   r   r&   r&   r)   test_global_overload_binding(  s    z1TestOverloadInlining.test_global_overload_bindingc                    s.   ddl m   fdd}| j|ddid d S )Nr%   r   c                     s   t d }   | fS r   r   r   r   r&   r)   r   4  s    zBTestOverloadInlining.test_inline_from_another_module.<locals>.implr   Tr   )r   r   rl   r   r&   r   r)   r   0  s    z4TestOverloadInlining.test_inline_from_another_modulec                    s4   dd l m  m   fdd}| j|ddid d S )Nr   c                     s   t d }   | fS r   )r   r   r   r   r&   r)   r   >  s    zLTestOverloadInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   r   r   r&   r   r)   r   :  s    z>TestOverloadInlining.test_inline_from_another_module_w_getattrc                    s6   dd l }dd lm   fdd}| j|ddid d S )Nr   c                     s   t d }  j | fS r   )r   r   r   r   r   r&   r)   r   I  s    zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r   r   r&   r   r)   r   D  s    z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrc                    s0   dd }|   fdd}| j |ddid d S )Nc                     s&   ddl m  tdd fdd} | S )Nr%   r   r!   r"   c                      s     S r,   r&   r&   r   r&   r)   r   T  s    z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r&   r   r)   r   Q  s    zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     s   t d }   | fS r   r   r   Zbopr&   r)   r   [  s    zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r   r&   r[  r)   r   O  s    z?TestOverloadInlining.test_inline_from_another_module_as_freevarc                    s8   ddl m   fdd}|dd}| j|ddid	 d S )
Nr%   bop_factoryc                    s     fdd}|S )Nc                     s   t    }  |  fS r,   r   r   r   r&   r)   r   h  s    zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr&   r   r\  r   r)   r   e  s    zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r]  rl   r   r&   r\  r)   r   a  s    
z>TestOverloadInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ]R\fddt |dfd	d
}fdd}j|dddkid qdD ]R\fdd t  |dfdd} fdd}j|dddkid qtd S )Nc                    s(     | tj  | jd  |jS r   r   r   r   rO   rH   r=   r:   r   r   r&   r)   r   r  s    zCTestOverloadInlining.test_inlining_models.<locals>.s17_caller_modelc                    s(     | tj  | jd  |jS r   r^  r   r   r&   r)   r   w  s    zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_model))r   r   r   c                      s    S r,   r&   r&   r   r&   r)   r     s    z6TestOverloadInlining.test_inlining_models.<locals>.foor"   c                     s    fdd} | S )Nc                      s    S r,   r&   r&   r   r&   r)   r     s    zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.implr&   r  r   r&   r)   foo_ol  s    z9TestOverloadInlining.test_inlining_models.<locals>.foo_olc                    s   |   } }|d |fS r   r&   r   r   r&   r)   r     s    z7TestOverloadInlining.test_inlining_models.<locals>.implr   r   r2   r   )r   )r   r   c                      s    S r,   r&   r&   r   r&   r)   r     s    z6TestOverloadInlining.test_inlining_models.<locals>.barc                     s    fdd} | S )Nc                      s    S r,   r&   r&   r   r&   r)   r     s    zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.implr&   r  r   r&   r)   bar_ol  s    z9TestOverloadInlining.test_inlining_models.<locals>.bar_olc                    s   |  }  }|d |fS r   r&   r   r   r&   r)   r     s    r   r  )r9   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 qd S )Nc                 S   s$   t t| tjr| d S | d S d S )Nrp   r%   )r6   r   r   Floatr'   r&   r&   r)   r     s    z_TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.barr!   r"   c                 S   s   t | tjrdd }|S d S )Nc                 S   s   | d S r$   r&   r'   r&   r&   r)   r     s    ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol.<locals>.implr6   r   Integerr(   r   r&   r&   r)   
bar_int_ol  s    zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_olr1   c                 S   s   t | tjrdd }|S d S )Nc                 S   s   | d S )Nrp   r&   r'   r&   r&   r)   r     s    zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl)r6   r   ra  rd  r&   r&   r)   bar_float_ol  s    zhTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_olc                  W   s   dS r"  r&   rb   r&   r&   r)   always_inline_cost_model  s    ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.always_inline_cost_modelc                 S   s   t | tjrdd }|S d S )Nc                 S   s   | d S r$   r&   r'   r&   r&   r)   r     s    zxTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol.<locals>.impl)r6   r   Complexrd  r&   r&   r)   bar_complex_ol  s    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   s   g | ]}|qS r&   r&   rE   r&   r&   r)   rG     s     zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.<listcomp>rI   )rH   c                 S   s&   g | ]}t t|d dtjr|jqS )r8   N)r6   r[   r   r	  r8   rE   r&   r&   r)   rG     s    rp   )r   rl   rX   rY   r3   rL   rZ   
assertTruerW   Z
find_instsr   r7   ZassertNotEqualr8   )r9   re  rf  rh  rj  r   rg   rh   callsZ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krDdd }|S d S )	Nc                 S   s   t | S r,   )r   rs   r&   r&   r)   foo_noop  s    znTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_nooprM   c                 S   s   dS Nr   r&   rs   r&   r&   r)   foo_as_str_impl  s    zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl)int64Zfloat64c                 S   s   dS Nr   r&   rs   r&   r&   r)   foo_as_num_impl  s    zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_num_impl)r6   r   ZStringLiteralZliteral_value)rt   rp  rr  ru  r&   r&   r)   foo_ovld  s    

z\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovldc                 S   s   dS rq  r&   rs   r&   r&   r)   r     s    zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor!   r"   c                    s    | S r,   r&   rs   r   r&   r)   ra     s    z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_implrM   r   Tr   c                 S   s   dS rt  r&   rs   r&   r&   r)   r     s    rs  r  )r9   rv  ra   rt   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   s   dS r"  r&   Ar&   r&   r)   r   	  s    z8TestOverloadInlining.test_inline_always_ssa.<locals>.foor!   r"   c                    s    fdd}|S )Nc                    s6    }t t| D ] } }| | r(| | }||9 }q|S r,   )r~   rW   )ry  r   r   dummy
dummy_truer&   r)   r     s    
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr&   )ry  r   r{  r&   r)   r    s    zATestOverloadInlining.test_inline_always_ssa.<locals>.foo_overloadc                      s    t dddgS )NTF)rz   arrayr&   r   r&   r)   r     s    z9TestOverloadInlining.test_inline_always_ssa.<locals>.implrD   r   r?   r>   r  r  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 5 Q R X | t
|d d S )Nc                  S   s   d} | dkr| d } qdS )Nrw   r%   rv   r   r&   r   r&   r&   r)   r   !  s    
zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.barr!   r"   c                      s    S r,   r&   r&   r   r&   r)   bar_impl(  s    zLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_implc                      s
      d S r,   r&   r&   r   r&   r)   r   ,  s    zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.fooT)recordr   )r   r   warningscatch_warningssimplefilterr   ZNumbaIRAssumptionWarningr    rO   Zpy_funcrW   )r9   r  r   wr&   r   r)   %test_inline_always_ssa_scope_validity  s    
z:TestOverloadInlining.test_inline_always_ssa_scope_validityN)r_   rm   rn   r   r   r  r0  r8  rD  rP  rQ  rW  r   r   rZ  r   r   r   r   r   r   ro  rw  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   s   t td|}| || | |j|jd  jd }|j|_| t|j| |r||j D ]}t	|
d}	| |	 q\n0g }
|j D ]}|
t	|
d7 }
q| |
 d S )Nr@   r   rA   rI   r   r   rO   rP   rQ   rR   r3   rW   r4   listrZ   r`   rl  )r9   ra   rb   expectedr?   expects_inlinedrf   rg   rh   rm  Zallcallsr&   r&   r)   check_method?  s    z+TestOverloadMethsAttrsInlining.check_methodc                 C   s   t td|}| || | |j|jd  jd }|j|_| t|j| |r||j D ]}t	|
d}	| |	 q\n0g }
|j D ]}|
t	|
d7 }
q| |
 d S )Nr@   r   rA   r[   r  )r9   ra   rb   r  r?   r  rf   rg   rh   ZgetattrsZallgetattrsr&   r&   r)   check_getattrU  s    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&   )rI  rn  val2r&   r&   r)   getp  s    zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.get)NNr&   )rI  rn  r  r  r&   r&   r)   _get_inlined_methodn  s    
zdTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_methodc                 S   s   |  d| j ddfS )Nrx   A  )r  r  rI  r&   r&   r)   r   t  s    zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r  rx   N)r  Nr  r%   )ra   rb   r  r?   )NNr,  r   r  )r9   r/  r'  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                     s    S r,   r&   rg  should_inliner&   r)   	costmodel  s    zKTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.costmodelr  r"   c                 S   s   dd }|S )Nc                 S   s   d|fS )NTHIS IS INLINED!!!r&   )rI  rn  r&   r&   r)   r    s    zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr&   )rI  rn  r  r&   r&   r)   r    s    zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |  dS Nrx   r  r  r&   r&   r)   r     s    zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)r  rx   r%   ra   rb   r  r?   r  r  )r9   r  r  r/  r'  r  r   r&   r  r)   make_overload_method_test  s    
z8TestOverloadMethsAttrsInlining.make_overload_method_testc                 C   s   | j ddd d S Nr!   Tr  r  r  r   r&   r&   r)   'test_overload_method_cost_driven_always  s    zFTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_alwaysc                 C   s   | j ddd d S Nr1   Fr  r  r   r&   r&   r)   &test_overload_method_cost_driven_never  s    zETestOverloadMethsAttrsInlining.test_overload_method_cost_driven_neverc                 C   s   | j dd dd d S )Nc                  W   s   dS r"  r&   rg  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  s    zKTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inlinec                 C   s   | j dd dd d S )Nc                  W   s   dS NFr&   rg  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  s    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   s   dS )NMY INLINED ATTRSr&   r  r&   r&   r)   r    s    z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.getr&   )rI  r  r&   r&   r)   _get_inlineme  s    zRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlinemec                 S   s   | j S r,   )r  r  r&   r&   r)   r     s    zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foor  r%   r  )r,  r   r  )r9   r  r  r/  r'  r  r   r&   r&   r)   make_overload_attribute_test  s    
z;TestOverloadMethsAttrsInlining.make_overload_attribute_testc                 C   s   | j ddd d S r  r  r   r&   r&   r)   test_overload_attribute_always  s    z=TestOverloadMethsAttrsInlining.test_overload_attribute_alwaysc                 C   s   | j ddd d S r  r  r   r&   r&   r)   test_overload_attribute_never  s    z<TestOverloadMethsAttrsInlining.test_overload_attribute_neverc                 C   s   | j dd dd d S )Nc                  W   s   dS r"  r&   rg  r&   r&   r)   r    r  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>Tr  r  r   r&   r&   r)   -test_overload_attribute_costmodel_must_inline  s    zLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inlinec                 C   s   | j dd dd d S )Nc                  W   s   dS r  r&   rg  r&   r&   r)   r    r  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>Fr  r  r   r&   r&   r)   +test_overload_attribute_costmodel_no_inline  s    zJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline)T)T)r_   rm   rn   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   s   d S r,   r&   rx  r&   r&   r)   overload_len  s    zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t dddgS )Nrv   ru   r   )rW   r&   r&   r&   r)   r     s    zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implrW   Fr   )r   rW   rl   )r9   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 )Nru   rw   c                 S   s   | | | S r,   r&   rk  r&   r&   r)   r     s    z1TestGeneralInlining.test_with_kwargs.<locals>.foor!   r"   c                 S   s   ddd}|S )Nru   rw   c                 S   s   | | | S r,   r&   rk  r&   r&   r)   r     s    zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.impl)ru   rw   r&   )r   r   r   r   r&   r&   r)   r    s    
z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      s    dddS )Nru   r   r   r&   r&   r   r&   r)   r     s    z2TestGeneralInlining.test_with_kwargs.<locals>.implr   Tr   )ru   rw   )ru   rw   r  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"   rq   r   c                 S   s   | | S r,   r&   rk  r&   r&   r)   r     s    z2TestGeneralInlining.test_with_kwargs2.<locals>.barr   rw   c                    s    | | ddS )Nr   r  r&   rk  r   r&   r)   r     s    z3TestGeneralInlining.test_with_kwargs2.<locals>.implru   r   r   Tr   )rq   r   )r   rw   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 k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 )Nrx   r  r   r&   r&   r   r&   r)   r     s    zATestGeneralInlining.test_inlining_optional_constant.<locals>.implrD   r   Tr~  )NNr   r   r&   r   r)   test_inlining_optional_constant  s    z3TestGeneralInlining.test_inlining_optional_constantN)r_   rm   rn   r  r  r  r  r&   r&   r&   r)   r    s   r  c                   @   s   e Zd Zdd ZdS )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!   r1   c                 S   s   | S r,   r&   r'   r&   r&   r)   
cost_model&  s    z0TestInlineOptions.test_basic.<locals>.cost_model)	r   rl  Zis_always_inliner`   Zis_never_inlineZhas_cost_modelrO   r8   ZassertIs)r9   r!   r1   r  modelr&   r&   r)   
test_basic  s     zTestInlineOptions.test_basicN)r_   rm   rn   r  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	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   s   d S r,   r&   )r}  rt   r&   r&   r)   output_factory2  s    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 Nru   rs   )shaperz   r{   )r}  rt   r  r&   r&   r)   r   8  s    zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r6   r   ZnpytypesZArray)r}  rt   r   r&   r&   r)   ol_output_factory5  s    z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)Znogilc                    s    | | j }|S r,   rs   )r}  outr  r&   r)   r^   >  s    z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd  | jdS r  )rz   r{   r  rt   r}  r&   r&   r)   fn2C  s    z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r   r   r   r   r   )r   r   rz   ones)r9   r  r^   r  r&   r  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)ndimr  r  r&   r&   r)   inliningL  s    
z5TestInlineMiscIssues.test_issue4693.<locals>.inliningc                    s    | S r,   r&   r  r  r&   r)   r^   S  s    z/TestInlineMiscIssues.test_issue4693.<locals>.fnr   )r   rz   r{   )r9   r^   r&   r  r)   test_issue4693J  s
    
z#TestInlineMiscIssues.test_issue4693c              	      sT   t dddd  t  fdd}| t}|  W 5 Q R X | dt|j d S )Nr!   r"   c                  S   s   d} t | d S )NSomething happened)r  )msgr&   r&   r)   r  \  s    z5TestInlineMiscIssues.test_issue5476.<locals>.inliningc                      s     S r,   r&   r&   r  r&   r)   r^   a  s    z/TestInlineMiscIssues.test_issue5476.<locals>.fnr  )r   rS  r  rU  rM   rV  )r9   r^   Zraisesr&   r  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r9   r  r&   r&   r)   __init__o  s    z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__c                    s
    |j  S r,   r  r9   otherr  r&   r)   divr  s    z6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divN)r_   rm   rn   r  r  r&   r  r&   r)   r/  n  s   r/  c                       s   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())r]   r  r  r  r  r  r&   r)   r  v  s    z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__r_   rm   rn   r  r  r&   r&   r  r)   r'  u  s   r'  c                       s   e Zd Z fddZ  ZS )z;TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                    s    d|j fg}t ||| d S )Nr  r  )r9   ZdmmZfe_typemembersr  r&   r)   r  |  s    zDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__r  r&   r&   r  r)   DummyTypeModelz  s   r  r  _datac                    s"   dd } |}t ||}||fS )Nc                 S   sF   |j }|\}t|| |}||_| jr>| j||jd | | S rR  )	return_typer
   Zcreate_struct_proxyr  Z
enable_nrtZnrtZincrefrb   Z	_getvalue)contextZbuildersigrb   typr  rz  r&   r&   r)   codegen  s    zHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegenr   )Z	typingctxr  r  Zret_typr  )r'  r&   r)   
init_dummy  s    
z7TestInlineMiscIssues.test_issue5792.<locals>.init_dummyr!   r"   c                    s    fdd}|S )Nc                    s    | S r,   r&   r  r  r&   r)   ctor  s    zITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctorr&   )r  r  r  r&   r)   dummy_overload  s    z;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overloadr  c                 S   s   dd }|S )Nc                 S   s   | j |j  S r,   )r  r  r&   r&   r)   r     s    zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.implr&   )r9   r  r   r&   r&   r)   div_overload  s    z9TestInlineMiscIssues.test_issue5792.<locals>.div_overloadc                    s    | } |}| |S r,   )r  )r  
other_datarz  r  )r/  r&   r)   ra     s    z6TestInlineMiscIssues.test_issue5792.<locals>.test_implg      ?r   )r   Typer   r   ZStructModelr   r   r   r   r   rO   )r9   r  r  r  ra   r  resr&   )r/  r'  r  r  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                   @   s   e Zd Zdd ZdS )z;TestInlineMiscIssues.test_issue5824.<locals>.CustomCompilerc                 S   s&   t | j}|tt |  |gS r,   )r   Zdefine_nopython_pipelinestateZadd_pass_afterr   finalize)r9   pmr&   r&   r)   define_pipelines  s    zLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelinesN)r_   rm   rn   r  r&   r&   r&   r)   CustomCompiler  s   r  c                 S   s   d S r,   r&   r'   r&   r&   r)   r     s    z0TestInlineMiscIssues.test_issue5824.<locals>.barr!   r"   c                 S   s   t | tjrdd }|S d S )Nc                 S   s   | d S )Ng?r&   r'   r&   r&   r)   r     s    zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.implrb  rd  r&   r&   r)   ol_bar  s    z3TestInlineMiscIssues.test_issue5824.<locals>.ol_barr@   c                    s    |  | fS r,   r&   r   r   r&   r)   r     s    z0TestInlineMiscIssues.test_issue5824.<locals>.foor   )皙&@r  N)r   r   r   rO   )r9   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 5 Q R X | 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 rR  )r   r  )r   r   r   r&   r)   r     s    z0TestInlineMiscIssues.test_issue7380.<locals>.foo)r   r   rv   c                 S   s@   t | jd D ],}| | }t|jD ]}||  d7  < q$qd S )Nr   r%   )r   r  r~   r  )r   r   r(   r&   r&   r)   foo_bad  s    z4TestInlineMiscIssues.test_issue7380.<locals>.foo_badz Overwrite of parallel loop index)r   rz   r  ZassertPreciseEqualZ	ones_likerS  r   ZUnsupportedRewriteErrorrU  rM   rV  )r9   r   r   r  r   r&   r   r)   test_issue7380  s    	


z#TestInlineMiscIssues.test_issue7380N)
r_   rm   rn   r  r  r  r  r  r   r  r&   r&   r&   r)   r  /  s   Fr  __main__)<__doc__r.  r  	itertoolsr   numpyrz   r   r   r   r   r   Z
numba.corer   r   r	   r
   r   r   Znumba.core.extendingr   r   r   r   r   r   r   r   Znumba.core.cpur   Znumba.core.compilerr   r   Znumba.core.typed_passesr   Znumba.core.typingr   Znumba.tests.supportr   r   r   r   r   r    r   r*   r+   r.   r/   r   r   r   r  r  r  r  r  r  r_   mainr&   r&   r&   r)   <module>   sL    (
 


@&  S    A "< E
