U
    iâËd¹®  ã                   @   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&   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_ir_inlining.pyÚ_global_func&   s    r*   c                 C   s   | d S r$   r&   r'   r&   r&   r)   Ú_global_defn,   s    r+   c                 C   s   t S ©N©r+   r'   r&   r&   r)   Ú_global_overload0   s    r.   c                   @   s*   e Zd ZdZdddœZdd„ Zdd„ ZdS )	ÚInliningBaseFT©r!   Úneverc                 C   sN   |j  ¡ D ]>}|jD ]2}t|tjƒrt|jtjƒr|jjdkr  dS qq
dS )Né   TF)ÚblocksÚvaluesÚbodyÚ
isinstancer   ÚAssignÚvalueZFreeVar)ÚselfÚfunc_irÚblkÚstmtr&   r&   r)   Úsentinel_17_cost_model>   s    
z#InliningBase.sentinel_17_cost_modelc                 O   s‚  |  dd ¡}|st‚|  dd¡}|r(t‚| ¡ D ]$\}}t|tƒsFt‚t|tƒs0t‚q0ttd�|ƒ}|  ||Ž ||Ž ¡ |j	|j
d  jd }	t |	j¡|	_| j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ÚblockÚexprsÚfoundÚexprZ	func_defnr&   r&   r)   ÚcheckK   s:    
zInliningBase.checkN)r_   Ú
__module__Ú__qualname__rS   Úinline_opt_as_boolr=   rl   r&   r&   r&   r)   r/   5   s   
r/   éÒ  c                     s   d‰ d‡ fdd„	} | S )NiþÊ  é   ù              ð?c                    s<  | | }| ˆ 7 } t j|t jd�}|| }d| }d}	d}
t  |¡dk�r || }t  d|d ¡}t  || ¡||  }t  |d ¡dk 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©Údtyperr   r   r%   é   é   é   é{   éz   )
ÚnpÚzerosZ	complex64ÚabsZarangeÚsqrtÚrangerW   ÚappendÚ_GLOBAL)ÚaÚbÚcÚdÚeÚfÚgÚhÚiÚnÚtrd   ÚlÚmÚoÚpÚqÚrÚs©Z_FREEVARr&   r)   Úfoo{   s8    
z_gen_involved.<locals>.foo)rq   rr   Nr&   ©r”   r&   r“   r)   Ú_gen_involvedx   s     r–   c                   @   sž   e Zd Zdd„ Zdd„ Zdd„ Ze d¡dd	„ ƒZd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%ÚTestFunctionInliningc                    s4   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	� d S )
Nr1   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r”   ¡   s    z9TestFunctionInlining.test_basic_inline_never.<locals>.fooc                      s   ˆ ƒ S r,   r&   r&   r•   r&   r)   Úimpl¥   s    z:TestFunctionInlining.test_basic_inline_never.<locals>.implr”   F©r>   ©r   rl   ©r9   r˜   r&   r•   r)   Útest_basic_inline_never    s    
z,TestFunctionInlining.test_basic_inline_neverc                    s4   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	� d S )
Nr!   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r”   ª   s    z:TestFunctionInlining.test_basic_inline_always.<locals>.fooc                      s   ˆ ƒ S r,   r&   r&   r•   r&   r)   r˜   ®   s    z;TestFunctionInlining.test_basic_inline_always.<locals>.implr”   Tr™   rš   r›   r&   r•   r)   Útest_basic_inline_always©   s    
z-TestFunctionInlining.test_basic_inline_alwaysc                    s’   ‡ ‡‡fdd„}d}t |||ƒD ]l\}}}t|d�dd„ ƒ‰t|d�dd„ ƒ‰ t|d�d	d
„ ƒ‰| j| | j| | j| dœ}| j||d� q d S )Nc                     s   ˆƒ } ˆ ƒ }ˆƒ }| ||fS r,   r&   ©r(   ÚyÚz©ÚbarÚbazr”   r&   r)   r˜   ´   s    z;TestFunctionInlining.test_basic_inline_combos.<locals>.implr0   r"   c                   S   s   d S r,   r&   r&   r&   r&   r)   r”   ¾   s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.fooc                   S   s   d S r,   r&   r&   r&   r&   r)   r¢   Â   s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.barc                   S   s   d S r,   r&   r&   r&   r&   r)   r£   Æ   s    z:TestFunctionInlining.test_basic_inline_combos.<locals>.baz©r”   r¢   r£   r™   )r   r   ro   rl   )r9   r˜   ÚoptsÚ
inline_fooÚ
inline_barÚ
inline_bazr>   r&   r¡   r)   Útest_basic_inline_combos²   s    


þz-TestFunctionInlining.test_basic_inline_combosz$Need to work out how to prevent thisc                    s>   t dd�‡fdd„ƒ‰d‰ ‡ ‡fdd„}| j|dd	id
� d S )Nr!   r"   c                    s   | dkrdS ˆ | d ƒ d S )Nr   rq   r%   r&   r'   r•   r&   r)   r”   Ò   s    z7TestFunctionInlining.test_recursive_inline.<locals>.fooru   c                     s0   d} ˆ dkr| d7 } ˆdƒ | ˆ k r,| d8 } d S )Nr   r%   rw   r&   ©r‚   ©r�   r”   r&   r)   r˜   Û   s    z8TestFunctionInlining.test_recursive_inline.<locals>.implr”   Tr™   rš   r›   r&   r«   r)   Útest_recursive_inlineÏ   s
    z*TestFunctionInlining.test_recursive_inlinec                    sˆ   dd„ }‡ ‡‡fdd„}d}t |||ƒD ]Z\}}}||ddƒ‰||dd	ƒ‰ ||d
dƒ‰| j| | j| | j| dœ}| j||d� q(d S )Nc                    s&   ˆ d ‰t | d�‡ ‡‡fdd„ƒ}|S )Nrq   r"   c                      s   ˆ ˆd ˆfS ©Nru   r&   r&   rž   r&   r)   r\   ê   s    zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r#   r(   rŸ   r\   r&   rž   r)   Úfactoryç   s    z;TestFunctionInlining.test_freevar_bindings.<locals>.factoryc                     s   ˆƒ } ˆ ƒ }ˆƒ }| ||fS r,   r&   rž   r¡   r&   r)   r˜   ï   s    z8TestFunctionInlining.test_freevar_bindings.<locals>.implr0   é
   é   é   é(   é2   é<   r¤   r™   ©r   ro   rl   )r9   r®   r˜   r¥   r¦   r§   r¨   r>   r&   r¡   r)   Útest_freevar_bindingså   s    þz*TestFunctionInlining.test_freevar_bindingsc                 C   s   dd„ }| j |ddid� d S )Nc                  S   s   d} t | ƒS ©Né   )r*   r'   r&   r&   r)   r˜     s    z6TestFunctionInlining.test_global_binding.<locals>.implr*   Tr™   ©rl   r›   r&   r&   r)   Útest_global_binding  s    z(TestFunctionInlining.test_global_bindingc                    s.   ddl m‰  ‡ fdd„}| j|ddid� d S )Nr%   ©r¢   c                     s   t d } ˆ ƒ | fS ©Nrv   ©Ú_GLOBAL1©r    r»   r&   r)   r˜     s    zBTestFunctionInlining.test_inline_from_another_module.<locals>.implr¢   Tr™   )Úinlining_usecasesr¢   rl   r›   r&   r»   r)   Útest_inline_from_another_module
  s    z4TestFunctionInlining.test_inline_from_another_modulec                    s4   dd l m  m‰  ‡ fdd„}| j|ddid� d S )Nr   c                     s   t d } ˆ  ¡ | fS r¼   )r¾   r¢   r¿   ©Ziucr&   r)   r˜     s    zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.implr¢   Tr™   ©Únumba.tests.inlining_usecasesÚtestsrÀ   rl   r›   r&   rÂ   r)   Ú)test_inline_from_another_module_w_getattr  s    z>TestFunctionInlining.test_inline_from_another_module_w_getattrc                    s6   dd l }dd lm‰  ‡ fdd„}| j|ddid� d S )Nr   c                     s   t d } ˆ j ¡ | fS r¼   )r¾   rÀ   r¢   r¿   ©Úntr&   r)   r˜   #  s    zNTestFunctionInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr¢   Tr™   ©rÄ   Znumba.testsrÅ   rl   ©r9   Únumbar˜   r&   rÇ   r)   Ú+test_inline_from_another_module_w_2_getattr  s    z@TestFunctionInlining.test_inline_from_another_module_w_2_getattrc                    s0   dd„ }|ƒ ‰ ‡ fdd„}| j |ddid� d S )Nc                     s&   ddl m‰  tdd�‡ fdd„ƒ} | S )Nr%   r»   r!   r"   c                      s   ˆ ƒ S r,   r&   r&   r»   r&   r)   Útmp.  s    z]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)rÀ   r¢   r   ©rÍ   r&   r»   r)   r®   +  s    zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     s   t d } ˆ ƒ | fS r¼   r½   r¿   ©r£   r&   r)   r˜   5  s    zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.implr¢   Tr™   r¹   ©r9   r®   r˜   r&   rÏ   r)   Ú*test_inline_from_another_module_as_freevar)  s    z?TestFunctionInlining.test_inline_from_another_module_as_freevarc                    s8   ddl m‰  ‡ fdd„}|ddƒ}| j|ddid	� d S )
