10#ifndef EIGEN_SPARSE_PERMUTATION_H
11#define EIGEN_SPARSE_PERMUTATION_H
19template<
typename ExpressionType,
int S
ide,
bool Transposed>
25 typedef typename MatrixTypeCleaned::Scalar
Scalar;
37 template<
typename Dest,
typename PermutationType>
38 static inline void run(Dest& dst,
const PermutationType& perm,
const ExpressionType& xpr)
45 for(
Index j=0; j<mat.outerSize(); ++j)
47 Index jp = perm.indices().coeff(j);
51 for(
Index j=0; j<mat.outerSize(); ++j)
53 Index jp = perm.indices().coeff(j);
56 for(
typename MatrixTypeCleaned::InnerIterator it(mat,jsrc); it; ++it)
72 for(
Index j=0; j<mat.outerSize(); ++j)
73 for(
typename MatrixTypeCleaned::InnerIterator it(mat,j); it; ++it)
74 sizes[perm_cpy.
indices().coeff(it.index())]++;
76 for(
Index j=0; j<mat.outerSize(); ++j)
77 for(
typename MatrixTypeCleaned::InnerIterator it(mat,j); it; ++it)
78 tmp.insertByOuterInner(perm_cpy.
indices().coeff(it.index()),j) = it.value();
95template<
typename Lhs,
typename Rhs,
int ProductTag>
97 :
public evaluator<typename permutation_matrix_product<Rhs,OnTheLeft,false,SparseShape>::ReturnType>
108 : m_result(xpr.rows(), xpr.cols())
110 ::new (
static_cast<Base*
>(
this))
Base(m_result);
118template<
typename Lhs,
typename Rhs,
int ProductTag>
120 :
public evaluator<typename permutation_matrix_product<Lhs,OnTheRight,false,SparseShape>::ReturnType>
131 : m_result(xpr.rows(), xpr.cols())
133 ::new (
static_cast<Base*
>(
this))
Base(m_result);
145template<
typename SparseDerived,
typename PermDerived>
152template<
typename SparseDerived,
typename PermDerived>
153inline const Product<PermDerived, SparseDerived, AliasFreeProduct>
160template<
typename SparseDerived,
typename PermutationType>
161inline const Product<SparseDerived, Inverse<PermutationType>,
AliasFreeProduct>
169template<
typename SparseDerived,
typename PermutationType>
170inline const Product<Inverse<PermutationType>, SparseDerived,
AliasFreeProduct>
Definition: PermutationMatrix.h:538
Base class for permutations.
Definition: PermutationMatrix.h:47
InverseReturnType transpose() const
Definition: PermutationMatrix.h:191
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
const IndicesType & indices() const
const version of indices().
Definition: PermutationMatrix.h:360
EIGEN_DEVICE_FUNC Derived & setZero(Index size)
Resizes to the given size, and sets all coefficients in this expression to zero.
Definition: CwiseNullaryOp.h:562
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:75
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const LhsNestedCleaned & lhs() const
Definition: Product.h:107
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const RhsNestedCleaned & rhs() const
Definition: Product.h:109
Base class of any sparse matrices or sparse expressions.
Definition: SparseMatrixBase.h:28
const Derived & derived() const
Definition: SparseMatrixBase.h:143
A versatible sparse matrix representation.
Definition: SparseMatrix.h:98
void reserve(Index reserveSize)
Preallocates reserveSize non zeros.
Definition: SparseMatrix.h:264
Scalar & insertByOuterInner(Index j, Index i)
Definition: SparseMatrix.h:460
type
Definition: core.h:575
@ ColMajor
Storage order is column major (see TopicStorageOrders).
Definition: Constants.h:319
@ RowMajor
Storage order is row major (see TopicStorageOrders).
Definition: Constants.h:321
@ OnTheLeft
Apply transformation on the left.
Definition: Constants.h:332
@ OnTheRight
Apply transformation on the right.
Definition: Constants.h:334
const unsigned int EvalBeforeNestingBit
means the expression should be evaluated by the calling expression
Definition: Constants.h:70
const unsigned int RowMajorBit
for a matrix, this means that the storage order is row-major.
Definition: Constants.h:66
Namespace containing all symbols from the Eigen library.
Definition: Core:141
@ AliasFreeProduct
Definition: Constants.h:500
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
const Product< SparseDerived, PermDerived, AliasFreeProduct > operator*(const SparseMatrixBase< SparseDerived > &matrix, const PermutationBase< PermDerived > &perm)
Definition: SparsePermutation.h:147
Definition: Eigen_Colamd.h:50
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
Definition: Constants.h:535
The type used to identify a permutation storage.
Definition: Constants.h:516
The type used to identify a general sparse storage.
Definition: Constants.h:510
Definition: Constants.h:537
Definition: CoreEvaluators.h:91
Definition: ProductEvaluators.h:86
internal::conditional< MoveOuter, SparseMatrix< Scalar, SrcStorageOrder, StorageIndex >, SparseMatrix< Scalar, int(SrcStorageOrder)==RowMajor?ColMajor:RowMajor, StorageIndex > >::type ReturnType
Definition: SparsePermutation.h:35
nested_eval< ExpressionType, 1 >::type MatrixType
Definition: SparsePermutation.h:22
static void run(Dest &dst, const PermutationType &perm, const ExpressionType &xpr)
Definition: SparsePermutation.h:38
MatrixTypeCleaned::Scalar Scalar
Definition: SparsePermutation.h:25
remove_all< MatrixType >::type MatrixTypeCleaned
Definition: SparsePermutation.h:23
MatrixTypeCleaned::StorageIndex StorageIndex
Definition: SparsePermutation.h:26
Definition: ProductEvaluators.h:998
permutation_matrix_product< Rhs, OnTheLeft, false, SparseShape >::ReturnType PlainObject
Definition: SparsePermutation.h:100
evaluator< PlainObject > Base
Definition: SparsePermutation.h:101
Product< Lhs, Rhs, AliasFreeProduct > XprType
Definition: SparsePermutation.h:99
product_evaluator(const XprType &xpr)
Definition: SparsePermutation.h:107
PlainObject m_result
Definition: SparsePermutation.h:115
Product< Lhs, Rhs, AliasFreeProduct > XprType
Definition: SparsePermutation.h:122
permutation_matrix_product< Lhs, OnTheRight, false, SparseShape >::ReturnType PlainObject
Definition: SparsePermutation.h:123
product_evaluator(const XprType &xpr)
Definition: SparsePermutation.h:130
evaluator< PlainObject > Base
Definition: SparsePermutation.h:124
PlainObject m_result
Definition: SparsePermutation.h:138
Definition: ForwardDeclarations.h:164
T type
Definition: Meta.h:126