11#ifndef EIGEN_PERMUTATIONMATRIX_H
12#define EIGEN_PERMUTATIONMATRIX_H
45template<
typename Derived>
52 #ifndef EIGEN_PARSED_BY_DOXYGEN
73 template<
typename OtherDerived>
81 template<
typename OtherDerived>
99 #ifndef EIGEN_PARSED_BY_DOXYGEN
100 template<
typename DenseDerived>
105 other.coeffRef(
indices().coeff(i),i) =
typename DenseDerived::Scalar(1);
197#ifndef EIGEN_PARSED_BY_DOXYGEN
199 template<
typename OtherDerived>
204 template<
typename Lhs,
typename Rhs>
208 for (
Index i=0; i<
rows();++i)
indices().coeffRef(i) = lhs.indices().coeff(rhs.indices().coeff(i));
218 template<
typename Other>
226 template<
typename Other>
234 template<
typename Other>
friend
252 while(r<n && mask[r]) r++;
257 mask.coeffRef(
k0) =
true;
260 mask.coeffRef(k) =
true;
272template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex>
274 :
traits<Matrix<_StorageIndex,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
296template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex>
305 #ifndef EIGEN_PARSED_BY_DOXYGEN
321 template<
typename OtherDerived>
332 template<
typename Other>
337 template<
typename Other>
345 template<
typename Other>
353 template<
typename Other>
367#ifndef EIGEN_PARSED_BY_DOXYGEN
368 template<
typename Other>
375 m_indices.coeffRef(other.derived().nestedExpression().indices().coeff(i)) = i;
377 template<
typename Lhs,
typename Rhs>
392template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex,
int _PacketAccess>
394 :
traits<Matrix<_StorageIndex,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
403template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex,
int _PacketAccess>
405 :
public PermutationBase<Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, _StorageIndex>,_PacketAccess> >
411 #ifndef EIGEN_PARSED_BY_DOXYGEN
417 : m_indices(indicesPtr)
421 : m_indices(indicesPtr,
size)
425 template<
typename Other>
427 {
return Base::operator=(other.
derived()); }
430 template<
typename Other>
432 {
return Base::operator=(tr.
derived()); }
434 #ifndef EIGEN_PARSED_BY_DOXYGEN
440 m_indices = other.m_indices;
457template<
typename _IndicesType>
465 RowsAtCompileTime = _IndicesType::SizeAtCompileTime,
466 ColsAtCompileTime = _IndicesType::SizeAtCompileTime,
467 MaxRowsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
468 MaxColsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
485template<
typename _IndicesType>
492 #ifndef EIGEN_PARSED_BY_DOXYGEN
512template<
typename MatrixDerived,
typename PermutationDerived>
519 (matrix.derived(), permutation.
derived());
524template<
typename PermutationDerived,
typename MatrixDerived>
526const Product<PermutationDerived, MatrixDerived, AliasFreeProduct>
531 (permutation.
derived(), matrix.derived());
535template<
typename PermutationType>
537 :
public EigenBase<Inverse<PermutationType> >
539 typedef typename PermutationType::PlainPermutationType PlainPermutationType;
547 #ifndef EIGEN_PARSED_BY_DOXYGEN
550 RowsAtCompileTime = PermTraits::RowsAtCompileTime,
551 ColsAtCompileTime = PermTraits::ColsAtCompileTime,
552 MaxRowsAtCompileTime = PermTraits::MaxRowsAtCompileTime,
553 MaxColsAtCompileTime = PermTraits::MaxColsAtCompileTime
557 #ifndef EIGEN_PARSED_BY_DOXYGEN
558 template<
typename DenseDerived>
562 for (
Index i=0; i<derived().rows();++i)
563 other.coeffRef(i, derived().nestedExpression().indices().coeff(i)) =
typename DenseDerived::Scalar(1);
568 PlainPermutationType
eval()
const {
return derived(); }
574 template<
typename OtherDerived>
friend
583 template<
typename OtherDerived>
591template<
typename Derived>
#define eigen_internal_assert(x)
Definition: Macros.h:1053
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:986
#define eigen_assert(x)
Definition: Macros.h:1047
EIGEN_DEVICE_FUNC Derived & setZero()
Sets all coefficients in this expression to zero.
Definition: CwiseNullaryOp.h:546
Expression of the inverse of another expression.
Definition: Inverse.h:44
void evalTo(MatrixBase< DenseDerived > &other) const
Definition: PermutationMatrix.h:559
DenseMatrixType toDenseMatrix() const
Definition: PermutationMatrix.h:570
InverseImpl()
Definition: PermutationMatrix.h:542
PermutationType::DenseMatrixType DenseMatrixType
Definition: PermutationMatrix.h:548
PlainPermutationType eval() const
Definition: PermutationMatrix.h:568
Inverse< PermutationType > InverseType
Definition: PermutationMatrix.h:544
const Product< InverseType, OtherDerived, AliasFreeProduct > operator*(const MatrixBase< OtherDerived > &matrix) const
Definition: PermutationMatrix.h:585
friend const Product< OtherDerived, InverseType, AliasFreeProduct > operator*(const MatrixBase< OtherDerived > &matrix, const InverseType &trPerm)
Definition: PermutationMatrix.h:576
Map & operator=(const Map &other)
This is a special case of the templated operator=.
Definition: PermutationMatrix.h:438
Map(const StorageIndex *indicesPtr)
Definition: PermutationMatrix.h:416
Map & operator=(const TranspositionsBase< Other > &tr)
Assignment from the Transpositions tr.
Definition: PermutationMatrix.h:431
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:412
IndicesType & indices()
Definition: PermutationMatrix.h:448
Map(const StorageIndex *indicesPtr, Index size)
Definition: PermutationMatrix.h:420
Map & operator=(const PermutationBase< Other > &other)
Copies the other permutation into *this.
Definition: PermutationMatrix.h:426
IndicesType::Scalar StorageIndex
Definition: PermutationMatrix.h:413
IndicesType m_indices
Definition: PermutationMatrix.h:452
const IndicesType & indices() const
const version of indices().
Definition: PermutationMatrix.h:446
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:96
MapBase< Map > Base
Definition: Map.h:99
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:50
const PermutationWrapper< const Derived > asPermutation() const
Definition: PermutationMatrix.h:592
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:180
Base class for permutations.
Definition: PermutationMatrix.h:47
InverseReturnType transpose() const
Definition: PermutationMatrix.h:191
Derived & applyTranspositionOnTheLeft(Index i, Index j)
Multiplies *this by the transposition on the left.
Definition: PermutationMatrix.h:155
void assignProduct(const Lhs &lhs, const Rhs &rhs)
Definition: PermutationMatrix.h:205
void resize(Index newSize)
Resizes to given size.
Definition: PermutationMatrix.h:125
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:53
EIGEN_DEVICE_FUNC Index rows() const
Definition: PermutationMatrix.h:91
Traits::StorageIndex StorageIndex
Definition: PermutationMatrix.h:61
PlainPermutationType PlainObject
Definition: PermutationMatrix.h:66
EIGEN_DEVICE_FUNC Index cols() const
Definition: PermutationMatrix.h:94
Index determinant() const
Definition: PermutationMatrix.h:242
Inverse< Derived > InverseReturnType
Definition: PermutationMatrix.h:68
EIGEN_DEVICE_FUNC Index size() const
Definition: PermutationMatrix.h:97
Derived & applyTranspositionOnTheRight(Index i, Index j)
Multiplies *this by the transposition on the right.
Definition: PermutationMatrix.h:174
friend PlainPermutationType operator*(const InverseImpl< Other, PermutationStorage > &other, const PermutationBase &perm)
Definition: PermutationMatrix.h:235
PermutationMatrix< IndicesType::SizeAtCompileTime, IndicesType::MaxSizeAtCompileTime, StorageIndex > PlainPermutationType
Definition: PermutationMatrix.h:65
void setIdentity()
Sets *this to be the identity permutation matrix.
Definition: PermutationMatrix.h:131
Derived & operator=(const PermutationBase< OtherDerived > &other)
Copies the other permutation into *this.
Definition: PermutationMatrix.h:74
IndicesType & indices()
Definition: PermutationMatrix.h:121
Matrix< StorageIndex, RowsAtCompileTime, ColsAtCompileTime, 0, MaxRowsAtCompileTime, MaxColsAtCompileTime > DenseMatrixType
Definition: PermutationMatrix.h:63
void evalTo(MatrixBase< DenseDerived > &other) const
Definition: PermutationMatrix.h:101
void Scalar
Definition: PermutationMatrix.h:69
void setIdentity(Index newSize)
Sets *this to be the identity permutation matrix of given size.
Definition: PermutationMatrix.h:140
PlainPermutationType operator*(const InverseImpl< Other, PermutationStorage > &other) const
Definition: PermutationMatrix.h:227
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
const IndicesType & indices() const
const version of indices().
Definition: PermutationMatrix.h:119
InverseReturnType inverse() const
Definition: PermutationMatrix.h:185
DenseMatrixType toDenseMatrix() const
Definition: PermutationMatrix.h:113
Derived & operator=(const TranspositionsBase< OtherDerived > &tr)
Assignment from the Transpositions tr.
Definition: PermutationMatrix.h:82
PlainPermutationType operator*(const PermutationBase< Other > &other) const
Definition: PermutationMatrix.h:219
@ MaxRowsAtCompileTime
Definition: PermutationMatrix.h:58
@ RowsAtCompileTime
Definition: PermutationMatrix.h:56
@ MaxColsAtCompileTime
Definition: PermutationMatrix.h:59
@ Flags
Definition: PermutationMatrix.h:55
@ ColsAtCompileTime
Definition: PermutationMatrix.h:57
void assignTranspose(const PermutationBase< OtherDerived > &other)
Definition: PermutationMatrix.h:200
Permutation matrix.
Definition: PermutationMatrix.h:298
PermutationMatrix(const TranspositionsBase< Other > &tr)
Convert the Transpositions tr to a permutation matrix.
Definition: PermutationMatrix.h:338
PermutationMatrix(const MatrixBase< Other > &indices)
Generic constructor from expression of the indices.
Definition: PermutationMatrix.h:333
PermutationMatrix(const PermutationBase< OtherDerived > &other)
Copy constructor.
Definition: PermutationMatrix.h:322
PermutationMatrix & operator=(const PermutationBase< Other > &other)
Copies the other permutation into *this.
Definition: PermutationMatrix.h:346
PermutationMatrix(const InverseImpl< Other, PermutationStorage > &other)
Definition: PermutationMatrix.h:369
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:306
const IndicesType & indices() const
const version of indices().
Definition: PermutationMatrix.h:360
IndicesType m_indices
Definition: PermutationMatrix.h:387
IndicesType & indices()
Definition: PermutationMatrix.h:362
PermutationMatrix & operator=(const TranspositionsBase< Other > &tr)
Assignment from the Transpositions tr.
Definition: PermutationMatrix.h:354
const PermutationMatrix & Nested
Definition: PermutationMatrix.h:303
PermutationMatrix()
Definition: PermutationMatrix.h:310
PermutationMatrix(Index size)
Constructs an uninitialized permutation matrix of given size.
Definition: PermutationMatrix.h:315
Traits::StorageIndex StorageIndex
Definition: PermutationMatrix.h:307
PermutationMatrix(internal::PermPermProduct_t, const Lhs &lhs, const Rhs &rhs)
Definition: PermutationMatrix.h:378
Class to view a vector of integers as a permutation matrix.
Definition: PermutationMatrix.h:487
PermutationWrapper(const IndicesType &indices)
Definition: PermutationMatrix.h:496
const internal::remove_all< typenameIndicesType::Nested >::type & indices() const
const version of indices().
Definition: PermutationMatrix.h:502
IndicesType::Nested m_indices
Definition: PermutationMatrix.h:506
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:493
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:75
Definition: Transpositions.h:17
EIGEN_DEVICE_FUNC Index size() const
Definition: Transpositions.h:41
EIGEN_DEVICE_FUNC const StorageIndex & coeff(Index i) const
Direct access to the underlying index vector.
Definition: Transpositions.h:51
EIGEN_DEVICE_FUNC Derived & derived()
Definition: Transpositions.h:27
Definition: Transpositions.h:274
PermPermProduct_t
Definition: PermutationMatrix.h:18
@ PermPermProduct
Definition: PermutationMatrix.h:18
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
static EIGEN_DEPRECATED const end_t end
Definition: IndexedViewHelper.h:181
Namespace containing all symbols from the Eigen library.
Definition: MatrixExponential.h:16
const Product< SparseDerived, PermDerived, AliasFreeProduct > operator*(const SparseMatrixBase< SparseDerived > &matrix, const PermutationBase< PermDerived > &perm)
Definition: SparsePermutation.h:147
Definition: Eigen_Colamd.h:50
void swap(wpi::SmallVectorImpl< T > &LHS, wpi::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
Definition: SmallVector.h:1299
static constexpr uint64_t k0
Some primes between 2^63 and 2^64 for various uses.
Definition: Hashing.h:170
Definition: Constants.h:528
Common base class for all classes T such that MatrixBase has an operator=(T) and a constructor Matrix...
Definition: EigenBase.h:30
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:39
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
Holds information about the various numeric (i.e.
Definition: NumTraits.h:233
Definition: Constants.h:535
The type used to identify a permutation storage.
Definition: Constants.h:516
EigenBase2EigenBase Kind
Definition: PermutationMatrix.h:599
Definition: AssignEvaluator.h:817
Definition: AssignEvaluator.h:815
T type
Definition: Meta.h:126
_StorageIndex StorageIndex
Definition: PermutationMatrix.h:398
void Scalar
Definition: PermutationMatrix.h:399
Map< const Matrix< _StorageIndex, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1 >, _PacketAccess > IndicesType
Definition: PermutationMatrix.h:397
PermutationStorage StorageKind
Definition: PermutationMatrix.h:396
_StorageIndex StorageIndex
Definition: PermutationMatrix.h:278
PermutationStorage StorageKind
Definition: PermutationMatrix.h:276
Matrix< _StorageIndex, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1 > IndicesType
Definition: PermutationMatrix.h:277
void Scalar
Definition: PermutationMatrix.h:279
void Scalar
Definition: PermutationMatrix.h:461
_IndicesType IndicesType
Definition: PermutationMatrix.h:463
PermutationStorage StorageKind
Definition: PermutationMatrix.h:460
_IndicesType::Scalar StorageIndex
Definition: PermutationMatrix.h:462