
    xKgۮ                        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        Z-d Z. ee.d      d        Z/ G d de&      Z0dZ1d Z2 G d de(e0      Z3 G d de(e0      Z4 G d de(e0      Z5 G d de0      Z6 G d de(e0      Z7 G d  d!e&      Z8 G d" d#e&      Z9e:d$k(  r e'jv                          yy)%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                     | dz   S N    xs    `/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_ir_inlining.py_global_funcr,   &   s    q5L    c                     | dz   S r&   r(   r)   s    r+   _global_defnr/   ,   s    q5Lr-   c                     t         S Nr/   r)   s    r+   _global_overloadr3   0   s    r-   c                   &    e Zd ZdZdddZd Zd Zy)InliningBaseFTr"   neverc                    |j                   j                         D ]o  }|j                  D ]^  }t        |t        j
                        st        |j                  t        j                        sC|j                  j                  dk(  s]  y q y)N   TF)blocksvaluesbody
isinstancer	   AssignvalueFreeVar)selffunc_irblkstmts       r+   sentinel_17_cost_modelz#InliningBase.sentinel_17_cost_model>   sc     >>((*CdBII.!$**bjj9::++r1#'	 ! + r-   c                 |   |j                  dd       }|sJ |j                  dd      }|rJ |j                         D ])  \  }}t        |t              sJ t        |t              r)J   t        t              |      }| j                   ||  ||        |j                  |j                  d      j                  d   }	t        j                  |	j                        |	_        | j                  r+t        dj!                  dd	             |	j#                          |d
k7  r%| j                  t%        |	j                        |       t'        t)        |	j                  j+                                     }
|
j-                         D cg c]  }| }}|sJ |j                         D ]  \  }}d}|D ]r  }t/        |dd      dk(  r.|	j1                  |j2                        }||j4                  |k(  z  }At        j6                  |      sW||j8                  j:                  |k(  z  }t | j=                  ||k(          |	S c c}w )Ninline_expectblock_countr'   pipeline_classr   preserved_irFIRP   -SKIPFopcall)popitemsr=   strboolr   r   assertEqual	overloads
signaturesmetadatar
   simplify_CFGr:   _DEBUGprintcenterdumplennextiterr;   
find_exprsgetattrget_definitionfuncnameis_operator_or_getitemfn__name__assertFalse)rA   	test_implargskwargsrG   rH   kvj_funcfirblockr*   exprsfoundexpr	func_defns                   r+   checkzInliningBase.checkK   s   

?D9}jj2z!'')DAqa%%%a&&& * ?%=>yI 	D)64=9 v0034==nM**3::6
;;%,,r3'(HHJ& S_k:T#**++-./ ",,./.q./u!'')DAqE4u-7 # 2 2499 =IY^^q00E44T:TWW--22E  UaZ( * 
 0s   	H9N)ri   
__module____qualname__r[   inline_opt_as_boolrE   rw   r(   r-   r+   r5   r5   5   s    F$(59
	&r-   r5     c                      ddfd	} | S )Ni  c                    | |z   }| z  } t        j                  |t         j                        }||z   }d|z  }d}	d}
t        j                  |      dkD  r||z  }t        j                  d|dz         }t        j
                  ||z
        ||z  z   }t        j                  |d         dk  r7t        |       D ]!  }|	dz  }	t        j                  |	      dk  s! n |	|d   z  }	||z  }g }t        t        |            D ];  }|j                  ||          |dkD  rd}d}
|d	|z
  kD  r|