Nr%   ©Úbaz_factoryc                    s   ˆˆ ƒ‰‡ ‡‡fdd„}|S )Nc                     s   t ˆ ˆ  } ˆƒ | ˆ fS r,   r½   r¿   ©r�   r‚   r¢   r&   r)   r˜   B  s    zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr&   ©r�   r‚   r˜   rÒ   rÔ   r)   Úgen?  s    zKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.genr¯   r°   r¢   Tr™   )rÀ   rÓ   rl   ©r9   rÖ   r˜   r&   rÒ   r)   Ú)test_inline_w_freevar_from_another_module;  s    
z>TestFunctionInlining.test_inline_w_freevar_from_another_modulec                    s°   ‡fdd„}‡fdd„}dD ]D\‰‰t |d�‡fdd„ƒ‰‡‡fd	d
„}ˆj|ddˆdkid� qdD ]D\‰‰t |d�‡fdd„ƒ‰ ‡ ‡fdd
„}ˆj|ddˆdkid� qfd S )Nc                    s&   ˆ   | tj¡ ˆ  | jd¡ ˆ  |¡S ©NrI   ©ÚassertIsInstancer   ÚExprrO   rH   r=   ©rk   Zcaller_infoZcallee_info©r9   r&   r)   Ús17_caller_modelL  s    zCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelc                    s&   ˆ   | tj¡ ˆ  | jd¡ ˆ  |¡S rÙ   rÚ   rÝ   rÞ   r&   r)   Ús17_callee_modelQ  s    zCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_model)©é   r2   ©r2   râ   r"   c                      s   ˆ S r,   r&   r&   ©Úcalleer&   r)   r”   Y  s    z6TestFunctionInlining.test_inlining_models.<locals>.fooc                    s   | ˆ  }ˆƒ }|d |fS r­   r&   ©r    r(   rŸ   ©Úcallerr”   r&   r)   r˜   ]  s    z7TestFunctionInlining.test_inlining_models.<locals>.implr¯   r”   r2   r™   c                      s   ˆ S r,   r&   r&   rä   r&   r)   r¢   g  s    z6TestFunctionInlining.test_inlining_models.<locals>.barc                    s   | ˆ }ˆ ƒ }|d |fS r­   r&   ræ   ©r¢   rè   r&   r)   r˜   k  s    r¢   rš   )r9   rß   rà   r˜   r&   ©r¢   rå   rè   r”   r9   r)   Útest_inlining_modelsJ  s    z)TestFunctionInlining.test_inlining_modelsc                    s6   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	d
� d S )Nr!   r"   c                   S   s   dS ©Nrq   r&   r&   r&   r&   r)   r”   s  s    z9TestFunctionInlining.test_inline_inside_loop.<locals>.fooc                     s    d} t dƒD ]}| ˆ ƒ 7 } q| S )Nç        rw   ©r~   )Úaccr‰   r•   r&   r)   r˜   w  s    z:TestFunctionInlining.test_inline_inside_loop.<locals>.implr”   Té   ©r>   r?   rš   r›   r&   r•   r)   Útest_inline_inside_loopr  s    
z,TestFunctionInlining.test_inline_inside_loopc                    s6   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	d
� d S )Nr!   r"   c                   S   s   dS rì   r&   r&   r&   r&   r)   r”   €  s    zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.fooc                     s,   d} t dƒD ]}‡ fdd„}| |ƒ 7 } q| S )Nrí   rw   c                      s
   ˆ ƒ d S ©Né   r&   r&   r•   r&   r)   r¢   ‡  s    zVTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl.<locals>.barrî   )rï   r‰   r¢   r•   r&   r)   r˜   „  s
    zITestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.implr”   Trð   rñ   rš   r›   r&   r•   r)   Ú&test_inline_inside_closure_inside_loop  s    
z;TestFunctionInlining.test_inline_inside_closure_inside_loopc                    s6   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	d
� d S )Nr!   r"   c                    s   ‡ fdd„}|ƒ d S )Nc                      s   dˆ  S rì   r&   r&   ©r�   r&   r)   r£   ‘  s    zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.bazé   r&   )r�   r£   r&   rö   r)   r”   �  s    zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.fooc                     s   d‰ ‡‡ fdd„} | ˆ d ƒS )Né	   c                    s   ˆ ˆƒd |  S ró   r&   r'   ©r”   r    r&   r)   r¢   ˜  s    zcTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl.<locals>.barrv   r&   r»   r•   r¿   r)   r˜   •  s    zVTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.implr”   Tr%   rñ   rš   r›   r&   r•   r)   Ú3test_inline_closure_inside_inlinable_inside_closureŽ  s    
zHTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closurec                    s–   t dd�tƒ ƒ‰t dd�‡fdd„ƒ‰ t dd�‡ ‡fdd„ƒ‰‡fdd„}tjd	krZd
}n tjdkrjd}ntdtj› �ƒ‚| j|ddddœ|d� d S )Nr!   r"   c              
      sF   d‰ ‡ fdd„}t | ƒD ](}ˆ |dˆ  ƒˆdˆ dd|ˆ ƒƒ 7 ‰ qˆ S )Nr   c                    s   | ˆ  S r,   r&   )r‹   ©rï   r&   r)   Úbiz¦  s    zCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.bizr÷   ç       @r%   y              (@rî   )Újrü   r(   )Úfortranrû   r)   Úboz¢  s
    &z6TestFunctionInlining.test_inline_involved.<locals>.bozc                    sX   d}t dƒD ]>}ˆdddddƒ‰‡ ‡fdd„}|||ƒd ˆ|ƒ ˆ 7 }q||dƒ S )Nr   rq   r%   c                    s   dˆ  |  ˆ S rì   r&   r'   ©r�   rÍ   r&   r)   r£   ²  s    zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.bazr÷   rv   rî   )r�   rï   r�   r£   )r   rÿ   r  r)   r”   ¬  s    z6TestFunctionInlining.test_inline_involved.<locals>.fooc                     s   d‰ ‡‡ fdd„} | ˆ d ƒS )Nrø   c                    s   ˆ ˆƒd |  S ró   r&   r'   rù   r&   r)   r¢   º  s    zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.barrv   r&   r»   r•   r¿   r)   r˜   ·  s    z7TestFunctionInlining.test_inline_involved.<locals>.impl))ru   r÷   )ru   rø   é!   ))ru   r¯   )ru   râ   é#   zUnsupported Python version: T)r”   r   rÿ   rñ   )r   r–   r   Z	PYVERSIONÚ
ValueErrorrl   )r9   r˜   Úbcr&   )r   r”   rÿ   r)   Útest_inline_involvedž  s     	



ÿÿz)TestFunctionInlining.test_inline_involvedc           
         sì   t dd�dd„ ƒ‰ t td�‡ fdd„ƒ}|  |dd	ƒd
