o
    ¢Äiª  ã                   @   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__© úd/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/quantization/operators/pooling.pyr      s   zQLinearPool.__init__c                    s  | j }| j |jd ¡\}}}}}| j |dg¡\}}}}	|r#|d u r(tƒ  ¡ S |jd t }
t|jd |
||t	j
ƒ}|| jj|jd < i }|jD ]	}| t|ƒ¡ qIt|d< |jr_|jd nd}tjjd|j |d |d |d ||g|
g|fi |¤Ž}|	 |¡ | 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_namesÚ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    