o
    ‘i\N  ã                   @   s  d dl Z d dlmZ d dlZd dl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 d dlmZmZmZ d dlmZmZ d d	lmZ G d
d„ de jƒZG dd„ de jƒZG dd„ deƒZG dd„ deƒZdZG dd„ deƒZG dd„ deƒZedkr„e  ¡  dS dS )é    N)ÚTestCase)Úobjmode)ÚirÚcompiler)Úerrors)ÚCompilerBaseÚReconstructSSA)ÚFunctionPassÚPassManagerÚregister_pass)ÚTranslateByteCodeÚIRProcessing)Únjitc                   @   ó   e Zd Zdd„ ZdS )ÚTestIRc                 C   sh  d}t jd t j|ddd}t j|t j|ddd}|jdt j|ddd}|  | d¡|¡ |  t|jƒd¡ |jd	t j|d
dd}|  t|jƒd¡ |  t|jƒd¡ |  | d	¡|¡ |  | d	¡|¡ |jd	t j|ddd}|  | d	¡|¡ |  	| d	¡| ¡ |  | d	¡|¡ z|jd	t j|ddd W n t j
y©   Y d S w |  dt j
 ¡ d S )Nz<?>é   )ÚfilenameÚline©ÚparentÚlocé   Úappleé   )r   Úorangeé   é   zExpecting an %s)r   ÚScopeÚLocÚdefineZassertIsÚgetÚassertEqualÚlenZ	localvarsZassertIsNotZRedefinedErrorZfail)Úselfr   ÚtopÚlocalr   r   Zmore_orange© r&   úb/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_ir.pyÚtest_IRScope   s.   
ÿÿzTestIR.test_IRScopeN)Ú__name__Ú
__module__Ú__qualname__r(   r&   r&   r&   r'   r      s    r   c                   @   s”   e Zd Ze ddej¡Ze ddej¡Ze ddej¡Ze ddej¡Z	e ddej¡Z
e ddd	¡Ze dd
d	¡Ze ddd	¡Zg g fdd„ZdS )ÚCheckEqualityNÚaÚbÚcÚdÚeZmockr   r   r   r   c                 C   s4   |D ]	}|   ||k¡ q|D ]	}|   ||k¡ qd S ©N)Ú
assertTrue)r#   ÚbaseÚsameÚ	differentÚsr0   r&   r&   r'   ÚcheckC   s
   ÿzCheckEquality.check)r)   r*   r+   r   ÚVarÚunknown_locÚvar_aÚvar_bÚvar_cÚvar_dZvar_er   Úloc1Úloc2Úloc3r8   r&   r&   r&   r'   r,   8   s    r,   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )Ú
TestIRMetaz0
    Tests IR node meta, like Loc and Scope
    c                 C   s˜   t  ddd¡}t  ddd¡}t  ddd¡}t  ddd¡}t  ddd¡}| j||g|||gd t jddddd}t jdddd	d}| j|||gd
 d S )NÚfiler   r   Zpiler   ©r5   r6   F)Zmaybe_decoratorT©r5   )r   r   r8   ©r#   r-   r.   r/   r0   r1   ÚfÚgr&   r&   r'   Útest_locN   s   zTestIRMeta.test_locc           	      C   sª   t  d | j¡}t  d | j¡}t  d | j¡}| j|||gd t  || j¡}t  || j¡}t  || j¡}t  || j¡}| j||||gd t  || j¡}| j||gd d S ©NrF   )r   r   r?   r@   r8   )	r#   Zparent1Zparent2Zparent3r-   r.   r/   r0   r1   r&   r&   r'   Ú
test_scopeZ   s   zTestIRMeta.test_scopeN)r)   r*   r+   Ú__doc__rJ   rL   r&   r&   r&   r'   rC   J   s    rC   c                   @   sØ   e 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 d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4S )5ÚTestIRNodesz
    Tests IR nodes
    c                 C   ó$   t  ¡ }t  ¡ }| j||gd d S rK   )r   Z
