@@ -128,6 +128,18 @@ static std::unordered_map<std::string, ov::PartialShape> get_variables_shapes(co
128
128
return variables_shape_map;
129
129
}
130
130
131
+ template <typename T>
132
+ static int64_t find_sink_position (const ov::SinkVector& sinks, const std::shared_ptr<T>& sink) {
133
+ int64_t pos = 0 ;
134
+ for (const auto & s : sinks) {
135
+ if (s == sink) {
136
+ return pos;
137
+ }
138
+ pos++;
139
+ };
140
+ return -1 ;
141
+ }
142
+
131
143
void regclass_graph_Model (py::module m) {
132
144
py::class_<ov::Model, std::shared_ptr<ov::Model>> model (m, " Model" , py::module_local ());
133
145
model.doc () = " openvino.runtime.Model wraps ov::Model" ;
@@ -750,6 +762,75 @@ void regclass_graph_Model(py::module m) {
750
762
:rtype: int
751
763
)" );
752
764
765
+ model.def (
766
+ " get_sink_index" ,
767
+ [](ov::Model& self, const ov::Output<ov::Node>& value) -> int64_t {
768
+ auto node = value.get_node_shared_ptr ();
769
+ if (ov::is_type<ov::op::v6::Assign>(node)) {
770
+ return find_sink_position (self.get_sinks (), std::dynamic_pointer_cast<ov::op::Sink>(node));
771
+ } else {
772
+ throw py::type_error (" Incorrect argument type. Output sink node is expected as argument." );
773
+ }
774
+ },
775
+ py::arg (" value" ),
776
+ R"(
777
+ Return index of sink.
778
+
779
+ Return -1 if `value` not matched.
780
+
781
+ :param value: Output sink node handle
782
+ :type value: openvino.runtime.Output
783
+ :return: Index of sink node referenced by output handle.
784
+ :rtype: int
785
+ )" );
786
+
787
+ model.def (
788
+ " get_sink_index" ,
789
+ [](ov::Model& self, const ov::Output<const ov::Node>& value) -> int64_t {
790
+ auto node = value.get_node_shared_ptr ();
791
+ if (ov::is_type<ov::op::v6::Assign>(node)) {
792
+ return find_sink_position (self.get_sinks (), std::dynamic_pointer_cast<const ov::op::Sink>(node));
793
+ } else {
794
+ throw py::type_error (" Incorrect argument type. Output sink node is expected as argument." );
795
+ }
796
+ },
797
+ py::arg (" value" ),
798
+ R"(
799
+ Return index of sink.
800
+
801
+ Return -1 if `value` not matched.
802
+
803
+ :param value: Output sink node handle
804
+ :type value: openvino.runtime.Output
805
+ :return: Index of sink node referenced by output handle.
806
+ :rtype: int
807
+ )" );
808
+
809
+ model.def (
810
+ " get_sink_index" ,
811
+ [](ov::Model& self, const py::object& node) -> int64_t {
812
+ if (py::isinstance<ov::op::v6::Assign>(node)) {
813
+ auto sink = std::dynamic_pointer_cast<ov::op::Sink>(node.cast <std::shared_ptr<ov::op::v6::Assign>>());
814
+ return find_sink_position (self.get_sinks (), sink);
815
+ } else if (py::isinstance<ov::Node>(node)) {
816
+ auto sink = std::dynamic_pointer_cast<ov::op::Sink>(node.cast <std::shared_ptr<ov::Node>>());
817
+ return find_sink_position (self.get_sinks (), sink);
818
+ } else {
819
+ throw py::type_error (" Incorrect argument type. Sink node is expected as argument." );
820
+ }
821
+ },
822
+ py::arg (" sink" ),
823
+ R"(
824
+ Return index of sink node.
825
+
826
+ Return -1 if `sink` not matched.
827
+
828
+ :param sink: Sink node.
829
+ :type sink: openvino.runtime.Node
830
+ :return: Index of sink node.
831
+ :rtype: int
832
+ )" );
833
+
753
834
model.def (" get_name" ,
754
835
&ov::Model::get_name,
755
836
R"(
0 commit comments