
    J/Ph5                        d dl Z d dlZ d dl mZmZ d dlmZ d dlmZmZmZ d dl	m
Z
 d dl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mZ d d	lmZmZmZmZ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+m,Z,m*Z* d dl-Z.d dl/m0Z0m1Z1m2Z2 d dl3Z3d Z4d Z5e j        d             Z6d Z7d Z8 G d de2          Z9 G d de2          Z:e;dk    r e3j<                     dS dS )    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                 <    d}|}| dk    r||z   }nd}d|z  }|| k     S )N   r       )bzwx1xyas          \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_remove_dead.pytest_will_propagater7      s7    	
B
A1uuE	AAq5L    c                     d S Nr.   )r5   r/   cds       r6   	null_funcr=   )   s    	Er8   c                     | S r:   r.   )As    r6   dummy_aliased_funcr@   ,   s    Hr8   c                 J    t          j        | |d         j        ||           d S Nr   )r   
_add_aliasname)lhs_nameargs	alias_maparg_aliasess       r6   alias_ext_dummy_funcrI   0   s%    $q',	;GGGGGr8   c                     | j                                         D ]M\  }}t          |j                  D ]3\  }}t	          |t
          j                  r|j        j        |k    r  dS 4NdS )NTF)	blocksitems	enumeratebody
isinstancer   AssigntargetrD   )func_irvarlabelblockiinsts         r6   findLhsAssignrX   3   sy    ,,..  u ,, 	 	GAt$	** t{/?/D/Dttt	 5r8   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eed                         Zd Zd Zd Zd Zed             ZdS )TestRemoveDeadFc                 8     t          |dd          |          S )NT)parallelfastmath)r   )selffunc	arg_typess      r6   compile_parallelzTestRemoveDead.compile_parallel?   s!    <tIt<<<TBBBr8   c                 V   t           j        }t           j        }t          j        t
                    }|                                 |                                 t          j        t          j        t          j        f}t          ||||d           \  }}}}t          |j                   t          |j        |          \  }}	t          |j        |t          |j                  ||           t          |j        |j        |           |                     t%          |d                     d S )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   test1zTestRemoveDead.test1B   s    -	-	'(;<<U[%+6#7	9gW[]a#b#b IqGN###(AAW^V5G5W5WY`bklllGNG$5w???w4455555r8   c                     d }d }t          j        |          }t          |j        |j        |           |                      ||                     d S )Nc                  D    t           j                            d           d S Nr-   )nprandomseedr.   r8   r6   call_np_random_seedz1TestRemoveDead.test2.<locals>.call_np_random_seedS   s    INN1r8   c                    | j         d         j        D ]v}t          |t          j                  rZt          |j        t          j                  r;|j        j        dk    r+|                     |j        j	                  j
        dk    r dS wdS )Nr   callrx   TF)rK   rN   rO   r   rP   valueExpropget_definitionr_   attr)rR   rW   s     r6   seed_call_existsz.TestRemoveDead.test2.<locals>.seed_call_existsV   s    q).    tRY//  tz2733 JMV++**4:?;;@FJJ445r8   )r   re   r   rK   rh   
assertTrue)r^   ry   r   rl   s       r6   test2zTestRemoveDead.test2R   sn    	 	 		 	 	 '(;<<GNG$5w???((1122222r8   c                 j   t          j        d                              dd          }|                                }d}|                     |t          j        |          t          j        |          f          } |||            |||           t           j                            ||           d S )N   r-   r,   r   )	rv   arangereshapecopyra   numbatypeoftestingassert_array_equal)r^   r_   A1A2rV   pfuncs         r6   run_array_index_testz#TestRemoveDead.run_array_index_testc   s    Yq\\!!!A&&WWYY%%dU\"-=-=u|A,OPPRb!

