
    sh -                        S SK r S SKrS SKJrJrJrJr  S SKJ	r	J
r
  S SKJrJrJrJr  S SKJrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  S S	K%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J,r,J0r0J1r1  S S
K2J3r3J4r4J5r5  S SK6r6\5" SSS9 " S S\35      5       r7S r8 " S S\Rr                  5      r: " S S\5      r;\<S:X  a  \6Rz                  " 5         gg)    N)TestCaseoverride_configcaptured_stdoutskip_parfors_unsupported)jitnjit)typesirpostproccompiler)guardfind_callname
find_constget_definitionsimplify_CFG)CPUDispatcher)inline_closure_call)
ExtractByteCodeTranslateByteCode	FixupArgsIRProcessingDeadBranchPruneRewriteSemanticConstantsGenericRewritesWithLifting
PreserveIRInlineClosureLikes)NopythonTypeInferenceAnnotateTypesNopythonRewritesPreParforPass
ParforPassDumpParforDiagnosticsNativeLoweringNativeParforLoweringIRLegalizationNoPythonBackendr$   ParforFusionPassParforPreLoweringPass)FunctionPassPassManagerregister_passFTanalysis_onlymutates_CFGc                   $    \ rS rSrSrS rS rSrg)InlineTestPass   inline_test_passc                 0    [         R                  " U 5        g Nr*   __init__selfs    m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_inlining.pyr7   InlineTestPass.__init__    s    d#    c                 F   [        UR                  R                  5      S:X  d   e[        UR                  R                  R	                  5       5      S   n[        UR                  5       Hs  u  p4[        [        UR                  UR                  5      c  M-  [        UR                  0 X#S UR                  UR                  SUR                  UR                  5
          O   [        R                   " UR                  5      nUR#                  5         UR%                  5         g)N   r   c                      g r5    r@   r<   r:   <lambda>)InlineTestPass.run_pass.<locals>.<lambda>)   s    r<   r@   T)lenfunc_irblockslistvalues	enumeratebodyr   r   valuer   	typingctx	targetctxtypemap	calltypesr   PostProcessorrunremove_dels)r9   stateblockistmt	post_procs         r:   run_passInlineTestPass.run_pass#   s    5==''(A---U]]))0023A6 ,GA]5==$**=I#EMM2u$)OOU__b$)MM5??D  - **5==9	r<   r@   N__name__
__module____qualname____firstlineno___namer7   rW   __static_attributes__r@   r<   r:   r1   r1      s    E$r<   r1   c                 ,   Sn[        U5      nUR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [
        S5        U R                  R                  (       dB  UR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [        S	5        UR                  [        S
5        U R                  R                  R                  (       a  UR                  [        S5        U R                  R                  (       d  UR                  [         S5        U R                  R                  R                  (       aB  UR                  ["        S5        UR                  [$        S5        UR                  [&        S5        UR                  US5        UR                  [(        S5        UR                  [*        S5        UR                  [,        S5        U R                  R                  R                  (       a  UR                  [.        S5        OUR                  [0        S5        UR                  [2        S5        UR                  [4        S5        U$ )Ninline_testzanalyzing bytecodezfix up argszprocessing IRzHandle with contextsznopython rewriteszrewrite semantic constantszdead branch pruningz(inline calls to locally defined closuresznopython frontendzPreprocessing for parforszconvert to parforszfuse parforszparfor preloweringzinline testz$ensure IR is legal prior to loweringzannotate typeszpreserve IRznative parfor loweringznative loweringznopython mode backendzdump parfor diagnostics)r+   add_passr   r   r   r   flagsno_rewritesr   r   r   r   r   auto_parallelenabledr!   r    r"   r(   r)   r&   r   r   r%   r$   r'   r#   )rR   	test_passnamepms       r:   gen_pipelinerj   4   s   
%';<
I}-
L/2
K!78{{&&KK)<=KK02NOKK)>?
&>	@ 	)+>?;;$$,,KK'BC{{&&KK(*=>;;$$,,KK
$89KK(.9KK-/CD
I}- 	N$JK
M#34
J. ;;$$,,KK,.FGKK(9:
O%<=
)+DE	r<   c                       \ rS rSrSrS rSrg)InlineTestPipeline^   z>compiler pipeline for testing inlining after optimization
    c                 \    [        U R                  [        5      nUR                  5         U/$ r5   )rj   rR   r1   finalize)r9   ri   s     r:   define_pipelines#InlineTestPipeline.define_pipelinesa   s"    $**n5
tr<   r@   N)rZ   r[   r\   r]   __doc__rp   r_   r@   r<   r:   rl   rl   ^   s    r<   rl   c                   v    \ rS rSrSrS rS rS rS rS r	\
S 5       r\
S	 5       r\
S
 5       r\
S 5       rSrg)TestInliningf   z
Check that jitted inner functions are inlined into outer functions,
in nopython mode.
Note that not all inner functions are guaranteed to be inlined.
We just trust LLVM's inlining heuristics.
c           	          UR                  S5      nSSR                  U Vs/ s H  nSR                  U5      PM     sn5      -   $ s  snf )z$
Make regexpr to match mangled name
.z_ZN? z\d+{})splitjoinformat)r9   fullnamepartsps       r:   make_patternTestInlining.make_patternn   sA     s#u"Eu!8??1#5u"EFFF"Es   A
c                     U R                  U5      nU R                  [        R                  " X25      SR	                  U5      S9  g )Nzexpected {}msg)r   assertIsNotNoneresearchr{   r9   r|   textpats       r:   assert_has_patternTestInlining.assert_has_patternu   s>    )RYYs1!.!5!5c!: 	 	<r<   c                     U R                  U5      nU R                  [        R                  " X25      SR	                  U5      S9  g )Nzunexpected {}r   )r   assertIsNoner   r   r{   r   s       r:   assert_not_has_pattern#TestInlining.assert_not_has_patternz   s>    )"))C.-44S9 	 	;r<   c                    SSK JnJn  [        SS5         [	        5        n[        [        R                  4SS9" U5      nS S S 5        S S S 5        U R                  W" S5      S5        WR                  5       nU R                  SU-  U5        U R                  S	U-  U5        g ! , (       d  f       Ni= f! , (       d  f       Nr= f)
Nr   )outer_simplerZ   DUMP_ASSEMBLYTnopythonr>      z%s.outer_simple%s.inner)numba.tests.inlining_usecasesr   rZ   r   r   r   r	   int32assertPreciseEqualgetvaluer   r   )r9   r   prefixoutcfuncasms         r:   test_inner_function TestInlining.test_inner_function   s    	 _d3 "cU[[NT:<H # 4 	a!, lln 1F :C@##J$7= #" 43s"   B4 B# B4#
B1	-B44
Cc                    SSK JnJn  [        SS5         [	        5        n[        [        R                  4SS9" U5      nS S S 5        S S S 5        U R                  W" S5      S5        WR                  5       nU R                  SU-  U5        U R                  S	U-  U5        U R                  S
U-  U5        g ! , (       d  f       N~= f! , (       d  f       N= f)Nr   )outer_multiplerZ   r   Tr   r>      z%s.outer_multiplez%s.morer   )r   r   rZ   r   r   r   r	   r   r   r   r   r   )r9   r   r   r   r   r   s         r:   test_multiple_inner_functions*TestInlining.test_multiple_inner_functions   s    	
 _d3 "cU[[NT:>J # 4 	a!,lln 3f <cB##I$6<##J$7= #" 43s"   C	 B8 C	8
C	C		
Cc                    ^ SSK Jm  U4S jn[        S[        S9" U5      n[        R
                  " S5      nU R                  U" U5      U" U5      5        g )Nr   )	__dummy__c                 2   > T" 5         U R                  5       $ r5   )sum)Ar   s    r:   	test_impl=TestInlining.test_inline_call_after_parfor.<locals>.test_impl   s    K557Nr<   T)parallelpipeline_class
   )r   r   r   rl   nparangeassertEqual)r9   r   j_funcr   r   s       @r:   test_inline_call_after_parfor*TestInlining.test_inline_call_after_parfor   sH    ;	 t4FGDMOIIbM1vay1r<   c           
         S n[         R                  " U5      n[        UR                  R	                  5       5      nU GHq  n[        UR                  5       GHS  u  pV[        U[        R                  5      (       d  M'  [        UR                  [        R                  5      (       d  MR  [        [        X&R                  5      S:X  d  Mr  UR                  UR                  R                      R#                  UR                  5        [        R$                  R'                  [        R                  " UR(                  SUR*                  S9SSUR*                  5      Ul
        UR                  UR                  R                      R-                  UR                  5        [/        U0 XES 5          GMo     GMt     U R1                  [3        UR                  S   5      S5        g )Nc                     U S:X  a  SnU$ SnU$ )Nr>         r@   abs     r:   r   =TestInlining.test_inline_update_target_def.<locals>.test_impl   s!    Av H Hr<   r   myvar)locr@   c                      gNr   r@   r@   r<   r:   rA   <TestInlining.test_inline_update_target_def.<locals>.<lambda>   s    qr<   r   )r   run_frontendrF   rE   rG   rH   rI   
isinstancer
   AssignrJ   Varr   r   _definitionstargetrh   removeExprcallscoper   appendr   r   rC   )r9   r   rD   rE   rS   rT   rU   s          r:   test_inline_update_target_def*TestInlining.test_inline_update_target_def   s@   	 ''	2gnn++-.E$UZZ0tRYY//Jtzz2664R4R!*gzzBaG(()9)9:AA$**M!#bffU[['txx.XZ\^`bfbjbj!kDJ(()9)9:AA$**M'UyI 1  	W11#67;r<   c           	      \  ^ [        S[        R                  0S9S 5       mU4S jn[        R                  " U5      n[        UR                  R                  5       5      nU GH2  n[        UR                  5       GH  u  pV[        U[        R                  5      (       d  M'  [        UR                  [        R                  5      (       d  MR  UR                  R                  S:X  d  Mn  [!        ["        X&R                  R$                  5      n[        U[        R&                  [        R(                  45      (       d  M  [        UR                  [*        5      (       d  M  UR                  R,                  n[/        X(R0                  XEU5      u  p  GM0     GM5     U R3                  SW