¡ |j|jd  jd }g }|j ¡ D ]@}|jD ]4}t	|t
jƒrht	|jt
jƒrh|jjdkrh| |¡ qhq^|  t|ƒd¡ |D ]2}|jj}|  ¡  | j¡}|› d�}	|  ||	¡ q´d S )Nr!   r"   c                 S   s   d}d}|| |  S )Nrw   r¯   r&   ræ   r&   r&   r)   r¢   Í  s    z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.barr@   c                    s   ˆ | ƒˆ |ƒfS r,   r&   ©r�   r‚   r»   r&   r)   r”   Ó  s    z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foor¯   r°   )é   r  r   rA   rw   rv   z__locals__bar_v[0-9]+.x)r   r   rO   rP   rQ   rR   r3   r4   r5   r6   r   r7   r8   ÚConstr   rW   Útargetr]   ÚidÚlstriprm   ÚassertRegex)
r9   r”   r:   Ústorer;   r<   r‰   r]   ÚbasenameÚregexr&   r»   r)   Útest_inline_renaming_schemeÉ  s&    


z0TestFunctionInlining.test_inline_renaming_schemeN)r_   rm   rn   rœ   r�   r©   r   Úskipr¬   r¶   rº   rÁ   rÆ   rÌ   rÑ   rØ   rë   rò   rõ   rú   r  r  r&   r&   r&   r)   r—   ž   s$   		


(+r—   c                   @   s   e Zd Zdd„ ZdS )ÚTestRegisterJitableInliningc                    s4   t dd�dd„ ƒ‰ ‡ fdd„}| j|ddid	� d S )
Nr!   r"   c                   S   s   dS r$   r&   r&   r&   r&   r)   r”   ó  s    zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.fooc                      s
   ˆ ƒ  d S r,   r&   r&   r•   r&   r)   r˜   ÷  s    zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.implr”   Tr™   )r   rl   r›   r&   r•   r)   Útest_register_jitable_inlinesñ  s    
z9TestRegisterJitableInlining.test_register_jitable_inlinesN)r_   rm   rn   r  r&   r&   r&   r)   r  ï  s   r  c                   @   s¼   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-S ).ÚTestOverloadInliningc                    s>   dd„ ‰ t ˆ dd�dd„ ƒ}‡ fdd„}| j|d	d
id� d S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r”      s    z9TestOverloadInlining.test_basic_inline_never.<locals>.foor1   r"   c                  S   s   dd„ } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   Úfoo_impl  s    zTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_implr&   )r  r&   r&   r)   Úfoo_overload  s    zBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overloadc                      s   ˆ ƒ S r,   r&   r&   r•   r&   r)   r˜   	  s    z:TestOverloadInlining.test_basic_inline_never.<locals>.implr”   Fr™   ©r   rl   ©r9   r  r˜   r&   r•   r)   rœ   ÿ  s
    

z,TestOverloadInlining.test_basic_inline_neverc                    s>   dd„ ‰ t ˆ dd�dd„ ƒ}‡ fdd„}| j|d	d
id� d S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r”     s    z:TestOverloadInlining.test_basic_inline_always.<locals>.foor!   r"   c                  S   s   dd„ } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r˜     s    zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.implr&   ©r˜   r&   r&   r)   r    s    zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overloadc                      s   ˆ ƒ S r,   r&   r&   r•   r&   r)   r˜     s    z;TestOverloadInlining.test_basic_inline_always.<locals>.implr”   Tr™   r  r  r&   r•   r)   r�     s
    

z-TestOverloadInlining.test_basic_inline_alwaysc                    s>   dd„ ‰ t ˆ dd�dd„ ƒ}‡ fdd„}| j|d	d
id� d S )Nc                 S   s   | | S r,   r&   r  r&   r&   r)   r”      s    zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foor!   r"   c                 S   s   dd„ S )Nc                 S   s   | | S r,   r&   r  r&   r&   r)   Ú<lambda>%  ó    z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>r&   r  r&   r&   r)   Úoverload_foo#  s    zKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_fooc                      s   ˆ ddd�S )Nru   rð   rª   r&   r&   r•   r&   r)   r˜   '  s    zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.implr”   Tr™   r  ©r9   r  r˜   r&   r•   r)   Ú test_inline_always_kw_no_default  s
    

z5TestOverloadInlining.test_inline_always_kw_no_defaultc                    s¤   dd„ }dd„ }dd„ ‰|   ¡ \}‰ t|dˆƒ t|dˆƒ ttjd	d
�‡ ‡fdd„ƒ}ttjdd
�‡ ‡fdd„ƒ}| j||ƒ ddid� | j||ƒ ddid� d S )Nc                 S   s   |  S r,   r&   r'   r&   r&   r)   Úimpl_inline.  s    zETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inlinec                 S   s   | 
 S r,   r&   r'   r&   r&   r)   Úimpl_noinline1  s    zGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinlinec                 S   s   dS ©NTr&   r'   r&   r&   r)   r  4  r  zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>Ú__neg__Ú__pos__r!   r"   c                    s   t | ˆ ƒrˆS d S r,   ©r6   r'   ©Ú	DummyTypeZdummy_unary_implr&   r)   Úoverload_dummy_neg9  s    
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_negr1   c                    s   t | ˆ ƒrˆS d S r,   r%  r'   r&  r&   r)   Úoverload_dummy_pos>  s    
zLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_posÚnegTr™   ÚposF)Úmake_dummy_typeÚsetattrr   Úoperatorr*  r+  rl   )r9   r   r!  ÚDummyr(  r)  r&   r&  r)   Útest_inline_operators_unary,  s    z0TestOverloadInlining.test_inline_operators_unaryc                    s¤   dd„ }dd„ }|   ¡ \}‰ dd„ ‰t|dˆƒ t|dˆƒ ttjd	d
�‡ ‡fdd„ƒ}ttjdd
�‡ ‡fdd„ƒ}| j||ƒ ddid� | j||ƒ ddid� d S )Nc                 S   s   | dkS r$   r&   r'   r&   r&   r)   r   H  s    zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlinec                 S   s   | dkS r$   r&   r'   r&   r&   r)   r!  K  s    zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlinec                 S   s   dS r"  r&   r  r&   r&   r)   r  P  r  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>Ú__eq__Ú__ne__r!   r"   c                    s   t | ˆ ƒrˆS d S r,   r%  r  ©r'  Zdummy_binop_implr&   r)   Úoverload_dummy_eqT  s    
zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqr1   c                    s   t | ˆ ƒrˆS d S r,   r%  r  r3  r&   r)   Úoverload_dummy_neY  s    
zKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_neÚeqTr™   ÚneF)r,  r-  r   r.  r6  r7  rl   )r9   r   r!  r/  r4  r5  r&   r3  r)   Útest_inline_operators_binopF  s    z0TestOverloadInlining.test_inline_operators_binopc                    sÜ   dd„ }dd„ }|   ¡ \}‰ dd„ ‰t|dˆƒ t|dˆƒ ttjd	d
�‡ ‡fdd„ƒ}ttjdd
�‡ ‡fdd„ƒ}ttjd	d
�‡ ‡fdd„ƒ}ttjdd
�‡ ‡fdd„ƒ}| j||ƒ ddid� | j||ƒ ddid� d S )Nc                 S   s   | d7 } d S r$   r&   r'   r&   r&   r)   r   c  s    zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinec                 S   s   | d8 } d S r$   r&   r'   r&   r&   r)   r!  f  s    zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlinec                 S   s   dS r"  r&   r  r&   r&   r)   r  k  r  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>Ú__iadd__Ú__isub__r!   r"   c                    s   t | ˆ ƒrˆS d S r,   r%  r  ©r'  Zdummy_inplace_binop_implr&   r)   Úoverload_dummy_iaddo  s    
zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddr1   c                    s   t | ˆ ƒrˆS d S r,   r%  r  r;  r&   r)   Úoverload_dummy_isubt  s    
zUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubc                    s   t | ˆ ƒrˆS d S r,   r%  r  r;  r&   r)   Úoverload_dummy_add{  s    
zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_addc                    s   t | ˆ ƒrˆS d S r,   r%  r  r;  r&   r)   Úoverload_dummy_sub€  s    
zTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_subÚiaddTr™   ÚisubF)	r,  r-  r   r.  r@  rA  ÚaddÚsubrl   )r9   r   r!  r/  r<  r=  r>  r?  r&   r;  r)   Ú#test_inline_operators_inplace_binopa  s     z8TestOverloadInlining.test_inline_operators_inplace_binopc                    s~   dd„ }dd„ }|   ¡ \}‰ dd„ ‰t|dˆƒ ttjdd	�‡ ‡fd
d„ƒ}| j||ƒ dddid� | j||ƒ ddid� d S )Nc                 S   s   | | S r,   r&   ©r(   Úidxr&   r&   r)   r˜   Š  s    zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.implc                 S   s   | d S r$   r&   r'   r&   r&   r)   Úimpl_static_getitem�  s    zVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitemc                 S   s   d S r,   r&   ©ÚobjrF  r&   r&   r)   r  ’  r  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>Ú__getitem__r!   r"   c                    s   t | ˆ ƒrˆS d S r,   r%  rH  ©r'  Zdummy_getitem_implr&   r)   Úoverload_dummy_getitem•  s    
zYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitemr%   ÚgetitemTr™   ©r,  r-  r   r.  rM  rl   ©r9   r˜   rG  r/  rL  r&   rK  r)   Ú$test_inline_always_operators_getitemˆ  s    
ÿz9TestOverloadInlining.test_inline_always_operators_getitemc                    s~   dd„ }dd„ }|   ¡ \}‰ dd„ ‰t|dˆƒ ttjdd	�‡ ‡fd
d„ƒ}| j||ƒ dddid� | j||ƒ ddid� d S )Nc                 S   s   | | S r,   r&   rE  r&   r&   r)   r˜   ¢  s    zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.implc                 S   s   | d S r$   r&   r'   r&   r&   r)   rG  ¥  s    zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitemc                 S   s   d S r,   r&   rH  r&   r&   r)   r  ª  r  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>rJ  r1   r"   c                    s   t | ˆ ƒrˆS d S r,   r%  rH  rK  r&   r)   rL  ­  s    
zXTestOverloadInlining.test_inline_never_operators_getitem.<locals>.overload_dummy_getitemr%   rM  Fr™   rN  rO  r&   rK  r)   Ú#test_inline_never_operators_getitem   s    
ÿz8TestOverloadInlining.test_inline_never_operators_getitemc              	      sf   dd„ ‰ t ˆ dd�dd„ ƒ}‡ fdd„}|  t¡�}| j|d	d
id� W 5 Q R X |  dt|jƒ¡ d S )Nc                 W   s   | |d  S ©Nr   r&   r  r&   r&   r)   r”   ¹  s    z;TestOverloadInlining.test_inline_stararg_error.<locals>.foor!   r"   c                 W   s   dd„ S )Nc                 W   s   | |d  S rR  r&   r  r&   r&   r)   r  ¾  r  zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>r&   r  r&   r&   r)   r  ¼  s    zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_fooc                      s   ˆ dddƒS )Nru   rw   r&   r&   r•   r&   r)   r˜   À  s    z<TestOverloadInlining.test_inline_stararg_error.<locals>.implr”   Tr™   z-Stararg not supported in inliner for arg 1 *b)r   ÚassertRaisesÚNotImplementedErrorrl   ÚassertInrM   Ú	exception)r9   r  r˜   r…   r&   r•   r)   Útest_inline_stararg_error¸  s    

