o
    i                     @   s  d Z ddlZddlZddlmZ ddlZddlmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZm Z  dd	l!m"Z" dd
l#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ dZ,edddd Z-dd Z.ee.dddd Z/G dd de&Z0dZ1dd Z2G dd de(e0Z3G dd de(e0Z4G dd de(e0Z5G d d! d!e0Z6G d"d# d#e(e0Z7G d$d% d%e&Z8G d&d' d'e&Z9e:d(kre';  dS dS ))zn
This tests the inline kwarg to @jit and @overload etc, it has nothing to do with
LLVM or low level inlining.
    N)product)njittypeof	literallyprange)typesirir_utilscgutilserrorsutils)overloadoverload_methodoverload_attributeregister_modelmodelsmake_attribute_wrapper	intrinsicregister_jitable)InlineOptions)DefaultPassBuilderCompilerBase)InlineOverloads	signature)TestCaseunittestMemoryLeakMixinIRPreservingTestPipelineskip_parfors_unsupportedignore_internal_warningsialwaysinlinec                 C      | d S N    xr'   r'   k/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_ir_inlining.py_global_func&      r+   c                 C   r$   r%   r'   r(   r'   r'   r*   _global_defn,      r-   c                 C   s   t S Nr-   r(   r'   r'   r*   _global_overload0      r1   c                   @   s*   e Zd ZdZdddZdd Zdd ZdS )	InliningBaseFTr!   neverc                 C   sN   |j  D ]}|jD ]}t|tjr#t|jtjr#|jjdkr#  dS q
qdS )N   TF)blocksvaluesbody
isinstancer   AssignvalueZFreeVar)selffunc_irblkstmtr'   r'   r*   sentinel_17_cost_model>   s   
z#InliningBase.sentinel_17_cost_modelc                 O   sx  | dd }|s
J | dd}|rJ | D ]\}}t|ts#J t|ts*J qttd|}| || ||  |j|j	d  j
d }	t|	j|	_| jr]tddd	 |	  |d
krj| t|	j| tt|	j }
dd |
 D }|sJ | D ]5\}}d}|D ]%}t|dddkr|	|j}||j|kO }qt|r||jj|kO }q| ||k q|	S )Ninline_expectblock_countr&   Zpipeline_classr   preserved_irZFIRP   -SKIPc                 S      g | ]}|qS r'   r'   .0r)   r'   r'   r*   
<listcomp>e       z&InliningBase.check.<locals>.<listcomp>Fopcall)popitemsr:   strboolr   r   assertEqual	overloads
signaturesmetadatar	   Zsimplify_CFGr7   _DEBUGprintcenterdumplennextiterr8   
find_exprsgetattrZget_definitionfuncnameZis_operator_or_getitemfn__name__assertFalse)r=   	test_implargskwargsrB   rC   kvj_funcfirblockexprsfoundexprZ	func_defnr'   r'   r*   checkK   s<   
zInliningBase.checkN)rd   
__module____qualname__rX   inline_opt_as_boolrA   rq   r'   r'   r'   r*   r3   5   s
    
r3     c                     s   d d fdd	} | S )Ni                   ?c                    s6  | | }|  7 } t j|t jd}|| }d| }d}	d}
t |dkr|| }t d|d }t || ||  }t |d dk r]t| D ]}|	d7 }	t |	dk rV nqG|	|d 7 }	|| }g }tt|D ]#}|||  |dkrd}d}
|d	| kr|
|7 }
|
|d t	 7 }
qi|| | |
 | |  |	 S )
Ndtyperw   r   r&            {   z   )
npzerosZ	complex64absZarangesqrtranger\   append_GLOBAL)abcdefghintri   lmopqrsZ_FREEVARr'   r*   foo{   s:   z_gen_involved.<locals>.foo)rv   rw   Nr'   r   r'   r   r*   _gen_involvedx   s    r   c                   @   s   e Zd Zdd Zdd Zdd Zeddd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%TestFunctionInliningc                    4   t dddd   fdd}| j|ddid	 d S )
Nr5   r"   c                   S      d S r/   r'   r'   r'   r'   r*   r      r2   z9TestFunctionInlining.test_basic_inline_never.<locals>.fooc                           S r/   r'   r'   r   r'   r*   impl      z:TestFunctionInlining.test_basic_inline_never.<locals>.implr   FrB   r   rq   r=   r   r'   r   r*   test_basic_inline_never      
z,TestFunctionInlining.test_basic_inline_neverc                    r   )
Nr!   r"   c                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_always.<locals>.fooc                      r   r/   r'   r'   r   r'   r*   r      r   z;TestFunctionInlining.test_basic_inline_always.<locals>.implr   Tr   r   r   r'   r   r*   test_basic_inline_always   r   z-TestFunctionInlining.test_basic_inline_alwaysc                    s    fdd}d}t |||D ]6\}}}t|ddd t|ddd  t|dd	d
 | j| | j| | j| d}| j||d qd S )Nc                         }   } }| ||fS r/   r'   r)   yzbarbazr   r'   r*   r         
