o
    iϥ                     @   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 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   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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                   @       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	intersectrC   Zis_emptyrB   rD   rE   )r/   rF   s2rr1   r1   r2   test_intersectF   s&   




zTestEquivSet.test_intersectN)r4   r5   r6   __doc__rG   rJ   r1   r1   r1   r2   r;   5   s    r;   FT)Zanalysis_onlyZmutates_CFGc                   @   r:   )ArrayAnalysisPassZarray_analysis_passc                 C   s   t |  d S N)r'   r3   )r/   r1   r1   r2   r3   `      zArrayAnalysisPass.__init__c                 C   sr   t |j|j|j|j|_|j|jj t	|j}|  |j
|j  |jr7t|j
dkr7||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   rZ   r1   r1   r1   r2   rL   \   s    rL   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 u rtjj}|d u rt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sN|td |td |td	 |td
 |td |jjsd|td |td |rr|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_functionrY   Zfunc_idr   rZ   ZliftedZlifted_fromrT   rW   r   Zadd_passr   r   r   rc   Zno_rewritesr   r   r   r"   r#   r%   rL   r&   r$   finalizerR   rQ   )r/   funcrW   rY   namepmr1   r1   r2   compile_to_ir~   s<   
z!ArrayAnalysisTester.compile_to_irrM   )r4   r5   r6   classmethodrf   rl   r1   r1   r1   r2   r\   o   s    r\   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 ]}t |j|j| t }|j|d ||  q| tt	|dk d S )N)filer.   )
r   rS   	arg_namesr   dumprU   getvaluerC   rX   set)r/   Zir_listZoutputsrO   outputr1   r1   r2   
compare_ir   s   zTestArrayAnalysis.compare_irTc           
      C   s~   t |}|r
| jndd }|||}|r"|D ]	}	|	|jd  q|du r1| | |j dS |D ]	}	|	|j|j q3dS )z<
        Compile the given function and get its IR.
        c                 S   s   dS )Nr1   r1   )xr1   r1   r2   <lambda>   s    z5TestArrayAnalysis._compile_and_test.<locals>.<lambda>r   N)	r\   rf   ru   rl   
equiv_setsrC   _has_no_assertcallrO   rP   )
r/   fnZarg_tysassertsequivs
idempotentZtest_pipelinerW   Zanalysisri   r1   r1   r2   _compile_and_test   s   
z#TestArrayAnalysis._compile_and_testc           
      C   s   d d|}|j D ]1\}}|jddD ]&}||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joinrS   items
find_exprsget_definitionri   rj   
isinstancer	   Globalra   Zliteral_value
startswith)
r/   rO   rP   ra   msglabelblockexprrz   typr1   r1   r2   _has_assertcall   s   z!TestArrayAnalysis._has_assertcallc                 C   s   |j  D ]?\}}|jddD ]4}|jdkrC|j|jdd}|j|dd}t|tjr.|j	n|}t|tjr9|j	n|}||krC  dS qqdS )Ngetattrr   shapeT)Zlhs_onlyF)
rS   r   r   attrr   valuer   r	   ZVarrj   )r/   rO   rv   r   r   r   yzr1   r1   r2   _has_shapecall   s   
z TestArrayAnalysis._has_shapecallc                 C   sV   |j  D ]#\}}|jddD ]}||jj}t|tjr'|jdkr'  dS qqdS )Nr   r   r   FT)	rS   r   r   r   ri   rj   r   r	   r   )r/   rO   r   r   r   rz   r1   r1   r2   ry      s   z$TestArrayAnalysis._has_no_assertcallc                        fddS )Nc                        | | S rM   )rC   r   rO   rP   ra   r/   r1   r2   rw          z/TestArrayAnalysis.with_assert.<locals>.<lambda>r1   r/   ra   r1   r   r2   with_assert   rN   zTestArrayAnalysis.with_assertc                    r   )Nc                    r   rM   )rE   r   r   r   r1   r2   rw      r   z2TestArrayAnalysis.without_assert.<locals>.<lambda>r1   r   r1   r   r2   without_assert   rN   z TestArrayAnalysis.without_assertc                        fddfddS )Nc                    s<   t  }t|d D ]}|  |  |d  s dS q
dS Nr.   FTrX   rangerD   	equiv_setr0   ira   r1   r2   check      z+TestArrayAnalysis.with_equiv.<locals>.checkc                         | S rM   rC   r   r   r/   r1   r2   rw          z.TestArrayAnalysis.with_equiv.<locals>.<lambda>r1   r   r1   ra   r   r/   r2   
with_equiv      zTestArrayAnalysis.with_equivc                    r   )Nc                    s<   t  }t|d D ]}|  |  |d  r dS q
dS r   r   r   r   r1   r2   r      r   z.TestArrayAnalysis.without_equiv.<locals>.checkc                    r   rM   r   r   r   r1   r2   rw      r   z1TestArrayAnalysis.without_equiv.<locals>.<lambda>r1   r   r1   r   r2   without_equiv   r   zTestArrayAnalysis.without_equivc                    r   )Nc                          | S rM   )rC   r   rO   sr/   rv   r1   r2   rw         z2TestArrayAnalysis.with_shapecall.<locals>.<lambda>r1   r   r1   r   r2   with_shapecall  rN   z TestArrayAnalysis.with_shapecallc                    r   )Nc                    r   rM   )rE   r   r   r   r1   r2   rw     r   z5TestArrayAnalysis.without_shapecall.<locals>.<lambda>r1   r   r1   r   r2   without_shapecall  rN   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
}| j |ttjd.d$ttjd:d$fd d W d    n	1 sw   Y  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 rM   r   r0   r=   r>   r1   r1   r2   test_1     

