Ë
    ÝÍ:jJ  ã                   ól   — 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e«      Z G d	„ d
e
«      Zy)é    Né   )ÚTENSOR_NAME_QUANT_SUFFIXÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargÚ	ms_domainé   )ÚQuantOperatorBase)ÚQDQOperatorBasec                   ó2   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚQLinearActivationc                 ó&   •— t         ‰| �  ||«       y ©N©ÚsuperÚ__init__©ÚselfÚonnx_quantizerÚ	onnx_nodeÚ	__class__s      €ú‚/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/quantization/operators/activation.pyr   zQLinearActivation.__init__	   ó   ø€ Ü‰Ñ˜¨Õ3ó    c                 óˆ  •— | 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   <   y )NÚReluÚClipr   )	ÚnodeÚop_typeÚinputÚ	quantizerÚquantized_value_mapÚis_activation_symmetricr   ÚquantizeÚoutput)r   r   Úquantized_valuer   s      €r   ÚQuantizeClipReluz"QLinearActivation.QuantizeClipRelu   s—   ø€ Ø�y‰yˆØ�|‰|˜vÒ%¨¯©¸Ò)?Ð?Ð?ð �:‰:�a‰= §¡× BÑ BÑBÀdÇnÁn×FlÒFlÜ‘7Ñ#Ó%Ð%àŸ.™.×<Ñ<¸T¿Z¹ZÈ¹]ÑKˆØ=Lˆ�‰×*Ñ*¨4¯;©;°q©>Ò:r   c                 ó<  •— | j                   }|j                  dk(  s|j                  dk(  r| j                  «        y d}|j                  dk(  xr3 || j                  j                  v xr | j                  j                  |   }|rdnd }|rdnd }| j                  j                  |j                  d   ||«      \  }}}}	}	| j                  j                  |dg«      \  }
}}}|r|
€t        ‰| �%  «       S |j                  d   t        z   }d}|j                  r|j                  dz   }i }|j                  D ]  }|j                  t        |«      «       Œ t        |d	<   |
d   |d   |d   ||g}t!        j"                  j$                  d
|j                  z   ||g|fi |¤Ž}t'        |j                  d   |||t(        j*                  «      }|| j                  j,                  |j                  d   <   |j/                  |«       | j                  xj0                  |z  c_        y )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Úkwargsr2   Úqlinear_activation_inputsÚqlinear_activation_nodeÚq_outputr   s                        €r   r$   zQLinearActivation.quantize   s0  ø€ Ø�y‰yˆØ�<‰<˜6Ò! T§\¡\°VÒ%;Ø×!Ñ!Ô#Øà4Ðà�L‰L˜IÑ%ò CØ$¨¯©×(DÑ(DÐDòCà—‘×,Ñ,Ð-AÑBð 	ñ
 "4‘I¸ˆ	Ù/™°Tˆð �N‰N×3Ñ3°D·K±KÀ±NÀIÈ}Ó]ñ	
ØØØØØð �N‰N×.Ñ.¨t°a°SÓ9ñ	
Ø!ØØØáÐ2Ð:Ü‘7Ñ#Ó%Ð%à$(§K¡K°¡NÔ5MÑ$MÐ!Ø"$ÐØ�9Š9Ø&*§i¡i°(Ñ&:Ð#ØˆØŸ™ò 	9ˆIØ�M‰MÔ,¨YÓ7Õ8ð	9ä$ˆˆxÑð " !Ñ$Ø˜‰NØ˜QÑØØð%
Ð!ô #'§+¡+×"7Ñ"7Ø˜Ÿ™Ñ$Ø%Ø&Ð'Ø#ñ	#
ð
 ñ#
Ðô "Ø�K‰K˜‰NØ%ØØÜ×$Ñ$ó
ˆð >Fˆ�‰×*Ñ*¨4¯;©;°q©>Ñ:à�‰Ð,Ô-Ø�‰× Ò  EÑ)Ö r   )Ú__name__Ú
__module__Ú__qualname__r   r'   r$   Ú__classcell__©r   s   @r   r   r      s   ø„ ô4ôM÷E*ð E*r   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚQDQRemovableActivationc                 ó&   •— t         ‰| �  ||«       y r   r   r   s      €r   r   zQDQRemovableActivation.__init__c   r   r   c                 ó8  — | j                   }| j                  j                  |j                  d   «      sy | j                  j                  sr| j                  j
                  s\| j                  j                  |j                  d   |j                  d   «      r&| j                  j                  | j                   «       n(| j                  j                  |j                  d   «       | j                  s)| j                  j                  |j                  d   «       y y )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   s     r   r$   zQDQRemovableActivation.quantizef   sÃ   € Ø�y‰yˆð �~‰~×1Ñ1°$·*±*¸Q±-Ô@Øð —‘×6Ò6Ø—N‘N×AÒAØ—‘×<Ñ<¸T¿Z¹ZÈ¹]ÈDÏKÉKÐXYÉNÔ[à�N‰N×&Ñ& t§y¡yÕ1à�N‰N×5Ñ5°d·j±jÀ±mÔDà×/Ò/Ø�N‰N×5Ñ5°d·k±kÀ!±nÕEð 0r   )rL   rM   rN   r   r$   rO   rP   s   @r   rR   rR   b   s   ø„ ô4öFr   rR   )r4   Úquant_utilsr   r   r   r   r   Úbase_operatorr
   Úqdq_base_operatorr   r   rR   © r   r   ú<module>r_      s2   ðÛ ç uÕ uÝ ,Ý .ôW*Ð)ô W*ôtF˜_õ Fr   