z;TestFunctionInlining.test_basic_inline_combos.<locals>.implr4   r"   c                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.barc                   S   r   r/   r'   r'   r'   r'   r*   r      r2   z:TestFunctionInlining.test_basic_inline_combos.<locals>.bazr   r   r   r   )r   r   rt   rq   )r=   r   opts
inline_foo
inline_bar
inline_bazrB   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   rv   r&   r'   r(   r   r'   r*   r      s   z7TestFunctionInlining.test_recursive_inline.<locals>.foorz   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 )Nrv   r"   c                          d fS Nrz   r'   r'   r   r'   r*   ra      s   zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r#   r)   r   ra   r'   r   r*   factory   s   z;TestFunctionInlining.test_freevar_bindings.<locals>.factoryc                     r   r/   r'   r   r   r'   r*   r      r   z8TestFunctionInlining.test_freevar_bindings.<locals>.implr4   
         (   2   <   r   r   r   rt   rq   )r=   r   r   r   r   r   r   rB   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   rq   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   rq   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   Ziucr'   r*   r        zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   numba.tests.inlining_usecasestestsr   rq   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   Znumba.testsr   rq   r=   numbar   r'   r   r*   +test_inline_from_another_module_w_2_getattr     z@TestFunctionInlining.test_inline_from_another_module_w_2_getattrc                    0   dd }|   fdd}| j |ddid d S )Nc                     &   ddl m  tdd fdd} | S )Nr&   r   r!   r"   c                      r   r/   r'   r'   r   r'   r*   tmp.     z]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r'   r   r*   r   +     zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   r   r'   r*   r   5  r   zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r=   r   r   r'   r   r*   *test_inline_from_another_module_as_freevar)     z?TestFunctionInlining.test_inline_from_another_module_as_freevarc                    8   ddl m   fdd}|dd}| j|ddid	 d S )
Nr&   baz_factoryc                         fdd}|S )Nc                        t    }  |  fS r/   r   r   r   r   r   r'   r*   r   B     zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr'   r   r   r   r   r   r*   gen?     zKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r   rq   r=   r   r   r'   r   r*   )test_inline_w_freevar_from_another_module;     
z>TestFunctionInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ]"\t |dfddfd	d
}j|dddkid qdD ]"\t |dfdd  fdd
}j|dddkid q3d S )Nc                    s&     | tj  | jd  |S NrO   assertIsInstancer   ExprrT   rN   rA   rp   Zcaller_infoZcallee_infor=   r'   r*   s17_caller_modelL     
zCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelc                    s&     | tj  | jd  |S r  r  r  r  r'   r*   s17_callee_modelQ  r  zCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_model)   r6   r6   r  r"   c                          S r/   r'   r'   calleer'   r*   r   Y  r2   z6TestFunctionInlining.test_inlining_models.<locals>.fooc                       |   } }|d |fS r   r'   r   r)   r   callerr   r'   r*   r   ]     z7TestFunctionInlining.test_inlining_models.<locals>.implr   r   r6   r   c                      r  r/   r'   r'   r  r'   r*   r   g  r2   z6TestFunctionInlining.test_inlining_models.<locals>.barc                       |  }  }|d |fS r   r'   r  r   r  r'   r*   r   k  r  r   r   )r=   r  r	  r   r'   r   r  r  r   r=   r*   test_inlining_modelsJ  s   z)TestFunctionInlining.test_inlining_modelsc                    6   t dddd   fdd}| j|ddid	d
 d S )Nr!   r"   c                   S      dS Nrv   r'   r'   r'   r'   r*   r   s  r2   z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dD ]}|   7 } q| S )N        r|   r   )accr   r   r'   r*   r   w  s   z:TestFunctionInlining.test_inline_inside_loop.<locals>.implr   T   rB   rC   r   r   r'   r   r*   test_inline_inside_loopr  s   
z,TestFunctionInlining.test_inline_inside_loopc                    r  )Nr!   r"   c                   S   r  r  r'   r'   r'   r'   r*   r     r2   zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.fooc                     s,   d} t dD ]} fdd}| | 7 } q| S )Nr  r|   c                      s
     d S N   r'   r'   r   r'   r*   r        
zVTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl.<locals>.barr  )r  r   r   r   r'   r*   r     s
   zITestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.implr   Tr  r   r   r   r'   r   r*   &test_inline_inside_closure_inside_loop  s   
z;TestFunctionInlining.test_inline_inside_closure_inside_loopc                    r  )Nr!   r"   c                    s    fdd}| d S )Nc                      s   d  S r  r'   r'   r   r'   r*   r     r.   zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.baz   r'   )r   r   r'   r&  r*   r     s   
zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.fooc                        d  fdd} |  d S )N	   c                        d |  S r"  r'   r(   r   r   r'   r*   r        zcTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl.<locals>.barr{   r'   r   r   r   r*   r        zVTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.implr   Tr&   r   r   r   r'   r   r*   3test_inline_closure_inside_inlinable_inside_closure  s   
zHTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closurec                    s   t ddt t ddfdd t dd fddfdd}tjd	v r-d
}ntjdv r5d}nt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  r.   zCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.bizr'         @r&   y              (@r  )jr0  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   rv   r&   c                    s   d  |   S r  r'   r(   r   r   r'   r*   r     r,  zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazr'  r{   r  )r   r  r   r   )r4  r3  r5  r*   r     s   z6TestFunctionInlining.test_inline_involved.<locals>.fooc                     r(  )Nr)  c                    r*  r"  r'   r(   r+  r'   r*   r     r,  zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.barr{   r'   r   r   r   r*   r     r-  z7TestFunctionInlining.test_inline_involved.<locals>.impl))rz   r'  )rz   r)  !   ))rz   r   )rz   r  #   zUnsupported Python version: T)r   r4  r3  r   )r   r   r   Z	PYVERSION
ValueErrorrq   )r=   r   bcr'   )r4  r   r3  r*   test_inline_involved  s    	




