o
    ;Î®ci  ã                   @   sL   d dl Z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__)ÚselfÚonnx_quantizerÚ	onnx_node©Ú	__class__© úM/tmp/pip-target-vg8gfxp4/lib/python/onnxruntime/quantization/operators/pad.pyr      s   zQPad.__init__c                    sT  | j }|jdks
J ‚| jjdk s|jd | jjvr tƒ  ¡  d S | jj|jd  }i }|jD ]}t	|ƒ}| 
|¡ q.d|vsD|d dkr÷t|jƒdkrï| jj |j¡}| jj |j¡}|d u sc|d u rjtƒ  ¡  d S | jj |jd ¡}|d urÏt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|g7  _|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 )NÚPadé   r   Úmodes   constantr   )#ÚnodeÚop_typeÚ	quantizerÚopset_versionÚinputÚquantized_value_mapr   ÚquantizeÚ	attributer   ÚupdateÚlenÚmodelÚget_initializerÚzp_nameÚ
scale_nameÚonnxÚnumpy_helperÚto_arrayÚndimÚitemr   Úactivation_qTyper   Ú
from_arrayÚremove_initializerÚadd_initializerÚ_get_quantize_input_nodesÚ	new_nodesÚoutputÚextendr   r   ÚInputÚq_name)r   r   Úquantized_input_valueÚkwargsr   ÚkvÚ	zp_tensorÚscale_tensorÚpadding_constant_initializerÚzp_arrayÚzp_valueÚscale_arrayÚscale_valueÚpadding_constant_arrayÚ quantized_padding_constant_arrayÚquantized_padding_constant_nameÚ&quantized_padding_constant_initializerÚpad_value_qnodesÚquantized_output_valuer   r   r   r      sv   


üþûûzQPad.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r
      s    r
   )ÚnumpyÚnpr%   Úquant_utilsr   r   r   r   r   Úbase_operatorr	   r
   r   r   r   r   Ú<module>   s
    