ÿz.TestOverloadInlining.test_inline_stararg_errorc           
         s°   ‡ ‡‡fdd„}d}t |||ƒD ]Š\}}}dd„ ‰dd„ ‰ dd	„ ‰tˆ|d
�dd„ ƒ}tˆ |d
�dd„ ƒ}tˆ|d
�dd„ ƒ}| j| | j| | j| dœ}	| j||	d� q d S )Nc                     s   ˆƒ } ˆ ƒ }ˆƒ }| ||fS r,   r&   rž   r¡   r&   r)   r˜   Ë  s    z;TestOverloadInlining.test_basic_inline_combos.<locals>.implr0   c                   S   s   d S r,   r&   r&   r&   r&   r)   r”   Õ  s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.fooc                   S   s   d S r,   r&   r&   r&   r&   r)   r¢   Ø  s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.barc                   S   s   d S r,   r&   r&   r&   r&   r)   r£   Û  s    z:TestOverloadInlining.test_basic_inline_combos.<locals>.bazr"   c                  S   s   dd„ } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r˜   à  s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.implr&   r  r&   r&   r)   r  Þ  s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overloadc                  S   s   dd„ } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r˜   æ  s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.implr&   r  r&   r&   r)   Úbar_overloadä  s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overloadc                  S   s   dd„ } | S )Nc                   S   s   d S r,   r&   r&   r&   r&   r)   r˜   ì  s    zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.implr&   r  r&   r&   r)   Úbaz_overloadê  s    zCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overloadr¤   r™   )r   r   ro   rl   )
r9   r˜   r¥   r¦   r§   r¨   r  rX  rY  r>   r&   r¡   r)   r©   É  s"    





þz-TestOverloadInlining.test_basic_inline_combosc                    s®   ‡ ‡‡fdd„}d}t |||ƒD ]ˆ\}}}dd„ ‰dd„ ‰ dd	„ ‰dd
d„}|ˆdd|d� |ˆ dd|d� |ˆdd|d� | j| | j| | j| dœ}| j||d� q d S )Nc                     s   ˆƒ } ˆ ƒ }ˆƒ }| ||fS r,   r&   rž   r¡   r&   r)   r˜   ÷  s    z8TestOverloadInlining.test_freevar_bindings.<locals>.implr0   c                  S   s   d} d}| d }| |d |fS )Nr¯   r°   rq   ru   r&   rž   r&   r&   r)   r”     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.fooc                  S   s   d} d}| d }| |d |fS )Nr±   r²   rq   ru   r&   rž   r&   r&   r)   r¢   	  s    z7TestOverloadInlining.test_freevar_bindings.<locals>.barc                  S   s   d} d}| d }| |d |fS )Nr´   rB   rq   ru   r&   rž   r&   r&   r)   r£     s    z7TestOverloadInlining.test_freevar_bindings.<locals>.bazc                    s(   ˆ d ‰t | |d�‡ ‡‡fdd„ƒ}d S )Nrq   r"   c                     s   ‡ ‡‡fdd„} | S )Nc                      s   ˆ ˆd ˆfS r­   r&   r&   rž   r&   r)   r˜     s    zWTestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func.<locals>.implr&   r  rž   r&   r)   r\     s    zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func)r   )r
  r(   rŸ   r#   r\   r&   rž   r)   r®     s    
z;TestOverloadInlining.test_freevar_bindings.<locals>.factoryr¯   r°   r"   r±   r²   r´   rB   r¤   r™   )Nrµ   )r9   r˜   r¥   r¦   r§   r¨   r®   r>   r&   r¡   r)   r¶   õ  s    
	þz*TestOverloadInlining.test_freevar_bindingsc                 C   s   dd„ }| j |ddid� d S )Nc                  S   s   d} t | ƒS r·   r-   r¿   r&   r&   r)   r˜   *  s    z?TestOverloadInlining.test_global_overload_binding.<locals>.implr+   Tr™   r¹   r›   r&   r&   r)   Útest_global_overload_binding(  s    z1TestOverloadInlining.test_global_overload_bindingc                    s.   ddl m‰  ‡ fdd„}| j|ddid� d S )Nr%   rÏ   c                     s   t d } ˆ ƒ | fS r¼   r½   r¿   rÏ   r&   r)   r˜   4  s    zBTestOverloadInlining.test_inline_from_another_module.<locals>.implr£   Tr™   )rÀ   r£   rl   r›   r&   rÏ   r)   rÁ   0  s    z4TestOverloadInlining.test_inline_from_another_modulec                    s4   dd l m  m‰  ‡ fdd„}| j|ddid� d S )Nr   c                     s   t d } ˆ  ¡ | fS r¼   )r¾   r£   r¿   rÂ   r&   r)   r˜   >  s    zLTestOverloadInlining.test_inline_from_another_module_w_getattr.<locals>.implr£   Tr™   rÃ   r›   r&   rÂ   r)   rÆ   :  s    z>TestOverloadInlining.test_inline_from_another_module_w_getattrc                    s6   dd l }dd lm‰  ‡ fdd„}| j|ddid� d S )Nr   c                     s   t d } ˆ j ¡ | fS r¼   )r¾   rÀ   r£   r¿   rÇ   r&   r)   r˜   I  s    zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implr£   Tr™   rÉ   rÊ   r&   rÇ   r)   rÌ   D  s    z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrc                    s0   dd„ }|ƒ ‰ ‡ fdd„}| j |ddid� d S )Nc                     s&   ddl m‰  tdd�‡ fdd„ƒ} | S )Nr%   rÏ   r!   r"   c                      s   ˆ ƒ S r,   r&   r&   rÏ   r&   r)   rÍ   T  s    z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp)rÀ   r£   r   rÎ   r&   rÏ   r)   r®   Q  s    zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryc                     s   t d } ˆ ƒ | fS r¼   r½   r¿   ©Zbopr&   r)   r˜   [  s    zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.implr£   Tr™   r¹   rÐ   r&   r[  r)   rÑ   O  s    z?TestOverloadInlining.test_inline_from_another_module_as_freevarc                    s8   ddl m‰  ‡ fdd„}|ddƒ}| j|ddid	� d S )