z)TestFunctionInlining.test_inline_involvedc           
         s   t dddd  t td fdd}| |dd	d
 |j|jd  jd }g }|j D ] }|jD ]}t	|t
jrNt	|jt
jrN|jjdkrN|| q4q/| t|d |D ]}|jj}|  | j}| d}	| ||	 qZd S )Nr!   r"   c                 S   s   d}d}|| |  S )Nr|   r   r'   r  r'   r'   r*   r     s   z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.barrD   c                    s    |  |fS r/   r'   r   r   r   r'   r*   r        z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foor   r   )   r7  r   rE   r|   r{   z__locals__bar_v[0-9]+.x)r   r   rT   rU   rV   rW   r7   r8   r9   r:   r   r;   r<   Constr   r\   targetrb   idlstriprr   assertRegex)
r=   r   r>   storer?   r@   r   rb   basenameregexr'   r   r*   test_inline_renaming_scheme  s,   



z0TestFunctionInlining.test_inline_renaming_schemeN)rd   rr   rs   r   r   r   r   skipr   r   r   r   r   r   r   r   r  r!  r%  r.  r:  rF  r'   r'   r'   r*   r      s&    		


(+r   c                   @      e Zd Zdd ZdS )TestRegisterJitableInliningc                    r   )
Nr!   r"   c                   S   r  r%   r'   r'   r'   r'   r*   r     r2   zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.fooc                      
      d S r/   r'   r'   r   r'   r*   r     r$  zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.implr   Tr   )r   rq   r   r'   r   r*   test_register_jitable_inlines  s   
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)rd   rr   rs   rK  r'   r'   r'   r*   rI        rI  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).TestOverloadInliningc                    >   dd  t  dddd } fdd}| j|d	d
id d S )Nc                   S   r   r/   r'   r'   r'   r'   r*   r         z9TestOverloadInlining.test_basic_inline_never.<locals>.foor5   r"   c                  S      dd } | S )Nc                   S   r   r/   r'   r'   r'   r'   r*   foo_impl  rO  zTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_implr'   )rQ  r'   r'   r*   foo_overload     zBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overloadc                      r   r/   r'   r'   r   r'   r*   r   	  r   z:TestOverloadInlining.test_basic_inline_never.<locals>.implr   Fr   r   rq   r=   rR  r   r'   r   r*   r     s
   

z,TestOverloadInlining.test_basic_inline_neverc                    rN  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  z:TestOverloadInlining.test_basic_inline_always.<locals>.foor!   r"   c                  S   rP  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.implr'   r   r'   r'   r*   rR    rS  zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overloadc                      r   r/   r'   r'   r   r'   r*   r     r   z;TestOverloadInlining.test_basic_inline_always.<locals>.implr   Tr   rT  rU  r'   r   r*   r     s
   

z-TestOverloadInlining.test_basic_inline_alwaysc                    rN  )Nc                 S      | | S r/   r'   r;  r'   r'   r*   r      r.   zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foor!   r"   c                 S      dd S )Nc                 S   rW  r/   r'   r;  r'   r'   r*   <lambda>%  s    z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>r'   r;  r'   r'   r*   overload_foo#  r,   zKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_fooc                          dddS )Nrz   r  r   r'   r'   r   r'   r*   r   '     zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.implr   Tr   rT  r=   rZ  r   r'   r   r*    test_inline_always_kw_no_default  s
   

