
    sh                     p   S SK r S SKrS SKrS SKJrJr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  S SKJr  S SKJ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"J#r#  S S
KJ$r$J%r%J&r&  Sq'\" 5       r(S\(l)        S r* " S S\\5      r+ " S S\+\5      r, " S S\+\5      r- " S S\\5      r. " S S\+5      r/g)    N)run_frontendFlags	StateDict)jitnjitliteral_unroll)typeserrorsirrewritesir_utilscpu)postproc)InlineClosureCallPass)TestCaseMemoryLeakMixinSerialMixinIRPreservingTestPipeline)dead_branch_prunerewrite_semantic_constants)ReconstructSSATranslateByteCodeIRProcessingDeadBranchPrune
PreserveIR)DefaultPassBuilderCompilerBasePassManager{   Tc                     [        U 5      n[        5       nXl        S Ul        S Ul        [        5       R                  U5        [        R                  R                  SU5        U$ )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr!   states      m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_analysis.pycompile_to_irr*      sS    4 GKEMEMEOe$##$6>N    c                   (    \ rS rSrSrSrS rS rSrg)TestBranchPruneBase'   z
Tests branch pruning
Fc                     / nUR                   R                  5        H@  nUR                  [        R                  S9 Vs/ s H  oDPM     nnUR                  U5        MB     U$ s  snf )N)cls)blocksvalues
find_instsr   Branchextend)selfthe_irbranchesblk_tmps         r)   find_branches!TestBranchPruneBase.find_branches.   s[    =='')C!nnn;<;1;C<OOC  *  =s   A#c                    [        U5      nUR                  5       nU R                  (       a&  [        S5        [        S5        UR	                  5         [        U[        R                  " S5      5      nUR                  5         [        R                  " U5      n	U	R                  5         [        Xb5        U R                  (       a&  [        S5        [        S5        UR	                  5         [        Xb5        Un
U R                  (       a  [        S5        UR	                  5         U R                  U5      nU R                  [        U5      [        U5      5        / n[!        U5       H  u  pX   nUSL a  UR#                  UR$                  5        M+  USL a  UR#                  UR&                  5        MM  Uc  MR  US:X  a8  UR#                  UR&                  5        UR#                  UR$                  5        M   S5       e   [)        UR*                  R-                  5        Vs/ s H  oPM     sn5      n[)        U
R*                  R-                  5        Vs/ s H  oPM     sn5      n U R                  UU[)        U5      -
  5        UR3                  SSS05      n[5        U40 UD6" U5      R6                  U   nUc  UR9                  5       nU" 5       nOUR8                  " U6 nU" U6 nU R                  UU5        g s  snf s  snf ! [.         aF  n[        S	[1        U5      5        [        S
[1        U5      5        [        S[1        U5      5        UeS nAff = f)NP================================================================================zbefore inlineFbefore pruneafter pruneTbothunreachable
new_labelsoriginal_labelsexpect_removedflagsnopython)r*   copy_DEBUGprintdumpr   r   ParallelOptionsrunr   PostProcessorr   r   r<   assertEquallen	enumerateappendtruebrfalsebrsetr1   keysAssertionErrorsortedpopr   	overloadsentry_point)r6   r'   args_tyspruneargskwargsr!   beforeinline_pass	post_procafterbefore_branchesrF   idxbranchr:   rE   rD   esupplied_flagscresresexpecteds                          r)   assert_prune TestBranchPruneBase.assert_prune5   s     %;;(O/"LLN ,G,/,?,?,FI **73	"75;;(O.!LLN',;;- LLN,,V4_-s5z: #E*JC$)F}%%fmm4%%%fnn5&%%fnn5%%fmm4'-'q + &--*<*<*>?*>Qq*>?@U\\%6%6%89%8!%89:
	Z3~;N)NO  Gj$-?@8.~.t4>>xH<""$CvH""D)CT{Hh'+ @9
  	,z 23#VO%<="F>$:;G		s%    K9K>&L 
MAMM N)	__name__
__module____qualname____firstlineno____doc__rJ   r<   rm   __static_attributes__ro   r+   r)   r-   r-   '   s     FU(r+   r-   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 rS rS rS rS rS rS rS rS rS rSrg)TestBranchPrune   c                 p   S nU R                  U[        R                  " S5      4S/S 5        S nU R                  U[        R                  " S5      4S/S 5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S	 nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S
 nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        g )Nc                     SS:X  a  gg )N   r   n!	@ro   xs    r)   impl,TestBranchPrune.test_single_if.<locals>.impl       Av r+   noneTc                     SS:X  a  gg )Nr{   r|   ro   r}   s    r)   r   r      r   r+   Fc                     U c  gg Nr|   ro   r}   s    r)   r   r      s    y r+   
   c                     U S:X  a  gg Nr   r|   ro   r}   s    r)   r   r      s    Bw r+   c                     U S:X  a  Sng g r   ro   )r~   zs     r)   r   r      s    Bw r+   c                     S nUnX:X  a  gg )Nd   ro   )r~   r   ys      r)   r   r      s    AAv r+   rm   r	   NoneTypeIntegerLiteralr6   r   s     r)   test_single_ifTestBranchPrune.test_single_if   s   	 	$!7 9D64H	 	$!7 9E7DI	 	$!7 9E7DI$!5!5b!9 ;dVRH	 	$!7 9D64H$!5!5b!9 ;dVRH	 	$!7 9D64H$!5!5b!9 ;dVRH	 	$!7 9E7DI$!5!5b!9 ;dVRHr+   c                     S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        g )Nc                     U c  ggNr|   l&ls?ro   r}   s    r)   r   1TestBranchPrune.test_single_if_else.<locals>.impl   s    yr+   r   Fr   Tr   r   s     r)   test_single_if_else#TestBranchPrune.test_single_if_else   sO    	 	$!7 9E7DI$!5!5b!9 ;dVRHr+   c                 `   S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        g )Nc                     U S:X  a  gg Nr   r|   ro   r}   s    r)   r   6TestBranchPrune.test_single_if_const_val.<locals>.impl   s    Cx r+   r   Tr   c                     SU :X  a  gg r   ro   r}   s    r)   r   r      s    ax r+   r   r   s     r)   test_single_if_const_val(TestBranchPrune.test_single_if_const_val   s    	 	$!7 9D64H$!5!5c!: <tfcJ	
 	$!7 9D64H$!5!5c!: <tfcJr+   c                    S nU R                  U[        R                  " S5      4S-  S /SS5        U R                  U[        R                  " S5      4S-  S/S S 5        U R                  U[        R                  " S5      [        R                  " S5      4S/SS 5        U R                  U[        R                  " S5      [        R                  " S5      4S /SS5        g )Nc                     X:X  a  ggr   ro   )r~   r   s     r)   r   ?TestBranchPrune.test_single_if_else_two_const_val.<locals>.impl   s    vr+   r      r   FT  )rm   r	   r   r   r   s     r)   !test_single_if_else_two_const_val1TestBranchPrune.test_single_if_else_two_const_val   s    	 	$!5!5c!: <q @4&#	$!7 9A =w	 $!5!5c!:!&!7!:<@63	N$!5!5c!:!&!5!5d!;!=?Cfc4	Qr+   c                 h   S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        g )Nc                 4    SnU c  SnOSnU(       a  SnU$ SnU$ )NFT   r   ro   )r~   x_is_none_workdeadr   s       r)   r   JTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s1    "Ny!% H Hr+   r   Fr   Tc                 2    SnU c  SnO U(       a  SnU$ SnU$ )NFTr   r   ro   )r~   r   r   s      r)   r   r      s/    "Ny!% H Hr+   r   r   s     r)   ,test_single_if_else_w_following_undetermined<TestBranchPrune.test_single_if_else_w_following_undetermined   s    	 	$!7 9E4=$O$!5!5b!9 ;dD\2N	 	$!7 9E4=	  	$!5!5b!9 ;dD\2Nr+   c                     S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        g )Nc                 8    SnSnU c  SnOSnX!:X  a  SnXB4$ SnXB4$ )Nr      r   r   r   ro   )r~   one_hundredr   r   r   s        r)   r   :TestBranchPrune.test_double_if_else_rt_const.<locals>.impl  sA    KNy!$, $$ $$r+   r   Fr   Tr   r   s     r)   test_double_if_else_rt_const,TestBranchPrune.test_double_if_else_rt_const  sS    	% 	$!7 9E4=$O$!5!5b!9 ;dD\2Nr+   c                     S nU R                  U[        R                  " S5      4S /S5        U R                  U[        R                  " S5      4S /S5        g )Nc                      SnX:X  a  SnU$ SnU$ )Nr   r|   r   ro   )r~   r   r   s      r)   r   CTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl$  s%    K H Hr+   r   r   rm   r	   r   r   s     r)   %test_double_if_else_non_literal_const5TestBranchPrune.test_double_if_else_non_literal_const"  sQ    	 	$!5!5b!9 ;dVRH$!5!5c!: <tfcJr+   c                     S nU R                  U[        R                  " S5      4SS/S 5        U R                  U[        R                  " S5      4SS/S5        g )Nc                 ,    U c  SnOSnU b  SnX!4$ SnX!4$ Nr   (   r     ro   r~   r   r   s      r)   r   @TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl2  2    y} 4K 4Kr+   r   FTr   r   r   s     r)   "test_single_two_branches_same_cond2TestBranchPrune.test_single_two_branches_same_cond0  sS    	 	$!7 9E4=$O$!5!5b!9 ;dE]BOr+   c                    SS jnU R                  U[        R                  " S 5      4SS/S 5        U R                  U[        R                  " S5      4SS/S 5        U R                  U[        R                  " S5      4SS/S5        g )Nc                 ,    U c  SnOSnU b  SnX!4$ SnX!4$ r   ro   r   s      r)   r   5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implD  r   r+   FTr   r   N)rm   r	   Omittedr   r   r   s     r)   test_cond_is_kwarg_none'TestBranchPrune.test_cond_is_kwarg_noneB  sz    	 	$t!4 6 $-	/$!7 9E4=$O$!5!5b!9 ;dE]BOr+   c                 f   SS jnU R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4SS/S 5        g )Nr   c                 8    U S:X  a  SnOSnU S:w  a  SnX!4$ SnX!4$ )Nr   r   r   r   r   ro   r   s      r)   r   6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implX  s6    DyDy 4K 4Kr+   r   r   TF)r   )rm   r	   r   r   r   r   s     r)   test_cond_is_kwarg_value(TestBranchPrune.test_cond_is_kwarg_valueV  s    	 	$t!4 6tdK$!5!5d!; =d|	 $!5!5a!8 :T4L!L$!7 9D%=$Or+   c                    ^  S nU 4S jnU" U[         R                  " S5      4S5        U" U[         R                  " S5      4S5        g )Nc                     U c  gg)Nr      ro   r}   s    r)   fn8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnn  s    yr+   c                    > [        U 5      nT