Terminatorr8   )r#   Út1Út2r&   r&   r'   Útest_terminatorp   s   zTestIRNodes.test_terminatorc                 C   óR   t  d| j¡}t  d| j¡}t  d| j¡}t  d| j¡}| j|||g|gd d S ©Nr   r   rE   )r   ZJumpr?   r@   r8   ©r#   r-   r.   r/   r0   r&   r&   r'   Ú	test_jumpv   ó
   zTestIRNodes.test_jumpc                 C   óZ   t  | j| j¡}t  | j| j¡}t  | j| j¡}t  | j| j¡}| j|||g|gd d S ©NrE   )r   ÚReturnr;   r?   r@   r<   r8   rU   r&   r&   r'   Útest_return}   ó
   zTestIRNodes.test_returnc                 C   rX   rY   )r   ÚRaiser;   r?   r@   r<   r8   rU   r&   r&   r'   Ú
test_raise„   r\   zTestIRNodes.test_raisec                 C   sl   t  td | j¡}t  td | j¡}t  td | j¡}t  td| j¡}t  td | j¡}| j|||g||gd d S )N)ÚstrrE   )r   ZStaticRaiseÚAssertionErrorr?   r@   ÚRuntimeErrorr8   )r#   r-   r.   r/   r1   r0   r&   r&   r'   Útest_staticraise‹   ó   zTestIRNodes.test_staticraisec                 C   ó–   t  | jdd| j¡}t  | jdd| j¡}t  | jdd| j¡}t  | jdd| j¡}t  | jdd| j¡}t  | jdd| j¡}| j|||g|||gd d S )Nr   r   r   rE   )r   ÚBranchr;   r?   r@   r<   r8   ©r#   r-   r.   r/   r0   r1   rH   r&   r&   r'   Útest_branch“   ó   zTestIRNodes.test_branchc                 C   rS   )NZsome_opZsome_other_oprE   )r   ÚExprr?   r@   r8   rU   r&   r&   r'   Ú	test_exprœ   rW   zTestIRNodes.test_exprc                 C   ó®   t  | j| j| j| j¡}t  | j| j| j| j¡}t  | j| j| j| j¡}t  | j| j| j| j¡}t  | j| j| j| j¡}t  | j| j| j| j¡}| j|||g|||gd d S rY   )	r   ZSetItemr;   r<   r=   r?   r@   r>   r8   rf   r&   r&   r'   Útest_setitem£   ó   zTestIRNodes.test_setitemc                 C   sÖ   t  | jd| j| j| j¡}t  | jd| j| j| j¡}t  | jd| j| j| j¡}t  | jd| j| j| j¡}t  | jd| j| j| j¡}t  | jd| j| j| j¡}t  | jd| j| j| j¡}| j|||g||||gd d S rT   )	r   ZStaticSetItemr;   r<   r=   r?   r@   r>   r8   rG   r&   r&   r'   Útest_staticsetitem¬   s    zTestIRNodes.test_staticsetitemc                 C   ó€   t  | j| j| j¡}t  | j| j| j¡}t  | j| j| j¡}t  | j| j| j¡}t  | j| j| j¡}| j|||g||gd d S rY   )r   ZDelItemr;   r<   r?   r@   r=   r8   ©r#   r-   r.   r/   r0   r1   r&   r&   r'   Útest_delitem¶   ó   zTestIRNodes.test_delitemc                 C   sb   t  | jj| j¡}t  | jj| j¡}t  | jj| j¡}t  | jj| j¡}| j|||g|gd d S rY   )r   ÚDelr;   Únamer?   r@   r<   r8   rU   r&   r&   r'   Útest_del¾   s
   zTestIRNodes.test_delc                 C   s¢   t  | jd| j| j¡}t  | jd| j| j¡}t  | jd| j| j¡}t  | jd| j| j¡}t  | jd| j| j¡}t  | jd| j| j¡}| j|||g|||gd d S ©NÚfooÚbarrE   )r   ZSetAttrr;   r<   r?   r@   r=   r8   rf   r&   r&   r'   Útest_setattrÅ   s   zTestIRNodes.test_setattrc                 C   sv   t  | jd| j¡}t  | jd| j¡}t  | jd| j¡}t  | jd| j¡}t  | jd| j¡}| j|||g||gd d S rv   )r   ZDelAttrr;   r?   r@   r=   r8   rp   r&   r&   r'   Útest_delattrÎ   ó   zTestIRNodes.test_delattrc                 C   ro   rY   )r   ÚAssignr;   r<   r?   r@   r=   r8   rp   r&   r&   r'   Útest_assignÖ   rr   zTestIRNodes.test_assignc                 C   sŠ   t  | jf| j| j¡}t  | jf| j| j¡}t  | jf| j| j¡}t  | jf| j| j¡}t  | jf| j| j¡}| j|||g||gd d S rY   )r   ZPrintr;   r<   r?   r@   r=   r8   rp   r&   r&   r'   Ú