z5TestOverloadInlining.test_inline_always_kw_no_defaultc                    s   dd }dd }dd |   \} t|d t|d ttjd	d
 fdd}ttjdd
 fdd}| j|| ddid | j|| ddid d S )Nc                 S   s   |  S r/   r'   r(   r'   r'   r*   impl_inline.  r   zETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inlinec                 S   s   | 
 S r/   r'   r(   r'   r'   r*   impl_noinline1  r   zGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinlinec                 S   r  NTr'   r(   r'   r'   r*   rY  4      zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>__neg____pos__r!   r"   c                       t |  rS d S r/   r:   r(   	DummyTypeZdummy_unary_implr'   r*   overload_dummy_neg9     
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_negr5   c                    re  r/   rf  r(   rg  r'   r*   overload_dummy_pos>  rj  zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_posnegTr   posF)make_dummy_typesetattrr   operatorrl  rm  rq   )r=   r_  r`  Dummyri  rk  r'   rg  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  r.   zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlinec                 S   s   | dkS r%   r'   r(   r'   r'   r*   r`  K  r.   zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlinec                 S   r  ra  r'   r;  r'   r'   r*   rY  P  rb  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>__eq____ne__r!   r"   c                    re  r/   rf  r;  rh  Zdummy_binop_implr'   r*   overload_dummy_eqT  rj  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqr5   c                    re  r/   rf  r;  ru  r'   r*   overload_dummy_neY  rj  zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neeqTr   neF)rn  ro  r   rp  rx  ry  rq   )r=   r_  r`  rq  rv  rw  r'   ru  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  r\  zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinec                 S   s   | d8 } d S r%   r'   r(   r'   r'   r*   r`  f  r\  zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlinec                 S   r  ra  r'   r;  r'   r'   r*   rY  k  rb  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>__iadd____isub__r!   r"   c                    re  r/   rf  r;  rh  Zdummy_inplace_binop_implr'   r*   overload_dummy_iaddo  rj  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddr5   c                    re  r/   rf  r;  r}  r'   r*   overload_dummy_isubt  rj  zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubc                    re  r/   rf  r;  r}  r'   r*   overload_dummy_add{  rj  zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_addc                    re  r/   rf  r;  r}  r'   r*   overload_dummy_sub  rj  zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_subiaddTr   isubF)	rn  ro  r   rp  r  r  addsubrq   )r=   r_  r`  rq  r~  r  r  r  r'   r}  r*   #test_inline_operators_inplace_binopa  s    z8TestOverloadInlining.test_inline_operators_inplace_binopc                    ~   dd }dd }|   \} dd t|d ttjdd	 fd
d}| j|| dddid | j|| ddid d S )Nc                 S      | | S r/   r'   r)   idxr'   r'   r*   r     r.   zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.implc                 S      | d S r%   r'   r(   r'   r'   r*   impl_static_getitem  r.   zVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitemc                 S   r   r/   r'   objr  r'   r'   r*   rY    rb  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>__getitem__r!   r"   c                    re  r/   rf  r  rh  Zdummy_getitem_implr'   r*   overload_dummy_getitem  rj  zYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitemr&   getitemTr   rn  ro  r   rp  r  rq   r=   r   r  rq  r  r'   r  r*   $test_inline_always_operators_getitem     

z9TestOverloadInlining.test_inline_always_operators_getitemc                    r  )Nc                 S   r  r/   r'   r  r'   r'   r*   r     r.   zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   r  r%   r'   r(   r'   r'   r*   r    r.   zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   r   r/   r'   r  r'   r'   r*   rY    rb  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>r  r5   r"   c                    re  r/   rf  r  r  r'   r*   r    rj  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   rX  )Nc                 W   r  r  r'   r;  r'   r'   r*   rY    s    zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>r'   r;  r'   r'   r*   rZ    r,   zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_fooc                      s    dddS )Nrz   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NotImplementedErrorrq   assertInrR   	exception)r=   rZ  r   r   r'   r   r*   test_inline_stararg_error  s   

z.TestOverloadInlining.test_inline_stararg_errorc           
         s    fdd}d}t |||D ]E\}}}dd dd  dd	 t|d
dd }t |d
dd }t|d
dd }| j| | j| | j| d}	| j||	d qd S )Nc                     r   r/   r'   r   r   r'   r*   r     r   z;TestOverloadInlining.test_basic_inline_combos.<locals>.implr4   c                   S   r   r/   r'   r'   r'   r'   r*   r     rO  z:TestOverloadInlining.test_basic_inline_combos.<locals>.fooc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  z:TestOverloadInlining.test_basic_inline_combos.<locals>.barc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  z:TestOverloadInlining.test_basic_inline_combos.<locals>.bazr"   c                  S   rP  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.implr'   rV  r'   r'   r*   rR    rS  zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overloadc                  S   rP  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.implr'   rV  r'   r'   r*   bar_overload  rS  zCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overloadc                  S   rP  )Nc                   S   r   r/   r'   r'   r'   r'   r*   r     rO  zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.implr'   rV  r'   r'   r*   baz_overload  rS  zCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overloadr   r   )r   r   rt   rq   )
r=   r   r   r   r   r   rR  r  r  rB   r'   r   r*   r     s$   





z-TestOverloadInlining.test_basic_inline_combosc                    s    fdd}d}t |||D ]D\}}}dd dd  dd	 dd
d}|dd|d | dd|d |dd|d | j| | j| | j| d}| j||d qd S )Nc                     r   r/   r'   r   r   r'   r*   r     r   z8TestOverloadInlining.test_freevar_bindings.<locals>.implr4   c                  S      d} d}| d }| |d |fS )Nr   r   rv   rz   r'   r   r'   r'   r*   r        z7TestOverloadInlining.test_freevar_bindings.<locals>.fooc                  S   r  )Nr   r   rv   rz   r'   r   r'   r'   r*   r   	  r  z7TestOverloadInlining.test_freevar_bindings.<locals>.barc                  S   r  )Nr   rF   rv   rz   r'   r   r'   r'   r*   r     r  z7TestOverloadInlining.test_freevar_bindings.<locals>.bazc                    s(    d t | |d fdd}d S )Nrv   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'   rV  r   r'   r*   ra     s   zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r?  r)   r   r#   ra   r'   r   r*   r     s   
z;TestOverloadInlining.test_freevar_bindings.<locals>.factoryr   r   r"   r   r   r   rF   r   r   r/   r   )r=   r   r   r   r   r   r   rB   r'   r   r*   r     s    
	z*TestOverloadInlining.test_freevar_bindingsc                 C   r   )Nc                  S   r   r   r0   r   r'   r'   r*   r   *  r   z?TestOverloadInlining.test_global_overload_binding.<locals>.implr-   Tr   r   r   r'   r'   r*   test_global_overload_binding(  r   z1TestOverloadInlining.test_global_overload_bindingc                    r   )Nr&   r   c                     r   r   r   r   r   r'   r*   r   4  r   zBTestOverloadInlining.test_inline_from_another_module.<locals>.implr   Tr   )r   r   rq   r   r'   r   r*   r   0  r   z4TestOverloadInlining.test_inline_from_another_modulec                    r   )Nr   c                     r   r   )r   r   r   r   r'   r*   r   >  r   zLTestOverloadInlining.test_inline_from_another_module_w_getattr.<locals>.implr   Tr   r   r   r'   r   r*   r   :  r   z>TestOverloadInlining.test_inline_from_another_module_w_getattrc                    r   )Nr   c                     r   r   )r   r   r   r   r   r'   r*   r   I  r   zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr   Tr   r   r   r'   r   r*   r   D  r   z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrc                    r   )Nc                     r   )Nr&   r   r!   r"   c                      r   r/   r'   r'   r   r'   r*   r   T  r   z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)r   r   r   r   r'   r   r*   r   Q  r   zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     r   r   r   r   Zbopr'   r*   r   [  r   zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.implr   Tr   r   r   r'   r  r*   r   O  r   z?TestOverloadInlining.test_inline_from_another_module_as_freevarc                    r   )
Nr&   bop_factoryc                    r   )Nc                     r   r/   r   r   r   r'   r*   r   h  r   zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr'   r   r  r   r*   r   e  r   zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.genr   r   r   Tr   )r   r  rq   r   r'   r  r*   r   a  r   z>TestOverloadInlining.test_inline_w_freevar_from_another_modulec                    s   fdd}fdd}dD ])\fddt |dfd	d
}fdd}j|dddkid qdD ])\fdd t  |dfdd} fdd}j|dddkid q:d S )Nc                    s(     | tj  | jd  |jS r  r  r   r  rT   rN   rA   r>   r  r  r'   r*   r  r     zCTestOverloadInlining.test_inlining_models.<locals>.s17_caller_modelc                    s(     | tj  | jd  |jS r  r  r  r  r'   r*   r	  w  r  zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_model))r   r  r  c                      r  r/   r'   r'   r  r'   r*   r     rO  z6TestOverloadInlining.test_inlining_models.<locals>.foor"   c                         fdd} | S )Nc                      r  r/   r'   r'   r  r'   r*   r     rO  zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.implr'   rV  r  r'   r*   foo_ol     z9TestOverloadInlining.test_inlining_models.<locals>.foo_olc                    r  r   r'   r  r  r'   r*   r     r  z7TestOverloadInlining.test_inlining_models.<locals>.implr   r   r6   r   )r
  )r  r   c                      r  r/   r'   r'   r  r'   r*   r     rO  z6TestOverloadInlining.test_inlining_models.<locals>.barc                     r  )Nc                      r  r/   r'   r'   r  r'   r*   r     rO  zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.implr'   rV  r  r'   r*   bar_ol  r  z9TestOverloadInlining.test_inlining_models.<locals>.bar_olc                    r  r   r'   r  r  r'   r*   r     r  r   rT  )r=   r  r	  r  r   r  r'   r  r*   r  p  s   

z)TestOverloadInlining.test_inlining_modelsc                    s   dd  t  dddd }t  dddd	 }d
d }t  |ddd } fdd}| j|ddidd}tt|j d }dd |jddD }| t|dk dd |	t
jD }	|	D ]	}
| |
jd qbd S )Nc                 S   s    t t| tjr| d S | d S )Nru   r&   )r:   r   r   Floatr(   r'   r'   r*   r     s   z_TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.barr!   r"   c                 S      t | tjrdd }|S d S )Nc                 S   r$   r%   r'   r(   r'   r'   r*   r     r.   ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol.<locals>.implr:   r   Integerr)   r   r'   r'   r*   
bar_int_ol     zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_olr5   c                 S   r  )Nc                 S   r$   )Nru   r'   r(   r'   r'   r*   r     r.   zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl)r:   r   r  r  r'   r'   r*   bar_float_ol  r  zhTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_olc                  W   r  ra  r'   rg   r'   r'   r*   always_inline_cost_model  rO  ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.always_inline_cost_modelc                 S   r  )Nc                 S   r$   r%   r'   r(   r'   r'   r*   r     r.   zxTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol.<locals>.impl)r:   r   Complexr  r'   r'   r*   bar_complex_ol  r  zjTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_olc                     s$    d}  d} d}| | | S )Nr&   gffffff@y              @r'   r   r   r   r   r'   r*   r     s   z`TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.implr   Fr&   r   c                 S   rI   r'   r'   rJ   r'   r'   r*   rL     rM   zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.<listcomp>rO   )rN   c                 S   s&   g | ]}t t|d dtjr|jqS )r<   N)r:   r`   r   r>  r<   rJ   r'   r'   r*   rL     s    ru   )r   rq   r]   r^   r7   rQ   r_   
assertTruer\   Z
find_instsr   r;   ZassertNotEqualr<   )r=   r  r  r  r  r   rl   rm   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v r"dd }|S d S )	Nc                 S   s   t | S r/   )r   rx   r'   r'   r*   foo_noop  r.   znTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_nooprR   c                 S   r  Nr   r'   rx   r'   r'   r*   foo_as_str_impl  rO  zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl)int64Zfloat64c                 S   r  Nr   r'   rx   r'   r'   r*   foo_as_num_impl  rO  zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_num_impl)r:   r   ZStringLiteralZliteral_value)ry   r  r  r  r'   r'   r*   foo_ovld  s   

z\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovldc                 S   r  r  r'   rx   r'   r'   r*   r     rO  zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor!   r"   c                        | S r/   r'   rx   r   r'   r*   rf     r.   z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_implrR   r   Tr   c                 S   r  r  r'   rx   r'   r'   r*   r     rO  r  rT  )r=   r  rf   ry   r'   r   r*   5test_overload_inline_always_with_literally_in_inlinee  s   zJTestOverloadInlining.test_overload_inline_always_with_literally_in_inlineec                    sH   d dd t dd fdd}fdd	}| j|d
ddid d S )NTc                 S   r  ra  r'   Ar'   r'   r*   r   	  rO  z8TestOverloadInlining.test_inline_always_ssa.<locals>.foor!   r"   c                        fdd}|S )Nc                    s6    }t t| D ]} }| | r| | }||9 }q|S r/   )r   r\   )r  r   r   dummy
dummy_truer'   r*   r     s   
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr'   )r  r   r  r'   r*   rR    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>.implrH   r   rC   rB   rT  rU  r'   )r  r   r*   test_inline_always_ssa  s   
z+TestOverloadInlining.test_inline_always_ssac                    s   dd  t  dd fdd}t fdd}tjd	d
}tdtj t  | | |	  W d    n1 s<w   Y  | t
|d d S )Nc                  S   s    d} | dkr| d } | dksdS )Nr|   r&   r{   r   r'   r   r'   r'   r*   r   !  s
   zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.barr!   r"   c                      r  r/   r'   r'   r   r'   r*   bar_impl(  r2   zLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_implc                      rJ  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    rT   Zpy_funcr\   )r=   r  r   wr'   r   r*   %test_inline_always_ssa_scope_validity  s   
z:TestOverloadInlining.test_inline_always_ssa_scope_validityN)rd   rr   rs   r   r   r^  rr  rz  r  r  r  r  r   r   r  r   r   r   r   r   r  r  r  r  r  r'   r'   r'   r*   rM    s.    ',3

28*rM  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/   )rn  superr  setUpr  	__class__r'   r*   r  ;  s   z$TestOverloadMethsAttrsInlining.setUpTc                 C      t td|}| || | |j|jd  jd }|j|_| t|j| |r?|j D ]}t	|
d}	| |	 q.d S g }
|j D ]}|
t	|
d7 }
qF| |
 d S )NrD   r   rE   rO   r   r   rT   rU   rV   rW   r7   r\   r8   listr_   re   r  )r=   rf   rg   expectedrC   expects_inlinedrk   rl   rm   r  Zallcallsr'   r'   r*   check_method?     z+TestOverloadMethsAttrsInlining.check_methodc                 C   r  )NrD   r   rE   r`   r  )r=   rf   rg   r  rC   r  rk   rl   rm   ZgetattrsZallgetattrsr'   r'   r*   check_getattrU  r  z,TestOverloadMethsAttrsInlining.check_getattrc                 C   sF   |   \}}t|dddddd}dd }| j|| gdd	d
 d S )Ninline_methodr!   r"   c                 S   s   ddd}|S )Nc                 S   s
   d||fS )NTHIS IS INLINEDr'   )r  r  val2r'   r'   r*   getp  r$  zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.getNNr'   )r  r  r  r  r'   r'   r*   _get_inlined_methodn     
zdTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_methodc                 S   s   |  d| j ddfS )Nr}   A  )r  r  r  r'   r'   r*   r   t     zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r  r}   N)r  Nr  r&   )rf   rg   r  rC   r  rn  r   r  )r=   rq  rh  r  r   r'   r'   r*   (test_overload_method_default_args_alwaysk  s   
zGTestOverloadMethsAttrsInlining.test_overload_method_default_args_alwaysc                    sR    fdd}|   \}}t|d|ddd }dd }| j|| gd	d
 d d S )Nc                     r  r/   r'   r  should_inliner'   r*   	costmodel  rO  zKTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.costmodelr  r"   c                 S      dd }|S )Nc                 S   s   d|fS )NTHIS IS INLINED!!!r'   )r  r  r'   r'   r*   r    r.   zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr'   )r  r  r  r'   r'   r*   r    rS  zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |  dS Nr}   r  r  r'   r'   r*   r     r$  zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)r  r}   r&   rf   rg   r  rC   r  r  )r=   r  r  rq  rh  r  r   r'   r  r*   make_overload_method_test  s   

z8TestOverloadMethsAttrsInlining.make_overload_method_testc                 C      | j ddd d S Nr!   Tr  r  r  r  r'   r'   r*   'test_overload_method_cost_driven_always     
zFTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_alwaysc                 C   r  Nr5   Fr  r  r  r'   r'   r*   &test_overload_method_cost_driven_never  r  zETestOverloadMethsAttrsInlining.test_overload_method_cost_driven_neverc                 C      | j dd dd d S )Nc                  W   r  ra  r'   r  r'   r'   r*   rY    rb  z]TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inline.<locals>.<lambda>Tr  r  r  r'   r'   r*   ,test_overload_method_cost_driven_must_inline     
zKTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inlinec                 C   r  )Nc                  W   r  NFr'   r  r'   r'   r*   rY    rb  z[TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline.<locals>.<lambda>Fr  r  r  r'   r'   r*   *test_overload_method_cost_driven_no_inline  r  zITestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inlinec                 C   sF   |   \}}t|d|ddd }dd }| j|| gdd|d	 d S )
Ninlinemer"   c                 S   s   dd }|S )Nc                 S   r  )NMY INLINED ATTRSr'   r  r'   r'   r*   r    rO  z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.getr'   )r  r  r'   r'   r*   _get_inlineme  rS  zRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlinemec                 S   s   | j S r/   )r  r  r'   r'   r*   r     r   zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foor  r&   r  )rn  r   r  )r=   r  r  rq  rh  r  r   r'   r'   r*   make_overload_attribute_test  s   