R                  U5      nT
R                  [        U5      S5        US   R                  n[
        R                  " X55      nT
R                  UR                  S5        UR                  S   n[
        R                  " X75      nT
R                  UR                  S5        T
R                  (       a&  [        S5        [        S5        UR                  5         [        X15        T
R                  (       a&  [        S5        [        S5        UR                  5         [
        R                  " X75      n	T
R                  [        U	[        R                   5      5        T
R                  U	R"                  U5        g )Nr{   r   callbinopr?   r@   rA   )r*   r<   rP   rQ   condr   get_definitionopr_   rJ   rK   rL   r   
assertTrue
isinstancer   Constvalue)r'   arg_tysbit_valr!   re   pred_var	pred_defncondition_varcondition_opnew_condition_defnr6   s             r)   check;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checks  s&   #D)G #009OS115 'q)..H //BIY\\62%NN1-M#227JL\__g6 {{hn%g/{{hm$ "*!8!8!POOJ'9288DE/55w?r+   r   r{   r   r   )r	   r   r   )r6   r   r   s   `  r)   test_cond_rewrite_is_correct,TestBranchPrune.test_cond_rewrite_is_correctk  sC    	
	@@ 	b5>>&)+Q/b5''+-q1r+   c                     S nU R                  U[        R                  " S5      4S/S5        [        n SqS nU R                  U[        R                  " S5      4S/S5        Uqg ! Uqf = f)Nc                 $    [         S:X  a  U $ U S-   $ Nr   r   _GLOBALr}   s    r)   r   1TestBranchPrune.test_global_bake_in.<locals>.impl  s    #~2vr+   r{   F   c                 $    [         S:X  a  U $ U S-   $ r   r   r}   s    r)   r   r     s    c>Hr6Mr+   T)rm   r	   r   r   )r6   r   r;   s      r)   test_global_bake_in#TestBranchPrune.test_global_bake_in  st    	 	$!5!5a!8 :UGQG 	G" dU%9%9!%<$>JGcGs   /A' 'A+c                    ^ SmU4S jnU R                  U[        R                  " S5      4S/S5        SmU4S jnU R                  U[        R                  " S5      4S/S5        g )Nr   c                    > TS:X  a  U $ U S-   $ r   ro   r~   _FREEVARs    r)   r   2TestBranchPrune.test_freevar_bake_in.<locals>.impl      32vr+   r{   Fr   c                    > TS:X  a  U $ U S-   $ r   ro   r   s    r)   r   r     r   r+   Tr   )r6   r   r   s     @r)   test_freevar_bake_in$TestBranchPrune.test_freevar_bake_in  sc    	 	$!5!5a!8 :UGQG	 	$!5!5a!8 :TFAFr+   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      4S S /[
        R                  " S5      S 5        g )Nc                     Uc  SnUS:  a  gg)Nr   r      ro   )arrayas     r)   r   RTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.impl  s    y1ur+   r   Cr   r      r   rm   r	   Arrayfloat64r   npzerosr   s     r)   4test_redefined_variables_are_not_considered_in_pruneDTestBranchPrune.test_redefined_variables_are_not_considered_in_prune  sS    	 	$ ;;u}}a= >>&14,((6*D		2r+   c                    S	S jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      4SS/[
        R                  " S5      S 5        U R                  U[        R                  " [        R                  SS5      [        R                  4S S /[
        R                  " S5      S5        g )
Nc                      SnUc  gUS:  a  gU$ Nr   r      ro   )r  r  r~   s      r)   r   7TestBranchPrune.test_comparison_operators.<locals>.impl  s     Ay 1uHr+   r   r	  r   FrB   r
  g      (@r   r  r   s     r)   test_comparison_operators)TestBranchPrune.test_comparison_operators  s    
	 	$ ;;u}}a= >>&14 &/((6*D		2 	$ ;;u}}a= ==+,((6*C		1r+   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4/ SQ[
        R                  " S5      SS 5        g )	Nc                 D    SnUS:  a  SnUc  SnOSnUS:  a  gSU-   U-   $ )	Nr   r   r   r      r   r   r  ro   r  r~   r  bs       r)   r   CTestBranchPrune.test_redefinition_analysis_same_block.<locals>.impl  s:    A1uy1u6A:r+   r   r	  r   )NFNr
        ?r   r  r   s     r)   %test_redefinition_analysis_same_block5TestBranchPrune.test_redefinition_analysis_same_block  sX    
	 	$ ;;u}}a= ==%..*@C-((6*B		6r+   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4/ SQ[
        R                  " S5      SS 5        g )	Nc                 b    SnUS:  a  SnUS:  a  SnUc
  US-  nSU-   $ US-  nUS:  a  gSU-   $ )	Nr   r      r   r   r   r   r  ro   r  s       r)   r   QTestBranchPrune.test_redefinition_analysis_different_block_can_exec.<locals>.impl  sV    A1u1uyQ
 6M Qq56Mr+   r   r	  r   )NNNNr
  r   r   r  r   s     r)   3test_redefinition_analysis_different_block_can_execCTestBranchPrune.test_redefinition_analysis_different_block_can_exec  sX    	 	$ ;;u}}a= ==%..*@C2((6*B		6r+   c                    SS jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      [        R                  " S5      4SS /[
        R                  " S5      S S 5        U R                  U[        R                  " [        R                  SS5      [        R                  " S5      [        R                  4SS /[
        R                  " S5      S S5        U R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4S S /[
        R                  " S5      SS 5        g )	Nc                 >    SnUb  SnUc
  US-  nSU-   $ US-  nSU-   $ )Nr   r%  r   r   r  ro   r  s       r)   r   TTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec.<locals>.impl$  s>    A}yQ 6M Q6Mr+   r   r	  r   Tr
  g333333?NNr  r   s     r)   6test_redefinition_analysis_different_block_cannot_execFTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec   s   	 	$ ;;u}}a= >>&15>>&3IK,((6*D$		8 	$ ;;u}}a= >>&15==B,((6*D#		7 	$ ;;u}}a= ==%..*@B,((6*C		7r+   c                 2    S nU R                  USS/5        g )Nc                  2   ^ SmU4S jn U " 5         TS:X  a  gg)Nr   c                  
   > Sm g Nr   ro   r}   s   r)   closureRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureF      r+   r   TFro   )r3  r~   s    @r)   r   ATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implC  s!    A IAvr+   ro   F)rm   r   s     r)   #test_closure_and_nonlocal_can_prune3TestBranchPrune.test_closure_and_nonlocal_can_prune@  s    	 	$UH.r+   c                 R    S nU R                  U[        R                  4S /S5        g )Nc                 4   ^ SmU4S jnU" U 5        TS:X  a  gg)Nr   c                 
   > U mg r   ro   )tr~   s    r)   r3  UTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureY  r5  r+   r   TFro   )nr3  r~   s     @r)   r   DTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implV  s#    A AJAvr+   r{   )rm   r	   int64r   s     r)   &test_closure_and_nonlocal_cannot_prune6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneS  s%    	 	$;r+   ro   N)rp   rq   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r'  r-  r7  rA  ru   ro   r+   r)   rw   rw      su    *IX	IK"Q"$OLO(KP$P(P*)2V4G,2"166,607@/&<r+   rw   c                   v    \ 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 rS rS rS rS rS rS rSrg)TestBranchPrunePredicatesig  )r{   StringTg@y              @)r    Fg        y                Nc                    UR                   n[        UR                  5       VVs0 s H  u  pEXE_M	     nnnUR                  5        H	  u  pEXVU'   M     [	        [        UR                  5       5       VVs/ s H  u  puUPM	     snn5      nUR                  US9n	[        R                  " U	[        5       5      $ s  snnf s  snnf )a  
