#ifndef __INFINIOP_TENSOR_H__ #define __INFINIOP_TENSOR_H__ #include "infiniop/tensor_descriptor.h" #include #include struct InfiniopTensorDescriptor { private: // Datatype infiniDtype_t _dtype; // Shape of the tensor std::vector _shape; // Stride of each dimension in elements std::vector _strides; public: InfiniopTensorDescriptor(infiniDtype_t dtype, size_t ndim, const size_t *shape, const ptrdiff_t *strides); ~InfiniopTensorDescriptor() = default; infiniDtype_t dtype() const; std::vector shape() const; size_t dim(size_t i) const; size_t ndim() const; std::vector strides() const; ptrdiff_t stride(size_t i) const; std::vector getByteStrides() const; bool isContiguous(size_t dim_start, size_t dim_end) const; bool isContiguous() const; size_t numel() const; infiniopTensorDescriptor_t dimMerge(size_t dim_start, size_t dim_end) const; infiniopTensorDescriptor_t dimSplit(size_t axis, const std::vector &dims) const; infiniopTensorDescriptor_t dimPermute(const std::vector &order) const; std::string toString() const; }; #endif // __INFINIOP_TENSOR_H__