;   5        g )Nr   )localsc                     U S-   nU$ Nr>   r@   r   s     r:   g0TestInlining.test_inline_var_dict_ret.<locals>.g   s    AAHr<   c                     > T " S5      $ r   r@   )r   s   r:   r   8TestInlining.test_inline_var_dict_ret.<locals>.test_impl   s    Q4Kr<   r   )r   r	   float64r   r   rF   rE   rG   rH   rI   r   r
   r   rJ   r   opr   r   funcGlobalFreeVarr   py_funcr   __globals__
assertTrue)r9   r   rD   rE   rS   rT   rU   func_defr   _var_mapr   s              @r:   test_inline_var_dict_ret%TestInlining.test_inline_var_dict_ret   s%    
c5==)	*	 
+		 ''	2gnn++-.E$UZZ0tRYY//&tzz277;; JJMMV3$^WjjooNH"8bii-DEE *8>>= I I"*.."8"8%8#%8%8%G&M
 1  	w'r<   c                    ^^ [         SS j5       mSU4S jjn[        SSS9 " U4S jS[        5      5       m " U4S jS	[        R                  5      n[        US
9" U5      nSnU R                  U" U5      U" U5      5        U R                  U" 5       U" 5       5        UR                  [        R                  " S 5      4   R                  S   n[        UR                  5      Ul        U R                  [        UR                  5      S5        g )Nc                     U c  gU $ r   r@   )r   s    r:   foo9TestInlining.test_inline_call_branch_pruning.<locals>.foo   s    yr<   c                    > T" U 5      $ r5   r@   )r   r   s    r:   r   ?TestInlining.test_inline_call_branch_pruning.<locals>.test_impl   s    q6Mr<   FTr-   c                   ,   > \ rS rSrSrS rU 4S jrSrg)KTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPass   pruning_inline_test_passc                 0    [         R                  " U 5        g r5   r6   r8   s    r:   r7   TTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPass.__init__   s    %%d+r<   c                 :  > [        UR                  R                  5      S:X  d   e[        UR                  R                  R	                  5       5      S   n[        UR                  5       H  u  p4[        [        UR                  UR                  5       c  M.  [        UR                  0 X#TR                  UR                  UR                  UR                  UR                  R                  S   R                      4UR                  UR"                  5
          g   g)Nr>   r   T)rC   rD   rE   rF   rG   rH   rI   r   r   rJ   r   r   rK   rL   rM   argsrh   rN   )r9   rR   rS   rT   rU   r   s        r:   rW   TTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPass.run_pass   s    5==//0A555U]]1188:;A>(4GAmU]]DJJG#'(+EMM2uKK%//"]]4::??1+=+B+BCE"]]EOO=   5 r<   r@   NrY   )r   s   r:   PruningInlineTestPassr      s    .E, r<   r   c                   "   > \ rS rSrU 4S jrSrg)MTestInlining.test_inline_call_branch_pruning.<locals>.InlineTestPipelinePrunei  c                 V   > [        U R                  T5      nUR                  5         U/$ r5   )rj   rR   ro   )r9   ri   r   s     r:   rp   ^TestInlining.test_inline_call_branch_pruning.<locals>.InlineTestPipelinePrune.define_pipelines  s$    !$**.CDtr<   r@   N)rZ   r[   r\   r]   rp   r_   )r   s   r:   InlineTestPipelinePruner     s     r<   r   )r   r   preserved_irr>   r5   )r   r,   r*   r   CompilerBaser   	overloadsr	   Omittedmetadatar   rE   rC   )r9   r   r   r   r   firr   r   s         @@r:   test_inline_call_branch_pruning,TestInlining.test_inline_call_branch_pruning   s     
	 
		 
U	=	L 	 
>	(	h&;&; 	 %<=iH1vay1fh/ d 356??O!#**-
SZZ!,r<   r@   N)rZ   r[   r\   r]   rr   r   r   r   r   r   r   r   r   r   r   r_   r@   r<   r:   rt   rt   f   sq    G<
;
>> 
2 
2 < <4 ( (8 2- 2-r<   rt   __main__)>r   numpyr   numba.tests.supportr   r   r   r   numbar   r   
numba.corer	   r
   r   r   numba.core.ir_utilsr   r   r   r   r   numba.core.registryr   numba.core.inline_closurecallr   numba.core.untyped_passesr   r   r   r   r   r   r   r   r   r   numba.core.typed_passesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   numba.core.compiler_machineryr*   r+   r,   unittestr1   rj   r   rl   rt   rZ   mainr@   r<   r:   <module>r     s    	 0 0  4 4? ? - =J J J
D D D D S R U5\  6.(T.. n-8 n-` zMMO r<   