U
    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__ [/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/quantization/operators/concat.pyr      s    zQLinearConcat.__init__c                    sP  | j }| j|jd \}}}}}| j|tt|j\}}}}	|rP|d krZt 	 S | jj
|jd  }
t|jd |jd t |||
j}|| jj
|jd < i }|jD ]}|t| qt|d< |jr|jd nd}||g}tt|D ] }||| || || g qt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   