o
    i$                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZm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 d
Zede jje j fgG dd de!Z"G dd deZ#e$dkrue%  dS dS )    N)TestCaseunittest)
cpu_target)CompilerBaseFlags)PassManager)typesirbytecodecompilerir_utilsregistry)ExtractByteCodeTranslateByteCode	FixupArgsIRProcessing)NopythonTypeInferencetype_inference_stageDeadCodeElimination)jitclass   valc                   @   s   e Zd Zdd ZdS )Dummyc                 C   s
   || _ d S N)r   )selfr    r   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_ir_utils.py__init__   s   
zDummy.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestIrUtilszA
    Tests ir handling utility functions like find_callname.
    c                 C   sx   dd }t |}tj}tj}t|||dd}t||jd j	d j
|j}| t|to8t|dko8|d dk dS )	zGTest matching of an object method (other than Array see #3449)
        c                  S   s   t dg} | jd d S )N      )r   r   append)dr   r   r   	test_func!   s   
z2TestIrUtils.test_obj_func_match.<locals>.test_funcr   Nr      r#   r$   )r   run_frontendr   typing_contexttarget_contextr   r   Zfind_callnameblocksbodyvaluetypemap
assertTrue
isinstancetuplelen)r   r&   Ztest_irZ	typingctxZ	targetctxZ
typing_resZmatched_callr   r   r   test_obj_func_match   s   



zTestIrUtils.test_obj_func_matchc           	         s   G dd dt } fdd} fdd}dd }|tjf}||}||}|tjf}|j|d	d
}||  t|jd jt| t|jd j d S )Nc                   @   s0   e Zd Zeddi dddfddZdddZdS )z6TestIrUtils.test_dead_code_elimination.<locals>.TesterNc                 S   sD   |st  }d|_|d u rtjj}|d u rtjj}| |||||||S )NT)r   Znrtr   r   r)   r*   )clsargsreturn_typeflagslocalslibraryr)   r*   r   r   r   mk_pipeline4   s   
zBTestIrUtils.test_dead_code_elimination.<locals>.Tester.mk_pipelineFc                 S   s   t j|}|| j_t | j | j}d}t|}|t	d |t
d |td |td |du r<|td |  || |jS )z7
                Compile and return IR
                ZDCE_testingzanalyzing bytecodezfix up argszprocessing IRznopython frontendTzDCE after typing)r
   ZFunctionIdentityfrom_functionstatefunc_idr   Zrun_passr   Zadd_passr   r   r   r   r   finalizerunfunc_ir)r   funcDCEr=   r<   namepmr   r   r   compile_to_irB   s   
zDTestIrUtils.test_dead_code_elimination.<locals>.Tester.compile_to_ir)F)r   r   r    classmethodr:   rE   r   r   r   r   Tester2   s    rG   c                    s     t| jd | jd }g }|tjD ]}tt|dd tjr0dt|j	ddv r0|
| q  t|d |D ]}| |j} td|j	j d	|j q;|S )
Nr"   r   targetdeadrC    r#   z0x%s   )assertEqualr2   r+   
find_instsr	   Assignr0   getattrVarrH   r$   Zget_definitionr-   r/   intrC   )the_irblockdeadsxr%   Z	const_valr   r   r   check_initial_irW   s   

z@TestIrUtils.test_dead_code_elimination.<locals>.check_initial_irc                    s     t| jd | jd }g }g }|tjD ])}tt|dd tjr2dt|j	ddv r2|
| tt|dd tjrA|
| q  t|d |D ]} |jjdv qLd S )	Nr"   r   rH   rI   rC   rJ   r-   )     ^[= )rL   r2   r+   rM   r	   rN   r0   rO   rP   rH   r$   ZConstr/   r-   )rR   rS   rT   ZconstsrU   rV   r   r   check_dce_irp   s   


