@smake/eigen 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,491 +10,454 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSE_BLOCK_H
|
|
11
11
|
#define EIGEN_SPARSE_BLOCK_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
// Subset of columns or rows
|
|
16
|
-
template<typename XprType, int BlockRows, int BlockCols>
|
|
17
|
-
class BlockImpl<XprType,BlockRows,BlockCols,true,Sparse>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
typedef Block<XprType, BlockRows, BlockCols, true> BlockType;
|
|
22
|
-
public:
|
|
23
|
-
enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
|
|
24
|
-
protected:
|
|
25
|
-
enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
|
|
26
|
-
typedef SparseMatrixBase<BlockType> Base;
|
|
27
|
-
using Base::convert_index;
|
|
28
|
-
public:
|
|
29
|
-
EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
|
|
30
|
-
|
|
31
|
-
inline BlockImpl(XprType& xpr, Index i)
|
|
32
|
-
: m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize)
|
|
33
|
-
{}
|
|
34
|
-
|
|
35
|
-
inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
36
|
-
: m_matrix(xpr), m_outerStart(convert_index(IsRowMajor ? startRow : startCol)), m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols))
|
|
37
|
-
{}
|
|
38
|
-
|
|
39
|
-
EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
40
|
-
EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
41
|
-
|
|
42
|
-
Index nonZeros() const
|
|
43
|
-
{
|
|
44
|
-
typedef internal::evaluator<XprType> EvaluatorType;
|
|
45
|
-
EvaluatorType matEval(m_matrix);
|
|
46
|
-
Index nnz = 0;
|
|
47
|
-
Index end = m_outerStart + m_outerSize.value();
|
|
48
|
-
for(Index j=m_outerStart; j<end; ++j)
|
|
49
|
-
for(typename EvaluatorType::InnerIterator it(matEval, j); it; ++it)
|
|
50
|
-
++nnz;
|
|
51
|
-
return nnz;
|
|
52
|
-
}
|
|
19
|
+
template <typename XprType, int BlockRows, int BlockCols>
|
|
20
|
+
class BlockImpl<XprType, BlockRows, BlockCols, true, Sparse>
|
|
21
|
+
: public SparseMatrixBase<Block<XprType, BlockRows, BlockCols, true> > {
|
|
22
|
+
typedef internal::remove_all_t<typename XprType::Nested> MatrixTypeNested_;
|
|
23
|
+
typedef Block<XprType, BlockRows, BlockCols, true> BlockType;
|
|
53
24
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
|
|
57
|
-
}
|
|
25
|
+
public:
|
|
26
|
+
enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
|
|
58
27
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
28
|
+
protected:
|
|
29
|
+
enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
|
|
30
|
+
typedef SparseMatrixBase<BlockType> Base;
|
|
31
|
+
using Base::convert_index;
|
|
63
32
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
69
|
-
Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
70
|
-
|
|
71
|
-
protected:
|
|
72
|
-
|
|
73
|
-
typename internal::ref_selector<XprType>::non_const_type m_matrix;
|
|
74
|
-
Index m_outerStart;
|
|
75
|
-
const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
|
|
76
|
-
|
|
77
|
-
protected:
|
|
78
|
-
// Disable assignment with clear error message.
|
|
79
|
-
// Note that simply removing operator= yields compilation errors with ICC+MSVC
|
|
80
|
-
template<typename T>
|
|
81
|
-
BlockImpl& operator=(const T&)
|
|
82
|
-
{
|
|
83
|
-
EIGEN_STATIC_ASSERT(sizeof(T)==0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
|
|
84
|
-
return *this;
|
|
85
|
-
}
|
|
86
|
-
};
|
|
33
|
+
public:
|
|
34
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
|
|
35
|
+
|
|
36
|
+
inline BlockImpl(XprType& xpr, Index i) : m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize) {}
|
|
87
37
|
|
|
38
|
+
inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
39
|
+
: m_matrix(xpr),
|
|
40
|
+
m_outerStart(convert_index(IsRowMajor ? startRow : startCol)),
|
|
41
|
+
m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols)) {}
|
|
42
|
+
|
|
43
|
+
EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
44
|
+
EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
45
|
+
|
|
46
|
+
Index nonZeros() const {
|
|
47
|
+
typedef internal::evaluator<XprType> EvaluatorType;
|
|
48
|
+
EvaluatorType matEval(m_matrix);
|
|
49
|
+
Index nnz = 0;
|
|
50
|
+
Index end = m_outerStart + m_outerSize.value();
|
|
51
|
+
for (Index j = m_outerStart; j < end; ++j)
|
|
52
|
+
for (typename EvaluatorType::InnerIterator it(matEval, j); it; ++it) ++nnz;
|
|
53
|
+
return nnz;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
inline const Scalar coeff(Index row, Index col) const {
|
|
57
|
+
return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
inline const Scalar coeff(Index index) const {
|
|
61
|
+
return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
inline const XprType& nestedExpression() const { return m_matrix; }
|
|
65
|
+
inline XprType& nestedExpression() { return m_matrix; }
|
|
66
|
+
Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
|
|
67
|
+
Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
|
|
68
|
+
Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
69
|
+
Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
70
|
+
|
|
71
|
+
protected:
|
|
72
|
+
typename internal::ref_selector<XprType>::non_const_type m_matrix;
|
|
73
|
+
Index m_outerStart;
|
|
74
|
+
const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
|
|
75
|
+
|
|
76
|
+
protected:
|
|
77
|
+
// Disable assignment with clear error message.
|
|
78
|
+
// Note that simply removing operator= yields compilation errors with ICC+MSVC
|
|
79
|
+
template <typename T>
|
|
80
|
+
BlockImpl& operator=(const T&) {
|
|
81
|
+
EIGEN_STATIC_ASSERT(sizeof(T) == 0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
|
|
82
|
+
return *this;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
88
85
|
|
|
89
86
|
/***************************************************************************
|
|
90
|
-
* specialization for SparseMatrix
|
|
91
|
-
***************************************************************************/
|
|
87
|
+
* specialization for SparseMatrix
|
|
88
|
+
***************************************************************************/
|
|
92
89
|
|
|
93
90
|
namespace internal {
|
|
94
91
|
|
|
95
|
-
template<typename SparseMatrixType, int BlockRows, int BlockCols>
|
|
96
|
-
class sparse_matrix_block_impl
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
public:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
template<typename OtherDerived>
|
|
120
|
-
inline BlockType& operator=(const SparseMatrixBase<OtherDerived>& other)
|
|
121
|
-
{
|
|
122
|
-
typedef typename internal::remove_all<typename SparseMatrixType::Nested>::type _NestedMatrixType;
|
|
123
|
-
_NestedMatrixType& matrix = m_matrix;
|
|
124
|
-
// This assignment is slow if this vector set is not empty
|
|
125
|
-
// and/or it is not at the end of the nonzeros of the underlying matrix.
|
|
126
|
-
|
|
127
|
-
// 1 - eval to a temporary to avoid transposition and/or aliasing issues
|
|
128
|
-
Ref<const SparseMatrix<Scalar, IsRowMajor ? RowMajor : ColMajor, StorageIndex> > tmp(other.derived());
|
|
129
|
-
eigen_internal_assert(tmp.outerSize()==m_outerSize.value());
|
|
130
|
-
|
|
131
|
-
// 2 - let's check whether there is enough allocated memory
|
|
132
|
-
Index nnz = tmp.nonZeros();
|
|
133
|
-
Index start = m_outerStart==0 ? 0 : m_matrix.outerIndexPtr()[m_outerStart]; // starting position of the current block
|
|
134
|
-
Index end = m_matrix.outerIndexPtr()[m_outerStart+m_outerSize.value()]; // ending position of the current block
|
|
135
|
-
Index block_size = end - start; // available room in the current block
|
|
136
|
-
Index tail_size = m_matrix.outerIndexPtr()[m_matrix.outerSize()] - end;
|
|
137
|
-
|
|
138
|
-
Index free_size = m_matrix.isCompressed()
|
|
139
|
-
? Index(matrix.data().allocatedSize()) + block_size
|
|
140
|
-
: block_size;
|
|
141
|
-
|
|
142
|
-
Index tmp_start = tmp.outerIndexPtr()[0];
|
|
143
|
-
|
|
144
|
-
bool update_trailing_pointers = false;
|
|
145
|
-
if(nnz>free_size)
|
|
146
|
-
{
|
|
147
|
-
// realloc manually to reduce copies
|
|
148
|
-
typename SparseMatrixType::Storage newdata(m_matrix.data().allocatedSize() - block_size + nnz);
|
|
149
|
-
|
|
150
|
-
internal::smart_copy(m_matrix.valuePtr(), m_matrix.valuePtr() + start, newdata.valuePtr());
|
|
151
|
-
internal::smart_copy(m_matrix.innerIndexPtr(), m_matrix.innerIndexPtr() + start, newdata.indexPtr());
|
|
152
|
-
|
|
153
|
-
internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, newdata.valuePtr() + start);
|
|
154
|
-
internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz, newdata.indexPtr() + start);
|
|
155
|
-
|
|
156
|
-
internal::smart_copy(matrix.valuePtr()+end, matrix.valuePtr()+end + tail_size, newdata.valuePtr()+start+nnz);
|
|
157
|
-
internal::smart_copy(matrix.innerIndexPtr()+end, matrix.innerIndexPtr()+end + tail_size, newdata.indexPtr()+start+nnz);
|
|
158
|
-
|
|
159
|
-
newdata.resize(m_matrix.outerIndexPtr()[m_matrix.outerSize()] - block_size + nnz);
|
|
160
|
-
|
|
161
|
-
matrix.data().swap(newdata);
|
|
92
|
+
template <typename SparseMatrixType, int BlockRows, int BlockCols>
|
|
93
|
+
class sparse_matrix_block_impl : public SparseCompressedBase<Block<SparseMatrixType, BlockRows, BlockCols, true> > {
|
|
94
|
+
typedef internal::remove_all_t<typename SparseMatrixType::Nested> MatrixTypeNested_;
|
|
95
|
+
typedef Block<SparseMatrixType, BlockRows, BlockCols, true> BlockType;
|
|
96
|
+
typedef SparseCompressedBase<Block<SparseMatrixType, BlockRows, BlockCols, true> > Base;
|
|
97
|
+
using Base::convert_index;
|
|
98
|
+
|
|
99
|
+
public:
|
|
100
|
+
enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
|
|
101
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
|
|
102
|
+
protected:
|
|
103
|
+
typedef typename Base::IndexVector IndexVector;
|
|
104
|
+
enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
|
|
105
|
+
|
|
106
|
+
public:
|
|
107
|
+
inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index i)
|
|
108
|
+
: m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize) {}
|
|
109
|
+
|
|
110
|
+
inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows,
|
|
111
|
+
Index blockCols)
|
|
112
|
+
: m_matrix(xpr),
|
|
113
|
+
m_outerStart(convert_index(IsRowMajor ? startRow : startCol)),
|
|
114
|
+
m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols)) {}
|
|
162
115
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// no need to realloc, simply copy the tail at its respective position and insert tmp
|
|
170
|
-
matrix.data().resize(start + nnz + tail_size);
|
|
116
|
+
template <typename OtherDerived>
|
|
117
|
+
inline BlockType& operator=(const SparseMatrixBase<OtherDerived>& other) {
|
|
118
|
+
typedef internal::remove_all_t<typename SparseMatrixType::Nested> NestedMatrixType_;
|
|
119
|
+
NestedMatrixType_& matrix = m_matrix;
|
|
120
|
+
// This assignment is slow if this vector set is not empty
|
|
121
|
+
// and/or it is not at the end of the nonzeros of the underlying matrix.
|
|
171
122
|
|
|
172
|
-
|
|
173
|
-
|
|
123
|
+
// 1 - eval to a temporary to avoid transposition and/or aliasing issues
|
|
124
|
+
Ref<const SparseMatrix<Scalar, IsRowMajor ? RowMajor : ColMajor, StorageIndex> > tmp(other.derived());
|
|
125
|
+
eigen_internal_assert(tmp.outerSize() == m_outerSize.value());
|
|
174
126
|
|
|
175
|
-
|
|
176
|
-
|
|
127
|
+
// 2 - let's check whether there is enough allocated memory
|
|
128
|
+
Index nnz = tmp.nonZeros();
|
|
129
|
+
Index start =
|
|
130
|
+
m_outerStart == 0 ? 0 : m_matrix.outerIndexPtr()[m_outerStart]; // starting position of the current block
|
|
131
|
+
Index end = m_matrix.outerIndexPtr()[m_outerStart + m_outerSize.value()]; // ending position of the current block
|
|
132
|
+
Index block_size = end - start; // available room in the current block
|
|
133
|
+
Index tail_size = m_matrix.outerIndexPtr()[m_matrix.outerSize()] - end;
|
|
177
134
|
|
|
178
|
-
|
|
179
|
-
internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz, matrix.innerIndexPtr() + start);
|
|
180
|
-
}
|
|
135
|
+
Index free_size = m_matrix.isCompressed() ? Index(matrix.data().allocatedSize()) + block_size : block_size;
|
|
181
136
|
|
|
182
|
-
|
|
183
|
-
if(IsVectorAtCompileTime)
|
|
184
|
-
{
|
|
185
|
-
if(!m_matrix.isCompressed())
|
|
186
|
-
matrix.innerNonZeroPtr()[m_outerStart] = StorageIndex(nnz);
|
|
187
|
-
matrix.outerIndexPtr()[m_outerStart] = StorageIndex(start);
|
|
188
|
-
}
|
|
189
|
-
else
|
|
190
|
-
{
|
|
191
|
-
StorageIndex p = StorageIndex(start);
|
|
192
|
-
for(Index k=0; k<m_outerSize.value(); ++k)
|
|
193
|
-
{
|
|
194
|
-
StorageIndex nnz_k = internal::convert_index<StorageIndex>(tmp.innerVector(k).nonZeros());
|
|
195
|
-
if(!m_matrix.isCompressed())
|
|
196
|
-
matrix.innerNonZeroPtr()[m_outerStart+k] = nnz_k;
|
|
197
|
-
matrix.outerIndexPtr()[m_outerStart+k] = p;
|
|
198
|
-
p += nnz_k;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
137
|
+
Index tmp_start = tmp.outerIndexPtr()[0];
|
|
201
138
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
{
|
|
207
|
-
matrix.outerIndexPtr()[k] += offset;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
139
|
+
bool update_trailing_pointers = false;
|
|
140
|
+
if (nnz > free_size) {
|
|
141
|
+
// realloc manually to reduce copies
|
|
142
|
+
typename SparseMatrixType::Storage newdata(m_matrix.data().allocatedSize() - block_size + nnz);
|
|
210
143
|
|
|
211
|
-
|
|
212
|
-
|
|
144
|
+
internal::smart_copy(m_matrix.valuePtr(), m_matrix.valuePtr() + start, newdata.valuePtr());
|
|
145
|
+
internal::smart_copy(m_matrix.innerIndexPtr(), m_matrix.innerIndexPtr() + start, newdata.indexPtr());
|
|
213
146
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
147
|
+
internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, newdata.valuePtr() + start);
|
|
148
|
+
internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz,
|
|
149
|
+
newdata.indexPtr() + start);
|
|
218
150
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
151
|
+
internal::smart_copy(matrix.valuePtr() + end, matrix.valuePtr() + end + tail_size,
|
|
152
|
+
newdata.valuePtr() + start + nnz);
|
|
153
|
+
internal::smart_copy(matrix.innerIndexPtr() + end, matrix.innerIndexPtr() + end + tail_size,
|
|
154
|
+
newdata.indexPtr() + start + nnz);
|
|
223
155
|
|
|
224
|
-
|
|
225
|
-
{ return m_matrix.innerIndexPtr(); }
|
|
226
|
-
inline StorageIndex* innerIndexPtr()
|
|
227
|
-
{ return m_matrix.innerIndexPtr(); }
|
|
156
|
+
newdata.resize(m_matrix.outerIndexPtr()[m_matrix.outerSize()] - block_size + nnz);
|
|
228
157
|
|
|
229
|
-
|
|
230
|
-
{ return m_matrix.outerIndexPtr() + m_outerStart; }
|
|
231
|
-
inline StorageIndex* outerIndexPtr()
|
|
232
|
-
{ return m_matrix.outerIndexPtr() + m_outerStart; }
|
|
158
|
+
matrix.data().swap(newdata);
|
|
233
159
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
160
|
+
update_trailing_pointers = true;
|
|
161
|
+
} else {
|
|
162
|
+
if (m_matrix.isCompressed() && nnz != block_size) {
|
|
163
|
+
// no need to realloc, simply copy the tail at its respective position and insert tmp
|
|
164
|
+
matrix.data().resize(start + nnz + tail_size);
|
|
238
165
|
|
|
239
|
-
|
|
166
|
+
internal::smart_memmove(matrix.valuePtr() + end, matrix.valuePtr() + end + tail_size,
|
|
167
|
+
matrix.valuePtr() + start + nnz);
|
|
168
|
+
internal::smart_memmove(matrix.innerIndexPtr() + end, matrix.innerIndexPtr() + end + tail_size,
|
|
169
|
+
matrix.innerIndexPtr() + start + nnz);
|
|
240
170
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return m_matrix.coeffRef(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
|
|
244
|
-
}
|
|
171
|
+
update_trailing_pointers = true;
|
|
172
|
+
}
|
|
245
173
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
174
|
+
internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, matrix.valuePtr() + start);
|
|
175
|
+
internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz,
|
|
176
|
+
matrix.innerIndexPtr() + start);
|
|
249
177
|
}
|
|
250
178
|
|
|
251
|
-
|
|
252
|
-
{
|
|
253
|
-
|
|
179
|
+
// update outer index pointers and innerNonZeros
|
|
180
|
+
if (IsVectorAtCompileTime) {
|
|
181
|
+
if (!m_matrix.isCompressed()) matrix.innerNonZeroPtr()[m_outerStart] = StorageIndex(nnz);
|
|
182
|
+
matrix.outerIndexPtr()[m_outerStart] = StorageIndex(start);
|
|
183
|
+
} else {
|
|
184
|
+
StorageIndex p = StorageIndex(start);
|
|
185
|
+
for (Index k = 0; k < m_outerSize.value(); ++k) {
|
|
186
|
+
StorageIndex nnz_k = internal::convert_index<StorageIndex>(tmp.innerVector(k).nonZeros());
|
|
187
|
+
if (!m_matrix.isCompressed()) matrix.innerNonZeroPtr()[m_outerStart + k] = nnz_k;
|
|
188
|
+
matrix.outerIndexPtr()[m_outerStart + k] = p;
|
|
189
|
+
p += nnz_k;
|
|
190
|
+
}
|
|
254
191
|
}
|
|
255
192
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart+1]-1];
|
|
262
|
-
else
|
|
263
|
-
return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart]+m_matrix.innerNonZeroPtr()[m_outerStart]-1];
|
|
193
|
+
if (update_trailing_pointers) {
|
|
194
|
+
StorageIndex offset = internal::convert_index<StorageIndex>(nnz - block_size);
|
|
195
|
+
for (Index k = m_outerStart + m_outerSize.value(); k <= matrix.outerSize(); ++k) {
|
|
196
|
+
matrix.outerIndexPtr()[k] += offset;
|
|
197
|
+
}
|
|
264
198
|
}
|
|
265
199
|
|
|
266
|
-
|
|
267
|
-
|
|
200
|
+
return derived();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
inline BlockType& operator=(const BlockType& other) { return operator= <BlockType>(other); }
|
|
268
204
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
|
|
272
|
-
Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
|
|
273
|
-
Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
274
|
-
Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
205
|
+
inline const Scalar* valuePtr() const { return m_matrix.valuePtr(); }
|
|
206
|
+
inline Scalar* valuePtr() { return m_matrix.valuePtr(); }
|
|
275
207
|
|
|
276
|
-
|
|
208
|
+
inline const StorageIndex* innerIndexPtr() const { return m_matrix.innerIndexPtr(); }
|
|
209
|
+
inline StorageIndex* innerIndexPtr() { return m_matrix.innerIndexPtr(); }
|
|
277
210
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
|
|
211
|
+
inline const StorageIndex* outerIndexPtr() const { return m_matrix.outerIndexPtr() + m_outerStart; }
|
|
212
|
+
inline StorageIndex* outerIndexPtr() { return m_matrix.outerIndexPtr() + m_outerStart; }
|
|
281
213
|
|
|
214
|
+
inline const StorageIndex* innerNonZeroPtr() const {
|
|
215
|
+
return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr() + m_outerStart);
|
|
216
|
+
}
|
|
217
|
+
inline StorageIndex* innerNonZeroPtr() { return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr() + m_outerStart); }
|
|
218
|
+
|
|
219
|
+
bool isCompressed() const { return m_matrix.innerNonZeroPtr() == 0; }
|
|
220
|
+
|
|
221
|
+
inline Scalar& coeffRef(Index row, Index col) {
|
|
222
|
+
return m_matrix.coeffRef(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
inline const Scalar coeff(Index row, Index col) const {
|
|
226
|
+
return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
inline const Scalar coeff(Index index) const {
|
|
230
|
+
return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const Scalar& lastCoeff() const {
|
|
234
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(sparse_matrix_block_impl);
|
|
235
|
+
eigen_assert(Base::nonZeros() > 0);
|
|
236
|
+
if (m_matrix.isCompressed())
|
|
237
|
+
return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart + 1] - 1];
|
|
238
|
+
else
|
|
239
|
+
return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart] + m_matrix.innerNonZeroPtr()[m_outerStart] - 1];
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
243
|
+
EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
244
|
+
|
|
245
|
+
inline const SparseMatrixType& nestedExpression() const { return m_matrix; }
|
|
246
|
+
inline SparseMatrixType& nestedExpression() { return m_matrix; }
|
|
247
|
+
Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
|
|
248
|
+
Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
|
|
249
|
+
Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
|
|
250
|
+
Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
|
|
251
|
+
|
|
252
|
+
protected:
|
|
253
|
+
typename internal::ref_selector<SparseMatrixType>::non_const_type m_matrix;
|
|
254
|
+
Index m_outerStart;
|
|
255
|
+
const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
|
|
282
256
|
};
|
|
283
257
|
|
|
284
|
-
}
|
|
258
|
+
} // namespace internal
|
|
285
259
|
|
|
286
|
-
template<typename
|
|
287
|
-
class BlockImpl<SparseMatrix<
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
typedef
|
|
292
|
-
typedef
|
|
293
|
-
|
|
294
|
-
inline BlockImpl(SparseMatrixType& xpr, Index i)
|
|
295
|
-
: Base(xpr, i)
|
|
296
|
-
{}
|
|
260
|
+
template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
|
|
261
|
+
class BlockImpl<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true, Sparse>
|
|
262
|
+
: public internal::sparse_matrix_block_impl<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols> {
|
|
263
|
+
public:
|
|
264
|
+
typedef StorageIndex_ StorageIndex;
|
|
265
|
+
typedef SparseMatrix<Scalar_, Options_, StorageIndex_> SparseMatrixType;
|
|
266
|
+
typedef internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols> Base;
|
|
267
|
+
inline BlockImpl(SparseMatrixType& xpr, Index i) : Base(xpr, i) {}
|
|
297
268
|
|
|
298
269
|
inline BlockImpl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
299
|
-
|
|
300
|
-
{}
|
|
270
|
+
: Base(xpr, startRow, startCol, blockRows, blockCols) {}
|
|
301
271
|
|
|
302
272
|
using Base::operator=;
|
|
303
273
|
};
|
|
304
274
|
|
|
305
|
-
template<typename
|
|
306
|
-
class BlockImpl<const SparseMatrix<
|
|
307
|
-
|
|
308
|
-
{
|
|
309
|
-
public:
|
|
310
|
-
typedef
|
|
311
|
-
typedef const SparseMatrix<
|
|
312
|
-
typedef internal::sparse_matrix_block_impl<SparseMatrixType,BlockRows,BlockCols> Base;
|
|
313
|
-
inline BlockImpl(SparseMatrixType& xpr, Index i)
|
|
314
|
-
: Base(xpr, i)
|
|
315
|
-
{}
|
|
275
|
+
template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
|
|
276
|
+
class BlockImpl<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true, Sparse>
|
|
277
|
+
: public internal::sparse_matrix_block_impl<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows,
|
|
278
|
+
BlockCols> {
|
|
279
|
+
public:
|
|
280
|
+
typedef StorageIndex_ StorageIndex;
|
|
281
|
+
typedef const SparseMatrix<Scalar_, Options_, StorageIndex_> SparseMatrixType;
|
|
282
|
+
typedef internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols> Base;
|
|
283
|
+
inline BlockImpl(SparseMatrixType& xpr, Index i) : Base(xpr, i) {}
|
|
316
284
|
|
|
317
285
|
inline BlockImpl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
318
|
-
|
|
319
|
-
{}
|
|
286
|
+
: Base(xpr, startRow, startCol, blockRows, blockCols) {}
|
|
320
287
|
|
|
321
288
|
using Base::operator=;
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
template<typename Derived>
|
|
289
|
+
|
|
290
|
+
private:
|
|
291
|
+
template <typename Derived>
|
|
292
|
+
BlockImpl(const SparseMatrixBase<Derived>& xpr, Index i);
|
|
293
|
+
template <typename Derived>
|
|
294
|
+
BlockImpl(const SparseMatrixBase<Derived>& xpr);
|
|
325
295
|
};
|
|
326
296
|
|
|
327
297
|
//----------
|
|
328
298
|
|
|
329
299
|
/** Generic implementation of sparse Block expression.
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
333
|
-
class BlockImpl<XprType,BlockRows,BlockCols,InnerPanel,Sparse>
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
public:
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
300
|
+
* Real-only.
|
|
301
|
+
*/
|
|
302
|
+
template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
303
|
+
class BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Sparse>
|
|
304
|
+
: public SparseMatrixBase<Block<XprType, BlockRows, BlockCols, InnerPanel> >, internal::no_assignment_operator {
|
|
305
|
+
typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
|
|
306
|
+
typedef SparseMatrixBase<BlockType> Base;
|
|
307
|
+
using Base::convert_index;
|
|
308
|
+
|
|
309
|
+
public:
|
|
310
|
+
enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
|
|
311
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
|
|
312
|
+
|
|
313
|
+
typedef internal::remove_all_t<typename XprType::Nested> MatrixTypeNested_;
|
|
314
|
+
|
|
315
|
+
/** Column or Row constructor
|
|
316
|
+
*/
|
|
317
|
+
inline BlockImpl(XprType& xpr, Index i)
|
|
348
318
|
: m_matrix(xpr),
|
|
349
|
-
m_startRow(
|
|
350
|
-
m_startCol(
|
|
351
|
-
m_blockRows(BlockRows==1 ? 1 : xpr.rows()),
|
|
352
|
-
m_blockCols(BlockCols==1 ? 1 : xpr.cols())
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
inline Index cols() const { return m_blockCols.value(); }
|
|
363
|
-
|
|
364
|
-
inline Scalar& coeffRef(Index row, Index col)
|
|
365
|
-
{
|
|
366
|
-
return m_matrix.coeffRef(row + m_startRow.value(), col + m_startCol.value());
|
|
367
|
-
}
|
|
319
|
+
m_startRow((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) ? convert_index(i) : 0),
|
|
320
|
+
m_startCol((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) ? convert_index(i) : 0),
|
|
321
|
+
m_blockRows(BlockRows == 1 ? 1 : xpr.rows()),
|
|
322
|
+
m_blockCols(BlockCols == 1 ? 1 : xpr.cols()) {}
|
|
323
|
+
|
|
324
|
+
/** Dynamic-size constructor
|
|
325
|
+
*/
|
|
326
|
+
inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
327
|
+
: m_matrix(xpr),
|
|
328
|
+
m_startRow(convert_index(startRow)),
|
|
329
|
+
m_startCol(convert_index(startCol)),
|
|
330
|
+
m_blockRows(convert_index(blockRows)),
|
|
331
|
+
m_blockCols(convert_index(blockCols)) {}
|
|
368
332
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
return m_matrix.coeff(row + m_startRow.value(), col + m_startCol.value());
|
|
372
|
-
}
|
|
333
|
+
inline Index rows() const { return m_blockRows.value(); }
|
|
334
|
+
inline Index cols() const { return m_blockCols.value(); }
|
|
373
335
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
378
|
-
}
|
|
336
|
+
inline Scalar& coeffRef(Index row, Index col) {
|
|
337
|
+
return m_matrix.coeffRef(row + m_startRow.value(), col + m_startCol.value());
|
|
338
|
+
}
|
|
379
339
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
384
|
-
}
|
|
340
|
+
inline const Scalar coeff(Index row, Index col) const {
|
|
341
|
+
return m_matrix.coeff(row + m_startRow.value(), col + m_startCol.value());
|
|
342
|
+
}
|
|
385
343
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
friend struct internal::unary_evaluator<Block<XprType,BlockRows,BlockCols,InnerPanel>, internal::IteratorBased, Scalar >;
|
|
396
|
-
|
|
397
|
-
Index nonZeros() const { return Dynamic; }
|
|
398
|
-
|
|
399
|
-
typename internal::ref_selector<XprType>::non_const_type m_matrix;
|
|
400
|
-
const internal::variable_if_dynamic<Index, XprType::RowsAtCompileTime == 1 ? 0 : Dynamic> m_startRow;
|
|
401
|
-
const internal::variable_if_dynamic<Index, XprType::ColsAtCompileTime == 1 ? 0 : Dynamic> m_startCol;
|
|
402
|
-
const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_blockRows;
|
|
403
|
-
const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_blockCols;
|
|
404
|
-
|
|
405
|
-
protected:
|
|
406
|
-
// Disable assignment with clear error message.
|
|
407
|
-
// Note that simply removing operator= yields compilation errors with ICC+MSVC
|
|
408
|
-
template<typename T>
|
|
409
|
-
BlockImpl& operator=(const T&)
|
|
410
|
-
{
|
|
411
|
-
EIGEN_STATIC_ASSERT(sizeof(T)==0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
|
|
412
|
-
return *this;
|
|
413
|
-
}
|
|
344
|
+
inline Scalar& coeffRef(Index index) {
|
|
345
|
+
return m_matrix.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
346
|
+
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
inline const Scalar coeff(Index index) const {
|
|
350
|
+
return m_matrix.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
351
|
+
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
352
|
+
}
|
|
414
353
|
|
|
354
|
+
inline const XprType& nestedExpression() const { return m_matrix; }
|
|
355
|
+
inline XprType& nestedExpression() { return m_matrix; }
|
|
356
|
+
Index startRow() const { return m_startRow.value(); }
|
|
357
|
+
Index startCol() const { return m_startCol.value(); }
|
|
358
|
+
Index blockRows() const { return m_blockRows.value(); }
|
|
359
|
+
Index blockCols() const { return m_blockCols.value(); }
|
|
360
|
+
|
|
361
|
+
protected:
|
|
362
|
+
// friend class internal::GenericSparseBlockInnerIteratorImpl<XprType,BlockRows,BlockCols,InnerPanel>;
|
|
363
|
+
friend struct internal::unary_evaluator<Block<XprType, BlockRows, BlockCols, InnerPanel>, internal::IteratorBased,
|
|
364
|
+
Scalar>;
|
|
365
|
+
|
|
366
|
+
Index nonZeros() const { return Dynamic; }
|
|
367
|
+
|
|
368
|
+
typename internal::ref_selector<XprType>::non_const_type m_matrix;
|
|
369
|
+
const internal::variable_if_dynamic<Index, XprType::RowsAtCompileTime == 1 ? 0 : Dynamic> m_startRow;
|
|
370
|
+
const internal::variable_if_dynamic<Index, XprType::ColsAtCompileTime == 1 ? 0 : Dynamic> m_startCol;
|
|
371
|
+
const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_blockRows;
|
|
372
|
+
const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_blockCols;
|
|
373
|
+
|
|
374
|
+
protected:
|
|
375
|
+
// Disable assignment with clear error message.
|
|
376
|
+
// Note that simply removing operator= yields compilation errors with ICC+MSVC
|
|
377
|
+
template <typename T>
|
|
378
|
+
BlockImpl& operator=(const T&) {
|
|
379
|
+
EIGEN_STATIC_ASSERT(sizeof(T) == 0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
|
|
380
|
+
return *this;
|
|
381
|
+
}
|
|
415
382
|
};
|
|
416
383
|
|
|
417
384
|
namespace internal {
|
|
418
385
|
|
|
419
|
-
template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
420
|
-
struct unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
inline Index nonZerosEstimate() const {
|
|
449
|
-
const Index nnz = m_block.nonZeros();
|
|
450
|
-
if(nnz < 0) {
|
|
451
|
-
// Scale the non-zero estimate for the underlying expression linearly with block size.
|
|
452
|
-
// Return zero if the underlying block is empty.
|
|
453
|
-
const Index nested_sz = m_block.nestedExpression().size();
|
|
454
|
-
return nested_sz == 0 ? 0 : m_argImpl.nonZerosEstimate() * m_block.size() / nested_sz;
|
|
455
|
-
}
|
|
456
|
-
return nnz;
|
|
386
|
+
template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
387
|
+
struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>
|
|
388
|
+
: public evaluator_base<Block<ArgType, BlockRows, BlockCols, InnerPanel> > {
|
|
389
|
+
class InnerVectorInnerIterator;
|
|
390
|
+
class OuterVectorInnerIterator;
|
|
391
|
+
|
|
392
|
+
public:
|
|
393
|
+
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
|
394
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
|
395
|
+
typedef typename XprType::Scalar Scalar;
|
|
396
|
+
|
|
397
|
+
enum {
|
|
398
|
+
IsRowMajor = XprType::IsRowMajor,
|
|
399
|
+
OuterVector = (BlockCols == 1 && ArgType::IsRowMajor) || (BlockRows == 1 && !ArgType::IsRowMajor),
|
|
400
|
+
CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
|
|
401
|
+
Flags = XprType::Flags
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
typedef std::conditional_t<OuterVector, OuterVectorInnerIterator, InnerVectorInnerIterator> InnerIterator;
|
|
405
|
+
|
|
406
|
+
explicit unary_evaluator(const XprType& op) : m_argImpl(op.nestedExpression()), m_block(op) {}
|
|
407
|
+
|
|
408
|
+
inline Index nonZerosEstimate() const {
|
|
409
|
+
const Index nnz = m_block.nonZeros();
|
|
410
|
+
if (nnz < 0) {
|
|
411
|
+
// Scale the non-zero estimate for the underlying expression linearly with block size.
|
|
412
|
+
// Return zero if the underlying block is empty.
|
|
413
|
+
const Index nested_sz = m_block.nestedExpression().size();
|
|
414
|
+
return nested_sz == 0 ? 0 : m_argImpl.nonZerosEstimate() * m_block.size() / nested_sz;
|
|
457
415
|
}
|
|
416
|
+
return nnz;
|
|
417
|
+
}
|
|
458
418
|
|
|
459
|
-
|
|
460
|
-
|
|
419
|
+
protected:
|
|
420
|
+
typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
|
|
461
421
|
|
|
462
|
-
|
|
463
|
-
|
|
422
|
+
evaluator<ArgType> m_argImpl;
|
|
423
|
+
const XprType& m_block;
|
|
464
424
|
};
|
|
465
425
|
|
|
466
|
-
template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
467
|
-
class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::InnerVectorInnerIterator
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
// NOTE MSVC fails to compile if we don't explicitely "import" IsRowMajor from unary_evaluator
|
|
426
|
+
template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
427
|
+
class unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>::InnerVectorInnerIterator
|
|
428
|
+
: public EvalIterator {
|
|
429
|
+
// NOTE MSVC fails to compile if we don't explicitly "import" IsRowMajor from unary_evaluator
|
|
471
430
|
// because the base class EvalIterator has a private IsRowMajor enum too. (bug #1786)
|
|
472
431
|
// NOTE We cannot call it IsRowMajor because it would shadow unary_evaluator::IsRowMajor
|
|
473
432
|
enum { XprIsRowMajor = unary_evaluator::IsRowMajor };
|
|
474
433
|
const XprType& m_block;
|
|
475
434
|
Index m_end;
|
|
476
|
-
public:
|
|
477
435
|
|
|
436
|
+
public:
|
|
478
437
|
EIGEN_STRONG_INLINE InnerVectorInnerIterator(const unary_evaluator& aEval, Index outer)
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
while
|
|
438
|
+
: EvalIterator(aEval.m_argImpl, outer + (XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol())),
|
|
439
|
+
m_block(aEval.m_block),
|
|
440
|
+
m_end(XprIsRowMajor ? aEval.m_block.startCol() + aEval.m_block.blockCols()
|
|
441
|
+
: aEval.m_block.startRow() + aEval.m_block.blockRows()) {
|
|
442
|
+
while ((EvalIterator::operator bool()) &&
|
|
443
|
+
(EvalIterator::index() < (XprIsRowMajor ? m_block.startCol() : m_block.startRow())))
|
|
484
444
|
EvalIterator::operator++();
|
|
485
445
|
}
|
|
486
446
|
|
|
487
|
-
inline StorageIndex index() const {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
inline Index
|
|
447
|
+
inline StorageIndex index() const {
|
|
448
|
+
return EvalIterator::index() - convert_index<StorageIndex>(XprIsRowMajor ? m_block.startCol() : m_block.startRow());
|
|
449
|
+
}
|
|
450
|
+
inline Index outer() const {
|
|
451
|
+
return EvalIterator::outer() - (XprIsRowMajor ? m_block.startRow() : m_block.startCol());
|
|
452
|
+
}
|
|
453
|
+
inline Index row() const { return EvalIterator::row() - m_block.startRow(); }
|
|
454
|
+
inline Index col() const { return EvalIterator::col() - m_block.startCol(); }
|
|
491
455
|
|
|
492
456
|
inline operator bool() const { return EvalIterator::operator bool() && EvalIterator::index() < m_end; }
|
|
493
457
|
};
|
|
494
458
|
|
|
495
|
-
template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
496
|
-
class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::OuterVectorInnerIterator
|
|
497
|
-
{
|
|
459
|
+
template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
460
|
+
class unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>::OuterVectorInnerIterator {
|
|
498
461
|
// NOTE see above
|
|
499
462
|
enum { XprIsRowMajor = unary_evaluator::IsRowMajor };
|
|
500
463
|
const unary_evaluator& m_eval;
|
|
@@ -502,42 +465,42 @@ class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBas
|
|
|
502
465
|
const Index m_innerIndex;
|
|
503
466
|
Index m_end;
|
|
504
467
|
EvalIterator m_it;
|
|
505
|
-
public:
|
|
506
468
|
|
|
469
|
+
public:
|
|
507
470
|
EIGEN_STRONG_INLINE OuterVectorInnerIterator(const unary_evaluator& aEval, Index outer)
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
471
|
+
: m_eval(aEval),
|
|
472
|
+
m_outerPos((XprIsRowMajor ? aEval.m_block.startCol() : aEval.m_block.startRow())),
|
|
473
|
+
m_innerIndex(XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol()),
|
|
474
|
+
m_end(XprIsRowMajor ? aEval.m_block.startCol() + aEval.m_block.blockCols()
|
|
475
|
+
: aEval.m_block.startRow() + aEval.m_block.blockRows()),
|
|
476
|
+
m_it(m_eval.m_argImpl, m_outerPos) {
|
|
514
477
|
EIGEN_UNUSED_VARIABLE(outer);
|
|
515
|
-
eigen_assert(outer==0);
|
|
478
|
+
eigen_assert(outer == 0);
|
|
516
479
|
|
|
517
|
-
while(m_it && m_it.index() < m_innerIndex) ++m_it;
|
|
518
|
-
if((!m_it) || (m_it.index()!=m_innerIndex))
|
|
519
|
-
++(*this);
|
|
480
|
+
while (m_it && m_it.index() < m_innerIndex) ++m_it;
|
|
481
|
+
if ((!m_it) || (m_it.index() != m_innerIndex)) ++(*this);
|
|
520
482
|
}
|
|
521
483
|
|
|
522
|
-
inline StorageIndex index() const {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
484
|
+
inline StorageIndex index() const {
|
|
485
|
+
return convert_index<StorageIndex>(m_outerPos -
|
|
486
|
+
(XprIsRowMajor ? m_eval.m_block.startCol() : m_eval.m_block.startRow()));
|
|
487
|
+
}
|
|
488
|
+
inline Index outer() const { return 0; }
|
|
489
|
+
inline Index row() const { return XprIsRowMajor ? 0 : index(); }
|
|
490
|
+
inline Index col() const { return XprIsRowMajor ? index() : 0; }
|
|
526
491
|
|
|
527
492
|
inline Scalar value() const { return m_it.value(); }
|
|
528
493
|
inline Scalar& valueRef() { return m_it.valueRef(); }
|
|
529
494
|
|
|
530
|
-
inline OuterVectorInnerIterator& operator++()
|
|
531
|
-
{
|
|
495
|
+
inline OuterVectorInnerIterator& operator++() {
|
|
532
496
|
// search next non-zero entry
|
|
533
|
-
while(++m_outerPos<m_end)
|
|
534
|
-
{
|
|
497
|
+
while (++m_outerPos < m_end) {
|
|
535
498
|
// Restart iterator at the next inner-vector:
|
|
536
|
-
m_it
|
|
537
|
-
::
|
|
499
|
+
internal::destroy_at(&m_it);
|
|
500
|
+
internal::construct_at(&m_it, m_eval.m_argImpl, m_outerPos);
|
|
538
501
|
// search for the key m_innerIndex in the current outer-vector
|
|
539
|
-
while(m_it && m_it.index() < m_innerIndex) ++m_it;
|
|
540
|
-
if(m_it && m_it.index()==m_innerIndex) break;
|
|
502
|
+
while (m_it && m_it.index() < m_innerIndex) ++m_it;
|
|
503
|
+
if (m_it && m_it.index() == m_innerIndex) break;
|
|
541
504
|
}
|
|
542
505
|
return *this;
|
|
543
506
|
}
|
|
@@ -545,27 +508,27 @@ public:
|
|
|
545
508
|
inline operator bool() const { return m_outerPos < m_end; }
|
|
546
509
|
};
|
|
547
510
|
|
|
548
|
-
template<typename
|
|
549
|
-
struct unary_evaluator<Block<SparseMatrix<
|
|
550
|
-
|
|
551
|
-
{
|
|
552
|
-
typedef Block<SparseMatrix<
|
|
511
|
+
template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
|
|
512
|
+
struct unary_evaluator<Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true>, IteratorBased>
|
|
513
|
+
: evaluator<
|
|
514
|
+
SparseCompressedBase<Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> > > {
|
|
515
|
+
typedef Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> XprType;
|
|
553
516
|
typedef evaluator<SparseCompressedBase<XprType> > Base;
|
|
554
|
-
explicit unary_evaluator(const XprType
|
|
517
|
+
explicit unary_evaluator(const XprType& xpr) : Base(xpr) {}
|
|
555
518
|
};
|
|
556
519
|
|
|
557
|
-
template<typename
|
|
558
|
-
struct unary_evaluator<Block<const SparseMatrix<
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
520
|
+
template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
|
|
521
|
+
struct unary_evaluator<Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true>,
|
|
522
|
+
IteratorBased>
|
|
523
|
+
: evaluator<SparseCompressedBase<
|
|
524
|
+
Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> > > {
|
|
525
|
+
typedef Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> XprType;
|
|
562
526
|
typedef evaluator<SparseCompressedBase<XprType> > Base;
|
|
563
|
-
explicit unary_evaluator(const XprType
|
|
527
|
+
explicit unary_evaluator(const XprType& xpr) : Base(xpr) {}
|
|
564
528
|
};
|
|
565
529
|
|
|
566
|
-
}
|
|
567
|
-
|
|
530
|
+
} // end namespace internal
|
|
568
531
|
|
|
569
|
-
}
|
|
532
|
+
} // end namespace Eigen
|
|
570
533
|
|
|
571
|
-
#endif
|
|
534
|
+
#endif // EIGEN_SPARSE_BLOCK_H
|