11#ifndef EIGEN_PERMUTATIONMATRIX_H
12#define EIGEN_PERMUTATIONMATRIX_H
18enum PermPermProduct_t {PermPermProduct};
45template<
typename Derived>
52 #ifndef EIGEN_PARSED_BY_DOXYGEN
53 typedef typename Traits::IndicesType IndicesType;
55 Flags = Traits::Flags,
56 RowsAtCompileTime = Traits::RowsAtCompileTime,
57 ColsAtCompileTime = Traits::ColsAtCompileTime,
58 MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime,
59 MaxColsAtCompileTime = Traits::MaxColsAtCompileTime
61 typedef typename Traits::StorageIndex StorageIndex;
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);
133 StorageIndex n = StorageIndex(
size());
134 for(StorageIndex i = 0; i < n; ++i)
157 eigen_assert(i>=0 && j>=0 && i<
size() && j<
size());
160 if(
indices().coeff(k) == i)
indices().coeffRef(k) = StorageIndex(j);
161 else if(
indices().coeff(k) == j)
indices().coeffRef(k) = StorageIndex(i);
176 eigen_assert(i>=0 && j>=0 && i<
size() && j<
size());
197#ifndef EIGEN_PARSED_BY_DOXYGEN
199 template<
typename OtherDerived>
202 for (
Index i=0; i<
rows();++i)
indices().coeffRef(other.indices().coeff(i)) = i;
204 template<
typename Lhs,
typename Rhs>
205 void assignProduct(
const Lhs& lhs,
const Rhs& rhs)
207 eigen_assert(lhs.cols() == rhs.rows());
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> >
278 typedef _StorageIndex StorageIndex;
296template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex>
305 #ifndef EIGEN_PARSED_BY_DOXYGEN
306 typedef typename Traits::IndicesType IndicesType;
307 typedef typename Traits::StorageIndex StorageIndex;
321 template<
typename OtherDerived>
323 : m_indices(other.
indices()) {}
332 template<
typename Other>
337 template<
typename Other>
345 template<
typename Other>
348 m_indices = other.indices();
353 template<
typename Other>
360 const IndicesType&
indices()
const {
return m_indices; }
367#ifndef EIGEN_PARSED_BY_DOXYGEN
368 template<
typename Other>
370 : m_indices(other.
derived().nestedExpression().
size())
373 StorageIndex end = StorageIndex(m_indices.size());
374 for (StorageIndex i=0; i<end;++i)
375 m_indices.coeffRef(other.derived().nestedExpression().indices().coeff(i)) = i;
377 template<
typename Lhs,
typename Rhs>
378 PermutationMatrix(internal::PermPermProduct_t,
const Lhs& lhs,
const Rhs& rhs)
381 Base::assignProduct(lhs,rhs);
387 IndicesType m_indices;
392template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex,
int _PacketAccess>
394 :
traits<Matrix<_StorageIndex,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
398 typedef _StorageIndex StorageIndex;
403template<
int SizeAtCompileTime,
int MaxSizeAtCompileTime,
typename _StorageIndex,
int _PacketAccess>
405 :
public PermutationBase<Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, _StorageIndex>,_PacketAccess> >
411 #ifndef EIGEN_PARSED_BY_DOXYGEN
412 typedef typename Traits::IndicesType IndicesType;
413 typedef typename IndicesType::Scalar StorageIndex;
425 template<
typename Other>
430 template<
typename Other>
434 #ifndef EIGEN_PARSED_BY_DOXYGEN
440 m_indices = other.m_indices;
446 const IndicesType&
indices()
const {
return m_indices; }
452 IndicesType m_indices;
455template<
typename _IndicesType>
class TranspositionsWrapper;
457template<
typename _IndicesType>
462 typedef typename _IndicesType::Scalar StorageIndex;
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
493 typedef typename Traits::IndicesType IndicesType;
501 const typename internal::remove_all<typename IndicesType::Nested>::type&
506 typename IndicesType::Nested m_indices;
512template<
typename MatrixDerived,
typename PermutationDerived>
514const Product<MatrixDerived, PermutationDerived, AliasFreeProduct>
524template<
typename PermutationDerived,
typename MatrixDerived>
526const Product<PermutationDerived, MatrixDerived, AliasFreeProduct>
535template<
typename PermutationType>
537 :
public EigenBase<Inverse<PermutationType> >
539 typedef typename PermutationType::PlainPermutationType PlainPermutationType;
547 #ifndef EIGEN_PARSED_BY_DOXYGEN
548 typedef typename PermutationType::DenseMatrixType DenseMatrixType;
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(); }
570 DenseMatrixType toDenseMatrix()
const {
return derived(); }
574 template<
typename OtherDerived>
friend
575 const Product<OtherDerived, InverseType, AliasFreeProduct>
583 template<
typename OtherDerived>
591template<
typename Derived>
592const PermutationWrapper<const Derived> MatrixBase<Derived>::asPermutation()
const
EIGEN_DEVICE_FUNC void resize(Index newSize)
Only plain matrices/arrays, not expressions, may be resized; therefore the only useful resize methods...
Definition DenseBase.h:246
EIGEN_DEVICE_FUNC void fill(const Scalar &value)
Alias for setConstant(): sets all coefficients in this expression to val.
Definition CwiseNullaryOp.h:335
EIGEN_DEVICE_FUNC Derived & setZero()
Sets all coefficients in this expression to zero.
Definition CwiseNullaryOp.h:546
PlainPermutationType eval() const
Definition PermutationMatrix.h:568
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 & operator=(const TranspositionsBase< Other > &tr)
Assignment from the Transpositions tr.
Definition PermutationMatrix.h:431
IndicesType & indices()
Definition PermutationMatrix.h:448
Map & operator=(const PermutationBase< Other > &other)
Copies the other permutation into *this.
Definition PermutationMatrix.h:426
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
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvalReturnType eval() const
Definition DenseBase.h:407
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator=(const MatrixBase &other)
Special case of the template operator=, in order to prevent the compiler from generating a default op...
Definition Assign.h:55
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 resize(Index newSize)
Resizes to given size.
Definition PermutationMatrix.h:125
EIGEN_DEVICE_FUNC Index rows() const
Definition PermutationMatrix.h:91
EIGEN_DEVICE_FUNC Index cols() const
Definition PermutationMatrix.h:94
Index determinant() const
Definition PermutationMatrix.h:242
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
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
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
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
const IndicesType & indices() const
const version of indices().
Definition PermutationMatrix.h:360
IndicesType & indices()
Definition PermutationMatrix.h:362
PermutationMatrix & operator=(const TranspositionsBase< Other > &tr)
Assignment from the Transpositions tr.
Definition PermutationMatrix.h:354
PermutationMatrix(Index size)
Constructs an uninitialized permutation matrix of given size.
Definition PermutationMatrix.h:315
Class to view a vector of integers as a permutation matrix.
Definition PermutationMatrix.h:487
const internal::remove_all< typenameIndicesType::Nested >::type & indices() const
const version of indices().
Definition PermutationMatrix.h:502
Namespace containing all symbols from the Eigen library.
Definition LDLT.h:16
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
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) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
Definition json.hpp:24418
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:236
Definition Constants.h:535
The type used to identify a permutation storage.
Definition Constants.h:516
Definition AssignEvaluator.h:817
Definition AssignEvaluator.h:815
Definition ForwardDeclarations.h:17