+
    G-j#  ã                   ó|   € ^ RI t ^ RIt^ RIt^ RIt^ RIHt ] P                  ! ]4      tR t	R t
R t ! R R4      tR# )é    N)ÚConv1Dc                 ó8  € V P                   P                  w  r\        P                  P	                  W4      pV P                   P
                  P                  P                  4       VP                   n        V P                  P
                  VP                  n        V# )N)	ÚweightÚshapeÚtorchÚnnÚLinearÚdataÚTÚ
contiguousÚbias)ÚmoduleÚin_sizeÚout_sizeÚlinears   &   Úy/Volumes/fast/ai/experiments/nudenet-smoke/.venv/lib/python3.14/site-packages/onnxruntime/transformers/quantize_helper.pyÚ_conv1d_to_linearr      sf   € ØŸ™×+Ñ+Ñ€GÜ�X‰X�_‰_˜WÓ/€FØŸ™×+Ñ+×-Ñ-×8Ñ8Ó:€F‡M�MÔØ—{‘{×'Ñ'€F‡K�KÔØ€Mó    c                ó  € \         P                  R4       \        V P                  4       FR  pV P                  V,          p\	        V\
        4      '       d   \        V4      pW0P                  V&   KG  \        V4       KT  	  R# )zkin-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Ø#)�N‰N˜4Ó ä˜VÖ$ó %r   c                 óÈ   € \         P                  ! V P                  4       R 4       \        P                  P                  R 4      R,          p\        P                  ! R 4       V# )z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                   ó^   a € ] tR t^.t o ]]P                  3R l4       t]RR l4       tRt	V t
R# )ÚQuantizeHelperc                ó  € \        V 4       \        P                  P                  V \        P                  P
                  0VR7      p\        P                  R\        V 4       24       \        P                  R\        V4       24       V# )zc
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_modelÚ#QuantizeHelper.quantize_torch_model/   ss   € ô 	˜ÔÜ×,Ñ,×=Ñ=¸eÄeÇhÁhÇoÁoÐEVÐ^cÐ=ÓdˆÜ�‰Ð=Ô>XÐY^Ó>_Ð=`ÐaÔbÜ�‰Ð8Ô9SÐTcÓ9dÐ8eÐfÔgØÐr   c                óÐ  € ^ RI Hp ^ RIHp V! V4      P                  P                  RRR7       \        P                  R\        P                  P                  V 4      R,           24       V! V VVR\        P                  P                  /R7       \        P                  RV 24       \        P                  R	\        P                  P                  V4      R,           24       R
# )r   )ÚPath)r-   T)ÚparentsÚexist_okz&Size of full precision ONNX model(MB):ÚDefaultTensorType)Úuse_external_data_formatÚextra_optionszquantized model saved to:z!Size of quantized ONNX model(MB):Nr   )Úpathlibr3   Úonnxruntime.quantizationr-   ÚparentÚmkdirr   r.   r"   r#   r$   ÚonnxÚTensorProtoÚFLOAT)Úonnx_model_pathÚquantized_model_pathr7   r3   r-   s   &&&  r   Úquantize_onnx_modelÚ"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__Ú__firstlineno__Ústaticmethodr   Úqint8r0   rB   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r)   r)   .   s4   ø‡ € ØØ*/¯+©+ó 
ó ð
ð óqó öqr   r)   )Úloggingr"   r=   r   Útransformers.modeling_utilsr   Ú	getLoggerrE   r   r   r   r'   r)   rD   r   r   Ú<module>rQ      sA   ðó Û 	ã Û Ý .à	×	Ò	˜8Ó	$€òò%ò÷qó qr   