%%b"-----r8   c                 6    d }|                      |           d S )Nc                 8    |                                  }d||<   d S Nr,   )ravelr?   rV   Bs      r6   r_   z-TestRemoveDead.test_alias_ravel.<locals>.funcn   s    		AAaDDDr8   r   r^   r_   s     r6   test_alias_ravelzTestRemoveDead.test_alias_ravelm   -    	 	 	 	!!$'''''r8   c                 6    d }|                      |           d S )Nc                     | j         }d||<   d S r   )flatr   s      r6   r_   z,TestRemoveDead.test_alias_flat.<locals>.funcu   s    AAaDDDr8   r   r   s     r6   test_alias_flatzTestRemoveDead.test_alias_flatt   r   r8   c                 6    d }|                      |           d S )Nc                 "    | j         }d||df<   d S Nr,   r   )Tr   s      r6   r_   z2TestRemoveDead.test_alias_transpose1.<locals>.func|   s    AAacFFFr8   r   r   s     r6   test_alias_transpose1z$TestRemoveDead.test_alias_transpose1{   -    	 	 	 	!!$'''''r8   c                 6    d }|                      |           d S )Nc                 <    |                                  }d||df<   d S r   )	transposer   s      r6   r_   z2TestRemoveDead.test_alias_transpose2.<locals>.func   s     AAacFFFr8   r   r   s     r6   test_alias_transpose2z$TestRemoveDead.test_alias_transpose2   r   r8   c                 6    d }|                      |           d S )Nc                 <    t          j        |           }d||df<   d S r   )rv   r   r   s      r6   r_   z2TestRemoveDead.test_alias_transpose3.<locals>.func   s     QAAacFFFr8   r   r   s     r6   test_alias_transpose3z$TestRemoveDead.test_alias_transpose3   r   r8   c                 0   ddl m}  |                                t          j                  fd}t
          d d          }t          j        |           fd}t          j        d          }|	                                }	 | 
                    |t          j        |          f          } t          j        |          |            ||           |t
          d d <   n# |t
          d d <   w xY w|                     |d         |d                    d S )Nr   )_BLASc                 >    |gk    r| j         d         j        |vS dS )N   F)rF   rD   )rhslives	call_listxxnrm2s      r6   remove_dead_xxnrm2z<TestRemoveDead.test_alias_ctypes.<locals>.remove_dead_xxnrm2   s)    VH$$x{'u445r8   c                 b    t          j        d          } dd|j        d| j                   d S )Nr   d      )rv   onesctypes)retr5   r   s     r6   r_   z.TestRemoveDead.test_alias_ctypes.<locals>.func   s2    

AF318Q
33333r8   r   )numba.np.linalgr   numba_xxnrm2r   float64r   appendrv   zerosr   ra   r   r   r   assertEqual)	r^   r   r   old_remove_handlersr_   r   r   r   r   s	           @r6   test_alias_ctypesz TestRemoveDead.test_alias_ctypes   sE    	*)))))%%em44	 	 	 	 	 31115#$6777	4 	4 	4 	4 	4 Xa[[WWYY	:))$b1A1A0CDDEEJtR   E"III ': ##&9 #9999A1&&&&&s   AC# #C1c                 6    d }|                      |           d S )Nc                 >    t          j        | d          }d||df<   d S )N)r,   r-   r,   r   )rv   r   r   s      r6   r_   z0TestRemoveDead.test_alias_reshape1.<locals>.func   s$    
1e$$AAacFFFr8   r   r   s     r6   test_alias_reshape1z"TestRemoveDead.test_alias_reshape1   r   r8   c                 6    d }|                      |           d S )Nc                 @    |                      dd          }d||df<   d S )Nr,   r-   r   )r   r   s      r6   r_   z0TestRemoveDead.test_alias_reshape2.<locals>.func   s$    		!AAAacFFFr8   r   r   s     r6   test_alias_reshape2z"TestRemoveDead.test_alias_reshape2   r   r8   c                     d }t          j                    }	 t          t           d<   |                     |           |t          _         d S # |t          _         w xY w)Nc                 2    t          |           }d||df<   d S r   )r@   r   s      r6   r_   z0TestRemoveDead.test_alias_func_ext.<locals>.func   s     "1%%AAadGGGr8   )r@   znumba.tests.test_remove_dead)r   r   rI   r   r   )r^   r_   old_ext_handlerss      r6   test_alias_func_extz"TestRemoveDead.test_alias_func_ext   sr    	 	 	
 1577	>3G " #0 1%%d+++ .>H***-=H*====s   $A
 
Ac                 |    d }|                       |             t          j        |                                 dS )zimake sure lhs variable of assignment is considered live if used in
        rhs (test for #6715).
        c                  j    t          d          D ]"}  d |           }t          j        |          }#|S )Nr,   c                     | S r:   r.   )js    r6   <lambda>zDTestRemoveDead.test_rm_dead_rhs_vars.<locals>.func.<locals>.<lambda>   s    q r8   )rangerv   array)rV   r5   s     r6   r_   z2TestRemoveDead.test_rm_dead_rhs_vars.<locals>.func   s<    1XX     [[!$$HQKKHr8   N)r   r   r   r   s     r6   test_rm_dead_rhs_varsz$TestRemoveDead.test_rm_dead_rhs_vars   sH    	 	 	 	!1D!1!1!3!344444r8   c                 0   d }t          dd           G d dt                                } G d dt          j                  }  t	          j        |	          |                      } |            }t          j                            ||           d
S )zWMake sure aliases are considered in remove dead extension for
        parfors.
        c                      d} t           j        j                                         t	          j        |           }|}t          j        |           D ]}|||<   |S )N   )r   parforsparforinit_prangerv   emptyprange)nr?   r   rV   s       r6   r_   z8TestRemoveDead.test_alias_parfor_extension.<locals>.func   sW    AM ,,...AA\!__  !Hr8   FT)analysis_onlymutates_CFGc                       e Zd ZdZd Zd ZdS )ATestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParforlimited_parforc                 .    t          j        |            d S r:   )r   __init__)r^   s    r6   r   zJTestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParfor.__init__   s    %d+++++r8   c                 X   t           j        j                            |j        |j        |j        |j        |j        |j	        j
        |j	        |j        |j        	  	        }t          |j        j                   |j                            |j        j                   |                    |j        j                   t%          |j        j        |j        j        |j        |j                   t           j        j                            |j        j        |j        j        |j                   dS )NT)r   r   r   r#   rR   rm   ro   return_typerj   flagsauto_parallelmetadataparfor_diagnosticsr   rK   array_analysisrun_convert_loopr   rh   get_parfor_paramsoptionsfusionnested_fusion_info)r^   stateparfor_passs      r6   run_passzJTestRemoveDead.test_alias_parfor_extension.<locals>.LimitedParfor.run_pass   s   #m2==MMO%OK-KN,
 
 EM0111*..u}/CDDD))%-*>???EM0!M3!M!M+ + + $66u}7K0;0C0J0;0NP P P tr8   N)__name__
__module____qualname___namer   r   r.   r8   r6   LimitedParforr      s7        $E, , ,    r8   r   c                       e Zd ZdZd ZdS )@TestRemoveDead.test_alias_parfor_extension.<locals>.TestPipelinezTest 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                    d}t          |          }|                    t          d           |                    t          d           |                    t          d           |                    t
          d           | j        j        j        sQ|                    t          d           |                    t          d           |                    t          d           |                    t          d	           |                    t          d
           |                    t          d           |                    t          d           |                                 |gS )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_pipelineszQTestRemoveDead.test_alias_parfor_extension.<locals>.TestPipeline.define_pipelines  s/   - &&-/CDDDI}555L/:::K)?@@@z'3 HKK1DEEEKK 8:VWWWKK1FGGG.FH H H 13FGGG N,=>>>O-DEEEtr8   N)r   r   r   __doc__r  r.   r8   r6   TestPipeliner   	  s-             r8   r  )pipeline_classN)	r   r   r   Compilerr   r   rv   r   r   )r^   r_   r   r  test_respy_ress         r6   test_alias_parfor_extensionz*TestRemoveDead.test_alias_parfor_extension   s    
	 	 	 
U	=	=	=	 	 	 	 	L 	 	 
>	=	<	 	 	 	 	8, 	 	 	8 @959L999$??AA

%%h77777r8   N)r   r   r   _numba_parallel_test_ra   rr   r   r   r   r   r   r   r   r(   r)   r   r   r   r   r   r  r.   r8   r6   rZ   rZ   ;   s(       !C C C6 6 6 3 3 3". . .( ( (( ( (( ( (( ( (( ( ( ' ' Z '@( ( (( ( (> > >
5 
5 
5 K8 K8 K8 K8 K8r8   rZ   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestSSADeadBranchPrunez?
    Test issues that required dead-branch-prune on SSA IR
    c                     t           dd            }t           dd            }|                      |dd            |dd                      |                      |dd           |dd                     d S )Nc                     || |z   S | }| |z   S r:   r.   )r3   r4   s     r6   fooz3TestSSADeadBranchPrune.test_issue_9706.<locals>.foo/  s    }1u1ur8   c                     || |z   S | }| |z   S r:   r.   )r3   r4   y_s      r6   foo_manual_ssaz>TestSSADeadBranchPrune.test_issue_9706.<locals>.foo_manual_ssa7  s     }1u 2vr8   r,   
   r:   )r   r   )r^   r  r  s      r6   test_issue_9706z&TestSSADeadBranchPrune.test_issue_9706.  s    		 	 	 
	 
	 	 	 
	 	Q~~a'>'>???Q^^Ar%:%:;;;;;r8   c                    t           dd            } |t          j        g d                    }t          j        dd          } |t          j        g d          |          }|                     ||           |                     ||           d } |t          j        g d          |          }|                     ||           d S )Nc                     | j         \  }|t          j        |          }n!t          j        d|k    ||k     z            sJ ||d d <   |S rB   )shaperv   r   all)xsoutNs      r6   fz1TestSSADeadBranchPrune.test_issue_6541.<locals>.fD  sT    BA{illvqCxC!G455555CFJr8   )r,   r   r-   r,   i8)dtype)r  r:   )r   rv   r   r   assertIsassertPreciseEqual)r^   r  expectedr  gots        r6   test_issue_6541z&TestSSADeadBranchPrune.test_issue_6541C  s    		 	 	 
	 1RXiii(())i&&&a##---c3X...a##---X.....r8   c                 "   t           dd            }|                      |dd                      t          dt          j        d          t          j        d                    }|                      |di | |j        di |           d S )	N        c                 Z    |d S t          |          dk    r|S | |k    }||         }||z  S rB   )len)smthweightsdefaultidxs       r6   computez7TestSSADeadBranchPrune.test_issue_7482.<locals>.computeX  s?    t7||q  .CclGW$$r8   r   )r'  r(     )r'  r(  r)  )r$  r.   )r   assertIsNonedictrv   r   r   r   py_func)r^   r+  kwargss      r6   test_issue_7482z&TestSSADeadBranchPrune.test_issue_7482W  s    	
	% 
	% 
	% 

	% 	''q$7778881billBHQKKHHH**6**(22622	4 	4 	4 	4 	4r8   c                     t           dd            }g d}|D ]#}|                      ||  |j        |            $t           fd}|                      |             |d                      d S )Nc                 ,    |d}n|| k     r|dz  }| |z   S Nr   r.   )r5   r/   s     r6   r  z3TestSSADeadBranchPrune.test_issue_5661.<locals>.fook  s)    yQQq5Lr8   ))r   r-   )r-   r   )r   c                 H    | d             | fd            } |            S )Nc                     | d} n| dz  } | S )Nr   r   r.   )r   s    r6   innerzCTestSSADeadBranchPrune.test_issue_5661.<locals>.make.<locals>.inner  s    =EEQJEr8   c                  F    d } t          d          D ]} |           } | S )Nr  )r   )r   rV   r7  s     r6   fnz@TestSSADeadBranchPrune.test_issue_5661.<locals>.make.<locals>.fn  s1    r ) )A!E%LLEEr8   r.   )decorr9  r7  s     @r6   makez4TestSSADeadBranchPrune.test_issue_5661.<locals>.make~  sN      U     U 244Kr8   c                     | S r:   r.   )r3   s    r6   r   z8TestSSADeadBranchPrune.test_issue_5661.<locals>.<lambda>  s     r8   r:   )r   r   r/  )r^   r  	args_listrF   r;  s        r6   test_issue_5661z&TestSSADeadBranchPrune.test_issue_5661j  s    		 	 	 
	
 
 
	
  	= 	=DSS$Zd);<<<<  	 	 	 	$ 	kk!2!233333r8   c                     dt           fd            }|                      |            |                                           d S )N    c                  R    dz  } g }| r|                     |            | dz  } | |S ru   r   )conditionalcollectCONSTs     r6   r  z3TestSSADeadBranchPrune.test_issue_9742.<locals>.foo  sH      1*KG "{+++!  " Nr8   r   r   r/  r^   r  rE  s     @r6   test_issue_9742z&TestSSADeadBranchPrune.test_issue_9742  sW    			 		 		 		 
		 	.....r8   c                     dt           fd            }|                      |            |                                           d S )Nr@  c                  D    g } dz   }|r|                      |           | S r4  rB  )rD  r3   rE  s     r6   r  z;TestSSADeadBranchPrune.test_issue_9742_variant.<locals>.foo  s2    G 	A "q!!!Nr8   rF  rG  s     @r6   test_issue_9742_variantz.TestSSADeadBranchPrune.test_issue_9742_variant  sW    		 	 	 	 
	 	.....r8   N)
r   r   r   r  r  r"  r1  r>  rH  rK  r.   r8   r6   r  r  *  sy         < < <*/ / /(4 4 4&&4 &4 &4P/ / /"/ / / / /r8   r  __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'   numpyrv   numba.tests.supportr(   r)   r*   unittestr7   r=   r@   rI   rX   rZ   r  r   mainr.   r8   r6   <module>rX     sQ                      + + + + + + + + + + * * * * * *I I I I I I I I I I I I I I I I I I 9 8 8 8 8 8 R R R R R R R R R RJ J J J J J J J J J J J J J J J J J J J J J J J
L L L L L L L L L L L L L L L L L L L L L L L L     N N N N N N N N N N   
 
 
   H H H  l8 l8 l8 l8 l8X l8 l8 l8^F/ F/ F/ F/ F/X F/ F/ F/R zHMOOOOO r8   