11 #ifndef EIGEN_PERMUTATIONMATRIX_H
12 #define EIGEN_PERMUTATIONMATRIX_H
45 template<
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++;
272 template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex>
274 :
traits<Matrix<_StorageIndex,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
296 template<
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>
392 template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex,
int _PacketAccess>
394 :
traits<Matrix<_StorageIndex,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
403 template<
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;
457 template<
typename _IndicesType>
465 RowsAtCompileTime = _IndicesType::SizeAtCompileTime,
466 ColsAtCompileTime = _IndicesType::SizeAtCompileTime,
467 MaxRowsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
468 MaxColsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
485 template<
typename _IndicesType>
492 #ifndef EIGEN_PARSED_BY_DOXYGEN
512 template<
typename MatrixDerived,
typename PermutationDerived>
519 (matrix.derived(), permutation.
derived());
524 template<
typename PermutationDerived,
typename MatrixDerived>
526 const Product<PermutationDerived, MatrixDerived, AliasFreeProduct>
531 (permutation.
derived(), matrix.derived());
535 template<
typename PermutationType>
537 :
public EigenBase<Inverse<PermutationType> >
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);
574 template<
typename OtherDerived>
friend
583 template<
typename OtherDerived>
591 template<
typename Derived>
#define eigen_internal_assert(x)
Definition: Macros.h:1043
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:976
#define eigen_assert(x)
Definition: Macros.h:1037
EIGEN_DEVICE_FUNC Derived & setZero()
Definition: CwiseNullaryOp.h:546
void evalTo(MatrixBase< DenseDerived > &other) const
Definition: PermutationMatrix.h:559
DenseMatrixType toDenseMatrix() const
Definition: PermutationMatrix.h:570
friend const Product< OtherDerived, InverseType, AliasFreeProduct > operator*(const MatrixBase< OtherDerived > &matrix, const InverseType &trPerm)
Definition: PermutationMatrix.h:576
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
internal::traits< PermutationType > PermTraits
Definition: PermutationMatrix.h:540
const Product< InverseType, OtherDerived, AliasFreeProduct > operator*(const MatrixBase< OtherDerived > &matrix) const
Definition: PermutationMatrix.h:585
PermutationType::PlainPermutationType PlainPermutationType
Definition: PermutationMatrix.h:539
Scalar coeff(Index row, Index col) const
Expression of the inverse of another expression.
Definition: Inverse.h:44
Map(const StorageIndex *indicesPtr)
Definition: PermutationMatrix.h:416
Map & operator=(const PermutationBase< Other > &other)
Definition: PermutationMatrix.h:426
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:412
Map & operator=(const Map &other)
Definition: PermutationMatrix.h:438
internal::traits< Map > Traits
Definition: PermutationMatrix.h:408
const IndicesType & indices() const
Definition: PermutationMatrix.h:446
Map & operator=(const TranspositionsBase< Other > &tr)
Definition: PermutationMatrix.h:431
PermutationBase< Map > Base
Definition: PermutationMatrix.h:407
Map(const StorageIndex *indicesPtr, Index size)
Definition: PermutationMatrix.h:420
IndicesType::Scalar StorageIndex
Definition: PermutationMatrix.h:413
IndicesType m_indices
Definition: PermutationMatrix.h:452
IndicesType & indices()
Definition: PermutationMatrix.h:448
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:96
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
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar & coeffRef(Index rowId, Index colId)
Definition: PlainObjectBase.h:175
Base class for permutations.
Definition: PermutationMatrix.h:47
InverseReturnType transpose() const
Definition: PermutationMatrix.h:191
void assignProduct(const Lhs &lhs, const Rhs &rhs)
Definition: PermutationMatrix.h:205
void resize(Index newSize)
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
IndicesType & indices()
Definition: PermutationMatrix.h:121
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
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
friend PlainPermutationType operator*(const InverseImpl< Other, PermutationStorage > &other, const PermutationBase &perm)
Definition: PermutationMatrix.h:235
Derived & applyTranspositionOnTheLeft(Index i, Index j)
Definition: PermutationMatrix.h:155
PermutationMatrix< IndicesType::SizeAtCompileTime, IndicesType::MaxSizeAtCompileTime, StorageIndex > PlainPermutationType
Definition: PermutationMatrix.h:65
Derived & applyTranspositionOnTheRight(Index i, Index j)
Definition: PermutationMatrix.h:174
void setIdentity()
Definition: PermutationMatrix.h:131
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)
Definition: PermutationMatrix.h:140
PlainPermutationType operator*(const InverseImpl< Other, PermutationStorage > &other) const
Definition: PermutationMatrix.h:227
Derived & operator=(const PermutationBase< OtherDerived > &other)
Definition: PermutationMatrix.h:74
EigenBase< Derived > Base
Definition: PermutationMatrix.h:49
internal::traits< Derived > Traits
Definition: PermutationMatrix.h:48
Derived & operator=(const TranspositionsBase< OtherDerived > &tr)
Definition: PermutationMatrix.h:82
InverseReturnType inverse() const
Definition: PermutationMatrix.h:185
DenseMatrixType toDenseMatrix() const
Definition: PermutationMatrix.h:113
const IndicesType & indices() const
Definition: PermutationMatrix.h:119
PlainPermutationType operator*(const PermutationBase< Other > &other) const
Definition: PermutationMatrix.h:219
void assignTranspose(const PermutationBase< OtherDerived > &other)
Definition: PermutationMatrix.h:200
@ 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
Permutation matrix.
Definition: PermutationMatrix.h:298
PermutationMatrix(const TranspositionsBase< Other > &tr)
Definition: PermutationMatrix.h:338
PermutationMatrix(const MatrixBase< Other > &indices)
Definition: PermutationMatrix.h:333
const IndicesType & indices() const
Definition: PermutationMatrix.h:360
PermutationMatrix & operator=(const TranspositionsBase< Other > &tr)
Definition: PermutationMatrix.h:354
PermutationMatrix(const PermutationBase< OtherDerived > &other)
Definition: PermutationMatrix.h:322
PermutationBase< PermutationMatrix > Base
Definition: PermutationMatrix.h:299
PermutationMatrix(const InverseImpl< Other, PermutationStorage > &other)
Definition: PermutationMatrix.h:369
Traits::IndicesType IndicesType
Definition: PermutationMatrix.h:306
internal::traits< PermutationMatrix > Traits
Definition: PermutationMatrix.h:300
IndicesType m_indices
Definition: PermutationMatrix.h:387
IndicesType & indices()
Definition: PermutationMatrix.h:362
const PermutationMatrix & Nested
Definition: PermutationMatrix.h:303
PermutationMatrix()
Definition: PermutationMatrix.h:310
PermutationMatrix(Index size)
Definition: PermutationMatrix.h:315
PermutationMatrix & operator=(const PermutationBase< Other > &other)
Definition: PermutationMatrix.h:346
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
PermutationBase< PermutationWrapper > Base
Definition: PermutationMatrix.h:488
PermutationWrapper(const IndicesType &indices)
Definition: PermutationMatrix.h:496
internal::traits< PermutationWrapper > Traits
Definition: PermutationMatrix.h:489
const internal::remove_all< typename IndicesType::Nested >::type & indices() const
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 const StorageIndex & coeff(Index i) const
Definition: Transpositions.h:51
EIGEN_DEVICE_FUNC Index size() const
Definition: Transpositions.h:41
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: LDLT.h:16
EIGEN_DEVICE_FUNC const Product< MatrixDerived, PermutationDerived, AliasFreeProduct > operator*(const MatrixBase< MatrixDerived > &matrix, const PermutationBase< PermutationDerived > &permutation)
Definition: PermutationMatrix.h:515
Flags
Special flags for archives.
Definition: cereal.hpp:185
Definition: document.h:416
NLOHMANN_BASIC_JSON_TPL_DECLARATION void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL &j1, nlohmann::NLOHMANN_BASIC_JSON_TPL &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp) is_nothrow_move_constructible< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value &&//NOLINT(misc-redundant-expression, cppcoreguidelines-noexcept-swap, performance-noexcept-swap) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
Definition: json.hpp:25399
Definition: Constants.h:528
Definition: EigenBase.h:30
EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:46
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:39
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:233
Definition: Constants.h:535
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