o
    i)                     @   sL  d dl Z d dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZmZ 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 d dlmZmZmZmZ d dlmZmZ d d	l m!Z!m"Z"m#Z#m$Z$m%Z% d d
lm&Z&m'Z'm(Z( da)e Z*de*_+dd Z,G dd deeZ-G dd de-eZ.G dd de-eZ/G dd deeZ0G dd de-Z1dS )    N)compile_isolatedrun_frontendFlags	StateDict)jitnjitliteral_unroll)typeserrorsirrewritesir_utilsutilscpu)postproc)InlineClosureCallPass)TestCaseMemoryLeakMixinSerialMixinIRPreservingTestPipeline)dead_branch_prunerewrite_semantic_constants)ReconstructSSATranslateByteCodeIRProcessingDeadBranchPrune
PreserveIR)DefaultPassBuilderCompilerBasePassManager{   Tc                 C   s>   t | }t }||_d |_d |_t | tj	d| |S )Nzbefore-inference)
r   r   func_irtypemapZ	calltypesr   Zrun_passr   Zrewrite_registryapply)funcr!   state r&   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_analysis.pycompile_to_ir   s   r(   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )TestBranchPruneBasez
    Tests branch pruning
    Fc                 C   s:   g }|j  D ]}dd |jtjdD }|| q|S )Nc                 S      g | ]}|qS r&   r&   .0_r&   r&   r'   
<listcomp>1       z5TestBranchPruneBase.find_branches.<locals>.<listcomp>)cls)blocksvaluesZ
find_instsr   ZBranchextend)selfZthe_irZbranchesblktmpr&   r&   r'   find_branches.   s
   z!TestBranchPruneBase.find_branchesc              
   O   s8  t |}| }| jrtd td |  t|td}|  t	
|}	|	  t|| | jr@td td |  t|| |}
| jrRtd |  | |}| t|t| g }t|D ]7\}}|| }|du rz||j qg|du r||j qg|d u rqg|dkr||j ||j qgJ d	td
d |j D }tdd |
j D }z| ||t|  W n# ty } ztdt| tdt| tdt| |d }~ww |dd}|rd|ini }t||fi |}|d u r| }| }n	|j| }|| }| || d S )NP================================================================================zbefore inlineFbefore pruneafter pruneTbothr   Zunreachablec                 S   r*   r&   r&   r+   r&   r&   r'   r.   u   r/   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>c                 S   r*   r&   r&   r+   r&   r&   r'   r.   v   r/   
new_labelsoriginal_labelsexpect_removedflags)r(   copy_DEBUGprintdumpr   r   ZParallelOptionsrunr   ZPostProcessorr   r   r7   assertEquallen	enumerateappendZtruebrZfalsebrsetr1   keysAssertionErrorsortedpopr   entry_point)r4   r$   Zargs_tyspruneargskwargsr!   beforeZinline_passZ	post_procafterbefore_branchesr>   idxbranchr=   r<   eZsupplied_flagsZcompiler_kwsZcresresexpectedr&   r&   r'   assert_prune5   sr   





z TestBranchPruneBase.assert_pruneN)__name__
__module____qualname____doc__rA   r7   rZ   r&   r&   r&   r'   r)   '   s
    r)   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TestBranchPrunec                 C   s8  dd }|  |tdfdgd  dd }|  |tdfdgd  dd }|  |tdfdgd  |  |tdfdgd d	d }|  |tdfdgd  |  |tdfd gd d
d }|  |tdfdgd  |  |tdfd gd dd }|  |tdfdgd  |  |tdfdgd d S )Nc                 S   s   ddkrdS d S )N   r   n!	@r&   xr&   r&   r'   impl      z,TestBranchPrune.test_single_if.<locals>.implnoneTc                 S   s   ddkrdS d S )Nr`   ra   r&   rb   r&   r&   r'   rd      re   Fc                 S   s   | d u rdS d S Nra   r&   rb   r&   r&   r'   rd      re   
   c                 S      | dkrdS d S Nrh   ra   r&   rb   r&   r&   r'   rd      re   c                 S   s   | dkrd}d S d S rj   r&   )rc   zr&   r&   r'   rd      s   c                 S   s   d }|}| |kr
