U
    Ã9%eÏ¥  ã                   @   sÚ  d dl Z d dlZd dlZd dlmZ d dl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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  d d	l!m"Z" d d
l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m Z m5Z5 d dl6m7Z7 d dl8Z8eZ9e7dej:fdej:fgƒG dd„ de;ƒƒZ<dZ=dZ>G dd„ deƒZ?e5dddG dd„ de4ƒƒZ@G dd„ deƒZAG dd„ deƒZBG dd „ d eƒZCG d!d"„ d"eƒZDeEd#krÖe8 F¡  dS )$é    N)Ú
namedtuple)ÚStringIO)ÚnjitÚtypeofÚprange)ÚtypesÚtypingÚirÚbytecodeÚpostprocÚcpuÚregistryÚutils)ÚTestCaseÚtagÚskip_parfors_unsupportedÚskip_unless_scipy)ÚEquivSetÚArrayAnalysis)ÚCompilerÚFlagsÚPassManager)Úremove_dead)
ÚExtractByteCodeÚTranslateByteCodeÚ	FixupArgsÚIRProcessingÚDeadBranchPruneÚRewriteSemanticConstantsÚGenericRewritesÚWithLiftingÚ
PreserveIRÚInlineClosureLikes)ÚNopythonTypeInferenceÚAnnotateTypesÚNopythonRewritesÚIRLegalization)ÚFunctionPassr   Úregister_pass)ÚjitclassÚLÚTc                   @   s   e Zd Zdd„ ZdS )ÚExampleClass3700c                 C   s   || _ |d | _d S ©Né   )r*   r+   )ÚselfÚn© r1   ú^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_array_analysis.pyÚ__init__+   s    zExampleClass3700.__init__N)Ú__name__Ú
__module__Ú__qualname__r3   r1   r1   r1   r2   r,   )   s   r,   )g333333ó?©é   é   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestEquivSetz'
    Test array_analysis.EquivSet.
    c                 C   sž   t ƒ }| dd¡ |  | dd¡¡ |  | dd¡¡ | dd¡ |  | dd¡¡ |  | dd¡¡ | dd¡ |  | dddd¡¡ |  | dd¡¡ d S ©NÚaÚbÚcÚdÚe)r   Úinsert_equivÚ
assertTrueÚis_equivÚassertFalse)r/   Ús1r1   r1   r2   Útest_insert_equiv:   s    zTestEquivSet.test_insert_equivc                 C   sì   t ƒ }t ƒ }| |¡}|  | ¡ ¡ | dd¡ | |¡}|  | ¡ ¡ | dd¡ | |¡}|  | ¡ ¡ | dd¡ | |¡}|  | ¡ ¡ | dd¡ | dd¡ | |¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ d S r;   )r   Z	intersectrB   Zis_emptyrA   rC   rD   )r/   rE   Ús2Úrr1   r1   r2   Útest_intersectF   s&    




zTestEquivSet.test_intersectN)r4   r5   r6   Ú__doc__rF   rI   r1   r1   r1   r2   r:   5   s   r:   FT)Zanalysis_onlyZmutates_CFGc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚArrayAnalysisPassZarray_analysis_passc                 C   s   t  | ¡ d S ©N)r'   r3   )r/   r1   r1   r2   r3   `   s    zArrayAnalysisPass.__init__c                 C   sr   t |j|j|j|jƒ|_|j |jj¡ t 	|j¡}| ¡  |j
 |j ¡ ¡ |jrnt|j
ƒdkrn| |j
¡ dS )Nr.   F)r   Z	typingctxÚfunc_irÚtypemapZ	calltypesÚarray_analysisÚrunÚblocksr   ZPostProcessorÚfunc_ir_copiesÚappendÚcopyÚtest_idempotenceÚlen)r/   ÚstateZ	post_procr1   r1   r2   Úrun_passc   s    
 ÿzArrayAnalysisPass.run_passN)r4   r5   r6   Ú_namer3   rX   r1   r1   r1   r2   rK   \   s   rK   c                   @   s0   e Zd Zeddi dddfdd„ƒZddd„ZdS )ÚArrayAnalysisTesterNc                 C   sD   |s
t ƒ }d|_|d kr tjj}|d kr0tjj}| |||||||ƒS ©NT)r   Znrtr   Z
cpu_targetÚtyping_contextÚtarget_context)ÚclsÚargsÚreturn_typeÚflagsÚlocalsZlibraryr\   r]   r1   r1   r2   Úmk_pipelineq   s     ÿzArrayAnalysisTester.mk_pipelinec                 C   s  t j |¡| j_tƒ  | j¡ d| j_d| j_| j}g |_	||_
d}t|ƒ}| td¡ | td¡ | td¡ |jjsœ| td¡ | td¡ | td	¡ | td
¡ | td¡ |jjsÈ| td¡ | td¡ |rä| td¡ | td¡ | td¡ | ¡  | |¡ |jS )z4
        Populate and run compiler pipeline
        r1   NZarray_analysis_testingzanalyzing bytecodezfix up argszprocessing IRznopython rewriteszrewrite semantic constantszdead branch pruningz(inline calls to locally defined closuresznopython frontendzarray analysiszidempotence array analysisz$ensure IR is legal prior to loweringzannotate types)r
   ZFunctionIdentityÚfrom_functionrW   Zfunc_idr   rX   ZliftedZlifted_fromrR   rU   r   Zadd_passr   r   r   ra   Zno_rewritesr   r   r   r"   r#   r%   rK   r&   r$   ÚfinalizerP   rO   )r/   ÚfuncrU   rW   ÚnameÚpmr1   r1   r2   Úcompile_to_ir~   s<    ÿ
