bigdl-core-npu 2.6.0b20250114__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bigdl-core-npu/__init__.py +0 -0
- bigdl-core-npu/include/common.h +96 -0
- bigdl-core-npu/include/npu_llm.h +74 -0
- bigdl-core-npu/npu_llm.dll +0 -0
- bigdl-core-npu/npu_llm.lib +0 -0
- bigdl_core_npu-2.6.0b20250114.dist-info/METADATA +44 -0
- bigdl_core_npu-2.6.0b20250114.dist-info/RECORD +234 -0
- bigdl_core_npu-2.6.0b20250114.dist-info/WHEEL +5 -0
- bigdl_core_npu-2.6.0b20250114.dist-info/top_level.txt +2 -0
- intel_npu_acceleration_library/__init__.py +24 -0
- intel_npu_acceleration_library/_version.py +6 -0
- intel_npu_acceleration_library/backend/__init__.py +37 -0
- intel_npu_acceleration_library/backend/base.py +250 -0
- intel_npu_acceleration_library/backend/bindings.py +383 -0
- intel_npu_acceleration_library/backend/compression.py +24 -0
- intel_npu_acceleration_library/backend/convolution.py +58 -0
- intel_npu_acceleration_library/backend/factory.py +1161 -0
- intel_npu_acceleration_library/backend/linear.py +60 -0
- intel_npu_acceleration_library/backend/matmul.py +59 -0
- intel_npu_acceleration_library/backend/mlp.py +58 -0
- intel_npu_acceleration_library/backend/ops.py +142 -0
- intel_npu_acceleration_library/backend/qlinear.py +75 -0
- intel_npu_acceleration_library/backend/qmatmul.py +66 -0
- intel_npu_acceleration_library/backend/runtime.py +215 -0
- intel_npu_acceleration_library/backend/sdpa.py +107 -0
- intel_npu_acceleration_library/backend/tensor.py +1120 -0
- intel_npu_acceleration_library/backend/utils.py +70 -0
- intel_npu_acceleration_library/compiler.py +194 -0
- intel_npu_acceleration_library/device.py +230 -0
- intel_npu_acceleration_library/dtypes.py +155 -0
- intel_npu_acceleration_library/external/openvino/__init__.py +72 -0
- intel_npu_acceleration_library/external/openvino/_offline_transformations/__init__.py +21 -0
- intel_npu_acceleration_library/external/openvino/_pyopenvino.cp310-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/_pyopenvino.cp311-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/_pyopenvino.cp312-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/_pyopenvino.cp38-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/_pyopenvino.cp39-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/experimental/__init__.py +14 -0
- intel_npu_acceleration_library/external/openvino/frontend/__init__.py +34 -0
- intel_npu_acceleration_library/external/openvino/frontend/frontend.py +44 -0
- intel_npu_acceleration_library/external/openvino/frontend/jax/__init__.py +15 -0
- intel_npu_acceleration_library/external/openvino/frontend/jax/jaxpr_decoder.py +293 -0
- intel_npu_acceleration_library/external/openvino/frontend/jax/passes.py +65 -0
- intel_npu_acceleration_library/external/openvino/frontend/jax/utils.py +182 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/__init__.py +15 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp310-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp311-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp312-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp38-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp39-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/__init__.py +15 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp310-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp311-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp312-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp38-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp39-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/__init__.py +19 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/fx_decoder.py +370 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/gptq.py +180 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/module_extension.py +39 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/patch_model.py +118 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp310-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp311-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp312-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp38-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp39-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend.py +131 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend_utils.py +85 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/compile.py +141 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/decompositions.py +116 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/execute.py +189 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/op_support.py +290 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/partition.py +126 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/ts_decoder.py +568 -0
- intel_npu_acceleration_library/external/openvino/frontend/pytorch/utils.py +258 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/__init__.py +16 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/graph_iterator.py +116 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/node_decoder.py +219 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp310-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp311-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp312-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp38-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp39-win_amd64.pyd +0 -0
- intel_npu_acceleration_library/external/openvino/frontend/tensorflow/utils.py +481 -0
- intel_npu_acceleration_library/external/openvino/helpers/__init__.py +6 -0
- intel_npu_acceleration_library/external/openvino/helpers/packing.py +87 -0
- intel_npu_acceleration_library/external/openvino/preprocess/README.md +60 -0
- intel_npu_acceleration_library/external/openvino/preprocess/__init__.py +28 -0
- intel_npu_acceleration_library/external/openvino/preprocess/torchvision/__init__.py +15 -0
- intel_npu_acceleration_library/external/openvino/preprocess/torchvision/preprocess_converter.py +47 -0
- intel_npu_acceleration_library/external/openvino/preprocess/torchvision/requirements.txt +5 -0
- intel_npu_acceleration_library/external/openvino/preprocess/torchvision/torchvision_preprocessing.py +347 -0
- intel_npu_acceleration_library/external/openvino/properties/__init__.py +22 -0
- intel_npu_acceleration_library/external/openvino/properties/_properties.py +55 -0
- intel_npu_acceleration_library/external/openvino/properties/device/__init__.py +14 -0
- intel_npu_acceleration_library/external/openvino/properties/hint/__init__.py +15 -0
- intel_npu_acceleration_library/external/openvino/properties/intel_auto/__init__.py +12 -0
- intel_npu_acceleration_library/external/openvino/properties/intel_cpu/__init__.py +8 -0
- intel_npu_acceleration_library/external/openvino/properties/intel_gpu/__init__.py +12 -0
- intel_npu_acceleration_library/external/openvino/properties/intel_gpu/hint/__init__.py +11 -0
- intel_npu_acceleration_library/external/openvino/properties/log/__init__.py +11 -0
- intel_npu_acceleration_library/external/openvino/properties/streams/__init__.py +11 -0
- intel_npu_acceleration_library/external/openvino/runtime/__init__.py +85 -0
- intel_npu_acceleration_library/external/openvino/runtime/exceptions.py +17 -0
- intel_npu_acceleration_library/external/openvino/runtime/ie_api.py +631 -0
- intel_npu_acceleration_library/external/openvino/runtime/op/__init__.py +19 -0
- intel_npu_acceleration_library/external/openvino/runtime/op/util/__init__.py +22 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset1/__init__.py +112 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset1/ops.py +3068 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset10/__init__.py +179 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset10/ops.py +173 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset11/__init__.py +179 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset11/ops.py +107 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset12/__init__.py +180 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset12/ops.py +120 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset13/__init__.py +188 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset13/ops.py +398 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset14/__init__.py +190 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset14/ops.py +171 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset15/__init__.py +17 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset15/ops.py +276 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset2/__init__.py +118 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset2/ops.py +216 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset3/__init__.py +134 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset3/ops.py +638 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset4/__init__.py +145 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset4/ops.py +464 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset5/__init__.py +152 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset5/ops.py +372 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset6/__init__.py +154 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset6/ops.py +215 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset7/__init__.py +158 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset7/ops.py +169 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset8/__init__.py +169 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset8/ops.py +787 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset9/__init__.py +175 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset9/ops.py +341 -0
- intel_npu_acceleration_library/external/openvino/runtime/opset_utils.py +22 -0
- intel_npu_acceleration_library/external/openvino/runtime/passes/__init__.py +19 -0
- intel_npu_acceleration_library/external/openvino/runtime/passes/graph_rewrite.py +33 -0
- intel_npu_acceleration_library/external/openvino/runtime/passes/manager.py +26 -0
- intel_npu_acceleration_library/external/openvino/runtime/properties/__init__.py +40 -0
- intel_npu_acceleration_library/external/openvino/runtime/properties/hint/__init__.py +25 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/__init__.py +7 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/broadcasting.py +44 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/__init__.py +8 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/data_dispatcher.py +447 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/wrappers.py +148 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/decorators.py +156 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/input_validation.py +133 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/node_factory.py +127 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/reduction.py +25 -0
- intel_npu_acceleration_library/external/openvino/runtime/utils/types.py +175 -0
- intel_npu_acceleration_library/external/openvino/tools/__init__.py +4 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/__init__.py +3 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/benchmark.py +186 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/main.py +695 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/parameters.py +199 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/__init__.py +3 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/constants.py +26 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/inputs_filling.py +482 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/logging.py +8 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/statistics_report.py +296 -0
- intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/utils.py +836 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/__init__.py +20 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/__main__.py +10 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/cli_parser.py +633 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/convert.py +102 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/convert_data_type.py +82 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/convert_impl.py +550 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/environment_setup_utils.py +50 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/error.py +49 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/get_ov_update_message.py +16 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/help.py +45 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/logger.py +91 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/main.py +40 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/__init__.py +2 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/analysis.py +46 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/check_config.py +57 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/extractor.py +447 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/jax_frontend_utils.py +19 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/layout_utils.py +73 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/moc_emit_ir.py +32 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/offline_transformations.py +107 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/paddle_frontend_utils.py +83 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pipeline.py +298 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/preprocessing.py +220 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pytorch_frontend_utils.py +214 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/shape_utils.py +109 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/type_utils.py +82 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/ovc.py +13 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_params.py +6 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_stub.py +28 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_utils.py +118 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/utils.py +196 -0
- intel_npu_acceleration_library/external/openvino/tools/ovc/version.py +80 -0
- intel_npu_acceleration_library/external/openvino/torch/__init__.py +5 -0
- intel_npu_acceleration_library/external/openvino/utils.py +115 -0
- intel_npu_acceleration_library/functional/__init__.py +8 -0
- intel_npu_acceleration_library/functional/scaled_dot_product_attention.py +47 -0
- intel_npu_acceleration_library/lib/Release/cache.json +113732 -0
- intel_npu_acceleration_library/lib/Release/intel_npu_acceleration_library.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_auto_batch_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_auto_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_c.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_hetero_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_intel_cpu_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_intel_gpu_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_intel_npu_plugin.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_ir_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_onnx_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_paddle_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_pytorch_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_tensorflow_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/openvino_tensorflow_lite_frontend.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbb12.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbb12_debug.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbbind_2_5.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbbind_2_5_debug.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbmalloc.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbmalloc_debug.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy.dll +0 -0
- intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy_debug.dll +0 -0
- intel_npu_acceleration_library/modelling.py +150 -0
- intel_npu_acceleration_library/nn/__init__.py +20 -0
- intel_npu_acceleration_library/nn/autograd.py +68 -0
- intel_npu_acceleration_library/nn/conv.py +257 -0
- intel_npu_acceleration_library/nn/functional.py +1207 -0
- intel_npu_acceleration_library/nn/linear.py +162 -0
- intel_npu_acceleration_library/nn/llm.py +417 -0
- intel_npu_acceleration_library/nn/module.py +393 -0
- intel_npu_acceleration_library/optimizations.py +157 -0
- intel_npu_acceleration_library/quantization.py +174 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (C) 2018-2024 Intel Corporation
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
3
|
+
|
4
|
+
from openvino.tools.ovc.convert import convert_model
|
5
|
+
from openvino.tools.ovc.telemetry_utils import is_optimum, init_mo_telemetry
|
6
|
+
|
7
|
+
import importlib.metadata as importlib_metadata
|
8
|
+
|
9
|
+
try:
|
10
|
+
optimum_version = importlib_metadata.version("optimum-intel")
|
11
|
+
except importlib_metadata.PackageNotFoundError:
|
12
|
+
optimum_version = None
|
13
|
+
|
14
|
+
if is_optimum() and optimum_version is not None:
|
15
|
+
from openvino.runtime import get_version as get_rt_version # pylint: disable=no-name-in-module,import-error
|
16
|
+
telemetry = init_mo_telemetry("Optimum Intel", optimum_version)
|
17
|
+
telemetry.send_event("ov", "import", "import_from_optimum,ov_version:{}".format(get_rt_version()))
|
18
|
+
else:
|
19
|
+
telemetry = init_mo_telemetry()
|
20
|
+
telemetry.send_event("ov", "import", "general_import")
|
@@ -0,0 +1,633 @@
|
|
1
|
+
# Copyright (C) 2018-2024 Intel Corporation
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
3
|
+
|
4
|
+
import argparse
|
5
|
+
import inspect
|
6
|
+
import os
|
7
|
+
import pathlib
|
8
|
+
import re
|
9
|
+
from collections import OrderedDict, namedtuple
|
10
|
+
from typing import List, Union
|
11
|
+
|
12
|
+
import openvino
|
13
|
+
from openvino.runtime import PartialShape, Dimension, Type # pylint: disable=no-name-in-module,import-error
|
14
|
+
from openvino.tools.ovc.error import Error
|
15
|
+
from openvino.tools.ovc.help import get_convert_model_help_specifics
|
16
|
+
from openvino.tools.ovc.moc_frontend.shape_utils import to_partial_shape, is_shape_type
|
17
|
+
from openvino.tools.ovc.moc_frontend.type_utils import to_ov_type, is_type
|
18
|
+
from openvino.tools.ovc.utils import get_mo_root_dir
|
19
|
+
|
20
|
+
# Helper class for storing input cut information
|
21
|
+
_InputCutInfo = namedtuple("InputCutInfo", ["name", "shape", "type", "value"], defaults=[None, None, None, None])
|
22
|
+
|
23
|
+
|
24
|
+
def single_input_to_input_cut_info(input: [str, tuple, list, PartialShape, Type, type]):
|
25
|
+
"""
|
26
|
+
Parses parameters of single input to InputCutInfo.
|
27
|
+
:param input: input cut parameters of single input
|
28
|
+
:return: InputCutInfo
|
29
|
+
"""
|
30
|
+
if isinstance(input, str):
|
31
|
+
# pylint: disable=no-member
|
32
|
+
return _InputCutInfo(input, None)
|
33
|
+
if isinstance(input, (tuple, list)) or is_shape_type(input):
|
34
|
+
# If input represents list with shape, wrap it to list. Single PartialShape also goes to this condition.
|
35
|
+
# Check of all dimensions will be in is_shape_type(val) method below
|
36
|
+
if is_shape_type(input):
|
37
|
+
input = [input]
|
38
|
+
|
39
|
+
# Check values of tuple or list and collect to InputCutInfo
|
40
|
+
name = None
|
41
|
+
inp_type = None
|
42
|
+
shape = None
|
43
|
+
for val in input:
|
44
|
+
if isinstance(val, str):
|
45
|
+
if name is not None:
|
46
|
+
raise Exception("More than one input name provided: {}".format(input))
|
47
|
+
name = val
|
48
|
+
elif is_type(val):
|
49
|
+
if inp_type is not None:
|
50
|
+
raise Exception("More than one input type provided: {}".format(input))
|
51
|
+
inp_type = to_ov_type(val)
|
52
|
+
elif is_shape_type(val) or val is None:
|
53
|
+
if shape is not None:
|
54
|
+
raise Exception("More than one input shape provided: {}".format(input))
|
55
|
+
shape = to_partial_shape(val) if val is not None else None
|
56
|
+
else:
|
57
|
+
raise Exception("Incorrect input parameters provided. Expected tuple with input name, "
|
58
|
+
"input type or input shape. Got unknown object: {}".format(val))
|
59
|
+
# pylint: disable=no-member
|
60
|
+
return _InputCutInfo(name,
|
61
|
+
PartialShape(shape) if shape is not None else None,
|
62
|
+
inp_type,
|
63
|
+
None)
|
64
|
+
# Case when only type is set
|
65
|
+
if is_type(input):
|
66
|
+
return _InputCutInfo(None, None, to_ov_type(input), None) # pylint: disable=no-member
|
67
|
+
|
68
|
+
# We don't expect here single unnamed value. If list of int is set it is considered as shape.
|
69
|
+
# Setting of value is expected only using InputCutInfo or string analog.
|
70
|
+
|
71
|
+
raise Exception(
|
72
|
+
"Unexpected object provided for input. Expected tuple, Shape, PartialShape, Type or str. Got {}".format(
|
73
|
+
type(input)))
|
74
|
+
|
75
|
+
|
76
|
+
def is_single_input(input: [tuple, list]):
|
77
|
+
"""
|
78
|
+
Checks if input has parameters for single input.
|
79
|
+
:param input: list or tuple of input parameters or input shape or input name.
|
80
|
+
:return: True if input has parameters for single input, otherwise False.
|
81
|
+
"""
|
82
|
+
name = None
|
83
|
+
inp_type = None
|
84
|
+
shape = None
|
85
|
+
for val in input:
|
86
|
+
if isinstance(val, str):
|
87
|
+
if name is not None:
|
88
|
+
return False
|
89
|
+
name = val
|
90
|
+
elif is_type(val):
|
91
|
+
if inp_type is not None:
|
92
|
+
return False
|
93
|
+
inp_type = to_ov_type(val)
|
94
|
+
elif is_shape_type(val):
|
95
|
+
if shape is not None:
|
96
|
+
return False
|
97
|
+
shape = to_partial_shape(val)
|
98
|
+
else:
|
99
|
+
return False
|
100
|
+
return True
|
101
|
+
|
102
|
+
|
103
|
+
def parse_inputs(inputs: str):
|
104
|
+
inputs_list = []
|
105
|
+
# Split to list of string
|
106
|
+
for input_value in split_inputs(inputs):
|
107
|
+
# Parse string with parameters for single input
|
108
|
+
node_name, shape = parse_input_value(input_value)
|
109
|
+
# pylint: disable=no-member
|
110
|
+
inputs_list.append((node_name, shape))
|
111
|
+
return inputs_list
|
112
|
+
|
113
|
+
|
114
|
+
def input_to_input_cut_info(input: [dict, tuple, list]):
|
115
|
+
"""
|
116
|
+
Parses 'input' to list of InputCutInfo.
|
117
|
+
:param input: input cut parameters passed by user
|
118
|
+
:return: list of InputCutInfo with input cut parameters
|
119
|
+
"""
|
120
|
+
if input is None:
|
121
|
+
return []
|
122
|
+
|
123
|
+
if isinstance(input, (tuple, list)):
|
124
|
+
if len(input) == 0:
|
125
|
+
return []
|
126
|
+
# Case when input is single shape set in tuple
|
127
|
+
if len(input) > 0 and isinstance(input[0], (int, Dimension)):
|
128
|
+
input = [input]
|
129
|
+
|
130
|
+
if is_single_input(input):
|
131
|
+
return [single_input_to_input_cut_info(input)]
|
132
|
+
|
133
|
+
inputs = []
|
134
|
+
for inp in input:
|
135
|
+
inputs.append(single_input_to_input_cut_info(inp))
|
136
|
+
return inputs
|
137
|
+
|
138
|
+
if isinstance(input, dict):
|
139
|
+
res_list = []
|
140
|
+
for name, value in input.items():
|
141
|
+
if not isinstance(name, str):
|
142
|
+
raise Exception("Incorrect operation name type. Expected string, got {}".format(type(name)))
|
143
|
+
info = single_input_to_input_cut_info(value)
|
144
|
+
if info.name is not None and info.name != name:
|
145
|
+
raise Exception("Incorrect \"input\" dictionary, got different names in key and value. "
|
146
|
+
"Got operation name {} for key {}".format(info.name, name))
|
147
|
+
res_list.append(_InputCutInfo(name, info.shape, info.type))
|
148
|
+
return res_list
|
149
|
+
# Case when single type or value is set, or unknown object
|
150
|
+
return [single_input_to_input_cut_info(input)]
|
151
|
+
|
152
|
+
|
153
|
+
ParamDescription = namedtuple("ParamData", ["description", "cli_tool_description"])
|
154
|
+
|
155
|
+
|
156
|
+
def get_mo_convert_params():
|
157
|
+
mo_convert_docs = openvino.tools.ovc.convert_model.__doc__ # pylint: disable=no-member
|
158
|
+
mo_convert_params = {}
|
159
|
+
group = "Optional parameters:" # FIXME: WA for unknown bug in this function
|
160
|
+
mo_convert_params[group] = {}
|
161
|
+
|
162
|
+
mo_convert_docs = mo_convert_docs[:mo_convert_docs.find('Returns:')]
|
163
|
+
|
164
|
+
while len(mo_convert_docs) > 0:
|
165
|
+
param_idx1 = mo_convert_docs.find(":param")
|
166
|
+
if param_idx1 == -1:
|
167
|
+
break
|
168
|
+
param_idx2 = mo_convert_docs.find(":", param_idx1 + 1)
|
169
|
+
param_name = mo_convert_docs[param_idx1 + len(':param '):param_idx2]
|
170
|
+
|
171
|
+
param_description_idx = mo_convert_docs.find(":param", param_idx2 + 1)
|
172
|
+
param_description = mo_convert_docs[param_idx2 + 1: param_description_idx]
|
173
|
+
|
174
|
+
group_name_idx = param_description.rfind('\n\n')
|
175
|
+
group_name = ''
|
176
|
+
if group_name_idx != -1:
|
177
|
+
group_name = param_description[group_name_idx:].strip()
|
178
|
+
|
179
|
+
param_description = param_description[:group_name_idx]
|
180
|
+
param_description = param_description.strip()
|
181
|
+
|
182
|
+
mo_convert_params[group][param_name] = ParamDescription(param_description, "")
|
183
|
+
|
184
|
+
mo_convert_docs = mo_convert_docs[param_description_idx:]
|
185
|
+
|
186
|
+
if group_name != '':
|
187
|
+
mo_convert_params[group_name] = {}
|
188
|
+
group = group_name
|
189
|
+
|
190
|
+
cli_tool_specific_descriptions = get_convert_model_help_specifics()
|
191
|
+
|
192
|
+
for group_name, param_group in mo_convert_params.items():
|
193
|
+
for param_name, d in param_group.items():
|
194
|
+
cli_tool_description = None
|
195
|
+
if param_name in cli_tool_specific_descriptions:
|
196
|
+
cli_tool_description = cli_tool_specific_descriptions[param_name]
|
197
|
+
|
198
|
+
desc = ParamDescription(d.description,
|
199
|
+
cli_tool_description)
|
200
|
+
mo_convert_params[group_name][param_name] = desc
|
201
|
+
|
202
|
+
return mo_convert_params
|
203
|
+
|
204
|
+
|
205
|
+
def canonicalize_and_check_paths(values: Union[str, List[str], None], param_name,
|
206
|
+
try_mo_root=False, check_existence=True) -> List[str]:
|
207
|
+
if values is not None:
|
208
|
+
list_of_values = list()
|
209
|
+
if isinstance(values, str):
|
210
|
+
if values != "":
|
211
|
+
list_of_values = values.split(',')
|
212
|
+
elif isinstance(values, list):
|
213
|
+
list_of_values = values
|
214
|
+
else:
|
215
|
+
return values
|
216
|
+
|
217
|
+
if not check_existence:
|
218
|
+
return [get_absolute_path(path) for path in list_of_values]
|
219
|
+
|
220
|
+
for idx, val in enumerate(list_of_values):
|
221
|
+
if not isinstance(val, (str, pathlib.Path)):
|
222
|
+
continue
|
223
|
+
|
224
|
+
list_of_values[idx] = val
|
225
|
+
|
226
|
+
error_msg = 'The value for parameter "{}" must be existing file/directory, ' \
|
227
|
+
'but "{}" does not exist.'.format(param_name, val)
|
228
|
+
if os.path.exists(val):
|
229
|
+
continue
|
230
|
+
elif not try_mo_root or val == '':
|
231
|
+
raise Error(error_msg)
|
232
|
+
elif try_mo_root:
|
233
|
+
path_from_mo_root = get_mo_root_dir() + '/ovc/' + val
|
234
|
+
list_of_values[idx] = path_from_mo_root
|
235
|
+
if not os.path.exists(path_from_mo_root):
|
236
|
+
raise Error(error_msg)
|
237
|
+
|
238
|
+
return [get_absolute_path(path) for path in list_of_values]
|
239
|
+
|
240
|
+
|
241
|
+
class CanonicalizePathCheckExistenceAction(argparse.Action):
|
242
|
+
"""
|
243
|
+
Expand user home directory paths and convert relative-paths to absolute and check specified file or directory
|
244
|
+
existence.
|
245
|
+
"""
|
246
|
+
check_value = canonicalize_and_check_paths
|
247
|
+
|
248
|
+
def __call__(self, parser, namespace, values, option_string=None):
|
249
|
+
list_of_paths = canonicalize_and_check_paths(values, param_name=option_string,
|
250
|
+
try_mo_root=False, check_existence=True)
|
251
|
+
setattr(namespace, self.dest, list_of_paths)
|
252
|
+
|
253
|
+
|
254
|
+
def readable_file_or_dir_or_object(path: str):
|
255
|
+
"""
|
256
|
+
Check that specified path is a readable file or directory.
|
257
|
+
:param path: path to check
|
258
|
+
:return: path if the file/directory is readable
|
259
|
+
"""
|
260
|
+
if not isinstance(path, (str, pathlib.Path)):
|
261
|
+
return path
|
262
|
+
if not os.path.isfile(path) and not os.path.isdir(path):
|
263
|
+
raise Error('The "{}" is not existing file or directory'.format(path))
|
264
|
+
elif not os.access(path, os.R_OK):
|
265
|
+
raise Error('The "{}" is not readable'.format(path))
|
266
|
+
else:
|
267
|
+
return path
|
268
|
+
|
269
|
+
|
270
|
+
def readable_dirs_or_files_or_empty(paths: [str, list, tuple]):
|
271
|
+
"""
|
272
|
+
Checks that comma separated list of paths are readable directories, files or a provided path is empty.
|
273
|
+
:param paths: comma separated list of paths.
|
274
|
+
:return: comma separated list of paths.
|
275
|
+
"""
|
276
|
+
paths_list = paths
|
277
|
+
if isinstance(paths, (list, tuple)):
|
278
|
+
paths_list = [readable_file_or_dir_or_object(path) for path in paths]
|
279
|
+
if isinstance(paths, (str, pathlib.Path)):
|
280
|
+
paths_list = [readable_file_or_dir_or_object(path) for path in str(paths).split(',')]
|
281
|
+
|
282
|
+
return paths_list[0] if isinstance(paths, (list, tuple)) and len(paths_list) == 1 else paths_list
|
283
|
+
|
284
|
+
|
285
|
+
def add_args_by_description(args_group, params_description):
|
286
|
+
signature = inspect.signature(openvino.tools.ovc.convert_model) # pylint: disable=no-member
|
287
|
+
filepath_args = get_params_with_paths_list()
|
288
|
+
cli_tool_specific_descriptions = get_convert_model_help_specifics()
|
289
|
+
for param_name, param_description in params_description.items():
|
290
|
+
if param_name in ['share_weights', 'example_input']:
|
291
|
+
continue
|
292
|
+
if param_name == 'input_model':
|
293
|
+
# input_model is not a normal key for a tool, it will collect all untagged keys
|
294
|
+
cli_param_name = param_name
|
295
|
+
else:
|
296
|
+
cli_param_name = '--' + param_name
|
297
|
+
if cli_param_name not in args_group._option_string_actions:
|
298
|
+
# Get parameter specifics
|
299
|
+
param_specifics = cli_tool_specific_descriptions[param_name] if param_name in \
|
300
|
+
cli_tool_specific_descriptions else {}
|
301
|
+
help_text = param_specifics['description'] if 'description' in param_specifics \
|
302
|
+
else param_description.description
|
303
|
+
action = param_specifics['action'] if 'action' in param_specifics else None
|
304
|
+
param_type = param_specifics['type'] if 'type' in param_specifics else None
|
305
|
+
param_alias = param_specifics[
|
306
|
+
'aliases'] if 'aliases' in param_specifics and param_name != 'input_model' else {}
|
307
|
+
param_version = param_specifics['version'] if 'version' in param_specifics else None
|
308
|
+
param_choices = param_specifics['choices'] if 'choices' in param_specifics else None
|
309
|
+
|
310
|
+
# Bool params common setting
|
311
|
+
if signature.parameters[param_name].annotation == bool and param_name != 'version':
|
312
|
+
args_group.add_argument(
|
313
|
+
cli_param_name, *param_alias,
|
314
|
+
action='store_true',
|
315
|
+
help=help_text,
|
316
|
+
default=signature.parameters[param_name].default)
|
317
|
+
# File paths common setting
|
318
|
+
elif param_name in filepath_args:
|
319
|
+
action = action if action is not None else CanonicalizePathCheckExistenceAction
|
320
|
+
args_group.add_argument(
|
321
|
+
cli_param_name, *param_alias,
|
322
|
+
type=str if param_type is None else param_type,
|
323
|
+
action=action,
|
324
|
+
help=help_text,
|
325
|
+
default=None if param_name == 'input_model' else signature.parameters[param_name].default,
|
326
|
+
metavar=param_name.upper() if param_name == 'input_model' else None)
|
327
|
+
# Other params
|
328
|
+
else:
|
329
|
+
additional_params = {}
|
330
|
+
if param_version is not None:
|
331
|
+
additional_params['version'] = param_version
|
332
|
+
if param_type is not None:
|
333
|
+
additional_params['type'] = param_type
|
334
|
+
if param_choices is not None:
|
335
|
+
additional_params['choices'] = param_choices
|
336
|
+
args_group.add_argument(
|
337
|
+
cli_param_name, *param_alias,
|
338
|
+
help=help_text,
|
339
|
+
default=signature.parameters[param_name].default,
|
340
|
+
action=action,
|
341
|
+
**additional_params
|
342
|
+
)
|
343
|
+
|
344
|
+
|
345
|
+
class Formatter(argparse.HelpFormatter):
|
346
|
+
def _format_usage(self, usage, actions, groups, prefix):
|
347
|
+
usage = argparse.HelpFormatter._format_usage(self, usage, actions, groups, prefix)
|
348
|
+
usage = usage[0:usage.find('INPUT_MODEL')].rstrip() + '\n'
|
349
|
+
insert_idx = usage.find(self._prog) + len(self._prog)
|
350
|
+
usage = usage[0: insert_idx] + ' INPUT_MODEL... ' + usage[insert_idx + 1:]
|
351
|
+
return usage
|
352
|
+
|
353
|
+
def _get_default_metavar_for_optional(self, action):
|
354
|
+
if action.option_strings == ['--compress_to_fp16']:
|
355
|
+
return "True | False"
|
356
|
+
return argparse.HelpFormatter._get_default_metavar_for_optional(self, action)
|
357
|
+
|
358
|
+
|
359
|
+
def get_common_cli_parser(parser: argparse.ArgumentParser = None):
|
360
|
+
if not parser:
|
361
|
+
parser = argparse.ArgumentParser(formatter_class=Formatter)
|
362
|
+
mo_convert_params = get_mo_convert_params()
|
363
|
+
mo_convert_params_common = mo_convert_params['Optional parameters:']
|
364
|
+
|
365
|
+
from openvino.tools.ovc.version import VersionChecker
|
366
|
+
|
367
|
+
# Command line tool specific params
|
368
|
+
parser.add_argument('--output_model',
|
369
|
+
help='This parameter is used to name output .xml/.bin files of converted model. '
|
370
|
+
'Model name or output directory can be passed. If output directory is passed, '
|
371
|
+
'the resulting .xml/.bin files are named by original model name.')
|
372
|
+
parser.add_argument('--compress_to_fp16', type=check_bool, default=True, nargs='?',
|
373
|
+
help='Compress weights in output OpenVINO model to FP16. '
|
374
|
+
'To turn off compression use "--compress_to_fp16=False" command line parameter. '
|
375
|
+
'Default value is True.')
|
376
|
+
parser.add_argument('--version', action='version',
|
377
|
+
help='Print ovc version and exit.',
|
378
|
+
version='OpenVINO Model Converter (ovc) {}'.format(VersionChecker().get_ie_version()))
|
379
|
+
add_args_by_description(parser, mo_convert_params_common)
|
380
|
+
return parser
|
381
|
+
|
382
|
+
|
383
|
+
def input_model_details(model):
|
384
|
+
if isinstance(model, (list, tuple)) and len(model) == 1:
|
385
|
+
model = model[0]
|
386
|
+
if isinstance(model, (str, pathlib.Path)):
|
387
|
+
return model
|
388
|
+
return type(model)
|
389
|
+
|
390
|
+
|
391
|
+
def get_common_cli_options(argv, is_python_api_used):
|
392
|
+
d = OrderedDict()
|
393
|
+
d['input_model'] = ['- Input Model', input_model_details]
|
394
|
+
if not is_python_api_used:
|
395
|
+
model_name = get_model_name_from_args(argv)
|
396
|
+
d['output_model'] = ['- IR output name', lambda _: model_name]
|
397
|
+
d['input'] = ['- Input layers', lambda x: x if x else 'Not specified, inherited from the model']
|
398
|
+
d['output'] = ['- Output layers', lambda x: x if x else 'Not specified, inherited from the model']
|
399
|
+
return d
|
400
|
+
|
401
|
+
|
402
|
+
def get_params_with_paths_list():
|
403
|
+
return ['input_model', 'output_model', 'extension']
|
404
|
+
|
405
|
+
|
406
|
+
def get_all_cli_parser():
|
407
|
+
"""
|
408
|
+
Specifies cli arguments for Model Conversion
|
409
|
+
|
410
|
+
Returns
|
411
|
+
-------
|
412
|
+
ArgumentParser instance
|
413
|
+
"""
|
414
|
+
parser = argparse.ArgumentParser(formatter_class=Formatter)
|
415
|
+
|
416
|
+
get_common_cli_parser(parser=parser)
|
417
|
+
|
418
|
+
return parser
|
419
|
+
|
420
|
+
|
421
|
+
def remove_shape_from_input_value(input_value: str):
|
422
|
+
"""
|
423
|
+
Removes the shape specification from the input string. The shape specification is a string enclosed with square
|
424
|
+
brackets.
|
425
|
+
:param input_value: string passed as input to the "input" command line parameter
|
426
|
+
:return: string without shape specification
|
427
|
+
"""
|
428
|
+
if '->' in input_value:
|
429
|
+
raise Error('Incorrect format of input. Got {}'.format(input_value))
|
430
|
+
return re.sub(r'[(\[]([0-9\.?, -]*)[)\]]', '', input_value)
|
431
|
+
|
432
|
+
|
433
|
+
def get_shape_from_input_value(input_value: str):
|
434
|
+
"""
|
435
|
+
Returns PartialShape corresponding to the shape specified in the input value string
|
436
|
+
:param input_value: string passed as input to the "input" command line parameter
|
437
|
+
:return: the corresponding shape and None if the shape is not specified in the input value
|
438
|
+
"""
|
439
|
+
|
440
|
+
# parse shape
|
441
|
+
shape = re.findall(r'[(\[]([0-9\.\?, -]*)[)\]]', input_value)
|
442
|
+
if len(shape) == 0:
|
443
|
+
shape = None
|
444
|
+
elif len(shape) == 1 and shape[0] in ['', ' ']:
|
445
|
+
# this shape corresponds to scalar
|
446
|
+
shape = PartialShape([])
|
447
|
+
elif len(shape) == 1:
|
448
|
+
dims = re.split(r', *| +', shape[0])
|
449
|
+
dims = list(filter(None, dims))
|
450
|
+
shape = PartialShape([Dimension(dim) for dim in dims])
|
451
|
+
else:
|
452
|
+
raise Error("Wrong syntax to specify shape. Use \"input\" "
|
453
|
+
"\"node_name[shape]\"")
|
454
|
+
return shape
|
455
|
+
|
456
|
+
|
457
|
+
def get_node_name_with_port_from_input_value(input_value: str):
|
458
|
+
"""
|
459
|
+
Returns the node name (optionally with input/output port) from the input value
|
460
|
+
:param input_value: string passed as input to the "input" command line parameter
|
461
|
+
:return: the corresponding node name with input/output port
|
462
|
+
"""
|
463
|
+
return remove_shape_from_input_value(input_value)
|
464
|
+
|
465
|
+
|
466
|
+
def parse_input_value(input_value: str):
|
467
|
+
"""
|
468
|
+
Parses a value of the "input" command line parameter and gets a node name, shape and value.
|
469
|
+
The node name includes a port if it is specified.
|
470
|
+
Shape and value is equal to None if they are not specified.
|
471
|
+
Parameters
|
472
|
+
----------
|
473
|
+
input_value
|
474
|
+
string with a specified node name and shape.
|
475
|
+
E.g. 'node_name:0[4]'
|
476
|
+
|
477
|
+
Returns
|
478
|
+
-------
|
479
|
+
Node name, shape, value, data type
|
480
|
+
E.g. 'node_name:0', '4', [1.0 2.0 3.0 4.0], np.float32
|
481
|
+
"""
|
482
|
+
node_name = get_node_name_with_port_from_input_value(input_value)
|
483
|
+
shape = get_shape_from_input_value(input_value)
|
484
|
+
|
485
|
+
return node_name if node_name else None, shape
|
486
|
+
|
487
|
+
|
488
|
+
def split_inputs(input_str):
|
489
|
+
pattern = r'^(?:[^[\]()<]*(\[[\.)-9,\-\s?]*\])*,)*[^[\]()<]*(\[[\.0-9,\-\s?]*\])*$'
|
490
|
+
if not re.match(pattern, input_str):
|
491
|
+
raise Error(f"input value '{input_str}' is incorrect. Input should be in the following format: "
|
492
|
+
f"{get_convert_model_help_specifics()['input']['description']}")
|
493
|
+
|
494
|
+
brakets_count = 0
|
495
|
+
inputs = []
|
496
|
+
while input_str:
|
497
|
+
idx = 0
|
498
|
+
for c in input_str:
|
499
|
+
if c == '[':
|
500
|
+
brakets_count += 1
|
501
|
+
if c == ']':
|
502
|
+
brakets_count -= 1
|
503
|
+
if c == ',':
|
504
|
+
if brakets_count != 0:
|
505
|
+
idx += 1
|
506
|
+
continue
|
507
|
+
else:
|
508
|
+
break
|
509
|
+
idx += 1
|
510
|
+
if idx >= len(input_str) - 1:
|
511
|
+
inputs.append(input_str)
|
512
|
+
break
|
513
|
+
inputs.append(input_str[:idx])
|
514
|
+
input_str = input_str[idx + 1:]
|
515
|
+
return inputs
|
516
|
+
|
517
|
+
|
518
|
+
def get_model_name(path_input_model: str) -> str:
|
519
|
+
"""
|
520
|
+
Deduces model name by a given path to the input model
|
521
|
+
Args:
|
522
|
+
path_input_model: path to the input model
|
523
|
+
|
524
|
+
Returns:
|
525
|
+
name of the output IR
|
526
|
+
"""
|
527
|
+
parsed_name, extension = os.path.splitext(os.path.basename(path_input_model))
|
528
|
+
return 'model' if parsed_name.startswith('.') or len(parsed_name) == 0 else parsed_name
|
529
|
+
|
530
|
+
|
531
|
+
def get_model_name_from_args(argv: argparse.Namespace):
|
532
|
+
output_dir = os.getcwd()
|
533
|
+
if hasattr(argv, 'output_model') and argv.output_model:
|
534
|
+
model_name = argv.output_model
|
535
|
+
|
536
|
+
if not os.path.isdir(argv.output_model) and not argv.output_model.endswith(os.sep):
|
537
|
+
# In this branch we assume that model name is set in 'output_model'.
|
538
|
+
if not model_name.endswith('.xml'):
|
539
|
+
model_name += '.xml'
|
540
|
+
# Logic of creating and checking directory is covered in save_model() method.
|
541
|
+
return model_name
|
542
|
+
else:
|
543
|
+
# In this branch 'output_model' has directory without name of model.
|
544
|
+
# The directory may not exist.
|
545
|
+
if os.path.isdir(argv.output_model) and not os.access(argv.output_model, os.W_OK):
|
546
|
+
# If the provided path is existing directory, but not writable, then raise error
|
547
|
+
raise Error('The directory "{}" is not writable'.format(argv.output_model))
|
548
|
+
output_dir = argv.output_model
|
549
|
+
|
550
|
+
input_model = argv.input_model
|
551
|
+
if isinstance(input_model, (tuple, list)) and len(input_model) > 0:
|
552
|
+
input_model = input_model[0]
|
553
|
+
|
554
|
+
input_model = os.path.abspath(input_model)
|
555
|
+
|
556
|
+
if not isinstance(input_model, (str, pathlib.Path)):
|
557
|
+
return output_dir
|
558
|
+
|
559
|
+
input_model_name = os.path.basename(input_model)
|
560
|
+
if input_model_name == '':
|
561
|
+
input_model_name = os.path.basename(os.path.dirname(input_model))
|
562
|
+
|
563
|
+
# remove extension if exists
|
564
|
+
input_model_name = os.path.splitext(input_model_name)[0]
|
565
|
+
|
566
|
+
# if no valid name exists in input path set name to 'model'
|
567
|
+
if input_model_name == '':
|
568
|
+
raise Exception("Could not derive model name from input model. Please provide 'output_model' parameter.")
|
569
|
+
|
570
|
+
# add .xml extension
|
571
|
+
return os.path.join(output_dir, input_model_name + ".xml")
|
572
|
+
|
573
|
+
|
574
|
+
def get_absolute_path(path_to_file: str) -> str:
|
575
|
+
"""
|
576
|
+
Deduces absolute path of the file by a given path to the file
|
577
|
+
Args:
|
578
|
+
path_to_file: path to the file
|
579
|
+
|
580
|
+
Returns:
|
581
|
+
absolute path of the file
|
582
|
+
"""
|
583
|
+
if not isinstance(path_to_file, (str, pathlib.Path)):
|
584
|
+
return path_to_file
|
585
|
+
file_path = os.path.expanduser(path_to_file)
|
586
|
+
if not os.path.isabs(file_path):
|
587
|
+
file_path = os.path.join(os.getcwd(), file_path)
|
588
|
+
return file_path
|
589
|
+
|
590
|
+
|
591
|
+
def check_bool(value):
|
592
|
+
if isinstance(value, bool):
|
593
|
+
return value
|
594
|
+
elif isinstance(value, str):
|
595
|
+
if value.lower() not in ['true', 'false']:
|
596
|
+
raise argparse.ArgumentTypeError("expected a True/False value")
|
597
|
+
return value.lower() == 'true'
|
598
|
+
else:
|
599
|
+
raise argparse.ArgumentTypeError("expected a bool or str type")
|
600
|
+
|
601
|
+
|
602
|
+
def depersonalize(value: str, key: str):
|
603
|
+
dir_keys = [
|
604
|
+
'extension'
|
605
|
+
]
|
606
|
+
if isinstance(value, list):
|
607
|
+
updated_value = []
|
608
|
+
for elem in value:
|
609
|
+
updated_value.append(depersonalize(elem, key))
|
610
|
+
return updated_value
|
611
|
+
|
612
|
+
if not isinstance(value, str):
|
613
|
+
return value
|
614
|
+
res = []
|
615
|
+
for path in value.split(','):
|
616
|
+
if os.path.isdir(path) and key in dir_keys:
|
617
|
+
res.append('DIR')
|
618
|
+
elif os.path.isfile(path):
|
619
|
+
res.append(os.path.join('DIR', os.path.split(path)[1]))
|
620
|
+
else:
|
621
|
+
res.append(path)
|
622
|
+
return ','.join(res)
|
623
|
+
|
624
|
+
|
625
|
+
def get_available_front_ends(fem=None):
|
626
|
+
# Use this function as workaround to avoid IR frontend usage by MO
|
627
|
+
if fem is None:
|
628
|
+
return []
|
629
|
+
available_moc_front_ends = fem.get_available_front_ends()
|
630
|
+
if 'ir' in available_moc_front_ends:
|
631
|
+
available_moc_front_ends.remove('ir')
|
632
|
+
|
633
|
+
return available_moc_front_ends
|