dS d S )Nd   r&   )rc   rk   yr&   r&   r'   rd      s
   rZ   r	   NoneTypeIntegerLiteralr4   rd   r&   r&   r'   test_single_if   s    zTestBranchPrune.test_single_ifc                 C   s@   dd }|  |tdfdgd  |  |tdfdgd d S )Nc                 S      | d u rdS dS Nra   l&ls?r&   rb   r&   r&   r'   rd         z1TestBranchPrune.test_single_if_else.<locals>.implrf   Frh   Trn   rq   r&   r&   r'   test_single_if_else   s   z#TestBranchPrune.test_single_if_elsec                 C   s|   dd }|  |tdfdgd  |  |tdfd gd dd }|  |tdfdgd  |  |tdfd gd d S )Nc                 S   ri   Nrl   ra   r&   rb   r&   r&   r'   rd      re   z6TestBranchPrune.test_single_if_const_val.<locals>.implrf   Trl   c                 S   s   d| krdS d S rx   r&   rb   r&   r&   r'   rd      s   rn   rq   r&   r&   r'   test_single_if_const_val   s   z(TestBranchPrune.test_single_if_const_valc                 C   s   dd }|  |tdfd d gdd |  |tdfd dgd d  |  |tdtdfdgdd  |  |tdtdfd gdd d S )	Nc                 S   s   | |krdS dS rt   r&   )rc   rm   r&   r&   r'   rd      rv   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.implrl      rf   FT  )rZ   r	   rp   ro   rq   r&   r&   r'   !test_single_if_else_two_const_val   s"   z1TestBranchPrune.test_single_if_else_two_const_valc                 C   s   dd }|  |tdfdd gd  |  |tdfdd gd dd }tjdkr8|  |tdfdd gd  n|  |tdfd d gd  |  |tdfdd gd d S )	Nc                 S   s*   d}| d u r	d}nd}|rd}|S d}|S )NFT   rh   r&   )rc   x_is_none_workdeadrm   r&   r&   r'   rd      s   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.implrf   Frh   Tc                 S   s(   d}| d u r	d}n	 |rd}|S d}|S )NFTrh   r~   r&   )rc   r   rm   r&   r&   r'   rd      s   )   rh   )rZ   r	   ro   rp   r   Z	PYVERSIONrq   r&   r&   r'   ,test_single_if_else_w_following_undetermined   s   
 z<TestBranchPrune.test_single_if_else_w_following_undeterminedc                 C   sD   dd }|  |tdfdd gd  |  |tdfdd gd d S )Nc                 S   s:   d}d}| d u rd}nd}||krd}||fS d}||fS )Nrl      r}   rh   r~   r&   )rc   one_hundredr   r   rm   r&   r&   r'   rd     s   z:TestBranchPrune.test_double_if_else_rt_const.<locals>.implrf   Frh   Trn   rq   r&   r&   r'   test_double_if_else_rt_const  s    z,TestBranchPrune.test_double_if_else_rt_constc                 C   s@   dd }|  |tdfd gd |  |tdfd gd d S )Nc                 S   s   d}| |kr
