Ë
    ÝÍ:js  ã                   óž   — d dl Z d dlZd dlZd dlZ	 d dlmZ  e j                  e	«      Z
d„ Zd„ Zd„ Z G d„ d«      Zy# e$ r	 d dlmZ Y Œ3w xY w)é    N)ÚConv1Dc                 ó<  — | j                   j                  \  }}t        j                  j	                  ||«      }| j                   j
                  j                  j                  «       |j                   _        | j                  j
                  |j                  _        |S )N)	ÚweightÚshapeÚtorchÚnnÚLinearÚdataÚTÚ
contiguousÚbias)ÚmoduleÚin_sizeÚout_sizeÚlinears       ú}/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/transformers/quantize_helper.pyÚ_conv1d_to_linearr      sj   € ØŸ™×+Ñ+Ñ€GˆXÜ�X‰X�_‰_˜W hÓ/€FØŸ™×+Ñ+×-Ñ-×8Ñ8Ó:€F‡M�MÔØ—{‘{×'Ñ'€F‡K�KÔØ€Mó    c                 óì   — t         j                  d«       t        | j                  «      D ]G  }| j                  |   }t	        |t
        «      rt        |«      }|| j                  |<   Œ=t        |«       ŒI y)zsin-place
    This is for Dynamic Quantization, as Conv1D is not recognized by PyTorch, convert it to nn.Linear
    zreplace Conv1D with LinearN)ÚloggerÚdebugÚlistÚ_modulesÚ
isinstancer   r   Úconv1d_to_linear)ÚmodelÚnamer   r   s       r   r   r      sa   € ô ‡L�LÐ-Ô.Ü�U—^‘^Ó$ò %ˆØ—‘ Ñ%ˆÜ�fœfÔ%Ü& vÓ.ˆFØ#)ˆE�N‰N˜4Ò ä˜VÕ$ñ%r   c                 ó¼   — t        j                  | j                  «       d«       t        j                  j                  d«      dz  }t        j                  d«       |S )Nztemp.pé   )r   ÚsaveÚ
state_dictÚosÚpathÚgetsizeÚremove)r   Úsizes     r   Ú_get_size_of_pytorch_modelr'   +   sA   € Ü	‡J�Jˆu×ÑÓ! 8Ô,Ü�7‰7�?‰?˜8Ó$¨Ñ4€DÜ‡I�IˆhÔØ€Kr   c                   óF   — e Zd Zeej
                  fd„«       Zedd„«       Zy)ÚQuantizeHelperc                 ó  — t        | «       t        j                  j                  | t        j                  j
                  h|¬«      }t        j                  dt        | «      › �«       t        j                  dt        |«      › �«       |S )z{
        Usage: model = quantize_model(model)

        TODO: mix of in-place and return, but results are different
        )Údtypez'Size of full precision Torch model(MB):z"Size of quantized Torch model(MB):)	r   r   ÚquantizationÚquantize_dynamicr   r	   r   Úinfor'   )r   r+   Úquantized_models      r   Úquantize_torch_modelz#QuantizeHelper.quantize_torch_model3   ss   € ô 	˜ÔÜ×,Ñ,×=Ñ=¸eÄeÇhÁhÇoÁoÐEVÐ^cÐ=ÓdˆÜ�‰Ð=Ô>XÐY^Ó>_Ð=`ÐaÔbÜ�‰Ð8Ô9SÐTcÓ9dÐ8eÐfÔgØÐr   c                 ó¾  — ddl m} ddlm}  ||«      j                  j                  dd¬«       t        j                  dt        j                  j                  | «      dz  › �«        || ||dt        j                  j                  i¬	«       t        j                  d
|› �«       t        j                  dt        j                  j                  |«      dz  › �«       y )Nr   )ÚPath)r-   T)ÚparentsÚexist_okz&Size of full precision ONNX model(MB):r   ÚDefaultTensorType)Úuse_external_data_formatÚextra_optionszquantized model saved to:z!Size of quantized ONNX model(MB):)Úpathlibr2   Úonnxruntime.quantizationr-   ÚparentÚmkdirr   r.   r"   r#   r$   ÚonnxÚTensorProtoÚFLOAT)Úonnx_model_pathÚquantized_model_pathr6   r2   r-   s        r   Úquantize_onnx_modelz"QuantizeHelper.quantize_onnx_model@   sµ   € å å=áÐ!Ó"×)Ñ)×/Ñ/¸ÀtÐ/ÔLÜ�‰Ð<¼R¿W¹W¿_¹_È_Ó=]ÐalÑ=mÐ<nÐoÔpÙØØ Ø%=Ø.´×0@Ñ0@×0FÑ0FÐGõ		
ô 	�‰Ð/Ð0DÐ/EÐFÔGä�‰Ð7¼¿¹¿¹ÐH\Ó8]ÐalÑ8mÐ7nÐoÕpr   N)F)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   Úqint8r0   rA   © r   r   r)   r)   2   s1   „ ØØ*/¯+©+ò 
ó ð
ð òqó ñqr   r)   )Úloggingr"   r<   r   Útransformers.pytorch_utilsr   ÚImportErrorÚtransformers.modeling_utilsÚ	getLoggerrB   r   r   r   r'   r)   rG   r   r   ú<module>rM      s_   ðó Û 	ã Û ð3Ý1ð 
ˆ×	Ñ	˜8Ó	$€òò%ò÷qò qøðG ò 3ß2ð3ús   ’> ¾AÁA