§
    kŠtjs  ã                   ó¤   — d dl Z d dlZd dlZd dlZ	 d dlmZ n# e$ r	 d dlmZ Y nw xY w e j        e	¦  «        Z
d„ Zd„ Zd„ Z G d„ d¦  «        ZdS )é    N)ÚConv1Dc                 óê   — | j         j        \  }}t          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       úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/quantize_helper.pyÚ_conv1d_to_linearr      sX   € ØœÔ+Ñ€GˆXÝŒX�_Š_˜W hÑ/Ô/€FØœÔ+Ô-×8Ò8Ñ:Ô:€F„MÔØ”{Ô'€F„KÔØ€Mó    c                 óþ   — t                                d¦  «         t          | j        ¦  «        D ]M}| j        |         }t	          |t
          ¦  «        rt          |¦  «        }|| j        |<   Œ>t          |¦  «         ŒNdS )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      s…   € õ ‡L‚LÐ-Ñ.Ô.Ð.Ý�U”^Ñ$Ô$ð %ð %ˆØ” Ô%ˆÝ�f�fÑ%Ô%ð 	%Ý& vÑ.Ô.ˆFØ#)ˆEŒN˜4Ñ Ð å˜VÑ$Ô$Ð$Ð$ð%ð %r   c                 óÀ   — t          j        |                      ¦   «         d¦  «         t          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'   +   sM   € Ý	„Jˆu×ÒÑ!Ô! 8Ñ,Ô,Ð,ÝŒ7�?Š?˜8Ñ$Ô$¨Ñ4€DÝ„IˆhÑÔÐØ€Kr   c                   óJ   — e Zd Zeej        fd„¦   «         Zedd„¦   «         ZdS )ÚQuantizeHelperc                 ó0  — t          | ¦  «         t          j                             | t          j        j        h|¬¦  «        }t                               dt          | ¦  «        › �¦  «         t                               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   s‡   € õ 	˜ÑÔÐÝÔ,×=Ò=¸eÅeÄhÄoÐEVÐ^cÐ=ÑdÔdˆÝ�ŠÐaÕ>XÐY^Ñ>_Ô>_ÐaÐaÑbÔbÐbÝ�ŠÐfÕ9SÐTcÑ9dÔ9dÐfÐfÑgÔgÐgØÐr   Fc                 óÖ  — ddl m} ddlm}  ||¦  «        j                             dd¬¦  «         t                               dt          j	         
                    | ¦  «        dz  › �¦  «          || ||dt          j        j        i¬	¦  «         t                               d
|› �¦  «         t                               dt          j	         
                    |¦  «        dz  › �¦  «         d S )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ÔLÐLÝ�ŠÐo½R¼W¿_º_È_Ñ=]Ô=]ÐalÑ=mÐoÐoÑpÔpÐpØÐØØ Ø%=Ø.µÔ0@Ô0FÐGð		
ñ 	
ô 	
ð 	
õ 	�ŠÐFÐ0DÐFÐFÑGÔGÐGå�ŠÐo½¼¿ºÐH\Ñ8]Ô8]ÐalÑ8mÐoÐoÑpÔpÐpÐpÐpr   N)F)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   Úqint8r0   rA   © r   r   r)   r)   2   s]   € € € € € ØØ*/¬+ð 
ð 
ð 
ñ „\ð
ð ðqð qð qñ „\ðqð 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Ð1Ð1Ð1Ð1Ð1Ð1øØð 3ð 3ð 3Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð3øøøð 
ˆÔ	˜8Ñ	$Ô	$€ðð ð ð%ð %ð %ðð ð ðqð qð qð qð qñ qô qð qð qð qs   ’ ™'¦'