@smake/eigen 1.1.0 → 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 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- 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 +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -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 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- 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 +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- 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 +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- 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 +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- 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 +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- 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 +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- 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 +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- 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 -47
- 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 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- 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 +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- 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 +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- 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 +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- 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 +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- 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 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- 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 +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- 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 +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- 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 +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- 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 +370 -416
- 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 +138 -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 +756 -710
- 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 +245 -301
- 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 +89 -100
- 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 +124 -132
- 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 +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- 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 -730
- 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 +428 -464
- 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 +9972 -16179
- 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.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- 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/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- 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 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -11,213 +11,200 @@
|
|
|
11
11
|
#ifndef EIGEN_BIDIAGONALIZATION_H
|
|
12
12
|
#define EIGEN_BIDIAGONALIZATION_H
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
16
|
+
|
|
17
|
+
namespace Eigen {
|
|
15
18
|
|
|
16
19
|
namespace internal {
|
|
17
20
|
// UpperBidiagonalization will probably be replaced by a Bidiagonalization class, don't want to make it stable API.
|
|
18
21
|
// At the same time, it's useful to keep for now as it's about the only thing that is testing the BandMatrix class.
|
|
19
22
|
|
|
20
|
-
template<typename
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*/
|
|
54
|
-
UpperBidiagonalization() : m_householder(), m_bidiagonal(), m_isInitialized(false) {}
|
|
55
|
-
|
|
56
|
-
explicit UpperBidiagonalization(const MatrixType& matrix)
|
|
23
|
+
template <typename MatrixType_>
|
|
24
|
+
class UpperBidiagonalization {
|
|
25
|
+
public:
|
|
26
|
+
typedef MatrixType_ MatrixType;
|
|
27
|
+
enum {
|
|
28
|
+
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
29
|
+
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
30
|
+
ColsAtCompileTimeMinusOne = internal::decrement_size<ColsAtCompileTime>::ret
|
|
31
|
+
};
|
|
32
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
33
|
+
typedef typename MatrixType::RealScalar RealScalar;
|
|
34
|
+
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
|
35
|
+
typedef Matrix<Scalar, 1, ColsAtCompileTime> RowVectorType;
|
|
36
|
+
typedef Matrix<Scalar, RowsAtCompileTime, 1> ColVectorType;
|
|
37
|
+
typedef BandMatrix<RealScalar, ColsAtCompileTime, ColsAtCompileTime, 1, 0, RowMajor> BidiagonalType;
|
|
38
|
+
typedef Matrix<Scalar, ColsAtCompileTime, 1> DiagVectorType;
|
|
39
|
+
typedef Matrix<Scalar, ColsAtCompileTimeMinusOne, 1> SuperDiagVectorType;
|
|
40
|
+
typedef HouseholderSequence<
|
|
41
|
+
const MatrixType, const internal::remove_all_t<typename Diagonal<const MatrixType, 0>::ConjugateReturnType> >
|
|
42
|
+
HouseholderUSequenceType;
|
|
43
|
+
typedef HouseholderSequence<const internal::remove_all_t<typename MatrixType::ConjugateReturnType>,
|
|
44
|
+
Diagonal<const MatrixType, 1>, OnTheRight>
|
|
45
|
+
HouseholderVSequenceType;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* \brief Default Constructor.
|
|
49
|
+
*
|
|
50
|
+
* The default constructor is useful in cases in which the user intends to
|
|
51
|
+
* perform decompositions via Bidiagonalization::compute(const MatrixType&).
|
|
52
|
+
*/
|
|
53
|
+
UpperBidiagonalization() : m_householder(), m_bidiagonal(0, 0), m_isInitialized(false) {}
|
|
54
|
+
|
|
55
|
+
explicit UpperBidiagonalization(const MatrixType& matrix)
|
|
57
56
|
: m_householder(matrix.rows(), matrix.cols()),
|
|
58
57
|
m_bidiagonal(matrix.cols(), matrix.cols()),
|
|
59
|
-
m_isInitialized(false)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
UpperBidiagonalization& compute(const MatrixType& matrix);
|
|
65
|
-
UpperBidiagonalization& computeUnblocked(const MatrixType& matrix);
|
|
66
|
-
|
|
67
|
-
const MatrixType& householder() const { return m_householder; }
|
|
68
|
-
const BidiagonalType& bidiagonal() const { return m_bidiagonal; }
|
|
69
|
-
|
|
70
|
-
const HouseholderUSequenceType householderU() const
|
|
71
|
-
{
|
|
72
|
-
eigen_assert(m_isInitialized && "UpperBidiagonalization is not initialized.");
|
|
73
|
-
return HouseholderUSequenceType(m_householder, m_householder.diagonal().conjugate());
|
|
74
|
-
}
|
|
58
|
+
m_isInitialized(false) {
|
|
59
|
+
compute(matrix);
|
|
60
|
+
}
|
|
75
61
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
62
|
+
UpperBidiagonalization(Index rows, Index cols)
|
|
63
|
+
: m_householder(rows, cols), m_bidiagonal(cols, cols), m_isInitialized(false) {}
|
|
64
|
+
|
|
65
|
+
UpperBidiagonalization& compute(const MatrixType& matrix);
|
|
66
|
+
UpperBidiagonalization& computeUnblocked(const MatrixType& matrix);
|
|
67
|
+
|
|
68
|
+
const MatrixType& householder() const { return m_householder; }
|
|
69
|
+
const BidiagonalType& bidiagonal() const { return m_bidiagonal; }
|
|
70
|
+
|
|
71
|
+
const HouseholderUSequenceType householderU() const {
|
|
72
|
+
eigen_assert(m_isInitialized && "UpperBidiagonalization is not initialized.");
|
|
73
|
+
return HouseholderUSequenceType(m_householder, m_householder.diagonal().conjugate());
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const HouseholderVSequenceType householderV() // const here gives nasty errors and i'm lazy
|
|
77
|
+
{
|
|
78
|
+
eigen_assert(m_isInitialized && "UpperBidiagonalization is not initialized.");
|
|
79
|
+
return HouseholderVSequenceType(m_householder.conjugate(), m_householder.const_derived().template diagonal<1>())
|
|
80
|
+
.setLength(m_householder.cols() - 1)
|
|
81
|
+
.setShift(1);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected:
|
|
85
|
+
MatrixType m_householder;
|
|
86
|
+
BidiagonalType m_bidiagonal;
|
|
87
|
+
bool m_isInitialized;
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
// Standard upper bidiagonalization without fancy optimizations
|
|
91
91
|
// This version should be faster for small matrix size
|
|
92
|
-
template<typename MatrixType>
|
|
93
|
-
void upperbidiagonalization_inplace_unblocked(MatrixType& mat,
|
|
94
|
-
typename MatrixType::RealScalar
|
|
95
|
-
typename MatrixType::
|
|
96
|
-
typename MatrixType::Scalar* tempData = 0)
|
|
97
|
-
{
|
|
92
|
+
template <typename MatrixType>
|
|
93
|
+
void upperbidiagonalization_inplace_unblocked(MatrixType& mat, typename MatrixType::RealScalar* diagonal,
|
|
94
|
+
typename MatrixType::RealScalar* upper_diagonal,
|
|
95
|
+
typename MatrixType::Scalar* tempData = 0) {
|
|
98
96
|
typedef typename MatrixType::Scalar Scalar;
|
|
99
97
|
|
|
100
98
|
Index rows = mat.rows();
|
|
101
99
|
Index cols = mat.cols();
|
|
102
100
|
|
|
103
|
-
typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixType::MaxRowsAtCompileTime,1> TempType;
|
|
101
|
+
typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixType::MaxRowsAtCompileTime, 1> TempType;
|
|
104
102
|
TempType tempVector;
|
|
105
|
-
if(tempData==0)
|
|
106
|
-
{
|
|
103
|
+
if (tempData == 0) {
|
|
107
104
|
tempVector.resize(rows);
|
|
108
105
|
tempData = tempVector.data();
|
|
109
106
|
}
|
|
110
107
|
|
|
111
|
-
for (Index k = 0; /* breaks at k==cols-1 below
|
|
112
|
-
{
|
|
108
|
+
for (Index k = 0; /* breaks at k==cols-1 below */; ++k) {
|
|
113
109
|
Index remainingRows = rows - k;
|
|
114
110
|
Index remainingCols = cols - k - 1;
|
|
115
111
|
|
|
116
112
|
// construct left householder transform in-place in A
|
|
117
|
-
mat.col(k).tail(remainingRows)
|
|
118
|
-
.makeHouseholderInPlace(mat.coeffRef(k,k), diagonal[k]);
|
|
113
|
+
mat.col(k).tail(remainingRows).makeHouseholderInPlace(mat.coeffRef(k, k), diagonal[k]);
|
|
119
114
|
// apply householder transform to remaining part of A on the left
|
|
120
115
|
mat.bottomRightCorner(remainingRows, remainingCols)
|
|
121
|
-
|
|
116
|
+
.applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows - 1), mat.coeff(k, k), tempData);
|
|
122
117
|
|
|
123
|
-
if(k == cols-1) break;
|
|
118
|
+
if (k == cols - 1) break;
|
|
124
119
|
|
|
125
120
|
// construct right householder transform in-place in mat
|
|
126
|
-
mat.row(k).tail(remainingCols)
|
|
127
|
-
.makeHouseholderInPlace(mat.coeffRef(k,k+1), upper_diagonal[k]);
|
|
121
|
+
mat.row(k).tail(remainingCols).makeHouseholderInPlace(mat.coeffRef(k, k + 1), upper_diagonal[k]);
|
|
128
122
|
// apply householder transform to remaining part of mat on the left
|
|
129
|
-
mat.bottomRightCorner(remainingRows-1, remainingCols)
|
|
130
|
-
|
|
123
|
+
mat.bottomRightCorner(remainingRows - 1, remainingCols)
|
|
124
|
+
.applyHouseholderOnTheRight(mat.row(k).tail(remainingCols - 1).adjoint(), mat.coeff(k, k + 1), tempData);
|
|
131
125
|
}
|
|
132
126
|
}
|
|
133
127
|
|
|
134
128
|
/** \internal
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
template<typename MatrixType>
|
|
152
|
-
void upperbidiagonalization_blocked_helper(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
Ref<Matrix<typename MatrixType::Scalar, Dynamic, Dynamic,
|
|
157
|
-
traits<MatrixType>::Flags & RowMajorBit> > X,
|
|
158
|
-
Ref<Matrix<typename MatrixType::Scalar, Dynamic, Dynamic,
|
|
159
|
-
traits<MatrixType>::Flags & RowMajorBit> > Y)
|
|
160
|
-
{
|
|
129
|
+
* Helper routine for the block reduction to upper bidiagonal form.
|
|
130
|
+
*
|
|
131
|
+
* Let's partition the matrix A:
|
|
132
|
+
*
|
|
133
|
+
* | A00 A01 |
|
|
134
|
+
* A = | |
|
|
135
|
+
* | A10 A11 |
|
|
136
|
+
*
|
|
137
|
+
* This function reduces to bidiagonal form the left \c rows x \a blockSize vertical panel [A00/A10]
|
|
138
|
+
* and the \a blockSize x \c cols horizontal panel [A00 A01] of the matrix \a A. The bottom-right block A11
|
|
139
|
+
* is updated using matrix-matrix products:
|
|
140
|
+
* A22 -= V * Y^T - X * U^T
|
|
141
|
+
* where V and U contains the left and right Householder vectors. U and V are stored in A10, and A01
|
|
142
|
+
* respectively, and the update matrices X and Y are computed during the reduction.
|
|
143
|
+
*
|
|
144
|
+
*/
|
|
145
|
+
template <typename MatrixType>
|
|
146
|
+
void upperbidiagonalization_blocked_helper(
|
|
147
|
+
MatrixType& A, typename MatrixType::RealScalar* diagonal, typename MatrixType::RealScalar* upper_diagonal, Index bs,
|
|
148
|
+
Ref<Matrix<typename MatrixType::Scalar, Dynamic, Dynamic, traits<MatrixType>::Flags & RowMajorBit> > X,
|
|
149
|
+
Ref<Matrix<typename MatrixType::Scalar, Dynamic, Dynamic, traits<MatrixType>::Flags & RowMajorBit> > Y) {
|
|
161
150
|
typedef typename MatrixType::Scalar Scalar;
|
|
162
151
|
typedef typename MatrixType::RealScalar RealScalar;
|
|
163
152
|
typedef typename NumTraits<RealScalar>::Literal Literal;
|
|
164
|
-
|
|
165
|
-
typedef InnerStride<
|
|
166
|
-
typedef InnerStride<
|
|
167
|
-
typedef Ref<Matrix<Scalar, Dynamic, 1>, 0, ColInnerStride>
|
|
168
|
-
typedef Ref<Matrix<Scalar, 1, Dynamic>, 0, RowInnerStride>
|
|
169
|
-
typedef Ref<Matrix<Scalar, Dynamic, Dynamic, StorageOrder
|
|
170
|
-
|
|
153
|
+
static constexpr int StorageOrder = (traits<MatrixType>::Flags & RowMajorBit) ? RowMajor : ColMajor;
|
|
154
|
+
typedef InnerStride<StorageOrder == ColMajor ? 1 : Dynamic> ColInnerStride;
|
|
155
|
+
typedef InnerStride<StorageOrder == ColMajor ? Dynamic : 1> RowInnerStride;
|
|
156
|
+
typedef Ref<Matrix<Scalar, Dynamic, 1>, 0, ColInnerStride> SubColumnType;
|
|
157
|
+
typedef Ref<Matrix<Scalar, 1, Dynamic>, 0, RowInnerStride> SubRowType;
|
|
158
|
+
typedef Ref<Matrix<Scalar, Dynamic, Dynamic, StorageOrder> > SubMatType;
|
|
159
|
+
|
|
171
160
|
Index brows = A.rows();
|
|
172
161
|
Index bcols = A.cols();
|
|
173
162
|
|
|
174
163
|
Scalar tau_u, tau_u_prev(0), tau_v;
|
|
175
164
|
|
|
176
|
-
for(Index k = 0; k < bs; ++k)
|
|
177
|
-
{
|
|
165
|
+
for (Index k = 0; k < bs; ++k) {
|
|
178
166
|
Index remainingRows = brows - k;
|
|
179
167
|
Index remainingCols = bcols - k - 1;
|
|
180
168
|
|
|
181
|
-
SubMatType X_k1(
|
|
182
|
-
SubMatType V_k1(
|
|
169
|
+
SubMatType X_k1(X.block(k, 0, remainingRows, k));
|
|
170
|
+
SubMatType V_k1(A.block(k, 0, remainingRows, k));
|
|
183
171
|
|
|
184
172
|
// 1 - update the k-th column of A
|
|
185
173
|
SubColumnType v_k = A.col(k).tail(remainingRows);
|
|
186
|
-
|
|
187
|
-
if(k) v_k -= X_k1 * A.col(k).head(k);
|
|
188
|
-
|
|
174
|
+
v_k -= V_k1 * Y.row(k).head(k).adjoint();
|
|
175
|
+
if (k) v_k.noalias() -= X_k1 * A.col(k).head(k);
|
|
176
|
+
|
|
189
177
|
// 2 - construct left Householder transform in-place
|
|
190
178
|
v_k.makeHouseholderInPlace(tau_v, diagonal[k]);
|
|
191
|
-
|
|
192
|
-
if(k+1<bcols)
|
|
193
|
-
|
|
194
|
-
SubMatType
|
|
195
|
-
|
|
196
|
-
|
|
179
|
+
|
|
180
|
+
if (k + 1 < bcols) {
|
|
181
|
+
SubMatType Y_k(Y.block(k + 1, 0, remainingCols, k + 1));
|
|
182
|
+
SubMatType U_k1(A.block(0, k + 1, k, remainingCols));
|
|
183
|
+
|
|
197
184
|
// this eases the application of Householder transforAions
|
|
198
185
|
// A(k,k) will store tau_v later
|
|
199
|
-
A(k,k) = Scalar(1);
|
|
186
|
+
A(k, k) = Scalar(1);
|
|
200
187
|
|
|
201
188
|
// 3 - Compute y_k^T = tau_v * ( A^T*v_k - Y_k-1*V_k-1^T*v_k - U_k-1*X_k-1^T*v_k )
|
|
202
189
|
{
|
|
203
|
-
SubColumnType y_k(
|
|
204
|
-
|
|
190
|
+
SubColumnType y_k(Y.col(k).tail(remainingCols));
|
|
191
|
+
|
|
205
192
|
// let's use the beginning of column k of Y as a temporary vector
|
|
206
|
-
SubColumnType tmp(
|
|
207
|
-
y_k.noalias()
|
|
208
|
-
tmp.noalias()
|
|
193
|
+
SubColumnType tmp(Y.col(k).head(k));
|
|
194
|
+
y_k.noalias() = A.block(k, k + 1, remainingRows, remainingCols).adjoint() * v_k; // bottleneck
|
|
195
|
+
tmp.noalias() = V_k1.adjoint() * v_k;
|
|
209
196
|
y_k.noalias() -= Y_k.leftCols(k) * tmp;
|
|
210
|
-
tmp.noalias()
|
|
211
|
-
y_k.noalias() -= U_k1.adjoint()
|
|
197
|
+
tmp.noalias() = X_k1.adjoint() * v_k;
|
|
198
|
+
y_k.noalias() -= U_k1.adjoint() * tmp;
|
|
212
199
|
y_k *= numext::conj(tau_v);
|
|
213
200
|
}
|
|
214
201
|
|
|
215
202
|
// 4 - update k-th row of A (it will become u_k)
|
|
216
|
-
SubRowType u_k(
|
|
203
|
+
SubRowType u_k(A.row(k).tail(remainingCols));
|
|
217
204
|
u_k = u_k.conjugate();
|
|
218
205
|
{
|
|
219
|
-
u_k -= Y_k * A.row(k).head(k+1).adjoint();
|
|
220
|
-
if(k) u_k -= U_k1.adjoint() * X.row(k).head(k).adjoint();
|
|
206
|
+
u_k.noalias() -= Y_k * A.row(k).head(k + 1).adjoint();
|
|
207
|
+
if (k) u_k -= U_k1.adjoint() * X.row(k).head(k).adjoint();
|
|
221
208
|
}
|
|
222
209
|
|
|
223
210
|
// 5 - construct right Householder transform in-place
|
|
@@ -225,96 +212,82 @@ void upperbidiagonalization_blocked_helper(MatrixType& A,
|
|
|
225
212
|
|
|
226
213
|
// this eases the application of Householder transformations
|
|
227
214
|
// A(k,k+1) will store tau_u later
|
|
228
|
-
A(k,k+1) = Scalar(1);
|
|
215
|
+
A(k, k + 1) = Scalar(1);
|
|
229
216
|
|
|
230
217
|
// 6 - Compute x_k = tau_u * ( A*u_k - X_k-1*U_k-1^T*u_k - V_k*Y_k^T*u_k )
|
|
231
218
|
{
|
|
232
|
-
SubColumnType x_k
|
|
233
|
-
|
|
219
|
+
SubColumnType x_k(X.col(k).tail(remainingRows - 1));
|
|
220
|
+
|
|
234
221
|
// let's use the beginning of column k of X as a temporary vectors
|
|
235
222
|
// note that tmp0 and tmp1 overlaps
|
|
236
|
-
SubColumnType tmp0
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
x_k.noalias() -= A.block(k+1,0, remainingRows-1,k+1) * tmp1;
|
|
223
|
+
SubColumnType tmp0(X.col(k).head(k)), tmp1(X.col(k).head(k + 1));
|
|
224
|
+
|
|
225
|
+
x_k.noalias() = A.block(k + 1, k + 1, remainingRows - 1, remainingCols) * u_k.transpose(); // bottleneck
|
|
226
|
+
tmp0.noalias() = U_k1 * u_k.transpose();
|
|
227
|
+
x_k.noalias() -= X_k1.bottomRows(remainingRows - 1) * tmp0;
|
|
228
|
+
tmp1.noalias() = Y_k.adjoint() * u_k.transpose();
|
|
229
|
+
x_k.noalias() -= A.block(k + 1, 0, remainingRows - 1, k + 1) * tmp1;
|
|
244
230
|
x_k *= numext::conj(tau_u);
|
|
245
231
|
tau_u = numext::conj(tau_u);
|
|
246
232
|
u_k = u_k.conjugate();
|
|
247
233
|
}
|
|
248
234
|
|
|
249
|
-
if(k>0) A.coeffRef(k-1,k) = tau_u_prev;
|
|
235
|
+
if (k > 0) A.coeffRef(k - 1, k) = tau_u_prev;
|
|
250
236
|
tau_u_prev = tau_u;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
A.coeffRef(k-1,k) = tau_u_prev;
|
|
237
|
+
} else
|
|
238
|
+
A.coeffRef(k - 1, k) = tau_u_prev;
|
|
254
239
|
|
|
255
|
-
A.coeffRef(k,k) = tau_v;
|
|
240
|
+
A.coeffRef(k, k) = tau_v;
|
|
256
241
|
}
|
|
257
|
-
|
|
258
|
-
if(bs<bcols)
|
|
259
|
-
A.coeffRef(bs-1,bs) = tau_u_prev;
|
|
242
|
+
|
|
243
|
+
if (bs < bcols) A.coeffRef(bs - 1, bs) = tau_u_prev;
|
|
260
244
|
|
|
261
245
|
// update A22
|
|
262
|
-
if(bcols>bs && brows>bs)
|
|
263
|
-
|
|
264
|
-
SubMatType
|
|
265
|
-
SubMatType
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
A11.noalias() -=
|
|
270
|
-
|
|
271
|
-
A01(bs-1,0) = tmp;
|
|
246
|
+
if (bcols > bs && brows > bs) {
|
|
247
|
+
SubMatType A11(A.bottomRightCorner(brows - bs, bcols - bs));
|
|
248
|
+
SubMatType A10(A.block(bs, 0, brows - bs, bs));
|
|
249
|
+
SubMatType A01(A.block(0, bs, bs, bcols - bs));
|
|
250
|
+
Scalar tmp = A01(bs - 1, 0);
|
|
251
|
+
A01(bs - 1, 0) = Literal(1);
|
|
252
|
+
A11.noalias() -= A10 * Y.topLeftCorner(bcols, bs).bottomRows(bcols - bs).adjoint();
|
|
253
|
+
A11.noalias() -= X.topLeftCorner(brows, bs).bottomRows(brows - bs) * A01;
|
|
254
|
+
A01(bs - 1, 0) = tmp;
|
|
272
255
|
}
|
|
273
256
|
}
|
|
274
257
|
|
|
275
258
|
/** \internal
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
Index maxBlockSize=32,
|
|
286
|
-
typename MatrixType::Scalar* /*tempData*/ = 0)
|
|
287
|
-
{
|
|
259
|
+
*
|
|
260
|
+
* Implementation of a block-bidiagonal reduction.
|
|
261
|
+
* It is based on the following paper:
|
|
262
|
+
* The Design of a Parallel Dense Linear Algebra Software Library: Reduction to Hessenberg, Tridiagonal, and
|
|
263
|
+
* Bidiagonal Form. by Jaeyoung Choi, Jack J. Dongarra, David W. Walker. (1995) section 3.3
|
|
264
|
+
*/
|
|
265
|
+
template <typename MatrixType, typename BidiagType>
|
|
266
|
+
void upperbidiagonalization_inplace_blocked(MatrixType& A, BidiagType& bidiagonal, Index maxBlockSize = 32,
|
|
267
|
+
typename MatrixType::Scalar* /*tempData*/ = 0) {
|
|
288
268
|
typedef typename MatrixType::Scalar Scalar;
|
|
289
|
-
typedef Block<MatrixType,Dynamic,Dynamic> BlockType;
|
|
269
|
+
typedef Block<MatrixType, Dynamic, Dynamic> BlockType;
|
|
290
270
|
|
|
291
271
|
Index rows = A.rows();
|
|
292
272
|
Index cols = A.cols();
|
|
293
273
|
Index size = (std::min)(rows, cols);
|
|
294
274
|
|
|
295
275
|
// X and Y are work space
|
|
296
|
-
|
|
297
|
-
Matrix<Scalar,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
Matrix<Scalar,
|
|
303
|
-
MatrixType::ColsAtCompileTime,
|
|
304
|
-
Dynamic,
|
|
305
|
-
StorageOrder,
|
|
306
|
-
MatrixType::MaxColsAtCompileTime> Y(cols,maxBlockSize);
|
|
307
|
-
Index blockSize = (std::min)(maxBlockSize,size);
|
|
276
|
+
static constexpr int StorageOrder = (traits<MatrixType>::Flags & RowMajorBit) ? RowMajor : ColMajor;
|
|
277
|
+
Matrix<Scalar, MatrixType::RowsAtCompileTime, Dynamic, StorageOrder, MatrixType::MaxRowsAtCompileTime> X(
|
|
278
|
+
rows, maxBlockSize);
|
|
279
|
+
Matrix<Scalar, MatrixType::ColsAtCompileTime, Dynamic, StorageOrder, MatrixType::MaxColsAtCompileTime> Y(
|
|
280
|
+
cols, maxBlockSize);
|
|
281
|
+
Index blockSize = (std::min)(maxBlockSize, size);
|
|
308
282
|
|
|
309
283
|
Index k = 0;
|
|
310
|
-
for(k = 0; k < size; k += blockSize)
|
|
311
|
-
|
|
312
|
-
Index
|
|
313
|
-
Index
|
|
314
|
-
Index bcols = cols - k; // columns of the block
|
|
284
|
+
for (k = 0; k < size; k += blockSize) {
|
|
285
|
+
Index bs = (std::min)(size - k, blockSize); // actual size of the block
|
|
286
|
+
Index brows = rows - k; // rows of the block
|
|
287
|
+
Index bcols = cols - k; // columns of the block
|
|
315
288
|
|
|
316
289
|
// partition the matrix A:
|
|
317
|
-
//
|
|
290
|
+
//
|
|
318
291
|
// | A00 A01 A02 |
|
|
319
292
|
// | |
|
|
320
293
|
// A = | A10 A11 A12 |
|
|
@@ -327,37 +300,32 @@ void upperbidiagonalization_inplace_blocked(MatrixType& A, BidiagType& bidiagona
|
|
|
327
300
|
// B = | |
|
|
328
301
|
// | A21 A22 |
|
|
329
302
|
|
|
330
|
-
BlockType B = A.block(k,k,brows,bcols);
|
|
331
|
-
|
|
303
|
+
BlockType B = A.block(k, k, brows, bcols);
|
|
304
|
+
|
|
332
305
|
// This stage performs the bidiagonalization of A11, A21, A12, and updating of A22.
|
|
333
306
|
// Finally, the algorithm continue on the updated A22.
|
|
334
307
|
//
|
|
335
308
|
// However, if B is too small, or A22 empty, then let's use an unblocked strategy
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
);
|
|
343
|
-
break; // We're done
|
|
344
|
-
}
|
|
345
|
-
else
|
|
309
|
+
|
|
310
|
+
auto upper_diagonal = bidiagonal.template diagonal<1>();
|
|
311
|
+
typename MatrixType::RealScalar* upper_diagonal_ptr =
|
|
312
|
+
upper_diagonal.size() > 0 ? &upper_diagonal.coeffRef(k) : nullptr;
|
|
313
|
+
|
|
314
|
+
if (k + bs == cols || bcols < 48) // somewhat arbitrary threshold
|
|
346
315
|
{
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
316
|
+
upperbidiagonalization_inplace_unblocked(B, &(bidiagonal.template diagonal<0>().coeffRef(k)), upper_diagonal_ptr,
|
|
317
|
+
X.data());
|
|
318
|
+
break; // We're done
|
|
319
|
+
} else {
|
|
320
|
+
upperbidiagonalization_blocked_helper<BlockType>(B, &(bidiagonal.template diagonal<0>().coeffRef(k)),
|
|
321
|
+
upper_diagonal_ptr, bs, X.topLeftCorner(brows, bs),
|
|
322
|
+
Y.topLeftCorner(bcols, bs));
|
|
354
323
|
}
|
|
355
324
|
}
|
|
356
325
|
}
|
|
357
326
|
|
|
358
|
-
template<typename
|
|
359
|
-
UpperBidiagonalization<
|
|
360
|
-
{
|
|
327
|
+
template <typename MatrixType_>
|
|
328
|
+
UpperBidiagonalization<MatrixType_>& UpperBidiagonalization<MatrixType_>::computeUnblocked(const MatrixType_& matrix) {
|
|
361
329
|
Index rows = matrix.rows();
|
|
362
330
|
Index cols = matrix.cols();
|
|
363
331
|
EIGEN_ONLY_USED_FOR_DEBUG(cols);
|
|
@@ -368,18 +336,15 @@ UpperBidiagonalization<_MatrixType>& UpperBidiagonalization<_MatrixType>::comput
|
|
|
368
336
|
|
|
369
337
|
ColVectorType temp(rows);
|
|
370
338
|
|
|
371
|
-
upperbidiagonalization_inplace_unblocked(m_householder,
|
|
372
|
-
&(m_bidiagonal.template diagonal<
|
|
373
|
-
&(m_bidiagonal.template diagonal<1>().coeffRef(0)),
|
|
374
|
-
temp.data());
|
|
339
|
+
upperbidiagonalization_inplace_unblocked(m_householder, &(m_bidiagonal.template diagonal<0>().coeffRef(0)),
|
|
340
|
+
&(m_bidiagonal.template diagonal<1>().coeffRef(0)), temp.data());
|
|
375
341
|
|
|
376
342
|
m_isInitialized = true;
|
|
377
343
|
return *this;
|
|
378
344
|
}
|
|
379
345
|
|
|
380
|
-
template<typename
|
|
381
|
-
UpperBidiagonalization<
|
|
382
|
-
{
|
|
346
|
+
template <typename MatrixType_>
|
|
347
|
+
UpperBidiagonalization<MatrixType_>& UpperBidiagonalization<MatrixType_>::compute(const MatrixType_& matrix) {
|
|
383
348
|
Index rows = matrix.rows();
|
|
384
349
|
Index cols = matrix.cols();
|
|
385
350
|
EIGEN_ONLY_USED_FOR_DEBUG(rows);
|
|
@@ -389,7 +354,7 @@ UpperBidiagonalization<_MatrixType>& UpperBidiagonalization<_MatrixType>::comput
|
|
|
389
354
|
|
|
390
355
|
m_householder = matrix;
|
|
391
356
|
upperbidiagonalization_inplace_blocked(m_householder, m_bidiagonal);
|
|
392
|
-
|
|
357
|
+
|
|
393
358
|
m_isInitialized = true;
|
|
394
359
|
return *this;
|
|
395
360
|
}
|
|
@@ -407,8 +372,8 @@ MatrixBase<Derived>::bidiagonalization() const
|
|
|
407
372
|
}
|
|
408
373
|
#endif
|
|
409
374
|
|
|
410
|
-
}
|
|
375
|
+
} // end namespace internal
|
|
411
376
|
|
|
412
|
-
}
|
|
377
|
+
} // end namespace Eigen
|
|
413
378
|
|
|
414
|
-
#endif
|
|
379
|
+
#endif // EIGEN_BIDIAGONALIZATION_H
|