U
    ‰d‡  ã                   @   sp   d dl mZmZ d dl mZ d dlm  mZ d dl	m
Z
 d dlZd dlmZ d dlmZ G dd„ dejƒZdS )é    )ÚcoreÚ	workspace)Ú	test_utilN)Útranspose_network)Úgivenc                
   @   sh   e Zd Zdd„ Zdd„ Zee dd¡e dd¡e dd	¡e dd	¡e d
d¡e dd¡ddd„ ƒZdS )ÚTestNomnigraphTransformationsc                 C   sØ   t  d¡}| ddgdg¡ t |¡}|jd }| t jddgdgdd¡}| ||¡ | 	|¡ | 
¡ }t ¡  t dt d	d
dg¡¡ t dt d	d
dg¡¡ t |¡ t d¡}t d
ddg¡}tj ||¡ d S )NÚnameÚXÚWÚYr   ÚAddZCUDNN)Zengineé   é   é   é   é   )r   ÚNetZFCÚngÚNNModuleÚcontrolFlowZ
createNodeZCreateOperatorZreplaceNodeZ
deleteNodeÚconvertToCaffe2Protor   ÚResetWorkspaceÚFeedBlobÚnpÚarrayÚ
RunNetOnceÚ	FetchBlobÚtestingÚassert_almost_equal)ÚselfÚnetÚnnZfcÚaddÚ
new_netdefÚoutÚexpected_out© r&   úQ/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/nomnigraph_transformations_test.pyÚtest_simple_replace   s    





z1TestNomnigraphTransformations.test_simple_replacec                 C   sœ  t  d¡}| ddgdg¡ | ddgdg¡ t |¡}|jd }|jd }|jd }|jd }|jd }|jd }|jd }	| 	||¡ | 	||¡ | 	||¡ | 	||¡ | 	||¡ | 	||	¡ | 
||¡ | 
||¡ | 
||¡ | 
||¡ | 
||¡ | 
||	¡ | ¡ }
t ¡  t dt dddg¡¡ t dt d	d	d	g¡¡ t dt d
d
d
g¡¡ t |
¡ t d¡}t dddg¡}tj ||¡ d S )Nr   ÚaÚbÚcÚdÚer   r   r   r   é   )r   r   ZMulr   r   r   r   ÚinputsÚoutputsZ
deleteEdgeZ
createEdger   r   r   r   r   r   r   r   r   r   )r   r    r!   Úmulr"   r)   r*   r+   r,   r-   r#   r$   r%   r&   r&   r'   Útest_simple_rewire$   s@    










z0TestNomnigraphTransformations.test_simple_rewireé   é   r   é
   é   r   iÿÿ  r   é   )Ú
batch_sizeÚchannelsÚheightÚwidthÚseedÚkernelc              	   C   sz  t  d¡}|jdddgdgdd|d |jdd	d
gdgdd|d |jdddgdgdd|d |jdddgdgdd|d | dgd¡ | dgd¡ | dgd¡ |jdddgddgddd tj |¡ t 	¡  t
 d||||¡ t
 dd	gd| |||¡ t
 dd
gd| ¡ t
 ddgd| d| ||¡ t
 ddgd| ¡ ddd	dd
ddddg	}t |¡}	t |¡ t d¡}
t d¡}t d¡}t |¡}t|jƒ}t|jƒ}t|ƒ | ¡ }t|jƒ}t|jƒ}|  ||d d¡ |  ||d d¡ t 	¡  t||	ƒD ]\}}t ||¡ qt |¡ t d¡}t d¡}t d¡}tj ||
d¡ tj ||d¡ tj ||d¡ d S )Nr    r	   Zw1Zb1Zc1r   r   )ZstrideÚpadr=   Zw2Zb2Úc2Zw3Zb3Úc3Zw4Zb4Zc4Zc3fZc4fZXfr$   Z
split_info)ZaxisZadd_axisr   r   é	   zexpected 9 additional operatorszexpected 9 additional tensors)r   r   ZConvZFlattenZConcatr   Úrandomr<   r   r   ÚtuZrandBlobFloat32ZrandBlobsFloat32Z
FetchBlobsr   r   r   r   ÚlenÚ	operatorsZtensorsr   r   ÚassertEqualÚzipr   r   r   )r   r8   r9   r:   r;   r<   r=   r    Zall_inp_namesZ	all_inputZpreTransformC1ZpreTransformC3ZpreTransformOutr!   ZpreTransformNumOperatorsZpreTransformNumTensorsr#   ZpostTransformNumOperatorsZpostTransformNumTensorsr   ÚvalZpostTransformC1ZpostTransformC3ZpostTransformOutr&   r&   r'   Útest_transpose_networkR   s^    











þþ



z4TestNomnigraphTransformations.test_transpose_networkN)	Ú__name__Ú
__module__Ú__qualname__r(   r2   r   ÚstZintegersrI   r&   r&   r&   r'   r      s   .





úr   )Zcaffe2.pythonr   r   r   rC   Zcaffe2.python.nomnigraphÚpythonZ
nomnigraphr   Z(caffe2.python.nomnigraph_transformationsr   Znumpyr   Z
hypothesisr   Zhypothesis.strategiesZ
strategiesrM   ZTestCaser   r&   r&   r&   r'   Ú<module>   s   