Nr%   ©Úbop_factoryc                    s   ˆˆ ƒ‰‡ ‡‡fdd„}|S )Nc                     s   t ˆ ˆ  } ˆƒ | ˆ fS r,   r½   r¿   rÔ   r&   r)   r˜   h  s    zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implr&   rÕ   r\  rÔ   r)   rÖ   e  s    zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.genr¯   r°   r¢   Tr™   )rÀ   r]  rl   r×   r&   r\  r)   rØ   a  s    
z>TestOverloadInlining.test_inline_w_freevar_from_another_modulec                    sÌ   ‡fdd„}‡fdd„}dD ]R\‰‰‡fdd„‰t ˆ|d�‡fd	d
„ƒ}‡‡fdd„}ˆj|ddˆdkid� qdD ]R\‰‰‡fdd„‰ t ˆ |d�‡fdd„ƒ}‡ ‡fdd„}ˆj|ddˆdkid� qtd S )Nc                    s(   ˆ   | tj¡ ˆ  | jd¡ ˆ  |j¡S rÙ   ©rÛ   r   rÜ   rO   rH   r=   r:   rÝ   rÞ   r&   r)   rß   r  s    zCTestOverloadInlining.test_inlining_models.<locals>.s17_caller_modelc                    s(   ˆ   | tj¡ ˆ  | jd¡ ˆ  |j¡S rÙ   r^  rÝ   rÞ   r&   r)   rà   w  s    zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_model))r¯   râ   rã   c                      s   ˆ S r,   r&   r&   rä   r&   r)   r”     s    z6TestOverloadInlining.test_inlining_models.<locals>.foor"   c                     s   ‡ fdd„} | S )Nc                      s   ˆ S r,   r&   r&   rä   r&   r)   r˜   „  s    zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.implr&   r  rä   r&   r)   Úfoo_ol‚  s    z9TestOverloadInlining.test_inlining_models.<locals>.foo_olc                    s   | ˆ  }ˆƒ }|d |fS r­   r&   ræ   rç   r&   r)   r˜   ˆ  s    z7TestOverloadInlining.test_inlining_models.<locals>.implr¯   r”   r2   r™   )rá   )râ   r¯   c                      s   ˆ S r,   r&   r&   rä   r&   r)   r¢   ’  s    z6TestOverloadInlining.test_inlining_models.<locals>.barc                     s   ‡ fdd„} | S )Nc                      s   ˆ S r,   r&   r&   rä   r&   r)   r˜   —  s    zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.implr&   r  rä   r&   r)   Úbar_ol•  s    z9TestOverloadInlining.test_inlining_models.<locals>.bar_olc                    s   | ˆ }ˆ ƒ }|d |fS r­   r&   ræ   ré   r&   r)   r˜   ›  s    r¢   r  )r9   rß   rà   r_  r˜   r`  r&   rê   r)   rë   p  s    