test_printÞ   s   zTestIRNodes.test_printc                 C   rk   rY   )	r   ZStoreMapr;   r<   r=   r?   r@   r>   r8   rf   r&   r&   r'   Útest_storemapæ   rm   zTestIRNodes.test_storemapc                 C   sv   t  | j| jd¡}t  | j| jd¡}t  | j| jd¡}t  | j| jd¡}t  | j| jd¡}| j|||g||gd d S )Nr   r   rE   )r   ÚYieldr;   r?   r@   r<   r8   rp   r&   r&   r'   Ú
test_yieldï   r{   zTestIRNodes.test_yieldc                 C   rd   )Nr   r   r   rE   )r   Z	EnterWithr;   r?   r@   r<   r8   rf   r&   r&   r'   Útest_enterwith÷   rh   zTestIRNodes.test_enterwithc                 C   ól   t  dd| j¡}t  dd| j¡}t  dd| j¡}t  dd| j¡}t  dd| j¡}| j|||g||gd d S ©Nrw   r   rx   r   rE   )r   ZArgr?   r@   r8   rp   r&   r&   r'   Útest_arg   rc   zTestIRNodes.test_argc                 C   rS   rT   )r   ZConstr?   r@   r8   rU   r&   r&   r'   Ú
test_const  rW   zTestIRNodes.test_constc                 C   rƒ   r„   )r   ÚGlobalr?   r@   r8   rp   r&   r&   r'   Útest_global  rc   zTestIRNodes.test_globalc                 C   sv   t  d d| j¡}t  d d| j¡}t  d d| j¡}t  t  d t j¡d| j¡}t  d d| j¡}| j||||g|gd d S rv   )r   r9   r?   r@   r   r:   r8   rp   r&   r&   r'   Útest_var  s   zTestIRNodes.test_varc                 C   rO   rK   )r   ZUndefinedTyper8   )r#   r-   r.   r&   r&   r'   Útest_undefinedtype  s   zTestIRNodes.test_undefinedtypec                 C   óJ   t  dd¡}t  dd¡}t  dd¡}t  dd¡}| j||g||gd d S ©Nr   r   r   r   rE   )r   ZLoopr8   rU   r&   r&   r'   Ú	test_loop$  ó
   zTestIRNodes.test_loopc                 C   r‹   rŒ   )r   ÚWithr8   rU   r&   r&   r'   Ú	test_with+  rŽ   zTestIRNodes.test_withN)r)   r*   r+   rM   rR   rV   r[   r^   rb   rg   rj   rl   rn   rq   ru   ry   rz   r}   r~   r   r   r‚   r…   r†   rˆ   r‰   rŠ   r   r   r&   r&   r&   r'   rN   l   s6    		
			rN   iÒ  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestIRCompoundsz+
    Tests IR concepts that have state
    c                 C   s„   t  ¡ }| | jd¡ | | jd¡ t  ¡ }| | jd¡ | | jd¡ t  ¡ }| | jd¡ | | jd¡ | j||g|gd d S rv   )r   ZVarMapr   r;   r<   r=   r8   )r#   r-   r.   r/   r&   r&   r'   Útest_varmap;  s   zTestIRCompounds.test_varmapc                    sL   ‡ fdd„}|ƒ }|ƒ }|ƒ   t ˆ jˆ jˆ j¡¡}ˆ j||g|gd d S )Nc                     sz   t  d ˆ j¡} t  | ˆ j¡}t  ˆ jˆ jˆ j¡}t  ˆ jˆ j	ˆ j¡}t  ˆ j	ˆ jˆ j¡}| 
|¡ | 
|¡ | 
|¡ |S r2   )r   r   r?   ZBlockr@   r|   r;   r<   rA   r=   Úappend)r   ÚtmpZassign1Zassign2Zassign3©r#   r&   r'   Ú	gen_blockK  s   


