U
    ‰dÈ  ã                   @   s¨   d dl Z d dlmZ d dlmZ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)ÚassumeÚgivenÚsettings)Ú
caffe2_pb2)ÚcoreÚ	workspacezNo MKLDNN support.c                   @   sÚ   e Zd Zef e dd¡e dd¡e dd¡e dd¡e dd¡e dd¡e ddg¡d	œej—Že	d
ddd„ ƒƒZ
ef e dd¡e dd¡e dd¡e dd¡e dd¡e dd¡e ddg¡d	œej—Ždd„ ƒZdS )ÚPoolTesté   é   r   é   é   é	   ÚMaxPoolZAveragePool)ÚstrideÚpadÚkernelÚsizeÚinput_channelsÚ
batch_sizeÚmethodi'  )Údeadlinec
              	   C   s|   t ||k ƒ tj|dgdg||||	d d}
tj ||||¡ tj¡}|  |	|
|gdg¡ d|krx|  	||
|gddg¡ d S )NÚXÚYr   ©r   r   r   Údevice_optionr   )
r   r   ÚCreateOperatorÚnpÚrandomÚrandÚastypeÚfloat32ZassertDeviceChecksZassertGradientChecks)Úselfr   r   r   r   r   r   r   ÚgcÚdcÚopr   © r%   úD/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/ideep/pool_op_test.pyÚtest_pooling   s*    ù	   ÿþzPoolTest.test_poolingc
              
   C   s  t ||k ƒ tj|dgdg||||	d d}
tj ||||¡ tj¡}| ¡ dkrjt 	|¡ 
¡ d }d}nt 	|¡ 
¡ d }d}t ¡ }t dd	¡ t d||	d ¡ t |
¡ t 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dg|||d|	d d}tjd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rt| ¡ ƒ t| ¡ ƒ tt 
t || ¡¡ƒ td|ƒ |  d¡ t |¡ d S )Nr   r   r   r   éÿ   é   é€   Z_device_check_TZ	NCHW2NHWCÚXiZXi_nhwcr	   )r   ZInt8QuantizeZXi_quantizedZDNNLOWP)Úenginer   ZY_zero_pointZY_scalezInt8{}ZY_quantized)r   r   r   r,   r   ZInt8DequantizeZY_nhwc)r,   r   Z	NHWC2NCHWÚY_outg{®Gázt?ÚMSEF)r   r   r   r   r   r   r   r    ÚminÚabsoluteÚmaxr   ZCurrentWorkspaceZSwitchWorkspaceZFeedBlobZRunOperatorOnceZ	FetchBlobZResetWorkspaceÚformatr   ZNetDefr$   ÚextendZ
RunNetOnceZsquareÚsubtractZmeanÚprintÚflattenÚabsÚ
assertTrue)r!   r   r   r   r   r   r   r   r"   r#   Z	pool_fp32r   ZscaleZ
zero_pointZold_ws_namer   Zsw2nhwcÚquantizeÚpoolZ
dequantizeZsw2nchwÚnetr-   r.   r%   r%   r&   Útest_int8_pooling0   s     ù	   ÿÿ

üù
øûü




zPoolTest.test_int8_poolingN)Ú__name__Ú
__module__Ú__qualname__r   ÚstZintegersZsampled_fromÚmuZgcsr   r'   Zgcs_cpu_ideepr<   r%   r%   r%   r&   r      s.   




úù




úùr   Ú__main__)ZunittestZhypothesis.strategiesZ
strategiesr@   Z
hypothesisr   r   r   Znumpyr   Zcaffe2.protor   Zcaffe2.pythonr   r   Z"caffe2.python.hypothesis_test_utilÚpythonZhypothesis_test_utilÚhuZcaffe2.python.ideep_test_utilZideep_test_utilrA   ZskipIfÚCZ
use_mkldnnZHypothesisTestCaser   r=   Úmainr%   r%   r%   r&   Ú<module>   s    