
    sh5                        S SK r S SKr S SK JrJr  S SKJr  S SKJrJrJr  S SK	J
r
  S SKJrJrJrJrJrJrJr  S SKJr  S SK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#  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-r.S SK/J0r0J1r1J2r2  S SK3r3S r4S r5\ R                  S 5       r6S r7S r8 " S S\25      r9 " S S\25      r:\;S:X  a  \3Rx                  " 5         gg)    N)njitjit)ir_utils)typesircompiler)
cpu_target)copy_propagateapply_copy_propagateget_name_var_tableremove_delsremove_deadremove_call_handlersalias_func_extensions)type_inference_stage)FunctionPassregister_passPassManager)
ExtractByteCodeTranslateByteCode	FixupArgsIRProcessingDeadBranchPruneRewriteSemanticConstantsGenericRewritesWithLifting
PreserveIRInlineClosureLikes)
NopythonTypeInferenceAnnotateTypesNopythonRewritesPreParforPass
ParforPassDumpParforDiagnosticsNativeLoweringIRLegalizationNoPythonBackendr%   )skip_parfors_unsupported
needs_blasTestCasec                 6    SnUnU S:  a  X-   nOSnSU-  nX`:  $ )N   r       )bzwx1xyas          p/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_remove_dead.pytest_will_propagater7      s/    	
B
A1uE	AA5L    c                     g Nr.   )r5   r/   cds       r6   	null_funcr=   )   s    	r8   c                     U $ r:   r.   )As    r6   dummy_aliased_funcr@   ,   s    Hr8   c                 L    [         R                  " XS   R                  X#5        g Nr   )r   
_add_aliasname)lhs_nameargs	alias_maparg_aliasess       r6   alias_ext_dummy_funcrI   0   s    q',,	Gr8   c                    U R                   R                  5        Ha  u  p#[        UR                  5       HC  u  pE[	        U[
        R                  5      (       d  M&  UR                  R                  U:X  d  MB      g   Mc     g)NTF)	blocksitems	enumeratebody
isinstancer   AssigntargetrD   )func_irvarlabelblockiinsts         r6   findLhsAssignrX   3   sZ    ,,. ,GA$		**t{{/?/?/D - /
 r8   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS r\\S 5       5       rS rS rS rS r\S 5       rSrg)TestRemoveDead;   Fc                 $    [        USSS9" U5      $ )NT)parallelfastmath)r   )selffunc	arg_typess      r6   compile_parallelTestRemoveDead.compile_parallel?   s    It<TBBr8   c                 ^   [         R                  n[         R                  n[        R                  " [
        5      nUR                  5         UR                  5         [        R                  [        R                  [        R                  4n[        XX4S 5      u  pVpv[        UR                  5        [        UR                  U5      u  p[        UR                  U[        UR                  5      XW5        [        UR                  UR                   U5        U R#                  [%        US5      5        g )Nr3   )r	   typing_contexttarget_contextr   run_frontendr7   refreshr   int64r   r   rK   r
   r   r   r   	arg_namesassertFalserX   )
r_   	typingctx	targetctxtest_irrF   typemap_	calltypesin_cpsout_cpss
             r6   test1TestRemoveDead.test1B   s    --	--	''(;<U[[%++6#7	g]a#b IGNN#(AW^^V5G5WY`lGNNG$5$5w?w45r8   c                     S nS n[         R                  " U5      n[        UR                  UR                  U5        U R                  U" U5      5        g )Nc                  B    [         R                  R                  S5        g Nr-   )nprandomseedr.   r8   r6   call_np_random_seed1TestRemoveDead.test2.<locals>.call_np_random_seedS   s    IINN1r8   c                 ~   U R                   S   R                   H  n[        U[        R                  5      (       d  M$  [        UR
                  [        R                  5      (       d  MO  UR
                  R                  S:X  d  Mk  U R                  UR
                  R                  5      R                  S:X  d  M    g   g)Nr   callr{   TF)rK   rN   rO   r   rP   valueExpropget_definitionr`   attr)rR   rW   s     r6   seed_call_exists.TestRemoveDead.test2.<locals>.seed_call_existsV   sz    q)..tRYY//tzz27733JJMMV+**4::??;@@FJ / r8   )r   rg   r   rK   rj   
assertTrue)r_   r|   r   rn   s       r6   test2TestRemoveDead.test2R   sG    		 ''(;<GNNG$5$5w?(12r8   c                 J   [         R                  " S5      R                  SS5      nUR                  5       nSnU R	                  U[
        R                  " U5      [
        R                  " U5      45      nU" X$5        U" X45        [         R                  R                  X#5        g )N   r-   r,   r   )	ry   arangereshapecopyrb   numbatypeoftestingassert_array_equal)r_   r`   A1A2rV   pfuncs         r6   run_array_index_test#TestRemoveDead.run_array_index_testc   st    YYq\!!!A&WWY%%dU\\"-=u||A,OPRb


%%b-r8   c                 ,    S nU R                  U5        g )Nc                 ,    U R                  5       nSX!'   g Nr,   )ravelr?   rV   Bs      r6   r`   -TestRemoveDead.test_alias_ravel.<locals>.funcn   s    	AADr8   r   r_   r`   s     r6   test_alias_ravelTestRemoveDead.test_alias_ravelm       	 	!!$'r8   c                 ,    S nU R                  U5        g )Nc                 $    U R                   nSX!'   g r   )flatr   s      r6   r`   ,TestRemoveDead.test_alias_flat.<locals>.funcu   s    AADr8   r   r   s     r6   test_alias_flatTestRemoveDead.test_alias_flatt   r   r8   c                 ,    S nU R                  U5        g )Nc                 (    U R                   nSX!S4'   g Nr,   r   )Tr   s      r6   r`   2TestRemoveDead.test_alias_transpose1.<locals>.func|   s    AAcFr8   r   r   s     r6   test_alias_transpose1$TestRemoveDead.test_alias_transpose1{       	 	!!$'r8   c                 ,    S nU R                  U5        g )Nc                 0    U R                  5       nSX!S4'   g r   )	transposer   s      r6   r`   2TestRemoveDead.test_alias_transpose2.<locals>.func   s    AAcFr8   r   r   s     r6   test_alias_transpose2$TestRemoveDead.test_alias_transpose2   r   r8   c                 ,    S nU R                  U5        g )Nc                 <    [         R                  " U 5      nSX!S4'   g r   )ry   r   r   s      r6   r`   2TestRemoveDead.test_alias_transpose3.<locals>.func   s    QAAcFr8   r   r   s     r6   test_alias_transpose3$TestRemoveDead.test_alias_transpose3   r   r8   c                   ^ SSK Jn  U" 5       R                  [        R                  5      mU4S jn[
        S S  n[
        R                  " U5        U4S jn[        R                  " S5      nUR                  5       n U R                  U[        R                  " U5      45      n[        R                  " U5      " U5        U" U5        U[
        S S & U R                  US   US   5        g ! U[
        S S & f = f)Nr   )_BLASc                 L   > UT/:X  a  U R                   S   R                  U;  $ g)N   F)rF   rD   )rhslives	call_listxxnrm2s      r6   remove_dead_xxnrm2<TestRemoveDead.test_alias_ctypes.<locals>.remove_dead_xxnrm2   s)    VH$xx{''u44r8   c                 r   > [         R                  " S5      nT" SSUR                  SU R                  5        g )Nr   d      )ry   onesctypes)retr5   r   s     r6   r`   .TestRemoveDead.test_alias_ctypes.<locals>.func   s(    
A3188Q

3r8   r   )numba.np.linalgr   numba_xxnrm2r   float64r   appendry   zerosr   rb   r   r   r   assertEqual)	r_   r   r   old_remove_handlersr`   r   r   r   r   s	           @r6   test_alias_ctypes TestRemoveDead.test_alias_ctypes   s     	*%%emm4	 315##$67	4 XXa[WWY	:))$b1A0CDEJJtR "I ': #A1& ': #s   >AC+ +C6c                 ,    S nU R                  U5        g )Nc                 >    [         R                  " U S5      nSX!S4'   g )N)r,   r-   r,   r   )ry   r   r   s      r6   r`   0TestRemoveDead.test_alias_reshape1.<locals>.func   s    

1e$AAcFr8   r   r   s     r6   test_alias_reshape1"TestRemoveDead.test_alias_reshape1   r   r8   c                 ,    S nU R                  U5        g )Nc                 4    U R                  SS5      nSX!S4'   g )Nr,   r-   r   )r   r   s      r6   r`   0TestRemoveDead.test_alias_reshape2.<locals>.func   s    		!AAAcFr8   r   r   s     r6   test_alias_reshape2"TestRemoveDead.test_alias_reshape2   r   r8   c                     S n[         R                  " 5       n [        [         S'   U R                  U5        U[        l         g ! U[        l         f = f)Nc                 &    [        U 5      nSX!S4'   g r   )r@   r   s      r6   r`   0TestRemoveDead.test_alias_func_ext.<locals>.func   s    "1%AAdGr8   )r@   znumba.tests.test_remove_dead)r   r   rI   r   r   )r_   r`   old_ext_handlerss      r6   test_alias_func_ext"TestRemoveDead.test_alias_func_ext   sQ    	
 1557	>3G " #0 1%%d+ .>H*-=H*s   A Ac                 j    S nU R                  U" 5       [        R                  " U5      " 5       5        g)zYmake sure lhs variable of assignment is considered live if used in
rhs (test for #6715).
c                  h    [        S5       H"  n S " U 5      n[        R                  " U5      nM$     W$ )Nr,   c                     U $ r:   r.   )js    r6   <lambda>DTestRemoveDead.test_rm_dead_rhs_vars.<locals>.func.<locals>.<lambda>   s    qr8   )rangery   array)rV   r5   s     r6   r`   2TestRemoveDead.test_rm_dead_rhs_vars.<locals>.func   s.    1X !$HHQK  Hr8   N)r   r   r   r   s     r6   test_rm_dead_rhs_vars$TestRemoveDead.test_rm_dead_rhs_vars   s'    	 	D!1!34r8   c                     S n[        SSS9 " S S[        5      5       n " S S[        R                  5      n[        R
                  " US	9" U5      " 5       nU" 5       n[        R                  R                  XE5        g
)zGMake sure aliases are considered in remove dead extension for
parfors.
c                      Sn [         R                  R                  R                  5         [        R
                  " U 5      nUn[         R                  " U 5       H  nX1U'   M	     U$ )N   )r   parforsparforinit_prangery   emptyprange)nr?   r   rV   s       r6   r`   8TestRemoveDead.test_alias_parfor_extension.<locals>.func   sO    AMM  ,,.AA\\!_! % Hr8   FT)analysis_onlymutates_CFGc                   $    \ rS rSrSrS rS rSrg)ATestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParfor   limited_parforc                 0    [         R                  " U 5        g r:   )r   __init__)r_   s    r6   r  JTestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParfor.__init__   s    %%d+r8   c                 b   [         R                  R                  R                  UR                  UR
                  UR                  UR                  UR                  UR                  R                  UR                  UR                  UR                  5	      n[        UR                  R                  5        UR                  R!                  UR                  R                  5        UR#                  UR                  R                  5        [%        UR                  R                  UR                  R&                  UR                  UR
                  5        [         R                  R                  R)                  UR                  R                  UR*                  R,                  UR.                  5        g)NT)r   r   r   r#   rR   ro   rq   return_typerl   flagsauto_parallelmetadataparfor_diagnosticsr   rK   array_analysisrun_convert_loopr   rj   get_parfor_paramsoptionsfusionnested_fusion_info)r_   stateparfor_passs      r6   run_passJTestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParfor.run_pass   s"   #mm22==MMMMOO%%OOKK--KKNN,,
 EMM001**..u}}/C/CD))%--*>*>?EMM00!MM33!MM!MM+ $$66u}}7K7K0;0C0C0J0J0;0N0NP r8   r.   N)__name__