z;TestOverloadMethsAttrsInlining.make_overload_attribute_testc                 C   r  r  r	  r  r'   r'   r*   test_overload_attribute_always  r  z=TestOverloadMethsAttrsInlining.test_overload_attribute_alwaysc                 C   r  r  r
  r  r'   r'   r*   test_overload_attribute_never  r  z<TestOverloadMethsAttrsInlining.test_overload_attribute_neverc                 C   r  )Nc                  W   r  ra  r'   r  r'   r'   r*   rY    rb  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>Tr  r
  r  r'   r'   r*   -test_overload_attribute_costmodel_must_inline  r  zLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inlinec                 C   r  )Nc                  W   r  r  r'   r  r'   r'   r*   rY    rb  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>Fr  r
  r  r'   r'   r*   +test_overload_attribute_costmodel_no_inline  r  zJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline)T)rd   rr   rs   r  r  r  r  r  r  r   r  r  r	  r  r  r  r  __classcell__r'   r'   r  r*   r  :  s"    

r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestGeneralInliningc                 C   s2   t tdddd }dd }| j|ddid	 d S )
Nr!   r"   c                 S   r   r/   r'   r  r'   r'   r*   overload_len  r2   zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t g dS )N)r{   rz   r  )r\   r'   r'   r'   r*   r     r\  zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implr\   Fr   )r   r\   rq   )r=   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 )Nrz   r|   c                 S      | | | S r/   r'   r  r'   r'   r*   r     r\  z1TestGeneralInlining.test_with_kwargs.<locals>.foor!   r"   c                 S   s   ddd}|S )Nrz   r|   c                 S   r  r/   r'   r  r'   r'   r*   r     r\  zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.implrz   r|   r'   )r   r   r   r   r'   r'   r*   rZ    r  z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      r[  )Nrz   r   r   r'   r'   r   r'   r*   r     r\  z2TestGeneralInlining.test_with_kwargs.<locals>.implr   Tr   r  rT  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"   rv   r)  c                 S   rW  r/   r'   r  r'   r'   r*   r     r,   z2TestGeneralInlining.test_with_kwargs2.<locals>.barr#  r|   c                    s    | | ddS )Nr   r  r'   r  r   r'   r*   r     r,  z3TestGeneralInlining.test_with_kwargs2.<locals>.implrz   r  r   Tr   )rv   r)  )r#  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>.implrH   r   Tr  r  r   r   r'   r   r*   test_inlining_optional_constant  s   z3TestGeneralInlining.test_inlining_optional_constantN)rd   rr   rs   r  r  r  r  r'   r'   r'   r*   r    s
    r  c                   @   rH  )TestInlineOptionsc                 C   s   t d}| |j | |j | |j | |jd t d}| |j | |j | |j | |jd dd }t |}| |j | |j | |j | |j| d S )Nr!   r5   c                 S   s   | S r/   r'   r(   r'   r'   r*   
