From 2aead0dc3fae83ad61a00509656c70325839ebb4 Mon Sep 17 00:00:00 2001 From: Jan Iwaszkiewicz Date: Wed, 28 Sep 2022 18:38:52 +0200 Subject: [PATCH] [PyOV] Making offline_transformations a private module (#13213) --- src/bindings/python/.gitignore | 2 + src/bindings/python/setup.py | 1 + .../_offline_transformations/__init__.py | 22 ++++ .../offline_transformations/__init__.py | 110 ++++++++++++++++-- .../core/offline_transformations.cpp | 6 +- .../python/src/pyopenvino/pyopenvino.cpp | 2 +- .../python/tests/test_package_versions.py | 2 +- .../tools/mo/back/offline_transformations.py | 13 ++- tools/mo/openvino/tools/mo/main.py | 2 +- .../tools/mo/moc_frontend/serialize.py | 2 +- .../tools/mo/utils/check_ie_bindings.py | 6 +- tools/mo/openvino/tools/mo/utils/error.py | 2 +- tools/mo/unit_tests/mo/utils/error_test.py | 2 +- 13 files changed, 144 insertions(+), 28 deletions(-) create mode 100644 src/bindings/python/src/openvino/_offline_transformations/__init__.py diff --git a/src/bindings/python/.gitignore b/src/bindings/python/.gitignore index d9375a8d070..0d6015bc5e6 100644 --- a/src/bindings/python/.gitignore +++ b/src/bindings/python/.gitignore @@ -122,6 +122,8 @@ Icon # Thumbnails ._* +# Allow these specific folder +!src/openvino/_offline_transformations/ # Files that might appear in the root of a volume .DocumentRevisions-V100 diff --git a/src/bindings/python/setup.py b/src/bindings/python/setup.py index f39bee9a1b6..9ede50f76c2 100644 --- a/src/bindings/python/setup.py +++ b/src/bindings/python/setup.py @@ -43,6 +43,7 @@ packages = [ "openvino.frontend", "openvino.preprocess", "openvino.offline_transformations", + "openvino._offline_transformations", "openvino.runtime", "openvino.runtime.opset1", "openvino.runtime.opset2", diff --git a/src/bindings/python/src/openvino/_offline_transformations/__init__.py b/src/bindings/python/src/openvino/_offline_transformations/__init__.py new file mode 100644 index 00000000000..be905cfcdf2 --- /dev/null +++ b/src/bindings/python/src/openvino/_offline_transformations/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# flake8: noqa + +from openvino.utils import add_openvino_libs_to_path +add_openvino_libs_to_path() + +from openvino.pyopenvino import get_version +__version__ = get_version() + +from openvino.pyopenvino._offline_transformations import apply_moc_transformations +from openvino.pyopenvino._offline_transformations import apply_moc_legacy_transformations +from openvino.pyopenvino._offline_transformations import apply_pot_transformations +from openvino.pyopenvino._offline_transformations import apply_low_latency_transformation +from openvino.pyopenvino._offline_transformations import apply_pruning_transformation +from openvino.pyopenvino._offline_transformations import generate_mapping_file +from openvino.pyopenvino._offline_transformations import apply_make_stateful_transformation +from openvino.pyopenvino._offline_transformations import compress_model_transformation +from openvino.pyopenvino._offline_transformations import compress_quantize_weights_transformation +from openvino.pyopenvino._offline_transformations import convert_sequence_to_tensor_iterator_transformation diff --git a/src/bindings/python/src/openvino/offline_transformations/__init__.py b/src/bindings/python/src/openvino/offline_transformations/__init__.py index b8d105a5392..23b6501bc0f 100644 --- a/src/bindings/python/src/openvino/offline_transformations/__init__.py +++ b/src/bindings/python/src/openvino/offline_transformations/__init__.py @@ -3,20 +3,108 @@ # SPDX-License-Identifier: Apache-2.0 # flake8: noqa +# type: ignore -from openvino.utils import add_openvino_libs_to_path +import warnings + +warnings.warn(message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future, use `openvino.runtime.passes` instead!", + category=FutureWarning) + +from openvino.utils import add_openvino_libs_to_path, deprecated add_openvino_libs_to_path() from openvino.pyopenvino import get_version +from openvino.pyopenvino import serialize as _base_serialize +import openvino.pyopenvino._offline_transformations as _base + __version__ = get_version() -from openvino.pyopenvino.offline_transformations import apply_moc_transformations -from openvino.pyopenvino.offline_transformations import apply_moc_legacy_transformations -from openvino.pyopenvino.offline_transformations import apply_pot_transformations -from openvino.pyopenvino.offline_transformations import apply_low_latency_transformation -from openvino.pyopenvino.offline_transformations import apply_pruning_transformation -from openvino.pyopenvino.offline_transformations import generate_mapping_file -from openvino.pyopenvino.offline_transformations import apply_make_stateful_transformation -from openvino.pyopenvino.offline_transformations import compress_model_transformation -from openvino.pyopenvino.offline_transformations import compress_quantize_weights_transformation -from openvino.pyopenvino.offline_transformations import convert_sequence_to_tensor_iterator_transformation + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future, use `openvino.runtime.passes` instead!") +def serialize(model, xml_path, bin_path, version): + _base_serialize(model, xml_path, bin_path, version) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_moc_transformations(model, cf): + _base.apply_moc_transformations(model, cf) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_moc_legacy_transformations(model, params_with_custom_types): + _base.apply_moc_legacy_transformations(model, params_with_custom_types) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_pot_transformations(model, device): + _base.apply_pot_transformations(model, device) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_low_latency_transformation(model, use_const_initializer): + _base.apply_low_latency_transformation(model, use_const_initializer) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_pruning_transformation(model): + _base.apply_pruning_transformation(model) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def generate_mapping_file(model, path, extract_names): + _base.generate_mapping_file(model, path, extract_names) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def apply_make_stateful_transformation(model, param_res_names): + _base.apply_make_stateful_transformation(model, param_res_names) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def compress_model_transformation(model): + _base.compress_model_transformation(model) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def compress_quantize_weights_transformation(model): + _base.compress_quantize_weights_transformation(model) + + +@deprecated(version="2023.1", + message="The module is private and following namespace " + "`offline_transformations` will be removed in " + "the future.") +def convert_sequence_to_tensor_iterator_transformation(model): + _base.convert_sequence_to_tensor_iterator_transformation(model) diff --git a/src/bindings/python/src/pyopenvino/core/offline_transformations.cpp b/src/bindings/python/src/pyopenvino/core/offline_transformations.cpp index 37f68b89188..8c60d656efe 100644 --- a/src/bindings/python/src/pyopenvino/core/offline_transformations.cpp +++ b/src/bindings/python/src/pyopenvino/core/offline_transformations.cpp @@ -25,8 +25,10 @@ namespace py = pybind11; void regmodule_offline_transformations(py::module m) { - py::module m_offline_transformations = m.def_submodule("offline_transformations", "Offline transformations module"); - m_offline_transformations.doc() = "openvino.offline_transformations module contains different offline passes."; + py::module m_offline_transformations = + m.def_submodule("_offline_transformations", "Offline transformations module"); + m_offline_transformations.doc() = + "openvino._offline_transformations is a private module contains different offline passes."; m_offline_transformations.def( "apply_moc_transformations", diff --git a/src/bindings/python/src/pyopenvino/pyopenvino.cpp b/src/bindings/python/src/pyopenvino/pyopenvino.cpp index 4fe4628fc87..8981ce3674c 100644 --- a/src/bindings/python/src/pyopenvino/pyopenvino.cpp +++ b/src/bindings/python/src/pyopenvino/pyopenvino.cpp @@ -241,6 +241,6 @@ PYBIND11_MODULE(pyopenvino, m) { regclass_frontend_ProgressReporterExtension(m); regclass_frontend_OpExtension(m); - // transformations + // transformations - private module regmodule_offline_transformations(m); } diff --git a/src/bindings/python/tests/test_package_versions.py b/src/bindings/python/tests/test_package_versions.py index 115538efc45..89943e4a90e 100644 --- a/src/bindings/python/tests/test_package_versions.py +++ b/src/bindings/python/tests/test_package_versions.py @@ -5,7 +5,7 @@ import openvino.preprocess as ov_pre import openvino.runtime as ov_run import openvino.frontend as ov_front -import openvino.offline_transformations as ov_off_transf +import openvino._offline_transformations as ov_off_transf import openvino.pyopenvino as ov_py diff --git a/tools/mo/openvino/tools/mo/back/offline_transformations.py b/tools/mo/openvino/tools/mo/back/offline_transformations.py index ac0364badbf..a846d42f3f1 100644 --- a/tools/mo/openvino/tools/mo/back/offline_transformations.py +++ b/tools/mo/openvino/tools/mo/back/offline_transformations.py @@ -11,9 +11,9 @@ from openvino.runtime import Model def get_available_transformations(): try: - from openvino.offline_transformations import apply_low_latency_transformation # pylint: disable=import-error,no-name-in-module - from openvino.offline_transformations import apply_make_stateful_transformation # pylint: disable=import-error,no-name-in-module - from openvino.offline_transformations import apply_pruning_transformation # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_low_latency_transformation # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_make_stateful_transformation # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_pruning_transformation # pylint: disable=import-error,no-name-in-module return { 'MakeStateful': apply_make_stateful_transformation, 'LowLatency2': apply_low_latency_transformation, @@ -35,20 +35,21 @@ def apply_user_transformations(func: object, transforms: list): def apply_moc_transformations(func: object): - from openvino.offline_transformations import apply_moc_transformations # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_moc_transformations # pylint: disable=import-error,no-name-in-module apply_moc_transformations(func, False) def apply_moc_legacy_transformations(func: object, params_with_custom_types: List[str]): - from openvino.offline_transformations import apply_moc_legacy_transformations # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_moc_legacy_transformations # pylint: disable=import-error,no-name-in-module apply_moc_legacy_transformations(func, params_with_custom_types) def compress_model(func: object): - from openvino.offline_transformations import compress_model_transformation # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import compress_model_transformation # pylint: disable=import-error,no-name-in-module compress_model_transformation(func) + def apply_offline_transformations(func: Model, argv: argparse.Namespace): from openvino.tools.mo.back.preprocessing import apply_preprocessing # pylint: disable=no-name-in-module,import-error diff --git a/tools/mo/openvino/tools/mo/main.py b/tools/mo/openvino/tools/mo/main.py index 280a08bb15c..842adfc52b9 100644 --- a/tools/mo/openvino/tools/mo/main.py +++ b/tools/mo/openvino/tools/mo/main.py @@ -23,7 +23,7 @@ from openvino.tools.mo.back.ie_ir_ver_2.emitter import append_ir_info # pylint: disable=no-name-in-module,import-error from openvino.frontend import FrontEndManager -from openvino.offline_transformations import generate_mapping_file +from openvino._offline_transformations import generate_mapping_file from openvino.runtime import serialize diff --git a/tools/mo/openvino/tools/mo/moc_frontend/serialize.py b/tools/mo/openvino/tools/mo/moc_frontend/serialize.py index 2ef016129ee..fc2f3bf365e 100644 --- a/tools/mo/openvino/tools/mo/moc_frontend/serialize.py +++ b/tools/mo/openvino/tools/mo/moc_frontend/serialize.py @@ -23,7 +23,7 @@ def moc_emit_ir(ngraph_function: Model, argv: argparse.Namespace): apply_moc_legacy_transformations apply_moc_transformations(ngraph_function) - from openvino.offline_transformations import compress_quantize_weights_transformation + from openvino._offline_transformations import compress_quantize_weights_transformation compress_quantize_weights_transformation(ngraph_function) if argv.framework == "onnx": diff --git a/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py b/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py index 4e1ed61ead2..192cd54ab6c 100644 --- a/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py +++ b/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py @@ -48,10 +48,10 @@ def import_core_modules(silent: bool, path_to_module: str): :return: True if all imports were successful and False otherwise """ try: - from openvino.offline_transformations import apply_moc_transformations, apply_moc_legacy_transformations,\ + from openvino._offline_transformations import apply_moc_transformations, apply_moc_legacy_transformations,\ apply_low_latency_transformation # pylint: disable=import-error,no-name-in-module - from openvino.offline_transformations import apply_make_stateful_transformation, generate_mapping_file # pylint: disable=import-error,no-name-in-module - from openvino.offline_transformations import generate_mapping_file, apply_make_stateful_transformation # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import apply_make_stateful_transformation, generate_mapping_file # pylint: disable=import-error,no-name-in-module + from openvino._offline_transformations import generate_mapping_file, apply_make_stateful_transformation # pylint: disable=import-error,no-name-in-module from openvino.runtime import Model, serialize, get_version # pylint: disable=import-error,no-name-in-module from openvino.runtime.op import Parameter # pylint: disable=import-error,no-name-in-module diff --git a/tools/mo/openvino/tools/mo/utils/error.py b/tools/mo/openvino/tools/mo/utils/error.py index d496aa2f32d..d67287195f0 100644 --- a/tools/mo/openvino/tools/mo/utils/error.py +++ b/tools/mo/openvino/tools/mo/utils/error.py @@ -36,7 +36,7 @@ class InternalError(BasicError): def classify_error_type(e): patterns = [ - # Example: No module named 'openvino.offline_transformations.offline_transformations_api' + # Example: No module named 'openvino._offline_transformations.offline_transformations_api' r"No module named \'\S+\'", # Example: cannot import name 'IECore' from 'openvino.inference_engine' (unknown location) r"cannot import name \'\S+\'", diff --git a/tools/mo/unit_tests/mo/utils/error_test.py b/tools/mo/unit_tests/mo/utils/error_test.py index 8da966662ac..7596b159cec 100644 --- a/tools/mo/unit_tests/mo/utils/error_test.py +++ b/tools/mo/unit_tests/mo/utils/error_test.py @@ -8,7 +8,7 @@ from openvino.tools.mo.utils.error import classify_error_type class TestingErrorClassifier(unittest.TestCase): def test_no_module(self): - message = "No module named 'openvino.offline_transformations.offline_transformations_api'" + message = "No module named 'openvino._offline_transformations.offline_transformations_api'" self.assertEqual(classify_error_type(message), message) def test_no_module_neg(self):