o
    ²3Ih!  ã                   @   sP   d dl Z ddlmZmZmZmZmZ ddl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é   )ÚQuantOperatorBase)ÚQDQOperatorBasec                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚQLinearConcatc                    s   t ƒ  ||¡ d S )N)ÚsuperÚ__init__)ÚselfÚonnx_quantizerÚ	onnx_node©Ú	__class__© úi/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/onnxruntime/quantization/operators/concat.pyr      s   zQLinearConcat.__init__c                    sV  | j }| j |jd ¡\}}}}}| j |g tt|jƒƒ¢¡\}}}}	|r)|d u r.tƒ  	¡ S | jj
|jd  }
t|jd |jd t |||
jƒ}|| jj
|jd < i }|jD ]	}| t|ƒ¡ qVt|d< |jrl|jd nd}||g}tt|ƒƒD ]}| || || || g¡ qxtjjd||jg|fi |¤Ž}| j j|	7  _| j j|g7  _d S )Nr   ÚdomainÚ_quantÚ r   )ÚnodeÚ	quantizerÚ_get_quantization_paramsÚoutputÚquantize_activationÚrangeÚlenÚinputr   ÚquantizeÚquantized_value_mapr   r   Ú
value_typeÚ	attributeÚupdater   r   ÚnameÚextendÚonnxÚhelperÚ	make_nodeÚq_nameÚ	new_nodes)r   r   Ú
data_foundÚoutput_scale_nameÚoutput_zp_nameÚ_Úq_input_namesÚzero_point_namesÚscale_namesÚnodesÚquantized_input_valueÚquantized_output_valueÚkwargsr#   Ú
qnode_nameÚqlconcat_inputsÚiÚqlconcat_noder   r   r   r       sP   úû
û
ÿÿzQLinearConcat.quantize)Ú__name__Ú
__module__Ú__qualname__r   r    Ú__classcell__r   r   r   r   r      s    r   )r'   Úquant_utilsr   r   r   r   r   Úbase_operatorr	   Úqdq_base_operatorr
   r   r   r   r   r   Ú<module>   s
    