U
    ?hϥ                     @   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re8F  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   Q/var/www/html/venv/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locals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   classmethodrd   rj   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   rd   rt   rj   
equiv_setsrB   _has_no_assertcallrM   rN   )
r/   fnZarg_tysassertsequivs
idempotentZtest_pipelinerU   Zanalysisrg   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_definitionrg   rh   
isinstancer	   Globalr_   Zliteral_value
startswith)
r/   rM   rN   r_   msglabelblockexprrz   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Varrh   )r/   rM   ru   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   rg   rh   r   r	   r   )r/   rM   r   r   r   rz   r1   r1   r2   ry      s    z$TestArrayAnalysis._has_no_assertcallc                    s    fddS )Nc                    s    | | S rL   )rB   r   rM   rN   r_   r/   r1   r2   rv      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   rv      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   rv      rw   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   rv      rw   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/   ru   r1   r2   rv     rw   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   rv     rw   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)r{   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   Z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|   r{   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)r{   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p1Z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_randomru   r.   c                 S   s   g | ]}t |d  qS )0chr.0ru   r1   r1   r2   
<listcomp>=  s     z6TestArrayAnalysis.test_numpy_calls.<locals>.<listcomp>c                 S   s   g | ]}t |d  qS 1rQ  rS  r1   r1   r2   rU  >  s     c                 S   s   g | ]}t |d  qS rV  rQ  rS  r1   r1   r2   rU  ?  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   rZ  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   rX  r.   r   r   )r   r   stack)r   r0   r<   r=   r>   r?   r@   r   r   hr   rY  r1   r1   r2   
test_stacku  s    

z6TestArrayAnalysis.test_numpy_calls.<locals>.test_stackr   )r   r   r   )r   r   r0   r`  )r   r   r0   r   rY  )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@   r`  r   rY  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&  rO  lastZvars1dZvars2dr[  r]  ra  rb  re  rf  rh  r1   r1   r2   test_numpy_callst  sH   



























	


H

	









     








z"TestArrayAnalysis.test_numpy_callsN)r4   r5   r6   rt   r~   r   r   ry   r   r   r   r   r   r   r   r  r  r   rk  r1   r1   r1   r2   rl      s"   			 W)nrl   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   )ru   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   rm  r1   r2   test_bug2537  s    

zATestArrayAnalysisParallelRequired.test_misc.<locals>.test_bug2537Tparallelr   ztest_bug2537 raised IndexError!)r   
IndexErrorZfail)r/   ro  r1   rn  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   )Zrrresrowr1   r2   	test_impl  s
    zKTestArrayAnalysisParallelRequired.test_global_namedtuple.<locals>.test_implTrp  )r   assertEqualr   )r/   rt  rx  r1   rv  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   rx    s    
zLTestArrayAnalysisParallelRequired.test_array_T_issue_3700.<locals>.test_implr   Trp  )r,   r   r   r+   ry  r   )r/   rx  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_impl1Trp  c                 S   s   |}| | S rL   r1   )r   r<   r=   r1   r1   r2   
test_impl2  s    zQTestArrayAnalysisParallelRequired.test_slice_shape_issue_3380.<locals>.test_impl2r   )ry  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 )NTrp  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   rx    s
    

$zPTestArrayAnalysisParallelRequired.test_slice_dtype_issue_5056.<locals>.test_implg      $@)r   r   r  r  r  Zpy_func)r/   rx  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   rx    s    zFTestArrayAnalysisParallelRequired.test_global_tuple.<locals>.test_implTrp  N)ry  r   )r/   rx  r1   r1   r2   rh    s    z3TestArrayAnalysisParallelRequired.test_global_tupleN)r4   r5   r6   rJ   Z_numba_parallel_test_skip_unsupportedrs  rz  r}  r  r  rh  r1   r1   r1   r2   rl    s   




rl  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subTestry  )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   rh   r0   r  r.   )rM   rQ   r   r   rg   r   r_   Zget_assigneerx   rB   rC   rh   )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>.fTrp  r   )Znumba.parfors.parforr  Znumba.parforsrO   Zarray_analysis_extensionsr   r  r   ZassertGreaterZassertPreciseEqualry  )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  rg  r:   rK   rZ   rl   rl  r  r4   mainr1   r1   r1   r2   <module>   sF   (
0'
=      dO
