@smake/eigen 1.0.2 → 1.1.0
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/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +26 -0
- package/eigen/COPYING.GPL +674 -0
- package/eigen/COPYING.LGPL +502 -0
- package/eigen/COPYING.MINPACK +51 -0
- package/eigen/COPYING.MPL2 +373 -0
- package/eigen/COPYING.README +18 -0
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +5 -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/arch/CUDA/Half.h +0 -675
- 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/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -75,12 +75,12 @@ class MappedSuperNodalMatrix
|
|
|
75
75
|
/**
|
|
76
76
|
* Number of rows
|
|
77
77
|
*/
|
|
78
|
-
Index rows() { return m_row; }
|
|
78
|
+
Index rows() const { return m_row; }
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
81
|
* Number of columns
|
|
82
82
|
*/
|
|
83
|
-
Index cols() { return m_col; }
|
|
83
|
+
Index cols() const { return m_col; }
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Return the array of nonzero values packed by column
|
|
@@ -156,6 +156,9 @@ class MappedSuperNodalMatrix
|
|
|
156
156
|
class InnerIterator;
|
|
157
157
|
template<typename Dest>
|
|
158
158
|
void solveInPlace( MatrixBase<Dest>&X) const;
|
|
159
|
+
template<bool Conjugate, typename Dest>
|
|
160
|
+
void solveTransposedInPlace( MatrixBase<Dest>&X) const;
|
|
161
|
+
|
|
159
162
|
|
|
160
163
|
|
|
161
164
|
|
|
@@ -294,6 +297,77 @@ void MappedSuperNodalMatrix<Scalar,Index_>::solveInPlace( MatrixBase<Dest>&X) co
|
|
|
294
297
|
}
|
|
295
298
|
}
|
|
296
299
|
|
|
300
|
+
template<typename Scalar, typename Index_>
|
|
301
|
+
template<bool Conjugate, typename Dest>
|
|
302
|
+
void MappedSuperNodalMatrix<Scalar,Index_>::solveTransposedInPlace( MatrixBase<Dest>&X) const
|
|
303
|
+
{
|
|
304
|
+
using numext::conj;
|
|
305
|
+
Index n = int(X.rows());
|
|
306
|
+
Index nrhs = Index(X.cols());
|
|
307
|
+
const Scalar * Lval = valuePtr(); // Nonzero values
|
|
308
|
+
Matrix<Scalar,Dynamic,Dest::ColsAtCompileTime, ColMajor> work(n, nrhs); // working vector
|
|
309
|
+
work.setZero();
|
|
310
|
+
for (Index k = nsuper(); k >= 0; k--)
|
|
311
|
+
{
|
|
312
|
+
Index fsupc = supToCol()[k]; // First column of the current supernode
|
|
313
|
+
Index istart = rowIndexPtr()[fsupc]; // Pointer index to the subscript of the current column
|
|
314
|
+
Index nsupr = rowIndexPtr()[fsupc+1] - istart; // Number of rows in the current supernode
|
|
315
|
+
Index nsupc = supToCol()[k+1] - fsupc; // Number of columns in the current supernode
|
|
316
|
+
Index nrow = nsupr - nsupc; // Number of rows in the non-diagonal part of the supernode
|
|
317
|
+
Index irow; //Current index row
|
|
318
|
+
|
|
319
|
+
if (nsupc == 1 )
|
|
320
|
+
{
|
|
321
|
+
for (Index j = 0; j < nrhs; j++)
|
|
322
|
+
{
|
|
323
|
+
InnerIterator it(*this, fsupc);
|
|
324
|
+
++it; // Skip the diagonal element
|
|
325
|
+
for (; it; ++it)
|
|
326
|
+
{
|
|
327
|
+
irow = it.row();
|
|
328
|
+
X(fsupc,j) -= X(irow, j) * (Conjugate?conj(it.value()):it.value());
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else
|
|
333
|
+
{
|
|
334
|
+
// The supernode has more than one column
|
|
335
|
+
Index luptr = colIndexPtr()[fsupc];
|
|
336
|
+
Index lda = colIndexPtr()[fsupc+1] - luptr;
|
|
337
|
+
|
|
338
|
+
//Begin Gather
|
|
339
|
+
for (Index j = 0; j < nrhs; j++)
|
|
340
|
+
{
|
|
341
|
+
Index iptr = istart + nsupc;
|
|
342
|
+
for (Index i = 0; i < nrow; i++)
|
|
343
|
+
{
|
|
344
|
+
irow = rowIndex()[iptr];
|
|
345
|
+
work.topRows(nrow)(i,j)= X(irow,j); // Gather operation
|
|
346
|
+
iptr++;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Matrix-vector product with transposed submatrix
|
|
351
|
+
Map<const Matrix<Scalar,Dynamic,Dynamic, ColMajor>, 0, OuterStride<> > A( &(Lval[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) );
|
|
352
|
+
Map< Matrix<Scalar,Dynamic,Dest::ColsAtCompileTime, ColMajor>, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) );
|
|
353
|
+
if(Conjugate)
|
|
354
|
+
U = U - A.adjoint() * work.topRows(nrow);
|
|
355
|
+
else
|
|
356
|
+
U = U - A.transpose() * work.topRows(nrow);
|
|
357
|
+
|
|
358
|
+
// Triangular solve (of transposed diagonal block)
|
|
359
|
+
new (&A) Map<const Matrix<Scalar,Dynamic,Dynamic, ColMajor>, 0, OuterStride<> > ( &(Lval[luptr]), nsupc, nsupc, OuterStride<>(lda) );
|
|
360
|
+
if(Conjugate)
|
|
361
|
+
U = A.adjoint().template triangularView<UnitUpper>().solve(U);
|
|
362
|
+
else
|
|
363
|
+
U = A.transpose().template triangularView<UnitUpper>().solve(U);
|
|
364
|
+
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
|
|
297
371
|
} // end namespace internal
|
|
298
372
|
|
|
299
373
|
} // end namespace Eigen
|
|
@@ -151,7 +151,7 @@ Index SparseLUImpl<Scalar,StorageIndex>::column_dfs(const Index m, const Index j
|
|
|
151
151
|
StorageIndex ito = glu.xlsub(fsupc+1);
|
|
152
152
|
glu.xlsub(jcolm1) = ito;
|
|
153
153
|
StorageIndex istop = ito + jptr - jm1ptr;
|
|
154
|
-
xprune(jcolm1) = istop; //
|
|
154
|
+
xprune(jcolm1) = istop; // initialize xprune(jcol-1)
|
|
155
155
|
glu.xlsub(jcol) = istop;
|
|
156
156
|
|
|
157
157
|
for (StorageIndex ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
|
|
@@ -166,7 +166,7 @@ Index SparseLUImpl<Scalar,StorageIndex>::column_dfs(const Index m, const Index j
|
|
|
166
166
|
// Tidy up the pointers before exit
|
|
167
167
|
glu.xsup(nsuper+1) = jcolp1;
|
|
168
168
|
glu.supno(jcolp1) = nsuper;
|
|
169
|
-
xprune(jcol) = StorageIndex(nextl); //
|
|
169
|
+
xprune(jcol) = StorageIndex(nextl); // Initialize upper bound for pruning
|
|
170
170
|
glu.xlsub(jcolp1) = StorageIndex(nextl);
|
|
171
171
|
|
|
172
172
|
return 0;
|
|
@@ -215,7 +215,7 @@ void sparselu_gemm(Index m, Index n, Index d, const Scalar* A, Index lda, const
|
|
|
215
215
|
if(RK==4){ a3 = pload<Packet>(A3+i+(I+1)*PacketSize); }\
|
|
216
216
|
pstore(C0+i+(I)*PacketSize, c0);
|
|
217
217
|
|
|
218
|
-
//
|
|
218
|
+
// aggressive vectorization and peeling
|
|
219
219
|
for(Index i=0; i<actual_b_end1; i+=PacketSize*8)
|
|
220
220
|
{
|
|
221
221
|
EIGEN_ASM_COMMENT("SPARSELU_GEMML_KERNEL2");
|
|
@@ -38,7 +38,7 @@ namespace internal {
|
|
|
38
38
|
* \brief Performs numeric block updates (sup-panel) in topological order.
|
|
39
39
|
*
|
|
40
40
|
* Before entering this routine, the original nonzeros in the panel
|
|
41
|
-
* were already copied
|
|
41
|
+
* were already copied into the spa[m,w]
|
|
42
42
|
*
|
|
43
43
|
* \param m number of rows in the matrix
|
|
44
44
|
* \param w Panel size
|
|
@@ -41,15 +41,16 @@ namespace internal {
|
|
|
41
41
|
/**
|
|
42
42
|
* \ingroup SparseQR_Module
|
|
43
43
|
* \class SparseQR
|
|
44
|
-
* \brief Sparse left-looking
|
|
44
|
+
* \brief Sparse left-looking QR factorization with numerical column pivoting
|
|
45
45
|
*
|
|
46
|
-
* This class implements a left-looking
|
|
47
|
-
*
|
|
46
|
+
* This class implements a left-looking QR decomposition of sparse matrices
|
|
47
|
+
* with numerical column pivoting.
|
|
48
|
+
* When a column has a norm less than a given tolerance
|
|
48
49
|
* it is implicitly permuted to the end. The QR factorization thus obtained is
|
|
49
50
|
* given by A*P = Q*R where R is upper triangular or trapezoidal.
|
|
50
51
|
*
|
|
51
52
|
* P is the column permutation which is the product of the fill-reducing and the
|
|
52
|
-
*
|
|
53
|
+
* numerical permutations. Use colsPermutation() to get it.
|
|
53
54
|
*
|
|
54
55
|
* Q is the orthogonal matrix represented as products of Householder reflectors.
|
|
55
56
|
* Use matrixQ() to get an expression and matrixQ().adjoint() to get the adjoint.
|
|
@@ -64,6 +65,17 @@ namespace internal {
|
|
|
64
65
|
*
|
|
65
66
|
* \implsparsesolverconcept
|
|
66
67
|
*
|
|
68
|
+
* The numerical pivoting strategy and default threshold are the same as in SuiteSparse QR, and
|
|
69
|
+
* detailed in the following paper:
|
|
70
|
+
* <i>
|
|
71
|
+
* Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing
|
|
72
|
+
* Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011.
|
|
73
|
+
* </i>
|
|
74
|
+
* Even though it is qualified as "rank-revealing", this strategy might fail for some
|
|
75
|
+
* rank deficient problems. When this class is used to solve linear or least-square problems
|
|
76
|
+
* it is thus strongly recommended to check the accuracy of the computed solution. If it
|
|
77
|
+
* failed, it usually helps to increase the threshold with setPivotThreshold.
|
|
78
|
+
*
|
|
67
79
|
* \warning The input sparse matrix A must be in compressed mode (see SparseMatrix::makeCompressed()).
|
|
68
80
|
* \warning For complex matrices matrixQ().transpose() will actually return the adjoint matrix.
|
|
69
81
|
*
|
|
@@ -331,7 +343,7 @@ void SparseQR<MatrixType,OrderingType>::analyzePattern(const MatrixType& mat)
|
|
|
331
343
|
m_R.resize(m, n);
|
|
332
344
|
m_Q.resize(m, diagSize);
|
|
333
345
|
|
|
334
|
-
// Allocate space for nonzero elements
|
|
346
|
+
// Allocate space for nonzero elements: rough estimation
|
|
335
347
|
m_R.reserve(2*mat.nonZeros()); //FIXME Get a more accurate estimation through symbolic factorization with the etree
|
|
336
348
|
m_Q.reserve(2*mat.nonZeros());
|
|
337
349
|
m_hcoeffs.resize(diagSize);
|
|
@@ -640,7 +652,8 @@ struct SparseQR_QProduct : ReturnByValue<SparseQR_QProduct<SparseQRType, Derived
|
|
|
640
652
|
// Compute res = Q * other column by column
|
|
641
653
|
for(Index j = 0; j < res.cols(); j++)
|
|
642
654
|
{
|
|
643
|
-
|
|
655
|
+
Index start_k = internal::is_identity<Derived>::value ? numext::mini(j,diagSize-1) : diagSize-1;
|
|
656
|
+
for (Index k = start_k; k >=0; k--)
|
|
644
657
|
{
|
|
645
658
|
Scalar tau = Scalar(0);
|
|
646
659
|
tau = m_qr.m_Q.col(k).dot(res.col(j));
|
|
@@ -36,7 +36,7 @@ namespace std \
|
|
|
36
36
|
deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : deque_base(first, last, a) {} \
|
|
37
37
|
deque(const deque& c) : deque_base(c) {} \
|
|
38
38
|
explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \
|
|
39
|
-
deque(iterator
|
|
39
|
+
deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
|
|
40
40
|
deque& operator=(const deque& x) { \
|
|
41
41
|
deque_base::operator=(x); \
|
|
42
42
|
return *this; \
|
|
@@ -62,7 +62,7 @@ namespace std {
|
|
|
62
62
|
: deque_base(first, last, a) {} \
|
|
63
63
|
deque(const deque& c) : deque_base(c) {} \
|
|
64
64
|
explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \
|
|
65
|
-
deque(iterator
|
|
65
|
+
deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
|
|
66
66
|
deque& operator=(const deque& x) { \
|
|
67
67
|
deque_base::operator=(x); \
|
|
68
68
|
return *this; \
|
|
@@ -98,19 +98,7 @@ namespace std {
|
|
|
98
98
|
{ return deque_base::insert(position,x); }
|
|
99
99
|
void insert(const_iterator position, size_type new_size, const value_type& x)
|
|
100
100
|
{ deque_base::insert(position, new_size, x); }
|
|
101
|
-
#elif defined(_GLIBCXX_DEQUE) && EIGEN_GNUC_AT_LEAST(4,2) && !EIGEN_GNUC_AT_LEAST(10, 1)
|
|
102
|
-
// workaround GCC std::deque implementation
|
|
103
|
-
// GCC 10.1 doesn't let us access _Deque_impl _M_impl anymore and we have to
|
|
104
|
-
// fall-back to the default case
|
|
105
|
-
void resize(size_type new_size, const value_type& x)
|
|
106
|
-
{
|
|
107
|
-
if (new_size < deque_base::size())
|
|
108
|
-
deque_base::_M_erase_at_end(this->_M_impl._M_start + new_size);
|
|
109
|
-
else
|
|
110
|
-
deque_base::insert(deque_base::end(), new_size - deque_base::size(), x);
|
|
111
|
-
}
|
|
112
101
|
#else
|
|
113
|
-
// either non-GCC or GCC between 4.1 and 10.1
|
|
114
102
|
// default implementation which should always work.
|
|
115
103
|
void resize(size_type new_size, const value_type& x)
|
|
116
104
|
{
|
|
@@ -35,7 +35,7 @@ namespace std \
|
|
|
35
35
|
list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : list_base(first, last, a) {} \
|
|
36
36
|
list(const list& c) : list_base(c) {} \
|
|
37
37
|
explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \
|
|
38
|
-
list(iterator
|
|
38
|
+
list(iterator start_, iterator end_) : list_base(start_, end_) {} \
|
|
39
39
|
list& operator=(const list& x) { \
|
|
40
40
|
list_base::operator=(x); \
|
|
41
41
|
return *this; \
|
|
@@ -62,7 +62,7 @@ namespace std
|
|
|
62
62
|
: list_base(first, last, a) {} \
|
|
63
63
|
list(const list& c) : list_base(c) {} \
|
|
64
64
|
explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \
|
|
65
|
-
list(iterator
|
|
65
|
+
list(iterator start_, iterator end_) : list_base(start_, end_) {} \
|
|
66
66
|
list& operator=(const list& x) { \
|
|
67
67
|
list_base::operator=(x); \
|
|
68
68
|
return *this; \
|
|
@@ -36,7 +36,7 @@ namespace std \
|
|
|
36
36
|
vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : vector_base(first, last, a) {} \
|
|
37
37
|
vector(const vector& c) : vector_base(c) {} \
|
|
38
38
|
explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \
|
|
39
|
-
vector(iterator
|
|
39
|
+
vector(iterator start_, iterator end_) : vector_base(start_, end_) {} \
|
|
40
40
|
vector& operator=(const vector& x) { \
|
|
41
41
|
vector_base::operator=(x); \
|
|
42
42
|
return *this; \
|
|
@@ -62,7 +62,7 @@ namespace std {
|
|
|
62
62
|
: vector_base(first, last, a) {} \
|
|
63
63
|
vector(const vector& c) : vector_base(c) {} \
|
|
64
64
|
explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \
|
|
65
|
-
vector(iterator
|
|
65
|
+
vector(iterator start_, iterator end_) : vector_base(start_, end_) {} \
|
|
66
66
|
vector& operator=(const vector& x) { \
|
|
67
67
|
vector_base::operator=(x); \
|
|
68
68
|
return *this; \
|
|
@@ -217,12 +217,12 @@ struct SluMatrix : SuperMatrix
|
|
|
217
217
|
res.setScalarType<typename MatrixType::Scalar>();
|
|
218
218
|
|
|
219
219
|
// FIXME the following is not very accurate
|
|
220
|
-
if (MatrixType::Flags & Upper)
|
|
220
|
+
if (int(MatrixType::Flags) & int(Upper))
|
|
221
221
|
res.Mtype = SLU_TRU;
|
|
222
|
-
if (MatrixType::Flags & Lower)
|
|
222
|
+
if (int(MatrixType::Flags) & int(Lower))
|
|
223
223
|
res.Mtype = SLU_TRL;
|
|
224
224
|
|
|
225
|
-
eigen_assert(((MatrixType::Flags & SelfAdjoint)==0) && "SelfAdjoint matrix shape not supported by SuperLU");
|
|
225
|
+
eigen_assert(((int(MatrixType::Flags) & int(SelfAdjoint))==0) && "SelfAdjoint matrix shape not supported by SuperLU");
|
|
226
226
|
|
|
227
227
|
return res;
|
|
228
228
|
}
|
|
@@ -352,7 +352,7 @@ class SuperLUBase : public SparseSolverBase<Derived>
|
|
|
352
352
|
|
|
353
353
|
/** \brief Reports whether previous computation was successful.
|
|
354
354
|
*
|
|
355
|
-
* \returns \c Success if computation was
|
|
355
|
+
* \returns \c Success if computation was successful,
|
|
356
356
|
* \c NumericalIssue if the matrix.appears to be negative.
|
|
357
357
|
*/
|
|
358
358
|
ComputationInfo info() const
|
|
@@ -650,9 +650,8 @@ void SuperLU<MatrixType>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest>
|
|
|
650
650
|
{
|
|
651
651
|
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or analyzePattern()/factorize()");
|
|
652
652
|
|
|
653
|
-
const Index size = m_matrix.rows();
|
|
654
653
|
const Index rhsCols = b.cols();
|
|
655
|
-
eigen_assert(
|
|
654
|
+
eigen_assert(m_matrix.rows()==b.rows());
|
|
656
655
|
|
|
657
656
|
m_sluOptions.Trans = NOTRANS;
|
|
658
657
|
m_sluOptions.Fact = FACTORED;
|
|
@@ -974,9 +973,8 @@ void SuperILU<MatrixType>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest
|
|
|
974
973
|
{
|
|
975
974
|
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or analyzePattern()/factorize()");
|
|
976
975
|
|
|
977
|
-
const int size = m_matrix.rows();
|
|
978
976
|
const int rhsCols = b.cols();
|
|
979
|
-
eigen_assert(
|
|
977
|
+
eigen_assert(m_matrix.rows()==b.rows());
|
|
980
978
|
|
|
981
979
|
m_sluOptions.Trans = NOTRANS;
|
|
982
980
|
m_sluOptions.Fact = FACTORED;
|