|z  }
|
|d   t        z   z  }
= |z   z   |
z   |z   | z   |	z   S )
Ndtype              ?r   r'            {   z   )
npzeros	complex64absarangesqrtranger_   append_GLOBAL)abcdefghintrn   lmopqrs_FREEVARs                      r+   fooz_gen_involved.<locals>.foo{   s`   E	XHHQbll+EF66!9q=AA		!QU#AAQ&Avvad|aqAFAvvay1} " QqT	AAA3q6]1u9AA37{QQqTG^# # 1uqy1}q 1$q((r-   )   r   Nr(   )r   r   s    @r+   _gen_involvedr   x   s    H)@ Jr-   c                       e Zd Zd Zd Zd Z ej                  d      d        Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestFunctionInliningc                 ^    t        d      d        fd}| j                  |ddi       y )Nr7   r#   c                       y r1   r(   r(   r-   r+   r   z9TestFunctionInlining.test_basic_inline_never.<locals>.foo       r-   c                               S r1   r(   r   s   r+   implz:TestFunctionInlining.test_basic_inline_never.<locals>.impl   
    5Lr-   r   FrG   r   rw   rA   r   r   s     @r+   test_basic_inline_neverz,TestFunctionInlining.test_basic_inline_never   s3    	W		 
		

4u~
6r-   c                 ^    t        d      d        fd}| j                  |ddi       y )Nr"   r#   c                       y r1   r(   r(   r-   r+   r   z:TestFunctionInlining.test_basic_inline_always.<locals>.foo   r   r-   c                               S r1   r(   r   s   r+   r   z;TestFunctionInlining.test_basic_inline_always.<locals>.impl   r   r-   r   Tr   r   r   s     @r+   test_basic_inline_alwaysz-TestFunctionInlining.test_basic_inline_always   s3    	X		 
		

4t}
5r-   c                 4  	 	fd}d}t        |||      D ]|  \  }}}t        |      d        	t        |      d        t        |      d        | j                  |   | j                  |   | j                  |   d}| j                  ||       ~ y )	Nc                  8            }         }        }| ||fS r1   r(   r*   yzbarbazr   s      r+   r   z;TestFunctionInlining.test_basic_inline_combos.<locals>.impl   #    AAAa7Nr-   r6   r#   c                       y r1   r(   r(   r-   r+   r   z:TestFunctionInlining.test_basic_inline_combos.<locals>.foo       r-   c                       y r1   r(   r(   r-   r+   r   z:TestFunctionInlining.test_basic_inline_combos.<locals>.bar   r   r-   c                       y r1   r(   r(   r-   r+   r   z:TestFunctionInlining.test_basic_inline_combos.<locals>.baz   r   r-   r   r   r   r   )r   r   rz   rw   )
rA   r   opts
inline_foo
inline_bar
inline_bazrG   r   r   r   s
          @@@r+   test_basic_inline_combosz-TestFunctionInlining.test_basic_inline_combos   s    	 '29$d2K.J
J$ % $ % $ % %)$;$;J$G$($;$;J$G$($;$;J$GIM JJt=J9# 3Lr-   z$Need to work out how to prevent thisc                 j    t        d      fd       dfd}| j                  |ddi       y )	Nr"   r#   c                 (    | dk(  ry | dz
         y )Nr   r   r'   r(   )r*   r   s    r+   r   z7TestFunctionInlining.test_recursive_inline.<locals>.foo   s    AvAE
r-   r   c                  D    d} dkD  r| dz  }  d       | k  r| dz  } y y )Nr   r'   r   r(   )r   r   r   s    r+   r   z8TestFunctionInlining.test_recursive_inline.<locals>.impl   s4    A1uQF1uQ r-   r   Tr   r   )rA   r   r   r   s     @@r+   test_recursive_inlinez*TestFunctionInlining.test_recursive_inline   s>     
X		 
	 	 	

4t}
5r-   c                 
  	
 d }	
fd}d}t        |||      D ]d  \  }}} ||dd      
 ||dd       ||dd	      	| j                  |   | j                  |   | j                  |   d
}| j                  ||       f y )Nc                 B    dz   t        |       fd       }|S )Nr   r#   c                       dz   fS Nr   r(   r*   r   r   s   r+   re   zITestFunctionInlining.test_freevar_bindings.<locals>.factory.<locals>.func   s    1q5!}$r-   )r   )r$   r*   r   re   r   s    `` @r+   factoryz;TestFunctionInlining.test_freevar_bindings.<locals>.factory   s(    BA % !%Kr-   c                  8            }         }        }| ||fS r1   r(   r   s      r+   r   z8TestFunctionInlining.test_freevar_bindings.<locals>.impl   r   r-   r6   
         (   2   <   r   r   r   rz   rw   )rA   r   r   r   r   r   r   rG   r   r   r   s           @@@r+   test_freevar_bindingsz*TestFunctionInlining.test_freevar_bindings   s    		 '29$d2K.J
J*b"-C*b"-C*b"-C$($;$;J$G$($;$;J$G$($;$;J$GIM JJt=J9 3Lr-   c                 4    d }| j                  |ddi       y )Nc                      d} t        |       S N   )r,   r)   s    r+   r   z6TestFunctionInlining.test_global_binding.<locals>.impl      A?"r-   r,   Tr   rw   rA   r   s     r+   test_global_bindingz(TestFunctionInlining.test_global_binding      	# 	

4'=
>r-   c                 F    ddl m fd}| j                  |ddi       y )Nr'   r   c                  (    t         dz   }         | fS Nr   _GLOBAL1r   r   s    r+   r   zBTestFunctionInlining.test_inline_from_another_module.<locals>.impl      1A5!8Or-   r   Tr   )inlining_usecasesr   rw   rA   r   r   s     @r+   test_inline_from_another_modulez4TestFunctionInlining.test_inline_from_another_module
  !    *	 	

4t}
5r-   c                 L    dd l mc m fd}| j                  |ddi       y )Nr   c                  :    t         dz   } j                         | fS r   )r   r   r   iucs    r+   r   zLTestFunctionInlining.test_inline_from_another_module_w_getattr.<locals>.impl      1A779a<r-   r   Tr   numba.tests.inlining_usecasestestsr   rw   rA   r   r   s     @r+   )test_inline_from_another_module_w_getattrz>TestFunctionInlining.test_inline_from_another_module_w_getattr  $    33	  	

4t}
5r-   c                 N    dd l }dd lm fd}| j                  |ddi       y )Nr   c                  N    t         dz   } j                  j                         | fS r   )r   r   r   r   nts    r+   r   zNTestFunctionInlining.test_inline_from_another_module_w_2_getattr.<locals>.impl#  &    1A''++-q00r-   r   Tr   r   numba.testsr   rw   rA   numbar   r   s      @r+   +test_inline_from_another_module_w_2_getattrz@TestFunctionInlining.test_inline_from_another_module_w_2_getattr  $    , 	1 	

4t}
5r-   c                 N    d } |       fd}| j                  |ddi       y )Nc                  <    ddl m t        d      fd       } | S )Nr'   r   r"   r#   c                               S r1   r(   r   s   r+   tmpz]TestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmp.  
    ur-   )r   r   r   )r	  r   s    @r+   r   zPTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.factory+  "    ." #Jr-   c                  (    t         dz   }         | fS r   r   r   r   s    r+   r   zMTestFunctionInlining.test_inline_from_another_module_as_freevar.<locals>.impl5  r   r-   r   Tr   r   )rA   r   r   r   s      @r+   *test_inline_from_another_module_as_freevarz?TestFunctionInlining.test_inline_from_another_module_as_freevar)  ,    	 i	 	

4t}
5r-   c                 X    ddl m fd} |dd      }| j                  |ddi       y )	Nr'   )baz_factoryc                 ,              fd}|S )Nc                  0    t         z  z   }         | fS r1   r   r   r   r   r   s    r+   r   zYTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implB      q1u$ua{"r-   r(   )r   r   r   r   r  s   `` @r+   genzKTestFunctionInlining.test_inline_w_freevar_from_another_module.<locals>.gen?      a.C# Kr-   r   r   r   Tr   )r   r  rw   )rA   r  r   r  s      @r+   )test_inline_w_freevar_from_another_modulez>TestFunctionInlining.test_inline_w_freevar_from_another_module;  ,    2	 2r{

4t}
5r-   c                      fd} fd}dD ]8  \  t        |      fd       fd} j                  |ddd	k(  i
       : dD ]8  \  t        |      fd       fd} j                  |ddd	k(  i
       : y )Nc                     j                  | t        j                         j                  | j                  d       j                  |      S NrQ   assertIsInstancer	   ExprrV   rP   rE   ru   caller_infocallee_inforA   s      r+   s17_caller_modelzCTestFunctionInlining.test_inlining_models.<locals>.s17_caller_modelL  <    !!$0TWWf-..{;;r-   c                     j                  | t        j                         j                  | j                  d       j                  |      S r  r  r   s      r+   s17_callee_modelzCTestFunctionInlining.test_inlining_models.<locals>.s17_callee_modelQ  r$  r-   )   r9   r9   r(  r#   c                       S r1   r(   callees   r+   r   z6TestFunctionInlining.test_inlining_models.<locals>.fooY      r-   c                 *    | z   }        }|dz   |fS r   r(   r   r*   r   callerr   s      r+   r   z7TestFunctionInlining.test_inlining_models.<locals>.impl]       JE1uaxr-   r   r   r9   r   c                       S r1   r(   r+  s   r+   r   z6TestFunctionInlining.test_inlining_models.<locals>.barg  r-  r-   c                 *    | z   }        }|dz   |fS r   r(   r   r*   r   r   r0  s      r+   r   z7TestFunctionInlining.test_inlining_models.<locals>.implk  r1  r-   r   r   )rA   r#  r&  r   r   r,  r0  r   s   `   @@@@r+   test_inlining_modelsz)TestFunctionInlining.test_inlining_modelsJ  s    	<
	< 3NFF)* + 
 JJtRv|/DJE 3 3NFF)* + 
 JJtRv|/DJE 3r-   c                 `    t        d      d        fd}| j                  |ddid       y )	Nr"   r#   c                       yNr   r(   r(   r-   r+   r   z9TestFunctionInlining.test_inline_inside_loop.<locals>.foos      r-   c                  @    d} t        d      D ]  }|         z  }  | S )N        r   r   )accr   r   s     r+   r   z:TestFunctionInlining.test_inline_inside_loop.<locals>.implw  s&    C1Xsu Jr-   r   T   rG   rH   r   r   s     @r+   test_inline_inside_loopz,TestFunctionInlining.test_inline_inside_loopr  s7    	X		 
		 	

4t}!
Dr-   c                 `    t        d      d        fd}| j                  |ddid       y )	Nr"   r#   c                       yr8  r(   r(   r-   r+   r   zHTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.foo  r9  r-   c                  J    d} t        d      D ]  }fd}|  |       z  }  | S )Nr;  r   c                               dz   S N   r(   r   s   r+   r   zVTestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl.<locals>.bar  s    519$r-   r<  )r=  r   r   r   s      r+   r   zITestFunctionInlining.test_inline_inside_closure_inside_loop.<locals>.impl  s-    C1X%su  Jr-   r   Tr>  r?  r   r   s     @r+   &test_inline_inside_closure_inside_loopz;TestFunctionInlining.test_inline_inside_closure_inside_loop  s7    	X		 
		 	

4t}!
Dr-   c                 `    t        d      d        fd}| j                  |ddid       y )	Nr"   r#   c                 "      fd} |       dz   S )Nc                      d z   S r8  r(   )r   s   r+   r   zbTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo.<locals>.baz  s    Avr-      r(   )r   r   s   ` r+   r   zUTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.foo  s    519r-   c                  ,    dfd}  | dz         S )N	   c                             dz   | z   S rE  r(   r*   r   r   s    r+   r   zcTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl.<locals>.bar      1vzA~%r-   r   r(   r   r   r   s    @r+   r   zVTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure.<locals>.impl      A&q1u:r-   r   Tr'   r?  r   r   s     @r+   3test_inline_closure_inside_inlinable_inside_closurezHTestFunctionInlining.test_inline_closure_inside_inlinable_inside_closure  s7    	X		 
	
	 	

4t}!
Dr-   c                 z    t        d      t                     t        d      fd       t        d      fd       fd}t        j                  dv rd}nCt        j                  dv rd	}n.t        j                  d
v rd}nt	        t        j                        | j                  |dddd|       y )Nr"   r#   c                 z    dfd}t        |       D ]#  } |dz          ddd |            z   z  % S )Nr   c                     | z   S r1   r(   )r   r=  s    r+   bizzCTestFunctionInlining.test_inline_involved.<locals>.boz.<locals>.biz  s    3wr-   rK         @r'   y              (@r<  )jrW  r*   r=  fortrans      @r+   bozz6TestFunctionInlining.test_inline_involved.<locals>.boz  sH    C1Xs1s7|gb#q#s3x&HHH Jr-   c                      d}t        d      D ].  } ddddd       fd}| ||      dz    |      z   z   z  }0 | d      z   S )Nr   r   r'   c                     dz   | z   z   S r8  r(   )r*   r   r	  s    r+   r   zCTestFunctionInlining.test_inline_involved.<locals>.foo.<locals>.baz  s    6A:++r-   rK  r   r<  )r   r=  r   r   r	  r[  rZ  s   `   @r+   r   z6TestFunctionInlining.test_inline_involved.<locals>.foo  s]    C2YaAq!,,s1vzCF*S00  Q<r-   c                  ,    dfd}  | dz         S )NrM  c                             dz   | z   S rE  r(   rO  s    r+   r   zDTestFunctionInlining.test_inline_involved.<locals>.impl.<locals>.bar  rP  r-   r   r(   rQ  s    @r+   r   z7TestFunctionInlining.test_inline_involved.<locals>.impl  rR  r-   ))r   r   '   ))r   r   )r   r(  #   ))r   rM  !   T)r   r[  rZ  r?  )r   r   r   	PYVERSIONNotImplementedErrorrw   )rA   r   bcr[  r   rZ  s      @@@r+   test_inline_involvedz)TestFunctionInlining.test_inline_involved  s    '$h'8	X		 
	 
