3#include <nlohmann/json_fwd.hpp>
102 return shape_.at(shape_.size() - 1 - i);
110 return strides_.at(i);
117 return strides_.at(strides_.size() - 1 - i);
121 return shape_.size();
142 std::unique_ptr<TensorLayout>
newaxis(
size_t axis)
const;
144 std::unique_ptr<TensorLayout>
flip(
size_t axis)
const;
146 std::unique_ptr<TensorLayout>
unsqueeze(
size_t axis)
const;
148 std::unique_ptr<TensorLayout>
squeeze(
size_t axis)
const;
150 std::unique_ptr<TensorLayout>
squeeze()
const;
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
symbolic::Expression total_elements() const
std::unique_ptr< TensorLayout > reshape(const symbolic::MultiExpression &new_shape) const
std::unique_ptr< TensorLayout > newaxis(size_t axis) const
static TensorLayout deserialize_from_json(const nlohmann::json &j)
bool has_linear_accesses_no_padding() const
int dims() const
Definition tensor_layout.h:120
std::unique_ptr< TensorLayout > unsqueeze(size_t axis) const
static types::PrimitiveType get_tensor_indvar_type_for_shape(const std::vector< symbolic::Expression > &shape)
const symbolic::Expression & offset() const
Definition tensor_layout.h:49
void collect_symbols(symbolic::SymbolSet &set) const
const symbolic::MultiExpression & shape() const
Definition tensor_layout.h:42
const symbolic::MultiExpression & strides() const
Definition tensor_layout.h:45
TensorLayout(const symbolic::MultiExpression &shape, const symbolic::MultiExpression &strides={}, const symbolic::Expression offset=symbolic::integer(0))
symbolic::Expression resolve_element(const symbolic::MultiExpression &indices, bool require_to_element=true) const
apply the index to the layout, returning an "element-address"
void serialize_to_json(nlohmann::json &j) const
static bool has_linear_accesses_no_padding(symbolic::MultiExpression shape, symbolic::MultiExpression strides, symbolic::Expression offset)
TensorLayoutType
Definition tensor_layout.h:163
@ LAYOUT_ROW_OR_COL_MAJOR
Definition tensor_layout.h:163
@ LAYOUT_OTHER
Definition tensor_layout.h:163
@ LAYOUT_COL_MAJOR
Definition tensor_layout.h:163
@ LAYOUT_ROW_MAJOR
Definition tensor_layout.h:163
std::unique_ptr< TensorLayout > squeeze(size_t axis) const
symbolic::Expression memory_span() const
std::optional< symbolic::MultiExpression > partition_offset_into_dimensions() const
Partition the layout's offset() into one coordinate offset per dimension.
bool operator==(const TensorLayout &other) const
static symbolic::MultiExpression linear_strides(const symbolic::MultiExpression &shape)
const symbolic::Expression & get_dim(int i) const
Definition tensor_layout.h:94
static TensorLayoutType is_last_dims_col_or_row_major(const symbolic::MultiExpression &strides)
Checks if the given strides can be looked at as col-major or row-major.
symbolic::Expression get_stride_innermost(int i) const
Definition tensor_layout.h:116
std::unique_ptr< TensorLayout > flip(size_t axis) const
bool is_last_dims_expressible_as_row_major() const
Whatever the dimesionality of the entire Tensor, if it has at least 2 dimensions, and the innermost h...
TensorLayoutType is_2d_col_or_row_major() const
Checks if the layout is 2D and either column-major or row-major.
static std::ostream & emit_symbolic_list(std::ostream &stream, const symbolic::MultiExpression &list)
std::unique_ptr< TensorLayout > squeeze() const
std::string toStr() const
void replace_symbols(const symbolic::Expression &old, const symbolic::Expression &new_expr)
symbolic::Expression max_accessed_byte_offset_from_ptr(types::PrimitiveType element_type) const
For memory access ranges, this should return the maximum offset from the pointer that is possible,...
bool has_transposed_strides_no_padding() const
std::unique_ptr< TensorLayout > broadcast(const symbolic::MultiExpression &ref_shape) const
Broadcast this layout to a bigger shape with strides correctly set.
symbolic::Expression get_dim_innermost(int i) const
Definition tensor_layout.h:101
static bool has_linear_accesses(symbolic::MultiExpression shape, symbolic::MultiExpression strides)
symbolic::MultiExpression linear_strides() const
symbolic::Expression get_stride(int i) const
Definition tensor_layout.h:109
bool has_linear_accesses() const
void replace_symbols(const symbolic::ExpressionMapping &replacements)
Integer integer(int64_t value)
Creates an integer constant.
std::vector< Expression > MultiExpression
Vector of symbolic expressions for multi-dimensional operations.
Definition symbolic.h:89
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
std::set< Symbol, SymEngine::RCPBasicKeyLess > SymbolSet
Ordered set of symbols.
Definition symbolic.h:95
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Edges in the dataflow graph representing data movement.
Definition arange_node.h:8
std::ostream & operator<<(std::ostream &stream, const TensorLayout &layout)
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
Symbolic system for integer-based symbol analysis.
Core type system definitions for sdfglib.