[PyOV] Missed variable API in Model class (#21434)
* [PyOV] Missed variable API in Model class * fixes in model docstr and codestyle * add test * fix ci * fix ci
This commit is contained in:
parent
fcbb80d372
commit
ca87784a29
@ -17,6 +17,12 @@ OpenVINO Python API
|
||||
|
||||
openvino.runtime.op
|
||||
|
||||
.. autosummary::
|
||||
:toctree: _autosummary
|
||||
:template: custom-module-template.rst
|
||||
|
||||
openvino.runtime.op.util
|
||||
|
||||
.. autosummary::
|
||||
:toctree: _autosummary
|
||||
:template: custom-module-template.rst
|
||||
|
@ -111,7 +111,7 @@ void regclass_graph_Model(py::module m) {
|
||||
Create user-defined Model which is a representation of a model.
|
||||
|
||||
:param results: List of results.
|
||||
:type results: List[op.Result]
|
||||
:type results: List[openvino.runtime.Node]
|
||||
:param sinks: List of Nodes to be used as Sinks (e.g. Assign ops).
|
||||
:type sinks: List[openvino.runtime.Node]
|
||||
:param parameters: List of parameters.
|
||||
@ -221,7 +221,7 @@ void regclass_graph_Model(py::module m) {
|
||||
Create user-defined Model which is a representation of a model
|
||||
|
||||
:param results: List of results.
|
||||
:type results: List[op.Result]
|
||||
:type results: List[openvino.runtime.Node]
|
||||
:param sinks: List of Nodes to be used as Sinks (e.g. Assign ops).
|
||||
:type sinks: List[openvino.runtime.Node]
|
||||
:param parameters: List of parameters.
|
||||
@ -274,7 +274,7 @@ void regclass_graph_Model(py::module m) {
|
||||
Create user-defined Model which is a representation of a model
|
||||
|
||||
:param results: List of results.
|
||||
:type results: List[op.Result]
|
||||
:type results: List[openvino.runtime.Node]
|
||||
:param parameters: List of parameters.
|
||||
:type parameters: List[op.Parameter]
|
||||
:param variables: List of variables.
|
||||
@ -521,33 +521,33 @@ void regclass_graph_Model(py::module m) {
|
||||
R"(
|
||||
Return the model parameters.
|
||||
|
||||
:return: ParameterVector containing model parameters.
|
||||
:rtype: ParameterVector
|
||||
:return: a list of model's parameters.
|
||||
:rtype: List[op.Parameter]
|
||||
)");
|
||||
model.def_property_readonly("parameters",
|
||||
&ov::Model::get_parameters,
|
||||
R"(
|
||||
Return the model parameters.
|
||||
|
||||
:return: ParameterVector containing model parameters.
|
||||
:rtype: ParameterVector
|
||||
:return: a list of model's parameters.
|
||||
:rtype: List[op.Parameter]
|
||||
)");
|
||||
model.def("get_results",
|
||||
&ov::Model::get_results,
|
||||
R"(
|
||||
Return a list of model outputs.
|
||||
|
||||
:return: ResultVector containing model parameters.
|
||||
:rtype: ResultVector
|
||||
)");
|
||||
:return: a list of model's result nodes.
|
||||
:rtype: List[openvino.runtime.Node]
|
||||
)");
|
||||
model.def_property_readonly("results",
|
||||
&ov::Model::get_results,
|
||||
R"(
|
||||
Return a list of model outputs.
|
||||
Return a list of model outputs.
|
||||
|
||||
:return: ResultVector containing model parameters.
|
||||
:rtype: ResultVector
|
||||
)");
|
||||
:return: a list of model's result nodes.
|
||||
:rtype: List[openvino.runtime.Node]
|
||||
)");
|
||||
model.def("get_result",
|
||||
&ov::Model::get_result,
|
||||
R"(
|
||||
@ -555,7 +555,7 @@ void regclass_graph_Model(py::module m) {
|
||||
|
||||
:return: Node object representing result.
|
||||
:rtype: openvino.runtime.Node
|
||||
)");
|
||||
)");
|
||||
model.def_property_readonly("result",
|
||||
&ov::Model::get_result,
|
||||
R"(
|
||||
@ -747,6 +747,7 @@ void regclass_graph_Model(py::module m) {
|
||||
Delete Result node from the list of results. Method will not delete node from graph.
|
||||
|
||||
:param result: Result node to delete.
|
||||
:type result: openvino.runtime.Node
|
||||
)");
|
||||
|
||||
model.def("remove_parameter",
|
||||
@ -765,6 +766,7 @@ void regclass_graph_Model(py::module m) {
|
||||
* call graph validation to check all changes
|
||||
|
||||
:param parameter: Parameter node to delete.
|
||||
:type parameter: op.Parameter
|
||||
)");
|
||||
|
||||
model.def(
|
||||
@ -785,8 +787,20 @@ void regclass_graph_Model(py::module m) {
|
||||
Delete sink node from the list of sinks. Method doesn't delete node from graph.
|
||||
|
||||
:param sink: Sink to delete.
|
||||
:type sink: openvino.runtime.Node
|
||||
)");
|
||||
|
||||
model.def("remove_variable",
|
||||
&ov::Model::remove_variable,
|
||||
py::arg("variable"),
|
||||
R"(
|
||||
Delete variable from the list of variables.
|
||||
Method doesn't delete nodes that used this variable from the graph.
|
||||
|
||||
:param variable: Variable to delete.
|
||||
:type variable: op.util.Variable
|
||||
)");
|
||||
|
||||
model.def("add_parameters",
|
||||
&ov::Model::add_parameters,
|
||||
py::arg("parameters"),
|
||||
@ -813,8 +827,8 @@ void regclass_graph_Model(py::module m) {
|
||||
Method doesn't validate graph, it should be done manually after all changes.
|
||||
|
||||
:param results: new Result nodes.
|
||||
:type results: List[op.Result]
|
||||
)");
|
||||
:type results: List[openvino.runtime.Node]
|
||||
)");
|
||||
|
||||
model.def(
|
||||
"add_sinks",
|
||||
@ -830,13 +844,54 @@ void regclass_graph_Model(py::module m) {
|
||||
},
|
||||
py::arg("sinks"),
|
||||
R"(
|
||||
Add new sink nodes to the list.
|
||||
Add new sink nodes to the list.
|
||||
|
||||
Method doesn't validate graph, it should be done manually after all changes.
|
||||
|
||||
:param sinks: new sink nodes.
|
||||
:type sinks: List[openvino.runtime.Node]
|
||||
)");
|
||||
|
||||
model.def("add_variables",
|
||||
&ov::Model::add_variables,
|
||||
py::arg("variables"),
|
||||
R"(
|
||||
Add new variables to the list.
|
||||
|
||||
Method doesn't validate graph, it should be done manually after all changes.
|
||||
|
||||
:param sinks: new sink nodes.
|
||||
:type sinks: List[openvino.runtime.Node]
|
||||
)");
|
||||
:param variables: new variables to add.
|
||||
:type variables: List[op.util.Variable]
|
||||
)");
|
||||
|
||||
model.def("get_variables",
|
||||
&ov::Model::get_variables,
|
||||
R"(
|
||||
Return a list of model's variables.
|
||||
|
||||
:return: a list of model's variables.
|
||||
:rtype: List[op.util.Variable]
|
||||
)");
|
||||
|
||||
model.def_property_readonly("variables",
|
||||
&ov::Model::get_variables,
|
||||
R"(
|
||||
Return a list of model's variables.
|
||||
|
||||
:return: a list of model's variables.
|
||||
:rtype: List[op.util.Variable]
|
||||
)");
|
||||
|
||||
model.def("get_variable_by_id",
|
||||
&ov::Model::get_variable_by_id,
|
||||
R"(
|
||||
Return a variable by specified variable_id.
|
||||
|
||||
:param variable_id: a variable id to get variable node.
|
||||
:type variable_id: str
|
||||
:return: a variable node.
|
||||
:rtype: op.util.Variable
|
||||
)");
|
||||
|
||||
model.def(
|
||||
"get_sinks",
|
||||
@ -858,10 +913,10 @@ void regclass_graph_Model(py::module m) {
|
||||
return cast_to_node_vector(sinks);
|
||||
},
|
||||
R"(
|
||||
Return a list of model outputs.
|
||||
Return a list of model's sinks.
|
||||
|
||||
:return: ResultVector containing model parameters.
|
||||
:rtype: ResultVector
|
||||
:return: a list of model's sinks.
|
||||
:rtype: List[openvino.runtime.Node]
|
||||
)");
|
||||
|
||||
model.def(
|
||||
|
@ -27,17 +27,7 @@ from openvino.runtime import ProfilingInfo
|
||||
from openvino.preprocess import PrePostProcessor
|
||||
|
||||
from tests import skip_need_mock_op
|
||||
from tests.utils.helpers import generate_image, get_relu_model
|
||||
|
||||
|
||||
def create_model_with_memory(input_shape, data_type):
|
||||
input_data = ops.parameter(input_shape, name="input_data", dtype=data_type)
|
||||
rv = ops.read_value(input_data, "var_id_667", data_type, input_shape)
|
||||
add = ops.add(rv, input_data, name="MemoryAdd")
|
||||
node = ops.assign(add, "var_id_667")
|
||||
res = ops.result(add, "res")
|
||||
model = Model(results=[res], sinks=[node], parameters=[input_data], name="name")
|
||||
return model
|
||||
from tests.utils.helpers import generate_image, get_relu_model, generate_model_with_memory
|
||||
|
||||
|
||||
def create_simple_request_and_inputs(device):
|
||||
@ -677,7 +667,7 @@ def test_query_state_write_buffer(device, input_shape, data_type, mode):
|
||||
from openvino import Tensor
|
||||
from openvino.runtime.utils.types import get_dtype
|
||||
|
||||
model = create_model_with_memory(input_shape, data_type)
|
||||
model = generate_model_with_memory(input_shape, data_type)
|
||||
model.validate_nodes_and_infer_types()
|
||||
compiled_model = core.compile_model(model=model, device_name=device)
|
||||
request = compiled_model.create_infer_request()
|
||||
|
@ -23,8 +23,9 @@ from openvino import (
|
||||
serialize,
|
||||
)
|
||||
from openvino.runtime import Output
|
||||
from openvino.runtime.op.util import VariableInfo, Variable
|
||||
|
||||
from tests.utils.helpers import generate_add_model, create_filename_for_test
|
||||
from tests.utils.helpers import generate_add_model, generate_model_with_memory, create_filename_for_test
|
||||
|
||||
|
||||
def test_descriptor_tensor():
|
||||
@ -547,3 +548,21 @@ def test_model_get_raw_address():
|
||||
|
||||
assert model._get_raw_address() == model_with_same_addr._get_raw_address()
|
||||
assert model._get_raw_address() != model_different._get_raw_address()
|
||||
|
||||
|
||||
def test_model_add_remove_variable():
|
||||
model = generate_model_with_memory(input_shape=Shape([2, 1]), data_type=Type.f32)
|
||||
|
||||
var_info = VariableInfo()
|
||||
var_info.data_shape = PartialShape([2, 1])
|
||||
var_info.data_type = Type.f32
|
||||
var_info.variable_id = "v1"
|
||||
variable_1 = Variable(var_info)
|
||||
|
||||
assert len(model.get_variables()) == 1
|
||||
model.add_variables([variable_1])
|
||||
assert len(model.get_variables()) == 2
|
||||
variable_by_id = model.get_variable_by_id("var_id_667")
|
||||
assert variable_by_id.info.variable_id == "var_id_667"
|
||||
model.remove_variable(variable_1)
|
||||
assert len(model.get_variables()) == 1
|
||||
|
@ -209,6 +209,16 @@ def generate_add_model() -> openvino._pyopenvino.Model:
|
||||
return Model(add, [param1, param2], "TestModel")
|
||||
|
||||
|
||||
def generate_model_with_memory(input_shape, data_type) -> openvino._pyopenvino.Model:
|
||||
input_data = ops.parameter(input_shape, name="input_data", dtype=data_type)
|
||||
rv = ops.read_value(input_data, "var_id_667", data_type, input_shape)
|
||||
add = ops.add(rv, input_data, name="MemoryAdd")
|
||||
node = ops.assign(add, "var_id_667")
|
||||
res = ops.result(add, "res")
|
||||
model = Model(results=[res], sinks=[node], parameters=[input_data], name="TestModel")
|
||||
return model
|
||||
|
||||
|
||||
def create_filename_for_test(test_name, tmp_path, is_xml_path=False, is_bin_path=False):
|
||||
"""Return a tuple with automatically generated paths for xml and bin files.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user