@smake/eigen 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -11,270 +11,297 @@
|
|
|
11
11
|
#ifndef EIGEN_DIAGONALMATRIX_H
|
|
12
12
|
#define EIGEN_DIAGONALMATRIX_H
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
16
|
+
|
|
17
|
+
namespace Eigen {
|
|
18
|
+
|
|
19
|
+
/** \class DiagonalBase
|
|
20
|
+
* \ingroup Core_Module
|
|
21
|
+
*
|
|
22
|
+
* \brief Base class for diagonal matrices and expressions
|
|
23
|
+
*
|
|
24
|
+
* This is the base class that is inherited by diagonal matrix and related expression
|
|
25
|
+
* types, which internally use a vector for storing the diagonal entries. Diagonal
|
|
26
|
+
* types always represent square matrices.
|
|
27
|
+
*
|
|
28
|
+
* \tparam Derived is the derived type, a DiagonalMatrix or DiagonalWrapper.
|
|
29
|
+
*
|
|
30
|
+
* \sa class DiagonalMatrix, class DiagonalWrapper
|
|
31
|
+
*/
|
|
32
|
+
template <typename Derived>
|
|
33
|
+
class DiagonalBase : public EigenBase<Derived> {
|
|
34
|
+
public:
|
|
35
|
+
typedef typename internal::traits<Derived>::DiagonalVectorType DiagonalVectorType;
|
|
36
|
+
typedef typename DiagonalVectorType::Scalar Scalar;
|
|
37
|
+
typedef typename DiagonalVectorType::RealScalar RealScalar;
|
|
38
|
+
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
39
|
+
typedef typename internal::traits<Derived>::StorageIndex StorageIndex;
|
|
15
40
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
25
|
-
typedef typename internal::traits<Derived>::StorageIndex StorageIndex;
|
|
26
|
-
|
|
27
|
-
enum {
|
|
28
|
-
RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
|
|
29
|
-
ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
|
|
30
|
-
MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
31
|
-
MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
32
|
-
IsVectorAtCompileTime = 0,
|
|
33
|
-
Flags = NoPreferredStorageOrderBit
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, 0, MaxRowsAtCompileTime, MaxColsAtCompileTime> DenseMatrixType;
|
|
37
|
-
typedef DenseMatrixType DenseType;
|
|
38
|
-
typedef DiagonalMatrix<Scalar,DiagonalVectorType::SizeAtCompileTime,DiagonalVectorType::MaxSizeAtCompileTime> PlainObject;
|
|
39
|
-
|
|
40
|
-
EIGEN_DEVICE_FUNC
|
|
41
|
-
inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
|
42
|
-
EIGEN_DEVICE_FUNC
|
|
43
|
-
inline Derived& derived() { return *static_cast<Derived*>(this); }
|
|
44
|
-
|
|
45
|
-
EIGEN_DEVICE_FUNC
|
|
46
|
-
DenseMatrixType toDenseMatrix() const { return derived(); }
|
|
47
|
-
|
|
48
|
-
EIGEN_DEVICE_FUNC
|
|
49
|
-
inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); }
|
|
50
|
-
EIGEN_DEVICE_FUNC
|
|
51
|
-
inline DiagonalVectorType& diagonal() { return derived().diagonal(); }
|
|
52
|
-
|
|
53
|
-
EIGEN_DEVICE_FUNC
|
|
54
|
-
inline Index rows() const { return diagonal().size(); }
|
|
55
|
-
EIGEN_DEVICE_FUNC
|
|
56
|
-
inline Index cols() const { return diagonal().size(); }
|
|
57
|
-
|
|
58
|
-
template<typename MatrixDerived>
|
|
59
|
-
EIGEN_DEVICE_FUNC
|
|
60
|
-
const Product<Derived,MatrixDerived,LazyProduct>
|
|
61
|
-
operator*(const MatrixBase<MatrixDerived> &matrix) const
|
|
62
|
-
{
|
|
63
|
-
return Product<Derived, MatrixDerived, LazyProduct>(derived(),matrix.derived());
|
|
64
|
-
}
|
|
41
|
+
enum {
|
|
42
|
+
RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
|
|
43
|
+
ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
|
|
44
|
+
MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
45
|
+
MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
46
|
+
IsVectorAtCompileTime = 0,
|
|
47
|
+
Flags = NoPreferredStorageOrderBit
|
|
48
|
+
};
|
|
65
49
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
50
|
+
typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, 0, MaxRowsAtCompileTime, MaxColsAtCompileTime>
|
|
51
|
+
DenseMatrixType;
|
|
52
|
+
typedef DenseMatrixType DenseType;
|
|
53
|
+
typedef DiagonalMatrix<Scalar, DiagonalVectorType::SizeAtCompileTime, DiagonalVectorType::MaxSizeAtCompileTime>
|
|
54
|
+
PlainObject;
|
|
55
|
+
|
|
56
|
+
/** \returns a reference to the derived object. */
|
|
57
|
+
EIGEN_DEVICE_FUNC inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
|
58
|
+
/** \returns a const reference to the derived object. */
|
|
59
|
+
EIGEN_DEVICE_FUNC inline Derived& derived() { return *static_cast<Derived*>(this); }
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Constructs a dense matrix from \c *this. Note, this directly returns a dense matrix type,
|
|
63
|
+
* not an expression.
|
|
64
|
+
* \returns A dense matrix, with its diagonal entries set from the the derived object. */
|
|
65
|
+
EIGEN_DEVICE_FUNC DenseMatrixType toDenseMatrix() const { return derived(); }
|
|
66
|
+
|
|
67
|
+
/** \returns a reference to the derived object's vector of diagonal coefficients. */
|
|
68
|
+
EIGEN_DEVICE_FUNC inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); }
|
|
69
|
+
/** \returns a const reference to the derived object's vector of diagonal coefficients. */
|
|
70
|
+
EIGEN_DEVICE_FUNC inline DiagonalVectorType& diagonal() { return derived().diagonal(); }
|
|
71
|
+
|
|
72
|
+
/** \returns the value of the coefficient as if \c *this was a dense matrix. */
|
|
73
|
+
EIGEN_DEVICE_FUNC inline Scalar coeff(Index row, Index col) const {
|
|
74
|
+
eigen_assert(row >= 0 && col >= 0 && row < rows() && col <= cols());
|
|
75
|
+
return row == col ? diagonal().coeff(row) : Scalar(0);
|
|
76
|
+
}
|
|
86
77
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
#else
|
|
92
|
-
inline const DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(DiagonalVectorType,typename OtherDerived::DiagonalVectorType,sum) >
|
|
93
|
-
#endif
|
|
94
|
-
operator+(const DiagonalBase<OtherDerived>& other) const
|
|
95
|
-
{
|
|
96
|
-
return (diagonal() + other.diagonal()).asDiagonal();
|
|
97
|
-
}
|
|
78
|
+
/** \returns the number of rows. */
|
|
79
|
+
EIGEN_DEVICE_FUNC constexpr Index rows() const { return diagonal().size(); }
|
|
80
|
+
/** \returns the number of columns. */
|
|
81
|
+
EIGEN_DEVICE_FUNC constexpr Index cols() const { return diagonal().size(); }
|
|
98
82
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
#endif
|
|
106
|
-
operator-(const DiagonalBase<OtherDerived>& other) const
|
|
107
|
-
{
|
|
108
|
-
return (diagonal() - other.diagonal()).asDiagonal();
|
|
109
|
-
}
|
|
110
|
-
};
|
|
83
|
+
/** \returns the diagonal matrix product of \c *this by the dense matrix, \a matrix */
|
|
84
|
+
template <typename MatrixDerived>
|
|
85
|
+
EIGEN_DEVICE_FUNC const Product<Derived, MatrixDerived, LazyProduct> operator*(
|
|
86
|
+
const MatrixBase<MatrixDerived>& matrix) const {
|
|
87
|
+
return Product<Derived, MatrixDerived, LazyProduct>(derived(), matrix.derived());
|
|
88
|
+
}
|
|
111
89
|
|
|
112
|
-
|
|
90
|
+
template <typename OtherDerived>
|
|
91
|
+
using DiagonalProductReturnType = DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(
|
|
92
|
+
DiagonalVectorType, typename OtherDerived::DiagonalVectorType, product)>;
|
|
93
|
+
|
|
94
|
+
/** \returns the diagonal matrix product of \c *this by the diagonal matrix \a other */
|
|
95
|
+
template <typename OtherDerived>
|
|
96
|
+
EIGEN_DEVICE_FUNC const DiagonalProductReturnType<OtherDerived> operator*(
|
|
97
|
+
const DiagonalBase<OtherDerived>& other) const {
|
|
98
|
+
return diagonal().cwiseProduct(other.diagonal()).asDiagonal();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
using DiagonalInverseReturnType =
|
|
102
|
+
DiagonalWrapper<const CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const DiagonalVectorType>>;
|
|
103
|
+
|
|
104
|
+
/** \returns the inverse \c *this. Computed as the coefficient-wise inverse of the diagonal. */
|
|
105
|
+
EIGEN_DEVICE_FUNC inline const DiagonalInverseReturnType inverse() const {
|
|
106
|
+
return diagonal().cwiseInverse().asDiagonal();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
using DiagonalScaleReturnType =
|
|
110
|
+
DiagonalWrapper<const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DiagonalVectorType, Scalar, product)>;
|
|
111
|
+
|
|
112
|
+
/** \returns the product of \c *this by the scalar \a scalar */
|
|
113
|
+
EIGEN_DEVICE_FUNC inline const DiagonalScaleReturnType operator*(const Scalar& scalar) const {
|
|
114
|
+
return (diagonal() * scalar).asDiagonal();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
using ScaleDiagonalReturnType =
|
|
118
|
+
DiagonalWrapper<const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(Scalar, DiagonalVectorType, product)>;
|
|
119
|
+
|
|
120
|
+
/** \returns the product of a scalar and the diagonal matrix \a other */
|
|
121
|
+
EIGEN_DEVICE_FUNC friend inline const ScaleDiagonalReturnType operator*(const Scalar& scalar,
|
|
122
|
+
const DiagonalBase& other) {
|
|
123
|
+
return (scalar * other.diagonal()).asDiagonal();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
template <typename OtherDerived>
|
|
127
|
+
using DiagonalSumReturnType = DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(
|
|
128
|
+
DiagonalVectorType, typename OtherDerived::DiagonalVectorType, sum)>;
|
|
129
|
+
|
|
130
|
+
/** \returns the sum of \c *this and the diagonal matrix \a other */
|
|
131
|
+
template <typename OtherDerived>
|
|
132
|
+
EIGEN_DEVICE_FUNC inline const DiagonalSumReturnType<OtherDerived> operator+(
|
|
133
|
+
const DiagonalBase<OtherDerived>& other) const {
|
|
134
|
+
return (diagonal() + other.diagonal()).asDiagonal();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <typename OtherDerived>
|
|
138
|
+
using DiagonalDifferenceReturnType = DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(
|
|
139
|
+
DiagonalVectorType, typename OtherDerived::DiagonalVectorType, difference)>;
|
|
140
|
+
|
|
141
|
+
/** \returns the difference of \c *this and the diagonal matrix \a other */
|
|
142
|
+
template <typename OtherDerived>
|
|
143
|
+
EIGEN_DEVICE_FUNC inline const DiagonalDifferenceReturnType<OtherDerived> operator-(
|
|
144
|
+
const DiagonalBase<OtherDerived>& other) const {
|
|
145
|
+
return (diagonal() - other.diagonal()).asDiagonal();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
113
148
|
|
|
114
149
|
/** \class DiagonalMatrix
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
150
|
+
* \ingroup Core_Module
|
|
151
|
+
*
|
|
152
|
+
* \brief Represents a diagonal matrix with its storage
|
|
153
|
+
*
|
|
154
|
+
* \tparam Scalar_ the type of coefficients
|
|
155
|
+
* \tparam SizeAtCompileTime the dimension of the matrix, or Dynamic
|
|
156
|
+
* \tparam MaxSizeAtCompileTime the dimension of the matrix, or Dynamic. This parameter is optional and defaults
|
|
157
|
+
* to SizeAtCompileTime. Most of the time, you do not need to specify it.
|
|
158
|
+
*
|
|
159
|
+
* \sa class DiagonalBase, class DiagonalWrapper
|
|
160
|
+
*/
|
|
126
161
|
|
|
127
162
|
namespace internal {
|
|
128
|
-
template<typename
|
|
129
|
-
struct traits<DiagonalMatrix<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
typedef Matrix<_Scalar,SizeAtCompileTime,1,0,MaxSizeAtCompileTime,1> DiagonalVectorType;
|
|
163
|
+
template <typename Scalar_, int SizeAtCompileTime, int MaxSizeAtCompileTime>
|
|
164
|
+
struct traits<DiagonalMatrix<Scalar_, SizeAtCompileTime, MaxSizeAtCompileTime>>
|
|
165
|
+
: traits<Matrix<Scalar_, SizeAtCompileTime, SizeAtCompileTime, 0, MaxSizeAtCompileTime, MaxSizeAtCompileTime>> {
|
|
166
|
+
typedef Matrix<Scalar_, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1> DiagonalVectorType;
|
|
133
167
|
typedef DiagonalShape StorageKind;
|
|
134
|
-
enum {
|
|
135
|
-
Flags = LvalueBit | NoPreferredStorageOrderBit
|
|
136
|
-
};
|
|
168
|
+
enum { Flags = LvalueBit | NoPreferredStorageOrderBit | NestByRefBit };
|
|
137
169
|
};
|
|
138
|
-
}
|
|
139
|
-
template<typename
|
|
140
|
-
class DiagonalMatrix
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
/** \brief Construct a diagonal matrix with fixed size from an arbitrary number of coefficients. \cpp11
|
|
183
|
-
*
|
|
184
|
-
* There exists C++98 anologue constructors for fixed-size diagonal matrices having 2 or 3 coefficients.
|
|
185
|
-
*
|
|
186
|
-
* \warning To construct a diagonal matrix of fixed size, the number of values passed to this
|
|
187
|
-
* constructor must match the fixed dimension of \c *this.
|
|
188
|
-
*
|
|
189
|
-
* \sa DiagonalMatrix(const Scalar&, const Scalar&)
|
|
190
|
-
* \sa DiagonalMatrix(const Scalar&, const Scalar&, const Scalar&)
|
|
191
|
-
*/
|
|
192
|
-
template <typename... ArgTypes>
|
|
193
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
194
|
-
DiagonalMatrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const ArgTypes&... args)
|
|
170
|
+
} // namespace internal
|
|
171
|
+
template <typename Scalar_, int SizeAtCompileTime, int MaxSizeAtCompileTime>
|
|
172
|
+
class DiagonalMatrix : public DiagonalBase<DiagonalMatrix<Scalar_, SizeAtCompileTime, MaxSizeAtCompileTime>> {
|
|
173
|
+
public:
|
|
174
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
175
|
+
typedef typename internal::traits<DiagonalMatrix>::DiagonalVectorType DiagonalVectorType;
|
|
176
|
+
typedef const DiagonalMatrix& Nested;
|
|
177
|
+
typedef Scalar_ Scalar;
|
|
178
|
+
typedef typename internal::traits<DiagonalMatrix>::StorageKind StorageKind;
|
|
179
|
+
typedef typename internal::traits<DiagonalMatrix>::StorageIndex StorageIndex;
|
|
180
|
+
#endif
|
|
181
|
+
|
|
182
|
+
protected:
|
|
183
|
+
DiagonalVectorType m_diagonal;
|
|
184
|
+
|
|
185
|
+
public:
|
|
186
|
+
/** const version of diagonal(). */
|
|
187
|
+
EIGEN_DEVICE_FUNC inline const DiagonalVectorType& diagonal() const { return m_diagonal; }
|
|
188
|
+
/** \returns a reference to the stored vector of diagonal coefficients. */
|
|
189
|
+
EIGEN_DEVICE_FUNC inline DiagonalVectorType& diagonal() { return m_diagonal; }
|
|
190
|
+
|
|
191
|
+
/** Default constructor without initialization */
|
|
192
|
+
EIGEN_DEVICE_FUNC inline DiagonalMatrix() {}
|
|
193
|
+
|
|
194
|
+
/** Constructs a diagonal matrix with given dimension */
|
|
195
|
+
EIGEN_DEVICE_FUNC explicit inline DiagonalMatrix(Index dim) : m_diagonal(dim) {}
|
|
196
|
+
|
|
197
|
+
/** 2D constructor. */
|
|
198
|
+
EIGEN_DEVICE_FUNC inline DiagonalMatrix(const Scalar& x, const Scalar& y) : m_diagonal(x, y) {}
|
|
199
|
+
|
|
200
|
+
/** 3D constructor. */
|
|
201
|
+
EIGEN_DEVICE_FUNC inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x, y, z) {}
|
|
202
|
+
|
|
203
|
+
/** \brief Construct a diagonal matrix with fixed size from an arbitrary number of coefficients.
|
|
204
|
+
*
|
|
205
|
+
* \warning To construct a diagonal matrix of fixed size, the number of values passed to this
|
|
206
|
+
* constructor must match the fixed dimension of \c *this.
|
|
207
|
+
*
|
|
208
|
+
* \sa DiagonalMatrix(const Scalar&, const Scalar&)
|
|
209
|
+
* \sa DiagonalMatrix(const Scalar&, const Scalar&, const Scalar&)
|
|
210
|
+
*/
|
|
211
|
+
template <typename... ArgTypes>
|
|
212
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DiagonalMatrix(const Scalar& a0, const Scalar& a1, const Scalar& a2,
|
|
213
|
+
const ArgTypes&... args)
|
|
195
214
|
: m_diagonal(a0, a1, a2, args...) {}
|
|
196
215
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
216
|
+
/** \brief Constructs a DiagonalMatrix and initializes it by elements given by an initializer list of initializer
|
|
217
|
+
* lists \cpp11
|
|
218
|
+
*/
|
|
219
|
+
EIGEN_DEVICE_FUNC explicit EIGEN_STRONG_INLINE DiagonalMatrix(
|
|
220
|
+
const std::initializer_list<std::initializer_list<Scalar>>& list)
|
|
202
221
|
: m_diagonal(list) {}
|
|
203
|
-
#endif // EIGEN_HAS_CXX11
|
|
204
|
-
|
|
205
|
-
/** Copy constructor. */
|
|
206
|
-
template<typename OtherDerived>
|
|
207
|
-
EIGEN_DEVICE_FUNC
|
|
208
|
-
inline DiagonalMatrix(const DiagonalBase<OtherDerived>& other) : m_diagonal(other.diagonal()) {}
|
|
209
|
-
|
|
210
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
211
|
-
/** copy constructor. prevent a default copy constructor from hiding the other templated constructor */
|
|
212
|
-
inline DiagonalMatrix(const DiagonalMatrix& other) : m_diagonal(other.diagonal()) {}
|
|
213
|
-
#endif
|
|
214
|
-
|
|
215
|
-
/** generic constructor from expression of the diagonal coefficients */
|
|
216
|
-
template<typename OtherDerived>
|
|
217
|
-
EIGEN_DEVICE_FUNC
|
|
218
|
-
explicit inline DiagonalMatrix(const MatrixBase<OtherDerived>& other) : m_diagonal(other)
|
|
219
|
-
{}
|
|
220
|
-
|
|
221
|
-
/** Copy operator. */
|
|
222
|
-
template<typename OtherDerived>
|
|
223
|
-
EIGEN_DEVICE_FUNC
|
|
224
|
-
DiagonalMatrix& operator=(const DiagonalBase<OtherDerived>& other)
|
|
225
|
-
{
|
|
226
|
-
m_diagonal = other.diagonal();
|
|
227
|
-
return *this;
|
|
228
|
-
}
|
|
229
222
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
223
|
+
/** \brief Constructs a DiagonalMatrix from an r-value diagonal vector type */
|
|
224
|
+
EIGEN_DEVICE_FUNC explicit inline DiagonalMatrix(DiagonalVectorType&& diag) : m_diagonal(std::move(diag)) {}
|
|
225
|
+
|
|
226
|
+
/** Copy constructor. */
|
|
227
|
+
template <typename OtherDerived>
|
|
228
|
+
EIGEN_DEVICE_FUNC inline DiagonalMatrix(const DiagonalBase<OtherDerived>& other) : m_diagonal(other.diagonal()) {}
|
|
229
|
+
|
|
230
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
231
|
+
/** copy constructor. prevent a default copy constructor from hiding the other templated constructor */
|
|
232
|
+
inline DiagonalMatrix(const DiagonalMatrix& other) : m_diagonal(other.diagonal()) {}
|
|
233
|
+
#endif
|
|
234
|
+
|
|
235
|
+
/** generic constructor from expression of the diagonal coefficients */
|
|
236
|
+
template <typename OtherDerived>
|
|
237
|
+
EIGEN_DEVICE_FUNC explicit inline DiagonalMatrix(const MatrixBase<OtherDerived>& other) : m_diagonal(other) {}
|
|
238
|
+
|
|
239
|
+
/** Copy operator. */
|
|
240
|
+
template <typename OtherDerived>
|
|
241
|
+
EIGEN_DEVICE_FUNC DiagonalMatrix& operator=(const DiagonalBase<OtherDerived>& other) {
|
|
242
|
+
m_diagonal = other.diagonal();
|
|
243
|
+
return *this;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
247
|
+
/** This is a special case of the templated operator=. Its purpose is to
|
|
248
|
+
* prevent a default operator= from hiding the templated operator=.
|
|
249
|
+
*/
|
|
250
|
+
EIGEN_DEVICE_FUNC DiagonalMatrix& operator=(const DiagonalMatrix& other) {
|
|
251
|
+
m_diagonal = other.diagonal();
|
|
252
|
+
return *this;
|
|
253
|
+
}
|
|
254
|
+
#endif
|
|
255
|
+
|
|
256
|
+
typedef DiagonalWrapper<const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, DiagonalVectorType>>
|
|
257
|
+
InitializeReturnType;
|
|
258
|
+
|
|
259
|
+
typedef DiagonalWrapper<const CwiseNullaryOp<internal::scalar_zero_op<Scalar>, DiagonalVectorType>>
|
|
260
|
+
ZeroInitializeReturnType;
|
|
261
|
+
|
|
262
|
+
/** Initializes a diagonal matrix of size SizeAtCompileTime with coefficients set to zero */
|
|
263
|
+
EIGEN_DEVICE_FUNC static const ZeroInitializeReturnType Zero() { return DiagonalVectorType::Zero().asDiagonal(); }
|
|
264
|
+
/** Initializes a diagonal matrix of size dim with coefficients set to zero */
|
|
265
|
+
EIGEN_DEVICE_FUNC static const ZeroInitializeReturnType Zero(Index size) {
|
|
266
|
+
return DiagonalVectorType::Zero(size).asDiagonal();
|
|
267
|
+
}
|
|
268
|
+
/** Initializes a identity matrix of size SizeAtCompileTime */
|
|
269
|
+
EIGEN_DEVICE_FUNC static const InitializeReturnType Identity() { return DiagonalVectorType::Ones().asDiagonal(); }
|
|
270
|
+
/** Initializes a identity matrix of size dim */
|
|
271
|
+
EIGEN_DEVICE_FUNC static const InitializeReturnType Identity(Index size) {
|
|
272
|
+
return DiagonalVectorType::Ones(size).asDiagonal();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** Resizes to given size. */
|
|
276
|
+
EIGEN_DEVICE_FUNC inline void resize(Index size) { m_diagonal.resize(size); }
|
|
277
|
+
/** Sets all coefficients to zero. */
|
|
278
|
+
EIGEN_DEVICE_FUNC inline void setZero() { m_diagonal.setZero(); }
|
|
279
|
+
/** Resizes and sets all coefficients to zero. */
|
|
280
|
+
EIGEN_DEVICE_FUNC inline void setZero(Index size) { m_diagonal.setZero(size); }
|
|
281
|
+
/** Sets this matrix to be the identity matrix of the current size. */
|
|
282
|
+
EIGEN_DEVICE_FUNC inline void setIdentity() { m_diagonal.setOnes(); }
|
|
283
|
+
/** Sets this matrix to be the identity matrix of the given size. */
|
|
284
|
+
EIGEN_DEVICE_FUNC inline void setIdentity(Index size) { m_diagonal.setOnes(size); }
|
|
257
285
|
};
|
|
258
286
|
|
|
259
287
|
/** \class DiagonalWrapper
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
288
|
+
* \ingroup Core_Module
|
|
289
|
+
*
|
|
290
|
+
* \brief Expression of a diagonal matrix
|
|
291
|
+
*
|
|
292
|
+
* \tparam DiagonalVectorType_ the type of the vector of diagonal coefficients
|
|
293
|
+
*
|
|
294
|
+
* This class is an expression of a diagonal matrix, but not storing its own vector of diagonal coefficients,
|
|
295
|
+
* instead wrapping an existing vector expression. It is the return type of MatrixBase::asDiagonal()
|
|
296
|
+
* and most of the time this is the only way that it is used.
|
|
297
|
+
*
|
|
298
|
+
* \sa class DiagonalMatrix, class DiagonalBase, MatrixBase::asDiagonal()
|
|
299
|
+
*/
|
|
272
300
|
|
|
273
301
|
namespace internal {
|
|
274
|
-
template<typename
|
|
275
|
-
struct traits<DiagonalWrapper<
|
|
276
|
-
|
|
277
|
-
typedef _DiagonalVectorType DiagonalVectorType;
|
|
302
|
+
template <typename DiagonalVectorType_>
|
|
303
|
+
struct traits<DiagonalWrapper<DiagonalVectorType_>> {
|
|
304
|
+
typedef DiagonalVectorType_ DiagonalVectorType;
|
|
278
305
|
typedef typename DiagonalVectorType::Scalar Scalar;
|
|
279
306
|
typedef typename DiagonalVectorType::StorageIndex StorageIndex;
|
|
280
307
|
typedef DiagonalShape StorageKind;
|
|
@@ -284,108 +311,110 @@ struct traits<DiagonalWrapper<_DiagonalVectorType> >
|
|
|
284
311
|
ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
|
|
285
312
|
MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
286
313
|
MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
|
|
287
|
-
Flags =
|
|
314
|
+
Flags = (traits<DiagonalVectorType>::Flags & LvalueBit) | NoPreferredStorageOrderBit
|
|
288
315
|
};
|
|
289
316
|
};
|
|
290
|
-
}
|
|
317
|
+
} // namespace internal
|
|
318
|
+
|
|
319
|
+
template <typename DiagonalVectorType_>
|
|
320
|
+
class DiagonalWrapper : public DiagonalBase<DiagonalWrapper<DiagonalVectorType_>>, internal::no_assignment_operator {
|
|
321
|
+
public:
|
|
322
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
323
|
+
typedef DiagonalVectorType_ DiagonalVectorType;
|
|
324
|
+
typedef DiagonalWrapper Nested;
|
|
325
|
+
#endif
|
|
291
326
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
#endif
|
|
301
|
-
|
|
302
|
-
/** Constructor from expression of diagonal coefficients to wrap. */
|
|
303
|
-
EIGEN_DEVICE_FUNC
|
|
304
|
-
explicit inline DiagonalWrapper(DiagonalVectorType& a_diagonal) : m_diagonal(a_diagonal) {}
|
|
305
|
-
|
|
306
|
-
/** \returns a const reference to the wrapped expression of diagonal coefficients. */
|
|
307
|
-
EIGEN_DEVICE_FUNC
|
|
308
|
-
const DiagonalVectorType& diagonal() const { return m_diagonal; }
|
|
309
|
-
|
|
310
|
-
protected:
|
|
311
|
-
typename DiagonalVectorType::Nested m_diagonal;
|
|
327
|
+
/** Constructor from expression of diagonal coefficients to wrap. */
|
|
328
|
+
EIGEN_DEVICE_FUNC explicit inline DiagonalWrapper(DiagonalVectorType& a_diagonal) : m_diagonal(a_diagonal) {}
|
|
329
|
+
|
|
330
|
+
/** \returns a const reference to the wrapped expression of diagonal coefficients. */
|
|
331
|
+
EIGEN_DEVICE_FUNC const DiagonalVectorType& diagonal() const { return m_diagonal; }
|
|
332
|
+
|
|
333
|
+
protected:
|
|
334
|
+
typename DiagonalVectorType::Nested m_diagonal;
|
|
312
335
|
};
|
|
313
336
|
|
|
314
337
|
/** \returns a pseudo-expression of a diagonal matrix with *this as vector of diagonal coefficients
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
template<typename Derived>
|
|
324
|
-
EIGEN_DEVICE_FUNC inline const DiagonalWrapper<const Derived>
|
|
325
|
-
MatrixBase<Derived>::asDiagonal() const
|
|
326
|
-
{
|
|
338
|
+
*
|
|
339
|
+
* \only_for_vectors
|
|
340
|
+
*
|
|
341
|
+
* Example: \include MatrixBase_asDiagonal.cpp
|
|
342
|
+
* Output: \verbinclude MatrixBase_asDiagonal.out
|
|
343
|
+
*
|
|
344
|
+
* \sa class DiagonalWrapper, class DiagonalMatrix, diagonal(), isDiagonal()
|
|
345
|
+
**/
|
|
346
|
+
template <typename Derived>
|
|
347
|
+
EIGEN_DEVICE_FUNC inline const DiagonalWrapper<const Derived> MatrixBase<Derived>::asDiagonal() const {
|
|
327
348
|
return DiagonalWrapper<const Derived>(derived());
|
|
328
349
|
}
|
|
329
350
|
|
|
330
351
|
/** \returns true if *this is approximately equal to a diagonal matrix,
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
template<typename Derived>
|
|
339
|
-
bool MatrixBase<Derived>::isDiagonal(const RealScalar& prec) const
|
|
340
|
-
|
|
341
|
-
if(cols() != rows()) return false;
|
|
352
|
+
* within the precision given by \a prec.
|
|
353
|
+
*
|
|
354
|
+
* Example: \include MatrixBase_isDiagonal.cpp
|
|
355
|
+
* Output: \verbinclude MatrixBase_isDiagonal.out
|
|
356
|
+
*
|
|
357
|
+
* \sa asDiagonal()
|
|
358
|
+
*/
|
|
359
|
+
template <typename Derived>
|
|
360
|
+
bool MatrixBase<Derived>::isDiagonal(const RealScalar& prec) const {
|
|
361
|
+
if (cols() != rows()) return false;
|
|
342
362
|
RealScalar maxAbsOnDiagonal = static_cast<RealScalar>(-1);
|
|
343
|
-
for(Index j = 0; j < cols(); ++j)
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
if(absOnDiagonal > maxAbsOnDiagonal) maxAbsOnDiagonal = absOnDiagonal;
|
|
363
|
+
for (Index j = 0; j < cols(); ++j) {
|
|
364
|
+
RealScalar absOnDiagonal = numext::abs(coeff(j, j));
|
|
365
|
+
if (absOnDiagonal > maxAbsOnDiagonal) maxAbsOnDiagonal = absOnDiagonal;
|
|
347
366
|
}
|
|
348
|
-
for(Index j = 0; j < cols(); ++j)
|
|
349
|
-
for(Index i = 0; i < j; ++i)
|
|
350
|
-
|
|
351
|
-
if(!internal::isMuchSmallerThan(coeff(
|
|
352
|
-
if(!internal::isMuchSmallerThan(coeff(j, i), maxAbsOnDiagonal, prec)) return false;
|
|
367
|
+
for (Index j = 0; j < cols(); ++j)
|
|
368
|
+
for (Index i = 0; i < j; ++i) {
|
|
369
|
+
if (!internal::isMuchSmallerThan(coeff(i, j), maxAbsOnDiagonal, prec)) return false;
|
|
370
|
+
if (!internal::isMuchSmallerThan(coeff(j, i), maxAbsOnDiagonal, prec)) return false;
|
|
353
371
|
}
|
|
354
372
|
return true;
|
|
355
373
|
}
|
|
356
374
|
|
|
357
375
|
namespace internal {
|
|
358
376
|
|
|
359
|
-
template<>
|
|
377
|
+
template <>
|
|
378
|
+
struct storage_kind_to_shape<DiagonalShape> {
|
|
379
|
+
typedef DiagonalShape Shape;
|
|
380
|
+
};
|
|
360
381
|
|
|
361
382
|
struct Diagonal2Dense {};
|
|
362
383
|
|
|
363
|
-
template<>
|
|
384
|
+
template <>
|
|
385
|
+
struct AssignmentKind<DenseShape, DiagonalShape> {
|
|
386
|
+
typedef Diagonal2Dense Kind;
|
|
387
|
+
};
|
|
364
388
|
|
|
365
389
|
// Diagonal matrix to Dense assignment
|
|
366
|
-
template<
|
|
367
|
-
struct Assignment<DstXprType, SrcXprType, Functor, Diagonal2Dense>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
390
|
+
template <typename DstXprType, typename SrcXprType, typename Functor>
|
|
391
|
+
struct Assignment<DstXprType, SrcXprType, Functor, Diagonal2Dense> {
|
|
392
|
+
static EIGEN_DEVICE_FUNC void run(
|
|
393
|
+
DstXprType& dst, const SrcXprType& src,
|
|
394
|
+
const internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /*func*/) {
|
|
371
395
|
Index dstRows = src.rows();
|
|
372
396
|
Index dstCols = src.cols();
|
|
373
|
-
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
|
374
|
-
|
|
375
|
-
|
|
397
|
+
if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
|
|
398
|
+
|
|
376
399
|
dst.setZero();
|
|
377
400
|
dst.diagonal() = src.diagonal();
|
|
378
401
|
}
|
|
379
|
-
|
|
380
|
-
static void run(
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
402
|
+
|
|
403
|
+
static EIGEN_DEVICE_FUNC void run(
|
|
404
|
+
DstXprType& dst, const SrcXprType& src,
|
|
405
|
+
const internal::add_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /*func*/) {
|
|
406
|
+
dst.diagonal() += src.diagonal();
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
static EIGEN_DEVICE_FUNC void run(
|
|
410
|
+
DstXprType& dst, const SrcXprType& src,
|
|
411
|
+
const internal::sub_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /*func*/) {
|
|
412
|
+
dst.diagonal() -= src.diagonal();
|
|
413
|
+
}
|
|
385
414
|
};
|
|
386
415
|
|
|
387
|
-
}
|
|
416
|
+
} // namespace internal
|
|
388
417
|
|
|
389
|
-
}
|
|
418
|
+
} // end namespace Eigen
|
|
390
419
|
|
|
391
|
-
#endif
|
|
420
|
+
#endif // EIGEN_DIAGONALMATRIX_H
|