o
    ¢Äi¨	  ã                   @   sP   d dl Z d dl m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)Úonnx_pbé   )Ú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 )ÚQLinearBinaryOpc                    s   t ƒ  ||¡ d S )N)ÚsuperÚ__init__)ÚselfZonnx_quantizerZ	onnx_node©Ú	__class__© úf/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/quantization/operators/binary_op.pyr   	   s   zQLinearBinaryOp.__init__c                    sp  | j }| j |jd ¡\}}}}}| j |ddg¡\}}}}	|r$|d u r)tƒ  ¡ S |jd t }
|jr8|jd nd}i }|j	D ]	}| 
t|ƒ¡ q?t|d< g }| |d ¡ | |d ¡ | |d ¡ | |d ¡ | |d ¡ | |d ¡ | |¡ | |¡ tjjd|j ||
g|fi |¤Ž}|	 |¡ t|jd |
||tjƒ}|| jj|jd < | j j|	7  _d S )Nr   r	   Z_quantÚ ÚdomainZQLinear)ÚnodeZ	quantizerZ_get_quantization_paramsÚoutputZquantize_activationr   Úquantizer   ÚnameÚ	attributeÚupdater   r   ÚappendÚonnxÚhelperZ	make_nodeZop_typer   r   ZInputZquantized_value_mapZ	new_nodes)r   r   Z
data_foundZoutput_scale_nameZoutput_zp_nameÚ_Zquantized_input_namesZzero_point_namesZscale_namesÚnodesZqlinear_binary_math_outputZqlinear_binary_math_nameÚkwargsr   Zqlinear_binary_math_inputsZqlinear_binary_math_nodeZq_outputr   r   r   r      sb   úû



üû
ûzQLinearBinaryOp.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      s    r   )r   r   Z
onnx_protoZquant_utilsr   r   r   r   r   Zbase_operatorr
   r   r   r   r   r   Ú<module>   s
    