@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
|
@@ -10,469 +10,523 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSEVECTOR_H
|
|
11
11
|
#define EIGEN_SPARSEVECTOR_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
/** \ingroup SparseCore_Module
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
* \class SparseVector
|
|
20
|
+
*
|
|
21
|
+
* \brief a sparse vector class
|
|
22
|
+
*
|
|
23
|
+
* \tparam Scalar_ the scalar type, i.e. the type of the coefficients
|
|
24
|
+
*
|
|
25
|
+
* See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.
|
|
26
|
+
*
|
|
27
|
+
* This class can be extended with the help of the plugin mechanism described on the page
|
|
28
|
+
* \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_SPARSEVECTOR_PLUGIN.
|
|
29
|
+
*/
|
|
27
30
|
|
|
28
31
|
namespace internal {
|
|
29
|
-
template<typename
|
|
30
|
-
struct traits<SparseVector<
|
|
31
|
-
|
|
32
|
-
typedef
|
|
33
|
-
typedef _StorageIndex StorageIndex;
|
|
32
|
+
template <typename Scalar_, int Options_, typename StorageIndex_>
|
|
33
|
+
struct traits<SparseVector<Scalar_, Options_, StorageIndex_> > {
|
|
34
|
+
typedef Scalar_ Scalar;
|
|
35
|
+
typedef StorageIndex_ StorageIndex;
|
|
34
36
|
typedef Sparse StorageKind;
|
|
35
37
|
typedef MatrixXpr XprKind;
|
|
36
38
|
enum {
|
|
37
|
-
IsColVector = (
|
|
39
|
+
IsColVector = (Options_ & RowMajorBit) ? 0 : 1,
|
|
38
40
|
|
|
39
41
|
RowsAtCompileTime = IsColVector ? Dynamic : 1,
|
|
40
42
|
ColsAtCompileTime = IsColVector ? 1 : Dynamic,
|
|
41
43
|
MaxRowsAtCompileTime = RowsAtCompileTime,
|
|
42
44
|
MaxColsAtCompileTime = ColsAtCompileTime,
|
|
43
|
-
Flags =
|
|
45
|
+
Flags = Options_ | NestByRefBit | LvalueBit | (IsColVector ? 0 : RowMajorBit) | CompressedAccessBit,
|
|
44
46
|
SupportedAccessPatterns = InnerRandomAccessPattern
|
|
45
47
|
};
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
// Sparse-Vector-Assignment kinds:
|
|
49
|
-
enum {
|
|
50
|
-
SVA_RuntimeSwitch,
|
|
51
|
-
SVA_Inner,
|
|
52
|
-
SVA_Outer
|
|
53
|
-
};
|
|
51
|
+
enum { SVA_RuntimeSwitch, SVA_Inner, SVA_Outer };
|
|
54
52
|
|
|
55
|
-
template<
|
|
56
|
-
int AssignmentKind = !bool(Src::IsVectorAtCompileTime)
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
template <typename Dest, typename Src,
|
|
54
|
+
int AssignmentKind = !bool(Src::IsVectorAtCompileTime) ? SVA_RuntimeSwitch
|
|
55
|
+
: Src::InnerSizeAtCompileTime == 1 ? SVA_Outer
|
|
56
|
+
: SVA_Inner>
|
|
59
57
|
struct sparse_vector_assign_selector;
|
|
60
58
|
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
template<typename _Scalar, int _Options, typename _StorageIndex>
|
|
64
|
-
class SparseVector
|
|
65
|
-
: public SparseCompressedBase<SparseVector<_Scalar, _Options, _StorageIndex> >
|
|
66
|
-
{
|
|
67
|
-
typedef SparseCompressedBase<SparseVector> Base;
|
|
68
|
-
using Base::convert_index;
|
|
69
|
-
public:
|
|
70
|
-
EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
|
|
71
|
-
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
|
|
72
|
-
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
|
|
73
|
-
|
|
74
|
-
typedef internal::CompressedStorage<Scalar,StorageIndex> Storage;
|
|
75
|
-
enum { IsColVector = internal::traits<SparseVector>::IsColVector };
|
|
76
|
-
|
|
77
|
-
enum {
|
|
78
|
-
Options = _Options
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
|
|
82
|
-
EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
|
|
83
|
-
EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
|
|
84
|
-
EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
|
|
85
|
-
|
|
86
|
-
EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return m_data.valuePtr(); }
|
|
87
|
-
EIGEN_STRONG_INLINE Scalar* valuePtr() { return m_data.valuePtr(); }
|
|
88
|
-
|
|
89
|
-
EIGEN_STRONG_INLINE const StorageIndex* innerIndexPtr() const { return m_data.indexPtr(); }
|
|
90
|
-
EIGEN_STRONG_INLINE StorageIndex* innerIndexPtr() { return m_data.indexPtr(); }
|
|
91
|
-
|
|
92
|
-
inline const StorageIndex* outerIndexPtr() const { return 0; }
|
|
93
|
-
inline StorageIndex* outerIndexPtr() { return 0; }
|
|
94
|
-
inline const StorageIndex* innerNonZeroPtr() const { return 0; }
|
|
95
|
-
inline StorageIndex* innerNonZeroPtr() { return 0; }
|
|
96
|
-
|
|
97
|
-
/** \internal */
|
|
98
|
-
inline Storage& data() { return m_data; }
|
|
99
|
-
/** \internal */
|
|
100
|
-
inline const Storage& data() const { return m_data; }
|
|
101
|
-
|
|
102
|
-
inline Scalar coeff(Index row, Index col) const
|
|
103
|
-
{
|
|
104
|
-
eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
|
|
105
|
-
return coeff(IsColVector ? row : col);
|
|
106
|
-
}
|
|
107
|
-
inline Scalar coeff(Index i) const
|
|
108
|
-
{
|
|
109
|
-
eigen_assert(i>=0 && i<m_size);
|
|
110
|
-
return m_data.at(StorageIndex(i));
|
|
111
|
-
}
|
|
59
|
+
} // namespace internal
|
|
112
60
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
61
|
+
template <typename Scalar_, int Options_, typename StorageIndex_>
|
|
62
|
+
class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_, StorageIndex_> > {
|
|
63
|
+
typedef SparseCompressedBase<SparseVector> Base;
|
|
64
|
+
using Base::convert_index;
|
|
118
65
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
* This insertion might be very costly if the number of nonzeros above \a i is large.
|
|
124
|
-
*/
|
|
125
|
-
inline Scalar& coeffRef(Index i)
|
|
126
|
-
{
|
|
127
|
-
eigen_assert(i>=0 && i<m_size);
|
|
128
|
-
|
|
129
|
-
return m_data.atWithInsertion(StorageIndex(i));
|
|
130
|
-
}
|
|
66
|
+
public:
|
|
67
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
|
|
68
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
|
|
69
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
|
|
131
70
|
|
|
132
|
-
|
|
71
|
+
typedef internal::CompressedStorage<Scalar, StorageIndex> Storage;
|
|
72
|
+
enum { IsColVector = internal::traits<SparseVector>::IsColVector };
|
|
133
73
|
|
|
134
|
-
|
|
135
|
-
typedef typename Base::ReverseInnerIterator ReverseInnerIterator;
|
|
74
|
+
enum { Options = Options_ };
|
|
136
75
|
|
|
137
|
-
|
|
76
|
+
EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
|
|
77
|
+
EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
|
|
78
|
+
EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
|
|
79
|
+
EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
|
|
138
80
|
|
|
139
|
-
|
|
140
|
-
|
|
81
|
+
EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return m_data.valuePtr(); }
|
|
82
|
+
EIGEN_STRONG_INLINE Scalar* valuePtr() { return m_data.valuePtr(); }
|
|
141
83
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
EIGEN_UNUSED_VARIABLE(outer);
|
|
145
|
-
eigen_assert(outer==0);
|
|
146
|
-
}
|
|
84
|
+
EIGEN_STRONG_INLINE const StorageIndex* innerIndexPtr() const { return m_data.indexPtr(); }
|
|
85
|
+
EIGEN_STRONG_INLINE StorageIndex* innerIndexPtr() { return m_data.indexPtr(); }
|
|
147
86
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return insertBack(inner);
|
|
153
|
-
}
|
|
154
|
-
inline Scalar& insertBack(Index i)
|
|
155
|
-
{
|
|
156
|
-
m_data.append(0, i);
|
|
157
|
-
return m_data.value(m_data.size()-1);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
Scalar& insertBackByOuterInnerUnordered(Index outer, Index inner)
|
|
161
|
-
{
|
|
162
|
-
EIGEN_UNUSED_VARIABLE(outer);
|
|
163
|
-
eigen_assert(outer==0);
|
|
164
|
-
return insertBackUnordered(inner);
|
|
165
|
-
}
|
|
166
|
-
inline Scalar& insertBackUnordered(Index i)
|
|
167
|
-
{
|
|
168
|
-
m_data.append(0, i);
|
|
169
|
-
return m_data.value(m_data.size()-1);
|
|
170
|
-
}
|
|
87
|
+
inline const StorageIndex* outerIndexPtr() const { return 0; }
|
|
88
|
+
inline StorageIndex* outerIndexPtr() { return 0; }
|
|
89
|
+
inline const StorageIndex* innerNonZeroPtr() const { return 0; }
|
|
90
|
+
inline StorageIndex* innerNonZeroPtr() { return 0; }
|
|
171
91
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
Index inner = IsColVector ? row : col;
|
|
177
|
-
Index outer = IsColVector ? col : row;
|
|
178
|
-
EIGEN_ONLY_USED_FOR_DEBUG(outer);
|
|
179
|
-
eigen_assert(outer==0);
|
|
180
|
-
return insert(inner);
|
|
181
|
-
}
|
|
182
|
-
Scalar& insert(Index i)
|
|
183
|
-
{
|
|
184
|
-
eigen_assert(i>=0 && i<m_size);
|
|
185
|
-
|
|
186
|
-
Index startId = 0;
|
|
187
|
-
Index p = Index(m_data.size()) - 1;
|
|
188
|
-
// TODO smart realloc
|
|
189
|
-
m_data.resize(p+2,1);
|
|
190
|
-
|
|
191
|
-
while ( (p >= startId) && (m_data.index(p) > i) )
|
|
192
|
-
{
|
|
193
|
-
m_data.index(p+1) = m_data.index(p);
|
|
194
|
-
m_data.value(p+1) = m_data.value(p);
|
|
195
|
-
--p;
|
|
196
|
-
}
|
|
197
|
-
m_data.index(p+1) = convert_index(i);
|
|
198
|
-
m_data.value(p+1) = 0;
|
|
199
|
-
return m_data.value(p+1);
|
|
200
|
-
}
|
|
92
|
+
/** \internal */
|
|
93
|
+
constexpr Storage& data() { return m_data; }
|
|
94
|
+
/** \internal */
|
|
95
|
+
constexpr const Storage& data() const { return m_data; }
|
|
201
96
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
97
|
+
inline Scalar coeff(Index row, Index col) const {
|
|
98
|
+
eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
|
|
99
|
+
return coeff(IsColVector ? row : col);
|
|
100
|
+
}
|
|
101
|
+
inline Scalar coeff(Index i) const {
|
|
102
|
+
eigen_assert(i >= 0 && i < m_size);
|
|
103
|
+
return m_data.at(StorageIndex(i));
|
|
104
|
+
}
|
|
205
105
|
|
|
106
|
+
inline Scalar& coeffRef(Index row, Index col) {
|
|
107
|
+
eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
|
|
108
|
+
return coeffRef(IsColVector ? row : col);
|
|
109
|
+
}
|
|
206
110
|
|
|
207
|
-
|
|
111
|
+
/** \returns a reference to the coefficient value at given index \a i
|
|
112
|
+
* This operation involves a log(rho*size) binary search. If the coefficient does not
|
|
113
|
+
* exist yet, then a sorted insertion into a sequential buffer is performed.
|
|
114
|
+
*
|
|
115
|
+
* This insertion might be very costly if the number of nonzeros above \a i is large.
|
|
116
|
+
*/
|
|
117
|
+
inline Scalar& coeffRef(Index i) {
|
|
118
|
+
eigen_assert(i >= 0 && i < m_size);
|
|
208
119
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
{
|
|
212
|
-
m_data.prune(reference,epsilon);
|
|
213
|
-
}
|
|
120
|
+
return m_data.atWithInsertion(StorageIndex(i));
|
|
121
|
+
}
|
|
214
122
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
* For a column vector, \a cols must be equal to 1.
|
|
219
|
-
* For a row vector, \a rows must be equal to 1.
|
|
220
|
-
*
|
|
221
|
-
* \sa resize(Index)
|
|
222
|
-
*/
|
|
223
|
-
void resize(Index rows, Index cols)
|
|
224
|
-
{
|
|
225
|
-
eigen_assert((IsColVector ? cols : rows)==1 && "Outer dimension must equal 1");
|
|
226
|
-
resize(IsColVector ? rows : cols);
|
|
227
|
-
}
|
|
123
|
+
public:
|
|
124
|
+
typedef typename Base::InnerIterator InnerIterator;
|
|
125
|
+
typedef typename Base::ReverseInnerIterator ReverseInnerIterator;
|
|
228
126
|
|
|
229
|
-
|
|
230
|
-
* This method deletes all entries, thus leaving an empty sparse vector
|
|
231
|
-
*
|
|
232
|
-
* \sa conservativeResize(), setZero() */
|
|
233
|
-
void resize(Index newSize)
|
|
234
|
-
{
|
|
235
|
-
m_size = newSize;
|
|
236
|
-
m_data.clear();
|
|
237
|
-
}
|
|
127
|
+
inline void setZero() { m_data.clear(); }
|
|
238
128
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
* If the size of the vector is decreased, then the storage of the out-of bounds coefficients is kept and reserved.
|
|
242
|
-
* Call .data().squeeze() to free extra memory.
|
|
243
|
-
*
|
|
244
|
-
* \sa reserve(), setZero()
|
|
245
|
-
*/
|
|
246
|
-
void conservativeResize(Index newSize)
|
|
247
|
-
{
|
|
248
|
-
if (newSize < m_size)
|
|
249
|
-
{
|
|
250
|
-
Index i = 0;
|
|
251
|
-
while (i<m_data.size() && m_data.index(i)<newSize) ++i;
|
|
252
|
-
m_data.resize(i);
|
|
253
|
-
}
|
|
254
|
-
m_size = newSize;
|
|
255
|
-
}
|
|
129
|
+
/** \returns the number of non zero coefficients */
|
|
130
|
+
inline Index nonZeros() const { return m_data.size(); }
|
|
256
131
|
|
|
257
|
-
|
|
132
|
+
inline void startVec(Index outer) {
|
|
133
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
134
|
+
eigen_assert(outer == 0);
|
|
135
|
+
}
|
|
258
136
|
|
|
259
|
-
|
|
137
|
+
inline Scalar& insertBackByOuterInner(Index outer, Index inner) {
|
|
138
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
139
|
+
eigen_assert(outer == 0);
|
|
140
|
+
return insertBack(inner);
|
|
141
|
+
}
|
|
142
|
+
inline Scalar& insertBack(Index i) {
|
|
143
|
+
m_data.append(Scalar(0), i);
|
|
144
|
+
return m_data.value(m_data.size() - 1);
|
|
145
|
+
}
|
|
260
146
|
|
|
261
|
-
|
|
147
|
+
Scalar& insertBackByOuterInnerUnordered(Index outer, Index inner) {
|
|
148
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
149
|
+
eigen_assert(outer == 0);
|
|
150
|
+
return insertBackUnordered(inner);
|
|
151
|
+
}
|
|
152
|
+
inline Scalar& insertBackUnordered(Index i) {
|
|
153
|
+
m_data.append(Scalar(0), i);
|
|
154
|
+
return m_data.value(m_data.size() - 1);
|
|
155
|
+
}
|
|
262
156
|
|
|
263
|
-
|
|
157
|
+
inline Scalar& insert(Index row, Index col) {
|
|
158
|
+
eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
|
|
264
159
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
160
|
+
Index inner = IsColVector ? row : col;
|
|
161
|
+
Index outer = IsColVector ? col : row;
|
|
162
|
+
EIGEN_ONLY_USED_FOR_DEBUG(outer);
|
|
163
|
+
eigen_assert(outer == 0);
|
|
164
|
+
return insert(inner);
|
|
165
|
+
}
|
|
166
|
+
Scalar& insert(Index i) {
|
|
167
|
+
eigen_assert(i >= 0 && i < m_size);
|
|
168
|
+
|
|
169
|
+
Index startId = 0;
|
|
170
|
+
Index p = Index(m_data.size()) - 1;
|
|
171
|
+
// TODO smart realloc
|
|
172
|
+
m_data.resize(p + 2, 1);
|
|
173
|
+
|
|
174
|
+
while ((p >= startId) && (m_data.index(p) > i)) {
|
|
175
|
+
m_data.index(p + 1) = m_data.index(p);
|
|
176
|
+
m_data.value(p + 1) = m_data.value(p);
|
|
177
|
+
--p;
|
|
274
178
|
}
|
|
179
|
+
m_data.index(p + 1) = convert_index(i);
|
|
180
|
+
m_data.value(p + 1) = Scalar(0);
|
|
181
|
+
return m_data.value(p + 1);
|
|
182
|
+
}
|
|
275
183
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
check_template_parameters();
|
|
280
|
-
*this = other.derived();
|
|
281
|
-
}
|
|
184
|
+
/**
|
|
185
|
+
*/
|
|
186
|
+
inline void reserve(Index reserveSize) { m_data.reserve(reserveSize); }
|
|
282
187
|
|
|
283
|
-
|
|
284
|
-
* Overloaded for performance: this version performs a \em shallow swap by swaping pointers and attributes only.
|
|
285
|
-
* \sa SparseMatrixBase::swap()
|
|
286
|
-
*/
|
|
287
|
-
inline void swap(SparseVector& other)
|
|
288
|
-
{
|
|
289
|
-
std::swap(m_size, other.m_size);
|
|
290
|
-
m_data.swap(other.m_data);
|
|
291
|
-
}
|
|
188
|
+
inline void finalize() {}
|
|
292
189
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
{
|
|
296
|
-
|
|
297
|
-
std::swap(m_size, other.m_innerSize);
|
|
298
|
-
m_data.swap(other.m_data);
|
|
299
|
-
}
|
|
190
|
+
/** \copydoc SparseMatrix::prune(const Scalar&,const RealScalar&) */
|
|
191
|
+
Index prune(const Scalar& reference, const RealScalar& epsilon = NumTraits<RealScalar>::dummy_precision()) {
|
|
192
|
+
return prune([&](const Scalar& val) { return !internal::isMuchSmallerThan(val, reference, epsilon); });
|
|
193
|
+
}
|
|
300
194
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
195
|
+
/**
|
|
196
|
+
* \brief Prunes the entries of the vector based on a `predicate`
|
|
197
|
+
* \tparam F Type of the predicate.
|
|
198
|
+
* \param keep_predicate The predicate that is used to test whether a value should be kept. A callable that
|
|
199
|
+
* gets passed om a `Scalar` value and returns a boolean. If the predicate returns true, the value is kept.
|
|
200
|
+
* \return The new number of structural non-zeros.
|
|
201
|
+
*/
|
|
202
|
+
template <class F>
|
|
203
|
+
Index prune(F&& keep_predicate) {
|
|
204
|
+
Index k = 0;
|
|
205
|
+
Index n = m_data.size();
|
|
206
|
+
for (Index i = 0; i < n; ++i) {
|
|
207
|
+
if (keep_predicate(m_data.value(i))) {
|
|
208
|
+
m_data.value(k) = std::move(m_data.value(i));
|
|
209
|
+
m_data.index(k) = m_data.index(i);
|
|
210
|
+
++k;
|
|
306
211
|
}
|
|
307
|
-
else
|
|
308
|
-
{
|
|
309
|
-
resize(other.size());
|
|
310
|
-
m_data = other.m_data;
|
|
311
|
-
}
|
|
312
|
-
return *this;
|
|
313
212
|
}
|
|
213
|
+
m_data.resize(k);
|
|
214
|
+
return k;
|
|
215
|
+
}
|
|
314
216
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
217
|
+
/** Resizes the sparse vector to \a rows x \a cols
|
|
218
|
+
*
|
|
219
|
+
* This method is provided for compatibility with matrices.
|
|
220
|
+
* For a column vector, \a cols must be equal to 1.
|
|
221
|
+
* For a row vector, \a rows must be equal to 1.
|
|
222
|
+
*
|
|
223
|
+
* \sa resize(Index)
|
|
224
|
+
*/
|
|
225
|
+
void resize(Index rows, Index cols) {
|
|
226
|
+
eigen_assert((IsColVector ? cols : rows) == 1 && "Outer dimension must equal 1");
|
|
227
|
+
resize(IsColVector ? rows : cols);
|
|
228
|
+
}
|
|
323
229
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
230
|
+
/** Resizes the sparse vector to \a newSize
|
|
231
|
+
* This method deletes all entries, thus leaving an empty sparse vector
|
|
232
|
+
*
|
|
233
|
+
* \sa conservativeResize(), setZero() */
|
|
234
|
+
void resize(Index newSize) {
|
|
235
|
+
m_size = newSize;
|
|
236
|
+
m_data.clear();
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** Resizes the sparse vector to \a newSize, while leaving old values untouched.
|
|
240
|
+
*
|
|
241
|
+
* If the size of the vector is decreased, then the storage of the out-of bounds coefficients is kept and reserved.
|
|
242
|
+
* Call .data().squeeze() to free extra memory.
|
|
243
|
+
*
|
|
244
|
+
* \sa reserve(), setZero()
|
|
245
|
+
*/
|
|
246
|
+
void conservativeResize(Index newSize) {
|
|
247
|
+
if (newSize < m_size) {
|
|
248
|
+
Index i = 0;
|
|
249
|
+
while (i < m_data.size() && m_data.index(i) < newSize) ++i;
|
|
250
|
+
m_data.resize(i);
|
|
338
251
|
}
|
|
252
|
+
m_size = newSize;
|
|
253
|
+
}
|
|
339
254
|
|
|
340
|
-
|
|
341
|
-
inline ~SparseVector() {}
|
|
255
|
+
void resizeNonZeros(Index size) { m_data.resize(size); }
|
|
342
256
|
|
|
343
|
-
|
|
344
|
-
Scalar sum() const;
|
|
257
|
+
inline SparseVector() : m_size(0) { resize(0); }
|
|
345
258
|
|
|
346
|
-
|
|
259
|
+
explicit inline SparseVector(Index size) : m_size(0) { resize(size); }
|
|
347
260
|
|
|
348
|
-
|
|
349
|
-
EIGEN_DEPRECATED void startFill(Index reserve)
|
|
350
|
-
{
|
|
351
|
-
setZero();
|
|
352
|
-
m_data.reserve(reserve);
|
|
353
|
-
}
|
|
261
|
+
inline SparseVector(Index rows, Index cols) : m_size(0) { resize(rows, cols); }
|
|
354
262
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
263
|
+
template <typename OtherDerived>
|
|
264
|
+
inline SparseVector(const SparseMatrixBase<OtherDerived>& other) : m_size(0) {
|
|
265
|
+
#ifdef EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
|
|
266
|
+
EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
|
|
267
|
+
#endif
|
|
268
|
+
*this = other.derived();
|
|
269
|
+
}
|
|
361
270
|
|
|
362
|
-
|
|
363
|
-
EIGEN_DEPRECATED Scalar& fill(Index i)
|
|
364
|
-
{
|
|
365
|
-
m_data.append(0, i);
|
|
366
|
-
return m_data.value(m_data.size()-1);
|
|
367
|
-
}
|
|
271
|
+
inline SparseVector(const SparseVector& other) : Base(other), m_size(0) { *this = other.derived(); }
|
|
368
272
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
273
|
+
/** Swaps the values of \c *this and \a other.
|
|
274
|
+
* Overloaded for performance: this version performs a \em shallow swap by swapping pointers and attributes only.
|
|
275
|
+
* \sa SparseMatrixBase::swap()
|
|
276
|
+
*/
|
|
277
|
+
inline void swap(SparseVector& other) {
|
|
278
|
+
std::swap(m_size, other.m_size);
|
|
279
|
+
m_data.swap(other.m_data);
|
|
280
|
+
}
|
|
281
|
+
friend EIGEN_DEVICE_FUNC void swap(SparseVector& a, SparseVector& b) { a.swap(b); }
|
|
375
282
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
283
|
+
template <int OtherOptions>
|
|
284
|
+
inline void swap(SparseMatrix<Scalar, OtherOptions, StorageIndex>& other) {
|
|
285
|
+
eigen_assert(other.outerSize() == 1);
|
|
286
|
+
std::swap(m_size, other.m_innerSize);
|
|
287
|
+
m_data.swap(other.m_data);
|
|
288
|
+
}
|
|
289
|
+
template <int OtherOptions>
|
|
290
|
+
friend EIGEN_DEVICE_FUNC void swap(SparseVector& a, SparseMatrix<Scalar, OtherOptions, StorageIndex>& b) {
|
|
291
|
+
a.swap(b);
|
|
292
|
+
}
|
|
293
|
+
template <int OtherOptions>
|
|
294
|
+
friend EIGEN_DEVICE_FUNC void swap(SparseMatrix<Scalar, OtherOptions, StorageIndex>& a, SparseVector& b) {
|
|
295
|
+
b.swap(a);
|
|
296
|
+
}
|
|
381
297
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
/** \internal \deprecated use data() */
|
|
389
|
-
EIGEN_DEPRECATED const Storage& _data() const { return m_data; }
|
|
390
|
-
|
|
391
|
-
# ifdef EIGEN_SPARSEVECTOR_PLUGIN
|
|
392
|
-
# include EIGEN_SPARSEVECTOR_PLUGIN
|
|
393
|
-
# endif
|
|
394
|
-
|
|
395
|
-
protected:
|
|
396
|
-
|
|
397
|
-
static void check_template_parameters()
|
|
398
|
-
{
|
|
399
|
-
EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
|
|
400
|
-
EIGEN_STATIC_ASSERT((_Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
|
|
298
|
+
inline SparseVector& operator=(const SparseVector& other) {
|
|
299
|
+
if (other.isRValue()) {
|
|
300
|
+
swap(other.const_cast_derived());
|
|
301
|
+
} else {
|
|
302
|
+
resize(other.size());
|
|
303
|
+
m_data = other.m_data;
|
|
401
304
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
305
|
+
return *this;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
template <typename OtherDerived>
|
|
309
|
+
inline SparseVector& operator=(const SparseMatrixBase<OtherDerived>& other) {
|
|
310
|
+
SparseVector tmp(other.size());
|
|
311
|
+
internal::sparse_vector_assign_selector<SparseVector, OtherDerived>::run(tmp, other.derived());
|
|
312
|
+
this->swap(tmp);
|
|
313
|
+
return *this;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
inline SparseVector(SparseVector&& other) : SparseVector() { this->swap(other); }
|
|
317
|
+
|
|
318
|
+
template <typename OtherDerived>
|
|
319
|
+
inline SparseVector(SparseCompressedBase<OtherDerived>&& other) : SparseVector() {
|
|
320
|
+
*this = other.derived().markAsRValue();
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
inline SparseVector& operator=(SparseVector&& other) {
|
|
324
|
+
this->swap(other);
|
|
325
|
+
return *this;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
template <typename OtherDerived>
|
|
329
|
+
inline SparseVector& operator=(SparseCompressedBase<OtherDerived>&& other) {
|
|
330
|
+
*this = other.derived().markAsRValue();
|
|
331
|
+
return *this;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
335
|
+
template <typename Lhs, typename Rhs>
|
|
336
|
+
inline SparseVector& operator=(const SparseSparseProduct<Lhs, Rhs>& product) {
|
|
337
|
+
return Base::operator=(product);
|
|
338
|
+
}
|
|
339
|
+
#endif
|
|
340
|
+
|
|
341
|
+
#ifndef EIGEN_NO_IO
|
|
342
|
+
friend std::ostream& operator<<(std::ostream& s, const SparseVector& m) {
|
|
343
|
+
for (Index i = 0; i < m.nonZeros(); ++i) s << "(" << m.m_data.value(i) << "," << m.m_data.index(i) << ") ";
|
|
344
|
+
s << std::endl;
|
|
345
|
+
return s;
|
|
346
|
+
}
|
|
347
|
+
#endif
|
|
348
|
+
|
|
349
|
+
/** Destructor */
|
|
350
|
+
inline ~SparseVector() {}
|
|
351
|
+
|
|
352
|
+
/** Overloaded for performance */
|
|
353
|
+
Scalar sum() const;
|
|
354
|
+
|
|
355
|
+
public:
|
|
356
|
+
/** \internal \deprecated use setZero() and reserve() */
|
|
357
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .setZero() and .reserve() instead.") void startFill(Index reserve) {
|
|
358
|
+
setZero();
|
|
359
|
+
m_data.reserve(reserve);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** \internal \deprecated use insertBack(Index,Index) */
|
|
363
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .insertBack() instead.") Scalar& fill(Index r, Index c) {
|
|
364
|
+
eigen_assert(r == 0 || c == 0);
|
|
365
|
+
return fill(IsColVector ? r : c);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/** \internal \deprecated use insertBack(Index) */
|
|
369
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .insertBack() instead.") Scalar& fill(Index i) {
|
|
370
|
+
m_data.append(Scalar(0), i);
|
|
371
|
+
return m_data.value(m_data.size() - 1);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** \internal \deprecated use insert(Index,Index) */
|
|
375
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .insert() instead.") Scalar& fillrand(Index r, Index c) {
|
|
376
|
+
eigen_assert(r == 0 || c == 0);
|
|
377
|
+
return fillrand(IsColVector ? r : c);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/** \internal \deprecated use insert(Index) */
|
|
381
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .insert() instead.") Scalar& fillrand(Index i) { return insert(i); }
|
|
382
|
+
|
|
383
|
+
/** \internal \deprecated use finalize() */
|
|
384
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .finalize() instead.") void endFill() {}
|
|
385
|
+
|
|
386
|
+
// These two functions were here in the 3.1 release, so let's keep them in case some code rely on them.
|
|
387
|
+
/** \internal \deprecated use data() */
|
|
388
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .data() instead.") Storage& _data() { return m_data; }
|
|
389
|
+
/** \internal \deprecated use data() */
|
|
390
|
+
EIGEN_DEPRECATED_WITH_REASON("Use .data() instead.") const Storage& _data() const { return m_data; }
|
|
391
|
+
|
|
392
|
+
#ifdef EIGEN_SPARSEVECTOR_PLUGIN
|
|
393
|
+
#include EIGEN_SPARSEVECTOR_PLUGIN
|
|
394
|
+
#endif
|
|
395
|
+
|
|
396
|
+
protected:
|
|
397
|
+
EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned, THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
|
|
398
|
+
EIGEN_STATIC_ASSERT((Options_ & (ColMajor | RowMajor)) == Options, INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
|
399
|
+
|
|
400
|
+
Storage m_data;
|
|
401
|
+
Index m_size;
|
|
405
402
|
};
|
|
406
403
|
|
|
407
404
|
namespace internal {
|
|
408
405
|
|
|
409
|
-
template<typename
|
|
410
|
-
struct evaluator<SparseVector<
|
|
411
|
-
|
|
412
|
-
{
|
|
413
|
-
typedef SparseVector<_Scalar,_Options,_Index> SparseVectorType;
|
|
406
|
+
template <typename Scalar_, int Options_, typename Index_>
|
|
407
|
+
struct evaluator<SparseVector<Scalar_, Options_, Index_> > : evaluator_base<SparseVector<Scalar_, Options_, Index_> > {
|
|
408
|
+
typedef SparseVector<Scalar_, Options_, Index_> SparseVectorType;
|
|
414
409
|
typedef evaluator_base<SparseVectorType> Base;
|
|
415
410
|
typedef typename SparseVectorType::InnerIterator InnerIterator;
|
|
416
411
|
typedef typename SparseVectorType::ReverseInnerIterator ReverseInnerIterator;
|
|
417
|
-
|
|
418
|
-
enum {
|
|
419
|
-
CoeffReadCost = NumTraits<_Scalar>::ReadCost,
|
|
420
|
-
Flags = SparseVectorType::Flags
|
|
421
|
-
};
|
|
412
|
+
|
|
413
|
+
enum { CoeffReadCost = NumTraits<Scalar_>::ReadCost, Flags = SparseVectorType::Flags };
|
|
422
414
|
|
|
423
415
|
evaluator() : Base() {}
|
|
424
|
-
|
|
425
|
-
explicit evaluator(const SparseVectorType
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
inline Index nonZerosEstimate() const {
|
|
431
|
-
return m_matrix->nonZeros();
|
|
432
|
-
}
|
|
433
|
-
|
|
416
|
+
|
|
417
|
+
explicit evaluator(const SparseVectorType& mat) : m_matrix(&mat) { EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost); }
|
|
418
|
+
|
|
419
|
+
inline Index nonZerosEstimate() const { return m_matrix->nonZeros(); }
|
|
420
|
+
|
|
434
421
|
operator SparseVectorType&() { return m_matrix->const_cast_derived(); }
|
|
435
422
|
operator const SparseVectorType&() const { return *m_matrix; }
|
|
436
|
-
|
|
437
|
-
const SparseVectorType
|
|
423
|
+
|
|
424
|
+
const SparseVectorType* m_matrix;
|
|
438
425
|
};
|
|
439
426
|
|
|
440
|
-
template<
|
|
441
|
-
struct sparse_vector_assign_selector<Dest,Src,SVA_Inner> {
|
|
427
|
+
template <typename Dest, typename Src>
|
|
428
|
+
struct sparse_vector_assign_selector<Dest, Src, SVA_Inner> {
|
|
442
429
|
static void run(Dest& dst, const Src& src) {
|
|
443
|
-
eigen_internal_assert(src.innerSize()==src.size());
|
|
430
|
+
eigen_internal_assert(src.innerSize() == src.size());
|
|
444
431
|
typedef internal::evaluator<Src> SrcEvaluatorType;
|
|
445
432
|
SrcEvaluatorType srcEval(src);
|
|
446
|
-
for(typename SrcEvaluatorType::InnerIterator it(srcEval, 0); it; ++it)
|
|
447
|
-
dst.insert(it.index()) = it.value();
|
|
433
|
+
for (typename SrcEvaluatorType::InnerIterator it(srcEval, 0); it; ++it) dst.insert(it.index()) = it.value();
|
|
448
434
|
}
|
|
449
435
|
};
|
|
450
436
|
|
|
451
|
-
template<
|
|
452
|
-
struct sparse_vector_assign_selector<Dest,Src,SVA_Outer> {
|
|
437
|
+
template <typename Dest, typename Src>
|
|
438
|
+
struct sparse_vector_assign_selector<Dest, Src, SVA_Outer> {
|
|
453
439
|
static void run(Dest& dst, const Src& src) {
|
|
454
|
-
eigen_internal_assert(src.outerSize()==src.size());
|
|
440
|
+
eigen_internal_assert(src.outerSize() == src.size());
|
|
455
441
|
typedef internal::evaluator<Src> SrcEvaluatorType;
|
|
456
442
|
SrcEvaluatorType srcEval(src);
|
|
457
|
-
for(Index i=0; i<src.size(); ++i)
|
|
458
|
-
{
|
|
443
|
+
for (Index i = 0; i < src.size(); ++i) {
|
|
459
444
|
typename SrcEvaluatorType::InnerIterator it(srcEval, i);
|
|
460
|
-
if(it)
|
|
461
|
-
dst.insert(i) = it.value();
|
|
445
|
+
if (it) dst.insert(i) = it.value();
|
|
462
446
|
}
|
|
463
447
|
}
|
|
464
448
|
};
|
|
465
449
|
|
|
466
|
-
template<
|
|
467
|
-
struct sparse_vector_assign_selector<Dest,Src,SVA_RuntimeSwitch> {
|
|
450
|
+
template <typename Dest, typename Src>
|
|
451
|
+
struct sparse_vector_assign_selector<Dest, Src, SVA_RuntimeSwitch> {
|
|
468
452
|
static void run(Dest& dst, const Src& src) {
|
|
469
|
-
if(src.outerSize()==1)
|
|
470
|
-
|
|
453
|
+
if (src.outerSize() == 1)
|
|
454
|
+
sparse_vector_assign_selector<Dest, Src, SVA_Inner>::run(dst, src);
|
|
455
|
+
else
|
|
456
|
+
sparse_vector_assign_selector<Dest, Src, SVA_Outer>::run(dst, src);
|
|
471
457
|
}
|
|
472
458
|
};
|
|
473
459
|
|
|
474
|
-
}
|
|
460
|
+
} // namespace internal
|
|
461
|
+
|
|
462
|
+
// Specialization for SparseVector.
|
|
463
|
+
// Serializes [size, numNonZeros, innerIndices, values].
|
|
464
|
+
template <typename Scalar, int Options, typename StorageIndex>
|
|
465
|
+
class Serializer<SparseVector<Scalar, Options, StorageIndex>, void> {
|
|
466
|
+
public:
|
|
467
|
+
typedef SparseVector<Scalar, Options, StorageIndex> SparseMat;
|
|
468
|
+
|
|
469
|
+
struct Header {
|
|
470
|
+
typename SparseMat::Index size;
|
|
471
|
+
Index num_non_zeros;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
EIGEN_DEVICE_FUNC size_t size(const SparseMat& value) const {
|
|
475
|
+
return sizeof(Header) + (sizeof(Scalar) + sizeof(StorageIndex)) * value.nonZeros();
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
EIGEN_DEVICE_FUNC uint8_t* serialize(uint8_t* dest, uint8_t* end, const SparseMat& value) {
|
|
479
|
+
if (EIGEN_PREDICT_FALSE(dest == nullptr)) return nullptr;
|
|
480
|
+
if (EIGEN_PREDICT_FALSE(dest + size(value) > end)) return nullptr;
|
|
481
|
+
|
|
482
|
+
const size_t header_bytes = sizeof(Header);
|
|
483
|
+
Header header = {value.innerSize(), value.nonZeros()};
|
|
484
|
+
EIGEN_USING_STD(memcpy)
|
|
485
|
+
memcpy(dest, &header, header_bytes);
|
|
486
|
+
dest += header_bytes;
|
|
487
|
+
|
|
488
|
+
// Inner indices.
|
|
489
|
+
std::size_t data_bytes = sizeof(StorageIndex) * header.num_non_zeros;
|
|
490
|
+
memcpy(dest, value.innerIndexPtr(), data_bytes);
|
|
491
|
+
dest += data_bytes;
|
|
492
|
+
|
|
493
|
+
// Values.
|
|
494
|
+
data_bytes = sizeof(Scalar) * header.num_non_zeros;
|
|
495
|
+
memcpy(dest, value.valuePtr(), data_bytes);
|
|
496
|
+
dest += data_bytes;
|
|
497
|
+
|
|
498
|
+
return dest;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
EIGEN_DEVICE_FUNC const uint8_t* deserialize(const uint8_t* src, const uint8_t* end, SparseMat& value) const {
|
|
502
|
+
if (EIGEN_PREDICT_FALSE(src == nullptr)) return nullptr;
|
|
503
|
+
if (EIGEN_PREDICT_FALSE(src + sizeof(Header) > end)) return nullptr;
|
|
504
|
+
|
|
505
|
+
const size_t header_bytes = sizeof(Header);
|
|
506
|
+
Header header;
|
|
507
|
+
EIGEN_USING_STD(memcpy)
|
|
508
|
+
memcpy(&header, src, header_bytes);
|
|
509
|
+
src += header_bytes;
|
|
510
|
+
|
|
511
|
+
value.setZero();
|
|
512
|
+
value.resize(header.size);
|
|
513
|
+
value.resizeNonZeros(header.num_non_zeros);
|
|
514
|
+
|
|
515
|
+
// Inner indices.
|
|
516
|
+
std::size_t data_bytes = sizeof(StorageIndex) * header.num_non_zeros;
|
|
517
|
+
if (EIGEN_PREDICT_FALSE(src + data_bytes > end)) return nullptr;
|
|
518
|
+
memcpy(value.innerIndexPtr(), src, data_bytes);
|
|
519
|
+
src += data_bytes;
|
|
520
|
+
|
|
521
|
+
// Values.
|
|
522
|
+
data_bytes = sizeof(Scalar) * header.num_non_zeros;
|
|
523
|
+
if (EIGEN_PREDICT_FALSE(src + data_bytes > end)) return nullptr;
|
|
524
|
+
memcpy(value.valuePtr(), src, data_bytes);
|
|
525
|
+
src += data_bytes;
|
|
526
|
+
return src;
|
|
527
|
+
}
|
|
528
|
+
};
|
|
475
529
|
|
|
476
|
-
}
|
|
530
|
+
} // end namespace Eigen
|
|
477
531
|
|
|
478
|
-
#endif
|
|
532
|
+
#endif // EIGEN_SPARSEVECTOR_H
|