X		  
	 	 ??k)B__ 22B__	)B%eoo66

4tD37(9FH 	 	Jr-   c                   
 t        d      d        
t        t              
fd       }| j                   |dd      d       |j                  |j                  d	      j
                  d
   }g }|j                  j                         D ]~  }|j                  D ]m  }t        |t        j                        st        |j                  t        j                        sC|j                  j                  dk(  s]|j                  |       o  | j                  t        |      d       |D ]X  }|j                   j"                  }| j%                         j'                  | j(                        }| d}	| j+                  ||	       Z y )Nr"   r#   c                     d}d}||z   | z   S )Nr   r   r(   )r   r*   r   s      r+   r   z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.bar  s    AAq519r-   rI   c                 $     |        |      fS r1   r(   )r   r   r   s     r+   r   z=TestFunctionInlining.test_inline_renaming_scheme.<locals>.foo      q63q6>!r-   r   r   )   ra  r   rK   r   r   z__locals__bar_v[0-9]+.x)r   r   rV   rW   rX   rY   r:   r;   r<   r=   r	   r>   r?   Constr   r_   targetrf   idlstriprx   assertRegex)rA   r   rB   storerC   rD   r   rf   basenameregexr   s             @r+   test_inline_renaming_schemez0TestFunctionInlining.test_inline_renaming_scheme  s>    
X		 
	
 
5	6	" 
7	" 	Rh/ --q 12;;NK>>((*CdBII.!$**bhh7::++q0!LL.	 ! + 	UQ'A88==Dwwy''8H z!89ET5)	 r-   N)ri   rx   ry   r   r   r   r   skipr   r   r   r   r   r  r  r  r5  r@  rG  rS  rf  rt  r(   r-   r+   r   r      sy    76:: X]]9:6 ;6*::?66	66$6&FPEEE +JZ#*r-   r   c                       e Zd Zd Zy)TestRegisterJitableInliningc                 ^    t        d      d        fd}| j                  |ddi       y )Nr"   r#   c                       yr&   r(   r(   r-   r+   r   zFTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.foo  s    r-   c                                y r1   r(   r   s   r+   r   zGTestRegisterJitableInlining.test_register_jitable_inlines.<locals>.impl  s    Er-   r   Tr   )r   rw   r   s     @r+   test_register_jitable_inlinesz9TestRegisterJitableInlining.test_register_jitable_inlines  s5    		*	 
+		 	

