@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -11,595 +11,545 @@
|
|
|
11
11
|
#ifndef EIGEN_PERMUTATIONMATRIX_H
|
|
12
12
|
#define EIGEN_PERMUTATIONMATRIX_H
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
16
|
+
|
|
17
|
+
namespace Eigen {
|
|
15
18
|
|
|
16
19
|
namespace internal {
|
|
17
20
|
|
|
18
|
-
enum PermPermProduct_t {PermPermProduct};
|
|
21
|
+
enum PermPermProduct_t { PermPermProduct };
|
|
19
22
|
|
|
20
|
-
}
|
|
23
|
+
} // end namespace internal
|
|
21
24
|
|
|
22
25
|
/** \class PermutationBase
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
template<typename Derived>
|
|
46
|
-
class PermutationBase : public EigenBase<Derived>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
#endif
|
|
71
|
-
|
|
72
|
-
/** Copies the other permutation into *this */
|
|
73
|
-
template<typename OtherDerived>
|
|
74
|
-
Derived& operator=(const PermutationBase<OtherDerived>& other)
|
|
75
|
-
{
|
|
76
|
-
indices() = other.indices();
|
|
77
|
-
return derived();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Assignment from the Transpositions \a tr */
|
|
81
|
-
template<typename OtherDerived>
|
|
82
|
-
Derived& operator=(const TranspositionsBase<OtherDerived>& tr)
|
|
83
|
-
{
|
|
84
|
-
setIdentity(tr.size());
|
|
85
|
-
for(Index k=size()-1; k>=0; --k)
|
|
86
|
-
applyTranspositionOnTheRight(k,tr.coeff(k));
|
|
87
|
-
return derived();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** \returns the number of rows */
|
|
91
|
-
inline Index rows() const { return Index(indices().size()); }
|
|
92
|
-
|
|
93
|
-
/** \returns the number of columns */
|
|
94
|
-
inline Index cols() const { return Index(indices().size()); }
|
|
95
|
-
|
|
96
|
-
/** \returns the size of a side of the respective square matrix, i.e., the number of indices */
|
|
97
|
-
inline Index size() const { return Index(indices().size()); }
|
|
26
|
+
* \ingroup Core_Module
|
|
27
|
+
*
|
|
28
|
+
* \brief Base class for permutations
|
|
29
|
+
*
|
|
30
|
+
* \tparam Derived the derived class
|
|
31
|
+
*
|
|
32
|
+
* This class is the base class for all expressions representing a permutation matrix,
|
|
33
|
+
* internally stored as a vector of integers.
|
|
34
|
+
* The convention followed here is that if \f$ \sigma \f$ is a permutation, the corresponding permutation matrix
|
|
35
|
+
* \f$ P_\sigma \f$ is such that if \f$ (e_1,\ldots,e_p) \f$ is the canonical basis, we have:
|
|
36
|
+
* \f[ P_\sigma(e_i) = e_{\sigma(i)}. \f]
|
|
37
|
+
* This convention ensures that for any two permutations \f$ \sigma, \tau \f$, we have:
|
|
38
|
+
* \f[ P_{\sigma\circ\tau} = P_\sigma P_\tau. \f]
|
|
39
|
+
*
|
|
40
|
+
* Permutation matrices are square and invertible.
|
|
41
|
+
*
|
|
42
|
+
* Notice that in addition to the member functions and operators listed here, there also are non-member
|
|
43
|
+
* operator* to multiply any kind of permutation object with any kind of matrix expression (MatrixBase)
|
|
44
|
+
* on either side.
|
|
45
|
+
*
|
|
46
|
+
* \sa class PermutationMatrix, class PermutationWrapper
|
|
47
|
+
*/
|
|
48
|
+
template <typename Derived>
|
|
49
|
+
class PermutationBase : public EigenBase<Derived> {
|
|
50
|
+
typedef internal::traits<Derived> Traits;
|
|
51
|
+
typedef EigenBase<Derived> Base;
|
|
52
|
+
|
|
53
|
+
public:
|
|
54
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
55
|
+
typedef typename Traits::IndicesType IndicesType;
|
|
56
|
+
enum {
|
|
57
|
+
Flags = Traits::Flags,
|
|
58
|
+
RowsAtCompileTime = Traits::RowsAtCompileTime,
|
|
59
|
+
ColsAtCompileTime = Traits::ColsAtCompileTime,
|
|
60
|
+
MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime,
|
|
61
|
+
MaxColsAtCompileTime = Traits::MaxColsAtCompileTime
|
|
62
|
+
};
|
|
63
|
+
typedef typename Traits::StorageIndex StorageIndex;
|
|
64
|
+
typedef Matrix<StorageIndex, RowsAtCompileTime, ColsAtCompileTime, 0, MaxRowsAtCompileTime, MaxColsAtCompileTime>
|
|
65
|
+
DenseMatrixType;
|
|
66
|
+
typedef PermutationMatrix<IndicesType::SizeAtCompileTime, IndicesType::MaxSizeAtCompileTime, StorageIndex>
|
|
67
|
+
PlainPermutationType;
|
|
68
|
+
typedef PlainPermutationType PlainObject;
|
|
69
|
+
using Base::derived;
|
|
70
|
+
typedef Inverse<Derived> InverseReturnType;
|
|
71
|
+
typedef void Scalar;
|
|
72
|
+
#endif
|
|
98
73
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
other.coeffRef(indices().coeff(i),i) = typename DenseDerived::Scalar(1);
|
|
106
|
-
}
|
|
107
|
-
#endif
|
|
108
|
-
|
|
109
|
-
/** \returns a Matrix object initialized from this permutation matrix. Notice that it
|
|
110
|
-
* is inefficient to return this Matrix object by value. For efficiency, favor using
|
|
111
|
-
* the Matrix constructor taking EigenBase objects.
|
|
112
|
-
*/
|
|
113
|
-
DenseMatrixType toDenseMatrix() const
|
|
114
|
-
{
|
|
115
|
-
return derived();
|
|
116
|
-
}
|
|
74
|
+
/** Copies the other permutation into *this */
|
|
75
|
+
template <typename OtherDerived>
|
|
76
|
+
Derived& operator=(const PermutationBase<OtherDerived>& other) {
|
|
77
|
+
indices() = other.indices();
|
|
78
|
+
return derived();
|
|
79
|
+
}
|
|
117
80
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
81
|
+
/** Assignment from the Transpositions \a tr */
|
|
82
|
+
template <typename OtherDerived>
|
|
83
|
+
Derived& operator=(const TranspositionsBase<OtherDerived>& tr) {
|
|
84
|
+
setIdentity(tr.size());
|
|
85
|
+
for (Index k = size() - 1; k >= 0; --k) applyTranspositionOnTheRight(k, tr.coeff(k));
|
|
86
|
+
return derived();
|
|
87
|
+
}
|
|
122
88
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
inline void resize(Index newSize)
|
|
126
|
-
{
|
|
127
|
-
indices().resize(newSize);
|
|
128
|
-
}
|
|
89
|
+
/** \returns the number of rows */
|
|
90
|
+
inline EIGEN_DEVICE_FUNC Index rows() const { return Index(indices().size()); }
|
|
129
91
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
{
|
|
133
|
-
StorageIndex n = StorageIndex(size());
|
|
134
|
-
for(StorageIndex i = 0; i < n; ++i)
|
|
135
|
-
indices().coeffRef(i) = i;
|
|
136
|
-
}
|
|
92
|
+
/** \returns the number of columns */
|
|
93
|
+
inline EIGEN_DEVICE_FUNC Index cols() const { return Index(indices().size()); }
|
|
137
94
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
void setIdentity(Index newSize)
|
|
141
|
-
{
|
|
142
|
-
resize(newSize);
|
|
143
|
-
setIdentity();
|
|
144
|
-
}
|
|
95
|
+
/** \returns the size of a side of the respective square matrix, i.e., the number of indices */
|
|
96
|
+
inline EIGEN_DEVICE_FUNC Index size() const { return Index(indices().size()); }
|
|
145
97
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
* \sa applyTranspositionOnTheRight(Index,Index)
|
|
154
|
-
*/
|
|
155
|
-
Derived& applyTranspositionOnTheLeft(Index i, Index j)
|
|
156
|
-
{
|
|
157
|
-
eigen_assert(i>=0 && j>=0 && i<size() && j<size());
|
|
158
|
-
for(Index k = 0; k < size(); ++k)
|
|
159
|
-
{
|
|
160
|
-
if(indices().coeff(k) == i) indices().coeffRef(k) = StorageIndex(j);
|
|
161
|
-
else if(indices().coeff(k) == j) indices().coeffRef(k) = StorageIndex(i);
|
|
162
|
-
}
|
|
163
|
-
return derived();
|
|
164
|
-
}
|
|
98
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
99
|
+
template <typename DenseDerived>
|
|
100
|
+
void evalTo(MatrixBase<DenseDerived>& other) const {
|
|
101
|
+
other.setZero();
|
|
102
|
+
for (Index i = 0; i < rows(); ++i) other.coeffRef(indices().coeff(i), i) = typename DenseDerived::Scalar(1);
|
|
103
|
+
}
|
|
104
|
+
#endif
|
|
165
105
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
106
|
+
/** \returns a Matrix object initialized from this permutation matrix. Notice that it
|
|
107
|
+
* is inefficient to return this Matrix object by value. For efficiency, favor using
|
|
108
|
+
* the Matrix constructor taking EigenBase objects.
|
|
109
|
+
*/
|
|
110
|
+
DenseMatrixType toDenseMatrix() const { return derived(); }
|
|
111
|
+
|
|
112
|
+
/** \returns the plain matrix representation of the permutation. */
|
|
113
|
+
DenseMatrixType eval() const { return toDenseMatrix(); }
|
|
114
|
+
|
|
115
|
+
/** const version of indices(). */
|
|
116
|
+
const IndicesType& indices() const { return derived().indices(); }
|
|
117
|
+
/** \returns a reference to the stored array representing the permutation. */
|
|
118
|
+
IndicesType& indices() { return derived().indices(); }
|
|
119
|
+
|
|
120
|
+
/** Resizes to given size.
|
|
121
|
+
*/
|
|
122
|
+
inline void resize(Index newSize) { indices().resize(newSize); }
|
|
123
|
+
|
|
124
|
+
/** Sets *this to be the identity permutation matrix */
|
|
125
|
+
void setIdentity() {
|
|
126
|
+
StorageIndex n = StorageIndex(size());
|
|
127
|
+
for (StorageIndex i = 0; i < n; ++i) indices().coeffRef(i) = i;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Sets *this to be the identity permutation matrix of given size.
|
|
131
|
+
*/
|
|
132
|
+
void setIdentity(Index newSize) {
|
|
133
|
+
resize(newSize);
|
|
134
|
+
setIdentity();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** Multiplies *this by the transposition \f$(ij)\f$ on the left.
|
|
138
|
+
*
|
|
139
|
+
* \returns a reference to *this.
|
|
140
|
+
*
|
|
141
|
+
* \warning This is much slower than applyTranspositionOnTheRight(Index,Index):
|
|
142
|
+
* this has linear complexity and requires a lot of branching.
|
|
143
|
+
*
|
|
144
|
+
* \sa applyTranspositionOnTheRight(Index,Index)
|
|
145
|
+
*/
|
|
146
|
+
Derived& applyTranspositionOnTheLeft(Index i, Index j) {
|
|
147
|
+
eigen_assert(i >= 0 && j >= 0 && i < size() && j < size());
|
|
148
|
+
for (Index k = 0; k < size(); ++k) {
|
|
149
|
+
if (indices().coeff(k) == i)
|
|
150
|
+
indices().coeffRef(k) = StorageIndex(j);
|
|
151
|
+
else if (indices().coeff(k) == j)
|
|
152
|
+
indices().coeffRef(k) = StorageIndex(i);
|
|
179
153
|
}
|
|
154
|
+
return derived();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Multiplies *this by the transposition \f$(ij)\f$ on the right.
|
|
158
|
+
*
|
|
159
|
+
* \returns a reference to *this.
|
|
160
|
+
*
|
|
161
|
+
* This is a fast operation, it only consists in swapping two indices.
|
|
162
|
+
*
|
|
163
|
+
* \sa applyTranspositionOnTheLeft(Index,Index)
|
|
164
|
+
*/
|
|
165
|
+
Derived& applyTranspositionOnTheRight(Index i, Index j) {
|
|
166
|
+
eigen_assert(i >= 0 && j >= 0 && i < size() && j < size());
|
|
167
|
+
std::swap(indices().coeffRef(i), indices().coeffRef(j));
|
|
168
|
+
return derived();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** \returns the inverse permutation matrix.
|
|
172
|
+
*
|
|
173
|
+
* \note \blank \note_try_to_help_rvo
|
|
174
|
+
*/
|
|
175
|
+
inline InverseReturnType inverse() const { return InverseReturnType(derived()); }
|
|
176
|
+
/** \returns the transpose permutation matrix.
|
|
177
|
+
*
|
|
178
|
+
* \note \blank \note_try_to_help_rvo
|
|
179
|
+
*/
|
|
180
|
+
inline InverseReturnType transpose() const { return InverseReturnType(derived()); }
|
|
181
|
+
|
|
182
|
+
/**** multiplication helpers to hopefully get RVO ****/
|
|
180
183
|
|
|
181
|
-
/** \returns the inverse permutation matrix.
|
|
182
|
-
*
|
|
183
|
-
* \note \blank \note_try_to_help_rvo
|
|
184
|
-
*/
|
|
185
|
-
inline InverseReturnType inverse() const
|
|
186
|
-
{ return InverseReturnType(derived()); }
|
|
187
|
-
/** \returns the tranpose permutation matrix.
|
|
188
|
-
*
|
|
189
|
-
* \note \blank \note_try_to_help_rvo
|
|
190
|
-
*/
|
|
191
|
-
inline InverseReturnType transpose() const
|
|
192
|
-
{ return InverseReturnType(derived()); }
|
|
193
|
-
|
|
194
|
-
/**** multiplication helpers to hopefully get RVO ****/
|
|
195
|
-
|
|
196
|
-
|
|
197
184
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
for (Index i=0; i<rows();++i) indices().coeffRef(i) = lhs.indices().coeff(rhs.indices().coeff(i));
|
|
209
|
-
}
|
|
185
|
+
protected:
|
|
186
|
+
template <typename OtherDerived>
|
|
187
|
+
void assignTranspose(const PermutationBase<OtherDerived>& other) {
|
|
188
|
+
for (Index i = 0; i < rows(); ++i) indices().coeffRef(other.indices().coeff(i)) = i;
|
|
189
|
+
}
|
|
190
|
+
template <typename Lhs, typename Rhs>
|
|
191
|
+
void assignProduct(const Lhs& lhs, const Rhs& rhs) {
|
|
192
|
+
eigen_assert(lhs.cols() == rhs.rows());
|
|
193
|
+
for (Index i = 0; i < rows(); ++i) indices().coeffRef(i) = lhs.indices().coeff(rhs.indices().coeff(i));
|
|
194
|
+
}
|
|
210
195
|
#endif
|
|
211
196
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
197
|
+
public:
|
|
198
|
+
/** \returns the product permutation matrix.
|
|
199
|
+
*
|
|
200
|
+
* \note \blank \note_try_to_help_rvo
|
|
201
|
+
*/
|
|
202
|
+
template <typename Other>
|
|
203
|
+
inline PlainPermutationType operator*(const PermutationBase<Other>& other) const {
|
|
204
|
+
return PlainPermutationType(internal::PermPermProduct, derived(), other.derived());
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** \returns the product of a permutation with another inverse permutation.
|
|
208
|
+
*
|
|
209
|
+
* \note \blank \note_try_to_help_rvo
|
|
210
|
+
*/
|
|
211
|
+
template <typename Other>
|
|
212
|
+
inline PlainPermutationType operator*(const InverseImpl<Other, PermutationStorage>& other) const {
|
|
213
|
+
return PlainPermutationType(internal::PermPermProduct, *this, other.eval());
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** \returns the product of an inverse permutation with another permutation.
|
|
217
|
+
*
|
|
218
|
+
* \note \blank \note_try_to_help_rvo
|
|
219
|
+
*/
|
|
220
|
+
template <typename Other>
|
|
221
|
+
friend inline PlainPermutationType operator*(const InverseImpl<Other, PermutationStorage>& other,
|
|
222
|
+
const PermutationBase& perm) {
|
|
223
|
+
return PlainPermutationType(internal::PermPermProduct, other.eval(), perm);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** \returns the determinant of the permutation matrix, which is either 1 or -1 depending on the parity of the
|
|
227
|
+
* permutation.
|
|
228
|
+
*
|
|
229
|
+
* This function is O(\c n) procedure allocating a buffer of \c n booleans.
|
|
230
|
+
*/
|
|
231
|
+
Index determinant() const {
|
|
232
|
+
Index res = 1;
|
|
233
|
+
Index n = size();
|
|
234
|
+
Matrix<bool, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime> mask(n);
|
|
235
|
+
mask.fill(false);
|
|
236
|
+
Index r = 0;
|
|
237
|
+
while (r < n) {
|
|
238
|
+
// search for the next seed
|
|
239
|
+
while (r < n && mask[r]) r++;
|
|
240
|
+
if (r >= n) break;
|
|
241
|
+
// we got one, let's follow it until we are back to the seed
|
|
242
|
+
Index k0 = r++;
|
|
243
|
+
mask.coeffRef(k0) = true;
|
|
244
|
+
for (Index k = indices().coeff(k0); k != k0; k = indices().coeff(k)) {
|
|
245
|
+
mask.coeffRef(k) = true;
|
|
246
|
+
res = -res;
|
|
263
247
|
}
|
|
264
|
-
return res;
|
|
265
248
|
}
|
|
249
|
+
return res;
|
|
250
|
+
}
|
|
266
251
|
|
|
267
|
-
|
|
268
|
-
|
|
252
|
+
protected:
|
|
269
253
|
};
|
|
270
254
|
|
|
271
255
|
namespace internal {
|
|
272
|
-
template<int SizeAtCompileTime, int MaxSizeAtCompileTime, typename
|
|
273
|
-
struct traits<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime,
|
|
274
|
-
|
|
275
|
-
{
|
|
256
|
+
template <int SizeAtCompileTime, int MaxSizeAtCompileTime, typename StorageIndex_>
|
|
257
|
+
struct traits<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_> >
|
|
258
|
+
: traits<
|
|
259
|
+
Matrix<StorageIndex_, SizeAtCompileTime, SizeAtCompileTime, 0, MaxSizeAtCompileTime, MaxSizeAtCompileTime> > {
|
|
276
260
|
typedef PermutationStorage StorageKind;
|
|
277
|
-
typedef Matrix<
|
|
278
|
-
typedef
|
|
261
|
+
typedef Matrix<StorageIndex_, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1> IndicesType;
|
|
262
|
+
typedef StorageIndex_ StorageIndex;
|
|
279
263
|
typedef void Scalar;
|
|
280
264
|
};
|
|
281
|
-
}
|
|
265
|
+
} // namespace internal
|
|
282
266
|
|
|
283
267
|
/** \class PermutationMatrix
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
306
|
-
typedef typename Traits::IndicesType IndicesType;
|
|
307
|
-
typedef typename Traits::StorageIndex StorageIndex;
|
|
308
|
-
#endif
|
|
309
|
-
|
|
310
|
-
inline PermutationMatrix()
|
|
311
|
-
{}
|
|
312
|
-
|
|
313
|
-
/** Constructs an uninitialized permutation matrix of given size.
|
|
314
|
-
*/
|
|
315
|
-
explicit inline PermutationMatrix(Index size) : m_indices(size)
|
|
316
|
-
{
|
|
317
|
-
eigen_internal_assert(size <= NumTraits<StorageIndex>::highest());
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** Copy constructor. */
|
|
321
|
-
template<typename OtherDerived>
|
|
322
|
-
inline PermutationMatrix(const PermutationBase<OtherDerived>& other)
|
|
323
|
-
: m_indices(other.indices()) {}
|
|
324
|
-
|
|
325
|
-
/** Generic constructor from expression of the indices. The indices
|
|
326
|
-
* array has the meaning that the permutations sends each integer i to indices[i].
|
|
327
|
-
*
|
|
328
|
-
* \warning It is your responsibility to check that the indices array that you passes actually
|
|
329
|
-
* describes a permutation, i.e., each value between 0 and n-1 occurs exactly once, where n is the
|
|
330
|
-
* array's size.
|
|
331
|
-
*/
|
|
332
|
-
template<typename Other>
|
|
333
|
-
explicit inline PermutationMatrix(const MatrixBase<Other>& indices) : m_indices(indices)
|
|
334
|
-
{}
|
|
335
|
-
|
|
336
|
-
/** Convert the Transpositions \a tr to a permutation matrix */
|
|
337
|
-
template<typename Other>
|
|
338
|
-
explicit PermutationMatrix(const TranspositionsBase<Other>& tr)
|
|
339
|
-
: m_indices(tr.size())
|
|
340
|
-
{
|
|
341
|
-
*this = tr;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/** Copies the other permutation into *this */
|
|
345
|
-
template<typename Other>
|
|
346
|
-
PermutationMatrix& operator=(const PermutationBase<Other>& other)
|
|
347
|
-
{
|
|
348
|
-
m_indices = other.indices();
|
|
349
|
-
return *this;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/** Assignment from the Transpositions \a tr */
|
|
353
|
-
template<typename Other>
|
|
354
|
-
PermutationMatrix& operator=(const TranspositionsBase<Other>& tr)
|
|
355
|
-
{
|
|
356
|
-
return Base::operator=(tr.derived());
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/** const version of indices(). */
|
|
360
|
-
const IndicesType& indices() const { return m_indices; }
|
|
361
|
-
/** \returns a reference to the stored array representing the permutation. */
|
|
362
|
-
IndicesType& indices() { return m_indices; }
|
|
268
|
+
* \ingroup Core_Module
|
|
269
|
+
*
|
|
270
|
+
* \brief Permutation matrix
|
|
271
|
+
*
|
|
272
|
+
* \tparam SizeAtCompileTime the number of rows/cols, or Dynamic
|
|
273
|
+
* \tparam MaxSizeAtCompileTime the maximum number of rows/cols, or Dynamic. This optional parameter defaults to
|
|
274
|
+
* SizeAtCompileTime. Most of the time, you should not have to specify it. \tparam StorageIndex_ the integer type of the
|
|
275
|
+
* indices
|
|
276
|
+
*
|
|
277
|
+
* This class represents a permutation matrix, internally stored as a vector of integers.
|
|
278
|
+
*
|
|
279
|
+
* \sa class PermutationBase, class PermutationWrapper, class DiagonalMatrix
|
|
280
|
+
*/
|
|
281
|
+
template <int SizeAtCompileTime, int MaxSizeAtCompileTime, typename StorageIndex_>
|
|
282
|
+
class PermutationMatrix
|
|
283
|
+
: public PermutationBase<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_> > {
|
|
284
|
+
typedef PermutationBase<PermutationMatrix> Base;
|
|
285
|
+
typedef internal::traits<PermutationMatrix> Traits;
|
|
286
|
+
|
|
287
|
+
public:
|
|
288
|
+
typedef const PermutationMatrix& Nested;
|
|
363
289
|
|
|
290
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
291
|
+
typedef typename Traits::IndicesType IndicesType;
|
|
292
|
+
typedef typename Traits::StorageIndex StorageIndex;
|
|
293
|
+
#endif
|
|
364
294
|
|
|
365
|
-
|
|
295
|
+
inline PermutationMatrix() {}
|
|
296
|
+
|
|
297
|
+
/** Constructs an uninitialized permutation matrix of given size.
|
|
298
|
+
*/
|
|
299
|
+
explicit inline PermutationMatrix(Index size) : m_indices(size) {
|
|
300
|
+
eigen_internal_assert(size <= NumTraits<StorageIndex>::highest());
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** Copy constructor. */
|
|
304
|
+
template <typename OtherDerived>
|
|
305
|
+
inline PermutationMatrix(const PermutationBase<OtherDerived>& other) : m_indices(other.indices()) {}
|
|
306
|
+
|
|
307
|
+
/** Generic constructor from expression of the indices. The indices
|
|
308
|
+
* array has the meaning that the permutations sends each integer i to indices[i].
|
|
309
|
+
*
|
|
310
|
+
* \warning It is your responsibility to check that the indices array that you passes actually
|
|
311
|
+
* describes a permutation, i.e., each value between 0 and n-1 occurs exactly once, where n is the
|
|
312
|
+
* array's size.
|
|
313
|
+
*/
|
|
314
|
+
template <typename Other>
|
|
315
|
+
explicit inline PermutationMatrix(const MatrixBase<Other>& indices) : m_indices(indices) {}
|
|
316
|
+
|
|
317
|
+
/** Convert the Transpositions \a tr to a permutation matrix */
|
|
318
|
+
template <typename Other>
|
|
319
|
+
explicit PermutationMatrix(const TranspositionsBase<Other>& tr) : m_indices(tr.size()) {
|
|
320
|
+
*this = tr;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** Copies the other permutation into *this */
|
|
324
|
+
template <typename Other>
|
|
325
|
+
PermutationMatrix& operator=(const PermutationBase<Other>& other) {
|
|
326
|
+
m_indices = other.indices();
|
|
327
|
+
return *this;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** Assignment from the Transpositions \a tr */
|
|
331
|
+
template <typename Other>
|
|
332
|
+
PermutationMatrix& operator=(const TranspositionsBase<Other>& tr) {
|
|
333
|
+
return Base::operator=(tr.derived());
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/** const version of indices(). */
|
|
337
|
+
const IndicesType& indices() const { return m_indices; }
|
|
338
|
+
/** \returns a reference to the stored array representing the permutation. */
|
|
339
|
+
IndicesType& indices() { return m_indices; }
|
|
340
|
+
|
|
341
|
+
/**** multiplication helpers to hopefully get RVO ****/
|
|
366
342
|
|
|
367
343
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
: m_indices(other.derived().nestedExpression().size())
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
{
|
|
381
|
-
Base::assignProduct(lhs,rhs);
|
|
382
|
-
}
|
|
344
|
+
template <typename Other>
|
|
345
|
+
PermutationMatrix(const InverseImpl<Other, PermutationStorage>& other)
|
|
346
|
+
: m_indices(other.derived().nestedExpression().size()) {
|
|
347
|
+
eigen_internal_assert(m_indices.size() <= NumTraits<StorageIndex>::highest());
|
|
348
|
+
StorageIndex end = StorageIndex(m_indices.size());
|
|
349
|
+
for (StorageIndex i = 0; i < end; ++i)
|
|
350
|
+
m_indices.coeffRef(other.derived().nestedExpression().indices().coeff(i)) = i;
|
|
351
|
+
}
|
|
352
|
+
template <typename Lhs, typename Rhs>
|
|
353
|
+
PermutationMatrix(internal::PermPermProduct_t, const Lhs& lhs, const Rhs& rhs) : m_indices(lhs.indices().size()) {
|
|
354
|
+
Base::assignProduct(lhs, rhs);
|
|
355
|
+
}
|
|
383
356
|
#endif
|
|
384
357
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
IndicesType m_indices;
|
|
358
|
+
protected:
|
|
359
|
+
IndicesType m_indices;
|
|
388
360
|
};
|
|
389
361
|
|
|
390
|
-
|
|
391
362
|
namespace internal {
|
|
392
|
-
template<int SizeAtCompileTime, int MaxSizeAtCompileTime, typename
|
|
393
|
-
struct traits<Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime,
|
|
394
|
-
|
|
395
|
-
{
|
|
363
|
+
template <int SizeAtCompileTime, int MaxSizeAtCompileTime, typename StorageIndex_, int PacketAccess_>
|
|
364
|
+
struct traits<Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_>, PacketAccess_> >
|
|
365
|
+
: traits<
|
|
366
|
+
Matrix<StorageIndex_, SizeAtCompileTime, SizeAtCompileTime, 0, MaxSizeAtCompileTime, MaxSizeAtCompileTime> > {
|
|
396
367
|
typedef PermutationStorage StorageKind;
|
|
397
|
-
typedef Map<const Matrix<
|
|
398
|
-
typedef
|
|
368
|
+
typedef Map<const Matrix<StorageIndex_, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1>, PacketAccess_> IndicesType;
|
|
369
|
+
typedef StorageIndex_ StorageIndex;
|
|
399
370
|
typedef void Scalar;
|
|
400
371
|
};
|
|
401
|
-
}
|
|
372
|
+
} // namespace internal
|
|
402
373
|
|
|
403
|
-
template<int SizeAtCompileTime, int MaxSizeAtCompileTime, typename
|
|
404
|
-
class Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime,
|
|
405
|
-
|
|
406
|
-
{
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
public:
|
|
410
|
-
|
|
411
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
412
|
-
typedef typename Traits::IndicesType IndicesType;
|
|
413
|
-
typedef typename IndicesType::Scalar StorageIndex;
|
|
414
|
-
#endif
|
|
415
|
-
|
|
416
|
-
inline Map(const StorageIndex* indicesPtr)
|
|
417
|
-
: m_indices(indicesPtr)
|
|
418
|
-
{}
|
|
419
|
-
|
|
420
|
-
inline Map(const StorageIndex* indicesPtr, Index size)
|
|
421
|
-
: m_indices(indicesPtr,size)
|
|
422
|
-
{}
|
|
423
|
-
|
|
424
|
-
/** Copies the other permutation into *this */
|
|
425
|
-
template<typename Other>
|
|
426
|
-
Map& operator=(const PermutationBase<Other>& other)
|
|
427
|
-
{ return Base::operator=(other.derived()); }
|
|
428
|
-
|
|
429
|
-
/** Assignment from the Transpositions \a tr */
|
|
430
|
-
template<typename Other>
|
|
431
|
-
Map& operator=(const TranspositionsBase<Other>& tr)
|
|
432
|
-
{ return Base::operator=(tr.derived()); }
|
|
433
|
-
|
|
434
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
435
|
-
/** This is a special case of the templated operator=. Its purpose is to
|
|
436
|
-
* prevent a default operator= from hiding the templated operator=.
|
|
437
|
-
*/
|
|
438
|
-
Map& operator=(const Map& other)
|
|
439
|
-
{
|
|
440
|
-
m_indices = other.m_indices;
|
|
441
|
-
return *this;
|
|
442
|
-
}
|
|
443
|
-
#endif
|
|
374
|
+
template <int SizeAtCompileTime, int MaxSizeAtCompileTime, typename StorageIndex_, int PacketAccess_>
|
|
375
|
+
class Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_>, PacketAccess_>
|
|
376
|
+
: public PermutationBase<
|
|
377
|
+
Map<PermutationMatrix<SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_>, PacketAccess_> > {
|
|
378
|
+
typedef PermutationBase<Map> Base;
|
|
379
|
+
typedef internal::traits<Map> Traits;
|
|
444
380
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
381
|
+
public:
|
|
382
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
383
|
+
typedef typename Traits::IndicesType IndicesType;
|
|
384
|
+
typedef typename IndicesType::Scalar StorageIndex;
|
|
385
|
+
#endif
|
|
449
386
|
|
|
450
|
-
|
|
387
|
+
inline Map(const StorageIndex* indicesPtr) : m_indices(indicesPtr) {}
|
|
451
388
|
|
|
452
|
-
|
|
389
|
+
inline Map(const StorageIndex* indicesPtr, Index size) : m_indices(indicesPtr, size) {}
|
|
390
|
+
|
|
391
|
+
/** Copies the other permutation into *this */
|
|
392
|
+
template <typename Other>
|
|
393
|
+
Map& operator=(const PermutationBase<Other>& other) {
|
|
394
|
+
return Base::operator=(other.derived());
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/** Assignment from the Transpositions \a tr */
|
|
398
|
+
template <typename Other>
|
|
399
|
+
Map& operator=(const TranspositionsBase<Other>& tr) {
|
|
400
|
+
return Base::operator=(tr.derived());
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
404
|
+
/** This is a special case of the templated operator=. Its purpose is to
|
|
405
|
+
* prevent a default operator= from hiding the templated operator=.
|
|
406
|
+
*/
|
|
407
|
+
Map& operator=(const Map& other) {
|
|
408
|
+
m_indices = other.m_indices;
|
|
409
|
+
return *this;
|
|
410
|
+
}
|
|
411
|
+
#endif
|
|
412
|
+
|
|
413
|
+
/** const version of indices(). */
|
|
414
|
+
const IndicesType& indices() const { return m_indices; }
|
|
415
|
+
/** \returns a reference to the stored array representing the permutation. */
|
|
416
|
+
IndicesType& indices() { return m_indices; }
|
|
417
|
+
|
|
418
|
+
protected:
|
|
419
|
+
IndicesType m_indices;
|
|
453
420
|
};
|
|
454
421
|
|
|
455
|
-
template<typename
|
|
422
|
+
template <typename IndicesType_>
|
|
423
|
+
class TranspositionsWrapper;
|
|
456
424
|
namespace internal {
|
|
457
|
-
template<typename
|
|
458
|
-
struct traits<PermutationWrapper<
|
|
459
|
-
{
|
|
425
|
+
template <typename IndicesType_>
|
|
426
|
+
struct traits<PermutationWrapper<IndicesType_> > {
|
|
460
427
|
typedef PermutationStorage StorageKind;
|
|
461
428
|
typedef void Scalar;
|
|
462
|
-
typedef typename
|
|
463
|
-
typedef
|
|
429
|
+
typedef typename IndicesType_::Scalar StorageIndex;
|
|
430
|
+
typedef IndicesType_ IndicesType;
|
|
464
431
|
enum {
|
|
465
|
-
RowsAtCompileTime =
|
|
466
|
-
ColsAtCompileTime =
|
|
432
|
+
RowsAtCompileTime = IndicesType_::SizeAtCompileTime,
|
|
433
|
+
ColsAtCompileTime = IndicesType_::SizeAtCompileTime,
|
|
467
434
|
MaxRowsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
|
|
468
435
|
MaxColsAtCompileTime = IndicesType::MaxSizeAtCompileTime,
|
|
469
436
|
Flags = 0
|
|
470
437
|
};
|
|
471
438
|
};
|
|
472
|
-
}
|
|
439
|
+
} // namespace internal
|
|
473
440
|
|
|
474
441
|
/** \class PermutationWrapper
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
template<typename
|
|
486
|
-
class PermutationWrapper : public PermutationBase<PermutationWrapper<
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
inline PermutationWrapper(const IndicesType& indices)
|
|
497
|
-
: m_indices(indices)
|
|
498
|
-
{}
|
|
499
|
-
|
|
500
|
-
/** const version of indices(). */
|
|
501
|
-
const typename internal::remove_all<typename IndicesType::Nested>::type&
|
|
502
|
-
indices() const { return m_indices; }
|
|
503
|
-
|
|
504
|
-
protected:
|
|
505
|
-
|
|
506
|
-
typename IndicesType::Nested m_indices;
|
|
507
|
-
};
|
|
442
|
+
* \ingroup Core_Module
|
|
443
|
+
*
|
|
444
|
+
* \brief Class to view a vector of integers as a permutation matrix
|
|
445
|
+
*
|
|
446
|
+
* \tparam IndicesType_ the type of the vector of integer (can be any compatible expression)
|
|
447
|
+
*
|
|
448
|
+
* This class allows to view any vector expression of integers as a permutation matrix.
|
|
449
|
+
*
|
|
450
|
+
* \sa class PermutationBase, class PermutationMatrix
|
|
451
|
+
*/
|
|
452
|
+
template <typename IndicesType_>
|
|
453
|
+
class PermutationWrapper : public PermutationBase<PermutationWrapper<IndicesType_> > {
|
|
454
|
+
typedef PermutationBase<PermutationWrapper> Base;
|
|
455
|
+
typedef internal::traits<PermutationWrapper> Traits;
|
|
456
|
+
|
|
457
|
+
public:
|
|
458
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
459
|
+
typedef typename Traits::IndicesType IndicesType;
|
|
460
|
+
#endif
|
|
461
|
+
|
|
462
|
+
inline PermutationWrapper(const IndicesType& indices) : m_indices(indices) {}
|
|
508
463
|
|
|
464
|
+
/** const version of indices(). */
|
|
465
|
+
const internal::remove_all_t<typename IndicesType::Nested>& indices() const { return m_indices; }
|
|
466
|
+
|
|
467
|
+
protected:
|
|
468
|
+
typename IndicesType::Nested m_indices;
|
|
469
|
+
};
|
|
509
470
|
|
|
510
471
|
/** \returns the matrix with the permutation applied to the columns.
|
|
511
|
-
|
|
512
|
-
template<typename MatrixDerived, typename PermutationDerived>
|
|
513
|
-
EIGEN_DEVICE_FUNC
|
|
514
|
-
const
|
|
515
|
-
|
|
516
|
-
const PermutationBase<PermutationDerived>& permutation)
|
|
517
|
-
{
|
|
518
|
-
return Product<MatrixDerived, PermutationDerived, AliasFreeProduct>
|
|
519
|
-
(matrix.derived(), permutation.derived());
|
|
472
|
+
*/
|
|
473
|
+
template <typename MatrixDerived, typename PermutationDerived>
|
|
474
|
+
EIGEN_DEVICE_FUNC const Product<MatrixDerived, PermutationDerived, DefaultProduct> operator*(
|
|
475
|
+
const MatrixBase<MatrixDerived>& matrix, const PermutationBase<PermutationDerived>& permutation) {
|
|
476
|
+
return Product<MatrixDerived, PermutationDerived, DefaultProduct>(matrix.derived(), permutation.derived());
|
|
520
477
|
}
|
|
521
478
|
|
|
522
479
|
/** \returns the matrix with the permutation applied to the rows.
|
|
523
|
-
|
|
524
|
-
template<typename PermutationDerived, typename MatrixDerived>
|
|
525
|
-
EIGEN_DEVICE_FUNC
|
|
526
|
-
const
|
|
527
|
-
|
|
528
|
-
const MatrixBase<MatrixDerived>& matrix)
|
|
529
|
-
{
|
|
530
|
-
return Product<PermutationDerived, MatrixDerived, AliasFreeProduct>
|
|
531
|
-
(permutation.derived(), matrix.derived());
|
|
480
|
+
*/
|
|
481
|
+
template <typename PermutationDerived, typename MatrixDerived>
|
|
482
|
+
EIGEN_DEVICE_FUNC const Product<PermutationDerived, MatrixDerived, DefaultProduct> operator*(
|
|
483
|
+
const PermutationBase<PermutationDerived>& permutation, const MatrixBase<MatrixDerived>& matrix) {
|
|
484
|
+
return Product<PermutationDerived, MatrixDerived, DefaultProduct>(permutation.derived(), matrix.derived());
|
|
532
485
|
}
|
|
533
486
|
|
|
487
|
+
template <typename PermutationType>
|
|
488
|
+
class InverseImpl<PermutationType, PermutationStorage> : public EigenBase<Inverse<PermutationType> > {
|
|
489
|
+
typedef typename PermutationType::PlainPermutationType PlainPermutationType;
|
|
490
|
+
typedef internal::traits<PermutationType> PermTraits;
|
|
534
491
|
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
: public EigenBase<Inverse<PermutationType> >
|
|
538
|
-
{
|
|
539
|
-
typedef typename PermutationType::PlainPermutationType PlainPermutationType;
|
|
540
|
-
typedef internal::traits<PermutationType> PermTraits;
|
|
541
|
-
protected:
|
|
542
|
-
InverseImpl() {}
|
|
543
|
-
public:
|
|
544
|
-
typedef Inverse<PermutationType> InverseType;
|
|
545
|
-
using EigenBase<Inverse<PermutationType> >::derived;
|
|
546
|
-
|
|
547
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
548
|
-
typedef typename PermutationType::DenseMatrixType DenseMatrixType;
|
|
549
|
-
enum {
|
|
550
|
-
RowsAtCompileTime = PermTraits::RowsAtCompileTime,
|
|
551
|
-
ColsAtCompileTime = PermTraits::ColsAtCompileTime,
|
|
552
|
-
MaxRowsAtCompileTime = PermTraits::MaxRowsAtCompileTime,
|
|
553
|
-
MaxColsAtCompileTime = PermTraits::MaxColsAtCompileTime
|
|
554
|
-
};
|
|
555
|
-
#endif
|
|
556
|
-
|
|
557
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
558
|
-
template<typename DenseDerived>
|
|
559
|
-
void evalTo(MatrixBase<DenseDerived>& other) const
|
|
560
|
-
{
|
|
561
|
-
other.setZero();
|
|
562
|
-
for (Index i=0; i<derived().rows();++i)
|
|
563
|
-
other.coeffRef(i, derived().nestedExpression().indices().coeff(i)) = typename DenseDerived::Scalar(1);
|
|
564
|
-
}
|
|
565
|
-
#endif
|
|
492
|
+
protected:
|
|
493
|
+
InverseImpl() {}
|
|
566
494
|
|
|
567
|
-
|
|
568
|
-
|
|
495
|
+
public:
|
|
496
|
+
typedef Inverse<PermutationType> InverseType;
|
|
497
|
+
using EigenBase<Inverse<PermutationType> >::derived;
|
|
569
498
|
|
|
570
|
-
|
|
499
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
500
|
+
typedef typename PermutationType::DenseMatrixType DenseMatrixType;
|
|
501
|
+
enum {
|
|
502
|
+
RowsAtCompileTime = PermTraits::RowsAtCompileTime,
|
|
503
|
+
ColsAtCompileTime = PermTraits::ColsAtCompileTime,
|
|
504
|
+
MaxRowsAtCompileTime = PermTraits::MaxRowsAtCompileTime,
|
|
505
|
+
MaxColsAtCompileTime = PermTraits::MaxColsAtCompileTime
|
|
506
|
+
};
|
|
507
|
+
#endif
|
|
571
508
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
509
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
510
|
+
template <typename DenseDerived>
|
|
511
|
+
void evalTo(MatrixBase<DenseDerived>& other) const {
|
|
512
|
+
other.setZero();
|
|
513
|
+
for (Index i = 0; i < derived().rows(); ++i)
|
|
514
|
+
other.coeffRef(i, derived().nestedExpression().indices().coeff(i)) = typename DenseDerived::Scalar(1);
|
|
515
|
+
}
|
|
516
|
+
#endif
|
|
580
517
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
518
|
+
/** \return the equivalent permutation matrix */
|
|
519
|
+
PlainPermutationType eval() const { return derived(); }
|
|
520
|
+
|
|
521
|
+
DenseMatrixType toDenseMatrix() const { return derived(); }
|
|
522
|
+
|
|
523
|
+
/** \returns the matrix with the inverse permutation applied to the columns.
|
|
524
|
+
*/
|
|
525
|
+
template <typename OtherDerived>
|
|
526
|
+
friend const Product<OtherDerived, InverseType, DefaultProduct> operator*(const MatrixBase<OtherDerived>& matrix,
|
|
527
|
+
const InverseType& trPerm) {
|
|
528
|
+
return Product<OtherDerived, InverseType, DefaultProduct>(matrix.derived(), trPerm.derived());
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** \returns the matrix with the inverse permutation applied to the rows.
|
|
532
|
+
*/
|
|
533
|
+
template <typename OtherDerived>
|
|
534
|
+
const Product<InverseType, OtherDerived, DefaultProduct> operator*(const MatrixBase<OtherDerived>& matrix) const {
|
|
535
|
+
return Product<InverseType, OtherDerived, DefaultProduct>(derived(), matrix.derived());
|
|
536
|
+
}
|
|
589
537
|
};
|
|
590
538
|
|
|
591
|
-
template<typename Derived>
|
|
592
|
-
const PermutationWrapper<const Derived> MatrixBase<Derived>::asPermutation() const
|
|
593
|
-
{
|
|
539
|
+
template <typename Derived>
|
|
540
|
+
const PermutationWrapper<const Derived> MatrixBase<Derived>::asPermutation() const {
|
|
594
541
|
return derived();
|
|
595
542
|
}
|
|
596
543
|
|
|
597
544
|
namespace internal {
|
|
598
545
|
|
|
599
|
-
template<>
|
|
546
|
+
template <>
|
|
547
|
+
struct AssignmentKind<DenseShape, PermutationShape> {
|
|
548
|
+
typedef EigenBase2EigenBase Kind;
|
|
549
|
+
};
|
|
600
550
|
|
|
601
|
-
}
|
|
551
|
+
} // end namespace internal
|
|
602
552
|
|
|
603
|
-
}
|
|
553
|
+
} // end namespace Eigen
|
|
604
554
|
|
|
605
|
-
#endif
|
|
555
|
+
#endif // EIGEN_PERMUTATIONMATRIX_H
|