o
    iC                     @   s  d Z ddlZ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 ddlmZmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZ dZerkedZ e j!ej"d e #e$ej% G dd deZ&G dd de&Z'G dd de&Z(G dd deeZ)dS )z
Tests for SSA reconstruction
    N)njitjittypes)errorsir)FunctionPassregister_pass)DefaultPassBuilderCompilerBase)ReconstructSSA
PreserveIR)NativeLowering)overload)MemoryLeakMixinTestCaseoverride_configFznumba.core.ssa)levelc                   @      e Zd Zdd ZdS )SSABaseTestc                 G   s.   |t | }|jt | }| || d S N)copydeepcopypy_funcassertEqual)selffuncargsgotexp r   c/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_ssa.py
check_func   s   zSSABaseTest.check_funcN)__name__
__module____qualname__r!   r   r   r   r    r      s    r   c                   @   sX   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S )TestSSAz8
    Contains tests to help isolate problems in SSA
    c                 C   s   t dd }| |d d S )Nc                 S   s   | d7 } | S N   r   xr   r   r    foo+      z.TestSSA.test_argument_name_reused.<locals>.foo{   r   r!   r   r*   r   r   r    test_argument_name_reused*   s   
z!TestSSA.test_argument_name_reusedc                 C   s,   t dd }| |dd | |dd d S )Nc                 S   s    | | }| |k r| }|S |}|S r   r   )r)   yzr   r   r    r*   3   s   z*TestSSA.test_if_else_redefine.<locals>.foo      r-   r.   r   r   r    test_if_else_redefine2   s   
zTestSSA.test_if_else_redefinec                 C   (   t dd }| |d | |d d S )Nc                 S   s   d}t | D ]}||7 }q|S Nr   range)ncir   r   r    r*   @   s   
z"TestSSA.test_sum_loop.<locals>.foor   
   r-   r.   r   r   r    test_sum_loop?   s   
zTestSSA.test_sum_loopc                 C   r5   )Nc                 S   s.   d}| }t | D ]
}||7 }|| 7 }q||fS r6   r7   )r9   r:   dr;   r   r   r    r*   K   s   
z(TestSSA.test_sum_loop_2vars.<locals>.foor   r<   r-   r.   r   r   r    test_sum_loop_2varsJ      
zTestSSA.test_sum_loop_2varsc                 C   r5   )Nc                 S   s4   d}t | D ]}t | D ]}||7 }q||7 }q|S r6   r7   )r9   r:   r;   jr   r   r    r*   X   s   

z%TestSSA.test_sum_2d_loop.<locals>.foor   r<   r-   r.   r   r   r    test_sum_2d_loopW   r@   zTestSSA.test_sum_2d_loopc                 C   s   t dd }|r.| tj}| |d W d    n1 sw   Y  | dt|j n| |d | t	 |
d W d    d S 1 sJw   Y  d S )Nc                 S   s    | r
| dkrd}|S |d7 }|S Nr   r'   r   )r9   r:   r   r   r    r*   e   s   z(TestSSA.check_undefined_var.<locals>.foor'   z!Detected uninitialized variable cr   )r   ZassertWarnsr   ZNumbaWarningr!   ZassertInstrwarningassertRaisesUnboundLocalErrorr   )r   should_warnr*   Zwarnsr   r   r    check_undefined_vard   s   

"zTestSSA.check_undefined_varc                 C   sr   t dd | jdd W d    n1 sw   Y  t dd | jdd W d    d S 1 s2w   Y  d S )NZALWAYS_WARN_UNINIT_VARr   F)rH   r'   T)r   rI   r   r   r   r    test_undefined_var|   s   "zTestSSA.test_undefined_varc                 C   s&   t dd }| |tddg d S )Nc                 S   s   d}d}d}|dkrS|t | k rS|d8 }| | rE| | r-| | r$|d7 }| |  d8  < n| | r5|d7 }| |  d7  < ||7 }| | s||7 }|dkrS|t | k s||fS )Nr'   r   r<      )len)actionsr9   r;   ctr   r   r    r*      s$   z)TestSSA.test_phi_propagation.<locals>.foor'   r3   )r   r!   nparrayr.   r   r   r    test_phi_propagation   s   
zTestSSA.test_phi_propagationc                 C   s<   dd }|ddddd}t |ddddd}| || d S )Nc                 S   sh   | r|}|}|}| }d S |r|r|}	d S |}
d S |r0|r&|r"|
}d S |}|S |r,|}| S |}
|S |}d S r   r   )Zarg1Zarg2Zarg3Zarg4Zarg5Zvar1Zvar2Zvar3Zvar4Zvar5Zvar6Zvar7Zvar8Zvar9Zvar10r   r   r    	function1   s4   z3TestSSA.test_unhandled_undefined.<locals>.function1r3   r2      r      )r   r   )r   rS   expectr   r   r   r    test_unhandled_undefined   s   .z TestSSA.test_unhandled_undefinedN)r"   r#   r$   __doc__r/   r4   r=   r?   rB   rI   rK   rR   rW   r   r   r   r    r%   %   s    r%   c                   @   st   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S )TestReportedSSAIssuesc                 C   s   t dd }| | d S )Nc                  S   s>   t d} t d}t|D ]}d| |< qt|dD ]}qd S r&   )rP   emptyZuint32r8   )Vsr;   r   r   r    r*      s   


