U
    “±Ëhª  ã                   @   sD   d dl Z ddlmZmZmZmZmZ ddlmZ G dd„ deƒZ	dS )é    Né   )ÚTENSOR_NAME_QUANT_SUFFIXÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargÚ	ms_domainé   )ÚQuantOperatorBasec                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚQLinearPoolc                    s   t ƒ  ||¡ d S )N)ÚsuperÚ__init__)ÚselfZonnx_quantizerZ	onnx_node©Ú	__class__© úN/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/quantization/operators/pooling.pyr      s    zQLinearPool.__init__c                    s  | j }| j |jd ¡\}}}}}| j |dg¡\}}}}	|rF|d krPtƒ  ¡ S |jd t }
t|jd |
||t	j
ƒ}|| jj|jd < i }|jD ]}| t|ƒ¡ q’t|d< |jr¾|jd nd}tjjd|j |d |d |d ||g|
g|f|Ž}|	 |¡ | j j|	7  _d S )Nr   ÚdomainZ_quantÚ ZQLinear)ÚnodeZ	quantizerZ_get_quantization_paramsÚoutputZquantize_activationr   Úquantizer   r   r   ZInputZquantized_value_mapÚ	attributeÚupdater   r   ÚnameÚonnxÚhelperZ	make_nodeZop_typeÚappendZ	new_nodes)r   r   Z
data_foundZoutput_scale_nameZoutput_zp_nameÚ_Zquantized_input_namesZinput_zero_point_namesZinput_scale_namesZnodesZqlinear_output_nameZquantized_output_valueÚkwargsr   Zqlinear_node_nameZqnoder   r   r   r      sZ    	ú	û
û
ûöõ
zQLinearPool.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r
      s   r
   )
r   Zquant_utilsr   r   r   r   r   Zbase_operatorr	   r
   r   r   r   r   Ú<module>   s   