z<TestIrUtils.test_dead_code_elimination.<locals>.check_dce_irc                 S   s$   | d }d}|d }d}|| }|S )Nr"   rX   r#   rY   r   )rU   yrI   zZdeaddeadretr   r   r   foo   s   z3TestIrUtils.test_dead_code_elimination.<locals>.fooT)rB   r   )	r   r:   r   intprE   rL   r2   r+   r,   )	r   rG   rW   rZ   r^   Ztest_pipelineZno_dceremovedZw_dcer   rV   r   test_dead_code_elimination0   s   %
z&TestIrUtils.test_dead_code_eliminationc                    s   d  fdd}t |}|jd }d}d}|jD ],}t|tjr0|jjdkr0t	
t	j||j}t|tjrE|jjdkrEt	
t	j||j}q| |t | |  dS )z
        Test find_const() for values in globals (ir.Global) and freevars
        (ir.FreeVar) that are considered constants for compilation.
           c                    s   t } }| | | S r   )GLOBAL_B)abcZ	FREEVAR_Cr   r   r^      s   z/TestIrUtils.test_find_const_global.<locals>.foor   Nre   rf   )r   r(   r+   r,   r0   r	   rN   rH   rC   r   guardZ
find_constrL   rc   )r   r^   Zf_irrS   Zconst_bZconst_cinstr   rg   r   test_find_const_global   s$   




z"TestIrUtils.test_find_const_globalc                    sX   dd }dd }dd } fdd}||}||}||}  ||  || d	S )
z tests flatten_labels c                 S   s   d}| dkr|d7 }| dkrdS n&| dk r3| dkr|d7 }t dD ]}|d8 }|d	k r- nq!|d
7 }ntdd}d	}d}d}|S )Nr      r"      5     rb   
   r#   r'   some string   range
ValueErrorrd   accrU   py310_defeat1py310_defeat2py310_defeat3py310_defeat4r   r   r   r^      s,   z,TestIrUtils.test_flatten_labels.<locals>.fooc                 S   s   d}d}| dkr|d7 }|d7 }| dkr|d7 }dS n2| dk rI| dkr+|d7 }|d7 }t dD ]}|d7 }|d8 }|d	k r? n	q/|d7 }|d
7 }ntdd}d	}d}d}|S )Nr   rb   rk   r"   rl   rm   rn   ro   r#   r'   rp   rq   rr   )rd   rv   r\   rU   rw   rx   ry   rz   r   r   r   bar   s8   z,TestIrUtils.test_flatten_labels.<locals>.barc                 S   s   d}| dkr|d7 }| dkrdS dS | dk r4| dkr|d7 }t d	D ]}|d8 }|d
k r. nq"|d7 }ntdd}d
}d}d}|S )Nr   rk   r"   rl   rm   7   rn   rb   ro   r#   r'   rp   rq   rr   ru   r   r   r   baz   s,   z,TestIrUtils.test_flatten_labels.<locals>.bazc                    sB   t | t }t |j} t| d t|j t 	|S )Nr"   )
r   Zcompile_to_numba_irdictZflatten_labelsr+   rL   maxkeysr2   Zcompute_cfg_from_blocks)rA   r@   Zflat_blocksrV   r   r   get_flat_cfg  s   
z5TestIrUtils.test_flatten_labels.<locals>.get_flat_cfgN)rL   ZassertNotEqual)r   r^   r{   r}   r   Zfoo_cfgZbar_cfgZbaz_cfgr   rV   r   test_flatten_labels   s   zTestIrUtils.test_flatten_labelsN)r   r   r    __doc__r3   ra   rj   r   r   r   r   r   r!      s    fr!   __main__)&ZnumbaZnumba.tests.supportr   r   Znumba.core.registryr   Znumba.core.compilerr   r   Znumba.core.compiler_machineryr   Z
numba.corer   r	   r
   r   r   r   Znumba.core.untyped_passesr   r   r   r   Znumba.core.typed_passesr   r   r   Znumba.experimentalr   rc   coreListr_   objectr   r!   r   mainr   r   r   r   <module>   s"      y