z!ArrayAnalysisTester.compile_to_ir)N)r4   r5   r6   Úclassmethodrc   ri   r1   r1   r1   r2   rZ   o   s     ÿrZ   c                   @   s   e Zd Zdd„ Zg g df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edd„ ƒZd S )!ÚTestArrayAnalysisc                 C   sX   g }|D ]4}t |j|j|ƒ tƒ }|j|d | | ¡ ¡ q|  tt	|ƒƒdk¡ d S )N)Úfiler.   )
r   rQ   Ú	arg_namesr   ÚdumprS   ÚgetvaluerB   rV   Úset)r/   Zir_listÚoutputsrM   Úoutputr1   r1   r2   Ú
compare_ir®   s    zTestArrayAnalysis.compare_irTc           
      C   s|   t  |¡}|r| jndd„ }| ||¡}|rD|D ]}	|	|jd ƒ q0|dkr`|  |  |j¡¡ n|D ]}	|	|j|jƒ qddS )z<
        Compile the given function and get its IR.
        c                 S   s   dS )Nr1   r1   )Úxr1   r1   r2   Ú<lambda>¼   ó    z5TestArrayAnalysis._compile_and_test.<locals>.<lambda>r   N)	rZ   rc   rs   ri   Ú
equiv_setsrB   Ú_has_no_assertcallrM   rN   )
r/   ÚfnZarg_tysÚassertsÚequivsÚ
idempotentZtest_pipelinerU   Zanalysisrf   r1   r1   r2   Ú_compile_and_test·   s    
z#TestArrayAnalysis._compile_and_testc           
      C   s‚   d  d |¡¡}|j ¡ D ]b\}}|jddD ]L}| |jj¡}t|t	j
ƒr.|jdkr.||jd j }	|	j |¡r.  dS q.qdS )	NzSizes of {} do not matchz, Úcall©ÚopÚassert_equivr   TF)ÚformatÚjoinrQ   ÚitemsÚ
find_exprsÚget_definitionrf   rg   Ú
isinstancer	   ÚGlobalr_   Zliteral_valueÚ
startswith)
r/   rM   rN   r_   ÚmsgÚlabelÚblockÚexprry   Útypr1   r1   r2   Ú_has_assertcallÈ   s    z!TestArrayAnalysis._has_assertcallc                 C   sŽ   |j  ¡ D ]~\}}|jddD ]h}|jdkr|j|jdd}|j|dd}t|tjƒr\|j	n|}t|tjƒrr|j	n|}||kr  dS qq
dS )NÚgetattrr   ÚshapeT)Zlhs_onlyF)
rQ   r„   r…   Úattrr†   Úvaluer‡   r	   ZVarrg   )r/   rM   rt   r‹   rŒ   r   ÚyÚzr1   r1   r2   Ú_has_shapecallÓ   s    
z TestArrayAnalysis._has_shapecallc                 C   sV   |j  ¡ D ]F\}}|jddD ]0}| |jj¡}t|tjƒr|jdkr  dS qq
dS )Nr~   r   r   FT)	rQ   r„   r…   r†   rf   rg   r‡   r	   rˆ   )r/   rM   r‹   rŒ   r   ry   r1   r1   r2   rx   ß   s    z$TestArrayAnalysis._has_no_assertcallc                    s   ‡ ‡fdd„S )Nc                    s   ˆ  ˆ | |ˆ ¡¡S rL   )rB   r   ©rM   rN   ©r_   r/   r1   r2   ru   è   s   ÿz/TestArrayAnalysis.with_assert.<locals>.<lambda>r1   ©r/   r_   r1   r˜   r2   Úwith_assertç   s    zTestArrayAnalysis.with_assertc                    s   ‡ ‡fdd„S )Nc                    s   ˆ  ˆ | |ˆ ¡¡S rL   )rD   r   r—   r˜   r1   r2   ru   ì   s   ÿz2TestArrayAnalysis.without_assert.<locals>.<lambda>r1   r™   r1   r˜   r2   Úwithout_assertë   s    z TestArrayAnalysis.without_assertc                    s   ‡ fdd„‰‡‡fdd„S )Nc                    s<   t ˆ ƒ}t|d ƒD ]"}|  ˆ | ˆ |d  ¡s dS qdS ©Nr.   FT©rV   ÚrangerC   ©Ú	equiv_setr0   Úi©r_   r1   r2   Úcheckð   s
    z+TestArrayAnalysis.with_equiv.<locals>.checkc                    s   ˆ  ˆ | ƒ¡S rL   ©rB   ©r    ©r£   r/   r1   r2   ru   ö   rv   z.TestArrayAnalysis.with_equiv.<locals>.<lambda>r1   r™   r1   ©r_   r£   r/   r2   Ú
with_equivï   s    zTestArrayAnalysis.with_equivc                    s   ‡ fdd„‰‡‡fdd„S )Nc                    s<   t ˆ ƒ}t|d ƒD ]"}|  ˆ | ˆ |d  ¡r dS qdS rœ   r   rŸ   r¢   r1   r2   r£   ù   s
    z.TestArrayAnalysis.without_equiv.<locals>.checkc                    s   ˆ  ˆ | ƒ¡S rL   r¤   r¥   r¦   r1   r2   ru   ÿ   rv   z1TestArrayAnalysis.without_equiv.<locals>.<lambda>r1   r™   r1   r§   r2   Úwithout_equivø   s    zTestArrayAnalysis.without_equivc                    s   ‡ ‡fdd„S )Nc                    s   ˆ   ˆ  | ˆ¡¡S rL   )rB   r–   ©rM   Ús©r/   rt   r1   r2   ru     rv   z2TestArrayAnalysis.with_shapecall.<locals>.<lambda>r1   r¬   r1   r¬   r2   Úwith_shapecall  s    z TestArrayAnalysis.with_shapecallc                    s   ‡ ‡fdd„S )Nc                    s   ˆ   ˆ  | ˆ¡¡S rL   )rD   r–   rª   r¬   r1   r2   ru     rv   z5TestArrayAnalysis.without_shapecall.<locals>.<lambda>r1   r¬   r1   r¬   r2   Úwithout_shapecall  s    z#TestArrayAnalysis.without_shapecallc              	      sê  dd„ }| j |d|  dd¡|  dd¡|  dd	¡gd
 dd„ }| j |tjfd d dd„ }| j |tjtjf|  dd¡gd dd„ }| j |tjfd d dd„ }| j |tjfd d dd„ }| j |tjfd d dd„ }| j |tjtjf|  dd¡|  dd¡gd dd„ }| j |tjtjf|  dd¡|  dd¡gd dd„ }	| j |	tjtjf|  dd¡|  dd¡gd dd„ }
| j |
tjf|  d d!¡gd d"d#„ }| j |tjtjf|  d d!¡|  d$d%¡gd d&d'„ }| j |d|  dd(¡gd
 d)d*„ }| j |d|  dd(d+¡gd
 d,d-„ }t tjd.d$¡}| j |t ||f¡fd d d/d0„ }| j |tjf|  d d!¡gd
 td1ddgƒ‰ ‡ fd2d3„}| j |tjf|  d4d5¡gd
 d6d7„ }| j |t tjd.d$¡fd d d8d9„ }| j |t tjd:d$¡fd d d;d<„ }| j |tjtjtjfd d d=d>„ }| j |tjtjfd d d?d@„ }| j |t tjd.d$¡t tjd.d$¡fd d | j |t tjd:d$¡t tjd:d$¡fd d |  	t
¡2}| j |t tjd.d$¡t tjd:d$¡fd d W 5 Q R X dA}|  |t|jƒ¡ d S )BNc                  S   s.   t  d¡} t  d¡}d}d}t  ||f¡}d S ©Nr   r.   ©ÚnpÚzeros)r<   r=   Úmr0   r>   r1   r1   r2   Útest_0  s    

z1TestArrayAnalysis.test_base_cases.<locals>.test_0r1   r<   )r   r=   ©r.   r>   ©r   r.   ©r{   c                 S   s   t  | ¡}t  | ¡}|| S rL   r°   ©r0   r<   r=   r1   r1   r2   Útest_1  s    

z1TestArrayAnalysis.test_base_cases.<locals>.test_1)rz   c                 S   s   t  |¡}t  | ¡}|| S rL   r°   ©r³   r0   r<   r=   r1   r1   r2   Útest_2  s    

z1TestArrayAnalysis.test_base_cases.<locals>.test_2c                 S   s   t  | ¡}||  S rL   r°   ©r0   r<   r1   r1   r2   Útest_3!  s    
z1TestArrayAnalysis.test_base_cases.<locals>.test_3c                 S   s"   t  | ¡}|d }|d }|| S ©Nr.   é   r°   ©r0   r<   r=   r>   r1   r1   r2   Útest_4&  s    
z1TestArrayAnalysis.test_base_cases.<locals>.test_4c                 S   s(   t  | | f¡}| }t  || f¡}|| S rL   r°   )r0   r<   r³   r=   r1   r1   r2   Útest_5-  s    z1TestArrayAnalysis.test_base_cases.<locals>.test_5c                 S   s,   t  |¡}t  | ¡}|| }|| }|| S rL   r°   )r³   r0   r<   r=   r?   r@   r1   r1   r2   Útest_64  s
    

z1TestArrayAnalysis.test_base_cases.<locals>.test_6r?   r@   c                 S   s6   t  |¡}t  | ¡}| dkr&|| }n|| }|| S ©Né
   r°   ©r³   r0   r<   r=   r?   r1   r1   r2   Útest_7>  s    


z1TestArrayAnalysis.test_base_cases.<locals>.test_7c                 S   s6   t  |¡}t  | ¡}| dkr&|| }n|| }|| S rÄ   r°   rÆ   r1   r1   r2   Útest_8J  s    


z1TestArrayAnalysis.test_base_cases.<locals>.test_8c                 S   s@   t  | ¡}d}| dk r<| d7 } t  | ¡}|t  || ¡7 }q|S ©Nr   r¿   r.   ©r±   ÚonesÚsum)r³   ÚAr«   ÚBr1   r1   r2   Útest_9V  s    

z1TestArrayAnalysis.test_base_cases.<locals>.test_9rÍ   rÎ   c                 S   sd   | d }|d }|d }t  |¡}t  |¡}t  |¡}t  | ¡}t  || ¡}	t  || ¡}
|	|
 S r-   ©r±   r²   rÌ   )r³   r0   ÚpÚqrH   rÍ   rÎ   ÚCÚDr«   Útr1   r1   r2   Útest_10a  s    



z2TestArrayAnalysis.test_base_cases.<locals>.test_10rÓ   rÔ   c                  S   sD   t  d¡} t  d¡}| dd … }|d d… }t|ƒ}t|ƒ}||kS )Né   r.   éÿÿÿÿ©r±   rË   rV   ©r<   r=   r>   r?   r@   Úfr1   r1   r2   Útest_11p  s    

z2TestArrayAnalysis.test_base_cases.<locals>.test_11rÛ   c                  S   sl   t  d¡ d¡} t  d¡ d¡}| dd …d d …f }|d d…d d …f }|jd }|jd }t|ƒ}||kS )Né   )r×   r×   r.   rØ   r   )r±   rË   Úreshaper‘   rV   )r<   r=   r>   r?   r@   rÛ   Úgr1   r1   r2   Útest_12{  s    

z2TestArrayAnalysis.test_base_cases.<locals>.test_12rß   c                 S   s   | }|d S ©Nr   r1   )r+   ZT2r1   r1   r2   Útest_tup_arg‡  s    z7TestArrayAnalysis.test_base_cases.<locals>.test_tup_argr.   c                 S   s&   t  | ¡}|f}t  t|d ƒ¡}|S rá   rÙ   )r³   rÍ   ÚSrÎ   r1   r1   r2   Útest_arr_in_tup  s    
z:TestArrayAnalysis.test_base_cases.<locals>.test_arr_in_tupr+   c                    s   ˆ | | ƒ}|d S rá   r1   )r0   rH   ©r+   r1   r2   Útest_namedtuple™  s    
z:TestArrayAnalysis.test_base_cases.<locals>.test_namedtuplerH   ©r0   r0   c                 S   s   t  | ¡}t|d ƒS rá   )r±   ÚwhererV   )rÍ   r>   r1   r1   r2   Útest_np_where_tup_return   s    
zCTestArrayAnalysis.test_base_cases.<locals>.test_np_where_tup_returnc                 S   s    | j \}}t ||f¡}| | S rL   )r‘   r±   rË   )rÍ   r³   r0   rÎ   r1   r1   r2   Ú
test_shape§  s    
z5TestArrayAnalysis.test_base_cases.<locals>.test_shaper¿   c           	      S   sˆ   t  | ¡}t  |¡}t  |¡}| |kr6t  || ¡}nd}||krHd}nt  || ¡}d}| |kr|||kr|t  || | ¡}|| | S rá   rÊ   )	Úlr³   r0   rÍ   rÎ   rÓ   rH   r«   rÕ   r1   r1   r2   Ú	test_cond®  s    


z4TestArrayAnalysis.test_base_cases.<locals>.test_condc                 S   s.   | |kst ‚t | ¡}t |¡}t || ¡S rL   )ÚAssertionErrorr±   rË   rÌ   )r³   r0   rÍ   rÎ   r1   r1   r2   Útest_assert_1Â  s    

z8TestArrayAnalysis.test_base_cases.<locals>.test_assert_1c                 S   s   | j |j kst‚t | | ¡S rL   )r‘   rí   r±   rÌ   )rÍ   rÎ   r1   r1   r2   Útest_assert_2Ê  s    z8TestArrayAnalysis.test_base_cases.<locals>.test_assert_2zDimension mismatch)r}   r¨   r   Úintprš   r›   ÚArrayÚTupler   ÚassertRaisesrí   ZassertInÚstrÚ	exception)r/   r´   r¹   r»   r½   rÁ   rÂ   rÃ   rÇ   rÈ   rÏ   rÖ   rÜ   rà   râ   Zint_arr_typrä   ræ   ré   rê   rì   rî   rï   ZraisesrŠ   r1   rå   r2   Útest_base_cases  sÔ    


þÿÿ

ÿÿ

ÿÿ

ÿÿÿ

ÿÿÿ	ÿ ÿÿÿ ÿÿÿÿÿþÿþÿþz!TestArrayAnalysis.test_base_casesc                    sÐ   ddl m} |dd„ ƒ‰ ‡ fdd„}| j|tjf|  dd¡g|  dd¡gd	 ‡ fd
d„}| j|tjf|  dd¡gd |dddd„ ƒ‰‡fdd„}| j|tjf|  ddd¡|  dd¡g|  dd¡gd	 d S )Nr   )Ústencilc                 S   s$   d| d | d  | d  | d   S )Ng      Ð?r¶   )r.   r   )r   rØ   )rØ   r   r1   ©r<   r1   r1   r2   Úkernel_1ß  s    z4TestArrayAnalysis.test_stencilcall.<locals>.kernel_1c                    s   t  | | f¡}ˆ |ƒ}|| S rL   ©r±   rË   r¸   ©rù   r1   r2   r¹   ã  s    z2TestArrayAnalysis.test_stencilcall.<locals>.test_1r<   r=   ©r{   rz   c                    s4   t  | | f¡}t  | d | d f¡}ˆ ||d |S )Nr.   )Úoutrú   r¸   rû   r1   r2   r»   ì  s    z2TestArrayAnalysis.test_stencilcall.<locals>.test_2r·   )r>   )Zstandard_indexingc                 S   s   | d |d  |d  S )N)r   r.   r   )r   rØ   r   r   r1   )r<   r=   r>   r1   r1   r2   Úkernel_2õ  s    z4TestArrayAnalysis.test_stencilcall.<locals>.kernel_2c                    sB   t  d¡ ddd¡}t  d¡ | dd¡}t  d¡}ˆ |||ƒ}|S )Né@   r9   é   r¿   r.   )r±   ÚarangerÞ   r²   )r0   r<   r=   ÚuÚv)rþ   r1   r2   r½   ù  s
    
z2TestArrayAnalysis.test_stencilcall.<locals>.test_3r  r  )	Znumba.stencils.stencilr÷   r}   r   rð   r¨   r›   r©   rš   )r/   r÷   r¹   r»   r½   r1   )rù   rþ   r2   Útest_stencilcallÝ  s*    
þÿ

ÿýz"TestArrayAnalysis.test_stencilcallc           
   
   C   sº  dd„ }| j |tjtjf|  dd¡|  dd¡gdd d	d
„ }| j |tjf|  dd¡|  dd¡gdd dd„ }| j |tjf|  dd¡gdd dd„ }| j |tjf|  dd¡gdd dd„ }| j |tjtjf|  dd¡|  dd¡|  dd¡gdd dd„ }| j |tjf|  dd¡gdd dd„ }| j |tjf|  dd¡gdd dd„ }| j |tjf|  dd¡gdd dd„ }	| j |	tjf|  dd¡|  dd¡|  dd¡|  dd¡gdd d S )Nc                 S   sX   t  | ¡}t  |¡}t  || ¡}|d| d … }|d|d … }t  || ¡}|| S r-   rÐ   )r³   r0   rÍ   rÎ   r«   rÓ   rÔ   rÕ   r1   r1   r2   r¹     s    

z,TestArrayAnalysis.test_slice.<locals>.test_1rÍ   rÎ   rÓ   rÔ   F)rz   r|   c                 S   sJ   t  | ¡}|d| d … }|d| d … }|d| d … }|| }|| S )Nr   r8   r.   r¿   r°   )r³   rÍ   rÎ   rÓ   rÔ   ÚEr1   r1   r2   r»     s    
z,TestArrayAnalysis.test_slice.<locals>.test_2r  c                 S   sR   t  | | f¡}|d| d …d| d …f }|d| d …d| d …f }|| }|S rÉ   r°   ©r³   rÍ   rÎ   rÓ   r  r1   r1   r2   r½      s
    z,TestArrayAnalysis.test_slice.<locals>.test_3c                 S   sJ   t  | | f¡}|d| d …d d …f }|d| d …d d …f }|| }|S rÉ   r°   r  r1   r1   r2   rÁ   *  s
    z,TestArrayAnalysis.test_slice.<locals>.test_4c                 S   sb   t  | ¡}t  | ¡}|d| d … |d| d …< t  |¡}|d| d … }||d|d …< || S )Nr.   r   r¿   r°   )r³   r0   rÍ   rÎ   rÓ   rÔ   r1   r1   r2   rÂ   4  s    


z,TestArrayAnalysis.test_slice.<locals>.test_5c                 S   sJ   t  | | f¡}|d| d …d d…f }|d| d …d d…f }|| }|S )Nr   r¿   rØ   r.   r°   r  r1   r1   r2   rÃ   D  s
    z,TestArrayAnalysis.test_slice.<locals>.test_6c                 S   sJ   t  | | f¡}|d| d …dd…f }|d| d …dd…f }|| }|S )Nr   r¿   éýÿÿÿrØ   r.   éüÿÿÿéþÿÿÿr°   r  r1   r1   r2   rÇ   N  s
    z,TestArrayAnalysis.test_slice.<locals>.test_7c                 S   sF   t  | | f¡}|d | d …dd …f }|dd…d d …f }|| }|S )Nr¿   r   r.   rØ   r°   r  r1   r1   r2   rÈ   X  s
    z,TestArrayAnalysis.test_slice.<locals>.test_8c                 S   sN   t  | ¡}|d d… }|dd … }|d dd… }|| }|}|d7 }|||fS )Nr   r.   rØ   r°   )r³   rÍ   rÎ   rÓ   rÔ   r  ÚFr1   r1   r2   rÏ   b  s    
z,TestArrayAnalysis.test_slice.<locals>.test_9r³   r
  )r{   r|   )r}   r   rð   rš   r›   r©   r¨   )
r/   r¹   r»   r½   rÁ   rÂ   rÃ   rÇ   rÈ   rÏ   r1   r1   r2   Ú
test_slice  sp    

ÿý

ÿýþþ



þüþþþ



ýûzTestArrayAnalysis.test_slicec                 C   sx  dd„ }| j |tjf|  dd¡|  dd¡|  dd¡gd d	d
„ }| j |tjf|  dd¡g|  d¡gd dd„ }| j |tjf|  dd¡|  dd¡|  dd¡gd dd„ }| j |tjf|  dd¡|  dd¡|  dd¡gd dd„ }| j |tjf|  dd¡|  dd¡|  dd¡|  dd¡gd dd„ }| j |tjf|  dd¡gd dd„ }| j |tjf|  dd¡|  dd¡g|  d¡|  d¡gd dd„ }| j |t tjdd¡f|  ddddd¡g|  d¡|  d¡gd dd„ }	| j |	tjf|  dd¡g|  d¡gd d d!„ }
| j |
tjtjf|  dd"¡|  dd#¡|  dd#¡gd d$d%„ }| j |tjtjtjf|  dd&¡|  dd'¡|  dd'¡|  dd(¡|  d)d(¡|  dd*¡|  d+d*¡gd d,d-„ }| j |tjtjf|  dd"¡|  dd"¡|  dd"¡gd d.d/„ }td0ƒd1 }dgd2d3„ t	tdƒ|ƒD ƒ }dgd4d3„ t	tdƒ|ƒD ƒ }|d5d3„ t	tdƒ|ƒD ƒ7 }| j |tjf| j|Ž | j|Ž gd d6d7„ }| j |tjtjf|  dd8¡|  d9d:¡g|  d¡|  d¡|  d9¡|  d;¡gd d<d=„ }| j |d>|  d;d?¡|  d@dA¡|  dBdC¡|  dDdE¡|  dFdG¡|  dHdI¡|  dJdK¡gd dLdM„ }| j |tjtjf|  dNd¡|  ddO¡|  ddPdQ¡|  dRdS¡|  dTdUdV¡gd dWdX„ }| j |tj
tj
f|  ddY¡|  ddZ¡gd d[d\„ }| j |tjtjtjf|  dd]¡|  dd^¡|  dd]¡|  dRd_¡|  dTd`¡|  dUd`¡g|  dNda¡gd dbdc„ }| j |tjtjf|  ddd¡gd d ddde„ }| j |d>|  dd¡gd d d S )fNc                 S   s,   t  | ¡}t  | | f¡}t j| | fd}d S ©N)r‘   r°   rÀ   r1   r1   r2   Ú
test_zerosv  s    
z6TestArrayAnalysis.test_numpy_calls.<locals>.test_zerosr<   r0   r=   rç   r>   r·   c                 S   s   t  d¡}t  d¡}|| S r¾   )r±   ÚarrayrË   r¸   r1   r1   r2   Útest_0d_array  s    

z9TestArrayAnalysis.test_numpy_calls.<locals>.test_0d_arrayrü   c                 S   s,   t  | ¡}t  | | f¡}t j| | fd}d S r  rú   rÀ   r1   r1   r2   Ú	test_ones‡  s    
z5TestArrayAnalysis.test_numpy_calls.<locals>.test_onesc                 S   s,   t  | ¡}t  | | f¡}t j| | fd}d S r  )r±   ÚemptyrÀ   r1   r1   r2   Ú
test_empty  s    
z6TestArrayAnalysis.test_numpy_calls.<locals>.test_emptyc                 S   s:   t  | ¡}t j| d}t j| | d}t j| | d d}d S )N)ÚN)r  ÚMr.   )r±   Úeye©r0   r<   r=   r>   r?   r1   r1   r2   Útest_eye™  s    
z4TestArrayAnalysis.test_numpy_calls.<locals>.test_eyer?   c                 S   s   t  | ¡}d S rL   )r±   Úidentityr¼   r1   r1   r2   Útest_identity¤  s    z9TestArrayAnalysis.test_numpy_calls.<locals>.test_identityc                 S   s0   t  | ¡}t  |¡}t  |¡}t j|dd}d S )Nr.   )Úk)r±   r  Zdiagr  r1   r1   r2   Ú	test_diag©  s    


z5TestArrayAnalysis.test_numpy_calls.<locals>.test_diag)r0   c                 S   s8   t  | ¡}t  | ¡}t  | ¡}t  | d¡}t  | ¡}d S r-   )r±   Z
empty_likeZ
zeros_likeZ	ones_likeZ	full_likeZasfortranarrayrÚ   r1   r1   r2   Útest_array_like´  s
    


z;TestArrayAnalysis.test_numpy_calls.<locals>.test_array_liker¿   rÓ   r@   rÛ   c                 S   s,   t  | |  ¡}| | | f¡}| ¡ | ¡  S rL   )r±   rË   rÞ   rÌ   r¸   r1   r1   r2   Útest_reshapeÁ  s    z8TestArrayAnalysis.test_numpy_calls.<locals>.test_reshapec                 S   s    t  | |f¡}|j}| ¡ }d S rL   ©r±   rË   r+   Z	transpose©r³   r0   r<   r=   r>   r1   r1   r2   Útest_transposeÊ  s    z:TestArrayAnalysis.test_numpy_calls.<locals>.test_transpose)r³   r0   )r0   r³   c           
      S   sR   t  | ||f¡}|j}| ¡ }| ddd¡}| d¡}| ddd¡}| d¡}	d S )Nr¿   r   r.   )r¿   r   r.   )r   r¿   r.   r  )
r³   r0   r  r<   r=   r>   r?   Údtr@   Úetr1   r1   r2   Útest_transpose_3dÖ  s    
z=TestArrayAnalysis.test_numpy_calls.<locals>.test_transpose_3d)r³   r0   r  )r  r0   r³   )r  r³   r0   r!  )r³   r  r0   r"  c                 S   s   t  | |f¡}|j}|j}d S rL   )r±   rË   ÚrealÚimagr  r1   r1   r2   Útest_real_imag_attré  s    z?TestArrayAnalysis.test_numpy_calls.<locals>.test_real_imag_attrc           G      S   sÔ  t j | ¡}t j | | ¡}t j | ¡}t j | | ¡}t j | ¡}t j | | f¡}t jj| | fd}t j | ¡}t j | | f¡}	t jj| | fd}
t j | ¡}t j | | f¡}t jj| | fd}t j | ¡}t j | | f¡}t jj| | fd}t j | ¡}t j | | f¡}t jj| | fd}t j d| ¡}t j d| | f¡}t jjd| | fd}t j 	d| ¡}t j 	d| | f¡}t jj	d| | fd}t j 
d| ¡}t j 
d| | f¡}t jj
d| | fd}t j d| ¡}t j d| | f¡}t jjd| | fd}t j d| ¡} t j d| | f¡}!t jjd| | fd}"t j d| ¡}#t j d| | f¡}$t jjd| | fd}%t j d| ¡}&t j d| | f¡}'t jjd| | fd}(t j dd| ¡})t j dd| | f¡}*t jjdd| | fd}+t j dd| ¡},t j dd| | f¡}-t jjdd| | fd}.t j dd| ¡}/t j dd| | f¡}0t jjdd| | fd}1t j dd| ¡}2t j dd| | f¡}3t jjdd| | fd}4t j dd| ¡}5t j dd| | f¡}6t jjdd| | fd}7t j dd| ¡}8t j dd| | f¡}9t jjdd| | fd}:t j dd| ¡};t j dd| | f¡}<t jjdd| | fd}=t j dd| ¡}>t j dd| | f¡}?t jjdd| | fd}@t j dd| ¡}At j dd| | f¡}Bt jjdd| | fd}Ct j ddd| ¡}Dt j ddd| | f¡}Et jjddd| | fd}Fd S )N)ÚsizerÅ   gš™™™™™¹?r   r.   r  )r±   ÚrandomZrandZrandnZranfZrandom_sampleÚsampleZstandard_normalZ	chisquareZweibullÚpowerZ	geometricZexponentialZpoissonZrayleighÚnormalÚuniformÚbetaZbinomialrÛ   ÚgammaZ	lognormalZlaplaceÚrandintÚ
triangular)Gr0   Za0Za1Zb0Úb1Zc0Úc1Úc2Zd0Zd1Zd2Ze0Úe1Úe2Zf0Úf1Úf2Zg0Úg1Úg2Zh0Zh1Zh2Zi0Úi1Úi2Zj0Zj1Zj2Zk0Zk1Zk2Zl0Úl1Úl2Zm0Úm1Úm2Zn0Zn1Zn2Zo0Zo1Úo2Úp0Úp1Úp2Úq0Úq1Úq2Zr0Úr1Úr2Ús0rE   rG   Út0Út1Út2Zu0Úu1Úu2Zv0Zv1Zv2Zw0Zw1Zw2Zx0Úx1Zx2r1   r1   r2   Útest_randomô  sŒ    z7TestArrayAnalysis.test_numpy_calls.<locals>.test_randomrt   r.   c                 S   s   g | ]}t |ƒd  ‘qS )Ú0©Úchr©Ú.0rt   r1   r1   r2   Ú
<listcomp>=  s     z6TestArrayAnalysis.test_numpy_calls.<locals>.<listcomp>c                 S   s   g | ]}t |ƒd  ‘qS ©Ú1rR  rT  r1   r1   r2   rV  >  s     c                 S   s   g | ]}t |ƒd  ‘qS rW  rR  rT  r1   r1   r2   rV  ?  s     c                 S   s¨   t  | ¡}t  |¡}t  ||f¡}t  d|f¡}t  d|f¡}t  ||f¡}t  | df¡}t  | df¡}	t j||	fdd}
t  | |f¡}t  | |f¡}t  ||f¡}d S )Nr¿   r8   r.   ©Zaxis)r±   rË   Zconcatenate)r³   r0   r<   r=   r>   r?   r@   rÛ   r¡   Újr  rë   ÚorÑ   r1   r1   r2   Útest_concatenateD  s    

z<TestArrayAnalysis.test_numpy_calls.<locals>.test_concatenate)r×   r0   r  )r³   r×   rÑ   c            
      S   s„   t  d¡} t  d¡}t  d¡}t  | | f¡}t  ||f¡}t  | | f¡}t  ||f¡}t  | | f¡}t  ||f¡}t  ||f¡}	d S )N)r¿   ©r¿   r8   )r¿   r8   r9   )r±   rË   ZvstackZhstackZdstack)
r  rë   r[  rÑ   rÒ   rH   r«   rÕ   r  r  r1   r1   r2   Útest_vsd_stack_  s    


z:TestArrayAnalysis.test_numpy_calls.<locals>.test_vsd_stackr1   )r¿   r¿   rÒ   )r9   r8   rH   )r9   r«   )r¿   é   rÕ   )r.   r¿   r¿   r  )r¿   r8   r¿   r  )r¿   r8   r   c                 S   s˜   t  | ¡}t  |¡}t  ||f¡}t  | |f¡}t  | |f¡}t  ||f¡}t j||fdd}t j||fdd}	t j||fdd}
t j||fdd}d S )Nr   rY  r.   r¿   rØ   )r±   rË   Ústack)r³   r0   r<   r=   r>   r?   r@   rÛ   rß   Úhr¡   rZ  r1   r1   r2   Ú
test_stacku  s    

z6TestArrayAnalysis.test_numpy_calls.<locals>.test_stackr³   )r¿   r³   rß   )r¿   r³   r0   ra  )r³   r¿   r0   r¡   rZ  )r³   r0   r¿   c                 S   s   t  | |¡}t  | |d¡}d S rÄ   )r±   Zlinspacerº   r1   r1   r2   Útest_linspaceŒ  s    z9TestArrayAnalysis.test_numpy_calls.<locals>.test_linspace)é2   )rÅ   c           	      S   s¤   t  t  d¡t  d¡¡}t  t  d¡t  d¡¡}t  t  d¡t  d¡¡}t  t  d¡t  d¡¡}t  t  ||f¡t  ||f¡¡}t  t  ||f¡t  | | f¡¡}d S )Nr.   r¿   r]  )r.   r¿   r7   )r±   ÚdotrË   )	rë   r³   r0   r<   r=   r@   ra  r¡   rZ  r1   r1   r2   Útest_dot•  s     z4TestArrayAnalysis.test_numpy_calls.<locals>.test_dotrµ   )r8   )r¿   r9   )r³   r³   rë   c                 S   s>   t  | |f¡}t  |¡}|| }t  d|f¡}|| | }d S r-   rú   )r³   r0   r<   r=   r>   r?   r@   r1   r1   r2   Útest_broadcast¬  s
    
z:TestArrayAnalysis.test_numpy_calls.<locals>.test_broadcastc                  S   s   t  t¡} t  t¡}d S rL   )r±   rË   ÚGVAL2)r<   r=   r1   r1   r2   Útest_global_tuple·  s    
z=TestArrayAnalysis.test_numpy_calls.<locals>.test_global_tuple)r}   r   rð   r¨   r©   r®   r­   rñ   Úordrž   Zfloat64rš   )r/   r  r  r  r  r  r  r  r  r  r   r#  r&  rP  ÚlastZvars1dZvars2dr\  r^  rb  rc  rf  rg  ri  r1   r1   r2   Útest_numpy_callst  sH   


þÿ
þ


þÿ


þÿ



ýÿÿ

ÿÿýÿÿý
þ


þÿ







úÿ	


þÿHÿÿ

þýü	






úÿ


  ÿ ÿ  ÿúÿ

ÿÿ





ûø
þþz"TestArrayAnalysis.test_numpy_callsN)r4   r5   r6   rs   r}   r   r–   rx   rš   r›   r¨   r©   r­   r®   rö   r  r  r   rl  r1   r1   r1   r2   rk   ¬   s"   			 W)nrk   c                   @   s\   e Zd ZdZdZedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZ	edd„ ƒZ
edd„ ƒZdS )Ú!TestArrayAnalysisParallelRequiredzkThis is to just split out tests that need the parallel backend and
    therefore serialised execution.
    Fc                    sP   t dd„ ƒ‰ ‡ fdd„}zt |dddƒ W n tk
rJ   |  d¡ Y nX d S )	Nc                 S   s   || fS rL   r1   )rt   r”   r1   r1   r2   ÚswapÊ  s    z9TestArrayAnalysisParallelRequired.test_misc.<locals>.swapc                    sD   t  | ¡}t  | ¡}t| ƒD ]"}ˆ || || ƒ\||< ||< qd S rL   )r±   rË   rž   )r³   r<   r=   r¡   ©rn  r1   r2   Útest_bug2537Î  s    

zATestArrayAnalysisParallelRequired.test_misc.<locals>.test_bug2537T©ÚparallelrÅ   ztest_bug2537 raised IndexError!)r   Ú
IndexErrorZfail)r/   rp  r1   ro  r2   Ú	test_miscÇ  s    
z+TestArrayAnalysisParallelRequired.test_miscc                    s<   t ddgƒ}|dƒ‰ ‡ fdd„}|  t|ddƒ |ƒ ¡ d S )NÚRowrÍ   r8   c                     s   ˆ } | j }|dkrd}|S )Nr¿   r8   )rÍ   )ÚrrÚres©Úrowr1   r2   Ú	test_implÞ  s
    zKTestArrayAnalysisParallelRequired.test_global_namedtuple.<locals>.test_implTrq  )r   ÚassertEqualr   )r/   ru  rz  r1   rx  r2   Útest_global_namedtupleÙ  s    z8TestArrayAnalysisParallelRequired.test_global_namedtuplec                 C   sP   dd„ }d}t |ƒ}t |j¡}t |j¡}|  t|dd||ƒ|||ƒ¡ d S )Nc                 S   s    t | jƒD ]}|||< q
| ¡ S rL   )r   r+   rÌ   )Út_objÚXr¡   r1   r1   r2   rz  ê  s    
zLTestArrayAnalysisParallelRequired.test_array_T_issue_3700.<locals>.test_implr×   Trq  )r,   r±   r²   r+   r{  r   )r/   rz  r0   r}  ZX1ZX2r1   r1   r2   Útest_array_T_issue_3700ç  s     ÿz9TestArrayAnalysisParallelRequired.test_array_T_issue_3700c                 C   s`   dd„ }|   t|ddƒ |ƒ ¡ dd„ }t d¡}td ƒ}tj t|dd||ƒ|||ƒ¡ d S )Nc                  S   s   t d d ƒ} dS r[   )Úslicerø   r1   r1   r2   Ú
test_impl1ù  s    
zQTestArrayAnalysisParallelRequired.test_slice_shape_issue_3380.<locals>.test_impl1Trq  c                 S   s   |}| | S rL   r1   )rÍ   r<   r=   r1   r1   r2   Ú
test_impl2ÿ  s    zQTestArrayAnalysisParallelRequired.test_slice_shape_issue_3380.<locals>.test_impl2rÅ   )r{  r   r±   r  r€  ÚtestingÚassert_array_equal)r/   r  r‚  rÍ   r<   r1   r1   r2   Útest_slice_shape_issue_3380ö  s    
 ÿz=TestArrayAnalysisParallelRequired.test_slice_shape_issue_3380c                 C   s8   t dddd„ ƒ}t d¡}tj ||ƒ| |¡¡ d S )NTrq  c                 S   sH   | j d }t |¡}t|ƒD ]&}t | t d¡t d¡… ¡||< q|S r¯   )r‘   r±   r²   r   rÌ   Úint32)Údatar  Zsumsr¡   r1   r1   r2   rz    s
    

