10 #ifndef EIGEN_SPARSE_DIAGONAL_PRODUCT_H
11 #define EIGEN_SPARSE_DIAGONAL_PRODUCT_H
34 template <
typename SparseXprType,
typename DiagonalCoeffType,
int SDP_Tag>
37 template <
typename Lhs,
typename Rhs,
int ProductTag>
40 Rhs::Flags & RowMajorBit ? SDP_AsScalarProduct : SDP_AsCwiseProduct> {
50 template <
typename Lhs,
typename Rhs,
int ProductTag>
53 Lhs::Flags & RowMajorBit ? SDP_AsCwiseProduct : SDP_AsScalarProduct> {
63 template <
typename SparseXprType,
typename DiagonalCoeffType>
82 : m_sparseXprImpl(sparseXpr), m_diagCoeffImpl(diagCoeff) {}
91 template <
typename SparseXprType,
typename DiagCoeffType>
96 typedef typename nested_eval<DiagCoeffType, SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime
97 : SparseXprType::ColsAtCompileTime>
::type
105 : m_sparseIter(xprEval.m_sparseXprEval, outer), m_diagCoeffNested(xprEval.m_diagCoeffNested) {}
107 inline Scalar value()
const {
return m_sparseIter.value() * m_diagCoeffNested.coeff(index()); }
110 inline Index col()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.index() : m_sparseIter.outer(); }
111 inline Index row()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.outer() : m_sparseIter.index(); }
117 inline operator bool()
const {
return m_sparseIter; }
125 : m_sparseXprEval(sparseXpr), m_diagCoeffNested(diagCoeff) {}
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
SCALAR Scalar
Definition: bench_gemm.cpp:45
An InnerIterator allows to loop over the element of any matrix expression.
Definition: CoreIterators.h:37
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:202
StorageIndex index() const
Definition: SparseDiagonalProduct.h:108
Index outer() const
Definition: SparseDiagonalProduct.h:109
EIGEN_STRONG_INLINE InnerIterator & operator++()
Definition: SparseDiagonalProduct.h:113
Scalar value() const
Definition: SparseDiagonalProduct.h:107
DiagCoeffNested m_diagCoeffNested
Definition: SparseDiagonalProduct.h:121
SparseXprIter m_sparseIter
Definition: SparseDiagonalProduct.h:120
evaluator< SparseXprType >::InnerIterator SparseXprIter
Definition: SparseDiagonalProduct.h:101
Index row() const
Definition: SparseDiagonalProduct.h:111
Index col() const
Definition: SparseDiagonalProduct.h:110
InnerIterator(const sparse_diagonal_product_evaluator &xprEval, Index outer)
Definition: SparseDiagonalProduct.h:104
InnerIterator(const sparse_diagonal_product_evaluator &xprEval, Index outer)
Definition: SparseDiagonalProduct.h:72
EIGEN_STRONG_INLINE Scalar value() const
Definition: SparseDiagonalProduct.h:75
DiagonalCoeffType::Scalar m_coeff
Definition: SparseDiagonalProduct.h:78
void diagonal(const MatrixType &m)
Definition: diagonal.cpp:13
@ DefaultProduct
Definition: Constants.h:503
const unsigned int RowMajorBit
Definition: Constants.h:70
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20
@ SDP_AsScalarProduct
Definition: SparseDiagonalProduct.h:32
@ SDP_AsCwiseProduct
Definition: SparseDiagonalProduct.h:32
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
squared absolute value
Definition: GlobalFunctions.h:87
const int HugeCost
Definition: Constants.h:48
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
void transpose()
Definition: skew_symmetric_matrix3.cpp:135
type
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
Definition: Constants.h:549
Definition: Constants.h:570
Definition: CoreEvaluators.h:104
Definition: XprHelper.h:533
Product< Lhs, Rhs, DefaultProduct > XprType
Definition: SparseDiagonalProduct.h:41
product_evaluator(const XprType &xpr)
Definition: SparseDiagonalProduct.h:47
sparse_diagonal_product_evaluator< Rhs, typename Lhs::DiagonalVectorType, Rhs::Flags &RowMajorBit ? SDP_AsScalarProduct :SDP_AsCwiseProduct > Base
Definition: SparseDiagonalProduct.h:46
product_evaluator(const XprType &xpr)
Definition: SparseDiagonalProduct.h:60
sparse_diagonal_product_evaluator< Lhs, Transpose< const typename Rhs::DiagonalVectorType >, Lhs::Flags &RowMajorBit ? SDP_AsCwiseProduct :SDP_AsScalarProduct > Base
Definition: SparseDiagonalProduct.h:59
Product< Lhs, Rhs, DefaultProduct > XprType
Definition: SparseDiagonalProduct.h:54
Definition: ForwardDeclarations.h:221
SparseXprType::Scalar Scalar
Definition: SparseDiagonalProduct.h:93
evaluator< SparseXprType > m_sparseXprEval
Definition: SparseDiagonalProduct.h:130
Index nonZerosEstimate() const
Definition: SparseDiagonalProduct.h:127
DiagCoeffNested m_diagCoeffNested
Definition: SparseDiagonalProduct.h:131
nested_eval< DiagCoeffType, SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime :SparseXprType::ColsAtCompileTime >::type DiagCoeffNested
Definition: SparseDiagonalProduct.h:98
SparseXprType::StorageIndex StorageIndex
Definition: SparseDiagonalProduct.h:94
sparse_diagonal_product_evaluator(const SparseXprType &sparseXpr, const DiagCoeffType &diagCoeff)
Definition: SparseDiagonalProduct.h:124
evaluator< SparseXprType > m_sparseXprImpl
Definition: SparseDiagonalProduct.h:87
Index nonZerosEstimate() const
Definition: SparseDiagonalProduct.h:84
sparse_diagonal_product_evaluator(const SparseXprType &sparseXpr, const DiagonalCoeffType &diagCoeff)
Definition: SparseDiagonalProduct.h:81
SparseXprType::Scalar Scalar
Definition: SparseDiagonalProduct.h:67
evaluator< DiagonalCoeffType > m_diagCoeffImpl
Definition: SparseDiagonalProduct.h:88
evaluator< SparseXprType >::InnerIterator SparseXprInnerIterator
Definition: SparseDiagonalProduct.h:66
Definition: SparseDiagonalProduct.h:35