U
    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__ X/var/www/html/venv/lib/python3.8/site-packages/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r>t|jdkr|jd 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rN| n|d }tj|}t| jj|||
}|jd t }tj||}| jj| | jj| ||jd< nD| jj|d| jj|j|j|jd}| jj| |d j d |jd< n@t|jdkr|j!|j n |jd dks2t|j|jd< 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    )Zinitial_type)&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	data_typeZ	new_nodesextendoutputappendr   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      s~    

 

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   