z-TestIRCompounds.test_block.<locals>.gen_blockrE   )r“   r   r|   r;   r<   rA   r8   )r#   r–   r-   r.   r/   r&   r•   r'   Ú
test_blockJ  s
   zTestIRCompounds.test_blockc                 C   s”  dd„ }dd„ }|ƒ }|ƒ }||ƒ}||ƒ}|   | |¡¡ g fdd„}|  d| |¡¡ tt|j ¡ ƒƒD ] }|j| }	t|	j	d t
jƒrV|	j	d }
|
j|
j|
_|
_ nq6|| |¡d	gƒ |ƒ }|  | |¡¡ ||ƒ}tƒ }tt|j ¡ ƒƒD ]_}|j| }	|	j	d d… }
d }tt|
ƒd
 ƒD ]}t|
| t
jƒr«t|
|d
  t
jƒr«|} nq“|d urÚ|	j	}| t||d
  ƒ¡ | t|| ƒ¡ ||d
  || ||< ||d
 <  nq{|   |¡ |  | |¡¡ |  t|ƒd¡ |D ]
}|   | d¡¡ qò|| |¡|ƒ dd„ }dd„ }dd„ }||ƒ}||ƒ}|   | |¡¡ |  d| |¡¡ ||ƒ}|  | |¡¡ | |¡}|  d|¡ ||ddgƒ d S )Nc                 S   s   t j| ddS )NT)Z	emit_dels)r   Úrun_frontend)Úxr&   r&   r'   r˜   ^  ó   z5TestIRCompounds.test_functionir.<locals>.run_frontendc                     s   d‰ d‡ fdd„	} | S )NiþÊ  é   ù              ð?c              	      s‚  | | }| ˆ 7 } t j|t jd}|| }d| }t  |¡dkr³|| }	t  d|d ¡}
tƒ  t||	ƒ W d   ƒ n1 s>w   Y  t  |
| ¡}t  |d ¡dk rod}t| ƒD ]}|d7 }t  |¡dk rh nqY||d 7 }||
 }g }tt	|ƒƒD ]7}| 
|| ¡ |dkrªtdd	d
 d}d}W d   ƒ n1 sw   Y  |dkrª||7 }||d t 7 }q{|| | | | |  | S )N)Zdtyperœ   r   r   r   r   r   ZintpZ