z)TestOverloadInlining.test_inlining_modelsc                    sÜ   dd„ ‰ t ˆ dd�dd„ ƒ}t ˆ dd�dd	„ ƒ}d
d„ }t ˆ |d�dd„ ƒ}‡ fdd„}| j|ddidd�}tt|j ¡ ƒƒd }dd„ |jdd�D ƒ}|  t|ƒdk¡ dd„ | 	t
j¡D ƒ}	|	D ]}
|  |
jd¡ qÄd S )Nc                 S   s$   t t| ƒtjƒr| d S | d S d S )Nrp   r%   )r6   r   r   ÚFloatr'   r&   r&   r)   r¢   §  s    z_TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.barr!   r"   c                 S   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | d S r$   r&   r'   r&   r&   r)   r˜   °  s    ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol.<locals>.impl©r6   r   ÚInteger©r(   r˜   r&   r&   r)   Ú
bar_int_ol­  s    zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_olr1   c                 S   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | d S )Nrp   r&   r'   r&   r&   r)   r˜   ·  s    zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl)r6   r   ra  rd  r&   r&   r)   Úbar_float_ol´  s    zhTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_olc                  W   s   dS r"  r&   ©rb   r&   r&   r)   Úalways_inline_cost_model»  s    ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.always_inline_cost_modelc                 S   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | d S r$   r&   r'   r&   r&   r)   r˜   Á  s    zxTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol.<locals>.impl)r6   r   ÚComplexrd  r&   r&   r)   Úbar_complex_ol¾  s    zjTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_olc                     s$   ˆ dƒ} ˆ dƒ}ˆ dƒ}| | | S )Nr%   gffffff@y              @r&   ©r�   r‚   rƒ   r»   r&   r)   r˜   Å  s    z`TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.implr¢   Fr%   rñ   c                 S   s   g | ]}|‘qS r&   r&   rE   r&   r&   r)   rG   Ñ  s     zfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.<listcomp>rI   )rH   c                 S   s&   g | ]}t t|d dƒtjƒr|j‘qS )r8   N)r6   r[   r   r	  r8   rE   r&   r&   r)   rG   Õ  s    ÿrp   )r   rl   rX   rY   r3   rL   rZ   Ú
assertTruerW   Z
find_instsr   r7   ZassertNotEqualr8   )r9   re  rf  rh  rj  r˜   rg   rh   ÚcallsZconstsÚvalr&   r»   r)   Ú=test_multiple_overloads_with_different_inline_characteristics¢  s     





zRTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristicsc                    sx   dd„ }dd„ ‰ t ˆ dd�|ƒ ‡ fdd„}d	}| j||d
did� dd„ ‰ t ˆ dd�|ƒ d}| j||d
did� d S )Nc                 S   sH   t | tjƒsdd„ }|S | jdkr.dd„ }|S | jdkrDdd„ }|S d S )	Nc                 S   s   t | ƒS r,   )r   rs   r&   r&   r)   Úfoo_noopà  s    znTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_nooprM   c                 S   s   dS ©Nr¯   r&   rs   r&   r&   r)   Úfoo_as_str_implå  s    zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl)Úint64Zfloat64c                 S   s   dS ©Nr°   r&   rs   r&   r&   r)   Úfoo_as_num_implê  s    zuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_num_impl)r6   r   ZStringLiteralZliteral_value)rt   rp  rr  ru  r&   r&   r)   Úfoo_ovldÝ  s    

z\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovldc                 S   s   dS rq  r&   rs   r&   r&   r)   r”   ï  s    zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foor!   r"   c                    s   ˆ | ƒS r,   r&   rs   r•   r&   r)   ra   ô  s    z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_implrM   r”   Tr™   c                 S   s   dS rt  r&   rs   r&   r&   r)   r”   ü  s    rs  r  )r9   rv  ra   rt   r&   r•   r)   Ú5test_overload_inline_always_with_literally_in_inlineeÚ  s    zJTestOverloadInlining.test_overload_inline_always_with_literally_in_inlineec                    sH   d‰ dd„ ‰t ˆdd�‡ fdd„ƒ}‡fdd	„}| j|d
ddid� d S )NTc                 S   s   dS r"  r&   ©ÚAr&   r&   r)   r”   	  s    z8TestOverloadInlining.test_inline_always_ssa.<locals>.foor!   r"   c                    s   ‡ fdd„}|S )Nc                    s6   ˆ }t t| ƒƒD ] }ˆ }| | r(| | }||9 }q|S r,   )r~   rW   )ry  r’   r‰   Údummy©Ú
dummy_truer&   r)   r˜     s    
zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.implr&   )ry  r˜   r{  r&   r)   r    s    zATestOverloadInlining.test_inline_always_ssa.<locals>.foo_overloadc                      s   ˆ t  dddg¡ƒS )NTF)rz   Úarrayr&   r•   r&   r)   r˜     s    z9TestOverloadInlining.test_inline_always_ssa.<locals>.implrD   r”   ©r?   r>   r  r  r&   )r|  r”   r)   Útest_inline_always_ssa  s    
z+TestOverloadInlining.test_inline_always_ssac              	      s‚   dd„ ‰ t ˆ dd�‡ fdd„ƒ}t‡ fdd„ƒ}tjd	d
��,}t dtj¡ tƒ  |  |ƒ | 	¡ ¡ W 5 Q R X |  t
|ƒd¡ d S )Nc                  S   s   d} | dkr| d } qdS )Nrw   r%   rv   r¯   r&   rª   r&   r&   r)   r¢   !  s    
zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.barr!   r"   c                      s   ˆ S r,   r&   r&   r»   r&   r)   Úbar_impl(  s    zLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_implc                      s
   ˆ ƒ  d S r,   r&   r&   r»   r&   r)   r”   ,  s    zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.fooT)Úrecordr   )r   r   ÚwarningsÚcatch_warningsÚsimplefilterr   ZNumbaIRAssumptionWarningr    rO   Zpy_funcrW   )r9   r€  r”   Úwr&   r»   r)   Ú%test_inline_always_ssa_scope_validity  s    
z:TestOverloadInlining.test_inline_always_ssa_scope_validityN)r_   rm   rn   rœ   r�   r  r0  r8  rD  rP  rQ  rW  r©   r¶   rZ  rÁ   rÆ   rÌ   rÑ   rØ   rë   ro  rw  r  r†  r&   r&   r&   r)   r  ý  s,   ',3

28*r  c                       sˆ   e Zd Z‡ fdd„Zddd„Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS ) ÚTestOverloadMethsAttrsInliningc                    s   |   ¡  tt| ƒ ¡  d S r,   )r,  Úsuperr‡  ÚsetUprÞ   ©Ú	__class__r&   r)   r‰  ;  s    z$TestOverloadMethsAttrsInlining.setUpTc                 C   s°   t td�|ƒ}|  ||Ž |¡ |j|jd  jd }|j|_|  t|jƒ|¡ |r||j ¡ D ]}t	| 
d¡ƒ}	|  |	¡ q\n0g }
|j ¡ D ]}|
t	| 
d¡ƒ7 }
qŠ|  |
¡ d S )Nr@   r   rA   rI   ©r   r   rO   rP   rQ   rR   r3   rW   r4   ÚlistrZ   r`   rl  )r9   ra   rb   Úexpectedr?   Úexpects_inlinedrf   rg   rh   rm  Zallcallsr&   r&   r)   Úcheck_method?  s    z+TestOverloadMethsAttrsInlining.check_methodc                 C   s°   t td�|ƒ}|  ||Ž |¡ |j|jd  jd }|j|_|  t|jƒ|¡ |r||j ¡ D ]}t	| 
d¡ƒ}	|  |	¡ q\n0g }
|j ¡ D ]}|
t	| 
d¡ƒ7 }
qŠ|  |
¡ d S )Nr@   r   rA   r[   rŒ  )r9   ra   rb   rŽ  r?   r�  rf   rg   rh   ZgetattrsZallgetattrsr&   r&   r)   Úcheck_getattrU  s    z,TestOverloadMethsAttrsInlining.check_getattrc                 C   sF   |   ¡ \}}t|ddd�ddd„ƒ}dd„ }| j||ƒ gdd	d
� d S )NÚinline_methodr!   r"   c                 S   s   ddd„}|S )Nc                 S   s
   d||fS )NúTHIS IS INLINEDr&   )rI  rn  Úval2r&   r&   r)   Úgetp  s    zqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.get)NNr&   )rI  rn  r”  r•  r&   r&   r)   Ú_get_inlined_methodn  s    
zdTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_methodc                 S   s   |   d¡| j dd�fS )Nrx   éA  )r”  ©r’  ©rI  r&   r&   r)   r”   t  s    zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foo))r“  rx   N)r“  Nr—  r%   )ra   rb   rŽ  r?   )NN©r,  r   r�  )r9   r/  r'  r–  r”   r&   r&   r)   Ú(test_overload_method_default_args_alwaysk  s    ûzGTestOverloadMethsAttrsInlining.test_overload_method_default_args_alwaysc                    sR   ‡ fdd„}|   ¡ \}}t|d|d�dd„ ƒ}dd„ }| j||ƒ gd	d
ˆ d� d S )Nc                     s   ˆ S r,   r&   rg  ©Úshould_inliner&   r)   Ú	costmodel€  s    zKTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.costmodelr’  r"   c                 S   s   dd„ }|S )Nc                 S   s   d|fS )NúTHIS IS INLINED!!!r&   )rI  rn  r&   r&   r)   r•  ‡  s    zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.getr&   )rI  rn  r•  r&   r&   r)   r–  …  s    zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_methodc                 S   s
   |   d¡S ©Nrx   r˜  r™  r&   r&   r)   r”   ‹  s    zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo)rŸ  rx   r%   ©ra   rb   rŽ  r?   r�  rš  )r9   rž  r�  r/  r'  r–  r”   r&   rœ  r)   Úmake_overload_method_test  s    
ûz8TestOverloadMethsAttrsInlining.make_overload_method_testc                 C   s   | j ddd� d S ©Nr!   T©rž  r�  ©r¢  rÞ   r&   r&   r)   Ú'test_overload_method_cost_driven_always–  s    þzFTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_alwaysc                 C   s   | j ddd� d S ©Nr1   Fr¤  r¥  rÞ   r&   r&   r)   Ú&test_overload_method_cost_driven_neverœ  s    þzETestOverloadMethsAttrsInlining.test_overload_method_cost_driven_neverc                 C   s   | j dd„ dd� d S )Nc                  W   s   dS r"  r&   rg  r&   r&   r)   r  ¤  r  z]TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inline.<locals>.<lambda>Tr¤  r¥  rÞ   r&   r&   r)   Ú,test_overload_method_cost_driven_must_inline¢  s    þzKTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inlinec                 C   s   | j dd„ dd� d S )Nc                  W   s   dS ©NFr&   rg  r&   r&   r)   r  ª  r  z[TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline.<locals>.<lambda>Fr¤  r¥  rÞ   r&   r&   r)   Ú*test_overload_method_cost_driven_no_inline¨  s    þzITestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inlinec                 C   sF   |   ¡ \}}t|d|d�dd„ ƒ}dd„ }| j||ƒ gdd|d	� d S )
NÚinlinemer"   c                 S   s   dd„ }|S )Nc                 S   s   dS )NúMY INLINED ATTRSr&   r™  r&   r&   r)   r•  ³  s    z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.getr&   )rI  r•  r&   r&   r)   Ú_get_inlineme±  s    zRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlinemec                 S   s   | j S r,   )r¬  r™  r&   r&   r)   r”   ·  s    zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foor­  r%   r¡  )r,  r   r‘  )r9   rž  r�  r/  r'  r®  r”   r&   r&   r)   Úmake_overload_attribute_test®  s    
ûz;TestOverloadMethsAttrsInlining.make_overload_attribute_testc                 C   s   | j ddd� d S r£  ©r¯  rÞ   r&   r&   r)   Útest_overload_attribute_alwaysÂ  s    þz=TestOverloadMethsAttrsInlining.test_overload_attribute_alwaysc                 C   s   | j ddd� d S r§  r°  rÞ   r&   r&   r)   Útest_overload_attribute_neverÈ  s    þz<TestOverloadMethsAttrsInlining.test_overload_attribute_neverc                 C   s   | j dd„ dd� d S )Nc                  W   s   dS r"  r&   rg  r&   r&   r)   r  Ð  r  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>Tr¤  r°  rÞ   r&   r&   r)   Ú-test_overload_attribute_costmodel_must_inlineÎ  s    þzLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inlinec                 C   s   | j dd„ dd� d S )Nc                  W   s   dS rª  r&   rg  r&   r&   r)   r  Ö  r  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>Fr¤  r°  rÞ   r&   r&   r)   Ú+test_overload_attribute_costmodel_no_inlineÔ  s    þzJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline)T)T)r_   rm   rn   r‰  r�  r‘  r›  r¢  r¦  r¨  r©  r«  r¯  r±  r²  r³  r´  Ú__classcell__r&   r&   rŠ  r)   r‡  :  s     ÿ
 ÿ
