o
    ™º¥g¨	  ã                   @   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__)ÚselfÚonnx_quantizerÚ	onnx_node©Ú	__class__© úc/var/www/visachat/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	   Ú_quantÚ ÚdomainÚQLinear)ÚnodeÚ	quantizerÚ_get_quantization_paramsÚoutputÚquantize_activationr   Úquantizer   ÚnameÚ	attributeÚupdater   r   ÚappendÚonnxÚhelperÚ	make_nodeÚop_typer   r   ÚInputÚquantized_value_mapÚ	new_nodes)r   r   Ú
data_foundÚoutput_scale_nameÚoutput_zp_nameÚ_Úquantized_input_namesÚzero_point_namesÚscale_namesÚnodesÚqlinear_binary_math_outputÚqlinear_binary_math_nameÚkwargsr    Úqlinear_binary_math_inputsÚqlinear_binary_math_nodeÚq_outputr   r   r   r      sb   úû



üû
ûzQLinearBinaryOp.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      s    r   )r#   r   Ú
onnx_protoÚquant_utilsr   r   r   r   r   Úbase_operatorr
   r   r   r   r   r   Ú<module>   s
    