d}|S d}|S )Nrl   ra   ru   r&   )rc   r   rm   r&   r&   r'   rd   (  s   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.implrh   rl   rZ   r	   rp   rq   r&   r&   r'   %test_double_if_else_non_literal_const&  s   	z5TestBranchPrune.test_double_if_else_non_literal_constc                 C   sD   dd }|  |tdfddgd  |  |tdfddgd d S )Nc                 S   2   | d u rd}nd}| d urd}||fS d}||fS Nrh   (   rl     r&   rc   rm   rk   r&   r&   r'   rd   6     z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.implrf   FTrh   rn   rq   r&   r&   r'   "test_single_two_branches_same_cond4  s    z2TestBranchPrune.test_single_two_branches_same_condc                 C   sb   ddd}|  |td fddgd  |  |tdfddgd  |  |tdfddgd d S )Nc                 S   r   r   r&   r   r&   r&   r'   rd   H  r   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implFTrf   rh   N)rZ   r	   Omittedro   rp   rq   r&   r&   r'   test_cond_is_kwarg_noneF  s   
 z'TestBranchPrune.test_cond_is_kwarg_nonec                 C   s~   ddd}|  |tdfd d gd |  |tdfd d gd |  |tdfd d gd |  |tdfddgd  d S )	Nr{   c                 S   s2   | dkrd}nd}| dkrd}||fS d}||fS )Nr{   rh   r   rl   r   r&   r   r&   r&   r'   rd   \  r   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implr   rf   TF)r{   )rZ   r	   r   rp   ro   rq   r&   r&   r'   test_cond_is_kwarg_valueZ  s   
 z(TestBranchPrune.test_cond_is_kwarg_valuec                    s@   dd } fdd}||t dfd ||t dfd d S )	Nc                 S   rs   )Nrh      r&   rb   r&   r&   r'   fnr  s   z8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnc           
         s   t | } |} t|d |d j}t||} |jd |jd }t||} |jd  j	rDt
d t
d |  t||  j	rXt
d t
d |  t||}	 t|	tj  |	j| d S )Nr`   r   callbinopr8   r9   r:   )r(   r7   rE   rF   Zcondr   Zget_definitionoprP   rA   rB   rC   r   
assertTrue
isinstancer   Constvalue)
r$   Zarg_tysZbit_valr!   rT   Zpred_varZ	pred_defnZcondition_varZcondition_opZnew_condition_defnr4   r&   r'   checkw  s*   



z;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkrf   r`   rh   r   )r	   ro   rp   )r4   r   r   r&   r   r'   test_cond_rewrite_is_correcto  s    z,TestBranchPrune.test_cond_rewrite_is_correctc                 C   s   t dd }| |tddd | |tdd t  | |tdddg  | |tddd g  | |j d S )Nc                 S   s    | j dkr|d u rt S dS g S )Nr`   r   )ndimdictabr&   r&   r'   bug  s
   
