a
    ==icl                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlm	  m
Z d dlmZ d dlmZ d dlZejdddZG d	d
 d
ejZedkre   dS )    N)core)given)	workspace)
FunctionalFc                    s   | t jdd| tdtjd  |rd tjj  tjd fddt	j  D fS t
| tjtdj  dddj  g  tjttjd fd	dt	td D fS d
S )z3Generates (axis, split_info, tensor_splits) tuples.   )	min_valuer      )Zdtypec                    s    g | ]}t j| d qS )axis)nparraytake.0i)r
   tensor n/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/functional_test.py
<listcomp>   s   z"_tensor_splits.<locals>.<listcomp>)elementsmax_sizec                    s,   g | ]$}j t| |d    dqS r   r	   )r   ranger   r
   splitsr   r   r   r   )   s   N)hur   stZintegerslenshaper   Zonesint32r   sortedlistsr   diff)ZdrawZadd_axisr   r   r   _tensor_splits   s(    "	$r#   c                   @   sz   e Zd Zef e eddgdejdd Z	ef de
 iejdd Zef e
 e d	ejd
d ZdS )TestFunctional ZCUDNN)Xenginec           
      C   s   |dt | 7 }||dk  d7  < tj||d}|d }|d }tdF tjddgd	g|d
}td| t	| t
d	}	W d    n1 s0    Y  t jj||	dd t jj||	dd d S )Ng{Gz?g        )device_optionr   Zoutput_0Ztmp_workspaceRelur&   Y)r'   Functional Relu result mismatcherr_msg)r   signr   r)   r   ZWorkspaceGuardr   ZCreateOperatorZFeedBlobZRunOperatorOnceZ	FetchBlobtestingassert_array_equal)
selfr&   r'   gcdcoutputZY_lZY_dopZY_refr   r   r   	test_relu1   s     
(zTestFunctional.test_relutensor_splitsc           
         sn   |\ }}t j| |d\}}tj| d}t fdd|D }	tjj||dd tjj||	dd d S )N)r
   r(   r	   c                    s   g | ]}|j   qS r   )r   )r   ar	   r   r   r   N       z.TestFunctional.test_concat.<locals>.<listcomp>z!Functional Concat result mismatchr,   z%Functional Concat split info mismatch)r   ZConcatr   concatenater   r/   r0   )
r1   r7   r2   r3   _r   Zconcat_result
split_infoZconcat_result_refZsplit_info_refr   r	   r   test_concatG   s    
zTestFunctional.test_concat)r7   split_as_argc                    s   |\ }}d}|r6t j| dg}t |t|d}n"t j| d|g}t t|d}tj|d|i|}	|f fdd	}
|
| }t|D ]\}}t jj|	| |dd	 qd S )
NTr	   )r
   split
num_output)r
   r@   r(   c                    s2   t dgt|  fddtt|D S )Nr   c                    s4   g | ],}t jt | |d    dqS r   )r   r   r   Zaranger   )r
   inputsr   r   r   m   s   z@TestFunctional.test_split.<locals>.split_ref.<locals>.<listcomp>)r   Zcumsumlistr   r   )rA   r?   r	   )rA   rB   r   	split_refk   s    
z,TestFunctional.test_split.<locals>.split_refr+   r,   )	r   r:   dictr   r   ZSplit	enumerater/   r0   )r1   r7   r>   r2   r3   r<   r   Zinput_tensorskwargsresultrD   Z
result_refr   refr   r	   r   
test_split\   s    

zTestFunctional.test_splitN)__name__
__module____qualname__r   r   r   r   Zsampled_fromZgcsr6   r#   r=   ZbooleansrJ   r   r   r   r   r$   0   s   "

r$   __main__)F)ZunittestZcaffe2.pythonr   Z
hypothesisr   Zhypothesis.strategies
strategiesr   Z"caffe2.python.hypothesis_test_utilpythonZhypothesis_test_utilr   r   Zcaffe2.python.functionalr   numpyr   Z	compositer#   ZHypothesisTestCaser$   rK   mainr   r   r   r   <module>   s   I