o
    ¢ÄiP
  ã                   @   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Ú	ms_domainé   )ÚQuantOperatorBasec                       s   e Zd Z‡ fdd„Z‡  ZS )ÚQLinearSoftmaxc                    sL  | j }| jjtjjjkrd}d}nd}d}| j |jd ||¡\}}}}}| j 	|dg¡\}}	}
}|r7|d u r<t
ƒ  ¡ S |jd t }t|jd |||tjƒ}|| jj|jd < i }|jD ]	}| t|ƒ¡ q]t|d< | jj|d< |jry|jd nd}tjjd|j |d |
d |	d ||g|g|fi |¤Ž}| |¡ | j j|7  _d S )	Ng      p?r   i€ÿÿÿÚdomainZopsetZ_quantÚ ZQLinear)ÚnodeZ	quantizerZactivation_qTypeÚonnxZonnx_pbZTensorProtoZUINT8Z_get_quantization_paramsÚoutputZquantize_activationÚsuperÚquantizer   r   r   ZInputZquantized_value_mapÚ	attributeÚupdater   r   Zopset_versionÚnameÚhelperZ	make_nodeZop_typeÚappendZ	new_nodes)Úselfr   Z	out_scaleZout_zero_pointZ
data_foundZoutput_scale_nameZoutput_zp_nameÚ_Zquantized_input_namesZinput_zero_point_namesZinput_scale_namesÚnodesZqlinear_output_nameZquantized_output_valueÚkwargsr   Zqlinear_node_nameZqnode©Ú	__class__© úd/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/quantization/operators/softmax.pyr   	   sh   ú	û
û
ûöõ
zQLinearSoftmax.quantize)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__r   r   r   r   r
      s    r
   )r   Zonnx.helperZquant_utilsr   r   r   r   r   Zbase_operatorr	   r
   r   r   r   r   Ú<module>   s
    