7 #include <ngraph/op/parameter.hpp>
8 #include "ngraph/op/op.hpp"
21 NGRAPH_RTTI_DECLARATION;
38 virtual std::shared_ptr<InputDescription> copy()
const = 0;
40 virtual const type_info_t& get_type_info()
const = 0;
42 uint64_t m_input_index{0};
43 uint64_t m_body_parameter_index{0};
53 static constexpr
type_info_t type_info{
"SliceInputDescription", 0};
54 const type_info_t& get_type_info()
const override {
return type_info; }
67 uint64_t body_parameter_index,
74 std::shared_ptr<InputDescription> copy()
const override;
77 int64_t m_part_size{0};
89 static constexpr
type_info_t type_info{
"MergedInputDescription", 0};
90 const type_info_t& get_type_info()
const override {
return type_info; }
103 uint64_t body_parameter_index,
104 uint64_t body_value_index);
106 std::shared_ptr<InputDescription> copy()
const override;
107 uint64_t m_body_value_index{0};
117 static constexpr
type_info_t type_info{
"InvariantInputDescription", 0};
118 const type_info_t& get_type_info()
const override {
return type_info; }
127 std::shared_ptr<InputDescription> copy()
const override;
146 virtual std::shared_ptr<OutputDescription> copy()
const = 0;
147 virtual const type_info_t& get_type_info()
const = 0;
149 uint64_t m_body_value_index{0};
150 uint64_t m_output_index{0};
157 static constexpr
type_info_t type_info{
"ConcatOutputDescription", 0};
158 const type_info_t& get_type_info()
const override {
return type_info; }
171 uint64_t output_index,
179 std::shared_ptr<OutputDescription> copy()
const override;
182 int64_t m_part_size{0};
191 static constexpr
type_info_t type_info{
"BodyOutputDescription", 0};
192 const type_info_t& get_type_info()
const override {
return type_info; }
202 uint64_t output_index,
205 std::shared_ptr<OutputDescription> copy()
const override;
206 int64_t m_iteration{0};
209 virtual std::shared_ptr<Function> get_function() {
return m_body; };
210 virtual std::shared_ptr<const Function> get_function()
const {
return m_body; };
211 virtual void set_function(
const std::shared_ptr<Function>& func) { m_body = func; };
215 return m_input_descriptions;
222 return m_input_descriptions;
225 const std::vector<std::shared_ptr<OutputDescription>>&
228 return m_output_descriptions;
235 return m_output_descriptions;
292 int64_t iteration = -1);
318 int64_t get_num_iterations()
const {
return m_num_iterations; }
321 int64_t m_num_iterations =
329 explicit SubGraphOp(
const OutputVector& args);
331 std::shared_ptr<Function> m_body;
332 std::vector<std::shared_ptr<op::util::SubGraphOp::InputDescription>>
333 m_input_descriptions;
334 std::vector<std::shared_ptr<op::util::SubGraphOp::OutputDescription>>
335 m_output_descriptions;
337 using InputDescriptionPtr = std::shared_ptr<util::SubGraphOp::InputDescription>;
338 using OutputDescriptionPtr = std::shared_ptr<util::SubGraphOp::OutputDescription>;
339 using InputDescriptionVector = std::vector<InputDescriptionPtr>;
340 using OutputDescriptionVector = std::vector<OutputDescriptionPtr>;
346 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>
348 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>
352 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>& value)
354 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::InputDescription>>>(
360 "AttributeAdapter<std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::"
361 "InputDescription>>>",
363 const DiscreteTypeInfo& get_type_info()
const override {
return type_info; }
368 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>
370 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>
374 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>& value)
376 std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::OutputDescription>>>(
382 "AttributeAdapter<std::vector<std::shared_ptr<ngraph::op::util::SubGraphOp::"
383 "OutputDescription>>>",
385 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:161
Definition: attribute_adapter.hpp:67
A handle for one of a node's outputs.
Definition: node_output.hpp:33
Root of all actual ops.
Definition: op.hpp:17
Produces an output from a specific iteration.
Definition: sub_graph_base.hpp:189
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:155
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:132
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:19
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:220
const std::vector< std::shared_ptr< OutputDescription > > & get_output_descriptions() const
Definition: sub_graph_base.hpp:226
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:233
const std::vector< std::shared_ptr< InputDescription > > & get_input_descriptions() const
Definition: sub_graph_base.hpp:213
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16