U
    h\                     @   sD   d dl 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   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwargquantize_nparray   )QuantOperatorBasec                       s(   e Zd Z fddZ fddZ  ZS )QPadc                    s   t  || d S )N)super__init__)selfZonnx_quantizerZ	onnx_node	__class__ J/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/quantization/operators/pad.pyr      s    zQPad.__init__c                    s^  | j }|jdkst| jjdk s2|jd | jjkr@t   d S | jj|jd  }i }|j	D ]}t
|}|| q\d|ks|d dkrt|jdkr| jj|j}| jj|j}|d ks|d krt   d S | jj|jd }|d k	rtj|}	|	jdkr|	 n|	d }
tj|}|jdkr>| n|d }tj|}t| jj|||
}|jd t }tj||}| jj| | jj| ||jd< n>| j|d| jj|j|j}| jj| |d jd |jd< n|j|jg t |jd |jd t |j|jt!j"}|| jj|jd < |j#|jd< |j#|jd< | j j|g7  _d S )NZPad   r   modes   constantr   )$nodeZop_typeAssertionErrorZ	quantizerZopset_versioninputZquantized_value_mapr   quantize	attributer   updatelenmodelZget_initializerZzp_nameZ
scale_nameonnxZnumpy_helperZto_arrayndimitemr   Zactivation_qTyper   Z
from_arrayZremove_initializerZadd_initializerZ_get_quantize_input_nodesZ	new_nodesextendoutputr   r   ZInputZq_name)r   r   Zquantized_input_valuekwargsr   kvZ	zp_tensorZscale_tensorZpadding_constant_initializerZzp_arrayZzp_valueZscale_arrayZscale_valueZpadding_constant_arrayZ quantized_padding_constant_arrayZquantized_padding_constant_nameZ&quantized_padding_constant_initializerZpad_value_qnodesZquantized_output_valuer   r   r   r      sv    



zQPad.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	   r
   r   r   r   r   <module>   s   