
    ^hk                        d Z ddlZddlZddlZddlmZ d Z	 	 	 	 	 	 	 	 	 	 ddeej        z  ej	        z  deej        z  d	e
d
e
de
dedz  dede
dee         dz  dee         dz  deeeef                  dz  de
de
fdZedk    r_ e            Z eej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej                   dS dS )z@Provide entry point to preprocess ONNX model especially for QNN.    N)qnnc                     t          j        d          } |                     dddd           |                     dd	dd
           |                     ddd           |                     ddd           |                     dd           |                     ddt          d           |                     ddd           |                     ddd           |                     dddd            |                     d!ddd"            |                     d#d$d%t          dd&'           |                     d(dd)           |                                 S )*zParse cmdline arguments.z#Arguments for QNN model preprocess.)descriptionz--input_model_pathz-iTzPath to the input ONNX model.)requiredhelpz--output_model_pathz-ozPath to the output ONNX model.z--save_as_external_data
store_truez;Whether the output model would be saved with external data.)actionr   z--all_tensors_to_one_filezgWhether to save all external data in one file or save each tensor to a file named with the tensor name.z--external_data_locationzbFilename of the external file where all tensors are saved. The path is relative to the model path.)r   z--external_data_size_threshold   zQTensors with data size larger than this threshold are converted to external data.)defaulttyper   z!--external_data_convert_attributezKWhether to save all tensors, including attribute tensors, to external data.z--fuse_layernormzLWhether to fuse matched sequences into LayerNormalization nodes if possible.z--inputs_to_make_channel_last+Nz=List of graph input names to be transposed into channel-last.)nargsr   r   z--outputs_to_make_channel_lastz>List of graph output names to be transposed into channel-last.z--dynamic_input_shapes   appendzdModel input name and desired static shape in comma seprated format, for example: 'input' 1,3,256,256)r   r	   r   r   r   z --exclude_initializer_from_inputzBWhether to exclude initializer from input if model.ir_version >= 4)argparseArgumentParseradd_argumentintstr
parse_args)parsers    `/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/onnxruntime/tools/qnn/preprocess.py_parse_argumentsr      s   $1VWWWF
,dTHghhh
-tdIijjj !J    
 #v    
 "q     (`	     +Z     [     'L	     (M	      s     *Q         Fr
   model_inputmodel_outputfuse_layernormsave_as_external_dataall_tensors_to_one_fileexternal_data_locationexternal_data_size_thresholdexternal_data_convert_attributeinputs_to_make_channel_lastoutputs_to_make_channel_lastdynamic_input_shapesexclude_initializer_from_inputreturnc                 B    t          j        | |||||||||	|
|          S )a<  Preprocess ONNX model for QNN.

    Args:
        model_input: A path or ONNX ModelProto specifiying the model to be preprocessed.
        model_output: A path specifying where the preprocessed model to be saved.
        fuse_layernorm: A bool specifying whether to fuse the matched sequence into a single LayerNormalization node.
            Defaults to False.
        save_as_external_data: A bool specifying whether to save model with external data. Defaults to False.
        all_tensors_to_one_file: A bool specifying whether to save all external data in one file or save each tensor to
            a file named with the tensor name. This argument is effective only when `save_as_external_data` is True.
            Defaults to False.
        external_data_location: A str specifying where to save the external data. The path is relative to the model
            path. This argument is effective only when `save_as_external_data` is True. Defaults to the model name.
        external_data_size_threshold: An int specifying the threshold of data size for tensors be saved as external
            data. This argument is effective only when `save_as_external_data` is True. Defaults to 1024.
        external_data_convert_attribute: A bool specifying whether to save all tensors including attributes as external
            data. This argument is effective only when `save_as_external_data` is True. Defaults to False.
        inputs_to_make_channel_last: A list of strs specifying graph input names to be transposed into channel-last.
            Defaults to None.
        outputs_to_make_channel_last: A list of strs specifying graph output names to be transposed into channel-last.
            Defaults to None.
        dynamic_input_shapes: A list of tuples specifying model input name to and its static shape in comma seprated
            format, for example: [('input', '1,3,256,256')]. Defaults to None.
        exclude_initializer_from_input: A bool specifying whether to exclude initializer from input. Defaults to False.

    Returns:
        A bool indicating whether the model is modified.
    
r   r   r   r    r!   r"   r#   r$   r%   r&   )r   qnn_preprocess_model)r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   s               r   r*   r*   \   sC    T #%3 75%A(G$?%A1'E   r   __main__r)   )
FFFNr
   FNNNF)__doc__r   pathlibonnx,onnxruntime.quantization.execution_providersr   r   r   Path
ModelProtoboolr   listtupler*   __name__argsinput_model_pathoutput_model_pathr   r   r   r    r!   r"   r#   r$   r%   r&    r   r   <module>r:      s   G F    < < < < < <I I I^ !"'$))-(,,148599=+07 7w|#do57$7 7  	7
 "7  $J7 #&7 &*7 "&cT!17 #'s)d"27 uS#X/$67 %)7 
7 7 7 7t zD*"8 $ <#:%)%F(,(L$($D%)%F!6'+'J      r   