@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
|
@@ -16,7 +16,74 @@
|
|
|
16
16
|
#ifndef EIGEN_SVDBASE_H
|
|
17
17
|
#define EIGEN_SVDBASE_H
|
|
18
18
|
|
|
19
|
+
// IWYU pragma: private
|
|
20
|
+
#include "./InternalHeaderCheck.h"
|
|
21
|
+
|
|
19
22
|
namespace Eigen {
|
|
23
|
+
|
|
24
|
+
namespace internal {
|
|
25
|
+
|
|
26
|
+
enum OptionsMasks {
|
|
27
|
+
QRPreconditionerBits = NoQRPreconditioner | HouseholderQRPreconditioner | ColPivHouseholderQRPreconditioner |
|
|
28
|
+
FullPivHouseholderQRPreconditioner,
|
|
29
|
+
ComputationOptionsBits = ComputeThinU | ComputeFullU | ComputeThinV | ComputeFullV
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
constexpr int get_qr_preconditioner(int options) { return options & QRPreconditionerBits; }
|
|
33
|
+
|
|
34
|
+
constexpr int get_computation_options(int options) { return options & ComputationOptionsBits; }
|
|
35
|
+
|
|
36
|
+
constexpr bool should_svd_compute_thin_u(int options) { return (options & ComputeThinU) != 0; }
|
|
37
|
+
constexpr bool should_svd_compute_full_u(int options) { return (options & ComputeFullU) != 0; }
|
|
38
|
+
constexpr bool should_svd_compute_thin_v(int options) { return (options & ComputeThinV) != 0; }
|
|
39
|
+
constexpr bool should_svd_compute_full_v(int options) { return (options & ComputeFullV) != 0; }
|
|
40
|
+
|
|
41
|
+
template <typename MatrixType, int Options>
|
|
42
|
+
void check_svd_options_assertions(unsigned int computationOptions, Index rows, Index cols) {
|
|
43
|
+
EIGEN_STATIC_ASSERT((Options & ComputationOptionsBits) == 0,
|
|
44
|
+
"SVDBase: Cannot request U or V using both static and runtime options, even if they match. "
|
|
45
|
+
"Requesting unitaries at runtime is DEPRECATED: "
|
|
46
|
+
"Prefer requesting unitaries statically, using the Options template parameter.");
|
|
47
|
+
eigen_assert(
|
|
48
|
+
!(should_svd_compute_thin_u(computationOptions) && cols < rows && MatrixType::RowsAtCompileTime != Dynamic) &&
|
|
49
|
+
!(should_svd_compute_thin_v(computationOptions) && rows < cols && MatrixType::ColsAtCompileTime != Dynamic) &&
|
|
50
|
+
"SVDBase: If thin U is requested at runtime, your matrix must have more rows than columns or a dynamic number of "
|
|
51
|
+
"rows."
|
|
52
|
+
"Similarly, if thin V is requested at runtime, you matrix must have more columns than rows or a dynamic number "
|
|
53
|
+
"of columns.");
|
|
54
|
+
(void)computationOptions;
|
|
55
|
+
(void)rows;
|
|
56
|
+
(void)cols;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
template <typename Derived>
|
|
60
|
+
struct traits<SVDBase<Derived> > : traits<Derived> {
|
|
61
|
+
typedef MatrixXpr XprKind;
|
|
62
|
+
typedef SolverStorage StorageKind;
|
|
63
|
+
typedef int StorageIndex;
|
|
64
|
+
enum { Flags = 0 };
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
template <typename MatrixType, int Options_>
|
|
68
|
+
struct svd_traits : traits<MatrixType> {
|
|
69
|
+
static constexpr int Options = Options_;
|
|
70
|
+
static constexpr bool ShouldComputeFullU = internal::should_svd_compute_full_u(Options);
|
|
71
|
+
static constexpr bool ShouldComputeThinU = internal::should_svd_compute_thin_u(Options);
|
|
72
|
+
static constexpr bool ShouldComputeFullV = internal::should_svd_compute_full_v(Options);
|
|
73
|
+
static constexpr bool ShouldComputeThinV = internal::should_svd_compute_thin_v(Options);
|
|
74
|
+
enum {
|
|
75
|
+
DiagSizeAtCompileTime =
|
|
76
|
+
internal::min_size_prefer_dynamic(MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime),
|
|
77
|
+
MaxDiagSizeAtCompileTime =
|
|
78
|
+
internal::min_size_prefer_dynamic(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime),
|
|
79
|
+
MatrixUColsAtCompileTime = ShouldComputeThinU ? DiagSizeAtCompileTime : MatrixType::RowsAtCompileTime,
|
|
80
|
+
MatrixVColsAtCompileTime = ShouldComputeThinV ? DiagSizeAtCompileTime : MatrixType::ColsAtCompileTime,
|
|
81
|
+
MatrixUMaxColsAtCompileTime = ShouldComputeThinU ? MaxDiagSizeAtCompileTime : MatrixType::MaxRowsAtCompileTime,
|
|
82
|
+
MatrixVMaxColsAtCompileTime = ShouldComputeThinV ? MaxDiagSizeAtCompileTime : MatrixType::MaxColsAtCompileTime
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
} // namespace internal
|
|
86
|
+
|
|
20
87
|
/** \ingroup SVD_Module
|
|
21
88
|
*
|
|
22
89
|
*
|
|
@@ -28,61 +95,83 @@ namespace Eigen {
|
|
|
28
95
|
*
|
|
29
96
|
* SVD decomposition consists in decomposing any n-by-p matrix \a A as a product
|
|
30
97
|
* \f[ A = U S V^* \f]
|
|
31
|
-
* where \a U is a n-by-n unitary, \a V is a p-by-p unitary, and \a S is a n-by-p real positive matrix which is zero
|
|
32
|
-
* the diagonal entries of S are known as the \em singular \em values of \a A and the
|
|
33
|
-
* and right \em singular \em vectors of \a A respectively.
|
|
98
|
+
* where \a U is a n-by-n unitary, \a V is a p-by-p unitary, and \a S is a n-by-p real positive matrix which is zero
|
|
99
|
+
* outside of its main diagonal; the diagonal entries of S are known as the \em singular \em values of \a A and the
|
|
100
|
+
* columns of \a U and \a V are known as the left and right \em singular \em vectors of \a A respectively.
|
|
34
101
|
*
|
|
35
102
|
* Singular values are always sorted in decreasing order.
|
|
36
103
|
*
|
|
37
|
-
*
|
|
38
|
-
* You can ask for only \em thin \a U or \a V to be computed, meaning the following. In case of a rectangular n-by-p
|
|
39
|
-
* smaller value among \a n and \a p, there are only \a m singular vectors; the remaining
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
104
|
+
*
|
|
105
|
+
* You can ask for only \em thin \a U or \a V to be computed, meaning the following. In case of a rectangular n-by-p
|
|
106
|
+
* matrix, letting \a m be the smaller value among \a n and \a p, there are only \a m singular vectors; the remaining
|
|
107
|
+
* columns of \a U and \a V do not correspond to actual singular vectors. Asking for \em thin \a U or \a V means asking
|
|
108
|
+
* for only their \a m first columns to be formed. So \a U is then a n-by-m matrix, and \a V is then a p-by-m matrix.
|
|
109
|
+
* Notice that thin \a U and \a V are all you need for (least squares) solving.
|
|
110
|
+
*
|
|
111
|
+
* The status of the computation can be retrieved using the \a info() method. Unless \a info() returns \a Success, the
|
|
112
|
+
* results should be not considered well defined.
|
|
113
|
+
*
|
|
114
|
+
* If the input matrix has inf or nan coefficients, the result of the computation is undefined, and \a info() will
|
|
115
|
+
* return \a InvalidInput, but the computation is guaranteed to terminate in finite (and reasonable) time. \sa class
|
|
116
|
+
* BDCSVD, class JacobiSVD
|
|
46
117
|
*/
|
|
47
|
-
template<typename Derived>
|
|
48
|
-
class SVDBase
|
|
49
|
-
|
|
118
|
+
template <typename Derived>
|
|
119
|
+
class SVDBase : public SolverBase<SVDBase<Derived> > {
|
|
120
|
+
public:
|
|
121
|
+
template <typename Derived_>
|
|
122
|
+
friend struct internal::solve_assertion;
|
|
50
123
|
|
|
51
|
-
public:
|
|
52
124
|
typedef typename internal::traits<Derived>::MatrixType MatrixType;
|
|
53
125
|
typedef typename MatrixType::Scalar Scalar;
|
|
54
126
|
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
|
55
|
-
typedef typename
|
|
56
|
-
|
|
127
|
+
typedef typename Eigen::internal::traits<SVDBase>::StorageIndex StorageIndex;
|
|
128
|
+
|
|
129
|
+
static constexpr bool ShouldComputeFullU = internal::traits<Derived>::ShouldComputeFullU;
|
|
130
|
+
static constexpr bool ShouldComputeThinU = internal::traits<Derived>::ShouldComputeThinU;
|
|
131
|
+
static constexpr bool ShouldComputeFullV = internal::traits<Derived>::ShouldComputeFullV;
|
|
132
|
+
static constexpr bool ShouldComputeThinV = internal::traits<Derived>::ShouldComputeThinV;
|
|
133
|
+
|
|
57
134
|
enum {
|
|
58
135
|
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
59
136
|
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
60
|
-
DiagSizeAtCompileTime =
|
|
137
|
+
DiagSizeAtCompileTime = internal::min_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
|
|
61
138
|
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
|
62
139
|
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
|
63
|
-
MaxDiagSizeAtCompileTime =
|
|
64
|
-
MatrixOptions = MatrixType
|
|
140
|
+
MaxDiagSizeAtCompileTime = internal::min_size_prefer_fixed(MaxRowsAtCompileTime, MaxColsAtCompileTime),
|
|
141
|
+
MatrixOptions = internal::traits<MatrixType>::Options,
|
|
142
|
+
MatrixUColsAtCompileTime = internal::traits<Derived>::MatrixUColsAtCompileTime,
|
|
143
|
+
MatrixVColsAtCompileTime = internal::traits<Derived>::MatrixVColsAtCompileTime,
|
|
144
|
+
MatrixUMaxColsAtCompileTime = internal::traits<Derived>::MatrixUMaxColsAtCompileTime,
|
|
145
|
+
MatrixVMaxColsAtCompileTime = internal::traits<Derived>::MatrixVMaxColsAtCompileTime
|
|
65
146
|
};
|
|
66
147
|
|
|
67
|
-
|
|
68
|
-
|
|
148
|
+
EIGEN_STATIC_ASSERT(!(ShouldComputeFullU && ShouldComputeThinU), "SVDBase: Cannot request both full and thin U")
|
|
149
|
+
EIGEN_STATIC_ASSERT(!(ShouldComputeFullV && ShouldComputeThinV), "SVDBase: Cannot request both full and thin V")
|
|
150
|
+
|
|
151
|
+
typedef
|
|
152
|
+
typename internal::make_proper_matrix_type<Scalar, RowsAtCompileTime, MatrixUColsAtCompileTime, MatrixOptions,
|
|
153
|
+
MaxRowsAtCompileTime, MatrixUMaxColsAtCompileTime>::type MatrixUType;
|
|
154
|
+
typedef
|
|
155
|
+
typename internal::make_proper_matrix_type<Scalar, ColsAtCompileTime, MatrixVColsAtCompileTime, MatrixOptions,
|
|
156
|
+
MaxColsAtCompileTime, MatrixVMaxColsAtCompileTime>::type MatrixVType;
|
|
157
|
+
|
|
69
158
|
typedef typename internal::plain_diag_type<MatrixType, RealScalar>::type SingularValuesType;
|
|
70
|
-
|
|
159
|
+
|
|
71
160
|
Derived& derived() { return *static_cast<Derived*>(this); }
|
|
72
161
|
const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
|
73
162
|
|
|
74
163
|
/** \returns the \a U matrix.
|
|
75
164
|
*
|
|
76
165
|
* For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p,
|
|
77
|
-
* the U matrix is n-by-n if you asked for \link Eigen::ComputeFullU ComputeFullU \endlink, and is n-by-m if you asked
|
|
166
|
+
* the U matrix is n-by-n if you asked for \link Eigen::ComputeFullU ComputeFullU \endlink, and is n-by-m if you asked
|
|
167
|
+
* for \link Eigen::ComputeThinU ComputeThinU \endlink.
|
|
78
168
|
*
|
|
79
169
|
* The \a m first columns of \a U are the left singular vectors of the matrix being decomposed.
|
|
80
170
|
*
|
|
81
171
|
* This method asserts that you asked for \a U to be computed.
|
|
82
172
|
*/
|
|
83
|
-
const MatrixUType& matrixU() const
|
|
84
|
-
|
|
85
|
-
eigen_assert(m_isInitialized && "SVD is not initialized.");
|
|
173
|
+
const MatrixUType& matrixU() const {
|
|
174
|
+
_check_compute_assertions();
|
|
86
175
|
eigen_assert(computeU() && "This SVD decomposition didn't compute U. Did you ask for it?");
|
|
87
176
|
return m_matrixU;
|
|
88
177
|
}
|
|
@@ -90,15 +179,15 @@ public:
|
|
|
90
179
|
/** \returns the \a V matrix.
|
|
91
180
|
*
|
|
92
181
|
* For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p,
|
|
93
|
-
* the V matrix is p-by-p if you asked for \link Eigen::ComputeFullV ComputeFullV \endlink, and is p-by-m if you asked
|
|
182
|
+
* the V matrix is p-by-p if you asked for \link Eigen::ComputeFullV ComputeFullV \endlink, and is p-by-m if you asked
|
|
183
|
+
* for \link Eigen::ComputeThinV ComputeThinV \endlink.
|
|
94
184
|
*
|
|
95
185
|
* The \a m first columns of \a V are the right singular vectors of the matrix being decomposed.
|
|
96
186
|
*
|
|
97
187
|
* This method asserts that you asked for \a V to be computed.
|
|
98
188
|
*/
|
|
99
|
-
const MatrixVType& matrixV() const
|
|
100
|
-
|
|
101
|
-
eigen_assert(m_isInitialized && "SVD is not initialized.");
|
|
189
|
+
const MatrixVType& matrixV() const {
|
|
190
|
+
_check_compute_assertions();
|
|
102
191
|
eigen_assert(computeV() && "This SVD decomposition didn't compute V. Did you ask for it?");
|
|
103
192
|
return m_matrixV;
|
|
104
193
|
}
|
|
@@ -108,82 +197,76 @@ public:
|
|
|
108
197
|
* For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p, the
|
|
109
198
|
* returned vector has size \a m. Singular values are always sorted in decreasing order.
|
|
110
199
|
*/
|
|
111
|
-
const SingularValuesType& singularValues() const
|
|
112
|
-
|
|
113
|
-
eigen_assert(m_isInitialized && "SVD is not initialized.");
|
|
200
|
+
const SingularValuesType& singularValues() const {
|
|
201
|
+
_check_compute_assertions();
|
|
114
202
|
return m_singularValues;
|
|
115
203
|
}
|
|
116
204
|
|
|
117
205
|
/** \returns the number of singular values that are not exactly 0 */
|
|
118
|
-
Index nonzeroSingularValues() const
|
|
119
|
-
|
|
120
|
-
eigen_assert(m_isInitialized && "SVD is not initialized.");
|
|
206
|
+
Index nonzeroSingularValues() const {
|
|
207
|
+
_check_compute_assertions();
|
|
121
208
|
return m_nonzeroSingularValues;
|
|
122
209
|
}
|
|
123
|
-
|
|
210
|
+
|
|
124
211
|
/** \returns the rank of the matrix of which \c *this is the SVD.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
inline Index rank() const
|
|
131
|
-
{
|
|
212
|
+
*
|
|
213
|
+
* \note This method has to determine which singular values should be considered nonzero.
|
|
214
|
+
* For that, it uses the threshold value that you can control by calling
|
|
215
|
+
* setThreshold(const RealScalar&).
|
|
216
|
+
*/
|
|
217
|
+
inline Index rank() const {
|
|
132
218
|
using std::abs;
|
|
133
|
-
|
|
134
|
-
if(m_singularValues.size()==0) return 0;
|
|
135
|
-
RealScalar premultiplied_threshold =
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
219
|
+
_check_compute_assertions();
|
|
220
|
+
if (m_singularValues.size() == 0) return 0;
|
|
221
|
+
RealScalar premultiplied_threshold =
|
|
222
|
+
numext::maxi<RealScalar>(m_singularValues.coeff(0) * threshold(), (std::numeric_limits<RealScalar>::min)());
|
|
223
|
+
Index i = m_nonzeroSingularValues - 1;
|
|
224
|
+
while (i >= 0 && m_singularValues.coeff(i) < premultiplied_threshold) --i;
|
|
225
|
+
return i + 1;
|
|
139
226
|
}
|
|
140
|
-
|
|
227
|
+
|
|
141
228
|
/** Allows to prescribe a threshold to be used by certain methods, such as rank() and solve(),
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
Derived& setThreshold(const RealScalar& threshold)
|
|
156
|
-
{
|
|
229
|
+
* which need to determine when singular values are to be considered nonzero.
|
|
230
|
+
* This is not used for the SVD decomposition itself.
|
|
231
|
+
*
|
|
232
|
+
* When it needs to get the threshold value, Eigen calls threshold().
|
|
233
|
+
* The default is \c NumTraits<Scalar>::epsilon()
|
|
234
|
+
*
|
|
235
|
+
* \param threshold The new value to use as the threshold.
|
|
236
|
+
*
|
|
237
|
+
* A singular value will be considered nonzero if its value is strictly greater than
|
|
238
|
+
* \f$ \vert singular value \vert \leqslant threshold \times \vert max singular value \vert \f$.
|
|
239
|
+
*
|
|
240
|
+
* If you want to come back to the default behavior, call setThreshold(Default_t)
|
|
241
|
+
*/
|
|
242
|
+
Derived& setThreshold(const RealScalar& threshold) {
|
|
157
243
|
m_usePrescribedThreshold = true;
|
|
158
244
|
m_prescribedThreshold = threshold;
|
|
159
245
|
return derived();
|
|
160
246
|
}
|
|
161
247
|
|
|
162
248
|
/** Allows to come back to the default behavior, letting Eigen use its default formula for
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
Derived& setThreshold(Default_t)
|
|
171
|
-
{
|
|
249
|
+
* determining the threshold.
|
|
250
|
+
*
|
|
251
|
+
* You should pass the special object Eigen::Default as parameter here.
|
|
252
|
+
* \code svd.setThreshold(Eigen::Default); \endcode
|
|
253
|
+
*
|
|
254
|
+
* See the documentation of setThreshold(const RealScalar&).
|
|
255
|
+
*/
|
|
256
|
+
Derived& setThreshold(Default_t) {
|
|
172
257
|
m_usePrescribedThreshold = false;
|
|
173
258
|
return derived();
|
|
174
259
|
}
|
|
175
260
|
|
|
176
261
|
/** Returns the threshold that will be used by certain methods such as rank().
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
RealScalar threshold() const
|
|
181
|
-
{
|
|
262
|
+
*
|
|
263
|
+
* See the documentation of setThreshold(const RealScalar&).
|
|
264
|
+
*/
|
|
265
|
+
RealScalar threshold() const {
|
|
182
266
|
eigen_assert(m_isInitialized || m_usePrescribedThreshold);
|
|
183
267
|
// this temporary is needed to workaround a MSVC issue
|
|
184
|
-
Index diagSize = (std::max<Index>)(1,m_diagSize);
|
|
185
|
-
return m_usePrescribedThreshold ? m_prescribedThreshold
|
|
186
|
-
: RealScalar(diagSize)*NumTraits<Scalar>::epsilon();
|
|
268
|
+
Index diagSize = (std::max<Index>)(1, m_diagSize);
|
|
269
|
+
return m_usePrescribedThreshold ? m_prescribedThreshold : RealScalar(diagSize) * NumTraits<Scalar>::epsilon();
|
|
187
270
|
}
|
|
188
271
|
|
|
189
272
|
/** \returns true if \a U (full or thin) is asked for in this SVD decomposition */
|
|
@@ -191,51 +274,72 @@ public:
|
|
|
191
274
|
/** \returns true if \a V (full or thin) is asked for in this SVD decomposition */
|
|
192
275
|
inline bool computeV() const { return m_computeFullV || m_computeThinV; }
|
|
193
276
|
|
|
194
|
-
inline Index rows() const { return m_rows; }
|
|
195
|
-
inline Index cols() const { return m_cols; }
|
|
196
|
-
|
|
277
|
+
inline Index rows() const { return m_rows.value(); }
|
|
278
|
+
inline Index cols() const { return m_cols.value(); }
|
|
279
|
+
inline Index diagSize() const { return m_diagSize.value(); }
|
|
280
|
+
|
|
281
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
197
282
|
/** \returns a (least squares) solution of \f$ A x = b \f$ using the current SVD decomposition of A.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
solve(const MatrixBase<Rhs>& b) const
|
|
209
|
-
|
|
283
|
+
*
|
|
284
|
+
* \param b the right-hand-side of the equation to solve.
|
|
285
|
+
*
|
|
286
|
+
* \note Solving requires both U and V to be computed. Thin U and V are enough, there is no need for full U or V.
|
|
287
|
+
*
|
|
288
|
+
* \note SVD solving is implicitly least-squares. Thus, this method serves both purposes of exact solving and
|
|
289
|
+
* least-squares solving. In other words, the returned solution is guaranteed to minimize the Euclidean norm \f$ \Vert
|
|
290
|
+
* A x - b \Vert \f$.
|
|
291
|
+
*/
|
|
292
|
+
template <typename Rhs>
|
|
293
|
+
inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const;
|
|
294
|
+
#endif
|
|
295
|
+
|
|
296
|
+
/** \brief Reports whether previous computation was successful.
|
|
297
|
+
*
|
|
298
|
+
* \returns \c Success if computation was successful.
|
|
299
|
+
*/
|
|
300
|
+
EIGEN_DEVICE_FUNC ComputationInfo info() const {
|
|
210
301
|
eigen_assert(m_isInitialized && "SVD is not initialized.");
|
|
211
|
-
|
|
212
|
-
return Solve<Derived, Rhs>(derived(), b.derived());
|
|
302
|
+
return m_info;
|
|
213
303
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
template<typename RhsType, typename DstType>
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
304
|
+
|
|
305
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
306
|
+
template <typename RhsType, typename DstType>
|
|
307
|
+
void _solve_impl(const RhsType& rhs, DstType& dst) const;
|
|
308
|
+
|
|
309
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
310
|
+
void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
|
|
311
|
+
#endif
|
|
312
|
+
|
|
313
|
+
protected:
|
|
314
|
+
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
|
|
315
|
+
|
|
316
|
+
void _check_compute_assertions() const { eigen_assert(m_isInitialized && "SVD is not initialized."); }
|
|
317
|
+
|
|
318
|
+
template <bool Transpose_, typename Rhs>
|
|
319
|
+
void _check_solve_assertion(const Rhs& b) const {
|
|
320
|
+
EIGEN_ONLY_USED_FOR_DEBUG(b);
|
|
321
|
+
_check_compute_assertions();
|
|
322
|
+
eigen_assert(computeU() && computeV() &&
|
|
323
|
+
"SVDBase::solve(): Both unitaries U and V are required to be computed (thin unitaries suffice).");
|
|
324
|
+
eigen_assert((Transpose_ ? cols() : rows()) == b.rows() &&
|
|
325
|
+
"SVDBase::solve(): invalid number of rows of the right hand side matrix b");
|
|
226
326
|
}
|
|
227
|
-
|
|
327
|
+
|
|
228
328
|
// return true if already allocated
|
|
229
|
-
bool allocate(Index rows, Index cols, unsigned int computationOptions)
|
|
329
|
+
bool allocate(Index rows, Index cols, unsigned int computationOptions);
|
|
230
330
|
|
|
231
331
|
MatrixUType m_matrixU;
|
|
232
332
|
MatrixVType m_matrixV;
|
|
233
333
|
SingularValuesType m_singularValues;
|
|
334
|
+
ComputationInfo m_info;
|
|
234
335
|
bool m_isInitialized, m_isAllocated, m_usePrescribedThreshold;
|
|
235
336
|
bool m_computeFullU, m_computeThinU;
|
|
236
337
|
bool m_computeFullV, m_computeThinV;
|
|
237
338
|
unsigned int m_computationOptions;
|
|
238
|
-
Index m_nonzeroSingularValues
|
|
339
|
+
Index m_nonzeroSingularValues;
|
|
340
|
+
internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows;
|
|
341
|
+
internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols;
|
|
342
|
+
internal::variable_if_dynamic<Index, DiagSizeAtCompileTime> m_diagSize;
|
|
239
343
|
RealScalar m_prescribedThreshold;
|
|
240
344
|
|
|
241
345
|
/** \brief Default Constructor.
|
|
@@ -243,73 +347,90 @@ protected:
|
|
|
243
347
|
* Default constructor of SVDBase
|
|
244
348
|
*/
|
|
245
349
|
SVDBase()
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
350
|
+
: m_matrixU(MatrixUType()),
|
|
351
|
+
m_matrixV(MatrixVType()),
|
|
352
|
+
m_singularValues(SingularValuesType()),
|
|
353
|
+
m_info(Success),
|
|
354
|
+
m_isInitialized(false),
|
|
355
|
+
m_isAllocated(false),
|
|
356
|
+
m_usePrescribedThreshold(false),
|
|
357
|
+
m_computeFullU(ShouldComputeFullU),
|
|
358
|
+
m_computeThinU(ShouldComputeThinU),
|
|
359
|
+
m_computeFullV(ShouldComputeFullV),
|
|
360
|
+
m_computeThinV(ShouldComputeThinV),
|
|
361
|
+
m_computationOptions(internal::traits<Derived>::Options),
|
|
362
|
+
m_nonzeroSingularValues(0),
|
|
363
|
+
m_rows(RowsAtCompileTime),
|
|
364
|
+
m_cols(ColsAtCompileTime),
|
|
365
|
+
m_diagSize(DiagSizeAtCompileTime),
|
|
366
|
+
m_prescribedThreshold(0) {}
|
|
256
367
|
};
|
|
257
368
|
|
|
258
369
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
259
|
-
template<typename Derived>
|
|
260
|
-
template<typename RhsType, typename DstType>
|
|
261
|
-
void SVDBase<Derived>::_solve_impl(const RhsType
|
|
262
|
-
{
|
|
263
|
-
eigen_assert(rhs.rows() == rows());
|
|
264
|
-
|
|
370
|
+
template <typename Derived>
|
|
371
|
+
template <typename RhsType, typename DstType>
|
|
372
|
+
void SVDBase<Derived>::_solve_impl(const RhsType& rhs, DstType& dst) const {
|
|
265
373
|
// A = U S V^*
|
|
266
374
|
// So A^{-1} = V S^{-1} U^*
|
|
267
375
|
|
|
268
|
-
Matrix<Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime,
|
|
376
|
+
Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime,
|
|
377
|
+
RhsType::MaxColsAtCompileTime>
|
|
378
|
+
tmp;
|
|
379
|
+
Index l_rank = rank();
|
|
380
|
+
tmp.noalias() = m_matrixU.leftCols(l_rank).adjoint() * rhs;
|
|
381
|
+
tmp = m_singularValues.head(l_rank).asDiagonal().inverse() * tmp;
|
|
382
|
+
dst.noalias() = m_matrixV.leftCols(l_rank) * tmp;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
template <typename Derived>
|
|
386
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
387
|
+
void SVDBase<Derived>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
|
|
388
|
+
// A = U S V^*
|
|
389
|
+
// So A^{-*} = U S^{-1} V^*
|
|
390
|
+
// And A^{-T} = U_conj S^{-1} V^T
|
|
391
|
+
Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime,
|
|
392
|
+
RhsType::MaxColsAtCompileTime>
|
|
393
|
+
tmp;
|
|
269
394
|
Index l_rank = rank();
|
|
270
|
-
|
|
395
|
+
|
|
396
|
+
tmp.noalias() = m_matrixV.leftCols(l_rank).transpose().template conjugateIf<Conjugate>() * rhs;
|
|
271
397
|
tmp = m_singularValues.head(l_rank).asDiagonal().inverse() * tmp;
|
|
272
|
-
dst =
|
|
398
|
+
dst = m_matrixU.template conjugateIf<!Conjugate>().leftCols(l_rank) * tmp;
|
|
273
399
|
}
|
|
274
400
|
#endif
|
|
275
401
|
|
|
276
|
-
template<typename
|
|
277
|
-
bool SVDBase<
|
|
278
|
-
{
|
|
402
|
+
template <typename Derived>
|
|
403
|
+
bool SVDBase<Derived>::allocate(Index rows, Index cols, unsigned int computationOptions) {
|
|
279
404
|
eigen_assert(rows >= 0 && cols >= 0);
|
|
280
405
|
|
|
281
|
-
if (m_isAllocated &&
|
|
282
|
-
rows == m_rows &&
|
|
283
|
-
cols == m_cols &&
|
|
284
|
-
computationOptions == m_computationOptions)
|
|
285
|
-
{
|
|
406
|
+
if (m_isAllocated && rows == m_rows.value() && cols == m_cols.value() && computationOptions == m_computationOptions) {
|
|
286
407
|
return true;
|
|
287
408
|
}
|
|
288
409
|
|
|
289
|
-
m_rows
|
|
290
|
-
m_cols
|
|
410
|
+
m_rows.setValue(rows);
|
|
411
|
+
m_cols.setValue(cols);
|
|
412
|
+
m_info = Success;
|
|
291
413
|
m_isInitialized = false;
|
|
292
414
|
m_isAllocated = true;
|
|
293
415
|
m_computationOptions = computationOptions;
|
|
294
|
-
m_computeFullU = (computationOptions
|
|
295
|
-
m_computeThinU = (computationOptions
|
|
296
|
-
m_computeFullV = (computationOptions
|
|
297
|
-
m_computeThinV = (computationOptions
|
|
416
|
+
m_computeFullU = ShouldComputeFullU || internal::should_svd_compute_full_u(computationOptions);
|
|
417
|
+
m_computeThinU = ShouldComputeThinU || internal::should_svd_compute_thin_u(computationOptions);
|
|
418
|
+
m_computeFullV = ShouldComputeFullV || internal::should_svd_compute_full_v(computationOptions);
|
|
419
|
+
m_computeThinV = ShouldComputeThinV || internal::should_svd_compute_thin_v(computationOptions);
|
|
420
|
+
|
|
298
421
|
eigen_assert(!(m_computeFullU && m_computeThinU) && "SVDBase: you can't ask for both full and thin U");
|
|
299
422
|
eigen_assert(!(m_computeFullV && m_computeThinV) && "SVDBase: you can't ask for both full and thin V");
|
|
300
|
-
eigen_assert(EIGEN_IMPLIES(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
|
|
301
|
-
"SVDBase: thin U and V are only available when your matrix has a dynamic number of columns.");
|
|
302
423
|
|
|
303
|
-
m_diagSize
|
|
304
|
-
m_singularValues.resize(m_diagSize);
|
|
305
|
-
if(RowsAtCompileTime==Dynamic)
|
|
306
|
-
m_matrixU.resize(m_rows, m_computeFullU ? m_rows : m_computeThinU ? m_diagSize : 0);
|
|
307
|
-
if(ColsAtCompileTime==Dynamic)
|
|
308
|
-
m_matrixV.resize(m_cols, m_computeFullV ? m_cols : m_computeThinV ? m_diagSize : 0);
|
|
424
|
+
m_diagSize.setValue(numext::mini(m_rows.value(), m_cols.value()));
|
|
425
|
+
m_singularValues.resize(m_diagSize.value());
|
|
426
|
+
if (RowsAtCompileTime == Dynamic)
|
|
427
|
+
m_matrixU.resize(m_rows.value(), m_computeFullU ? m_rows.value() : m_computeThinU ? m_diagSize.value() : 0);
|
|
428
|
+
if (ColsAtCompileTime == Dynamic)
|
|
429
|
+
m_matrixV.resize(m_cols.value(), m_computeFullV ? m_cols.value() : m_computeThinV ? m_diagSize.value() : 0);
|
|
309
430
|
|
|
310
431
|
return false;
|
|
311
432
|
}
|
|
312
433
|
|
|
313
|
-
}//
|
|
434
|
+
} // namespace Eigen
|
|
314
435
|
|
|
315
|
-
#endif
|
|
436
|
+
#endif // EIGEN_SVDBASE_H
|