This takes a python function, pyfunc, and manipulates its co_const
__code__ member to create a new function with different co_consts as
supplied in argument consts.

consts is a dict {index: value} of co_const tuple index to constant
value used to update a pyfunc clone's co_const.
)	co_consts)
__code__rR   rH  itemstuplerY   replacepytypesFunctionTypeglobals)
r6   pyfuncconstspyfunc_codekvrH  r:   
new_constsnew_codes
             r)   _literal_const_sample_generator9TestBranchPrunePredicates._literal_const_sample_generatorp  s     oo '00E0E&FG&FdaQT&F	GLLNDAaL #&1B*CD*C$!A*CDE
 &&&< ##Hgi88 H Es   B84B>
c                 4   S nU R                  USSS.5      nUR                  R                  nUR                  R                  nU R                  US5        U R                  US5        U R                  U" S 5      S5        U R                  U" S 5      S5        g )	Nc                 $    SnU(       a  gSnUS-   $ NPLACEHOLDER1r|   PLACEHOLDER2r   ro   )r~   _CONST1_CONST2s      r)   r   CTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s    $G(Q;r+   r   r  )r{   r  r[  )Nr   r|   r  r   r|      )rW  rI  rH  rP   )r6   r   newiconstnconsts        r)   test_literal_const_code_gen5TestBranchPrunePredicates.test_literal_const_code_gen  s    	 224AE(('' "5 	6!;<dW-TB'r+   c                     S nU R                   S4U R                  S44 HL  u  p#U HA  nU R                  USU05      nU R                  U[        R
                  " S5      4U/S 5        MC     MN     g )Nc                     SnU(       a  gg Nr\  r|   ro   r~   r^  s     r)   r   <TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G r+   FTr{   r   _TRUTHY_FALSEYrW  rm   r	   r   r6   r   c_inpr^   constr'   s         r)   test_single_if_const.TestBranchPrunePredicates.test_single_if_const  r    	
 "\\51DLL$3GGLE;;D1e*M!!$)?(AE7"&(  Hr+   c                     S nU R                   S4U R                  S44 HL  u  p#U HA  nU R                  USU05      nU R                  U[        R
                  " S5      4U/S 5        MC     MN     g )Nc                     SnU(       d  gg ri  ro   rj  s     r)   r   CTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G r+   FTr{   r   rl  ro  s         r)   test_single_if_negate_const5TestBranchPrunePredicates.test_single_if_negate_const  rt  r+   c                     S nU R                   S4U R                  S44 HL  u  p#U HA  nU R                  USU05      nU R                  U[        R
                  " S5      4U/S 5        MC     MN     g )Nc                     SnU(       a  ggNr\  r|   r   ro   rj  s     r)   r   ATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $Gr+   FTr{   r   rl  ro  s         r)   test_single_if_else_const3TestBranchPrunePredicates.test_single_if_else_const  r    	 "\\51DLL$3GGLE;;D1e*M!!$)?(AE7"&(  Hr+   c                     S nU R                   S4U R                  S44 HL  u  p#U HA  nU R                  USU05      nU R                  U[        R
                  " S5      4U/S 5        MC     MN     g )Nc                     SnU(       d  ggr|  ro   rj  s     r)   r   HTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $Gr+   FTr{   r   rl  ro  s         r)    test_single_if_else_negate_const:TestBranchPrunePredicates.test_single_if_else_negate_const  r  r+   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                    > T(       a  ST4$ g r   ro   r~   rq  s    r)   r'   >TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s    &~- r+   r   rm  rn  rm   r	   r   r6   rp  r^   r'   rq  s       @r)   test_single_if_freevar0TestBranchPrunePredicates.test_single_if_freevar  ]    !\\51DLL$3GGLE. !!$)?(AE7"&(  Hr+   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                    > T(       d  ST4$ g r   ro   r  s    r)   r'   ETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s     &~- !r+   r   r  r  s       @r)   test_single_if_negate_freevar7TestBranchPrunePredicates.test_single_if_negate_freevar  r  r+   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                 "   > T(       a  ST4$ ST4$ r   ro   r  s    r)   r'   CTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s    &~-&~-r+   r   r  r  s       @r)   test_single_if_else_freevar5TestBranchPrunePredicates.test_single_if_else_freevar  ]    !\\51DLL$3GGLE.
 !!$)?(AE7"&(  Hr+   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                 "   > T(       d  ST4$ ST4$ r   ro   r  s    r)   r'   JTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s     &~-&~-r+   r   r  r  s       @r)   "test_single_if_else_negate_freevar<TestBranchPrunePredicates.test_single_if_else_negate_freevar  r  r+   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 *    [         (       a  S[         4$ g r   )c_test_single_if_globalr}   s    r)   r'   =TestBranchPrunePredicates.test_single_if_global.<locals>.func  s    ..&(??? /r+   r   )rm  rn  r  rm   r	   r   r6   rp  r^   cr'   s        r)   test_single_if_global/TestBranchPrunePredicates.test_single_if_global  se     "\\51DLL$3GGLE*+'@ !!$)?(AE7"&(  Hr+   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 *    [         (       a  S[         4$ g r   )c_test_single_if_negate_globalr}   s    r)   r'   DTestBranchPrunePredicates.test_single_if_negate_global.<locals>.func  s    55&(FFF 6r+   r   )rm  rn  r  rm   r	   r   r  s        r)   test_single_if_negate_global6TestBranchPrunePredicates.test_single_if_negate_global  se     "\\51DLL$3GGLE12.G !!$)?(AE7"&(  Hr+   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 8    [         (       a  S[         4$ S[         4$ r   )c_test_single_if_else_globalr}   s    r)   r'   BTestBranchPrunePredicates.test_single_if_else_global.<locals>.func"  s     33&(DDD&(DDDr+   r   )rm  rn  r  rm   r	   r   r  s        r)   test_single_if_else_global4TestBranchPrunePredicates.test_single_if_else_global  se     "\\51DLL$3GGLE/0,E
 !!$)?(AE7"&(  Hr+   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 8    [         (       d  S[         4$ S[         4$ r   )#c_test_single_if_else_negate_globalr}   s    r)   r'   ITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.func1  s     >>&(KKK&(KKKr+   r   )rm  rn  r  rm   r	   r   r  s        r)   !test_single_if_else_negate_global;TestBranchPrunePredicates.test_single_if_else_negate_global*  se     "\\51DLL$3GGLE673L
 !!$)?(AE7"&(  Hr+   c                     [         S 5       nU R                  UR                  5       S   S5        U R                  U" 5       S   S5        g )Nc                  L    [         R                  " S5      n SnU(       a  XS'   U $ )Nr{   i  r   )r  r  )r2   r;   s     r)   foo6TestBranchPrunePredicates.test_issue_5618.<locals>.foo;  s#    XXa[FCq	Mr+   r   g     Є@)r   assertPreciseEqualpy_func)r6   r  s     r)   test_issue_5618)TestBranchPrunePredicates.test_issue_56189  sG    		 
	 	a 0$7a$/r+   ro   N)rp   rq   rr   rs   rm  rn  rW  re  rr  rx  r~  r  r  r  r  r  r  r  r  r  r  ru   ro   r+   r)   rD  rD  g  sY     +G+G9.($((((((
(
(((((0r+   rD  c                   6    \ rS rSr " S S\5      rS rS rSrg)TestBranchPruneSSAiG  c                       \ rS rSrS rSrg)$TestBranchPruneSSA.SSAPrunerCompileriJ  c                 &   [        S5      nUR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [
        S5        UR                  [        S5        [        nUR                  U R                  5      nUR                  R                  UR                  5        UR                  U R                  5      nUR                  R                  UR                  5        UR                  5         U/$ )Nz
testing pmzanalyzing bytecodezprocessing IRssazdead branch pruningzpreserves the IR as metadata)r   add_passr   r   r   r   r   r   define_typed_pipeliner(   passesr5   !define_nopython_lowering_pipelinefinalize)r6   pmdpbtyped_passeslowering_passess        r)   define_pipelines5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesK  s     \*BKK)+?@KKo6KK.KK)>?KK
$BC$C44TZZ@LII\001!CCDJJOOII_334KKM4Kr+   ro   N)rp   rq   rr   rs   r  ru   ro   r+   r)   SSAPrunerCompilerr  J  s    	r+   r  c                     [        U R                  S9SS j5       nU R                  U" 5       UR                  5       5        g )Npipeline_classc                 2    SnSnU c  SnU(       a  Ub  SnX#4$ )Nr{   FTr  ro   )pqr   rs       r)   r   4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implb  s+    AAyQ]
 4Kr+   r,  )r   r  r  r  r   s     r)   test_ssa_update_phi&TestBranchPruneSSA.test_ssa_update_phi^  s;     
T33	4	 
5	 	7r+   c                 \   [        U R                  S9SS j5       nU R                  U" 5       UR                  5       5        UR                  UR
                  S      R                  S   nUR                  R                  5        H%  nU R                  / UR                  S5      Q5        M'     g )Nr  c                     SnU c  SnU$ SnU$ r  ro   )r  r   s     r)   r   5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.implw  s$    Ay H Hr+   r   preserved_irphir   )r   r  r  r  r[   
signaturesmetadatar1   r2   assertFalse
find_exprs)r6   r   r!   r9   s       r)   test_ssa_replace_phi'TestBranchPruneSSA.test_ssa_replace_phis  s     
T33	4	 
5	 	7..!34==nM >>((*C5s~~e456 +r+   ro   N)	rp   rq   rr   rs   r   r  r  r  ru   ro   r+   r)   r  r  G  s    L (8*7r+   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
(TestBranchPrunePostSemanticConstRewritesi  c                 F   S nU R                  U[        R                  " [        R                  SS5      4SS /[        R
                  " S5      5        U R                  U[        R                  " [        R                  SS5      4SS/[        R
                  " S	5      5        g )
Nc                 N    U R                   S:X  a  U R                  S   S:X  a  gg g)Nr   r{   r   )ndimshape)r  s    r)   r   KTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl  s*    zzQ;;q>Q& ' r+   r   r	  Fr
  r{   TrB   )r   )rm   r	   r  r  r  r  r   s     r)   test_array_ndim_attr=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr  s    	 	$U]]As!C EHLHN((6*	, 	$U]]As!C EHNHP((4.	*r+   c           	         S nU R                  U[        R                  " [        R                  S5      4SS /[	        / SQ5      5        U R                  U[        R                  " [        R                  S5      4SS/[	        SS/5      5        g )	Nc                 8    [        U 5      S:X  a  U S   S:X  a  gg g)Nr  r   r{   r   )rQ   )tups    r)   r   ETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl  s%    3x1}q6Q;  r+   r  Fr{   r   r  r   TrB   r{   )rm   r	   UniTupler@  rK  r   s     r)   test_tuple_len7TestBranchPrunePostSemanticConstRewrites.test_tuple_len  s~    	 	$Q!? AEDHDJ	*	, 	$Q!? ADDJDLA-	)r+   c                     [         S 5       nU R                  [        R                  5       nU" 5         S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nc                  .    [         R                  S5        g )NgGz?)floatas_integer_ratioro   r+   r)   testHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(r+   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   TypingErrorassertInstr	exception)r6   r  rh   s      r)   test_attr_not_len:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  s[     
	) 
	) v112aF 3 	<c!++>NO 32s   A""
A0c           	      \   [         R                  " SS/5      nU" SS9nS nU R                  U[        R                  " [        R
                  SS5      4S/[        R                  " S5      5        [        R                  " [        R                  S	U5      nU R                  X44S /USS
S.S9  g )N	FakeArrayr  r   )r  c                 P    U R                   S:X  a  U R                   $ [        5         g )Nr   )r  object)fas    r)   r   MTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl  s    ww!|wwr+   r	  Fr
  r{   T)rH   forceobj)rG   )
collections
namedtuplerm   r	   r  r  r  r  NamedUniTupler@  )r6   r  r
  r   FakeArrayTypes        r)   test_ndim_not_on_array?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array  s    **;A	A	 	$U]]As!C Ew((6*	, ++EKKIF$ 04&",1d C 	 	Er+   c                     [         S 5       n[        R                  " S5      [        R                  " S5      4nU R                  U" U6 UR                  " U6 5        g )Nc                 4    U R                   S UR                   $ r   )r  r  )r  r  s     r)   r   lTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl  s    777AFF##r+   )r   r   r  r   )r{   r{   )r   r  r  r  r  )r6   r   r_   s      r)   5test_semantic_const_propagates_before_static_rewrites^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites  sQ     
	$ 
	$ &(89dT\\4-@Ar+   c           	         [        [        S9S 5       nSnU R                  U" U6 UR                  " U6 5        UR                  UR
                  S      nUR                  S   n[        5       nUR                  R                  5        H  nUR                  S5       Hw  nUR                  UR                  R                  5      nU R                  UR                  [         R"                  5        UR%                  UR                  R                  5        My     M     U R'                  XR V	s1 s H  n	[)        U	5      iM     sn	5        g s  sn	f )Nr  c                  J    Sn[        U 5       H  nU[        U5      -  nM     U$ r2  )r   rQ   )r_   sargs      r)   r   STestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s(    A%d+SX ,Hr+   )ro   r  ro   r   r  inplace_binop)r   r   r  r  r[   r  r  rV   r1   r2   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrP   rQ   )
r6   r   inpolr!   binop_constsr9   exprinstr~   s
             r)   test_tuple_const_propagationETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation  s   	5	6	 
7	 "c
DLL#,>?^^DOOA./++n-u>>((*C733DHHMMB%%djj"((;  !1!12 8 +
 	'<1A'<='<s   )E
ro   N)rp   rq   rr   rs   r  r  r  r  r  r(  ru   ro   r+   r)   r  r    s#    * ) P E(	B>r+   r  )0r  r	   rM  numpyr  numba.core.compilerr   r   r   numbar   r   r   
numba.corer
   r   r   r   r   r   numba.core.inline_closurecallr   numba.tests.supportr   r   r   r   numba.core.analysisr   r   numba.core.untyped_passesr   r   r   r   r   r   r   r   r   enable_pyobj_flagsenable_pyobjectr*   r-   rw   rD  r  r  ro   r+   r)   <module>r4     s       > > + + A A  ?; ; M3 3 N M W %)  "
c(/8 c(LW<); W<t]0 3[ ]0@?7( ?7Df>/B f>r+   