z3TestBranchPrune.test_obj_mode_fallback.<locals>.bugrh   r   r   )rz      )	r   rE   npzerosZaranger   ZreshapeassertFalseZnopython_signatures)r4   r   r&   r&   r'   test_obj_mode_fallback  s   
z&TestBranchPrune.test_obj_mode_fallbackc                 C   s^   dd }|  |tdfdgd t}zdadd }|  |tdfdgd W |ad S |aw )Nc                 S      t dkr| S | d S Nr    rh   _GLOBALrb   r&   r&   r'   rd        z1TestBranchPrune.test_global_bake_in.<locals>.implr`   Fr   c                 S   r   r   r   rb   r&   r&   r'   rd     r   T)rZ   r	   rp   r   )r4   rd   r6   r&   r&   r'   test_global_bake_in  s   z#TestBranchPrune.test_global_bake_inc                    sX   d  fdd}|  |tdfdgd d  fdd}|  |tdfdgd d S )	Nr    c                        dkr| S | d S r   r&   rb   Z_FREEVARr&   r'   rd     r   z2TestBranchPrune.test_freevar_bake_in.<locals>.implr`   Fr   c                    r   r   r&   rb   r   r&   r'   rd     r   Tr   rq   r&   r   r'   test_freevar_bake_in  s   z$TestBranchPrune.test_freevar_bake_inc                 C   s@   ddd}|  |ttjddtdfd d gtdd  d S )Nc                 S   s   |d u rd}|dk rdS dS )Nr   rh      r&   )arrayr   r&   r&   r'   rd     s
   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.implrz   Crf   rz   r   r   rZ   r	   Arrayfloat64ro   r   r   rq   r&   r&   r'   4test_redefined_variables_are_not_considered_in_prune  s   

zDTestBranchPrune.test_redefined_variables_are_not_considered_in_prunec                 C   sn   d
dd}|  |ttjddtdfddgtdd  |  |ttjddtjfd d gtdd	 d S )Nc                 S   s    d}|d u rdS |dk rdS |S Nr   rh      r&   )r   r   rc   r&   r&   r'   rd     s   z7TestBranchPrune.test_comparison_operators.<locals>.implrz   r   rf   Fr;   r   g      (@r   r   rq   r&   r&   r'   test_comparison_operators  s   



z)TestBranchPrune.test_comparison_operatorsc                 C   F   d	dd}|  |ttjddtjtdfg dtddd  d S )
Nc                 S   s:   d}|dk rd}|d u rd}nd}|dk rdS d| | S )	Nrz   r   r   r}      r   rh   r   r&   r   rc   r   r   r&   r&   r'   rd     s   zCTestBranchPrune.test_redefinition_analysis_same_block.<locals>.implrz   r   rf   )NFNr         ?r   r   rq   r&   r&   r'   %test_redefinition_analysis_same_block  s   
z5TestBranchPrune.test_redefinition_analysis_same_blockc                 C   r   )
Nc                 S   sP   d}|dkrd}|dk rd}|d u r|d7 }d| S |d7 }|dk r$dS d| S )	Nr   r      r   r   r}   rh   r   r&   r   r&   r&   r'   rd   "  s   zQTestBranchPrune.test_redefinition_analysis_different_block_can_exec.<locals>.implrz   r   rf   )NNNNr   r   r   r   rq   r&   r&   r'   3test_redefinition_analysis_different_block_can_exec  s   
zCTestBranchPrune.test_redefinition_analysis_different_block_can_execc                 C   s   d	dd}|  |ttjddtdtdfdd gtdd d  |  |ttjddtdtjfdd gtdd d |  |ttjddtjtdfd d gtddd  d S )
Nc                 S   s8   d}|d urd}|d u r|d7 }d| S |d7 }d| S )Nr   r   r   r}   r   r&   r   r&   r&   r'   rd   :  s   zTTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec.<locals>.implrz   r   rf   Tr   g333333?NNr   rq   r&   r&   r'   6test_redefinition_analysis_different_block_cannot_exec6  s,   

zFTestBranchPrune.test_redefinition_analysis_different_block_cannot_execc                 C   s   dd }|  |ddg d S )Nc                     s&   d  fdd} |    dkrdS dS )Nr{   c                      s   d d S Nr   r&   r&   rb   r&   r'   closure\     zRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closurer   TFr&   )r   r&   rb   r'   rd   Y  s   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implr&   F)rZ   rq   r&   r&   r'   #test_closure_and_nonlocal_can_pruneV  s   z3TestBranchPrune.test_closure_and_nonlocal_can_prunec                 C   s"   dd }|  |tjfd gd d S )Nc                    s(   d  fdd}||   dkrdS dS )Nr{   c                    s   |  d S r   r&   )trb   r&   r'   r   o  r   zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closurer   TFr&   )nr   r&   rb   r'   rd   l  s   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implr`   )rZ   r	   int64rq   r&   r&   r'   &test_closure_and_nonlocal_cannot_prunei  s   z6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneN)r[   r\   r]   rr   rw   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   r_      s,    ,*+ r_   c                   @   s   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestBranchPrunePredicates)r`   StringTg@y              @)r    Fg        y                Nc           	      C   sh   |j }dd t|jD }| D ]\}}|||< qtdd t| D }|j|d}t|t	 S )aK  
        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.
        c                 S   s   i | ]\}}||qS r&   r&   )r,   kvr&   r&   r'   