$zPTestArrayAnalysisParallelRequired.test_slice_dtype_issue_5056.<locals>.test_implg      $@)r   r±   r  rƒ  r„  Zpy_func)r/   rz  r‡  r1   r1   r2   Útest_slice_dtype_issue_5056  s    

z=TestArrayAnalysisParallelRequired.test_slice_dtype_issue_5056c                 C   s$   dd„ }|   t|ddƒ |ƒ ¡ dS )zimake sure a global tuple with non-integer values does not cause errors
        (test for #6726).
        c                  S   s   t d } | S rá   )ÚGVAL)r?   r1   r1   r2   rz    s    zFTestArrayAnalysisParallelRequired.test_global_tuple.<locals>.test_implTrq  N)r{  r   )r/   rz  r1   r1   r2   ri    s    z3TestArrayAnalysisParallelRequired.test_global_tupleN)r4   r5   r6   rJ   Z_numba_parallel_test_Úskip_unsupportedrt  r|  r  r…  rˆ  ri  r1   r1   r1   r2   rm  À  s   




rm  c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚTestArrayAnalysisInterfacec              
   C   s‚   i }t tƒD ]}| d¡rtt|ƒ||< qdd„ }t |¡}| ¡ D ]8\}}t |¡}| j||d |  ||¡ W 5 Q R X qDd S )NZ_analyze_op_call_c                 S   s   d S rL   r1   )r/   Úscoper    Úlocr_   Úkwsr1   r1   r2   Ú