z1TestArrayAnalysis.test_base_cases.<locals>.test_1)r{   c                 S   s   t |}t | }|| S rM   r   r   r0   r=   r>   r1   r1   r2   test_2  r   z1TestArrayAnalysis.test_base_cases.<locals>.test_2c                 S   s   t | }||  S rM   r   r0   r=   r1   r1   r2   test_3!     
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 rM   r   )r0   r=   r   r>   r1   r1   r2   test_5-  s   z1TestArrayAnalysis.test_base_cases.<locals>.test_5c                 S   s,   t |}t | }|| }|| }|| S rM   r   )r   r0   r=   r>   r@   rA   r1   r1   r2   test_64  s
   

z1TestArrayAnalysis.test_base_cases.<locals>.test_6r@   rA   c                 S   s<   t |}t | }| dkr|| }|| S || }|| S N
   r   r   r0   r=   r>   r@   r1   r1   r2   test_7>     

z1TestArrayAnalysis.test_base_cases.<locals>.test_7c                 S   s<   t |}t | }| dkr|| }|| S || }|| S r   r   r   r1   r1   r2   test_8J  r   z1TestArrayAnalysis.test_base_cases.<locals>.test_8c                 S   sF   t | }d}| dk r!| d7 } t | }|t || 7 }| dk s|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qrI   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   rX   r=   r>   r?   r@   rA   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   rX   )r=   r>   r?   r@   rA   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     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   rI   r+   r1   r2   test_namedtuple  r   z:TestArrayAnalysis.test_base_cases.<locals>.test_namedtuplerI   r0   r0   c                 S   s   t | }t|d S r   )r   whererX   )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 rM   )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rt || }nd}||kr$d}nt || }d}| |kr>||kr>t || | }|| | S r   r   )	lr   r0   r   r   r   rI   r   r   r1   r1   r2   	test_cond  s   


z4TestArrayAnalysis.test_base_cases.<locals>.test_condc                 S   s.   | |ksJ t | }t |}t || S rM   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J t| | S rM   )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   assertRaisesAssertionErrorZ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 rM   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   *  
   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  r  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  r  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   ,   t | }t | | f}t j| | fd}d S N)r   r   r   r1   r1   r2   
test_zerosv     
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  r   z9TestArrayAnalysis.test_numpy_calls.<locals>.test_0d_arrayr  c                 S   r  r  r	  r   r1   r1   r2   	test_ones  r  z5TestArrayAnalysis.test_numpy_calls.<locals>.test_onesc                 S   r  r  )r   emptyr   r1   r1   r2   
test_empty  r  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 rM   )r   identityr   r1   r1   r2   test_identity  rN   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   rA   r   c                 S   s,   t | |  }|| | f}| |  S rM   )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 rM   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.   r0  )
r   r0   r,  r=   r>   r?   r@   dtrA   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   r3  )r   r,  r0   r4  c                 S   s   t | |f}|j}|j}d S rM   )r   r   realimagr1  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s0rF   rH   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_randomrv   r.   c                 S      g | ]}t |d  qS )0chr.0rv   r1   r1   r2   
<listcomp>=      z6TestArrayAnalysis.test_numpy_calls.<locals>.<listcomp>c                 S   rc  1re  rg  r1   r1   r2   ri  >  rj  c                 S   rc  rk  re  rg  r1   r1   r2   ri  ?  rj  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@   rA   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   ro  r   r   rI   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   rI   )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   rm  r.   r   r   )r   r   stack)r   r0   r=   r>   r?   r@   rA   r   r   hr   rn  r1   r1   r2   
test_stacku  s   