z1TestReportedSSAIssues.test_issue2194.<locals>.foor-   r.   r   r   r    test_issue2194   s   
	z$TestReportedSSAIssues.test_issue2194c                    s,   t dd  t  fdd}| |d d S )Nc                 S   s   | S r   r   r(   r   r   r    doit      z2TestReportedSSAIssues.test_issue3094.<locals>.doitc                    s   | rd} |S d} |S )NTFr   )predr)   r^   r   r    r*      s
   z1TestReportedSSAIssues.test_issue3094.<locals>.fooFr-   r.   r   ra   r    test_issue3094   s
   
z$TestReportedSSAIssues.test_issue3094c                 C   s4   t dd }tj|td|td d S )Nc                 S   s(   t dD ]}| d} | dd} q| S )Nr'   rT   r2   r3   )r8   Zreshape)arrr;   r   r   r    r*      s   
z1TestReportedSSAIssues.test_issue3931.<locals>.foo)r2   r3   )r   rP   testingassert_allclosezerosr   r.   r   r   r    test_issue3931   s
   
z$TestReportedSSAIssues.test_issue3931c                    s<   dd  t  fdd}t  fdd}| |d d S )Nc                 S   s   dS )Ndummyr   ar   r   r    overload_this  s   z;TestReportedSSAIssues.test_issue3976.<locals>.overload_thisc                    s   | r
d} |}|S d}|S )N   br   )rj   r\   rk   r   r    r*     s   z1TestReportedSSAIssues.test_issue3976.<locals>.fooc                    s    S r   r   ri   rn   r   r    ol  r_   z0TestReportedSSAIssues.test_issue3976.<locals>.olT)r   r   r!   )r   r*   ro   r   rn   r    test_issue3976   s   	z$TestReportedSSAIssues.test_issue3976c                 C   s   t dd }| |dd d S )Nc                 S   s4   | d }|d }| D ]}|}q
|D ]}|}q||fS r6   r   )ABr)   r0   r;   r   r   r    r*     s   z1TestReportedSSAIssues.test_issue3979.<locals>.foo)r'   r3   rq   rr   r-   r.   r   r   r    test_issue3979  s   
	z$TestReportedSSAIssues.test_issue3979c                    s>   d	dd t  d	dd}t fdd}| |dd d S )
Nc                 S   s   t |tr	|d }|S r6   )
isinstancetuplerj   rm   r   r   r    rk   $  s   
z;TestReportedSSAIssues.test_issue5219.<locals>.overload_thisc                    s$   t |tjtjf d fdd	}|S )Nc                    s    du r|d }|S )NTr   r   rw   Z
b_is_tupler   r    impl-  s   z>TestReportedSSAIssues.test_issue5219.<locals>.ol.<locals>.implr   )ru   r   TupleZUniTuple)rj   rm   ry   r   rx   r    ro   )  s   z0TestReportedSSAIssues.test_issue5219.<locals>.olc                    s    | | d S r   r   rw   rn   r   r    
test_tuple3  s   z8TestReportedSSAIssues.test_issue5219.<locals>.test_tupler'   )r3   r   )r   r   r!   )r   ro   r{   r   rn   r    test_issue5219"  s   
	z$TestReportedSSAIssues.test_issue5219c                 C   s:   t dd }td}d|j_tj|||| d S )Nc                 S   s>   t | dkr| S |  } tt | D ]
}| |  d7  < q| S )Nrl   r'   )rM   r   r8   )r)   r;   r   r   r    bar;  s   z1TestReportedSSAIssues.test_issue5223.<locals>.barrl   F)r   rP   onesflagsZ	writeablerd   re   r   )r   r}   rj   r   r   r    test_issue52239  s
   