complex128)r7   Úté{   éz   )ÚnpZzerosZ	complex64ÚabsZaranger   ÚprintÚsqrtÚranger"   r“   Ú_GLOBAL)r-   r.   r/   r0   r1   rH   rI   ÚhÚiÚkÚlÚmÚnÚoÚpÚqÚrr7   r   ©Z_FREEVARr&   r'   rw   i  sB   ÿÿþz9TestIRCompounds.test_functionir.<locals>.gen.<locals>.foo)r›   rœ   Nr&   )rw   r&   r°   r'   Úgenf  s   !z,TestIRCompounds.test_functionir.<locals>.genc                 S   sB   |   ¡ }|D ]}|D ]}| d¡r||v r nq
td| ƒ‚qd S )Nz->zCould not find %s )Ú
splitlinesÚ
startswithr`   )ÚstringZpointing_atÚlinesÚitemr©   r&   r&   r'   Úcheck_diffstr“  s   
€þüz6TestIRCompounds.test_functionir.<locals>.check_diffstrzIR is considered equivalentéÿÿÿÿÚbranchr   r   zdel c                 S   ó   | d }|| }t  |¡}|S ©Nr   ©r    r£   ©r-   r.   r/   r0   r1   r&   r&   r'   rw   É  ó   
z,TestIRCompounds.test_functionir.<locals>.fooc                 S   rº   r»   r¼   r½   r&   r&   r'   rx   Ï  r¾   z,TestIRCompounds.test_functionir.<locals>.barc                 S   s"   | d }|| }t  |d ¡}|S )Nr   r   r¼   r½   r&   r&   r'   ÚbazÕ  s   z,TestIRCompounds.test_functionir.<locals>.bazz$Other block contains more statementszc + bzb + c)r3   Zequal_irZassertInZdiff_strÚreversedÚlistÚblocksÚkeysÚ
isinstanceÚbodyr   re   ZfalsebrZtruebrZassertFalseÚsetr¤   r"   rs   Úaddr_   r!   r³   )r#   r˜   r±   r™   ÚyZx_irZy_irr·   ÚlabelÚblkÚrefÚzZz_irZ
change_setÚidxr§   r.   r¶   rw   rx   r¿   Zfoo_irZbar_irZbaz_irr”   r&   r&   r'   Útest_functionir\  sr   &


ý
ÿ€"û

zTestIRCompounds.test_functionirN)r)   r*   r+   rM   r’   r—   rÎ   r&   r&   r&   r'   r‘   7  s
    r‘   c                   @   r   )ÚTestIRPedanticChecksc              	      sâ   t dddG dd„ dtƒƒ‰t dddG dd„ dtƒƒ‰ G ‡ ‡fdd„dtƒ}t|d	d
d„ ƒ}t ¡ 3 t dtj¡ |  	tj
¡}|dƒ W d   ƒ n1 sQw   Y  |  t|jƒd¡ W d   ƒ d S 1 sjw   Y  d S )NF)Zmutates_CFGZanalysis_onlyc                   @   rB   )zKTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScopeÚ_remove_var_in_scopec                 S   ó   t  | ¡ d S r2   ©r	   Ú__init__r•   r&   r&   r'   rÓ   î  rš   zTTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScope.__init__c                 S   s4   |j }|j ¡ D ]}|j}tj|j|jd|_qdS )Nr   T)Úfunc_irrÂ   ÚvaluesÚscoper   r   r   r   )r#   ÚstaterÔ   rÊ   Zoldscoper&   r&   r'   Úrun_passó  s   
ÿzTTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScope.run_passN©r)   r*   r+   Ú_namerÓ   rØ   r&   r&   r&   r'   ÚRemoveVarInScopeê  s    rÛ   c                   @   rB   )zCTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPassÚ_failc                 _   rÑ   r2   rÒ   )r#   ÚargsÚkwargsr&   r&   r'   rÓ     rš   zLTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPass.__init__c                 S   s   t dƒ‚)NZunreachable)r`   )r#   r×   r&   r&   r'   rØ     s   zLTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPass.run_passNrÙ   r&   r&   r&   r'   ÚFailPassþ  s    rß   c                       s   e Zd Z‡ ‡fdd„ZdS )zETestIRPedanticChecks.test_var_in_scope_assumption.<locals>.MyCompilerc                    sR   t dƒ}| td¡ | td¡ | ˆd¡ | td¡ | ˆ d¡ | ¡  |gS )Nz
testing pmzanalyzing bytecodezprocessing IRrÐ   ZssarÜ   )r
   Zadd_passr   r   r   Úfinalize)r#   Úpm©rß   rÛ   r&   r'   Údefine_pipelines  s   zVTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.MyCompiler.define_pipelinesN)r)   r*   r+   rã   r&   râ   r&   r'   Ú
MyCompiler  s    rä   )Zpipeline_classc                 S   s(   d}d}||k rd}||fS d}||fS )Nr   r   r   r&   )r™   r-   r.   r&   r&   r'   Údummy  s   ÿz@TestIRPedanticChecks.test_var_in_scope_assumption.<locals>.dummyÚerrorr   z variable '[a-z]' is not in scope)r   r	   r   r   ÚwarningsÚcatch_warningsÚsimplefilterr   ZNumbaPedanticWarningÚassertRaisesZNumbaIRAssumptionWarningÚassertRegexr_   Ú	exception)r#   rä   rå   Zraisesr&   râ   r'   Útest_var_in_scope_assumptionè  s"   




ÿþ"ùz1TestIRPedanticChecks.test_var_in_scope_assumptionN)r)   r*   r+   rí   r&   r&   r&   r'   rÏ   ç  s    rÏ   Ú__main__) ZunittestZunittest.caser   rç   Únumpyr    Znumbar   Z
numba.corer   r   r   Znumba.core.compilerr   r   Znumba.core.compiler_machineryr	   r
   r   Znumba.core.untyped_passesr   r   r   r   r,   rC   rN   r¥   r‘   rÏ   r)   Úmainr&   r&   r&   r'   Ú<module>   s.    " I 1Hÿ