cost_model&  rO  z0TestInlineOptions.test_basic.<locals>.cost_model)	r   r  Zis_always_inlinere   Zis_never_inlineZhas_cost_modelrT   r<   ZassertIs)r=   r!   r5   r  modelr'   r'   r*   
test_basic  s    zTestInlineOptions.test_basicN)rd   rr   rs   r  r'   r'   r'   r*   r    rL  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   r   r/   r'   )r  ry   r'   r'   r*   output_factory2  rO  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 Nrz   rx   )shaper   r   )r  ry   r   r'   r'   r*   r   8  s   zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r:   r   ZnpytypesZArray)r  ry   r   r'   r'   r*   ol_output_factory5  s   z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)Znogilc                    s    | | j }|S r/   rx   )r  outr  r'   r*   rc   >  s   z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd  | jdS r  )r   r   r   ry   r  r'   r'   r*   fn2C  s   z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r   r   r   r   r   )r   r   r   ones)r=   r!  rc   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)ndimr8  r$  r'   r'   r*   inliningL  s   
z5TestInlineMiscIssues.test_issue4693.<locals>.inliningc                    r  r/   r'   r$  r)  r'   r*   rc   S  r,   z/TestInlineMiscIssues.test_issue4693.<locals>.fnr   )r   r   r   )r=   rc   r'   r*  r*   test_issue4693J  s
   