4t}
5r-   N)ri   rx   ry   r{  r(   r-   r+   rw  rw    s    	6r-   rw  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestOverloadInliningc                 f    d t        d      d        }fd}| j                  |ddi       y )	Nc                       y r1   r(   r(   r-   r+   r   z9TestOverloadInlining.test_basic_inline_never.<locals>.foo      r-   r7   r#   c                      d } | S )Nc                       y r1   r(   r(   r-   r+   foo_implzTTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload.<locals>.foo_impl      r-   r(   )r  s    r+   foo_overloadzBTestOverloadInlining.test_basic_inline_never.<locals>.foo_overload  s    Or-   c                               S r1   r(   r   s   r+   r   z:TestOverloadInlining.test_basic_inline_never.<locals>.impl  r   r-   r   Fr   r   rw   rA   r  r   r   s      @r+   r   z,TestOverloadInlining.test_basic_inline_never  s>    	 
#g	&	 
'	
	 	

4u~
6r-   c                 f    d t        d      d        }fd}| j                  |ddi       y )	Nc                       y r1   r(   r(   r-   r+   r   z:TestOverloadInlining.test_basic_inline_always.<locals>.foo  r  r-   r"   r#   c                      d } | S )Nc                       y r1   r(   r(   r-   r+   r   zQTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload.<locals>.impl  r  r-   r(   r   s    r+   r  zCTestOverloadInlining.test_basic_inline_always.<locals>.foo_overload  s    Kr-   c                               S r1   r(   r   s   r+   r   z;TestOverloadInlining.test_basic_inline_always.<locals>.impl  r   r-   r   Tr   r  r  s      @r+   r   z-TestOverloadInlining.test_basic_inline_always  s>    	 
#h	'	 
(	
	 	

4t}
5r-   c                 f    d t        d      d        }fd}| j                  |ddi       y )	Nc                     | |z   S r1   r(   r   r   s     r+   r   zBTestOverloadInlining.test_inline_always_kw_no_default.<locals>.foo"  s    q5Lr-   r"   r#   c                     d S )Nc                     | |z   S r1   r(   r  s     r+   <lambda>z]TestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo.<locals>.<lambda>'  s    Ar-   r(   r  s     r+   overload_foozKTestOverloadInlining.test_inline_always_kw_no_default.<locals>.overload_foo%  s    %%r-   c                        dd      S )Nr   r>  r   r(   r   s   r+   r   zCTestOverloadInlining.test_inline_always_kw_no_default.<locals>.impl)  s    qA;r-   r   Tr   r  rA   r  r   r   s      @r+    test_inline_always_kw_no_defaultz5TestOverloadInlining.test_inline_always_kw_no_default   s>    	 
#h	'	& 
(	&	 	

4t}
5r-   c                 p   d }d }d | j                         \  }t        |d       t        |d       t        t        j                  d      fd       }t        t        j
                  d	      fd
       }| j                  | |       ddi       | j                  | |       ddi       y )Nc                     |  S r1   r(   r)   s    r+   impl_inlinezETestOverloadInlining.test_inline_operators_unary.<locals>.impl_inline0  	    2Ir-   c                     | S r1   r(   r)   s    r+   impl_noinlinezGTestOverloadInlining.test_inline_operators_unary.<locals>.impl_noinline3  r  r-   c                      yNTr(   r)   s    r+   r  zBTestOverloadInlining.test_inline_operators_unary.<locals>.<lambda>6  s    Tr-   __neg____pos__r"   r#   c                 "    t        |       rS y r1   r=   r*   	DummyTypedummy_unary_impls    r+   overload_dummy_negzLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_neg;      !Y''' (r-   r7   c                 "    t        |       rS y r1   r  r  s    r+   overload_dummy_poszLTestOverloadInlining.test_inline_operators_unary.<locals>.overload_dummy_pos@  r  r-   negTr   posF)make_dummy_typesetattrr   operatorr  r  rw   )rA   r  r  Dummyr  r  r  r  s         @@r+   test_inline_operators_unaryz0TestOverloadInlining.test_inline_operators_unary.  s    		 *//1yy"23y"23	(,,x	0	( 
1	( 
(,,w	/	( 
0	( 	

;t}
E

=%'%
Hr-   c                 p   d }d }| j                         \  }d t        |d       t        |d       t        t        j                  d      fd       }t        t        j
                  d	      fd
       }| j                  | |       ddi       | j                  | |       ddi       y )Nc                     | dk(  S r&   r(   r)   s    r+   r  zETestOverloadInlining.test_inline_operators_binop.<locals>.impl_inlineJ      6Mr-   c                     | dk7  S r&   r(   r)   s    r+   r  zGTestOverloadInlining.test_inline_operators_binop.<locals>.impl_noinlineM  r  r-   c                      yr  r(   r  s     r+   r  zBTestOverloadInlining.test_inline_operators_binop.<locals>.<lambda>R  s    r-   __eq____ne__r"   r#   c                 "    t        |       rS y r1   r  r   r   r  dummy_binop_impls     r+   overload_dummy_eqzKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_eqV  r  r-   r7   c                 "    t        |       rS y r1   r  r  s     r+   overload_dummy_nezKTestOverloadInlining.test_inline_operators_binop.<locals>.overload_dummy_ne[  r  r-   eqTr   neF)r  r  r   r  r  r  rw   )rA   r  r  r  r  r  r  r  s         @@r+   test_inline_operators_binopz0TestOverloadInlining.test_inline_operators_binopH  s    		  //1y,x!12x!12	(++h	/	( 
0	( 
(++g	.	( 
/	( 	

;d|
D

=%'$
Gr-   c                    	 d }d }| j                         \  }d 	t        |d	       t        |d	       t        t        j                  d      	fd       }t        t        j
                  d	      	fd
       }t        t        j                  d      	fd       }t        t        j                  d	      	fd       }| j                  | |       ddi       | j                  | |       ddi       y )Nc                     | dz  } y r&   r(   r)   s    r+   r  zMTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_inlinee      FAr-   c                     | dz  } y r&   r(   r)   s    r+   r  zOTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.impl_noinlineh  r  r-   c                      yr  r(   r  s     r+   r  zJTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.<lambda>m  s    r-   __iadd____isub__r"   r#   c                 "    t        |       rS y r1   r  r   r   r  dummy_inplace_binop_impls     r+   overload_dummy_iaddzUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_iaddq      !Y'// (r-   r7   c                 "    t        |       rS y r1   r  r  s     r+   overload_dummy_isubzUTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_isubv  r  r-   c                 "    t        |       rS y r1   r  r  s     r+   overload_dummy_addzTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_add}  r  r-   c                 "    t        |       rS y r1   r  r  s     r+   overload_dummy_subzTTestOverloadInlining.test_inline_operators_inplace_binop.<locals>.overload_dummy_sub  r  r-   iaddTr   isubF)	r  r  r   r  r  r  addsubrw   )
rA   r  r  r  r  r  r  r  r  r  s
           @@r+   #test_inline_operators_inplace_binopz8TestOverloadInlining.test_inline_operators_inplace_binopc  s    		  //1y#4 z#;<z#;<	(--	1	0 
2	0 
(--	0	0 
1	0 
(,,x	0	0 
1	0 
(,,w	/	0 
0	0 	

;~
F

=%'&%
Ir-   c                    d }d }| j                         \  }d t        |d       t        t        j                  d      fd       }| j                  | |       dd	d
i       | j                  | |       d	d
i       y )Nc                     | |   S r1   r(   r*   idxs     r+   r   zGTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl      S6Mr-   c                     | d   S r&   r(   r)   s    r+   impl_static_getitemzVTestOverloadInlining.test_inline_always_operators_getitem.<locals>.impl_static_getitem      Q4Kr-   c                      y r1   r(   objr  s     r+   r  zKTestOverloadInlining.test_inline_always_operators_getitem.<locals>.<lambda>      dr-   __getitem__r"   r#   c                 "    t        |       rS y r1   r  r  r  r  dummy_getitem_impls     r+   overload_dummy_getitemzYTestOverloadInlining.test_inline_always_operators_getitem.<locals>.overload_dummy_getitem      #y))) *r-   r'   getitemTr   r  r  r   r  r  rw   rA   r   r  r  r  r  r  s        @@r+   $test_inline_always_operators_getitemz9TestOverloadInlining.test_inline_always_operators_getitem  s    		  //1y2}&89	(""8	4	* 
5	* 	

4!It3D
E

&"+T!2 	 	4r-   c                    d }d }| j                         \  }d t        |d       t        t        j                  d      fd       }| j                  | |       dd	d
i       | j                  | |       d	d
i       y )Nc                     | |   S r1   r(   r  s     r+   r   zFTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl  r  r-   c                     | d   S r&   r(   r)   s    r+   r  zUTestOverloadInlining.test_inline_never_operators_getitem.<locals>.impl_static_getitem  r  r-   c                      y r1   r(   r  s     r+   r  zJTestOverloadInlining.test_inline_never_operators_getitem.<locals>.<lambda>  r  r-   r  r7   r#   c                 "    t        |       rS y r1   r  r  s     r+   r  zXTestOverloadInlining.test_inline_never_operators_getitem.<locals>.overload_dummy_getitem  r  r-   r'   r  Fr   r  r  s        @@r+   #test_inline_never_operators_getitemz8TestOverloadInlining.test_inline_never_operators_getitem  s    		  //1y2}&89	(""7	3	* 
4	* 	

4!Iu3E
F

&"+U!3 	 	5r-   c                    d t        d      d        }fd}| j                  t              5 }| j                  |ddi       d d d        | j	                  d	t        j                               y # 1 sw Y   /xY w)
Nc                     | |d   z   S Nr   r(   r  s     r+   r   z;TestOverloadInlining.test_inline_stararg_error.<locals>.foo  s    qt8Or-   r"   r#   c                     d S )Nc                     | |d   z   S r  r(   r  s     r+   r  zVTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo.<locals>.<lambda>  s    QqTr-   r(   r  s     r+   r  zDTestOverloadInlining.test_inline_stararg_error.<locals>.overload_foo  s    ))r-   c                        ddd      S )Nr   r   r(   r   s   r+   r   z<TestOverloadInlining.test_inline_stararg_error.<locals>.impl  s    q!Q<r-   r   Tr   z-Stararg not supported in inliner for arg 1 *b)r   assertRaisesrd  rw   assertInrT   	exception)rA   r  r   r   r   s       @r+   test_inline_stararg_errorz.TestOverloadInlining.test_inline_stararg_error  sz    	 
#h	'	* 
(	*	  23qJJtE4=J9 4 	E!++&	( 43s   A66A?c                 L  
 
fd}d}t        |||      D ]  \  }}}d d 
d t        |      d        }t        
|      d        }t        |      d	        }| j                  |   | j                  |   | j                  |   d
}	| j                  ||	        y )Nc                  8            }         }        }| ||fS r1   r(   r   s      r+   r   z;TestOverloadInlining.test_basic_inline_combos.<locals>.impl  r   r-   r6   c                       y r1   r(   r(   r-   r+   r   z:TestOverloadInlining.test_basic_inline_combos.<locals>.foo  r  r-   c                       y r1   r(   r(   r-   r+   r   z:TestOverloadInlining.test_basic_inline_combos.<locals>.bar  r  r-   c                       y r1   r(   r(   r-   r+   r   z:TestOverloadInlining.test_basic_inline_combos.<locals>.baz  r  r-   r#   c                      d } | S )Nc                       y r1   r(   r(   r-   r+   r   zQTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload.<locals>.impl      r-   r(   r  s    r+   r  zCTestOverloadInlining.test_basic_inline_combos.<locals>.foo_overload      r-   c                      d } | S )Nc                       y r1   r(   r(   r-   r+   r   zQTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload.<locals>.impl  r  r-   r(   r  s    r+   bar_overloadzCTestOverloadInlining.test_basic_inline_combos.<locals>.bar_overload  r	  r-   c                      d } | S )Nc                       y r1   r(   r(   r-   r+   r   zQTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload.<locals>.impl  r  r-   r(   r  s    r+   baz_overloadzCTestOverloadInlining.test_basic_inline_combos.<locals>.baz_overload  r	  r-   r   r   )r   r   rz   rw   )rA   r   r   r   r   r   r  r  r  rG   r   r   r   s             @@@r+   r   z-TestOverloadInlining.test_basic_inline_combos  s    	 '29$d2K.J
J c*- .
 c*- .
 c*- .
 %)$;$;J$G$($;$;J$G$($;$;J$GIM JJt=J9A 3Lr-   c                 *  	
 	
fd}d}t        |||      D ]w  \  }}}d 
d d 	dd} |
dd|	        |d
d|	        |	dd|	       | j                  |   | j                  |   | j                  |   d}| j                  ||       y y )Nc                  8            }         }        }| ||fS r1   r(   r   s      r+   r   z8TestOverloadInlining.test_freevar_bindings.<locals>.impl  r   r-   r6   c                  $    d} d}| dz   }| |dz   |fS )Nr   r   r   r   r(   r   s      r+   r   z7TestOverloadInlining.test_freevar_bindings.<locals>.foo  %    F1q5!}$r-   c                  $    d} d}| dz   }| |dz   |fS )Nr   r   r   r   r(   r   s      r+   r   z7TestOverloadInlining.test_freevar_bindings.<locals>.bar  r  r-   c                  $    d} d}| dz   }| |dz   |fS )Nr   rM   r   r   r(   r   s      r+   r   z7TestOverloadInlining.test_freevar_bindings.<locals>.baz  r  r-   c                 B    dz   t        | |      fd       }y )Nr   r#   c                      fd} | S )Nc                       dz   fS r   r(   r   s   r+   r   zWTestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func.<locals>.impl  s     !1q5!},r-   r(   )r   r*   r   r   s    r+   re   zITestOverloadInlining.test_freevar_bindings.<locals>.factory.<locals>.func  s    -Kr-   )r   )rm  r*   r   r$   re   r   s    ``  @r+   r   z;TestOverloadInlining.test_freevar_bindings.<locals>.factory  s%    F&0  1 r-   r   r   r#   r   r   r   rM   r   r   r1   r   )rA   r   r   r   r   r   r   rG   r   r   r   s           @@@r+   r   z*TestOverloadInlining.test_freevar_bindings  s    	 '29$d2K.J
J%%%  CR
3CR
3CR
3$($;$;J$G$($;$;J$G$($;$;J$GIM JJt=J9O 3Lr-   c                 4    d }| j                  |ddi       y )Nc                      d} t        |       S r   r2   )r   s    r+   r   z?TestOverloadInlining.test_global_overload_binding.<locals>.impl,  r   r-   r/   Tr   r   r   s     r+   test_global_overload_bindingz1TestOverloadInlining.test_global_overload_binding*  r   r-   c                 F    ddl m fd}| j                  |ddi       y )Nr'   r   c                  (    t         dz   }         | fS r   r   r  s    r+   r   zBTestOverloadInlining.test_inline_from_another_module.<locals>.impl6  r   r-   r   Tr   )r   r   rw   )rA   r   r   s     @r+   r   z4TestOverloadInlining.test_inline_from_another_module2  r   r-   c                 L    dd l mc m fd}| j                  |ddi       y )Nr   c                  :    t         dz   } j                         | fS r   )r   r   r   s    r+   r   zLTestOverloadInlining.test_inline_from_another_module_w_getattr.<locals>.impl@  r   r-   r   Tr   r   r   s     @r+   r   z>TestOverloadInlining.test_inline_from_another_module_w_getattr<  r   r-   c                 N    dd l }dd lm fd}| j                  |ddi       y )Nr   c                  N    t         dz   } j                  j                         | fS r   )r   r   r   r   s    r+   r   zNTestOverloadInlining.test_inline_from_another_module_w_2_getattr.<locals>.implK  r   r-   r   Tr   r   r  s      @r+   r  z@TestOverloadInlining.test_inline_from_another_module_w_2_getattrF  r  r-   c                 N    d } |       fd}| j                  |ddi       y )Nc                  <    ddl m t        d      fd       } | S )Nr'   r  r"   r#   c                               S r1   r(   r  s   r+   r	  z]TestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factory.<locals>.tmpV  r
  r-   )r   r   r   )r	  r   s    @r+   r   zPTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.factoryS  r  r-   c                  (    t         dz   }         | fS r   r   )r   bops    r+   r   zMTestOverloadInlining.test_inline_from_another_module_as_freevar.<locals>.impl]  r   r-   r   Tr   r   )rA   r   r   r'  s      @r+   r  z?TestOverloadInlining.test_inline_from_another_module_as_freevarQ  r  r-   c                 X    ddl m fd} |dd      }| j                  |ddi       y )	Nr'   )bop_factoryc                 ,              fd}|S )Nc                  0    t         z  z   }         | fS r1   r   r  s    r+   r   zYTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.gen.<locals>.implj  r  r-   r(   )r   r   r   r   r)  s   `` @r+   r  zKTestOverloadInlining.test_inline_w_freevar_from_another_module.<locals>.geng  r  r-   r   r   r   Tr   )r   r)  rw   )rA   r  r   r)  s      @r+   r  z>TestOverloadInlining.test_inline_w_freevar_from_another_modulec  r  r-   c                 .   	  fd} fd}dD ]>  \  fd	t        	|      fd       }	fd} j                  |dd	d
k(  i       @ dD ]>  \  fdt        |      fd       }fd} j                  |ddd
k(  i       @ y )Nc                     j                  | t        j                         j                  | j                  d       j                  |j                        S r  r  r	   r  rV   rP   rE   rB   r   s      r+   r#  zCTestOverloadInlining.test_inlining_models.<locals>.s17_caller_modelt  B    !!$0TWWf-..{/B/BCCr-   c                     j                  | t        j                         j                  | j                  d       j                  |j                        S r  r.  r   s      r+   r&  zCTestOverloadInlining.test_inlining_models.<locals>.s17_callee_modely  r/  r-   ))r   r(  r)  c                       S r1   r(   r+  s   r+   r   z6TestOverloadInlining.test_inlining_models.<locals>.foo      r-   r#   c                      fd} | S )Nc                       S r1   r(   r+  s   r+   r   zGTestOverloadInlining.test_inlining_models.<locals>.foo_ol.<locals>.impl      !Mr-   r(   r   r,  s    r+   foo_olz9TestOverloadInlining.test_inlining_models.<locals>.foo_ol      "r-   c                 *    | z   }        }|dz   |fS r   r(   r/  s      r+   r   z7TestOverloadInlining.test_inlining_models.<locals>.impl  r1  r-   r   r   r9   r   )r'  )r(  r   c                       S r1   r(   r+  s   r+   r   z6TestOverloadInlining.test_inlining_models.<locals>.bar  r2  r-   c                      fd} | S )Nc                       S r1   r(   r+  s   r+   r   zGTestOverloadInlining.test_inlining_models.<locals>.bar_ol.<locals>.impl  r5  r-   r(   r6  s    r+   bar_olz9TestOverloadInlining.test_inlining_models.<locals>.bar_ol  r8  r-   c                 *    | z   }        }|dz   |fS r   r(   r4  s      r+   r   z7TestOverloadInlining.test_inlining_models.<locals>.impl  r1  r-   r   r  )
rA   r#  r&  r7  r   r=  r   r,  r0  r   s
   `     @@@@r+   r5  z)TestOverloadInlining.test_inlining_modelsr  s    	D
	D 3NFF c"23 4
 
 JJtRv|/DJE! 3& 3NFF c"23 4
 
 JJtRv|/DJE! 3r-   c           
         d t        d      d        }t        d      d        }d }t        |      d        }fd	}| j                  |d
did      }t        t        |j                  j                                     d   }|j                  d      D cg c]  }| }	}| j                  t        |	      dk(         |j                  t        j                        D cg c]3  }t        t        |dd       t        j                        r|j                  5 }
}|
D ]  }| j!                  |j                  d         y c c}w c c}w )Nc                 \    t        t        |       t        j                        r| dz   S | dz   S )Nr{   r'   )r=   r   r   Floatr)   s    r+   r   z_TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar  s&    &)U[[14x1ur-   r"   r#   c                 B    t        | t        j                        rd }|S y )Nc                     | dz   S r&   r(   r)   s    r+   r   ztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol.<locals>.impl      q5Lr-   r=   r   Integerr*   r   s     r+   
bar_int_olzfTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_int_ol      !U]]+! ,r-   r7   c                 B    t        | t        j                        rd }|S y )Nc                     | dz   S )Nr{   r(   r)   s    r+   r   zvTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol.<locals>.impl  s    t8Or-   )r=   r   rA  rG  s     r+   bar_float_olzhTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_float_ol  s    !U[[)$ *r-   c                       yr  r(   rl   s    r+   always_inline_cost_modelztTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.always_inline_cost_model      r-   c                 B    t        | t        j                        rd }|S y )Nc                     | dz   S r&   r(   r)   s    r+   r   zxTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol.<locals>.impl  rD  r-   )r=   r   ComplexrG  s     r+   bar_complex_olzjTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.bar_complex_ol  rI  r-   c                  D     d      }  d      } d      }| |z   |z   S )Nr'   gffffff@y              @r(   r   r   r   r   s      r+   r   z`TestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics.<locals>.impl  s,    AACABAq519r-   r   Fr'   r?  rQ   )rP   r?   r{   )r   rw   r`   ra   r:   rS   rb   
assertTruer_   
find_instsr	   r>   r=   rc   rl  r?   assertNotEqual)rA   rH  rL  rO  rT  r   rq   rr   r*   callsconstsvalr   s               @r+   =test_multiple_overloads_with_different_inline_characteristicszRTestOverloadInlining.test_multiple_overloads_with_different_inline_characteristics  sM   
	 
#h	'	 
(	 
#g	&	 
'		 
#6	7	 
8		 jjeU^jK T#****,-.q1!,,,787q78E
a( $)#3#3BII#> F#>a7D 9288D ''#> FC		40  9Fs   	E(8Ec                     d }d  t        d      |       fd}d}| j                  ||ddi	       d
  t        d      |       d}| j                  ||ddi	       y )Nc                     t        | t        j                        sd }|S | j                  dk(  rd }|S | j                  dv rd }|S y )Nc                     t        |       S r1   )r   r~   s    r+   foo_noopznTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_noop  s    $U++r-   rT   c                      yNr   r(   r~   s    r+   foo_as_str_implzuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_str_impl      r-   )int64float64c                      yNr   r(   r~   s    r+   foo_as_num_implzuTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld.<locals>.foo_as_num_impl  re  r-   )r=   r   StringLiteralliteral_value)r   ra  rd  rj  s       r+   foo_ovldz\TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo_ovld  sT    eU%8%89,""e+&&""&::&& ;r-   c                      yrc  r(   r~   s    r+   r   zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo      r-   r"   r#   c                      |       S r1   r(   )r   r   s    r+   rk   z]TestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.test_impl  s    u:r-   rT   r   Tr   c                      yri  r(   r~   s    r+   r   zWTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee.<locals>.foo  ro  r-   rf  r  )rA   rm  rk   r   r   s       @r+   5test_overload_inline_always_with_literally_in_inlineezJTestOverloadInlining.test_overload_inline_always_with_literally_in_inlinee  su    	'$	 	'X&x0	 

9eE4=
A	&X&x0 

9eE4=
Ar-   c                 r    dd t        d      fd       }fd}| j                  |dddi	       y )
NTc                      yr  r(   As    r+   r   z8TestOverloadInlining.test_inline_always_ssa.<locals>.foo  rP  r-   r"   r#   c                     fd}|S )Nc                 `    }t        t        |             D ]  }}| |   r| |   }||z  } |S r1   )r   r_   )rv  r   r   dummy
dummy_trues       r+   r   zOTestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload.<locals>.impl  s?    s1vA&Et !!JA	 '
 r-   r(   )rv  r   rz  s     r+   r  zATestOverloadInlining.test_inline_always_ssa.<locals>.foo_overload  s     Kr-   c                  >      t        j                  g d            S )N)TFT)r   arrayr   s   r+   r   z9TestOverloadInlining.test_inline_always_ssa.<locals>.impl  s    rxx 3455r-   rO   r   rH   rG   r  )rA   r  r   rz  r   s      @@r+   test_inline_always_ssaz+TestOverloadInlining.test_inline_always_ssa  sG     
	 
#h	'
	 
(
		6 	

4VE4=
Ir-   c                    d t        d      fd       }t        fd       }t        j                  d      5 }t        j                  dt
        j                         t                | j                   |       |j                                d d d        | j                  t              d       y # 1 sw Y   %xY w)	Nc                  (    d} | dkD  r| dz  } | dkD  ry)Nr   r'   r   r   r(   r  s    r+   r   zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar#  s%    Aa%a a% r-   r"   r#   c                       S r1   r(   r   s   r+   bar_implzLTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.bar_impl*  s    Jr-   c                                y r1   r(   r   s   r+   r   zGTestOverloadInlining.test_inline_always_ssa_scope_validity.<locals>.foo.  s    Er-   T)recordr   )r   r   warningscatch_warningssimplefilterr   NumbaIRAssumptionWarningr!   rV   py_funcr_   )rA   r  r   wr   s       @r+   %test_inline_always_ssa_scope_validityz:TestOverloadInlining.test_inline_always_ssa_scope_validity   s    	 
#h	'	 
(	 
	 
	 $$D1Q!!(F,K,KL$&SUCKKM2 2 	Q# 21s   AB66B?N)ri   rx   ry   r   r   r  r  r  r  r  r  r   r   r   r  r   r   r  r  r  r5  r]  rr  r~  r  r(   r-   r+   r}  r}    s|    76 6I4H6%JN4050("*:X1:f?66	66$60Fd61p(BTJ4$r-   r}  c                   t     e Zd Z fdZ	 ddZ	 ddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )TestOverloadMethsAttrsInliningc                 J    | j                          t        t        |           y r1   )r  superr  setUp)rA   	__class__s    r+   r  z$TestOverloadMethsAttrsInlining.setUp=  s    ,d9;r-   c                 P    t        t              |      }| j                   || |       |j                  |j                  d      j
                  d   }|j                  |_        | j                  t        |j                        |       |rK|j                  j                         D ]-  }t        |j                  d            }	| j                  |	       / y g }
|j                  j                         D ]  }|
t        |j                  d            z  }
! | j                  |
       y )NrI   r   rK   rQ   r   r   rV   rW   rX   rY   r:   r_   r;   listrb   rj   rW  )rA   rk   rl   expectedrH   expects_inlinedrp   rq   rr   rZ  allcallss              r+   check_methodz+TestOverloadMethsAttrsInlining.check_methodA  s    >%=>yI1 v0034==nMZZ
SZZ+6**,U--f56  ' -
 H**,D!1!1&!9:: -OOH%r-   c                 P    t        t              |      }| j                   || |       |j                  |j                  d      j
                  d   }|j                  |_        | j                  t        |j                        |       |rK|j                  j                         D ]-  }t        |j                  d            }	| j                  |	       / y g }
|j                  j                         D ]  }|
t        |j                  d            z  }
! | j                  |
       y )NrI   r   rK   rc   r  )rA   rk   rl   r  rH   r  rp   rq   rr   getattrsallgetattrss              r+   check_getattrz,TestOverloadMethsAttrsInlining.check_getattrW  s    >%=>yI1 v0034==nMZZ
SZZ+6**, 0 0 ;<  * -
 K**,tE$4$4Y$?@@ -OOK(r-   c                     | j                         \  }}t        |dd      d	d       }d }| j                  | |       gdd       y )
Ninline_methodr"   r#   c                     dd}|S )Nc                     d||fS )NTHIS IS INLINEDr(   )r  r\  val2s      r+   getzqTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_method.<locals>.getr  s    )355r-   NNr(   )r  r\  r  r  s       r+   _get_inlined_methodzdTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>._get_inlined_methodp  s    6Jr-   c                 H    | j                  d      | j                  d      fS )Nr   A  )r  r  r  s    r+   r   zTTestOverloadMethsAttrsInlining.test_overload_method_default_args_always.<locals>.foov  s&    $$S)3+<+<#+<+FFFr-   ))r  r   N)r  Nr  r'   )rk   rl   r  rH   r  r  r   r  )rA   r  r  r  r   s        r+   (test_overload_method_default_args_alwayszGTestOverloadMethsAttrsInlining.test_overload_method_default_args_alwaysm  s^    //1y	OH	E	 
F	
	G 	'6 	 	
r-   c                     fd}| j                         \  }}t        |d|      d        }d }| j                  | |       gdd       y )	Nc                      S r1   r(   )rl   should_inlines    r+   	costmodelzKTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.costmodel  s	      r-   r  r#   c                     d }|S )Nc                 
    d|fS )NTHIS IS INLINED!!!r(   )r  r\  s     r+   r  zbTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method.<locals>.get  s    ,c22r-   r(   )r  r\  r  s      r+   r  zUTestOverloadMethsAttrsInlining.make_overload_method_test.<locals>._get_inlined_method  s    3Jr-   c                 $    | j                  d      S Nr   r  r  s    r+   r   zETestOverloadMethsAttrsInlining.make_overload_method_test.<locals>.foo  s    $$S))r-   )r  r   r'   rk   rl   r  rH   r  r  )rA   r  r  r  r  r  r   s     `    r+   make_overload_method_testz8TestOverloadMethsAttrsInlining.make_overload_method_test  sf    	!  //1y	OI	F	 
G	
	* 	'0) 	 	
r-   c                 *    | j                  dd       y Nr"   Tr  r  r  rA   s    r+   'test_overload_method_cost_driven_alwayszFTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_always  s    && 	' 	
r-   c                 *    | j                  dd       y Nr7   Fr  r  r  s    r+   &test_overload_method_cost_driven_neverzETestOverloadMethsAttrsInlining.test_overload_method_cost_driven_never  s    && 	' 	
r-   c                 ,    | j                  d d       y )Nc                       yr  r(   rN  s    r+   r  z]TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inline.<locals>.<lambda>      Dr-   Tr  r  r  s    r+   ,test_overload_method_cost_driven_must_inlinezKTestOverloadMethsAttrsInlining.test_overload_method_cost_driven_must_inline  s    &&( 	' 	
r-   c                 ,    | j                  d d       y )Nc                       yNFr(   rN  s    r+   r  z[TestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline.<locals>.<lambda>      Er-   Fr  r  r  s    r+   *test_overload_method_cost_driven_no_inlinezITestOverloadMethsAttrsInlining.test_overload_method_cost_driven_no_inline  s    &&) 	' 	
r-   c                     | j                         \  }}t        |d|      d        }d }| j                  | |       gdd|       y )Ninlinemer#   c                     d }|S )Nc                      y)NMY INLINED ATTRSr(   r  s    r+   r  z_TestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme.<locals>.get  s    )r-   r(   )r  r  s     r+   _get_inlinemezRTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>._get_inlineme  s    *Jr-   c                     | j                   S r1   )r  r  s    r+   r   zHTestOverloadMethsAttrsInlining.make_overload_attribute_test.<locals>.foo  s    <<r-   r  r'   r  )r  r   r  )rA   r  r  r  r  r  r   s          r+   make_overload_attribute_testz;TestOverloadMethsAttrsInlining.make_overload_attribute_test  s^    //1y	Iz)	D	 
E	
	  	'') 	 	
r-   c                 *    | j                  dd       y r  r  r  s    r+   test_overload_attribute_alwaysz=TestOverloadMethsAttrsInlining.test_overload_attribute_always  s    )) 	* 	
r-   c                 *    | j                  dd       y r  r  r  s    r+   test_overload_attribute_neverz<TestOverloadMethsAttrsInlining.test_overload_attribute_never  s    )) 	* 	
r-   c                 ,    | j                  d d       y )Nc                       yr  r(   rN  s    r+   r  z^TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline.<locals>.<lambda>  r  r-   Tr  r  r  s    r+   -test_overload_attribute_costmodel_must_inlinezLTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_must_inline  s    ))( 	* 	
r-   c                 ,    | j                  d d       y )Nc                       yr  r(   rN  s    r+   r  z\TestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline.<locals>.<lambda>  r  r-   Fr  r  r  s    r+   +test_overload_attribute_costmodel_no_inlinezJTestOverloadMethsAttrsInlining.test_overload_attribute_costmodel_no_inline  s    ))) 	* 	
r-   )T)ri   rx   ry   r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r  s   @r+   r  r  <  sS    <
 &*&. '+),
(
.




(



r-   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestGeneralInliningc                 b    t        t        d      d        }d }| j                  |ddi       y )Nr"   r#   c                      y r1   r(   ru  s    r+   overload_lenzSTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.overload_len  s    r-   c                      t        g d      S )N)r   r   r>  )r_   r(   r-   r+   r   zKTestGeneralInlining.test_with_inlined_and_noninlined_variants.<locals>.impl  s    y>!r-   r_   Fr   )r   r_   rw   )rA   r  r   s      r+   )test_with_inlined_and_noninlined_variantsz=TestGeneralInlining.test_with_inlined_and_noninlined_variants  s8    
 
#h	'	$ 
(	$	" 	

4u~
6r-   c                 j    d	dt        d      d	d       }fd}| j                  |ddi       y )
Nc                     | |z   |z   S r1   r(   r   r   r   s      r+   r   z1TestGeneralInlining.test_with_kwargs.<locals>.foo  s    q519r-   r"   r#   c                     dd}|S )Nc                     | |z   |z   S r1   r(   r  s      r+   r   zHTestGeneralInlining.test_with_kwargs.<locals>.overload_foo.<locals>.impl  s    1uqy r-   r   r   r(   )r   r   r   r   s       r+   r  z:TestGeneralInlining.test_with_kwargs.<locals>.overload_foo  s    !Kr-   c                        dd      S )Nr   r   r   r(   r   s   r+   r   z2TestGeneralInlining.test_with_kwargs.<locals>.impl  s    qB<r-   r   Tr   r  r  r  s      @r+   test_with_kwargsz$TestGeneralInlining.test_with_kwargs  s>    	 
#h	'	 
(	
	  	

4t}
5r-   c                 f    t        d      d
d       dfd	}| j                  |ddddi	       y )Nr"   r#   c                     | |z   S r1   r(   r  s      r+   r   z2TestGeneralInlining.test_with_kwargs2.<locals>.bar  s    q5Lr-   c                      | |z   d      S )Nr   r  r(   rV  s      r+   r   z3TestGeneralInlining.test_with_kwargs2.<locals>.impl  s    q1u##r-   r   r>  r   Tr   )r   rM  )rF  r   r   r   s     @r+   test_with_kwargs2z%TestGeneralInlining.test_with_kwargs2  s9    	X		 
		$ 	

4AeT]
;r-   c                 b    t        d      d	d       fd}| j                  |dddi       y )
Nr"   r#   c                     |d}| |fS r  r(   r  s     r+   r   z@TestGeneralInlining.test_inlining_optional_constant.<locals>.bar  s    yq6Mr-   c                  2               d        d      fS )Nr   r  r  r(   r   s   r+   r   zATestGeneralInlining.test_inlining_optional_constant.<locals>.impl  s    5#c(C#J..r-   rO   r   Tr}  r  r   r   s     @r+   test_inlining_optional_constantz3TestGeneralInlining.test_inlining_optional_constant
  s9     
X		 
	
	/ 	

4VE4=
Ir-   N)ri   rx   ry   r  r  r  r  r(   r-   r+   r  r    s    7 6 	<Jr-   r  c                       e Zd Zd Zy)TestInlineOptionsc                    t        d      }| j                  |j                         | j                  |j                         | j                  |j
                         | j                  |j                  d       t        d      }| j                  |j                         | j                  |j                         | j                  |j
                         | j                  |j                  d       d }t        |      }| j                  |j                         | j                  |j                         | j                  |j
                         | j                  |j                  |       y )Nr"   r7   c                     | S r1   r(   r)   s    r+   
cost_modelz0TestInlineOptions.test_basic.<locals>.cost_model(  s    Hr-   )	r   rW  is_always_inlinerj   is_never_inlinehas_cost_modelrV   r?   assertIs)rA   r"   r7   r  models        r+   
test_basiczTestInlineOptions.test_basic  s   x(//0//0../x0g&//0--.--.g.	j)//0../,,-ekk:.r-   N)ri   rx   ry   r   r(   r-   r+   r  r    s    /r-   r  c                   :    e Zd Zd Zd Zd Zd Zd Zed        Z	y)TestInlineMiscIssuesc                     d t        d      d        }t        d      fd       }t        d      d        } |t        j                  d	              |t        j                  d	             y )
Nc                      y r1   r(   )r|  r   s     r+   output_factoryz;TestInlineMiscIssues.test_issue4691.<locals>.output_factory4  r  r-   r"   r#   c                 V    t        | t        j                  j                        rd }|S y )Nc                 N    | j                   dd  }t        j                  ||      S Nr   r~   )shaper   r   )r|  r   r	  s      r+   r   zLTestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory.<locals>.impl:  s"    !KKOE88E77r-   )r=   r   npytypesArray)r|  r   r   s      r+   ol_output_factoryz>TestInlineMiscIssues.test_issue4691.<locals>.ol_output_factory7  s'    %!5!568  7r-   T)nogilc                 .     | | j                         }|S r1   r~   )r|  outr  s     r+   rh   z/TestInlineMiscIssues.test_issue4691.<locals>.fn@  s     4CJr-   c                 ^    t        j                  | j                  dd  | j                        S r  )r   r   r	  r   r|  s    r+   fn2z0TestInlineMiscIssues.test_issue4691.<locals>.fn2E  s!    88EKKO5;;??r-   )r   r   r   r   r   )r   r   r   ones)rA   r  rh   r  r  s       @r+   test_issue4691z#TestInlineMiscIssues.test_issue46913  s}    	 
.	2	 
3	 
D		 
	 
D		@ 
	@ 	277'()BGG()*r-   c                 |    t        d      d        t         fd       } |t        j                  d             y )Nr"   r#   c                 :    | j                   dk7  rt        d      | S )Nr'   zInvalid number of dimensions)ndim
ValueErrorr  s    r+   inliningz5TestInlineMiscIssues.test_issue4693.<locals>.inliningN  s    zzQ !?@@Lr-   c                      |       S r1   r(   )r|  r  s    r+   rh   z/TestInlineMiscIssues.test_issue4693.<locals>.fnU  s    E?"r-   r   )r   r   r   )rA   rh   r  s     @r+   test_issue4693z#TestInlineMiscIssues.test_issue4693L  s@    	X		 
	 
	# 
	# 	288B<r-   c                     t        d      d        t         fd       }| j                  t              5 } |        d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr"   r#   c                      d} t        |       )NSomething happened)r  )msgs    r+   r  z5TestInlineMiscIssues.test_issue5476.<locals>.inlining^  s    &CS/!r-   c                               S r1   r(   )r  s   r+   rh   z/TestInlineMiscIssues.test_issue5476.<locals>.fnc  s    :r-   r  )r   r  r  r  rT   r  )rA   rh   raisesr  s      @r+   test_issue5476z#TestInlineMiscIssues.test_issue5476[  sq     
X		" 
	" 
	 
	 z*fD + 	*C0@0@,AB +*s   A--A6c                   	
  G 	fdd       G d dt         j                        t               G d dt        j                               }t        dd       t        fd	       
t        d
      
fd       }t        dd
      d        }t        fd       }d	d} |	|      }| j                  |	|z         y )Nc                       e Zd Zd Z fdZy)2TestInlineMiscIssues.test_issue5792.<locals>.Dummyc                     || _         y r1   data)rA   r(  s     r+   __init__z;TestInlineMiscIssues.test_issue5792.<locals>.Dummy.__init__q  s	     	r-   c                 "    |j                   z  S r1   r'  )rA   otherr(  s     r+   divz6TestInlineMiscIssues.test_issue5792.<locals>.Dummy.divt  s    ejj((r-   N)ri   rx   ry   r)  r,  r'  s   r+   r  r%  p  s    !)r-   r  c                        e Zd Z fdZ xZS )6TestInlineMiscIssues.test_issue5792.<locals>.DummyTypec                 P    || _         t        | 	  d| j                    d       y )NzDummy())rf   r(  r  r)  )rA   r(  r  s     r+   r)  z?TestInlineMiscIssues.test_issue5792.<locals>.DummyType.__init__x  s'     	 tyyk&; <r-   ri   rx   ry   r)  r  r  s   @r+   r  r.  w  s    = =r-   r  c                        e Zd Z fdZ xZS );TestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModelc                 F    d|j                   fg}t        | 	  |||       y )Nr(  r1  )rA   dmmfe_typemembersr  s       r+   r)  zDTestInlineMiscIssues.test_issue5792.<locals>.DummyTypeModel.__init__~  s)    W\\*  gw7r-   r2  r  s   @r+   DummyTypeModelr4  |  s    8 8r-   r9  r(  _datac                 :    d } |      }t        ||      }||fS )Nc                     |j                   }|\  } t        j                  |      | |      }||_        | j                  r*| j
                  j                  ||j                  d   |       |j                         S r  )	return_typer   create_struct_proxyr(  
enable_nrtnrtincrefrl   	_getvalue)contextbuildersigrl   typr(  ry  s          r+   codegenzHTestInlineMiscIssues.test_issue5792.<locals>.init_dummy.<locals>.codegen  sf    oo833C8'J!
%%KK&&wTB((r-   r   )	typingctxr(  rG  ret_typrE  r  s        r+   
init_dummyz7TestInlineMiscIssues.test_issue5792.<locals>.init_dummy  s)    	)  oGGT*C<r-   r"   r#   c                     fd}|S )Nc                      |       S r1   r(   )r(  rJ  s    r+   ctorzITestInlineMiscIssues.test_issue5792.<locals>.dummy_overload.<locals>.ctor  s    !$''r-   r(   )r(  rM  rJ  s     r+   dummy_overloadz;TestInlineMiscIssues.test_issue5792.<locals>.dummy_overload  s    ( Kr-   r,  c                     d }|S )Nc                 4    | j                   |j                   z  S r1   )r:  )rA   r+  s     r+   r   zGTestInlineMiscIssues.test_issue5792.<locals>.div_overload.<locals>.impl  s    zzEKK//r-   r(   )rA   r+  r   s      r+   div_overloadz9TestInlineMiscIssues.test_issue5792.<locals>.div_overload  s    0 Kr-   c                 F     |       } |      }|j                  |      S r1   )r,  )r(  
other_datary  r+  r  s       r+   rk   z6TestInlineMiscIssues.test_issue5792.<locals>.test_impl  s%    $KE*%E99U##r-   g      ?rX  )r   Typer   r   StructModelr   r   r   r   r   rV   )rA   r9  rN  rQ  rk   rS  resr  r  r(  rJ  s          @@@@r+   test_issue5792z#TestInlineMiscIssues.test_issue5792l  s    	) 	)	=

 	=
 
		"	8V// 	8 
#	8 	y&':		  
	 " 
%	)	 
*	 
E(	;	 
<	 
	$ 
	$ 
j)dZ/0r-   c                      G d dt               }d t        d      d        }t        |      fd       }| j                   |d	      d
       y)z] Similar to the above test_issue5792, checks mutation of the inlinee
        IR is local onlyc                       e Zd Zd Zy);TestInlineMiscIssues.test_issue5824.<locals>.CustomCompilerc                     t        j                  | j                        }|j                  t        t               |j                          |gS r1   )r   define_nopython_pipelinestateadd_pass_afterr   finalize)rA   pms     r+   define_pipelineszLTestInlineMiscIssues.test_issue5824.<locals>.CustomCompiler.define_pipelines  s6    '@@L!!/?Ctr-   N)ri   rx   ry   ra  r(   r-   r+   CustomCompilerrZ    s    r-   rb  c                      y r1   r(   r)   s    r+   r   z0TestInlineMiscIssues.test_issue5824.<locals>.bar  s    r-   r"   r#   c                 B    t        | t        j                        rd }|S y )Nc                     | dz   S )Ng?r(   r)   s    r+   r   zATestInlineMiscIssues.test_issue5824.<locals>.ol_bar.<locals>.impl  s    s7Nr-   rE  rG  s     r+   ol_barz3TestInlineMiscIssues.test_issue5824.<locals>.ol_bar  s    !U]]+# ,r-   rI   c                 $     |        |       fS r1   r(   r   s    r+   r   z0TestInlineMiscIssues.test_issue5824.<locals>.foo  rj  r-   r   )皙&@rh  N)r   r   r   rV   )rA   rb  rf  r   r   s       @r+   test_issue5824z#TestInlineMiscIssues.test_issue5824  s^    	\ 		 
#h	'	 
(	 
^	,	" 
-	" 	R,/r-   c                    t        d      d        t        d      fd       }t        j                  d      } ||       | j                  |dt        j                  |      z         t        d      d	        }| j                  t        j                        5 } ||       d d d        | j                  d
t        j                               y # 1 sw Y   /xY w)Nr"   r#   c                 R    t        | j                        D ]  }| |xx   dz  cc<    y r&   )r   size)r*   r   s     r+   r   z0TestInlineMiscIssues.test_issue7380.<locals>.bar  s!    166]!	 #r-   T)parallelc                 V    t        | j                  d         D ]  } | |           y r  )r   r	  )r   r   r   s     r+   r   z0TestInlineMiscIssues.test_issue7380.<locals>.foo  s%    AGGAJ'AaD	 (r-   )r   r   r   c                     t        | j                  d         D ].  }| |   }t        |j                        D ]  }||xx   dz  cc<    0 y )Nr   r'   )r   r	  r   rl  )r   r   r*   s      r+   foo_badz4TestInlineMiscIssues.test_issue7380.<locals>.foo_bad  sA    AGGAJ'aDqvvAaDAID ' (r-   z Overwrite of parallel loop index)r   r   r  assertPreciseEqual	ones_liker  r   UnsupportedRewriteErrorr  rT   r  )rA   r   r   rp  r   r   s        @r+   test_issue7380z#TestInlineMiscIssues.test_issue7380  s     
X		 
	 
t		 
	 GGHA1r||A#67 
t		 
	 v==>!AJ ? 	8#akk:JK ?>s   	CCN)
ri   rx   ry   r  r  r"  rW  ri  r    rt  r(   r-   r+   r  r  1  s4    +2C"D1L0: "L "Lr-   r  __main__)<__doc__r  r  	itertoolsr   numpyr   r  r   r   r   r   
numba.corer   r	   r
   r   r   r   numba.core.extendingr   r   r   r   r   r   r   r   numba.core.cpur   numba.core.compilerr   r   numba.core.typed_passesr   numba.core.typingr   numba.tests.supportr   r   r   r   r    r!   r   r,   r/   r3   r5   r   r   r   rw  r}  r  r  r  r  ri   mainr(   r-   r+   <module>r     s,  
     1 1 B B	 	 	 ) @ 3 '; ;  X 
 
,x( )<8 <@ #LP*?L P*f
6/< 6z$?L z$z^
\ ^
B9J/< 9Jx/ /0AL8 ALH zHMMO r-   