U
    b»{j¹®  ã                   @   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�r´e' ;¡  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/bwave/python/venv/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rºt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FIRéP   ú-Ú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ÚblockZexprsÚfoundÚexprZ	func_defnr&   r&   r)   ÚcheckK   s:    
zInliningBase.checkN)r_   Ú
__module__Ú__qualname__rS   Úinline_opt_as_boolr=   rk   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 r¼t| ƒD ]}|	d7 }	t  |	¡dk r� q°q�|	|d 7 }	|| }g }tt|ƒƒD ]J}| || ¡ |dk�rd}d}
|d	| k�r|
|7 }
|
|d t	 7 }
qÔ|| | |
 | |  |	 S )
N©Údtyperq   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)rp   rq   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   rk   ©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   rn   rk   )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   rp   r%   r&   r'   r”   r&   r)   r“   Ò   s    z7TestFunctionInlining.test_recursive_inline.<locals>.foort   c                     s0   d} ˆ dkr| d7 } ˆdƒ | ˆ k r,| d8 } d S )Nr   r%   rv   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 )Nrp   r"   c                      s   ˆ ˆd ˆfS ©Nrt   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   rn   rk   )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˜   ©rk   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 ©Nru   ©Ú_GLOBAL1©rŸ   rº   r&   r)   r—     s    zBTestFunctionInlining.test_inline_from_another_module.<locals>.implr¡   Tr˜   )Úinlining_usecasesr¡   rk   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¿   rk   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Ä   rk   ©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Ò   rk   ©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=   ©rj   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 ©Nrp   r&   r&   r&   r&   r)   r“   s  s    z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dƒD ]}| ˆ ƒ 7 } q| S )Nç        rv   ©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ì   rv   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>.barru   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   rp   r%   c                    s   dˆ  |  ˆ S rë   r&   r'   ©r€   rÌ   r&   r)   r¢   ²  s    zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazrö   ru   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>.barru   r&   rº   r”   r¾   r)   r—   ·  s    z7TestFunctionInlining.test_inline_involved.<locals>.impl))rt   rö   )rt   r÷   é!   ))rt   r®   )rt   rá   é#   zUnsupported Python version: T)r“   rÿ   rþ   rð   )r   r•   r   Z	PYVERSIONÚ
ValueErrorrk   )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�}	|  ||	¡ q´d S )Nr!   r"   c                 S   s   d}d}|| |  S )Nrv   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   rv   ru   z__locals__bar_v[0-9]+.x)r   r   rO   rP   rQ   rR   r3   r4   r5   r6   r   r7   r8   ÚConstr~   rW   Útargetr]   ÚidÚlstriprl   ÚassertRegex)
r9   r“   r:   Ústorer;   r<   rˆ   r]   ÚbasenameÚregexr&   rº   r)   Útest_inline_renaming_schemeÉ  s&    


z0TestFunctionInlining.test_inline_renaming_schemeN)r_   rl   rm   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   rk   rš   r&   r”   r)   Útest_register_jitable_inlinesñ  s    
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)r_   rl   rm   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   rk   ©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 )Nrt   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*  rk   )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  r2  r&   r)   Úoverload_dummy_neY  s    
zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neÚeqTr˜   ÚneF)r+  r,  r   r-  r5  r6  rk   )r9   r  r   r.  r3  r4  r&   r2  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?  r@  ÚaddÚsubrk   )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&   ©ÚobjrE  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$  rG  ©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-  rL  rk   ©r9   r—   rF  r.  rK  r&   rJ  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&   rD  r&   r&   r)   r—   ¢  s    zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   s   | d S r$   r&   r'   r&   r&   r)   rF  ¥  s    zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   s   d S r,   r&   rG  r&   r&   r)   r  ª  r  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>rI  r1   r"   c                    s   t | ˆ ƒrˆS d S r,   r$  rG  rJ  r&   r)   rK  ­  s    
zXTestOverloadInlining.test_inline_never_operators_getitem.<locals>.overload_dummy_getitemr%   rL  Fr˜   rM  rN  r&   rJ  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 rQ  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 )Nrt   rv   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ÚNotImplementedErrorrk   Ú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   rn   rk   )
r9   r—   r¤   r¥   r¦   r§   r  rW  rX  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¯   rp   rt   r&   r�   r&   r&   r)   r“     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.fooc                  S   s   d} d}| d }| |d |fS )Nr°   r±   rp   rt   r&   r�   r&   r&   r)   r¡   	  s    z7TestOverloadInlining.test_freevar_bindings.<locals>.barc                  S   s   d} d}| d }| |d |fS )Nr³   rB   rp   rt   r&   r�   r&   r&   r)   r¢     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.bazc                    s(   ˆ d ‰t | |d�‡ ‡‡fdd„ƒ}d S )Nrp   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¢   rk   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&   rZ  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\  rk   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¡ qÄd S )Nc                 S   s$   t t| ƒtjƒr| d S | d S d S )Nro   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 )Nro   r&   r'   r&   r&   r)   r—   ·  s    zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl)r6   r   r`  rc  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   ÚComplexrc  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    ÿro   )r   rk   rX   rY   r3   rL   rZ   Ú
assertTruerW   Z
find_instsr   r7   ZassertNotEqualr8   )r9   rd  re  rg  ri  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   rr   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&   rr   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&   rr   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)rs   ro  rq  rt  r&   r&   r)   Úfoo_ovldÝ  s    

