o
    Z۷i                     @   sD  d dl Z d dlZd dlZd dl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 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Z.G dd de+Z/dS )    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                 C   s>   t | }t }||_d |_d |_t | tj	d| |S )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr   state r'   O/home/ubuntu/vllm_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values
find_instsr
   Branchextend)selfthe_irbranchesblktmpr'   r'   r(   find_branches.   s
   z!TestBranchPruneBase.find_branchesc              
   O   s4  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di}t|fi ||j| }|d u r	| }| }n	|j| }|| }| || d S )NP================================================================================zbefore inlineFbefore pruneafter pruneTbothr   unreachablec                 S   r+   r'   r'   r,   r'   r'   r(   r/   u   r0   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>c                 S   r+   r'   r'   r,   r'   r'   r(   r/   v   r0   
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setr2   keysAssertionErrorsortedpopr   	overloadsentry_point)r7   r%   args_tyspruneargskwargsr   beforeinline_pass	post_procafterbefore_branchesrD   idxbranchrC   rB   esupplied_flagscresresexpectedr'   r'   r(   assert_prune5   sp   





z TestBranchPruneBase.assert_pruneN)__name__
__module____qualname____doc__rH   r<   rk   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)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 )Nrq   rr   r'   rs   r'   r'   r(   ru      rv   Fc                 S   s   | d u rdS d S Nrr   r'   rs   r'   r'   r(   ru      rv   
   c                 S      | dkrdS d S Nry   rr   r'   rs   r'   r'   r(   ru      rv   c                 S   s   | dkrd}d S d S r{   r'   )rt   zr'   r'   r(   ru      s   c                 S   s   d }|}| |kr
dS d S )Nd   r'   )rt   r|   yr'   r'   r(   ru      s
   rk   r   NoneTypeIntegerLiteralr7   ru   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 Nrr   l&ls?r'   rs   r'   r'   r(   ru         z1TestBranchPrune.test_single_if_else.<locals>.implrw   Fry   Tr   r   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   rz   Nr}   rr   r'   rs   r'   r'   r(   ru      rv   z6TestBranchPrune.test_single_if_const_val.<locals>.implrw   Tr}   c                 S   s   d| krdS d S r   r'   rs   r'   r'   r(   ru      s   r   r   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 r   r'   )rt   r~   r'   r'   r(   ru      r   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.implr}      rw   FT  )rk   r   r   r   r   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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   ry   r'   )rt   x_is_none_workdeadr~   r'   r'   r(   ru      s   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.implrw   Fry   Tc                 S   s(   d}| d u r	d}n	 |rd}|S d}|S )NFTry   r   r'   )rt   r   r~   r'   r'   r(   ru      s   r   r   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 )Nr}      r   ry   r   r'   )rt   one_hundredr   r   r~   r'   r'   r(   ru     s   z:TestBranchPrune.test_double_if_else_rt_const.<locals>.implrw   Fry   Tr   r   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 )Nr}   rr   r   r'   )rt   r   r~   r'   r'   r(   ru   $  s   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.implry   r}   rk   r   r   r   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 Nry   (   r}     r'   rt   r~   r|   r'   r'   r(   ru   2     z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.implrw   FTry   r   r   r'   r'   r(   "test_single_two_branches_same_cond0  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(   ru   D  r   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implFTrw   ry   N)rk   r   Omittedr   r   r   r'   r'   r(   test_cond_is_kwarg_noneB  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   ry   r   r}   r   r'   r   r'   r'   r(   ru   X  r   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implr   rw   TF)r   )rk   r   r   r   r   r   r'   r'   r(   test_cond_is_kwarg_valueV  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   r   )Nry      r'   rs   r'   r'   r(   fnn  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 )Nrq   r   callbinopr=   r>   r?   )r)   r<   rN   rO   condr   get_definitionopr]   rH   rI   rJ   r   
assertTrue
isinstancer
   Constvalue)
r%   arg_tysbit_valr   rc   pred_var	pred_defncondition_varcondition_opnew_condition_defnr7   r'   r(   checks  s*   