<dictcomp>  s    zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<dictcomp>c                 S   s   g | ]\}}|qS r&   r&   )r,   r-   r   r&   r&   r'   r.         zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<listcomp>)	co_consts)
__code__rG   r   itemstuplerL   replacepytypesFunctionTypeglobals)	r4   ZpyfuncZconstsZpyfunc_coder   r   r   Z
new_constsZnew_coder&   r&   r'   _literal_const_sample_generator  s   	
z9TestBranchPrunePredicates._literal_const_sample_generatorc                 C   sf   dd }|  |ddd}|jj}|jj}| |d | |d | |d d | |d d	 d S )
Nc                 S   s   d}|rdS d}|d S NPLACEHOLDER1ra   ZPLACEHOLDER2r   r&   )rc   _CONST1Z_CONST2r&   r&   r'   rd     s
   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.implr   r   )r`   r   r   )Nr   ra   r   r   ra      )r   r   r   rE   )r4   rd   newZiconstZnconstr&   r&   r'   test_literal_const_code_gen  s   z5TestBranchPrunePredicates.test_literal_const_code_genc                 C   ^   dd }| j df| jdffD ]\}}|D ]}| |d|i}| |tdf|gd  qqd S )Nc                 S   s   d}|rdS d S Nr   ra   r&   rc   r   r&   r&   r'   rd        z<TestBranchPrunePredicates.test_single_if_const.<locals>.implFTr`   rf   _TRUTHY_FALSEYr   rZ   r	   ro   r4   rd   c_inprO   constr$   r&   r&   r'   test_single_if_const     z.TestBranchPrunePredicates.test_single_if_constc                 C   r   )Nc                 S   s   d}|sdS d S r   r&   r   r&   r&   r'   rd     r   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.implFTr`   rf   r   r   r&   r&   r'   test_single_if_negate_const  r   z5TestBranchPrunePredicates.test_single_if_negate_constc                 C   r   )Nc                 S   s   d}|rdS dS Nr   ra   ru   r&   r   r&   r&   r'   rd        zATestBranchPrunePredicates.test_single_if_else_const.<locals>.implFTr`   rf   r   r   r&   r&   r'   test_single_if_else_const     z3TestBranchPrunePredicates.test_single_if_else_constc                 C   r   )Nc                 S   s   d}|sdS dS r   r&   r   r&   r&   r'   rd     r   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.implFTr`   rf   r   r   r&   r&   r'    test_single_if_else_negate_const  r   z:TestBranchPrunePredicates.test_single_if_else_negate_constc                    R   | j df| jdffD ]\}}|D ]  fdd}| |tdf|gd  qq
d S )NFTc                    s    rd fS d S rg   r&   rb   r   r&   r'   r$        z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.funcrf   r   r   rZ   r	   ro   r4   r   rO   r$   r&   r   r'   test_single_if_freevar     z0TestBranchPrunePredicates.test_single_if_freevarc                    r   )NFTc                    s    sd fS d S rg   r&   rb   r   r&   r'   r$     r   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.funcrf   r   r   r&   r   r'   test_single_if_negate_freevar  r   z7TestBranchPrunePredicates.test_single_if_negate_freevarc                    r   )NFTc                    s    rd fS d fS rt   r&   rb   r   r&   r'   r$        zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.funcrf   r   r   r&   r   r'   test_single_if_else_freevar     z5TestBranchPrunePredicates.test_single_if_else_freevarc                    r   )NFTc                    s    sd fS d fS rt   r&   rb   r   r&   r'   r$     r   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.funcrf   r   r   r&   r   r'   "test_single_if_else_negate_freevar  r  z<TestBranchPrunePredicates.test_single_if_else_negate_freevarc                 C   R   | j df| jdffD ]\}}|D ]}|add }| |tdf|gd  qq
d S )NFTc                 S      t rdt fS d S rg   )c_test_single_if_globalrb   r&   r&   r'   r$     r   z=TestBranchPrunePredicates.test_single_if_global.<locals>.funcrf   )r   r   r  rZ   r	   ro   r4   r   rO   cr$   r&   r&   r'   test_single_if_global     z/TestBranchPrunePredicates.test_single_if_globalc                 C   r  )NFTc                 S   r  rg   )c_test_single_if_negate_globalrb   r&   r&   r'   r$   *  r   zDTestBranchPrunePredicates.test_single_if_negate_global.<locals>.funcrf   )r   r   r
  rZ   r	   ro   r  r&   r&   r'   test_single_if_negate_global#  r	  z6TestBranchPrunePredicates.test_single_if_negate_globalc                 C   r  )NFTc                 S   s   t rdt fS dt fS rt   )c_test_single_if_else_globalrb   r&   r&   r'   r$   8  r   zBTestBranchPrunePredicates.test_single_if_else_global.<locals>.funcrf   )r   r   r  rZ   r	   ro   r  r&   r&   r'   test_single_if_else_global1     z4TestBranchPrunePredicates.test_single_if_else_globalc                 C   r  )NFTc                 S   s   t sdt fS dt fS rt   )#c_test_single_if_else_negate_globalrb   r&   r&   r'   r$   G  r   zITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.funcrf   )r   r   r  rZ   r	   ro   r  r&   r&   r'   !test_single_if_else_negate_global@  r  z;TestBranchPrunePredicates.test_single_if_else_negate_globalc                 C   s6   t dd }| | d d | | d d d S )Nc                  S   s   t d} d}|r|| d< | S )Nr`   i  r   )r   r   )r2   r6   r&   r&   r'   fooQ  s
   