z\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovldc                 S   s   dS rp  r&   rr   r&   r&   r)   r“   ï  s    zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor!   r"   c                    s   ˆ | ƒS r,   r&   rr   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 rs  r&   rr   r&   r&   r)   r“   ü  s    rr  r  )r9   ru  ra   rs   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   )rx  r‘   rˆ   Údummy©Ú
dummy_truer&   r)   r—     s    
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr&   )rx  r—   rz  r&   r)   r    s    zATestOverloadInlining.test_inline_always_ssa.<locals>.foo_overloadc                      s   ˆ t  dddg¡ƒS )NTF)ry   Ú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 )Nrv   r%   ru   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_   rl   rm   r›   rœ   r  r/  r7  rC  rO  rP  rV  r¨   rµ   rY  rÀ   rÅ   rË   rÐ   r×   rê   rn  rv  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`   rk  )r9   ra   rb   Úexpectedr?   Úexpects_inlinedrf   rg   rh   rl  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&   )rH  rm  Úval2r&   r&   r)   Úgetp  s    zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.get)NNr&   )rH  rm  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 )Nrw   éA  )r“  ©r‘  ©rH  r&   r&   r)   r“   t  s    zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r’  rw   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&   rf  ©Ú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&   )rH  rm  r&   r&   r)   r”  ‡  s    zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr&   )rH  rm  r”  r&   r&   r)   r•  …  s    zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |   d¡S ©Nrw   r—  r˜  r&   r&   r)   r“   ‹  s    zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)rž  rw   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&   rf  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&   rf  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&   )rH  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&   rf  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&   rf  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_   rl   rm   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&   rw  r&   r&   r)   Úoverload_lenâ  s    zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t dddgƒS )Nru   rt   rï   )rW   r&   r&   r&   r)   r—   ç  s    zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implrW   Fr˜   )r   rW   rk   )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 )Nrt   rv   c                 S   s   | | | S r,   r&   rj  r&   r&   r)   r“   ï  s    z1TestGeneralInlining.test_with_kwargs.<locals>.foor!   r"   c                 S   s   ddd„}|S )Nrt   rv   c                 S   s   | | | S r,   r&   rj  r&   r&   r)   r—   ô  s    zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.impl)rt   rv   r&   )r€   r�   r‚   r—   r&   r&   r)   r  ò  s    
z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      s   ˆ ddd�S )Nrt   r®   ©r‚   r&   r&   r”   r&   r)   r—   ø  s    z2TestGeneralInlining.test_with_kwargs.<locals>.implr“   Tr˜   )rt   rv   )rt   rv   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"   rp   r÷   c                 S   s   | | S r,   r&   rj  r&   r&   r)   r¡   ÿ  s    z2TestGeneralInlining.test_with_kwargs2.<locals>.barró   rv   c                    s   ˆ | | dd�S )Nr·   r¸  r&   rj  rº   r&   r)   r—     s    z3TestGeneralInlining.test_with_kwargs2.<locals>.implrt   rï   r¡   Tr˜   )rp   r÷   )ró   rv   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 )Nrw   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_   rl   rm   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   rk  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_   rl   rm   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|  rs   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 ©Nrt   rr   )Úshapery   rz   )r|  rs   rÃ  r&   r&   r)   r—   8  s    zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r6   r   ZnpytypesZArray)r|  rs   r—   r&   r&   r)   Úol_output_factory5  s    z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)Znogilc                    s   ˆ | | j ƒ}|S r,   rr   )r|  Úout©rÁ  r&   r)   r^   >  s    z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd … | jd�S rÂ  )ry   rz   rÃ  rs   ©r|  r&   r&   r)   Úfn2C  s    z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r®   r¯   r°   r±   r²   )r   r   ry   Ú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   ry   rz   )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   rR  r  rT  rM   rU  )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_   rl   rm   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_   rl   rm   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 rQ  )	Úreturn_typer
   Zcreate_struct_proxyrÓ  Z
enable_nrtZnrtZincrefrb   Z	_getvalue)ÚcontextZbuilderÚsigrb   ÚtyprÓ  ry  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_datary  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_   rl   rm   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>.implra  rc  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 rQ  )r   rÃ  )r€   rˆ   rº   r&   r)   r“   Û  s    z0TestInlineMiscIssues.test_issue7380.<locals>.foo)r®   r®   ru   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   ry   rÉ  ZassertPreciseEqualZ	ones_likerR  r   ZUnsupportedRewriteErrorrT  rM   rU  )r9   r“   r€   r÷  r„   r&   rº   r)   Útest_issue7380Í  s    	


z#TestInlineMiscIssues.test_issue7380N)
r_   rl   rm   rÊ  rÎ  rÑ  rì  rô  r   rø  r&   r&   r&   r)   rÀ  /  s   FrÀ  Ú__main__)<Ú__doc__r-  r�  Ú	itertoolsr   Únumpyry   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
