U
    “±Ëh…  ã                   @   sX   d dl Z ddlmZmZmZ ddlmZ ddlmZ G dd„ deƒZ	G d	d
„ d
eƒZ
dS )é    Né   )ÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargé   )ÚQuantOperatorBase)ÚQDQOperatorBasec                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚQSplitc                    s   t ƒ  ||¡ d S )N)ÚsuperÚ__init__)ÚselfZonnx_quantizerZ	onnx_node©Ú	__class__© úL/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/quantization/operators/split.pyr   	   s    zQSplit.__init__c                    s  | j }| j |dg¡\}}}}|d kr0tƒ  ¡ S d}|jrD|jd }i }|jD ]}| t|ƒ¡ qNg }	|j	D ]<}
|
d }|	 
|¡ t|
||d |d tjƒ}|| jj|
< qlt|jƒdkrÌ| |jdd … ¡ tjj|j||	|f|Ž}| 
|¡ | j j|7  _d S )Nr   Ú Z_quantZ	quantizedr   )ÚnodeÚ	quantizerZquantize_activationr
   ÚquantizeÚnameÚ	attributeÚupdater   ÚoutputÚappendr   r   ZInputZquantized_value_mapÚlenÚinputÚextendÚonnxÚhelperZ	make_nodeÚop_typeZ	new_nodes)r   r   Zquantized_input_namesZzero_point_namesZscale_namesZnodesZquantized_node_nameÚkwargsr   Zquantized_output_namesZoutput_nameZquantized_output_nameZq_outputZquantized_noder   r   r   r      sN    û




û   ÿÿ
zQSplit.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r	      s   r	   c                   @   s   e Zd Zdd„ ZdS )ÚQDQSplitc                 C   sb   | j }|jdkst‚| j |jd ¡s8| j |jd ¡ | js^|jD ]}| j ||jd ¡ qDd S )NZSplitr   )	r   r   ÚAssertionErrorr   Zis_tensor_quantizedr   Zquantize_activation_tensorZdisable_qdq_for_node_outputr   )r   r   r   r   r   r   r   7   s    
zQDQSplit.quantizeN)r!   r"   r#   r   r   r   r   r   r%   6   s   r%   )r   Zquant_utilsr   r   r   Zbase_operatorr   Zqdq_base_operatorr   r	   r%   r   r   r   r   Ú<module>   s
   .