z6TestBranchPrunePredicates.test_issue_5618.<locals>.foor   g     Є@)r   assertPreciseEqualpy_func)r4   r  r&   r&   r'   test_issue_5618O  s   
z)TestBranchPrunePredicates.test_issue_5618N)r[   r\   r]   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r&   r&   r&   r'   r   }  s$    

r   c                   @   s,   e Zd ZG dd deZdd Zdd ZdS )TestBranchPruneSSAc                   @   s   e Zd Zdd ZdS )z$TestBranchPruneSSA.SSAPrunerCompilerc                 C   s   t d}|td |td |td |td |td t}|| j	}|j
|j
 || j	}|j
|j
 |  |gS )Nz
testing pmzanalyzing bytecodezprocessing IRZssazdead branch pruningzpreserves the IR as metadata)r   Zadd_passr   r   r   r   r   r   Zdefine_typed_pipeliner%   Zpassesr3   Z!define_nopython_lowering_pipelinefinalize)r4   pmZdpbZtyped_passesZlowering_passesr&   r&   r'   define_pipelinesa  s   z5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesN)r[   r\   r]   r  r&   r&   r&   r'   SSAPrunerCompiler`  s    r  c                 C   s,   t | jdddd}| | |  d S )NZpipeline_classc                 S   s,   d}d}| d u r
d}|r|d urd}||fS )Nr`   FTr   r&   )pqrk   rr&   r&   r'   rd   x  s   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implr   )r   r  r  r  rq   r&   r&   r'   test_ssa_update_phit  s   
z&TestBranchPruneSSA.test_ssa_update_phic                 C   sf   t | jdddd}| | |  |j|jd  jd }|j D ]}| 	g |
d q$d S )Nr  c                 S   s   d}| d u r
d}|S d}|S r   r&   )r  rk   r&   r&   r'   rd     s   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.implr   preserved_irphir   )r   r  r  r  	overloads
signaturesmetadatar1   r2   r   
find_exprs)r4   rd   r!   r5   r&   r&   r'   test_ssa_replace_phi  s   
	z'TestBranchPruneSSA.test_ssa_replace_phiN)r[   r\   r]   r   r  r  r%  r&   r&   r&   r'   r  ]  s    r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )(TestBranchPrunePostSemanticConstRewritesc                 C   s\   dd }|  |ttjddfdd gtd |  |ttjddfdd	gtd
 d S )Nc                 S   s$   | j dkr| jd dkrdS d S dS )Nrz   r`   rh   )r   shape)r   r&   r&   r'   rd     s
   
zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.implrz   r   Fr   r`   Tr;   )rz   )rZ   r	   r   r   r   r   rq   r&   r&   r'   test_array_ndim_attr  s   z=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attrc                 C   s\   dd }|  |ttjdfdd gtg d |  |ttjdfddgtd	dg d S )
Nc                 S   s$   t | dkr| d dkrdS d S dS )Nr   rz   r`   r   rF   )tupr&   r&   r'   rd     s
   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.implr   Fr`   rz   r   rz   Tr;   r`   )rZ   r	   ZUniTupler   r   rq   r&   r&   r'   test_tuple_len  s   

z7TestBranchPrunePostSemanticConstRewrites.test_tuple_lenc                 C   sT   t dd }| tj}|  W d    n1 sw   Y  | dt|j d S )Nc                   S   s   t d d S )NgGz?)floatas_integer_ratior&   r&   r&   r'   test  s   zHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.testz$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   ZTypingErrorZassertInstr	exception)r4   r/  rW   r&   r&   r'   test_attr_not_len  s   
z:TestBranchPrunePostSemanticConstRewrites.test_attr_not_lenc                 C   sr   t ddg}|dd}dd }| |ttjddfdgtd	 ttj	d
|}| j||fd g|t
d d S )N	FakeArrayr   rz   )r   c                 S   s   | j dkr| j S t  d S )Nrz   )r   object)far&   r&   r'   rd     s   

zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.implr   Fr   r`   )r?   )collections
namedtuplerZ   r	   r   r   r   r   ZNamedUniTupler   enable_pyobj_flags)r4   r4  r6  rd   ZFakeArrayTyper&   r&   r'   test_ndim_not_on_array  s   

