o
    
jJ                     @   s`   d dl Z ddlmZmZ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   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwarg	ms_domain   )QuantOperatorBase)QDQOperatorBasec                       s4   e Zd Z fddZ fddZ fddZ  ZS )QLinearActivationc                       t  || d S Nsuper__init__selfonnx_quantizer	onnx_node	__class__ `/home/kuhnn/.local/lib/python3.10/site-packages/onnxruntime/quantization/operators/activation.pyr   	      zQLinearActivation.__init__c                    sj   | j }|jdks|jdksJ |jd | jjvs| jjr!t  S | jj|jd  }|| jj|jd < d S )NReluClipr   )	nodeop_typeinput	quantizerquantized_value_mapis_activation_symmetricr   quantizeoutput)r   r   quantized_valuer   r   r   QuantizeClipRelu   s   
z"QLinearActivation.QuantizeClipReluc                    s~  | j }|jdks|jdkr|   d S d}|jdko%|| jjv o%| jj| }|r*dnd }|r0dnd }| j|jd ||\}}}}	}	| j|dg\}
}}}|rT|
d u rYt 	 S |jd t
 }d}|jrj|jd }i }|jD ]	}|t| qot|d	< |
d |d |d ||g}tjjd
|j ||g|fi |}t|jd |||tj}|| jj|jd < || | j j|7  _d S )Nr   r   zextra.Sigmoid.nnapiSigmoidg      p?r    _quantdomainQLinear)r   r   r%   r   extra_options_get_quantization_paramsr#   quantize_activationr   r"   r   name	attributeupdater   r   onnxhelper	make_noder   r   Inputr    append	new_nodes)r   r   nnapi_sigmoid_optionsigmoid_nnapi_mode	use_scaleuse_zeropoint
data_foundoutput_scale_nameoutput_zp_name_quantized_input_nameszero_point_namesscale_namesnodesqlinear_activation_outputqlinear_activation_namekwargsr/   qlinear_activation_inputsqlinear_activation_nodeq_outputr   r   r   r"      sv   






	
zQLinearActivation.quantize)__name__
__module____qualname__r   r%   r"   __classcell__r   r   r   r   r      s    r   c                       s$   e Zd Z fddZdd Z  ZS )QDQRemovableActivationc                    r   r   r   r   r   r   r   r   c   r   zQDQRemovableActivation.__init__c                 C   s   | j }| j|jd sd S | jjs+| jjs+| j|jd |jd r+| j| j  n	| j	|jd  | j
sB| j	|jd  d S d S )Nr   )r   r   is_tensor_quantizedr   r!   qdq_keep_removable_activationstry_replacing_upstream_outputr#   remove_nodequantize_activation_tensordisable_qdq_for_node_output)r   r   r   r   r   r"   f   s   zQDQRemovableActivation.quantize)rI   rJ   rK   r   r"   rL   r   r   r   r   rM   b   s    rM   )r1   quant_utilsr   r   r   r   r   base_operatorr	   qdq_base_operatorr
   r   rM   r   r   r   r   <module>   s    Z