U
    “±Ëh¨	  ã                   @   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__© úP/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/quantization/operators/binary_op.pyr   	   s    zQLinearBinaryOp.__init__c                    sl  | j }| j |jd ¡\}}}}}| j |ddg¡\}}}}	|rH|d krRtƒ  ¡ S |jd t }
|jrp|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|Ž}|	 |¡ 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_namesZ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   