10#ifndef EIGEN_SPARSE_SELFADJOINTVIEW_H
11#define EIGEN_SPARSE_SELFADJOINTVIEW_H
31template<
typename MatrixType,
unsigned int Mode>
35template<
int SrcMode,
int DstMode,
typename MatrixType,
int DestOrder>
38template<
int Mode,
typename MatrixType,
int DestOrder>
44 :
public EigenBase<SparseSelfAdjointView<MatrixType,_Mode> >
56 typedef typename MatrixType::Scalar
Scalar;
79 template<
typename OtherDerived>
91 template<
typename OtherDerived>
friend
99 template<
typename OtherDerived>
107 template<
typename OtherDerived>
friend
122 template<
typename DerivedU>
132 template<
typename SrcMatrixType,
int SrcMode>
148 template<
typename SrcMatrixType,
unsigned int SrcMode>
160 &&
"SparseSelfadjointView::resize() does not actually allow to resize.");
169 template<
typename Dest>
void evalTo(Dest &)
const;
176template<
typename Derived>
177template<
unsigned int UpLo>
183template<
typename Derived>
184template<
unsigned int UpLo>
194template<
typename MatrixType,
unsigned int Mode>
195template<
typename DerivedU>
201 m_matrix = tmp.template triangularView<Mode>();
213template<
typename MatrixType,
unsigned int Mode>
225template<
typename DstXprType,
typename SrcXprType,
typename Functor>
231 template<
typename DestScalar,
int StorageOrder>
238 template<
typename DestScalar,
int StorageOrder,
typename AssignFunc>
246 template<
typename DestScalar,
int StorageOrder>
255 template<
typename DestScalar,
int StorageOrder>
264 template<
typename DestScalar>
282template<
int Mode,
typename SparseLhsType,
typename DenseRhsType,
typename DenseResType,
typename AlphaType>
290 typedef typename LhsEval::InnerIterator LhsIterator;
291 typedef typename SparseLhsType::Scalar LhsScalar;
306 for (
Index k=0; k<rhs.cols(); ++k)
308 for (
Index j=0;
j<lhs.outerSize(); ++
j)
314 while (
i &&
i.index()<
j) ++
i;
315 if(
i &&
i.index()==
j)
317 res.coeffRef(
j,k) +=
alpha *
i.value() * rhs.coeff(
j,k);
325 typename DenseResType::Scalar
res_j(0);
337 res.coeffRef(
j,k) +=
alpha *
i.value() * rhs.coeff(
j,k);
343template<
typename LhsView,
typename Rhs,
int ProductType>
345:
generic_product_impl_base<LhsView, Rhs, generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType> >
347 template<
typename Dest>
350 typedef typename LhsView::_MatrixTypeNested
Lhs;
360template<
typename Lhs,
typename RhsView,
int ProductType>
362:
generic_product_impl_base<Lhs, RhsView, generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType> >
364 template<
typename Dest>
367 typedef typename RhsView::_MatrixTypeNested
Rhs;
382template<
typename LhsView,
typename Rhs,
int ProductTag>
384 :
public evaluator<typename Product<typename Rhs::PlainObject, Rhs, DefaultProduct>::PlainObject>
393 ::new (
static_cast<Base*
>(
this))
Base(m_result);
402template<
typename Lhs,
typename RhsView,
int ProductTag>
404 :
public evaluator<typename Product<Lhs, typename Lhs::PlainObject, DefaultProduct>::PlainObject>
413 ::new (
static_cast<Base*
>(
this))
Base(m_result);
429template<
int Mode,
typename MatrixType,
int DestOrder>
432 typedef typename MatrixType::StorageIndex StorageIndex;
433 typedef typename MatrixType::Scalar
Scalar;
442 StorageOrderMatch =
int(Dest::IsRowMajor) ==
int(MatrixType::IsRowMajor)
473 dest.resizeNonZeros(nnz);
474 dest.outerIndexPtr()[0] = 0;
481 for(StorageIndex
j = 0;
j<
size; ++
j)
489 StorageIndex
jp = perm ? perm[
j] :
j;
490 StorageIndex
ip = perm ? perm[
i] :
i;
495 dest.innerIndexPtr()[k] = StorageOrderMatch ?
ip :
jp;
496 dest.valuePtr()[k] =
it.value();
501 dest.innerIndexPtr()[k] =
ip;
502 dest.valuePtr()[k] =
it.value();
506 if(!StorageOrderMatch)
509 dest.innerIndexPtr()[k] =
ip;
510 dest.valuePtr()[k] =
it.value();
512 dest.innerIndexPtr()[k] =
jp;
513 dest.valuePtr()[k] = numext::conj(
it.value());
519template<
int _SrcMode,
int _DstMode,
typename MatrixType,
int DstOrder>
522 typedef typename MatrixType::StorageIndex StorageIndex;
523 typedef typename MatrixType::Scalar
Scalar;
542 for(StorageIndex
j = 0;
j<
size; ++
j)
544 StorageIndex
jp = perm ? perm[
j] :
j;
547 StorageIndex
i =
it.index();
551 StorageIndex
ip = perm ? perm[
i] :
i;
555 dest.outerIndexPtr()[0] = 0;
562 for(StorageIndex
j = 0;
j<
size; ++
j)
567 StorageIndex
i =
it.index();
571 StorageIndex
jp = perm ? perm[
j] :
j;
572 StorageIndex
ip = perm? perm[
i] :
i;
577 if(!StorageOrderMatch) std::swap(
ip,
jp);
579 dest.valuePtr()[k] = numext::conj(
it.value());
581 dest.valuePtr()[k] =
it.value();
592template<
typename MatrixType,
int Mode>
598template<
typename MatrixType,
int Mode>
600 :
public EigenBase<SparseSymmetricPermutationProduct<MatrixType,Mode> >
603 typedef typename MatrixType::Scalar
Scalar;
617 : m_matrix(
mat), m_perm(perm)
634template<
typename DstXprType,
typename MatrixType,
int Mode,
typename Scalar>
638 typedef typename DstXprType::StorageIndex
DstIndex;
639 template<
int Options>
648 template<
typename DestType,
unsigned int DestMode>
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS)
Definition Macros.h:1221
#define EIGEN_ONLY_USED_FOR_DEBUG(x)
Definition Macros.h:1049
#define eigen_assert(x)
Definition Macros.h:1037
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition PartialRedux_count.cpp:3
MatrixXf mat
Definition Tutorial_AdvancedInitialization_CommaTemporary.cpp:1
int rows
Definition Tutorial_commainit_02.cpp:1
int cols
Definition Tutorial_commainit_02.cpp:1
Scalar Scalar * c
Definition benchVecAdd.cpp:17
Scalar Scalar int size
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
MatrixXf MatrixType
Definition benchmark-blocking-sizes.cpp:52
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
Permutation matrix.
Definition PermutationMatrix.h:298
Expression of the product of two arbitrary matrices or vectors.
Definition Product.h:75
Base class of any sparse matrices or sparse expressions.
Definition SparseMatrixBase.h:28
const Derived & derived() const
Definition SparseMatrixBase.h:143
ConstSelfAdjointViewReturnType< UpLo >::Type selfadjointView() const
const AdjointReturnType adjoint() const
Definition SparseMatrixBase.h:356
A versatible sparse matrix representation.
Definition SparseMatrix.h:98
Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
Definition SparseSelfAdjointView.h:45
Matrix< StorageIndex, Dynamic, 1 > VectorI
Definition SparseSelfAdjointView.h:58
SparseSelfAdjointView & operator=(const SparseSelfAdjointView< SrcMatrixType, SrcMode > &src)
Definition SparseSelfAdjointView.h:149
internal::remove_all< MatrixTypeNested >::type _MatrixTypeNested
Definition SparseSelfAdjointView.h:60
MatrixType::StorageIndex StorageIndex
Definition SparseSelfAdjointView.h:57
void resize(Index rows, Index cols)
Definition SparseSelfAdjointView.h:155
@ Mode
Definition SparseSelfAdjointView.h:49
@ TransposeMode
Definition SparseSelfAdjointView.h:50
@ ColsAtCompileTime
Definition SparseSelfAdjointView.h:52
@ RowsAtCompileTime
Definition SparseSelfAdjointView.h:51
friend Product< OtherDerived, SparseSelfAdjointView > operator*(const MatrixBase< OtherDerived > &lhs, const SparseSelfAdjointView &rhs)
Definition SparseSelfAdjointView.h:109
SparseSelfAdjointView & rankUpdate(const SparseMatrixBase< DerivedU > &u, const Scalar &alpha=Scalar(1))
Product< SparseSelfAdjointView, OtherDerived > operator*(const MatrixBase< OtherDerived > &rhs) const
Definition SparseSelfAdjointView.h:101
SparseSelfAdjointView & operator=(const SparseSymmetricPermutationProduct< SrcMatrixType, SrcMode > &permutedMatrix)
Definition SparseSelfAdjointView.h:133
Product< SparseSelfAdjointView, OtherDerived > operator*(const SparseMatrixBase< OtherDerived > &rhs) const
Definition SparseSelfAdjointView.h:81
const _MatrixTypeNested & matrix() const
Definition SparseSelfAdjointView.h:71
MatrixType::Scalar Scalar
Definition SparseSelfAdjointView.h:56
MatrixTypeNested m_matrix
Definition SparseSelfAdjointView.h:165
EigenBase< SparseSelfAdjointView > Base
Definition SparseSelfAdjointView.h:55
Index rows() const
Definition SparseSelfAdjointView.h:67
SparseSelfAdjointView(MatrixType &matrix)
Definition SparseSelfAdjointView.h:62
internal::ref_selector< MatrixType >::non_const_type MatrixTypeNested
Definition SparseSelfAdjointView.h:59
friend Product< OtherDerived, SparseSelfAdjointView > operator*(const SparseMatrixBase< OtherDerived > &lhs, const SparseSelfAdjointView &rhs)
Definition SparseSelfAdjointView.h:93
Index cols() const
Definition SparseSelfAdjointView.h:68
SparseSelfAdjointView & operator=(const SparseSelfAdjointView &src)
Definition SparseSelfAdjointView.h:139
SparseSymmetricPermutationProduct< _MatrixTypeNested, Mode > twistedBy(const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const
Definition SparseSelfAdjointView.h:127
internal::remove_reference< MatrixTypeNested >::type & matrix()
Definition SparseSelfAdjointView.h:72
Definition SparseSelfAdjointView.h:601
MatrixType::Nested MatrixTypeNested
Definition SparseSelfAdjointView.h:613
Matrix< StorageIndex, Dynamic, 1 > VectorI
Definition SparseSelfAdjointView.h:612
MatrixType::StorageIndex StorageIndex
Definition SparseSelfAdjointView.h:604
const NestedExpression & matrix() const
Definition SparseSelfAdjointView.h:623
SparseSymmetricPermutationProduct(const MatrixType &mat, const Perm &perm)
Definition SparseSelfAdjointView.h:616
MatrixType::Scalar Scalar
Definition SparseSelfAdjointView.h:603
PermutationMatrix< Dynamic, Dynamic, StorageIndex > Perm
Definition SparseSelfAdjointView.h:610
const Perm & perm() const
Definition SparseSelfAdjointView.h:624
MatrixTypeNested m_matrix
Definition SparseSelfAdjointView.h:627
Index cols() const
Definition SparseSelfAdjointView.h:621
Index rows() const
Definition SparseSelfAdjointView.h:620
const Perm & m_perm
Definition SparseSelfAdjointView.h:628
internal::remove_all< MatrixTypeNested >::type NestedExpression
Definition SparseSelfAdjointView.h:614
Definition TensorRef.h:81
@ Lower
Definition Constants.h:209
@ Upper
Definition Constants.h:211
@ ColMajor
Definition Constants.h:319
@ RowMajor
Definition Constants.h:321
const unsigned int RowMajorBit
Definition Constants.h:66
RealScalar alpha
Definition level1_cplx_impl.h:147
void sparse_selfadjoint_time_dense_product(const SparseLhsType &lhs, const DenseRhsType &rhs, DenseResType &res, const AlphaType &alpha)
Definition SparseSelfAdjointView.h:283
void permute_symm_to_fullsymm(const MatrixType &mat, SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &_dest, const typename MatrixType::StorageIndex *perm=0)
Definition SparseSelfAdjointView.h:430
void permute_symm_to_symm(const MatrixType &mat, SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &_dest, const typename MatrixType::StorageIndex *perm=0)
@ Lhs
Definition TensorContractionMapper.h:19
@ Rhs
Definition TensorContractionMapper.h:18
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment_no_alias_no_transpose(Dst &dst, const Src &src, const Func &func)
Definition AssignEvaluator.h:922
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
@ DefaultProduct
Definition Constants.h:500
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
Definition BandTriangularSolver.h:13
uint8_t count
Definition ref_serial.h:256
Definition Constants.h:528
Definition EigenBase.h:30
Eigen::Index Index
The interface type of indices.
Definition EigenBase.h:39
EIGEN_DEVICE_FUNC SparseSelfAdjointView< MatrixType, _Mode > & derived()
Definition EigenBase.h:46
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition XprHelper.h:806
Definition Constants.h:537
Sparse2Sparse Kind
Definition SparseSelfAdjointView.h:223
SparseSelfAdjoint2Sparse Kind
Definition SparseSelfAdjointView.h:222
Definition AssignEvaluator.h:817
SparseSymmetricPermutationProduct< MatrixType, Mode > SrcXprType
Definition SparseSelfAdjointView.h:637
static void run(SparseSelfAdjointView< DestType, DestMode > &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename MatrixType::Scalar > &)
Definition SparseSelfAdjointView.h:649
static void run(SparseMatrix< Scalar, Options, DstIndex > &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename MatrixType::Scalar > &)
Definition SparseSelfAdjointView.h:640
DstXprType::StorageIndex DstIndex
Definition SparseSelfAdjointView.h:638
static void run(SparseMatrix< DestScalar, StorageOrder, StorageIndex > &dst, const SrcXprType &src, const internal::add_assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition SparseSelfAdjointView.h:247
DstXprType::StorageIndex StorageIndex
Definition SparseSelfAdjointView.h:228
static void run(SparseMatrix< DestScalar, StorageOrder, StorageIndex > &dst, const SrcXprType &src, const AssignOpType &)
Definition SparseSelfAdjointView.h:232
static void run(SparseMatrix< DestScalar, StorageOrder, StorageIndex > &dst, const SrcXprType &src, const AssignFunc &func)
Definition SparseSelfAdjointView.h:239
static void run(DynamicSparseMatrix< DestScalar, ColMajor, StorageIndex > &dst, const SrcXprType &src, const AssignOpType &)
Definition SparseSelfAdjointView.h:265
internal::assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > AssignOpType
Definition SparseSelfAdjointView.h:229
static void run(SparseMatrix< DestScalar, StorageOrder, StorageIndex > &dst, const SrcXprType &src, const internal::sub_assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition SparseSelfAdjointView.h:256
Definition AssignEvaluator.h:824
Definition Constants.h:542
Definition SparseAssign.h:61
Definition SparseSelfAdjointView.h:220
Definition SparseUtil.h:138
Definition AssignmentFunctors.h:21
SparseSelfAdjointShape Shape
Definition SparseSelfAdjointView.h:217
storage_kind_to_evaluator_kind< typenameMatrixType::StorageKind >::Kind Kind
Definition SparseSelfAdjointView.h:216
Definition CoreEvaluators.h:80
Definition CoreEvaluators.h:91
static void scaleAndAddTo(Dest &dst, const LhsView &lhsView, const Rhs &rhs, const typename Dest::Scalar &alpha)
Definition SparseSelfAdjointView.h:348
static void scaleAndAddTo(Dest &dst, const Lhs &lhs, const RhsView &rhsView, const typename Dest::Scalar &alpha)
Definition SparseSelfAdjointView.h:365
Definition ProductEvaluators.h:344
Definition ProductEvaluators.h:86
product_evaluator(const XprType &xpr)
Definition SparseSelfAdjointView.h:390
XprType::PlainObject PlainObject
Definition SparseSelfAdjointView.h:387
PlainObject m_result
Definition SparseSelfAdjointView.h:399
evaluator< PlainObject > Base
Definition SparseSelfAdjointView.h:388
Rhs::PlainObject m_lhs
Definition SparseSelfAdjointView.h:398
Product< LhsView, Rhs, DefaultProduct > XprType
Definition SparseSelfAdjointView.h:386
evaluator< PlainObject > Base
Definition SparseSelfAdjointView.h:408
XprType::PlainObject PlainObject
Definition SparseSelfAdjointView.h:407
Product< Lhs, RhsView, DefaultProduct > XprType
Definition SparseSelfAdjointView.h:406
Lhs::PlainObject m_rhs
Definition SparseSelfAdjointView.h:418
product_evaluator(const XprType &xpr)
Definition SparseSelfAdjointView.h:410
PlainObject m_result
Definition SparseSelfAdjointView.h:419
Definition ForwardDeclarations.h:164
Definition ForwardDeclarations.h:17
Definition NonLinearOptimization.cpp:118
Definition benchGeometry.cpp:23
std::ptrdiff_t j
Definition tut_arithmetic_redux_minmax.cpp:2