U
    ‰d  ã                   @   s¢   d dl Z d dlmZ d dlmZ d dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlm  mZ e  ejj d¡G dd„ dejƒƒZed	krže  ¡  dS )
é    N)Úgiven)Ú
caffe2_pb2)ÚbrewÚcoreÚmodel_helperÚ	workspace)ÚoptimizeForMKLDNNzNo MKLDNN support.c                   @   s0   e Zd Zee dd¡e dd¡ddd„ ƒZdS )	ÚPreConvertTesté   é   é   é   )Úinput_channelsÚ
batch_sizec              
      sz  ‡ fdd„}dd„ }dddœ}t  tjd¡}t  |¡8 tjd	|d
}||dƒ}|||dƒ tj 	|ˆ dd¡ 
tj¡d }	tjjd|d 
tj¡}
i }i }i }t ¡ }t d|	¡ t d|
¡ t |j¡ |j ¡ jD ]D}|jdkrì qtdt|jƒƒD ]}t |j| ¡||j| < qüqØtj|jdd t|jdd t |j¡ |j ¡ jD ]"}|jD ]}t |¡||< q^qTt dd¡ t d|	¡ t d|
¡ |  ¡ D ]}t ||| ¡ q¤tj|jdd t |j¡ |  ¡ D ]}t |¡||< qà|  ¡ D ]Z}tj!|| || dddsþt"d #|¡ƒ t"t $t %|| ||  ¡¡ƒ |  &d¡ qþt '¡  t |¡ W 5 Q R X d S )Nc                    s^   t j| |dˆ dddddd	}t j| |dddddddd	}t j| |d	d
dd}t  | |d¡}|S )NÚconv1é
   r   r   )Údim_inÚdim_outÚkernelZstrideÚpadÚtraining_modeÚdeconv1é   r   Úfc1i€z  )r   r   Úsoftmax)r   ÚconvZconv_transposeZfcr   )ÚmodelÚdatar   r   r   r   ©r   © úH/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/ideep/pre_convert_test.pyÚAddModel   s         ÿ   ÿz0PreConvertTest.test_preConvert.<locals>.AddModelc                 S   s,   |   ||gd¡}|  |d¡}|  |g¡ dS )z%Adds training operators to the model.ÚxentÚlossN)ZLabelCrossEntropyZAveragedLossZAddGradientOperators)r   r   Úlabelr"   r#   r   r   r    ÚAddTrainingOperators$   s    z<PreConvertTest.test_preConvert.<locals>.AddTrainingOperatorsZNCHWF)ÚorderZno_biasr   Z
test_train)ÚnameÚ	arg_scopeÚXr$   é   g      à?r   )ÚsizeZSoftmaxr   T)Ú	overwrite)r   Z_device_check_gü©ñÒMbP?g-Cëâ6?)ZatolZrtolzblob {} error)(r   ZDeviceOptionr   ZIDEEPZDeviceScoper   ZModelHelperÚnpÚrandomZrandZastypeZfloat32ÚrandintZint32r   ZCurrentWorkspaceZFeedBlobZ
RunNetOnceZparam_init_netÚnetZProtoÚopÚtypeÚrangeÚlenÚinputZ	FetchBlobZ	CreateNetr   ZRunNetÚoutputZSwitchWorkspaceÚkeysZallcloseÚprintÚformatÚmaxÚabsÚ
assertTrueZResetWorkspace)Úselfr   r   r!   r%   r(   Z
device_optZtrain_modelr   r)   r$   Z	blob_dictZoutput_dictZoutput_dict_cosimZold_ws_namer1   ÚjZblobr   r   r    Útest_preConvert   sj    
	

   ÿÿÿ

 zPreConvertTest.test_preConvertN)Ú__name__Ú
__module__Ú__qualname__r   ÚstZintegersr?   r   r   r   r    r	      s   
ÿr	   Ú__main__)ZunittestZhypothesis.strategiesZ
strategiesrC   Z
hypothesisr   Znumpyr-   Zcaffe2.protor   Zcaffe2.pythonr   r   r   r   Zcaffe2.python.transformationsr   Z"caffe2.python.hypothesis_test_utilÚpythonZhypothesis_test_utilÚhuZskipIfÚCZ
use_mkldnnZHypothesisTestCaser	   r@   Úmainr   r   r   r    Ú<module>   s   J