z6TestArrayAnalysis.test_numpy_calls.<locals>.test_stackr   )r   r   r   )r   r   r0   ru  )r   r   r0   r   rn  )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   rq  )r.   r   r7   )r   dotr   )	r   r   r0   r=   r>   rA   ru  r   rn  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@   rA   r1   r1   r2   test_broadcast  s
   
z:TestArrayAnalysis.test_numpy_calls.<locals>.test_broadcastc                  S   s   t t} t t}d S rM   )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/  r2  r5  r8  rb  lastZvars1dZvars2drp  rr  rv  rw  rz  r{  r}  r1   r1   r2   test_numpy_callst  s>  



























	


H

	



















z"TestArrayAnalysis.test_numpy_callsN)r4   r5   r6   ru   r~   r   r   ry   r   r   r   r   r   r   r  r  r  r   r  r1   r1   r1   r2   rn      s$    			 W)nrn   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                    sN   t dd   fdd}zt |ddd W d S  ty&   | d Y d S w )	Nc                 S   s   || fS rM   r1   )rv   r   r1   r1   r2   swap  s   z9TestArrayAnalysisParallelRequired.test_misc.<locals>.swapc                    sD   t | }t | }t| D ]} || || \||< ||< qd S rM   )r   r   r   )r   r=   r>   r   r  r1   r2   test_bug2537  s
   

 zATestArrayAnalysisParallelRequired.test_misc.<locals>.test_bug2537TZparallelr   ztest_bug2537 raised IndexError!)r   
IndexErrorZfail)r/   r  r1   r  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_implTr  )r   assertEqualr   )r/   r  r  r1   r  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 rM   )r   r+   r   )t_objXr   r1   r1   r2   r    s   
zLTestArrayAnalysisParallelRequired.test_array_T_issue_3700.<locals>.test_implr   Tr  )r,   r   r   r+   r  r   )r/   r  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_impl1Tr  c                 S   s   |}| | S rM   r1   )r   r=   r>   r1   r1   r2   
test_impl2  r   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 )NTr  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   r    s
   

$zPTestArrayAnalysisParallelRequired.test_slice_dtype_issue_5056.<locals>.test_implg      $@)r   r   r  r  r  Zpy_func)r/   r  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   r    s   zFTestArrayAnalysisParallelRequired.test_global_tuple.<locals>.test_implTr  N)r  r   )r/   r  r1   r1   r2   r}    s   z3TestArrayAnalysisParallelRequired.test_global_tupleN)r4   r5   r6   rK   Z_numba_parallel_test_skip_unsupportedr  r  r  r  r  r}  r1   r1   r1   r2   r    s    




r  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 ]&\}}t|}| j||d | || W d    n1 sCw   Y  q"d S )NZ_analyze_op_call_c                 S   s   d S rM   r1   )r/   scoper   locra   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}z(||j|< tj  fd	d
}tdd|d}d }|d W |j|< n|j|< w tdd|d}	|| 
|d  d S )Nr   )Parfor)rQ   counterc                    s   | j }|jd dD ]}||j}t|dd  u r(t|jd dd dkr( nqd S ||}| jd }	|
d|j d  d7  < d S )Nr   r   r   rj   r0   r  r.   )rO   rS   r   r   ri   r   ra   Zget_assigneerx   rC   rD   rj   )rQ   rO   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   rP   rQ   )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>.fTr  r   )Znumba.parfors.parforr  Znumba.parforsrQ   Zarray_analysis_extensionsr   r#  r   ZassertGreaterZassertPreciseEqualr  )r/   r  rQ   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  r|  r;   rL   r\   rn   r  r  r4   mainr1   r1   r1   r2   <module>   sJ    (
0
'=      dO