@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,40 +11,41 @@
|
|
|
11
11
|
#ifndef EIGEN_INCOMPLETE_LUT_H
|
|
12
12
|
#define EIGEN_INCOMPLETE_LUT_H
|
|
13
13
|
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
14
16
|
|
|
15
|
-
namespace Eigen {
|
|
17
|
+
namespace Eigen {
|
|
16
18
|
|
|
17
19
|
namespace internal {
|
|
18
|
-
|
|
20
|
+
|
|
19
21
|
/** \internal
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
* Compute a quick-sort split of a vector
|
|
23
|
+
* On output, the vector row is permuted such that its elements satisfy
|
|
24
|
+
* abs(row(i)) >= abs(row(ncut)) if i<ncut
|
|
25
|
+
* abs(row(i)) <= abs(row(ncut)) if i>ncut
|
|
26
|
+
* \param row The vector of values
|
|
27
|
+
* \param ind The array of index for the elements in @p row
|
|
28
|
+
* \param ncut The number of largest elements to keep
|
|
29
|
+
**/
|
|
28
30
|
template <typename VectorV, typename VectorI>
|
|
29
|
-
Index QuickSplit(VectorV
|
|
30
|
-
{
|
|
31
|
+
Index QuickSplit(VectorV& row, VectorI& ind, Index ncut) {
|
|
31
32
|
typedef typename VectorV::RealScalar RealScalar;
|
|
32
|
-
using std::swap;
|
|
33
33
|
using std::abs;
|
|
34
|
+
using std::swap;
|
|
34
35
|
Index mid;
|
|
35
36
|
Index n = row.size(); /* length of the vector */
|
|
36
|
-
Index first, last
|
|
37
|
-
|
|
37
|
+
Index first, last;
|
|
38
|
+
|
|
38
39
|
ncut--; /* to fit the zero-based indices */
|
|
39
|
-
first = 0;
|
|
40
|
-
last = n-1;
|
|
41
|
-
if (ncut < first || ncut > last
|
|
42
|
-
|
|
40
|
+
first = 0;
|
|
41
|
+
last = n - 1;
|
|
42
|
+
if (ncut < first || ncut > last) return 0;
|
|
43
|
+
|
|
43
44
|
do {
|
|
44
|
-
mid = first;
|
|
45
|
-
RealScalar abskey = abs(row(mid));
|
|
45
|
+
mid = first;
|
|
46
|
+
RealScalar abskey = abs(row(mid));
|
|
46
47
|
for (Index j = first + 1; j <= last; j++) {
|
|
47
|
-
if (
|
|
48
|
+
if (abs(row(j)) > abskey) {
|
|
48
49
|
++mid;
|
|
49
50
|
swap(row(mid), row(j));
|
|
50
51
|
swap(ind(mid), ind(j));
|
|
@@ -53,221 +54,226 @@ Index QuickSplit(VectorV &row, VectorI &ind, Index ncut)
|
|
|
53
54
|
/* Interchange for the pivot element */
|
|
54
55
|
swap(row(mid), row(first));
|
|
55
56
|
swap(ind(mid), ind(first));
|
|
56
|
-
|
|
57
|
-
if (mid > ncut)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
|
|
58
|
+
if (mid > ncut)
|
|
59
|
+
last = mid - 1;
|
|
60
|
+
else if (mid < ncut)
|
|
61
|
+
first = mid + 1;
|
|
62
|
+
} while (mid != ncut);
|
|
63
|
+
|
|
64
|
+
return 0; /* mid is equal to ncut */
|
|
62
65
|
}
|
|
63
66
|
|
|
64
|
-
}// end namespace internal
|
|
67
|
+
} // end namespace internal
|
|
65
68
|
|
|
66
69
|
/** \ingroup IterativeLinearSolvers_Module
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
template <typename
|
|
99
|
-
class IncompleteLUT : public SparseSolverBase<IncompleteLUT<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
{
|
|
129
|
-
eigen_assert(fillfactor != 0);
|
|
130
|
-
compute(mat);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
Index rows() const { return m_lu.rows(); }
|
|
134
|
-
|
|
135
|
-
Index cols() const { return m_lu.cols(); }
|
|
136
|
-
|
|
137
|
-
/** \brief Reports whether previous computation was successful.
|
|
138
|
-
*
|
|
139
|
-
* \returns \c Success if computation was succesful,
|
|
140
|
-
* \c NumericalIssue if the matrix.appears to be negative.
|
|
141
|
-
*/
|
|
142
|
-
ComputationInfo info() const
|
|
143
|
-
{
|
|
144
|
-
eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
|
|
145
|
-
return m_info;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
template<typename MatrixType>
|
|
149
|
-
void analyzePattern(const MatrixType& amat);
|
|
150
|
-
|
|
151
|
-
template<typename MatrixType>
|
|
152
|
-
void factorize(const MatrixType& amat);
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Compute an incomplete LU factorization with dual threshold on the matrix mat
|
|
156
|
-
* No pivoting is done in this version
|
|
157
|
-
*
|
|
158
|
-
**/
|
|
159
|
-
template<typename MatrixType>
|
|
160
|
-
IncompleteLUT& compute(const MatrixType& amat)
|
|
161
|
-
{
|
|
162
|
-
analyzePattern(amat);
|
|
163
|
-
factorize(amat);
|
|
164
|
-
return *this;
|
|
165
|
-
}
|
|
70
|
+
* \class IncompleteLUT
|
|
71
|
+
* \brief Incomplete LU factorization with dual-threshold strategy
|
|
72
|
+
*
|
|
73
|
+
* \implsparsesolverconcept
|
|
74
|
+
*
|
|
75
|
+
* During the numerical factorization, two dropping rules are used :
|
|
76
|
+
* 1) any element whose magnitude is less than some tolerance is dropped.
|
|
77
|
+
* This tolerance is obtained by multiplying the input tolerance @p droptol
|
|
78
|
+
* by the average magnitude of all the original elements in the current row.
|
|
79
|
+
* 2) After the elimination of the row, only the @p fill largest elements in
|
|
80
|
+
* the L part and the @p fill largest elements in the U part are kept
|
|
81
|
+
* (in addition to the diagonal element ). Note that @p fill is computed from
|
|
82
|
+
* the input parameter @p fillfactor which is used the ratio to control the fill_in
|
|
83
|
+
* relatively to the initial number of nonzero elements.
|
|
84
|
+
*
|
|
85
|
+
* The two extreme cases are when @p droptol=0 (to keep all the @p fill*2 largest elements)
|
|
86
|
+
* and when @p fill=n/2 with @p droptol being different to zero.
|
|
87
|
+
*
|
|
88
|
+
* References : Yousef Saad, ILUT: A dual threshold incomplete LU factorization,
|
|
89
|
+
* Numerical Linear Algebra with Applications, 1(4), pp 387-402, 1994.
|
|
90
|
+
*
|
|
91
|
+
* NOTE : The following implementation is derived from the ILUT implementation
|
|
92
|
+
* in the SPARSKIT package, Copyright (C) 2005, the Regents of the University of Minnesota
|
|
93
|
+
* released under the terms of the GNU LGPL:
|
|
94
|
+
* http://www-users.cs.umn.edu/~saad/software/SPARSKIT/README
|
|
95
|
+
* However, Yousef Saad gave us permission to relicense his ILUT code to MPL2.
|
|
96
|
+
* See the Eigen mailing list archive, thread: ILUT, date: July 8, 2012:
|
|
97
|
+
* http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2012/07/msg00064.html
|
|
98
|
+
* alternatively, on GMANE:
|
|
99
|
+
* http://comments.gmane.org/gmane.comp.lib.eigen/3302
|
|
100
|
+
*/
|
|
101
|
+
template <typename Scalar_, typename StorageIndex_ = int>
|
|
102
|
+
class IncompleteLUT : public SparseSolverBase<IncompleteLUT<Scalar_, StorageIndex_> > {
|
|
103
|
+
protected:
|
|
104
|
+
typedef SparseSolverBase<IncompleteLUT> Base;
|
|
105
|
+
using Base::m_isInitialized;
|
|
106
|
+
|
|
107
|
+
public:
|
|
108
|
+
typedef Scalar_ Scalar;
|
|
109
|
+
typedef StorageIndex_ StorageIndex;
|
|
110
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
111
|
+
typedef Matrix<Scalar, Dynamic, 1> Vector;
|
|
112
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
113
|
+
typedef SparseMatrix<Scalar, RowMajor, StorageIndex> FactorType;
|
|
114
|
+
|
|
115
|
+
enum { ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
|
|
116
|
+
|
|
117
|
+
public:
|
|
118
|
+
IncompleteLUT()
|
|
119
|
+
: m_droptol(NumTraits<Scalar>::dummy_precision()),
|
|
120
|
+
m_fillfactor(10),
|
|
121
|
+
m_analysisIsOk(false),
|
|
122
|
+
m_factorizationIsOk(false) {}
|
|
123
|
+
|
|
124
|
+
template <typename MatrixType>
|
|
125
|
+
explicit IncompleteLUT(const MatrixType& mat, const RealScalar& droptol = NumTraits<Scalar>::dummy_precision(),
|
|
126
|
+
int fillfactor = 10)
|
|
127
|
+
: m_droptol(droptol), m_fillfactor(fillfactor), m_analysisIsOk(false), m_factorizationIsOk(false) {
|
|
128
|
+
eigen_assert(fillfactor != 0);
|
|
129
|
+
compute(mat);
|
|
130
|
+
}
|
|
166
131
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
template<typename Rhs, typename Dest>
|
|
171
|
-
void _solve_impl(const Rhs& b, Dest& x) const
|
|
172
|
-
{
|
|
173
|
-
x = m_Pinv * b;
|
|
174
|
-
x = m_lu.template triangularView<UnitLower>().solve(x);
|
|
175
|
-
x = m_lu.template triangularView<Upper>().solve(x);
|
|
176
|
-
x = m_P * x;
|
|
177
|
-
}
|
|
132
|
+
/** \brief Extraction Method for L-Factor */
|
|
133
|
+
const FactorType matrixL() const;
|
|
178
134
|
|
|
179
|
-
|
|
135
|
+
/** \brief Extraction Method for U-Factor */
|
|
136
|
+
const FactorType matrixU() const;
|
|
180
137
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
138
|
+
constexpr Index rows() const noexcept { return m_lu.rows(); }
|
|
139
|
+
|
|
140
|
+
constexpr Index cols() const noexcept { return m_lu.cols(); }
|
|
141
|
+
|
|
142
|
+
/** \brief Reports whether previous computation was successful.
|
|
143
|
+
*
|
|
144
|
+
* \returns \c Success if computation was successful,
|
|
145
|
+
* \c NumericalIssue if the matrix.appears to be negative.
|
|
146
|
+
*/
|
|
147
|
+
ComputationInfo info() const {
|
|
148
|
+
eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
|
|
149
|
+
return m_info;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
template <typename MatrixType>
|
|
153
|
+
void analyzePattern(const MatrixType& amat);
|
|
154
|
+
|
|
155
|
+
template <typename MatrixType>
|
|
156
|
+
void factorize(const MatrixType& amat);
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Compute an incomplete LU factorization with dual threshold on the matrix mat
|
|
160
|
+
* No pivoting is done in this version
|
|
161
|
+
*
|
|
162
|
+
**/
|
|
163
|
+
template <typename MatrixType>
|
|
164
|
+
IncompleteLUT& compute(const MatrixType& amat) {
|
|
165
|
+
analyzePattern(amat);
|
|
166
|
+
factorize(amat);
|
|
167
|
+
return *this;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
void setDroptol(const RealScalar& droptol);
|
|
171
|
+
void setFillfactor(int fillfactor);
|
|
172
|
+
|
|
173
|
+
template <typename Rhs, typename Dest>
|
|
174
|
+
void _solve_impl(const Rhs& b, Dest& x) const {
|
|
175
|
+
x = m_Pinv * b;
|
|
176
|
+
x = m_lu.template triangularView<UnitLower>().solve(x);
|
|
177
|
+
x = m_lu.template triangularView<Upper>().solve(x);
|
|
178
|
+
x = m_P * x;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
protected:
|
|
182
|
+
/** keeps off-diagonal entries; drops diagonal entries */
|
|
183
|
+
struct keep_diag {
|
|
184
|
+
inline bool operator()(const Index& row, const Index& col, const Scalar&) const { return row != col; }
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
protected:
|
|
188
|
+
FactorType m_lu;
|
|
189
|
+
RealScalar m_droptol;
|
|
190
|
+
int m_fillfactor;
|
|
191
|
+
bool m_analysisIsOk;
|
|
192
|
+
bool m_factorizationIsOk;
|
|
193
|
+
ComputationInfo m_info;
|
|
194
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_P; // Fill-reducing permutation
|
|
195
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_Pinv; // Inverse permutation
|
|
199
196
|
};
|
|
200
197
|
|
|
201
198
|
/**
|
|
202
199
|
* Set control parameter droptol
|
|
203
|
-
* \param droptol Drop any element whose magnitude is less than this tolerance
|
|
204
|
-
**/
|
|
205
|
-
template<typename Scalar, typename StorageIndex>
|
|
206
|
-
void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
|
|
207
|
-
|
|
208
|
-
this->m_droptol = droptol;
|
|
200
|
+
* \param droptol Drop any element whose magnitude is less than this tolerance
|
|
201
|
+
**/
|
|
202
|
+
template <typename Scalar, typename StorageIndex>
|
|
203
|
+
void IncompleteLUT<Scalar, StorageIndex>::setDroptol(const RealScalar& droptol) {
|
|
204
|
+
this->m_droptol = droptol;
|
|
209
205
|
}
|
|
210
206
|
|
|
211
207
|
/**
|
|
212
208
|
* Set control parameter fillfactor
|
|
213
|
-
* \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
|
|
214
|
-
**/
|
|
215
|
-
template<typename Scalar, typename StorageIndex>
|
|
216
|
-
void IncompleteLUT<Scalar,StorageIndex>::setFillfactor(int fillfactor)
|
|
217
|
-
|
|
218
|
-
|
|
209
|
+
* \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
|
|
210
|
+
**/
|
|
211
|
+
template <typename Scalar, typename StorageIndex>
|
|
212
|
+
void IncompleteLUT<Scalar, StorageIndex>::setFillfactor(int fillfactor) {
|
|
213
|
+
this->m_fillfactor = fillfactor;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* get L-Factor
|
|
218
|
+
* \return L-Factor is a matrix containing the lower triangular part of the sparse matrix. All elements of the matrix
|
|
219
|
+
* above the main diagonal are zero.
|
|
220
|
+
**/
|
|
221
|
+
template <typename Scalar, typename StorageIndex>
|
|
222
|
+
const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixL() const {
|
|
223
|
+
eigen_assert(m_factorizationIsOk && "factorize() should be called first");
|
|
224
|
+
return m_lu.template triangularView<UnitLower>();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* get U-Factor
|
|
229
|
+
* \return L-Factor is a matrix containing the upper triangular part of the sparse matrix. All elements of the matrix
|
|
230
|
+
* below the main diagonal are zero.
|
|
231
|
+
**/
|
|
232
|
+
template <typename Scalar, typename StorageIndex>
|
|
233
|
+
const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixU() const {
|
|
234
|
+
eigen_assert(m_factorizationIsOk && "Factorization must be computed first.");
|
|
235
|
+
return m_lu.template triangularView<Upper>();
|
|
219
236
|
}
|
|
220
237
|
|
|
221
238
|
template <typename Scalar, typename StorageIndex>
|
|
222
|
-
template<typename
|
|
223
|
-
void IncompleteLUT<Scalar,StorageIndex>::analyzePattern(const
|
|
224
|
-
{
|
|
239
|
+
template <typename MatrixType_>
|
|
240
|
+
void IncompleteLUT<Scalar, StorageIndex>::analyzePattern(const MatrixType_& amat) {
|
|
225
241
|
// Compute the Fill-reducing permutation
|
|
226
242
|
// Since ILUT does not perform any numerical pivoting,
|
|
227
243
|
// it is highly preferable to keep the diagonal through symmetric permutations.
|
|
228
|
-
#ifndef EIGEN_MPL2_ONLY
|
|
229
244
|
// To this end, let's symmetrize the pattern and perform AMD on it.
|
|
230
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
|
|
231
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> mat2 = amat.transpose();
|
|
245
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> mat1 = amat;
|
|
246
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> mat2 = amat.transpose();
|
|
232
247
|
// FIXME for a matrix with nearly symmetric pattern, mat2+mat1 is the appropriate choice.
|
|
233
|
-
// on the other hand for a really non-symmetric pattern, mat2*mat1 should be
|
|
234
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> AtA = mat2 + mat1;
|
|
248
|
+
// on the other hand for a really non-symmetric pattern, mat2*mat1 should be preferred...
|
|
249
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> AtA = mat2 + mat1;
|
|
235
250
|
AMDOrdering<StorageIndex> ordering;
|
|
236
|
-
ordering(AtA,m_P);
|
|
237
|
-
m_Pinv
|
|
238
|
-
#else
|
|
239
|
-
// If AMD is not available, (MPL2-only), then let's use the slower COLAMD routine.
|
|
240
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
|
|
241
|
-
COLAMDOrdering<StorageIndex> ordering;
|
|
242
|
-
ordering(mat1,m_Pinv);
|
|
243
|
-
m_P = m_Pinv.inverse();
|
|
244
|
-
#endif
|
|
245
|
-
|
|
251
|
+
ordering(AtA, m_P);
|
|
252
|
+
m_Pinv = m_P.inverse(); // cache the inverse permutation
|
|
246
253
|
m_analysisIsOk = true;
|
|
247
254
|
m_factorizationIsOk = false;
|
|
248
255
|
m_isInitialized = true;
|
|
249
256
|
}
|
|
250
257
|
|
|
251
258
|
template <typename Scalar, typename StorageIndex>
|
|
252
|
-
template<typename
|
|
253
|
-
void IncompleteLUT<Scalar,StorageIndex>::factorize(const
|
|
254
|
-
|
|
259
|
+
template <typename MatrixType_>
|
|
260
|
+
void IncompleteLUT<Scalar, StorageIndex>::factorize(const MatrixType_& amat) {
|
|
261
|
+
using internal::convert_index;
|
|
262
|
+
using std::abs;
|
|
255
263
|
using std::sqrt;
|
|
256
264
|
using std::swap;
|
|
257
|
-
using std::abs;
|
|
258
|
-
using internal::convert_index;
|
|
259
265
|
|
|
260
266
|
eigen_assert((amat.rows() == amat.cols()) && "The factorization should be done on a square matrix");
|
|
261
267
|
Index n = amat.cols(); // Size of the matrix
|
|
262
|
-
m_lu.resize(n,n);
|
|
268
|
+
m_lu.resize(n, n);
|
|
263
269
|
// Declare Working vectors and variables
|
|
264
|
-
Vector u(n)
|
|
265
|
-
VectorI ju(n);
|
|
266
|
-
VectorI jr(n);
|
|
270
|
+
Vector u(n); // real values of the row -- maximum size is n --
|
|
271
|
+
VectorI ju(n); // column position of the values in u -- maximum size is n
|
|
272
|
+
VectorI jr(n); // Indicate the position of the nonzero elements in the vector u -- A zero location is indicated by -1
|
|
267
273
|
|
|
268
274
|
// Apply the fill-reducing permutation
|
|
269
275
|
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
270
|
-
SparseMatrix<Scalar,RowMajor, StorageIndex> mat;
|
|
276
|
+
SparseMatrix<Scalar, RowMajor, StorageIndex> mat;
|
|
271
277
|
mat = amat.twistedBy(m_Pinv);
|
|
272
278
|
|
|
273
279
|
// Initialization
|
|
@@ -276,44 +282,37 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
276
282
|
u.fill(0);
|
|
277
283
|
|
|
278
284
|
// number of largest elements to keep in each row:
|
|
279
|
-
Index fill_in = (amat.nonZeros()*m_fillfactor)/n + 1;
|
|
285
|
+
Index fill_in = (amat.nonZeros() * m_fillfactor) / n + 1;
|
|
280
286
|
if (fill_in > n) fill_in = n;
|
|
281
287
|
|
|
282
288
|
// number of largest nonzero elements to keep in the L and the U part of the current row:
|
|
283
|
-
Index nnzL = fill_in/2;
|
|
289
|
+
Index nnzL = fill_in / 2;
|
|
284
290
|
Index nnzU = nnzL;
|
|
285
291
|
m_lu.reserve(n * (nnzL + nnzU + 1));
|
|
286
292
|
|
|
287
293
|
// global loop over the rows of the sparse matrix
|
|
288
|
-
for (Index ii = 0; ii < n; ii++)
|
|
289
|
-
{
|
|
294
|
+
for (Index ii = 0; ii < n; ii++) {
|
|
290
295
|
// 1 - copy the lower and the upper part of the row i of mat in the working vector u
|
|
291
296
|
|
|
292
|
-
Index sizeu = 1;
|
|
293
|
-
Index sizel = 0;
|
|
294
|
-
ju(ii)
|
|
295
|
-
u(ii)
|
|
296
|
-
jr(ii)
|
|
297
|
+
Index sizeu = 1; // number of nonzero elements in the upper part of the current row
|
|
298
|
+
Index sizel = 0; // number of nonzero elements in the lower part of the current row
|
|
299
|
+
ju(ii) = convert_index<StorageIndex>(ii);
|
|
300
|
+
u(ii) = 0;
|
|
301
|
+
jr(ii) = convert_index<StorageIndex>(ii);
|
|
297
302
|
RealScalar rownorm = 0;
|
|
298
303
|
|
|
299
|
-
typename FactorType::InnerIterator j_it(mat, ii);
|
|
300
|
-
for (; j_it; ++j_it)
|
|
301
|
-
{
|
|
304
|
+
typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
|
|
305
|
+
for (; j_it; ++j_it) {
|
|
302
306
|
Index k = j_it.index();
|
|
303
|
-
if (k < ii)
|
|
304
|
-
{
|
|
307
|
+
if (k < ii) {
|
|
305
308
|
// copy the lower part
|
|
306
309
|
ju(sizel) = convert_index<StorageIndex>(k);
|
|
307
310
|
u(sizel) = j_it.value();
|
|
308
311
|
jr(k) = convert_index<StorageIndex>(sizel);
|
|
309
312
|
++sizel;
|
|
310
|
-
}
|
|
311
|
-
else if (k == ii)
|
|
312
|
-
{
|
|
313
|
+
} else if (k == ii) {
|
|
313
314
|
u(ii) = j_it.value();
|
|
314
|
-
}
|
|
315
|
-
else
|
|
316
|
-
{
|
|
315
|
+
} else {
|
|
317
316
|
// copy the upper part
|
|
318
317
|
Index jpos = ii + sizeu;
|
|
319
318
|
ju(jpos) = convert_index<StorageIndex>(k);
|
|
@@ -325,8 +324,7 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
325
324
|
}
|
|
326
325
|
|
|
327
326
|
// 2 - detect possible zero row
|
|
328
|
-
if(rownorm==0)
|
|
329
|
-
{
|
|
327
|
+
if (rownorm == 0) {
|
|
330
328
|
m_info = NumericalIssue;
|
|
331
329
|
return;
|
|
332
330
|
}
|
|
@@ -336,15 +334,13 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
336
334
|
// 3 - eliminate the previous nonzero rows
|
|
337
335
|
Index jj = 0;
|
|
338
336
|
Index len = 0;
|
|
339
|
-
while (jj < sizel)
|
|
340
|
-
{
|
|
337
|
+
while (jj < sizel) {
|
|
341
338
|
// In order to eliminate in the correct order,
|
|
342
339
|
// we must select first the smallest column index among ju(jj:sizel)
|
|
343
340
|
Index k;
|
|
344
|
-
Index minrow = ju.segment(jj,sizel-jj).minCoeff(&k);
|
|
341
|
+
Index minrow = ju.segment(jj, sizel - jj).minCoeff(&k); // k is relative to the segment
|
|
345
342
|
k += jj;
|
|
346
|
-
if (minrow != ju(jj))
|
|
347
|
-
{
|
|
343
|
+
if (minrow != ju(jj)) {
|
|
348
344
|
// swap the two locations
|
|
349
345
|
Index j = ju(jj);
|
|
350
346
|
swap(ju(jj), ju(k));
|
|
@@ -358,55 +354,51 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
358
354
|
// Start elimination
|
|
359
355
|
typename FactorType::InnerIterator ki_it(m_lu, minrow);
|
|
360
356
|
while (ki_it && ki_it.index() < minrow) ++ki_it;
|
|
361
|
-
eigen_internal_assert(ki_it && ki_it.col()==minrow);
|
|
357
|
+
eigen_internal_assert(ki_it && ki_it.col() == minrow);
|
|
362
358
|
Scalar fact = u(jj) / ki_it.value();
|
|
363
359
|
|
|
364
360
|
// drop too small elements
|
|
365
|
-
if(abs(fact) <= m_droptol)
|
|
366
|
-
{
|
|
361
|
+
if (abs(fact) <= m_droptol) {
|
|
367
362
|
jj++;
|
|
368
363
|
continue;
|
|
369
364
|
}
|
|
370
365
|
|
|
371
366
|
// linear combination of the current row ii and the row minrow
|
|
372
367
|
++ki_it;
|
|
373
|
-
for (; ki_it; ++ki_it)
|
|
374
|
-
{
|
|
368
|
+
for (; ki_it; ++ki_it) {
|
|
375
369
|
Scalar prod = fact * ki_it.value();
|
|
376
|
-
Index j
|
|
377
|
-
Index jpos
|
|
378
|
-
if (jpos == -1)
|
|
370
|
+
Index j = ki_it.index();
|
|
371
|
+
Index jpos = jr(j);
|
|
372
|
+
if (jpos == -1) // fill-in element
|
|
379
373
|
{
|
|
380
374
|
Index newpos;
|
|
381
|
-
if (j >= ii)
|
|
375
|
+
if (j >= ii) // dealing with the upper part
|
|
382
376
|
{
|
|
383
377
|
newpos = ii + sizeu;
|
|
384
378
|
sizeu++;
|
|
385
|
-
eigen_internal_assert(sizeu<=n);
|
|
386
|
-
}
|
|
387
|
-
else // dealing with the lower part
|
|
379
|
+
eigen_internal_assert(sizeu <= n);
|
|
380
|
+
} else // dealing with the lower part
|
|
388
381
|
{
|
|
389
382
|
newpos = sizel;
|
|
390
383
|
sizel++;
|
|
391
|
-
eigen_internal_assert(sizel<=ii);
|
|
384
|
+
eigen_internal_assert(sizel <= ii);
|
|
392
385
|
}
|
|
393
386
|
ju(newpos) = convert_index<StorageIndex>(j);
|
|
394
387
|
u(newpos) = -prod;
|
|
395
388
|
jr(j) = convert_index<StorageIndex>(newpos);
|
|
396
|
-
}
|
|
397
|
-
else
|
|
389
|
+
} else
|
|
398
390
|
u(jpos) -= prod;
|
|
399
391
|
}
|
|
400
392
|
// store the pivot element
|
|
401
|
-
u(len)
|
|
393
|
+
u(len) = fact;
|
|
402
394
|
ju(len) = convert_index<StorageIndex>(minrow);
|
|
403
395
|
++len;
|
|
404
396
|
|
|
405
397
|
jj++;
|
|
406
|
-
}
|
|
398
|
+
} // end of the elimination on the row ii
|
|
407
399
|
|
|
408
400
|
// reset the upper part of the pointer jr to zero
|
|
409
|
-
for(Index k = 0; k <sizeu; k++) jr(ju(ii+k)) = -1;
|
|
401
|
+
for (Index k = 0; k < sizeu; k++) jr(ju(ii + k)) = -1;
|
|
410
402
|
|
|
411
403
|
// 4 - partially sort and insert the elements in the m_lu matrix
|
|
412
404
|
|
|
@@ -419,36 +411,31 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
419
411
|
|
|
420
412
|
// store the largest m_fill elements of the L part
|
|
421
413
|
m_lu.startVec(ii);
|
|
422
|
-
for(Index k = 0; k < len; k++)
|
|
423
|
-
m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
|
|
414
|
+
for (Index k = 0; k < len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
|
|
424
415
|
|
|
425
416
|
// store the diagonal element
|
|
426
417
|
// apply a shifting rule to avoid zero pivots (we are doing an incomplete factorization)
|
|
427
|
-
if (u(ii) == Scalar(0))
|
|
428
|
-
u(ii) = sqrt(m_droptol) * rownorm;
|
|
418
|
+
if (u(ii) == Scalar(0)) u(ii) = sqrt(m_droptol) * rownorm;
|
|
429
419
|
m_lu.insertBackByOuterInnerUnordered(ii, ii) = u(ii);
|
|
430
420
|
|
|
431
421
|
// sort the U-part of the row
|
|
432
422
|
// apply the dropping rule first
|
|
433
423
|
len = 0;
|
|
434
|
-
for(Index k = 1; k < sizeu; k++)
|
|
435
|
-
|
|
436
|
-
if(abs(u(ii+k)) > m_droptol * rownorm )
|
|
437
|
-
{
|
|
424
|
+
for (Index k = 1; k < sizeu; k++) {
|
|
425
|
+
if (abs(u(ii + k)) > m_droptol * rownorm) {
|
|
438
426
|
++len;
|
|
439
|
-
u(ii + len)
|
|
427
|
+
u(ii + len) = u(ii + k);
|
|
440
428
|
ju(ii + len) = ju(ii + k);
|
|
441
429
|
}
|
|
442
430
|
}
|
|
443
|
-
sizeu = len + 1;
|
|
431
|
+
sizeu = len + 1; // +1 to take into account the diagonal element
|
|
444
432
|
len = (std::min)(sizeu, nnzU);
|
|
445
|
-
typename Vector::SegmentReturnType uu(u.segment(ii+1, sizeu-1));
|
|
446
|
-
typename VectorI::SegmentReturnType juu(ju.segment(ii+1, sizeu-1));
|
|
433
|
+
typename Vector::SegmentReturnType uu(u.segment(ii + 1, sizeu - 1));
|
|
434
|
+
typename VectorI::SegmentReturnType juu(ju.segment(ii + 1, sizeu - 1));
|
|
447
435
|
internal::QuickSplit(uu, juu, len);
|
|
448
436
|
|
|
449
437
|
// store the largest elements of the U part
|
|
450
|
-
for(Index k = ii + 1; k < ii + len; k++)
|
|
451
|
-
m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
|
|
438
|
+
for (Index k = ii + 1; k < ii + len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
|
|
452
439
|
}
|
|
453
440
|
m_lu.finalize();
|
|
454
441
|
m_lu.makeCompressed();
|
|
@@ -457,6 +444,6 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
457
444
|
m_info = Success;
|
|
458
445
|
}
|
|
459
446
|
|
|
460
|
-
}
|
|
447
|
+
} // end namespace Eigen
|
|
461
448
|
|
|
462
|
-
#endif
|
|
449
|
+
#endif // EIGEN_INCOMPLETE_LUT_H
|