U
    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__ ^/var/www/html/venv/lib/python3.8/site-packages/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   