iface_stub,  s    zMTestArrayAnalysisInterface.test_analyze_op_call_interface.<locals>.iface_stub)ÚfnameÚsig)	Údirr   r‰   r   r   Zpysignaturer„   ZsubTestr{  )r/   Zaocr  r  Úexpectedr  r  Úgotr1   r1   r2   Útest_analyze_op_call_interface%  s    


z9TestArrayAnalysisInterface.test_analyze_op_call_interfacec              	      sÎ   ddl m} ddlm} |j| ‰ddi‰‡ ‡‡fdd„‰‡‡fdd„}zF||j|< tj‰ ‡ fd	d
„}tdd|ƒdƒ}ˆd }ˆ |d¡ W 5 ˆ|j|< X tdd|ƒdƒ}ˆ 	||¡ ˆ 
|ˆd ¡ d S )Nr   )ÚParfor)rO   Úcounterc                    s’   | j }|jd  d¡D ]:}| |j¡}t|dd ƒˆ krt|jd dd ƒdkr qVqd S | |¡}| jd }ˆ 	| 
d|j¡¡ ˆd  d7  < d S )Nr   r~   r“   rg   r0   r—  r.   )rM   rQ   r…   r†   rf   r   r_   Zget_assigneerw   rB   rC   rg   )rO   rM   r~   ZcalleeZ
variable_AÚes)r  r/   Úsharedr1   r2   Útestcode?  s    