z;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkrw   rq   ry   r   )r   r   r   )r7   r   r   r'   r   r(   test_cond_rewrite_is_correctk  s    z,TestBranchPrune.test_cond_rewrite_is_correctc                 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   ry   _GLOBALrs   r'   r'   r(   ru        z1TestBranchPrune.test_global_bake_in.<locals>.implrq   F   c                 S   r   r   r   rs   r'   r'   r(   ru     r   T)rk   r   r   r   )r7   ru   r;   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'   rs   _FREEVARr'   r(   ru     r   z2TestBranchPrune.test_freevar_bake_in.<locals>.implrq   Fr   c                    r   r   r'   rs   r   r'   r(   ru     r   Tr   r   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   ry      r'   )arrayar'   r'   r(   ru     s
   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.implr   Crw   r      r   rk   r   Arrayfloat64r   npzerosr   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   ry      r'   )r   r   rt   r'   r'   r(   ru     s   z7TestBranchPrune.test_comparison_operators.<locals>.implr   r   rw   Fr@   r   g      (@r   r   r   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 )	Nr   r   r   r      r   ry   r   r'   r   rt   r   br'   r'   r(   ru     s   zCTestBranchPrune.test_redefinition_analysis_same_block.<locals>.implr   r   rw   )NFNr         ?r   r   r   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   ry   r   r'   r   r'   r'   r(   ru     s   zQTestBranchPrune.test_redefinition_analysis_different_block_can_exec.<locals>.implr   r   rw   )NNNNr   r   r   r   r   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(   ru   $  s   zTTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec.<locals>.implr   r   rw   Tr   g333333?NNr   r   r'   r'   r(   6test_redefinition_analysis_different_block_cannot_exec   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'   rs   r'   r(   closureF     zRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closurer   TFr'   )r   r'   rs   r(   ru   C  s   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implr'   F)rk   r   r'   r'   r(   #test_closure_and_nonlocal_can_prune@  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'   )trs   r'   r(   r   Y  r   zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closurer   TFr'   )nr   r'   rs   r(   ru   V  s   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implrq   )rk   r   int64r   r'   r'   r(   &test_closure_and_nonlocal_cannot_pruneS  s   z6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneN)rl   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   rp      s*    ,&+ rp   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)rq   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__rP   r   itemstuplerW   replacepytypesFunctionTypeglobals)	r7   pyfuncconstspyfunc_coder   r   r   
new_constsnew_coder'   r'   r(   _literal_const_sample_generatorp  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PLACEHOLDER1rr   PLACEHOLDER2r   r'   )rt   _CONST1_CONST2r'   r'   r(   ru     s
   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.implr   r   )rq   r   r   )Nr   rr   r   r   rr      )r   r   r   rN   )r7   ru   newiconst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   rr   r'   rt   r   r'   r'   r(   ru        z<TestBranchPrunePredicates.test_single_if_const.<locals>.implFTrq   rw   _TRUTHY_FALSEYr   rk   r   r   r7   ru   c_inpr\   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(   ru     r  zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.implFTrq   rw   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   rr   r   r'   r  r'   r'   r(   ru        zATestBranchPrunePredicates.test_single_if_else_const.<locals>.implFTrq   rw   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(   ru     r  zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.implFTrq   rw   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 rx   r'   rs   r  r'   r(   r%        z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.funcrw   r  r	  rk   r   r   r7   r  r\   r%   r'   r  r(   test_single_if_freevar     z0TestBranchPrunePredicates.test_single_if_freevarc                    r  )NFTc                    s    sd fS d S rx   r'   rs   r  r'   r(   r%     r  zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.funcrw   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 r   r'   rs   r  r'   r(   r%        zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.funcrw   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 r   r'   rs   r  r'   r(   r%     r  zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.funcrw   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 rx   )c_test_single_if_globalrs   r'   r'   r(   r%     r  z=TestBranchPrunePredicates.test_single_if_global.<locals>.funcrw   )r  r	  r#  rk   r   r   r7   r  r\   cr%   r'   r'   r(   test_single_if_global     z/TestBranchPrunePredicates.test_single_if_globalc                 C   r!  )NFTc                 S   r"  rx   )c_test_single_if_negate_globalrs   r'   r'   r(   r%     r  zDTestBranchPrunePredicates.test_single_if_negate_global.<locals>.funcrw   )r  r	  r(  rk   r   r   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 r   )c_test_single_if_else_globalrs   r'   r'   r(   r%   "  r  zBTestBranchPrunePredicates.test_single_if_else_global.<locals>.funcrw   )r  r	  r*  rk   r   r   r$  r'   r'   r(   test_single_if_else_global     z4TestBranchPrunePredicates.test_single_if_else_globalc                 C   r!  )NFTc                 S   s   t sdt fS dt fS r   )#c_test_single_if_else_negate_globalrs   r'   r'   r(   r%   1  r  zITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.funcrw   )r  r	  r-  rk   r   r   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 )Nrq   i  r   )r   r   )r3   r;   r'   r'   r(   foo;  s
   
z6TestBranchPrunePredicates.test_issue_5618.<locals>.foor   g     Є@)r   assertPreciseEqualpy_func)r7   r/  r'   r'   r(   test_issue_56189  s   
z)TestBranchPrunePredicates.test_issue_5618N)rl   rm   rn   r  r	  r   r  r  r  r  r  r  r  r  r   r&  r)  r+  r.  r2  r'   r'   r'   r(   r   g  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 IRssazdead branch pruningzpreserves the IR as metadata)r   add_passr   r   r   r   r   r   define_typed_pipeliner&   passesr6   !define_nopython_lowering_pipelinefinalize)r7   pmdpbtyped_passeslowering_passesr'   r'   r(   define_pipelinesK  s   z5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesN)rl   rm   rn   r>  r'   r'   r'   r(   SSAPrunerCompilerJ  s    r?  c                 C   s,   t | jdddd}| | |  d S )Npipeline_classc                 S   s,   d}d}| d u r
d}|r|d urd}||fS )Nrq   FTr   r'   )pqr|   rr'   r'   r(   ru   b  s   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implr   )r   r?  r0  r1  r   r'   r'   r(   test_ssa_update_phi^  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'   )rB  r|   r'   r'   r(   ru   w  s   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.implr   preserved_irphir   )r   r?  r0  r1  rY   
signaturesmetadatar2   r3   assertFalse
find_exprs)r7   ru   r   r:   r'   r'   r(   test_ssa_replace_phis  s   
	z'TestBranchPruneSSA.test_ssa_replace_phiN)rl   rm   rn   r   r?  rE  rL  r'   r'   r'   r(   r3  G  s    r3  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 )Nr   rq   ry   )ndimshape)r   r'   r'   r(   ru     s
   
zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.implr   r   Fr   rq   Tr@   )r   )rk   r   r   r   r   r   r   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   r   rq   r   rO   )tupr'   r'   r(   ru     s
   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.implr   Frq   r   r   r   Tr@   rq   )rk   r   UniTupler   r   r   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	   TypingErrorassertInstr	exception)r7   rX  rf   r'   r'   r(   test_attr_not_len  s   
z:TestBranchPrunePostSemanticConstRewrites.test_attr_not_lenc                 C   sx   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|dddd d S )N	FakeArrayrN  r   )rN  c                 S   s   | j dkr| j S t  d S )Nr   )rN  object)far'   r'   r(   ru     s   

zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.implr   Fr   rq   T)rF   forceobj)rE   )
collections
namedtuplerk   r   r   r   r   r   NamedUniTupler   )r7   r_  ra  ru   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   )rO  rN  )r   r   r'   r'   r(   ru     s   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl)r   r   r   r   )rq   rq   )r   r   r   r0  r1  )r7   ru   r]   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   rO   )r]   sargr'   r'   r(   ru     s   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl)r'   rS  r'   r   rF  inplace_binopc                 S   s   h | ]}t |qS r'   rQ  )r-   rt   r'   r'   r(   	<setcomp>  r   zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>)r   r   r0  r1  rY   rH  rI  rT   r2   r3   rK  find_variable_assignmentrhsnameassertIsInstancer   r
   r   addrN   )	r7   ru   inpolr   binop_constsr:   exprinstr'   r'   r(   test_tuple_const_propagation  s   

zETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagationN)	rl   rm   rn   rP  rU  r^  rg  rh  rw  r'   r'   r'   r(   rM    s    rM  )0rc  r   r   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*   rp   r   r3  rM  r'   r'   r'   r(   <module>   s2    f   ] aB