z?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_arrayc                 C   s:   t dd }tdtdf}| || |j|  d S )Nc                 S   s   | j d |j S r   )r'  r   r   r&   r&   r'   rd     s   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl)r   r   r   rz   )r`   r`   )r   r   r   r  r  )r4   rd   rP   r&   r&   r'   5test_semantic_const_propagates_before_static_rewrites  s   
z^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewritesc           	      C   s   t tddd }d}| || |j|  |j|jd  }|jd }t }|j	 D ] }|
dD ]}||jj}| |jtj ||jj q2q+| |dd	 |D  d S )
Nr  c                  W   s"   d}t | D ]}|t|7 }q|S r   )r   rF   )rP   sargr&   r&   r'   rd     s   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl)r&   r+  r&   r   r  Zinplace_binopc                 S   s   h | ]}t |qS r&   r)  )r,   rc   r&   r&   r'   	<setcomp>  r   zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>)r   r   r  r  r!  r"  r#  rI   r1   r2   r$  Zfind_variable_assignmentrhsnameZassertIsInstancer   r   r   addrE   )	r4   rd   inpolr!   Zbinop_constsr5   exprinstr&   r&   r'   test_tuple_const_propagation  s   

zETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagationN)	r[   r\   r]   r(  r,  r3  r:  r;  rF  r&   r&   r&   r'   r&    s    r&  )2r7  r	   r   numpyr   Znumba.core.compilerr   r   r   r   Znumbar   r   r   Z
numba.corer
   r   r   r   r   r   r   Znumba.core.inline_closurecallr   Znumba.tests.supportr   r   r   r   Znumba.core.analysisr   r   Znumba.core.untyped_passesr   r   r   r   r   r   r   r   r   r9  Zenable_pyobjectr(   r)   r_   r   r  r&  r&   r&   r&   r'   <module>   s2   $f   s aB