U
    ‰dy  ã                   @   s¤   d dl Z d dlmZ d dlmZmZ d dlZd dl	m
Z
 d dlmZmZ d dlm  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Úsettings)Ú
caffe2_pb2)ÚcoreÚ	workspacezNo MKLDNN support.c                   @   s†   e Zd Zef e ¡ e ¡ dœej	—Že
dddd„ ƒƒZef e dd¡e dd	¡e dd	¡e ¡ d
œej—Že
ddddd„ ƒƒZdS )ÚReluTest)ÚXÚinplaceiè  )Údeadlinec                 C   sp   t  ddg|sdgndg¡}|dt |¡ 7 }||dk  d7  < |  |||gdg¡ |  |||gddg¡ d S )NÚRelur   ÚYç{®Gáz”?ç        r   )r   ÚCreateOperatorÚnpÚsignZassertDeviceChecksZassertGradientChecks)Úselfr   r	   ÚgcÚdcÚop© r   úD/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/ideep/relu_op_test.pyÚ	test_relu   s    ýzReluTest.test_relué   é	   é   é   )ÚsizeÚinput_channelsÚ
batch_sizer	   é
   N)Zmax_examplesr
   c              	   C   sF  t jddg|sdgndg|d d}tj ||||¡ tj¡d }|dt |¡ 7 }||dk  d7  < | ¡ dkrŒt 	|¡ 
¡ d	 }	d}
nt 	|¡ 
¡ d
 }	d}
t ¡ }t dd¡ t d||d ¡ t |¡ t |rÞdnd¡}t ¡  t jddgdg|d d}t jddgdgd|d |
|	d}t jddg|s<dgndgd|d d}t jd|s`dgndgdgd|d d}t jddgdg|d d}t ¡ }|j |||||g¡ t d||d ¡ t |¡ t d¡}t t ||¡¡ ¡ }|dkr8t| ¡ ƒ t| ¡ ƒ tt 
t || ¡¡ƒ td|ƒ |  d¡ t |¡ d S ) Nr   r   r   r   )Údevice_optiong      à?r   r   éÿ   é   é€   Z_device_check_TZ	NCHW2NHWCÚXiZXi_nhwcr   ZInt8QuantizeZXi_quantizedZDNNLOWP)Úenginer!   ZY_zero_pointZY_scaleZInt8ReluZY_quantized)r&   r!   ZInt8DequantizeZY_nhwcZ	NHWC2NCHWÚY_outg{®Gázt?ÚMSEF)r   r   r   ÚrandomZrandZastypeZfloat32r   ÚminÚabsoluteÚmaxr   ZCurrentWorkspaceZSwitchWorkspaceZFeedBlobZRunOperatorOnceZ	FetchBlobZResetWorkspacer   ZNetDefr   ÚextendZ
RunNetOnceZsquareÚsubtractZmeanÚprintÚflattenÚabsÚ
assertTrue)r   r   r   r   r	   r   r   Z	relu_fp32r   ZscaleZ
zero_pointZold_ws_namer   Zsw2nhwcÚquantizeZreluZ
dequantizeZsw2nchwÚnetr'   r(   r   r   r   Útest_int8_relu#   sš    ü   ÿÿÿ
üù
ûûü




zReluTest.test_int8_relu)Ú__name__Ú
__module__Ú__qualname__r   ÚhuZtensorÚstZbooleansÚmuZgcsr   r   ZintegersZgcs_cpu_ideepr5   r   r   r   r   r      s    
ÿþ

ýü
r   Ú__main__)ZunittestZhypothesis.strategiesZ
strategiesr:   Z
hypothesisr   r   Znumpyr   Zcaffe2.protor   Zcaffe2.pythonr   r   Z"caffe2.python.hypothesis_test_utilÚpythonZhypothesis_test_utilr9   Zcaffe2.python.ideep_test_utilZideep_test_utilr;   ZskipIfÚCZ
use_mkldnnZHypothesisTestCaser   r6   Úmainr   r   r   r   Ú<module>   s   p