z#TestInlineMiscIssues.test_issue4693c                    sh   t dddd  t  fdd}| t}|  W d    n1 s$w   Y  | dt|j d S )Nr!   r"   c                  S   s   d} t | )NSomething happened)r8  )msgr'   r'   r*   r)  \  s   z5TestInlineMiscIssues.test_issue5476.<locals>.inliningc                      r   r/   r'   r'   r*  r'   r*   rc   a  r   z/TestInlineMiscIssues.test_issue5476.<locals>.fnr,  )r   r  r8  r  rR   r  )r=   rc   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r=   r0  r'   r'   r*   __init__o  r$  z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__c                    s
    |j  S r/   r/  r=   otherr/  r'   r*   divr  r$  z6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divN)rd   rr   rs   r2  r5  r'   r/  r'   r*   rq  n  s    rq  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())rb   r0  r  r2  r1  r  r'   r*   r2  v  s   z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__rd   rr   rs   r2  r  r'   r'   r  r*   rh  u  s    rh  c                       r6  )z;TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                    s    d|j fg}t ||| d S )Nr0  r8  )r=   ZdmmZfe_typemembersr  r'   r*   r2  |  s   zDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__r9  r'   r'   r  r*   DummyTypeModelz  s    r;  r0  _datac                    s"   dd } |}t ||}||fS )Nc                 S   sF   |j }|\}t|| |}||_| jr| j||jd | | S r  )	return_typer
   Zcreate_struct_proxyr0  Z
enable_nrtZnrtZincrefrg   Z	_getvalue)contextZbuildersigrg   typr0  r  r'   r'   r*   codegen  s   zHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegenr   )Z	typingctxr0  rA  Zret_typr?  )rh  r'   r*   
init_dummy  s   
z7TestInlineMiscIssues.test_issue5792.<locals>.init_dummyr!   r"   c                    r  )Nc                    r  r/   r'   r/  rB  r'   r*   ctor  r.   zITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctorr'   )r0  rD  rC  r'   r*   dummy_overload  s   z;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overloadr5  c                 S   r  )Nc                 S   s   | j |j  S r/   )r<  r3  r'   r'   r*   r     r\  zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.implr'   )r=   r4  r   r'   r'   r*   div_overload  s   z9TestInlineMiscIssues.test_issue5792.<locals>.div_overloadc                    s    | } |}| |S r/   )r5  )r0  
other_datar  r4  )rq  r'   r*   rf     s   
z6TestInlineMiscIssues.test_issue5792.<locals>.test_implg      ?r1  )r   Typer   r   ZStructModelr   r   r   r   r   rT   )r=   r;  rE  rF  rf   rG  resr'   )rq  rh  r0  rB  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                   @   rH  )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)r=   pmr'   r'   r*   define_pipelines  s   zLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelinesN)rd   rr   rs   rN  r'   r'   r'   r*   CustomCompiler  rL  rO  c                 S   r   r/   r'   r(   r'   r'   r*   r     rO  z0TestInlineMiscIssues.test_issue5824.<locals>.barr!   r"   c                 S   r  )Nc                 S   r$   )Ng?r'   r(   r'   r'   r*   r     r.   zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.implr  r  r'   r'   r*   ol_bar  r  z3TestInlineMiscIssues.test_issue5824.<locals>.ol_barrD   c                    s    |  | fS r/   r'   r   r   r'   r*   r     r<  z0TestInlineMiscIssues.test_issue5824.<locals>.foor   )皙&@rQ  N)r   r   r   rT   )r=   rO  rP  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)Zparallelc                    s$   t | jd D ]} | |  qd S r  )r   r   )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   r   r   rS  )r   r   r)   r'   r'   r*   foo_bad  s   z4TestInlineMiscIssues.test_issue7380.<locals>.foo_badz Overwrite of parallel loop index)r   r   r&  ZassertPreciseEqualZ	ones_liker  r   ZUnsupportedRewriteErrorr  rR   r  )r=   r   r   rT  r   r'   r   r*   test_issue7380  s   	



z#TestInlineMiscIssues.test_issue7380N)
rd   rr   rs   r'  r+  r.  rJ  rR  r   rU  r'   r'   r'   r*   r  /  s    Fr  __main__)<__doc__rp  r  	itertoolsr   numpyr   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-   r1   r3   r   r   r   rI  rM  r  r  r  r  rd   mainr'   r'   r'   r*   <module>   sP     (
 


@&  S    A "< E