class ngraph::op::util::SubGraphOp¶
Overview¶
Abstract base class for sub-graph based ops, i.e ops that have sub-graph. More…
#include <sub_graph_base.hpp>
class SubGraphOp: public ngraph::op::Op
{
public:
// classes
class BodyOutputDescription;
class ConcatOutputDescription;
class InputDescription;
class InvariantInputDescription;
class MergedInputDescription;
class OutputDescription;
class SliceInputDescription;
// construction
SubGraphOp(const SubGraphOp&);
SubGraphOp(SubGraphOp&&);
// methods
virtual std::shared_ptr<Function> get_function();
virtual std::shared_ptr<const Function> get_function() const;
virtual void set_function(const std::shared_ptr<Function>& func);
const std::vector<std::shared_ptr<InputDescription>>& get_input_descriptions() const;
std::vector<std::shared_ptr<InputDescription>>& get_input_descriptions();
const std::vector<std::shared_ptr<OutputDescription>>& get_output_descriptions() const;
std::vector<std::shared_ptr<OutputDescription>>& get_output_descriptions();
virtual void set_sliced_input(
const std::shared_ptr<Parameter>& parameter,
const Output<Node>& value,
int64_t start,
int64_t stride,
int64_t part_size,
int64_t end,
int64_t axis
);
virtual void set_merged_input(
const std::shared_ptr<Parameter>& body_parameter,
const Output<Node>& initial_value,
const Output<Node>& successive_value
);
virtual void set_invariant_input(
const std::shared_ptr<Parameter>& body_parameter,
const Output<Node>& value
);
virtual Output<Node> get_iter_value(
const Output<Node>& body_value,
int64_t iteration = -1
);
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
);
SubGraphOp& operator = (const SubGraphOp&);
SubGraphOp& operator = (SubGraphOp&&);
int64_t get_num_iterations() const;
};
// direct descendants
class TensorIterator;
class Loop;
Inherited Members¶
public:
// typedefs
typedef DiscreteTypeInfo type_info_t;
typedef std::map<std::string, std::shared_ptr<Variant>> RTMap;
// fields
NGRAPH_DEPRECATED("The tensor name was deprecated. Use get_input_tensor(i).get_names() instead.") const std std::unordered_set<descriptor::Tensor*> liveness_new_list;
std::unordered_set<descriptor::Tensor*> liveness_free_list;
// methods
virtual void validate_and_infer_types();
void constructor_validate_and_infer_types();
virtual bool visit_attributes(AttributeVisitor&);
virtual const op::AutoBroadcastSpec& get_autob() const;
virtual bool has_evaluate() const;
virtual bool evaluate(
const HostTensorVector& output_values,
const HostTensorVector& input_values
) const;
virtual bool evaluate(
const HostTensorVector& output_values,
const HostTensorVector& input_values,
const EvaluationContext& evaluationContext
) const;
virtual bool evaluate_lower(const HostTensorVector& output_values) const;
virtual bool evaluate_upper(const HostTensorVector& output_values) const;
virtual bool constant_fold(
OutputVector& output_values,
const OutputVector& inputs_values
);
virtual OutputVector decompose_op() const;
virtual const type_info_t& get_type_info() const = 0;
const char* get_type_name() const;
void set_arguments(const NodeVector& arguments);
void set_arguments(const OutputVector& arguments);
void set_argument(size_t position, const Output<Node>& argument);
void set_output_type(
size_t i,
const element::Type& element_type,
const PartialShape& pshape
);
void set_output_size(size_t output_size);
void invalidate_values();
virtual void revalidate_and_infer_types();
virtual std::string description() const;
const std::string& get_name() const;
void set_friendly_name(const std::string& name);
const std::string& get_friendly_name() const;
virtual bool is_dynamic() const;
size_t get_instance_id() const;
virtual std::ostream& write_description(std::ostream& os, uint32_t depth = 0) const;
const std::vector<std::shared_ptr<Node>>& get_control_dependencies() const;
const std::vector<Node*>& get_control_dependents() const;
void add_control_dependency(std::shared_ptr<Node> node);
void remove_control_dependency(std::shared_ptr<Node> node);
void clear_control_dependencies();
void clear_control_dependents();
void add_node_control_dependencies(std::shared_ptr<Node> source_node);
void add_node_control_dependents(std::shared_ptr<Node> source_node);
void transfer_control_dependents(std::shared_ptr<Node> replacement);
size_t get_output_size() const;
const element::Type& get_output_element_type(size_t i) const;
const element::Type& get_element_type() const;
const Shape& get_output_shape(size_t i) const;
const PartialShape& get_output_partial_shape(size_t i) const;
Output<const Node> get_default_output() const;
Output<Node> get_default_output();
virtual size_t get_default_output_index() const;
size_t no_default_index() const;
const Shape& get_shape() const;
descriptor::Tensor& get_output_tensor(size_t i) const;
descriptor::Tensor& get_input_tensor(size_t i) const;
NGRAPH_DEPRECATED("The tensor name was deprecated. Use get_output_tensor(i).get_names() instead.") const std std::set<Input<Node>> get_output_target_inputs(size_t i) const;
size_t get_input_size() const;
const element::Type& get_input_element_type(size_t i) const;
const Shape& get_input_shape(size_t i) const;
const PartialShape& get_input_partial_shape(size_t i) const;
Node* get_input_node_ptr(size_t index) const;
std::shared_ptr<Node> get_input_node_shared_ptr(size_t index) const;
Output<Node> get_input_source_output(size_t i) const;
virtual std::shared_ptr<Node> clone_with_new_inputs(const OutputVector& inputs) const = 0;
std::shared_ptr<Node> copy_with_new_inputs(const OutputVector& new_args) const;
std::shared_ptr<Node> copy_with_new_inputs(
const OutputVector& inputs,
const std::vector<std::shared_ptr<Node>>& control_dependencies
) const;
bool has_same_type(std::shared_ptr<const Node> node) const;
RTMap& get_rt_info();
const RTMap& get_rt_info() const;
const std::unordered_set<std::string>& get_provenance_tags() const;
void add_provenance_tag(const std::string& tag);
template <typename T>
void add_provenance_tags(T tag_set);
void add_provenance_tags_above(
const OutputVector& base,
const std::unordered_set<std::string>& tag_set
);
void remove_provenance_tag(const std::string& tag);
void add_provenance_group_member(const std::shared_ptr<Node>& node);
void remove_provenance_group_member(const std::shared_ptr<Node>& node);
void replace_provenance_group_member(
const std::shared_ptr<Node>& current_node,
const std::shared_ptr<Node>& replacement_node
);
const std::set<std::shared_ptr<Node>>& get_provenance_group_members() const;
std::shared_ptr<Node> add_provenance_group_members_above(const OutputVector& base);
void merge_provenance_tags_from(const std::shared_ptr<const Node>& source);
void transfer_provenance_tags(const std::shared_ptr<Node>& replacement);
NodeVector get_users(bool check_is_used = false) const;
virtual size_t get_version() const;
virtual std::shared_ptr<Node> get_default_value() const;
bool operator < (const Node& other) const;
std::vector<Input<Node>> inputs();
std::vector<Input<const Node>> inputs() const;
std::vector<Output<Node>> input_values() const;
std::vector<Output<Node>> outputs();
std::vector<Output<const Node>> outputs() const;
Input<Node> input(size_t input_index);
Input<const Node> input(size_t input_index) const;
Output<Node> input_value(size_t input_index) const;
Output<Node> output(size_t output_index);
Output<const Node> output(size_t output_index) const;
void set_op_annotations(std::shared_ptr<ngraph::op::util::OpAnnotations> op_annotations);
std::shared_ptr<ngraph::op::util::OpAnnotations> get_op_annotations() const;
virtual bool match_value(
pattern::Matcher* matcher,
const Output<Node>& pattern_value,
const Output<Node>& graph_value
);
virtual bool match_node(
pattern::Matcher* matcher,
const Output<Node>& graph_value
);
Detailed Documentation¶
Abstract base class for sub-graph based ops, i.e ops that have sub-graph.
Methods¶
const std::vector<std::shared_ptr<InputDescription>>& get_input_descriptions() const
Returns:
a reference to the input descriptions.
std::vector<std::shared_ptr<InputDescription>>& get_input_descriptions()
Returns:
a reference to the input descriptions. Can add input descriptions before validation.
const std::vector<std::shared_ptr<OutputDescription>>& get_output_descriptions() const
Returns:
a reference to the output descriptions.
std::vector<std::shared_ptr<OutputDescription>>& get_output_descriptions()
Returns:
a reference to the output descriptions. Can add output descriptions before validation.
Indicate that a body parameter comes from slices of a value.
Parameters:
parameter |
The parameter to receive the slices |
value |
The value to be sliced. This will be added as an input to SubGraphOp. |
start |
First index on axis of the slicing |
stride |
Stepping of the slice |
part_size |
Size of the slice on axis |
end |
The last index on axis of the slicing |
axis |
The axis to slice along |
Indicates that a body parameter has an initial value in the first iteration and computed value thereafter.
Parameters:
body_parameter |
The body parameter |
initial_value |
Value for the parameter in first iteration. This will be added as an input to Loop. |
successive_value |
Value for the parameter in successive iterations. The value is what is active in the most recent completed iteration. |
Indicates that a body parameter has an invariant value during iteration that may depend on values computed outside of the iteration.
Parameters:
body_parameter |
The body parameter |
value |
The value supplied as an input to the block |
Gets a value for a particular iteration point.
Parameters:
body_value |
The value |
iteration |
The iteration that supplies the value. Negative values are from the last iteration. Default value -1 (the last iteration). |
Returns:
The iterator value.
Concatenates slices from all iterations.
Parameters:
value |
The value supplying slice values from each iteration. |
start |
First index on axis of the slicing |
stride |
Stepping of the slice |
part_size |
Size of the slice on axis |
end |
The last index on axis of the slicing |
axis |
The axis to slice along |
Returns:
The concatenated slices.