diff --git a/src/bindings/python/src/openvino/runtime/passes/__init__.py b/src/bindings/python/src/openvino/runtime/passes/__init__.py index f43f27db3a3..6a3dfd63039 100644 --- a/src/bindings/python/src/openvino/runtime/passes/__init__.py +++ b/src/bindings/python/src/openvino/runtime/passes/__init__.py @@ -14,6 +14,6 @@ from openvino._pyopenvino.passes import ( type_matches, type_matches_any, ) -from openvino._pyopenvino.passes import Serialize, ConstantFolding, VisualizeTree, MakeStateful, LowLatency2, ConvertFP32ToFP16 +from openvino._pyopenvino.passes import Serialize, ConstantFolding, VisualizeTree, MakeStateful, LowLatency2, ConvertFP32ToFP16, Version from openvino.runtime.passes.manager import Manager from openvino.runtime.passes.graph_rewrite import GraphRewrite, BackwardGraphRewrite diff --git a/src/bindings/python/src/pyopenvino/graph/passes/manager.cpp b/src/bindings/python/src/pyopenvino/graph/passes/manager.cpp index a8a2950aedf..814a9974f39 100644 --- a/src/bindings/python/src/pyopenvino/graph/passes/manager.cpp +++ b/src/bindings/python/src/pyopenvino/graph/passes/manager.cpp @@ -19,17 +19,6 @@ namespace py = pybind11; using Version = ov::pass::Serialize::Version; using FilePaths = std::pair; -inline Version convert_to_version(const std::string& version) { - if (version == "UNSPECIFIED") - return Version::UNSPECIFIED; - if (version == "IR_V10") - return Version::IR_V10; - if (version == "IR_V11") - return Version::IR_V11; - throw ov::Exception("Invoked with wrong version argument: '" + version + - "'! The supported versions are: 'UNSPECIFIED'(default), 'IR_V10', 'IR_V11'."); -} - void regclass_passes_Manager(py::module m) { py::class_ manager(m, "Manager"); manager.doc() = "openvino.runtime.passes.Manager executes sequence of transformation on a given Model"; @@ -97,7 +86,7 @@ void regclass_passes_Manager(py::module m) { if (pass_name == "Serialize") { self.register_pass(file_paths.first, file_paths.second, - convert_to_version(version)); + Common::utils::convert_to_version(version)); } }, py::arg("pass_name"), @@ -140,7 +129,7 @@ void regclass_passes_Manager(py::module m) { "", "Please use register_pass(Serialize(xml, bin, version)) instead."); if (pass_name == "Serialize") { - self.register_pass(xml_path, bin_path, convert_to_version(version)); + self.register_pass(xml_path, bin_path, Common::utils::convert_to_version(version)); } }, py::arg("pass_name"), diff --git a/src/bindings/python/src/pyopenvino/graph/passes/transformations.cpp b/src/bindings/python/src/pyopenvino/graph/passes/transformations.cpp index 3dbbbde10c2..970e36e2c87 100644 --- a/src/bindings/python/src/pyopenvino/graph/passes/transformations.cpp +++ b/src/bindings/python/src/pyopenvino/graph/passes/transformations.cpp @@ -20,37 +20,37 @@ #include "pyopenvino/utils/utils.hpp" namespace py = pybind11; +using Version = ov::pass::Serialize::Version; void regclass_transformations(py::module m) { + py::enum_(m, "Version", py::arithmetic()) + .value("UNSPECIFIED", Version::UNSPECIFIED) + .value("IR_V10", Version::IR_V10) + .value("IR_V11", Version::IR_V11); + py::class_, ov::pass::ModelPass, ov::pass::PassBase> serialize(m, "Serialize"); serialize.doc() = "openvino.runtime.passes.Serialize transformation"; - serialize.def(py::init([](const py::object& path_to_xml, const py::object& path_to_bin) { - return std::make_shared(Common::utils::convert_path_to_string(path_to_xml), - Common::utils::convert_path_to_string(path_to_bin)); - }), - py::arg("path_to_xml"), - py::arg("path_to_bin"), - R"( - Create Serialize pass which is used for Model to IR serialization. - - :param path_to_xml: Path where *.xml file will be saved. - :type path_to_xml: Union[str, bytes, pathlib.Path] - - :param path_to_xml: Path where *.bin file will be saved. - :type path_to_xml: Union[str, bytes, pathlib.Path] - )"); serialize.def( - py::init( - [](const py::object& path_to_xml, const py::object& path_to_bin, ov::pass::Serialize::Version version) { + py::init([](const py::object& path_to_xml, const py::object& path_to_bin, const py::object& version) { + if (py::isinstance(version)) { + return std::make_shared( + Common::utils::convert_path_to_string(path_to_xml), + Common::utils::convert_path_to_string(path_to_bin), + Common::utils::convert_to_version(version.cast())); + } else if (py::isinstance(version)) { return std::make_shared(Common::utils::convert_path_to_string(path_to_xml), Common::utils::convert_path_to_string(path_to_bin), - version); - }), + version.cast()); + } else { + return std::make_shared(Common::utils::convert_path_to_string(path_to_xml), + Common::utils::convert_path_to_string(path_to_bin)); + } + }), py::arg("path_to_xml"), py::arg("path_to_bin"), - py::arg("version"), + py::arg("version") = py::none(), R"( Create Serialize pass which is used for Model to IR serialization. @@ -60,8 +60,8 @@ void regclass_transformations(py::module m) { :param path_to_xml: Path where *.bin file will be saved. :type path_to_xml: Union[str, bytes, pathlib.Path] - :param version: serialized IR version. - :type version: int + :param version: Optional serialized IR version. + :type version: Union[str, openvino.runtime.passes.Version] )"); py::class_