Ë
    ÝÍ:j(  ã                   ó
  — d dl Z d dlZd dlZddlmZ  ej
                  e«      Zd„ Zedk(  �rV e«       Z	e	j                  r:e	j                  r.e	j                  r"ej                  d«        ej                  «        e	j                  s.e	j                  r"ej                  d«        ej                  «        ej!                  de	j"                  «       ej!                  d	e	j$                  «        ee	j"                  e	j$                  e	j                  e	j                  e	j                  e	j&                  e	j(                  e	j*                  e	j,                  e	j                  e	j.                  e	j0                  e	j2                  «       yy)
é    Né   )Úquant_pre_processc                  óš  — t        j                  d¬«      } | j                  ddd¬«       | j                  ddd¬«       | j                  d	t        d
d¬«       | j                  dt        d
d¬«       | j                  dt        d
d¬«       | j                  dddd
¬«       | j                  ddt        d¬«       | j                  dddd
¬«       | j                  ddt        d¬«       | j                  dddd
¬«       | j                  d d!dd
¬«       | j                  d"d#d ¬$«       | j                  d%d&t        d'¬«       | j                  «       S )(NaÜ  Model optimizer and shape inferencer, in preparation for quantization,
Consists of three optional steps:
1. Symbolic shape inference (best for transformer models).
2. Model optimization.
3. ONNX shape inference.

Model quantization with QDQ format, i.e. inserting QuantizeLinear/DeQuantizeLinear on
the tensor, requires tensor shape information to perform its best. Currently, shape inferencing
works best with optimized model. As a result, it is highly recommended to run quantization
on optimized model with shape information. This is the tool for optimization and shape
inferencing.

Essentially this tool performs the following three (skippable) steps:

1. Symbolic shape inference.
2. Model optimization
3. ONNX shape inference)Údescriptionz--inputTzPath to the input model file)ÚrequiredÚhelpz--outputzPath to the output model filez--skip_optimizationFz°Skip model optimization step if true. It's a known issue that ORT optimization has difficulty with model size greater than 2GB, rerun with this option to get around this issue.)ÚtypeÚdefaultr   z--skip_onnx_shapezåSkip ONNX shape inference. Symbolic shape inference is most effective with transformer based models. Skipping all shape inferences may reduce the effectiveness of quantization, as a tensor with unknown shape can not be quantized.z--skip_symbolic_shapezéSkip symbolic shape inference. Symbolic shape inference is most effective with transformer based models. Skipping all shape inferences may reduce the effectiveness of quantization, as a tensor with unknown shape can not be quantized.z--auto_mergez:Automatically merge symbolic dims when confliction happensÚ
store_true)r   Úactionr
   z	--int_maxzGmaximum value for integer to be treated as boundless for ops like sliceiÿÿÿ)r   r	   r
   z--guess_output_rankz;guess output rank to be the same as input 0 for unknown opsz	--verbosezHPrints detailed logs of inference, 0: turn off, 1: warnings, 3: detailedr   z--save_as_external_dataz%Saving an ONNX model to external dataz--all_tensors_to_one_filez(Saving all the external data to one filez--external_data_locationz+The file location to save the external file)r   r
   z--external_data_size_thresholdz$The size threshold for external datai   )ÚargparseÚArgumentParserÚadd_argumentÚboolÚintÚ
parse_args)Úparsers    úx/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/quantization/preprocess.pyÚparse_argumentsr      sÂ  € Ü×$Ñ$ðô€Fð( ×Ñ˜	¨DÐ7UÐÔVØ
×Ñ˜
¨TÐ8WÐÔXØ
×ÑØÜØð1ð	 ô ð ×ÑØÜØð'ð	 ô ð ×ÑØÜØð4ð	 ô ð ×ÑØØIØØð	 ô ð ×ÑØØVÜØð	 ô ð ×ÑØØJØØð	 ô ð ×ÑØØWÜØð	 ô ð ×ÑØ!Ø4ØØð	 ô ð ×ÑØ#Ø7ØØð	 ô ð ×ÑØ"Ø:Øð ô ð
 ×ÑØ(Ø3ÜØð	 ô ð ×ÑÓÐó    Ú__main__z9Skipping all three steps, nothing to be done. Quitting...z:ORT model optimization does not support external data yet!zinput model: %szoutput model: %s)r   ÚloggingÚsysÚshape_inferencer   Ú	getLoggerÚ__name__Úloggerr   ÚargsÚskip_optimizationÚskip_onnx_shapeÚskip_symbolic_shapeÚerrorÚexitÚsave_as_external_dataÚinfoÚinputÚoutputÚ
auto_mergeÚint_maxÚguess_output_rankÚverboseÚall_tensors_to_one_fileÚexternal_data_locationÚexternal_data_size_threshold© r   r   ú<module>r0      s6  ðó Û Û 
å .à	ˆ×	Ñ	˜8Ó	$€ò`ðF ˆzÓÙÓ€DØ×Ò $×"6Ò"6¸4×;SÒ;SØ�‰ÐPÔQØˆ�‰Œ
à×"Ò"¨×(BÒ(BØ�‰ÐQÔRØˆ�‰Œ
à
‡K�KÐ! 4§:¡:Ô.Ø
‡K�KÐ" D§K¡KÔ0ÙØ�
‰
Ø�‰Ø×ÑØ×ÑØ× Ñ Ø�‰Ø�‰Ø×ÑØ�‰Ø×"Ñ"Ø×$Ñ$Ø×#Ñ#Ø×)Ñ)õð r   