r‡  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestGeneralInliningc                 C   s2   t tdd�dd„ ƒ}dd„ }| j|ddid	� d S )
Nr!   r"   c                 S   s   d S r,   r&   rx  r&   r&   r)   Úoverload_lenâ  s    zSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_lenc                   S   s   t dddgƒS )Nrv   ru   rð   )rW   r&   r&   r&   r)   r˜   ç  s    zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.implrW   Fr™   )r   rW   rl   )r9   r·  r˜   r&   r&   r)   Ú)test_with_inlined_and_noninlined_variantsÝ  s    

z=TestGeneralInlining.test_with_inlined_and_noninlined_variantsc                    sB   ddd„‰ t ˆ dd�ddd„ƒ}‡ fd	d
„}| j|ddid� d S )Nru   rw   c                 S   s   | | | S r,   r&   rk  r&   r&   r)   r”   ï  s    z1TestGeneralInlining.test_with_kwargs.<locals>.foor!   r"   c                 S   s   ddd„}|S )Nru   rw   c                 S   s   | | | S r,   r&   rk  r&   r&   r)   r˜   ô  s    zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.impl)ru   rw   r&   )r�   r‚   rƒ   r˜   r&   r&   r)   r  ò  s    
z:TestGeneralInlining.test_with_kwargs.<locals>.overload_fooc                      s   ˆ ddd�S )Nru   r¯   ©rƒ   r&   r&   r•   r&   r)   r˜   ø  s    z2TestGeneralInlining.test_with_kwargs.<locals>.implr”   Tr™   )ru   rw   )ru   rw   r  r  r&   r•   r)   Útest_with_kwargsí  s
    

