10 #include "unsupported/Eigen/CXX11/Tensor" 14 #include "eteq/generated/dtype.hpp" 16 #ifndef ETEQ_EIGEN_HPP 17 #define ETEQ_EIGEN_HPP 27 using MatrixT = Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor>;
46 tens.dimension(1), tens.dimension(0));
53 return MatMapT<T>(mat.data(), mat.rows(), mat.cols());
61 tens.dimension(1), tens.dimension(0));
69 mat.cols(), mat.rows(), 1,1,1,1,1,1);
83 virtual ~iEigen (
void) =
default;
86 virtual void assign (
void) = 0;
97 template <
typename T,
typename EigenSource,
typename EigenArgs>
101 std::function<EigenSource(EigenArgs&)> make_base, EigenArgs
args) :
127 template <
typename T,
typename EigenSource,
typename EigenArgs>
131 std::function<EigenSource(EigenArgs&)> make_base, EigenArgs
args) :
133 data_(dims.at(1), dims.at(0)) {}
159 template <
typename T,
typename EigenSource,
typename EigenArgs>
161 std::function<EigenSource(EigenArgs&)> make_base, EigenArgs
args)
163 return std::make_shared<EigenTensOp<T,EigenSource,EigenArgs>>(
164 dims, make_base,
args);
169 template <
typename T,
typename EigenSource,
typename EigenArgs>
171 std::function<EigenSource(EigenArgs&)> make_base, EigenArgs
args)
173 return std::make_shared<EigenMatOp<T,EigenSource,EigenArgs>>(
174 dims, make_base,
args);
178 template <
typename T>
181 std::array<Eigen::Index,teq::rank_cap> slist;
182 std::copy(shape.
begin(), shape.
end(), slist.begin());
189 template <
typename T>
194 logs::fatal(
"cannot get matmap from nullptr");
200 template <
typename T>
203 std::array<Eigen::Index,teq::rank_cap> slist;
204 std::copy(shape.
begin(), shape.
end(), slist.begin());
207 logs::fatal(
"cannot get tensmap from nullptr");
213 template <
typename T>
216 auto slist = tens.dimensions();
217 return teq::Shape(std::vector<teq::DimT>(slist.begin(), slist.end()));
221 template <
typename T>
224 auto slist = tens.dimensions();
225 return teq::Shape(std::vector<teq::DimT>(slist.begin(), slist.end()));
233 #endif // ETEQ_EIGEN_HPP TensorT< T > data_
Output tensor data object.
Definition: eigen.hpp:123
teq::Shape get_shape(const TensorT< T > &tens)
Return the teq Shape representation of Eigen Tensor.
Definition: eigen.hpp:214
args
Definition: csv_to_png.py:105
Interface of generic Eigen data wrapper.
Definition: eigen.hpp:81
T * get_ptr(void) override
Implementation of iEigen<T>
Definition: eigen.hpp:111
virtual void assign(void)=0
Apply the assignment.
MatMapT< T > mat_to_matmap(MatrixT< T > &mat)
Return Map of Matrix.
Definition: eigen.hpp:51
Eigen::TensorMap< TensorT< T > > TensMapT
Eigen Tensor Map (reference)
Definition: eigen.hpp:39
Definition: constant.hpp:17
TensMapT< T > make_tensmap(T *data, const teq::Shape &shape)
Return Eigen Tensor given raw data and teq Shape.
Definition: eigen.hpp:201
MatMapT< T > tens_to_matmap(TensorT< T > &tens)
Return Matrix Map given Tensor.
Definition: eigen.hpp:43
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixT
Eigen Matrix.
Definition: eigen.hpp:27
EigenMatOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:130
EigenptrT< T > make_eigentensor(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:160
Eigen::Map< MatrixT< T > > MatMapT
Eigen Matrix Map (reference)
Definition: eigen.hpp:31
T * get_ptr(void) override
Implementation of iEigen<T>
Definition: eigen.hpp:142
std::shared_ptr< iEigen< T > > EigenptrT
Smart point of generic Eigen data object.
Definition: eigen.hpp:94
EigenSource matrixbase_
Matrix operator.
Definition: eigen.hpp:151
EigenArgs args_
Matrix operator arguments.
Definition: eigen.hpp:148
Implementation of iEigen that assigns Tensor operator to Tensor object.
Definition: eigen.hpp:98
Implementation of iEigen that assigns Matrix operator to Matrix object.
Definition: eigen.hpp:128
MatMapT< T > tensmap_to_matmap(TensMapT< T > &tens)
Return Matrix Map of Tensor Map.
Definition: eigen.hpp:58
virtual ~iEigen(void)=default
EigenTensOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:100
void assign(void) override
Implementation of iEigen<T>
Definition: eigen.hpp:105
TensorT< T > make_tensor(const teq::Shape &shape)
Return Eigen Tensor filled with 0s given teq Shape.
Definition: eigen.hpp:179
TensMapT< T > tens_to_tensmap(TensorT< T > &tens)
Return Tensor Map of Tensor.
Definition: eigen.hpp:74
EigenArgs args_
Tensor operator arguments.
Definition: eigen.hpp:117
Eigen::Tensor< T, 8 > TensorT
Eigen Tensor.
Definition: eigen.hpp:35
MatrixT< T > data_
Output matrix data object.
Definition: eigen.hpp:154
virtual T * get_ptr(void)=0
Return Eigen object output.
MatMapT< T > make_matmap(T *data, const teq::Shape &shape)
Return Eigen Matrix given raw data and teq Shape.
Definition: eigen.hpp:190
EigenptrT< T > make_eigenmatrix(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:170
iterator end(void)
Return end iterator of internal array.
Definition: shape.hpp:162
iterator begin(void)
Return begin iterator of internal array.
Definition: shape.hpp:156
std::array< Eigen::Index, 8 > DimensionsT
Eigen shape.
Definition: eigen.hpp:23
void assign(void) override
Implementation of iEigen<T>
Definition: eigen.hpp:136
DimT at(RankT idx) const
Return DimT element at idx for any index in range [0:rank_cap)
Definition: shape.hpp:108
EigenSource tensorbase_
Tensor operator.
Definition: eigen.hpp:120
TensMapT< T > mat_to_tensmap(MatrixT< T > &mat)
Return Tensor Map of Matrix.
Definition: eigen.hpp:66
DimensionsT shape_convert(teq::Shape shape)
Return Eigen shape of teq Shape.