U
    “±Ëh'  ã                   @   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__)ÚselfZonnx_quantizerZ	onnx_node©Ú	__class__© úM/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/quantization/operators/concat.pyr      s    zQLinearConcat.__init__c                    sT  | j }| j |jd ¡\}}}}}| j |tdt|jƒƒ•¡\}}}}	|rR|d kr\tƒ  	¡ S | jj
|jd  }
t|jd |jd t |||
jƒ}|| jj
|jd < i }|jD ]}| t|ƒ¡ q¬t|d< |jrØ|jd nd}||g}tdt|ƒƒD ] }| || || || g¡ qòtjjd||jg|f|Ž}| j j|	7  _| j j|g7  _d S )Nr   ÚdomainZ_quantÚ r   )ÚnodeZ	quantizerZ_get_quantization_paramsÚoutputZquantize_activationÚrangeÚlenÚinputr   ÚquantizeZquantized_value_mapr   r   Z
value_typeÚ	attributeÚupdater   r   ÚnameÚextendÚonnxÚhelperZ	make_nodeZq_nameZ	new_nodes)r   r   Z
data_foundZoutput_scale_nameZoutput_zp_nameÚ_Zq_input_namesZzero_point_namesZscale_namesZnodesZquantized_input_valueZquantized_output_valueÚkwargsr   Z
qnode_nameZqlconcat_inputsÚiZqlconcat_noder   r   r   r      sV    úû
û
   ÿÿzQLinearConcat.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      s   r   )r   Zquant_utilsr   r   r   r   r   Zbase_operatorr	   Zqdq_base_operatorr
   r   r   r   r   r   Ú<module>   s   