19 #include <ngraph/op/parameter.hpp>
20 #include "ngraph/op/op.hpp"
33 NGRAPH_RTTI_DECLARATION;
50 virtual std::shared_ptr<InputDescription> copy()
const = 0;
52 virtual const type_info_t& get_type_info()
const = 0;
54 uint64_t m_input_index{0};
55 uint64_t m_body_parameter_index{0};
65 static constexpr
type_info_t type_info{
"SliceInputDescription", 0};
66 const type_info_t& get_type_info()
const override {
return type_info; }
79 uint64_t body_parameter_index,
86 std::shared_ptr<InputDescription> copy()
const override;
89 int64_t m_part_size{0};
101 static constexpr
type_info_t type_info{
"MergedInputDescription", 0};
102 const type_info_t& get_type_info()
const override {
return type_info; }
115 uint64_t body_parameter_index,
116 uint64_t body_value_index);
118 std::shared_ptr<InputDescription> copy()
const override;
119 uint64_t m_body_value_index{0};
129 static constexpr
type_info_t type_info{
"InvariantInputDescription", 0};
130 const type_info_t& get_type_info()
const override {
return type_info; }
139 std::shared_ptr<InputDescription> copy()
const override;
158 virtual std::shared_ptr<OutputDescription> copy()
const = 0;
159 virtual const type_info_t& get_type_info()
const = 0;
161 uint64_t m_body_value_index{0};
162 uint64_t m_output_index{0};
169 static constexpr
type_info_t type_info{
"ConcatOutputDescription", 0};
170 const type_info_t& get_type_info()
const override {
return type_info; }
183 uint64_t output_index,
191 std::shared_ptr<OutputDescription> copy()
const override;
194 int64_t m_part_size{0};
203 static constexpr
type_info_t type_info{
"BodyOutputDescription", 0};
204 const type_info_t& get_type_info()
const override {
return type_info; }
214 uint64_t output_index,
217 std::shared_ptr<OutputDescription> copy()
const override;
218 int64_t m_iteration{0};
221 virtual std::shared_ptr<Function> get_function() {
return m_body; };
222 virtual std::shared_ptr<const Function> get_function()
const {
return m_body; };
223 virtual void set_function(
const std::shared_ptr<Function>& func) { m_body = func; };
227 return m_input_descriptions;
234 return m_input_descriptions;
237 const std::vector<std::shared_ptr<OutputDescription>>&
240 return m_output_descriptions;
247 return m_output_descriptions;
304 int64_t iteration = -1);
330 int64_t get_num_iterations()
const {
return m_num_iterations; }
332 int64_t m_num_iterations =
340 explicit SubGraphOp(
const OutputVector& args);
342 std::shared_ptr<Function> m_body;
343 std::vector<std::shared_ptr<op::util::SubGraphOp::InputDescription>>
344 m_input_descriptions;
345 std::vector<std::shared_ptr<op::util::SubGraphOp::OutputDescription>>
346 m_output_descriptions;
348 using InputDescriptionPtr = std::shared_ptr<util::SubGraphOp::InputDescription>;
349 using OutputDescriptionPtr = std::shared_ptr<util::SubGraphOp::OutputDescription>;
350 using InputDescriptionVector = std::vector<InputDescriptionPtr>;
351 using OutputDescriptionVector = std::vector<OutputDescriptionPtr>;
357 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>
359 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>
363 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>& value)
365 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>(
371 "AttributeAdapter<std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::"
372 "InputDescription>>>",
374 const DiscreteTypeInfo& get_type_info()
const override {
return type_info; }
379 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>
381 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>
385 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>& value)
387 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>(
393 "AttributeAdapter<std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::"
394 "OutputDescription>>>",
396 const DiscreteTypeInfo& get_type_info()
const override {
return type_info; }
An AttributeAdapter "captures" an attribute as an AT& and makes it available as a ValueAccessor<VAT>.
Definition: attribute_adapter.hpp:171
Definition: attribute_adapter.hpp:79
A handle for one of a node's outputs.
Definition: node_output.hpp:42
Root of all actual ops.
Definition: op.hpp:29
Produces an output from a specific iteration.
Definition: sub_graph_base.hpp:201
BodyOutputDescription(uint64_t body_value_index, uint64_t output_index, int64_t iteration)
Constructs a new instance.
Produces an output by concatenating an output from each iteration.
Definition: sub_graph_base.hpp:167
ConcatOutputDescription(uint64_t body_value_index, uint64_t output_index, int64_t start, int64_t stride, int64_t part_size, int64_t end, int64_t axis)
Constructs a new instance.
Describes how a SubGraphOp output is produced from the body.
Definition: sub_graph_base.hpp:144
OutputDescription(uint64_t body_value_index, uint64_t output_index)
Constructs a new instance.
Abstract base class for sub-graph based ops, i.e ops that have sub-graph.
Definition: sub_graph_base.hpp:31
virtual void set_sliced_input(const std::shared_ptr< Parameter > ¶meter, const Output< Node > &value, int64_t start, int64_t stride, int64_t part_size, int64_t end, int64_t axis)
Indicate that a body parameter comes from slices of a value.
virtual Output< Node > get_iter_value(const Output< Node > &body_value, int64_t iteration=-1)
Gets a value for a particular iteration point.
virtual void set_invariant_input(const std::shared_ptr< Parameter > &body_parameter, const Output< Node > &value)
Indicates that a body parameter has an invariant value during iteration that may depend on values com...
std::vector< std::shared_ptr< InputDescription > > & get_input_descriptions()
Definition: sub_graph_base.hpp:232
const std::vector< std::shared_ptr< OutputDescription > > & get_output_descriptions() const
Definition: sub_graph_base.hpp:238
virtual void set_merged_input(const std::shared_ptr< Parameter > &body_parameter, const Output< Node > &initial_value, const Output< Node > &successive_value)
Indicates that a body parameter has an initial value in the first iteration and computed value therea...
virtual Output< Node > get_concatenated_slices(const Output< Node > &value, int64_t start, int64_t stride, int64_t part_size, int64_t end, int64_t axis)
Concatenates slices from all iterations.
std::vector< std::shared_ptr< OutputDescription > > & get_output_descriptions()
Definition: sub_graph_base.hpp:245
const std::vector< std::shared_ptr< InputDescription > > & get_input_descriptions() const
Definition: sub_graph_base.hpp:225
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:28