__module____qualname____firstlineno___namer  r  __static_attributes__r.   r8   r6   LimitedParforr      s    $E,r8   r  c                       \ rS rSrSrS rSrg)@TestRemoveDead.test_alias_parfor_extension.<locals>.TestPipelinei	  zTest pipeline that just converts prange() to parfor and calls
remove_dead(). Copy propagation can replace B in the example code
which this pipeline avoids.
c                 p   Sn[        U5      nUR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [
        S5        U R                  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                  [        S5        UR                  [        S5        UR!                  5         U/$ )Nztest parfor aliasingz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native loweringznopython mode backend)r   add_passr   r   r   r   r  r  no_rewritesr   r   r   r   r   r%   r'   finalize)r_   rD   pms      r6   define_pipelinesQTestRemoveDead.test_alias_parfor_extension.<locals>.TestPipeline.define_pipelines  s    - &-/CDI}5L/:K)?@zz''33KK1DEKK 8:VWKK1FG.FH 13FG N,=>O-DEtr8   r.   N)r  r  r  r  __doc__r$  r  r.   r8   r6   TestPipeliner  	  s    r8   r'  )pipeline_classN)	r   r   r   Compilerr   r   ry   r   r   )r_   r`   r  r'  test_respy_ress         r6   test_alias_parfor_extension*TestRemoveDead.test_alias_parfor_extension   sl    
	 
U	=	L 	 
>	<	8,, 	8 99L9$?A


%%h7r8   r.   N)r  r  r  r  _numba_parallel_test_rb   rt   r   r   r   r   r   r   r   r(   r)   r   r   r   r   r   r,  r  r.   r8   r6   rZ   rZ   ;   s}    !C6 3".((((( '  '@((>
5 K8 K8r8   rZ   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestSSADeadBranchPrunei*  z7
Test issues that required dead-branch-prune on SSA IR
c                     [         SS j5       n[         SS j5       nU R                  U" SS 5      U" SS 5      5        U R                  U" SS5      U" SS5      5        g )Nc                     Ub  X-   $ U nX-   $ r:   r.   )r3   r4   s     r6   foo3TestSSADeadBranchPrune.test_issue_9706.<locals>.foo/  s    }uur8   c                     Ub  X-   $ U nX-   $ r:   r.   )r3   r4   y_s      r6   foo_manual_ssa>TestSSADeadBranchPrune.test_issue_9706.<locals>.foo_manual_ssa7  s    }u vr8   r,   
   r:   )r   r   )r_   r3  r7  s      r6   test_issue_9706&TestSSADeadBranchPrune.test_issue_9706.  sd    		 
	 
	 
	 	Q~a'>?Q^Ar%:;r8   c                 d   [         SS j5       nU" [        R                  " / SQ5      5      n[        R                  " SSS9nU" [        R                  " / SQ5      US9nU R	                  XC5        U R                  XB5        S nU" [        R                  " / SQ5      US9nU R                  XB5        g )Nc                     U R                   u  nUc  [        R                  " U5      nO%[        R                  " SU:*  X:  -  5      (       d   eX!S S & U$ rB   )shapery   r   all)xsoutNs      r6   f1TestSSADeadBranchPrune.test_issue_6541.<locals>.fD  sK    BA{iilvvqCxCG45555FJr8   )r,   r   r-   r,   i8)dtype)rA  r:   )r   ry   r   r   assertIsassertPreciseEqual)r_   rC  expectedrA  gots        r6   test_issue_6541&TestSSADeadBranchPrune.test_issue_6541C  s    		 
	 RXXi()ii&#-c.#-.r8   c                    [         SS j5       nU R                  U" SS S95        [        S[        R                  " S5      [        R
                  " S5      S9nU R                  U" S0 UD6UR                  " S0 UD65        g )Nc                 D    Uc  g [        U5      S:X  a  U$ X:  nX   nX!-  $ rB   )len)smthweightsdefaultidxs       r6   compute7TestSSADeadBranchPrune.test_issue_7482.<locals>.computeX  s2    7|q .ClG$$r8   r   )rP  rQ     )rP  rQ  rR  )g        r.   )r   assertIsNonedictry   r   r   r   py_func)r_   rT  kwargss      r6   test_issue_7482&TestSSADeadBranchPrune.test_issue_7482W  sp    	
	% 

	% 	'q$781biilBHHQKH*6* 262	4r8   c                     [         SS j5       n/ SQnU H%  nU R                  U" U6 UR                  " U6 5        M'     [         4S jnU R                  U" 5       U" S 5      5        g )Nc                 0    Uc  SnX-   $ X:  a  US-  nX-   $ Nr   r.   )r5   r/   s     r6   r3  3TestSSADeadBranchPrune.test_issue_5661.<locals>.fook  s,    y 5L Q5Lr8   ))r   r-   )r-   r   )r   c                 8   ^ U S 5       mU U4S j5       nU" 5       $ )Nc                     U c  Sn U $ U S-  n U $ )Nr   r   r.   )r  s    r6   innerCTestSSADeadBranchPrune.test_issue_5661.<locals>.make.<locals>.inner  s#    =E  QJEr8   c                  @   > S n [        S5       H  nT" U 5      n M     U $ )Nr9  )r   )r  rV   rc  s     r6   fn@TestSSADeadBranchPrune.test_issue_5661.<locals>.make.<locals>.fn  s$    rA!%LE #r8   r.   )decorrf  rc  s     @r6   make4TestSSADeadBranchPrune.test_issue_5661.<locals>.make~  s2        4Kr8   c                     U $ r:   r.   )r3   s    r6   r   8TestSSADeadBranchPrune.test_issue_5661.<locals>.<lambda>  s    r8   r:   )r   r   rY  )r_   r3  	args_listrF   ri  s        r6   test_issue_5661&TestSSADeadBranchPrune.test_issue_5661j  sg    		 
	
	
 DS$Zd);< 
  	$ 	k!23r8   c                 r   ^ Sm[         U4S j5       nU R                  U" 5       UR                  5       5        g )N    c                  b   > TS-  n / nU (       a  UR                  U 5        U S-  n U (       a  M  U$ rx   r   )conditionalcollectCONSTs     r6   r3  3TestSSADeadBranchPrune.test_issue_9742.<locals>.foo  s:      1*KG{+! + Nr8   r   r   rY  r_   r3  rv  s     @r6   test_issue_9742&TestSSADeadBranchPrune.test_issue_9742  s4    			 
		 	.r8   c                 r   ^ Sm[         U4S j5       nU R                  U" 5       UR                  5       5        g )Nrq  c                  F   > / n TS-   nU(       a  U R                  U5        U $ r_  rs  )ru  r3   rv  s     r6   r3  ;TestSSADeadBranchPrune.test_issue_9742_variant.<locals>.foo  s'    G 	Aq!Nr8   rx  ry  s     @r6   test_issue_9742_variant.TestSSADeadBranchPrune.test_issue_9742_variant  s4    		 
	 	.r8   r.   N)r  r  r  r  r&  r:  rK  r[  rn  rz  r  r  r.   r8   r6   r0  r0  *  s&    <*/(4&&4P/"/r8   r0  __main__)=r   numba.parfors.parforr   r   
numba.corer   r   r   r   numba.core.registryr	   numba.core.ir_utilsr
   r   r   r   r   r   r   numba.core.typed_passesr   numba.core.compiler_machineryr   r   r   numba.core.untyped_passesr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   numpyry   numba.tests.supportr(   r)   r*   unittestr7   r=   r@   rI   rX   rZ   r0  r  mainr.   r8   r6   <module>r     s        + + *I I I 9 R RJ J J
L L L  N N 
  Hl8X l8^F/X F/R zMMO r8   