z$TestGeneralInlining.test_with_kwargsc                    s<   t dd�ddd„ƒ‰ d‡ fd	d
„	}| j|ddddid� d S )Nr!   r"   rq   rø   c                 S   s   | | S r,   r&   rk  r&   r&   r)   r¢   ÿ  s    z2TestGeneralInlining.test_with_kwargs2.<locals>.barrô   rw   c                    s   ˆ | | dd�S )Nr¸   r¹  r&   rk  r»   r&   r)   r˜     s    z3TestGeneralInlining.test_with_kwargs2.<locals>.implru   rð   r¢   Tr™   )rq   rø   )rô   rw   rš   r›   r&   r»   r)   Útest_with_kwargs2ý  s    z%TestGeneralInlining.test_with_kwargs2c                    s8   t dd�ddd„ƒ‰ ‡ fdd„}| j|ddd	id
� d S )Nr!   r"   c                 S   s   |d krd}| |fS r   r&   r  r&   r&   r)   r¢     s    z@TestGeneralInlining.test_inlining_optional_constant.<locals>.barc                      s   ˆ ƒ ˆ dƒˆ dd�fS )Nrx   r—  rª   r&   r&   r»   r&   r)   r˜     s    zATestGeneralInlining.test_inlining_optional_constant.<locals>.implrD   r¢   Tr~  )NNrš   r›   r&   r»   r)   Útest_inlining_optional_constant  s    z3TestGeneralInlining.test_inlining_optional_constantN)r_   rm   rn   r¸  rº  r»  r¼  r&   r&   r&   r)   r¶  Û  s   r¶  c                   @   s   e Zd Zdd„ ZdS )ÚTestInlineOptionsc                 C   sº   t dƒ}|  |j¡ |  |j¡ |  |j¡ |  |jd¡ t dƒ}|  |j¡ |  |j¡ |  |j¡ |  |jd¡ dd„ }t |ƒ}|  |j¡ |  |j¡ |  |j¡ |  |j|¡ d S )Nr!   r1   c                 S   s   | S r,   r&   r'   r&   r&   r)   Ú
cost_model&  s    z0TestInlineOptions.test_basic.<locals>.cost_model)	r   rl  Zis_always_inliner`   Zis_never_inlineZhas_cost_modelrO   r8   ZassertIs)r9   r!   r1   r¾  Úmodelr&   r&   r)   Ú
test_basic  s     zTestInlineOptions.test_basicN)r_   rm   rn   rÀ  r&   r&   r&   r)   r½    s   r½  c                   @   s@   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	dS )ÚTestInlineMiscIssuesc                    sd   dd„ ‰ t ˆ dd�dd„ ƒ}tdd�‡ fd	d
„ƒ}tdd�dd„ ƒ}|t d¡ƒ |t d¡ƒ d S )Nc                 S   s   d S r,   r&   )r}  rt   r&   r&   r)   Úoutput_factory2  s    z;TestInlineMiscIssues.test_issue4691.<locals>.output_factoryr!   r"   c                 S   s   t | tjjƒrdd„ }|S d S )Nc                 S   s   | j dd … }tj||d�S ©Nru   rs   )Úshaperz   r{   )r}  rt   rÄ  r&   r&   r)   r˜   8  s    zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl)r6   r   ZnpytypesZArray)r}  rt   r˜   r&   r&   r)   Úol_output_factory5  s    z>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factoryT)Znogilc                    s   ˆ | | j ƒ}|S r,   rs   )r}  Úout©rÂ  r&   r)   r^   >  s    z/TestInlineMiscIssues.test_issue4691.<locals>.fnc                 S   s   t j| jdd … | jd�S rÃ  )rz   r{   rÄ  rt   ©r}  r&   r&   r)   Úfn2C  s    z0TestInlineMiscIssues.test_issue4691.<locals>.fn2)r¯   r°   r±   r²   r³   )r   r   rz   Úones)r9   rÅ  r^   rÉ  r&   rÇ  r)   Útest_issue46911  s    


z#TestInlineMiscIssues.test_issue4691c                    s4   t dd�dd„ ƒ‰ t ‡ fdd„ƒ}|t d¡ƒ d S )Nr!   r"   c                 S   s   | j dkrtdƒ‚| S )Nr%   zInvalid number of dimensions)Úndimr  rÈ  r&   r&   r)   ÚinliningL  s    
z5TestInlineMiscIssues.test_issue4693.<locals>.inliningc                    s   ˆ | ƒS r,   r&   rÈ  ©rÍ  r&   r)   r^   S  s    z/TestInlineMiscIssues.test_issue4693.<locals>.fnr¯   )r   rz   r{   )r9   r^   r&   rÎ  r)   Útest_issue4693J  s
    
z#TestInlineMiscIssues.test_issue4693c              	      sT   t dd�dd„ ƒ‰ t ‡ fdd„ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nr!   r"   c                  S   s   d} t | ƒ‚d S )NúSomething happened)r  )Úmsgr&   r&   r)   rÍ  \  s    z5TestInlineMiscIssues.test_issue5476.<locals>.inliningc                      s   ˆ ƒ S r,   r&   r&   rÎ  r&   r)   r^   a  s    z/TestInlineMiscIssues.test_issue5476.<locals>.fnrÐ  )r   rS  r  rU  rM   rV  )r9   r^   Zraisesr&   rÎ  r)   Útest_issue5476Y  s    
z#TestInlineMiscIssues.test_issue5476c                    s¾   G ‡fdd„dƒ‰ G dd„ dt jƒ‰tˆƒG dd„ dtjƒƒ}tˆddƒ t‡fd	d
„ƒ‰tˆ dd�‡fdd„ƒ}tˆddd�dd„ ƒ}t	‡ fdd„ƒ}d‰d}|ˆ|ƒ}|  
|ˆ| ¡ d S )Nc                       s    e Zd Zdd„ Z‡ fdd„ZdS )z2TestInlineMiscIssues.test_issue5792.<locals>.Dummyc                 S   s
   || _ d S r,   ©Údata©r9   rÔ  r&   r&   r)   Ú__init__o  s    z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__c                    s
   ˆ |j  S r,   rÓ  ©r9   ÚotherrÓ  r&   r)   Údivr  s    z6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divN)r_   rm   rn   rÖ  rÙ  r&   rÓ  r&   r)   r/  n  s   r/  c                       s   e Zd Z‡ fdd„Z‡  ZS )z6TestInlineMiscIssues.test_issue5792.<locals>.DummyTypec                    s"   || _ tƒ jd| j › d�d� d S )NzDummy(ú))r]   ©rÔ  rˆ  rÖ  rÕ  rŠ  r&   r)   rÖ  v  s    z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__©r_   rm   rn   rÖ  rµ  r&   r&   rŠ  r)   r'  u  s   r'  c                       s   e Zd Z‡ fdd„Z‡  ZS )z;TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                    s    d|j fg}tƒ  |||¡ d S )NrÔ  rÛ  )r9   ZdmmZfe_typeÚmembersrŠ  r&   r)   rÖ  |  s    ÿzDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__rÜ  r&   r&   rŠ  r)   ÚDummyTypeModelz  s   rÞ  rÔ  Ú_datac                    s"   dd„ }ˆ |ƒ}t ||ƒ}||fS )Nc                 S   sF   |j }|\}t |¡| |ƒ}||_| jr>| j ||jd |¡ | ¡ S rR  )	Úreturn_typer
   Zcreate_struct_proxyrÔ  Z
enable_nrtZnrtZincrefrb   Z	_getvalue)ÚcontextZbuilderÚsigrb   ÚtyprÔ  rz  r&   r&   r)   Úcodegen†  s    zHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegenr   )Z	typingctxrÔ  rä  Zret_typrâ  )r'  r&   r)   Ú
init_dummy„  s    
z7TestInlineMiscIssues.test_issue5792.<locals>.init_dummyr!   r"   c                    s   ‡ fdd„}|S )Nc                    s   ˆ | ƒS r,   r&   rÓ  ©rå  r&   r)   Úctor˜  s    zITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctorr&   )rÔ  rç  ræ  r&   r)   Údummy_overload–  s    z;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overloadrÙ  c                 S   s   dd„ }|S )Nc                 S   s   | j |j  S r,   )rß  r×  r&   r&   r)   r˜   Ÿ  s    zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.implr&   )r9   rØ  r˜   r&   r&   r)   Údiv_overload�  s    z9TestInlineMiscIssues.test_issue5792.<locals>.div_overloadc                    s   ˆ | ƒ}ˆ |ƒ}|  |¡S r,   )rÙ  )rÔ  Ú
other_datarz  rØ  )r/  r&   r)   ra   ¤  s    z6TestInlineMiscIssues.test_issue5792.<locals>.test_implg      ð?rý   )r   ÚTyper   r   ZStructModelr   r   r   r   r   rO   )r9   rÞ  rè  ré  ra   rê  Úresr&   )r/  r'  rÔ  rå  r)   Útest_issue5792j  s"    


z#TestInlineMiscIssues.test_issue5792c                    sV   G dd„ dt ƒ}dd„ ‰ tˆ dd�dd„ ƒ}t|d	�‡ fd
d„ƒ}|  |dƒd¡ dS )z] Similar to the above test_issue5792, checks mutation of the inlinee
        IR is local onlyc                   @   s   e Zd Zdd„ ZdS )z;TestInlineMiscIssues.test_issue5824.<locals>.CustomCompilerc                 S   s&   t  | j¡}| tt¡ | ¡  |gS r,   )r   Zdefine_nopython_pipelineÚstateZadd_pass_afterr   Úfinalize)r9   Úpmr&   r&   r)   Údefine_pipelines¶  s    zLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelinesN)r_   rm   rn   rñ  r&   r&   r&   r)   ÚCustomCompiler´  s   rò  c                 S   s   d S r,   r&   r'   r&   r&   r)   r¢   ½  s    z0TestInlineMiscIssues.test_issue5824.<locals>.barr!   r"   c                 S   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | d S )NgÍÌÌÌÌÌô?r&   r'   r&   r&   r)   r˜   Ã  s    zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.implrb  rd  r&   r&   r)   Úol_barÀ  s    z3TestInlineMiscIssues.test_issue5824.<locals>.ol_barr@   c                    s   ˆ | ƒˆ | ƒfS r,   r&   r¿   r»   r&   r)   r”   Ç  s    z0TestInlineMiscIssues.test_issue5824.<locals>.foor¯   )çš™™™™™&@rô  N)r   r   r   rO   )r9   rò  ró  r”   r&   r»   r)   Útest_issue5824°  s    	

z#TestInlineMiscIssues.test_issue5824c              	      s˜   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ}t d	¡}||ƒ |  |d
t |¡ ¡ t dd�dd„ ƒ}|  tj¡�}||ƒ W 5 Q R X |  dt	|j
ƒ¡ d S )Nr!   r"   c                 S   s$   t | jƒD ]}| |  d7  < q
d S r$   )r~   Úsize)r(   r‰   r&   r&   r)   r¢   Ö  s    z0TestInlineMiscIssues.test_issue7380.<locals>.barT)Úparallelc                    s$   t | jd ƒD ]}ˆ | | ƒ qd S rR  )r   rÄ  )r�   r‰   r»   r&   r)   r”   Û  s    z0TestInlineMiscIssues.test_issue7380.<locals>.foo)r¯   r¯   rv   c                 S   s@   t | jd ƒD ],}| | }t|jƒD ]}||  d7  < q$qd S )Nr   r%   )r   rÄ  r~   rö  )r�   r‰   r(   r&   r&   r)   Úfoo_badæ  s    z4TestInlineMiscIssues.test_issue7380.<locals>.foo_badz Overwrite of parallel loop index)r   rz   rÊ  ZassertPreciseEqualZ	ones_likerS  r   ZUnsupportedRewriteErrorrU  rM   rV  )r9   r”   r�   rø  r…   r&   r»   r)   Útest_issue7380Í  s    	


z#TestInlineMiscIssues.test_issue7380N)
r_   rm   rn   rË  rÏ  rÒ  rí  rõ  r   rù  r&   r&   r&   r)   rÁ  /  s   FrÁ  Ú__main__)<Ú__doc__r.  r‚  Ú	itertoolsr   Únumpyrz   rË   r   r   r   r   Z
numba.corer   r   r	   r
   r   r   Znumba.core.extendingr   r   r   r   r   r   r   r   Znumba.core.cpur   Znumba.core.compilerr   r   Znumba.core.typed_passesr   Znumba.core.typingr   Znumba.tests.supportr   r   r   r   r   r    r¾   r*   r+   r.   r/   r€   r–   r—   r  r  r‡  r¶  r½  rÁ  r_   Úmainr&   r&   r&   r)   Ú<module>   sL    (
 


@&  S    A "< E
