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