z$TestReportedSSAIssues.test_issue5223c                 C   s"   t dd }| |td d S )Nc                 S   s(   t d}t d}| d |d< |d S )N)g?g333333?g333333?)r2   r2   )r   r   r   )rP   rQ   rf   )qZlinZstencilr   r   r    r*   K  s   

z1TestReportedSSAIssues.test_issue5243.<locals>.foo)r3   r3   )r   r!   rP   rf   r.   r   r   r    test_issue5243I  s   
z$TestReportedSSAIssues.test_issue5243c                 C   s   t ddd }d S )N(intp, intp, intp)c                 S   s<   t |D ]}|dkr|| krq|}q|| krq|| }q|S r6   r7   r)   vr9   r;   problematicr   r   r    r*   W  s   
zGTestReportedSSAIssues.test_issue5482_missing_variable_init.<locals>.foo)r   r.   r   r   r    $test_issue5482_missing_variable_initT  s   z:TestReportedSSAIssues.test_issue5482_missing_variable_initc                    s`   ddl m}m  ddlmm ddlm G  fddd|}tdd|d	d
d }d S )Nr   r
   r	   )r   IRProcessing)PreLowerStripPhisc                       s   e Zd Z fddZdS )zWTestReportedSSAIssues.test_issue5482_objmode_expr_null_lowering.<locals>.CustomPipelinec                    s2     | j}| | |  |gS r   )Zdefine_objectmode_pipelinestateadd_pass_afterfinalizer   pmr	   r   r   r   r   r    define_pipelineso  s
   zhTestReportedSSAIssues.test_issue5482_objmode_expr_null_lowering.<locals>.CustomPipeline.define_pipelinesNr"   r#   r$   r   r   r   r   r    CustomPipelinen  s    r   r   F)loopliftpipeline_classc                 S   s<   t |D ]}||kr|| krq|}q|| krq|| }q|S r   r7   r   r   r   r    r*   w  s   
zLTestReportedSSAIssues.test_issue5482_objmode_expr_null_lowering.<locals>.foo)	numba.core.compilerr
   r	   numba.core.untyped_passesr   r   numba.core.typed_passesr   r   )r   r
   r   r*   r   r   r    )test_issue5482_objmode_expr_null_loweringf  s   	z?TestReportedSSAIssues.test_issue5482_objmode_expr_null_loweringc                    s   t dt df}t d t d fdd}|dd|}t|dd|}tddd	|dd|}t j|| t j|| d S )
Nr3   r'   )r'   r'   c                    s   t |dkr|d }n|d }tdt |D ]}| 7 }qtd| D ]$}t|D ]}}|dkr:||d kr7q(|}q(||d krAq(|| }q(q"|S )Nr'   r   )rM   r8   )mr9   dataZv0_tidxr   rs   r   r    r*     s"   


z>TestReportedSSAIssues.test_issue5493_unneeded_phi.<locals>.foor<   TF)Zforceobjr   )rP   r~   r   r   rd   assert_array_equal)r   r   r*   rV   Zres1Zres2r   rs   r    test_issue5493_unneeded_phi  s   

z1TestReportedSSAIssues.test_issue5493_unneeded_phic                 C   sj   dd }t ddg}|d| t ddg}t|d| t ddg}t j|| t j|| d S )Nc                 S   s8   d}d}| du r|||< |d7 }|||< |d7 }d S d S )Nr   r'   Tr   )r`   stackr;   r:   r   r   r    r*     s   zMTestReportedSSAIssues.test_issue5623_equal_statements_in_same_bb.<locals>.foor   i  Tr'   )rP   rQ   r   rd   r   )r   r*   pythonnbrV   r   r   r    *test_issue5623_equal_statements_in_same_bb  s   

z@TestReportedSSAIssues.test_issue5623_equal_statements_in_same_bbc                    s   ddl m}m ddlmm}m} g |dddG fddd| G  fd	d
d
|}t|dddd}|d|	d 
dg d S )Nr   r   )r   r   r   FT)mutates_CFGanalysis_onlyc                       s4   e Zd Zjjd Z fddZfddZ  ZS )zMTestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.CheckSSAMinimalz.CheckSSAMinimalc                    s   t  |  d S r   )super__init__rJ   	__class__r   r    r     s   zVTestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.CheckSSAMinimal.__init__c                    s:   d}|j j D ]}|tt|d7 }q | dS )Nr   phiT)func_irblocksvaluesrM   listZ
find_exprsappend)r   r   rO   blk)phi_counterr   r    run_pass  s
   
zVTestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.CheckSSAMinimal.run_pass)r"   r#   r$   r   _namer   r   __classcell__r   )r   r   r   r    CheckSSAMinimal  s    r   c                       s   e Zd Z fddZdS )zLTestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.CustomPipelinec                    s&    | j}|  |  |gS r   )define_nopython_pipeliner   r   r   r   r   r	   r   r   r    r     s   z]TestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.CustomPipeline.define_pipelinesNr   r   r   r   r    r     s    r   r   r'   c                 S   sb   t | | f}d}||kr/tt|D ]}tt|D ]
}|| |||f< qq|d7 }||ks|S rC   )rP   rZ   r8   rM   )r9   Zmax_iterrj   r;   rA   kr   r   r    	while_for  s   zGTestReportedSSAIssues.test_issue5678_non_minimal_phi.<locals>.while_forr<   )r'   )r   r
   r	   r   r   r   r   r   assertPreciseEqualr   r   )r   r
   r   r   r   r   r   )r   r	   r   r   r   r    test_issue5678_non_minimal_phi  s   
z4TestReportedSSAIssues.test_issue5678_non_minimal_phiN)r"   r#   r$   r]   rb   rg   rp   rt   r|   r   r   r   r   r   r   r   r   r   r   r    rY      s    !&rY   c                   @   r   )TestSROAIssuesc                    s  g t dddG fdddt G  fdddt}t|dd	d
 }td}| |||d  | td | d j	j
d |j|jd  jd }| t|jdd |j \}|tj}dd |D }| t|dd | |d |d d d S )NFT)r   r   c                       s$   e Zd ZdZdd Z fddZdS )zZTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.CloneFoobarAssignmentsZclone_foobar_assignments_passc                 S   s   t |  d S r   )r   r   rJ   r   r   r    r     s   zcTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.CloneFoobarAssignments.__init__c                    st   d}|j j D ]/}g }|tjD ]}|jjdkr|| q|D ]}t	
|}||| d} | q"q|S )NFfoobarT)r   r   r   
find_instsr   Assigntargetnamer   r   r   Zinsert_after)r   r   Zmutatedr   Zto_cloneZassigncloneclonedr   r    r   	  s   

zcTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.CloneFoobarAssignments.run_passN)r"   r#   r$   r   r   r   r   r   r   r    CloneFoobarAssignments  s    r   c                       s   e Zd Z fddZdS )zRTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.CustomCompilerc                    s:   t | jd}d|_| t |tt |  |gS )NZcustom_pipelineF)	r	   r   r   Z
_finalizedr   r   r   r   r   r   r   r   r    r     s   zcTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.CustomCompiler.define_pipelinesNr   r   r   r   r    CustomCompiler  s    r   r   c                 S   s   | d }|S r&   r   )rc   r   r   r   r    udt'  r+   zGTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.udtr<   r'   r   r   Zpreserved_irzonly one blockc                 S   s   g | ]
}|j jd kr|qS )r   )r   r   ).0stmtr   r   r    
<listcomp>8  s    zNTestSROAIssues.test_issue7258_multiple_assignment_post_SSA.<locals>.<listcomp>r3   z0expected two assignment statements into 'foobar'z5expected the two assignment statements to be the same)r   r   r
   r   rP   Zaranger   r   rM   r   r   Z	overloadsZ
signaturesmetadatar   r   r   r   r   )r   r   r   rc   Znirr   ZassignsZfoobar_assignsr   )r   r   r    +test_issue7258_multiple_assignment_post_SSA  s2   


z:TestSROAIssues.test_issue7258_multiple_assignment_post_SSAN)r"   r#   r$   r   r   r   r   r    r     s    r   )*rX   sysr   loggingnumpyrP   Znumbar   r   r   Z
numba.corer   r   Znumba.core.compiler_machineryr   r   r   r	   r
   r   r   r   r   r   Znumba.extendingr   Znumba.tests.supportr   r   r   _DEBUG	getLoggerZ
ssa_loggersetLevelDEBUG
addHandlerStreamHandlerstderrr   r%   rY   r   r   r   r   r    <module>   s2    
 ,  (