zKTestArrayAnalysisInterface.test_array_analysis_extensions.<locals>.testcodec                    s   ˆ|ƒ ˆ | |||ƒS )z7Recursive array analysis for parfor nodes.
            r1   )Zparforr    rN   rO   )Úorig_parforrš  r1   r2   Ú
new_parforP  s       ÿzMTestArrayAnalysisInterface.test_array_analysis_extensions.<locals>.new_parforc                    s4   ˆ | ƒ}t | ƒD ]}t |¡}| ¡ ||< q|d S r-   )r   r±   r  rÌ   )r0   rÍ   r¡   rã   )r  r1   r2   rÛ   ^  s
    
zDTestArrayAnalysisInterface.test_array_analysis_extensions.<locals>.fTrq  rÅ   )Znumba.parfors.parforr–  Znumba.parforsrO   Zarray_analysis_extensionsr±   r  r   ZassertGreaterZassertPreciseEqualr{  )r/   r–  rO   rœ  rÛ   r”  Zexecuted_countr“  r1   )r  r›  r/   r™  rš  r2   Útest_array_analysis_extensions4  s"    
	
z9TestArrayAnalysisInterface.test_array_analysis_extensionsN)r4   r5   r6   r•  rŠ  r  r1   r1   r1   r2   r‹  $  s   r‹  Ú__main__)GÚ	itertoolsÚnumpyr±   ÚsysÚcollectionsr   Úior   Znumbar   r   r   Z
numba.corer   r   r	   r
   r   r   r   r   Znumba.tests.supportr   r   r   r   Znumba.parfors.array_analysisr   r   Znumba.core.compilerr   r   r   Znumba.core.ir_utilsr   Znumba.core.untyped_passesr   r   r   r   r   r   r   r    r!   r"   Znumba.core.typed_passesr#   r$   r%   r&   Znumba.core.compiler_machineryr'   r(   Znumba.experimentalr)   ZunittestrŠ  r†  Úobjectr,   r‰  rh  r:   rK   rZ   rk   rm  r‹  r4   Úmainr1   r1   r1   r2   Ú<module>   sF   (
0'
=      dO
