docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
einsum_node.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <memory>
5#include <nlohmann/json_fwd.hpp>
6#include <string>
7#include <vector>
8
16#include "sdfg/element.h"
17#include "sdfg/function.h"
18#include "sdfg/graph/graph.h"
22
23namespace sdfg {
24namespace einsum {
25
27
33
34class EinsumNode : public math::MathNode {
35private:
36 std::vector<EinsumDimension> dims_;
37
38 data_flow::Subset out_indices_;
39 std::vector<data_flow::Subset> in_indices_;
40
41public:
43 size_t element_id,
44 const DebugInfo& debug_info,
47 const std::vector<std::string>& inputs,
48 const std::vector<EinsumDimension>& dims,
50 const std::vector<data_flow::Subset>& in_indices,
51 bool rename_indvars = true
52 );
53
54 EinsumNode(const EinsumNode&) = delete;
55 EinsumNode& operator=(const EinsumNode&) = delete;
56
57 virtual ~EinsumNode() = default;
58
59 const std::vector<EinsumDimension>& dims() const;
60
61 const EinsumDimension& dim(size_t index) const;
62
63 const symbolic::Symbol& indvar(size_t index) const;
64
65 const symbolic::Expression& init(size_t index) const;
66
67 const symbolic::Expression& bound(size_t index) const;
68
70
71 const symbolic::Expression& out_index(size_t index) const;
72
73 const std::vector<data_flow::Subset>& in_indices() const;
74
75 const data_flow::Subset& in_indices(size_t index) const;
76
77 const symbolic::Expression& in_index(size_t index1, size_t index2) const;
78
80
84
85 virtual symbolic::SymbolSet symbols() const override;
86
87 virtual void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override;
88
89 virtual void replace(const symbolic::ExpressionMapping& replacements) override;
90
91 virtual std::string toStr() const override;
92
93 virtual symbolic::Expression flop() const override;
94
95 virtual std::unique_ptr<data_flow::DataFlowNode>
96 clone(size_t element_id, const graph::Vertex vertex, data_flow::DataFlowGraph& parent) const override;
97
98 virtual void validate(const Function& function) const override;
99};
100
102public:
103 virtual nlohmann::json serialize(const data_flow::LibraryNode& libnode) override;
104
107 ) override;
108};
109
110} // namespace einsum
111} // namespace sdfg
Definition element.h:30
size_t element_id() const
const DebugInfo & debug_info() const
Definition function.h:43
Definition analysis.h:53
Note: Even though the class references unique_ptr, it will never delete an SDFG it has a reference to...
Definition structured_sdfg_builder.h:44
const std::vector< std::string > & inputs() const
Get input connector names (const).
Definition data_flow_graph.h:29
graph::Vertex vertex() const
Get the graph vertex for this node.
Base class for all library nodes in the dataflow graph.
Definition library_node.h:106
const EinsumDimension & dim(size_t index) const
const symbolic::Symbol & indvar(size_t index) const
EinsumNode & operator=(const EinsumNode &)=delete
const std::vector< EinsumDimension > & dims() const
virtual void replace(const symbolic::ExpressionMapping &replacements) override
virtual bool expand(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager)
const data_flow::Subset & in_indices(size_t index) const
const std::vector< data_flow::Subset > & in_indices() const
symbolic::SymbolSet internal_symbols() const
virtual symbolic::Expression flop() const override
Calculate floating point operations for this node.
virtual symbolic::SymbolSet symbols() const override
Get all symbols used in this node.
const symbolic::Expression & init(size_t index) const
const symbolic::Expression & out_index(size_t index) const
virtual ~EinsumNode()=default
virtual std::unique_ptr< data_flow::DataFlowNode > clone(size_t element_id, const graph::Vertex vertex, data_flow::DataFlowGraph &parent) const override
Clone this node for graph transformations.
passes::LibNodeExpander::ExpandOutcome expand(passes::LibNodeExpander::ExpandContext &context, structured_control_flow::Block &block) override
Expand this node into its internal operations.
EinsumNode(size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, data_flow::DataFlowGraph &parent, const std::vector< std::string > &inputs, const std::vector< EinsumDimension > &dims, const data_flow::Subset &out_indices, const std::vector< data_flow::Subset > &in_indices, bool rename_indvars=true)
virtual void validate(const Function &function) const override
Validate the code node's configuration.
virtual void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
EinsumNode(const EinsumNode &)=delete
const symbolic::Expression & in_index(size_t index1, size_t index2) const
const symbolic::Expression & bound(size_t index) const
const data_flow::Subset & out_indices() const
virtual std::string toStr() const override
Convert node to string representation.
Definition einsum_node.h:101
virtual data_flow::LibraryNode & deserialize(const nlohmann::json &j, builder::StructuredSDFGBuilder &builder, structured_control_flow::Block &parent) override
Deserialize a library node from JSON.
virtual nlohmann::json serialize(const data_flow::LibraryNode &libnode) override
Serialize a library node to JSON.
Base class for mathematical library nodes with expansion support.
Definition math_node.h:68
Definition lib_node_expander.h:122
Base class for library node serialization.
Definition json_serializer.h:195
A control flow node representing a basic block with dataflow computations.
Definition block.h:42
Base class for all nodes in the dataflow graph.
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
std::set< Symbol, SymEngine::RCPBasicKeyLess > SymbolSet
Ordered set of symbols.
Definition symbolic.h:95
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Library node definitions for calling functions beyond simple instructions.
Mathematical library node base class with expansion support.
Edges in the dataflow graph representing data movement.
Definition function_builder.h:10
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
StringEnum LibraryNodeCode
Definition library_node.h:65
Definition einsum.h:13
data_flow::LibraryNodeCode LibraryNodeType_Einsum("Einsum")
boost::graph_traits< Graph >::vertex_descriptor Vertex
Definition graph.h:25
Definition analysis.h:7
Definition einsum_node.h:28
symbolic::Expression bound
Definition einsum_node.h:31
symbolic::Expression init
Definition einsum_node.h:30
symbolic::Symbol indvar
Definition einsum_node.h:29
Definition lib_node_expander.h:12
Symbolic system for integer-based symbol analysis.