@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  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 +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -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 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  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 +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  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 +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  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 +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  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 +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  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 +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  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 +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  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 -46
  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 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  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 +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  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 +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  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 +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  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 +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  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 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  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 +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  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 +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  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 +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  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 +371 -414
  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 +146 -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 +814 -618
  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 +273 -255
  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 +90 -101
  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 +125 -133
  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 +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  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 -732
  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 +480 -380
  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 +9976 -16182
  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.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  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/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -11,449 +11,524 @@
11
11
  #ifndef EIGEN_MATRIX_H
12
12
  #define EIGEN_MATRIX_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
18
 
16
19
  namespace internal {
17
- template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
18
- struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
19
- {
20
- private:
21
- enum { size = internal::size_at_compile_time<_Rows,_Cols>::ret };
22
- typedef typename find_best_packet<_Scalar,size>::type PacketScalar;
20
+ template <typename Scalar_, int Rows_, int Cols_, int Options_, int MaxRows_, int MaxCols_>
21
+ struct traits<Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>> {
22
+ private:
23
+ constexpr static int size = internal::size_at_compile_time(Rows_, Cols_);
24
+ typedef typename find_best_packet<Scalar_, size>::type PacketScalar;
23
25
  enum {
24
- row_major_bit = _Options&RowMajor ? RowMajorBit : 0,
25
- is_dynamic_size_storage = _MaxRows==Dynamic || _MaxCols==Dynamic,
26
- max_size = is_dynamic_size_storage ? Dynamic : _MaxRows*_MaxCols,
27
- default_alignment = compute_default_alignment<_Scalar,max_size>::value,
28
- actual_alignment = ((_Options&DontAlign)==0) ? default_alignment : 0,
29
- required_alignment = unpacket_traits<PacketScalar>::alignment,
30
- packet_access_bit = (packet_traits<_Scalar>::Vectorizable && (EIGEN_UNALIGNED_VECTORIZE || (actual_alignment>=required_alignment))) ? PacketAccessBit : 0
31
- };
32
-
33
- public:
34
- typedef _Scalar Scalar;
26
+ row_major_bit = Options_ & RowMajor ? RowMajorBit : 0,
27
+ is_dynamic_size_storage = MaxRows_ == Dynamic || MaxCols_ == Dynamic,
28
+ max_size = is_dynamic_size_storage ? Dynamic : MaxRows_ * MaxCols_,
29
+ default_alignment = compute_default_alignment<Scalar_, max_size>::value,
30
+ actual_alignment = ((Options_ & DontAlign) == 0) ? default_alignment : 0,
31
+ required_alignment = unpacket_traits<PacketScalar>::alignment,
32
+ packet_access_bit = (packet_traits<Scalar_>::Vectorizable &&
33
+ (EIGEN_UNALIGNED_VECTORIZE || (int(actual_alignment) >= int(required_alignment))))
34
+ ? PacketAccessBit
35
+ : 0
36
+ };
37
+
38
+ public:
39
+ typedef Scalar_ Scalar;
35
40
  typedef Dense StorageKind;
36
41
  typedef Eigen::Index StorageIndex;
37
42
  typedef MatrixXpr XprKind;
38
43
  enum {
39
- RowsAtCompileTime = _Rows,
40
- ColsAtCompileTime = _Cols,
41
- MaxRowsAtCompileTime = _MaxRows,
42
- MaxColsAtCompileTime = _MaxCols,
43
- Flags = compute_matrix_flags<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::ret,
44
- Options = _Options,
44
+ RowsAtCompileTime = Rows_,
45
+ ColsAtCompileTime = Cols_,
46
+ MaxRowsAtCompileTime = MaxRows_,
47
+ MaxColsAtCompileTime = MaxCols_,
48
+ Flags = compute_matrix_flags(Options_),
49
+ Options = Options_,
45
50
  InnerStrideAtCompileTime = 1,
46
- OuterStrideAtCompileTime = (Options&RowMajor) ? ColsAtCompileTime : RowsAtCompileTime,
47
-
51
+ OuterStrideAtCompileTime = (int(Options) & int(RowMajor)) ? ColsAtCompileTime : RowsAtCompileTime,
52
+
48
53
  // FIXME, the following flag in only used to define NeedsToAlign in PlainObjectBase
49
54
  EvaluatorFlags = LinearAccessBit | DirectAccessBit | packet_access_bit | row_major_bit,
50
55
  Alignment = actual_alignment
51
56
  };
52
57
  };
53
- }
58
+ } // namespace internal
54
59
 
55
60
  /** \class Matrix
56
- * \ingroup Core_Module
57
- *
58
- * \brief The matrix class, also used for vectors and row-vectors
59
- *
60
- * The %Matrix class is the work-horse for all \em dense (\ref dense "note") matrices and vectors within Eigen.
61
- * Vectors are matrices with one column, and row-vectors are matrices with one row.
62
- *
63
- * The %Matrix class encompasses \em both fixed-size and dynamic-size objects (\ref fixedsize "note").
64
- *
65
- * The first three template parameters are required:
66
- * \tparam _Scalar Numeric type, e.g. float, double, int or std::complex<float>.
67
- * User defined scalar types are supported as well (see \ref user_defined_scalars "here").
68
- * \tparam _Rows Number of rows, or \b Dynamic
69
- * \tparam _Cols Number of columns, or \b Dynamic
70
- *
71
- * The remaining template parameters are optional -- in most cases you don't have to worry about them.
72
- * \tparam _Options A combination of either \b #RowMajor or \b #ColMajor, and of either
73
- * \b #AutoAlign or \b #DontAlign.
74
- * The former controls \ref TopicStorageOrders "storage order", and defaults to column-major. The latter controls alignment, which is required
75
- * for vectorization. It defaults to aligning matrices except for fixed sizes that aren't a multiple of the packet size.
76
- * \tparam _MaxRows Maximum number of rows. Defaults to \a _Rows (\ref maxrows "note").
77
- * \tparam _MaxCols Maximum number of columns. Defaults to \a _Cols (\ref maxrows "note").
78
- *
79
- * Eigen provides a number of typedefs covering the usual cases. Here are some examples:
80
- *
81
- * \li \c Matrix2d is a 2x2 square matrix of doubles (\c Matrix<double, 2, 2>)
82
- * \li \c Vector4f is a vector of 4 floats (\c Matrix<float, 4, 1>)
83
- * \li \c RowVector3i is a row-vector of 3 ints (\c Matrix<int, 1, 3>)
84
- *
85
- * \li \c MatrixXf is a dynamic-size matrix of floats (\c Matrix<float, Dynamic, Dynamic>)
86
- * \li \c VectorXf is a dynamic-size vector of floats (\c Matrix<float, Dynamic, 1>)
87
- *
88
- * \li \c Matrix2Xf is a partially fixed-size (dynamic-size) matrix of floats (\c Matrix<float, 2, Dynamic>)
89
- * \li \c MatrixX3d is a partially dynamic-size (fixed-size) matrix of double (\c Matrix<double, Dynamic, 3>)
90
- *
91
- * See \link matrixtypedefs this page \endlink for a complete list of predefined \em %Matrix and \em Vector typedefs.
92
- *
93
- * You can access elements of vectors and matrices using normal subscripting:
94
- *
95
- * \code
96
- * Eigen::VectorXd v(10);
97
- * v[0] = 0.1;
98
- * v[1] = 0.2;
99
- * v(0) = 0.3;
100
- * v(1) = 0.4;
101
- *
102
- * Eigen::MatrixXi m(10, 10);
103
- * m(0, 1) = 1;
104
- * m(0, 2) = 2;
105
- * m(0, 3) = 3;
106
- * \endcode
107
- *
108
- * This class can be extended with the help of the plugin mechanism described on the page
109
- * \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_MATRIX_PLUGIN.
110
- *
111
- * <i><b>Some notes:</b></i>
112
- *
113
- * <dl>
114
- * <dt><b>\anchor dense Dense versus sparse:</b></dt>
115
- * <dd>This %Matrix class handles dense, not sparse matrices and vectors. For sparse matrices and vectors, see the Sparse module.
116
- *
117
- * Dense matrices and vectors are plain usual arrays of coefficients. All the coefficients are stored, in an ordinary contiguous array.
118
- * This is unlike Sparse matrices and vectors where the coefficients are stored as a list of nonzero coefficients.</dd>
119
- *
120
- * <dt><b>\anchor fixedsize Fixed-size versus dynamic-size:</b></dt>
121
- * <dd>Fixed-size means that the numbers of rows and columns are known are compile-time. In this case, Eigen allocates the array
122
- * of coefficients as a fixed-size array, as a class member. This makes sense for very small matrices, typically up to 4x4, sometimes up
123
- * to 16x16. Larger matrices should be declared as dynamic-size even if one happens to know their size at compile-time.
124
- *
125
- * Dynamic-size means that the numbers of rows or columns are not necessarily known at compile-time. In this case they are runtime
126
- * variables, and the array of coefficients is allocated dynamically on the heap.
127
- *
128
- * Note that \em dense matrices, be they Fixed-size or Dynamic-size, <em>do not</em> expand dynamically in the sense of a std::map.
129
- * If you want this behavior, see the Sparse module.</dd>
130
- *
131
- * <dt><b>\anchor maxrows _MaxRows and _MaxCols:</b></dt>
132
- * <dd>In most cases, one just leaves these parameters to the default values.
133
- * These parameters mean the maximum size of rows and columns that the matrix may have. They are useful in cases
134
- * when the exact numbers of rows and columns are not known are compile-time, but it is known at compile-time that they cannot
135
- * exceed a certain value. This happens when taking dynamic-size blocks inside fixed-size matrices: in this case _MaxRows and _MaxCols
136
- * are the dimensions of the original matrix, while _Rows and _Cols are Dynamic.</dd>
137
- * </dl>
138
- *
139
- * <i><b>ABI and storage layout</b></i>
140
- *
141
- * The table below summarizes the ABI of some possible Matrix instances which is fixed thorough the lifetime of Eigen 3.
142
- * <table class="manual">
143
- * <tr><th>Matrix type</th><th>Equivalent C structure</th></tr>
144
- * <tr><td>\code Matrix<T,Dynamic,Dynamic> \endcode</td><td>\code
145
- * struct {
146
- * T *data; // with (size_t(data)%EIGEN_MAX_ALIGN_BYTES)==0
147
- * Eigen::Index rows, cols;
148
- * };
149
- * \endcode</td></tr>
150
- * <tr class="alt"><td>\code
151
- * Matrix<T,Dynamic,1>
152
- * Matrix<T,1,Dynamic> \endcode</td><td>\code
153
- * struct {
154
- * T *data; // with (size_t(data)%EIGEN_MAX_ALIGN_BYTES)==0
155
- * Eigen::Index size;
156
- * };
157
- * \endcode</td></tr>
158
- * <tr><td>\code Matrix<T,Rows,Cols> \endcode</td><td>\code
159
- * struct {
160
- * T data[Rows*Cols]; // with (size_t(data)%A(Rows*Cols*sizeof(T)))==0
161
- * };
162
- * \endcode</td></tr>
163
- * <tr class="alt"><td>\code Matrix<T,Dynamic,Dynamic,0,MaxRows,MaxCols> \endcode</td><td>\code
164
- * struct {
165
- * T data[MaxRows*MaxCols]; // with (size_t(data)%A(MaxRows*MaxCols*sizeof(T)))==0
166
- * Eigen::Index rows, cols;
167
- * };
168
- * \endcode</td></tr>
169
- * </table>
170
- * Note that in this table Rows, Cols, MaxRows and MaxCols are all positive integers. A(S) is defined to the largest possible power-of-two
171
- * smaller to EIGEN_MAX_STATIC_ALIGN_BYTES.
172
- *
173
- * \see MatrixBase for the majority of the API methods for matrices, \ref TopicClassHierarchy,
174
- * \ref TopicStorageOrders
175
- */
176
-
177
- template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
178
- class Matrix
179
- : public PlainObjectBase<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
180
- {
181
- public:
182
-
183
- /** \brief Base class typedef.
184
- * \sa PlainObjectBase
185
- */
186
- typedef PlainObjectBase<Matrix> Base;
187
-
188
- enum { Options = _Options };
189
-
190
- EIGEN_DENSE_PUBLIC_INTERFACE(Matrix)
191
-
192
- typedef typename Base::PlainObject PlainObject;
193
-
194
- using Base::base;
195
- using Base::coeffRef;
196
-
197
- /**
198
- * \brief Assigns matrices to each other.
199
- *
200
- * \note This is a special case of the templated operator=. Its purpose is
201
- * to prevent a default operator= from hiding the templated operator=.
202
- *
203
- * \callgraph
204
- */
205
- EIGEN_DEVICE_FUNC
206
- EIGEN_STRONG_INLINE Matrix& operator=(const Matrix& other)
207
- {
208
- return Base::_set(other);
209
- }
210
-
211
- /** \internal
212
- * \brief Copies the value of the expression \a other into \c *this with automatic resizing.
213
- *
214
- * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized),
215
- * it will be initialized.
216
- *
217
- * Note that copying a row-vector into a vector (and conversely) is allowed.
218
- * The resizing, if any, is then done in the appropriate way so that row-vectors
219
- * remain row-vectors and vectors remain vectors.
220
- */
221
- template<typename OtherDerived>
222
- EIGEN_DEVICE_FUNC
223
- EIGEN_STRONG_INLINE Matrix& operator=(const DenseBase<OtherDerived>& other)
224
- {
225
- return Base::_set(other);
226
- }
227
-
228
- /* Here, doxygen failed to copy the brief information when using \copydoc */
229
-
230
- /**
231
- * \brief Copies the generic expression \a other into *this.
232
- * \copydetails DenseBase::operator=(const EigenBase<OtherDerived> &other)
233
- */
234
- template<typename OtherDerived>
235
- EIGEN_DEVICE_FUNC
236
- EIGEN_STRONG_INLINE Matrix& operator=(const EigenBase<OtherDerived> &other)
237
- {
238
- return Base::operator=(other);
239
- }
240
-
241
- template<typename OtherDerived>
242
- EIGEN_DEVICE_FUNC
243
- EIGEN_STRONG_INLINE Matrix& operator=(const ReturnByValue<OtherDerived>& func)
244
- {
245
- return Base::operator=(func);
246
- }
247
-
248
- /** \brief Default constructor.
249
- *
250
- * For fixed-size matrices, does nothing.
251
- *
252
- * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix
253
- * is called a null matrix. This constructor is the unique way to create null matrices: resizing
254
- * a matrix to 0 is not supported.
255
- *
256
- * \sa resize(Index,Index)
257
- */
258
- EIGEN_DEVICE_FUNC
259
- EIGEN_STRONG_INLINE Matrix() : Base()
260
- {
261
- Base::_check_template_params();
262
- EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
263
- }
264
-
265
- // FIXME is it still needed
266
- EIGEN_DEVICE_FUNC
267
- explicit Matrix(internal::constructor_without_unaligned_array_assert)
268
- : Base(internal::constructor_without_unaligned_array_assert())
269
- { Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
270
-
271
- #if EIGEN_HAS_RVALUE_REFERENCES
272
- EIGEN_DEVICE_FUNC
273
- Matrix(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
274
- : Base(std::move(other))
275
- {
276
- Base::_check_template_params();
277
- }
278
- EIGEN_DEVICE_FUNC
279
- Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
280
- {
281
- other.swap(*this);
282
- return *this;
283
- }
61
+ * \ingroup Core_Module
62
+ *
63
+ * \brief The matrix class, also used for vectors and row-vectors
64
+ *
65
+ * The %Matrix class is the work-horse for all \em dense (\ref dense "note") matrices and vectors within Eigen.
66
+ * Vectors are matrices with one column, and row-vectors are matrices with one row.
67
+ *
68
+ * The %Matrix class encompasses \em both fixed-size and dynamic-size objects (\ref fixedsize "note").
69
+ *
70
+ * The first three template parameters are required:
71
+ * \tparam Scalar_ Numeric type, e.g. float, double, int or std::complex<float>.
72
+ * User defined scalar types are supported as well (see \ref user_defined_scalars "here").
73
+ * \tparam Rows_ Number of rows, or \b Dynamic
74
+ * \tparam Cols_ Number of columns, or \b Dynamic
75
+ *
76
+ * The remaining template parameters are optional -- in most cases you don't have to worry about them.
77
+ * \tparam Options_ A combination of either \b #RowMajor or \b #ColMajor, and of either
78
+ * \b #AutoAlign or \b #DontAlign.
79
+ * The former controls \ref TopicStorageOrders "storage order", and defaults to column-major. The latter
80
+ * controls alignment, which is required for vectorization. It defaults to aligning matrices except for fixed sizes that
81
+ * aren't a multiple of the packet size. \tparam MaxRows_ Maximum number of rows. Defaults to \a Rows_ (\ref maxrows
82
+ * "note"). \tparam MaxCols_ Maximum number of columns. Defaults to \a Cols_ (\ref maxrows "note").
83
+ *
84
+ * Eigen provides a number of typedefs covering the usual cases. Here are some examples:
85
+ *
86
+ * \li \c Matrix2d is a 2x2 square matrix of doubles (\c Matrix<double, 2, 2>)
87
+ * \li \c Vector4f is a vector of 4 floats (\c Matrix<float, 4, 1>)
88
+ * \li \c RowVector3i is a row-vector of 3 ints (\c Matrix<int, 1, 3>)
89
+ *
90
+ * \li \c MatrixXf is a dynamic-size matrix of floats (\c Matrix<float, Dynamic, Dynamic>)
91
+ * \li \c VectorXf is a dynamic-size vector of floats (\c Matrix<float, Dynamic, 1>)
92
+ *
93
+ * \li \c Matrix2Xf is a partially fixed-size (dynamic-size) matrix of floats (\c Matrix<float, 2, Dynamic>)
94
+ * \li \c MatrixX3d is a partially dynamic-size (fixed-size) matrix of double (\c Matrix<double, Dynamic, 3>)
95
+ *
96
+ * See \link matrixtypedefs this page \endlink for a complete list of predefined \em %Matrix and \em Vector typedefs.
97
+ *
98
+ * You can access elements of vectors and matrices using normal subscripting:
99
+ *
100
+ * \code
101
+ * Eigen::VectorXd v(10);
102
+ * v[0] = 0.1;
103
+ * v[1] = 0.2;
104
+ * v(0) = 0.3;
105
+ * v(1) = 0.4;
106
+ *
107
+ * Eigen::MatrixXi m(10, 10);
108
+ * m(0, 1) = 1;
109
+ * m(0, 2) = 2;
110
+ * m(0, 3) = 3;
111
+ * \endcode
112
+ *
113
+ * This class can be extended with the help of the plugin mechanism described on the page
114
+ * \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_MATRIX_PLUGIN.
115
+ *
116
+ * <i><b>Some notes:</b></i>
117
+ *
118
+ * <dl>
119
+ * <dt><b>\anchor dense Dense versus sparse:</b></dt>
120
+ * <dd>This %Matrix class handles dense, not sparse matrices and vectors. For sparse matrices and vectors, see the
121
+ * Sparse module.
122
+ *
123
+ * Dense matrices and vectors are plain usual arrays of coefficients. All the coefficients are stored, in an ordinary
124
+ * contiguous array. This is unlike Sparse matrices and vectors where the coefficients are stored as a list of nonzero
125
+ * coefficients.</dd>
126
+ *
127
+ * <dt><b>\anchor fixedsize Fixed-size versus dynamic-size:</b></dt>
128
+ * <dd>Fixed-size means that the numbers of rows and columns are known at compile-time. In this case, Eigen allocates
129
+ * the array of coefficients as a fixed-size array, as a class member. This makes sense for very small matrices,
130
+ * typically up to 4x4, sometimes up to 16x16. Larger matrices should be declared as dynamic-size even if one happens to
131
+ * know their size at compile-time.
132
+ *
133
+ * Dynamic-size means that the numbers of rows or columns are not necessarily known at compile-time. In this case they
134
+ * are runtime variables, and the array of coefficients is allocated dynamically on the heap.
135
+ *
136
+ * Note that \em dense matrices, be they Fixed-size or Dynamic-size, <em>do not</em> expand dynamically in the sense of
137
+ * a std::map. If you want this behavior, see the Sparse module.</dd>
138
+ *
139
+ * <dt><b>\anchor maxrows MaxRows_ and MaxCols_:</b></dt>
140
+ * <dd>In most cases, one just leaves these parameters to the default values.
141
+ * These parameters mean the maximum size of rows and columns that the matrix may have. They are useful in cases
142
+ * when the exact numbers of rows and columns are not known at compile-time, but it is known at compile-time that they
143
+ * cannot exceed a certain value. This happens when taking dynamic-size blocks inside fixed-size matrices: in this case
144
+ * MaxRows_ and MaxCols_ are the dimensions of the original matrix, while Rows_ and Cols_ are Dynamic.</dd>
145
+ * </dl>
146
+ *
147
+ * <i><b>ABI and storage layout</b></i>
148
+ *
149
+ * The table below summarizes the ABI of some possible Matrix instances which is fixed thorough the lifetime of Eigen 3.
150
+ * <table class="manual">
151
+ * <tr><th>Matrix type</th><th>Equivalent C structure</th></tr>
152
+ * <tr><td>\code Matrix<T,Dynamic,Dynamic> \endcode</td><td>\code
153
+ * struct {
154
+ * T *data; // with (size_t(data)%EIGEN_MAX_ALIGN_BYTES)==0
155
+ * Eigen::Index rows, cols;
156
+ * };
157
+ * \endcode</td></tr>
158
+ * <tr class="alt"><td>\code
159
+ * Matrix<T,Dynamic,1>
160
+ * Matrix<T,1,Dynamic> \endcode</td><td>\code
161
+ * struct {
162
+ * T *data; // with (size_t(data)%EIGEN_MAX_ALIGN_BYTES)==0
163
+ * Eigen::Index size;
164
+ * };
165
+ * \endcode</td></tr>
166
+ * <tr><td>\code Matrix<T,Rows,Cols> \endcode</td><td>\code
167
+ * struct {
168
+ * T data[Rows*Cols]; // with (size_t(data)%A(Rows*Cols*sizeof(T)))==0
169
+ * };
170
+ * \endcode</td></tr>
171
+ * <tr class="alt"><td>\code Matrix<T,Dynamic,Dynamic,0,MaxRows,MaxCols> \endcode</td><td>\code
172
+ * struct {
173
+ * T data[MaxRows*MaxCols]; // with (size_t(data)%A(MaxRows*MaxCols*sizeof(T)))==0
174
+ * Eigen::Index rows, cols;
175
+ * };
176
+ * \endcode</td></tr>
177
+ * </table>
178
+ * Note that in this table Rows, Cols, MaxRows and MaxCols are all positive integers. A(S) is defined to the largest
179
+ * possible power-of-two smaller to EIGEN_MAX_STATIC_ALIGN_BYTES.
180
+ *
181
+ * \see MatrixBase for the majority of the API methods for matrices, \ref TopicClassHierarchy,
182
+ * \ref TopicStorageOrders
183
+ */
184
+
185
+ template <typename Scalar_, int Rows_, int Cols_, int Options_, int MaxRows_, int MaxCols_>
186
+ class Matrix : public PlainObjectBase<Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>> {
187
+ public:
188
+ /** \brief Base class typedef.
189
+ * \sa PlainObjectBase
190
+ */
191
+ typedef PlainObjectBase<Matrix> Base;
192
+
193
+ enum { Options = Options_ };
194
+
195
+ EIGEN_DENSE_PUBLIC_INTERFACE(Matrix)
196
+
197
+ typedef typename Base::PlainObject PlainObject;
198
+
199
+ using Base::base;
200
+ using Base::coeffRef;
201
+
202
+ /**
203
+ * \brief Assigns matrices to each other.
204
+ *
205
+ * \note This is a special case of the templated operator=. Its purpose is
206
+ * to prevent a default operator= from hiding the templated operator=.
207
+ *
208
+ * \callgraph
209
+ */
210
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix& operator=(const Matrix& other) { return Base::_set(other); }
211
+
212
+ /** \internal
213
+ * \brief Copies the value of the expression \a other into \c *this with automatic resizing.
214
+ *
215
+ * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized),
216
+ * it will be initialized.
217
+ *
218
+ * Note that copying a row-vector into a vector (and conversely) is allowed.
219
+ * The resizing, if any, is then done in the appropriate way so that row-vectors
220
+ * remain row-vectors and vectors remain vectors.
221
+ */
222
+ template <typename OtherDerived>
223
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix& operator=(const DenseBase<OtherDerived>& other) {
224
+ return Base::_set(other);
225
+ }
226
+
227
+ /**
228
+ * \brief Copies the generic expression \a other into *this.
229
+ * \copydetails DenseBase::operator=(const EigenBase<OtherDerived> &other)
230
+ */
231
+ template <typename OtherDerived>
232
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix& operator=(const EigenBase<OtherDerived>& other) {
233
+ return Base::operator=(other);
234
+ }
235
+
236
+ template <typename OtherDerived>
237
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix& operator=(const ReturnByValue<OtherDerived>& func) {
238
+ return Base::operator=(func);
239
+ }
240
+
241
+ /** \brief Default constructor.
242
+ *
243
+ * For fixed-size matrices, does nothing.
244
+ *
245
+ * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix
246
+ * is called a null matrix. This constructor is the unique way to create null matrices: resizing
247
+ * a matrix to 0 is not supported.
248
+ *
249
+ * \sa resize(Index,Index)
250
+ */
251
+ #if defined(EIGEN_INITIALIZE_COEFFS)
252
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix() { EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
253
+ #else
254
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix() = default;
255
+ #endif
256
+ /** \brief Move constructor */
257
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix(Matrix&&) = default;
258
+ /** \brief Moves the matrix into the other one.
259
+ *
260
+ */
261
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix& operator=(Matrix&& other) noexcept(
262
+ std::is_nothrow_move_assignable<Scalar>::value) {
263
+ Base::operator=(std::move(other));
264
+ return *this;
265
+ }
266
+
267
+ /** \brief Construct a row of column vector with fixed size from an arbitrary number of coefficients.
268
+ *
269
+ * \only_for_vectors
270
+ *
271
+ * This constructor is for 1D array or vectors with more than 4 coefficients.
272
+ *
273
+ * \warning To construct a column (resp. row) vector of fixed length, the number of values passed to this
274
+ * constructor must match the the fixed number of rows (resp. columns) of \c *this.
275
+ *
276
+ *
277
+ * Example: \include Matrix_variadic_ctor_cxx11.cpp
278
+ * Output: \verbinclude Matrix_variadic_ctor_cxx11.out
279
+ *
280
+ * \sa Matrix(const std::initializer_list<std::initializer_list<Scalar>>&)
281
+ */
282
+ template <typename... ArgTypes>
283
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3,
284
+ const ArgTypes&... args)
285
+ : Base(a0, a1, a2, a3, args...) {}
286
+
287
+ /** \brief Constructs a Matrix and initializes it from the coefficients given as initializer-lists grouped by row.
288
+ * \cpp11
289
+ * \anchor matrix_initializer_list
290
+ *
291
+ * In the general case, the constructor takes a list of rows, each row being represented as a list of coefficients:
292
+ *
293
+ * Example: \include Matrix_initializer_list_23_cxx11.cpp
294
+ * Output: \verbinclude Matrix_initializer_list_23_cxx11.out
295
+ *
296
+ * Each of the inner initializer lists must contain the exact same number of elements, otherwise an assertion is
297
+ * triggered.
298
+ *
299
+ * In the case of a compile-time column vector, implicit transposition from a single row is allowed.
300
+ * Therefore <code>VectorXd{{1,2,3,4,5}}</code> is legal and the more verbose syntax
301
+ * <code>RowVectorXd{{1},{2},{3},{4},{5}}</code> can be avoided:
302
+ *
303
+ * Example: \include Matrix_initializer_list_vector_cxx11.cpp
304
+ * Output: \verbinclude Matrix_initializer_list_vector_cxx11.out
305
+ *
306
+ * In the case of fixed-sized matrices, the initializer list sizes must exactly match the matrix sizes,
307
+ * and implicit transposition is allowed for compile-time vectors only.
308
+ *
309
+ * \sa Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
310
+ */
311
+ EIGEN_DEVICE_FUNC explicit constexpr EIGEN_STRONG_INLINE Matrix(
312
+ const std::initializer_list<std::initializer_list<Scalar>>& list)
313
+ : Base(list) {}
314
+
315
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
316
+
317
+ // This constructor is for both 1x1 matrices and dynamic vectors
318
+ template <typename T>
319
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit Matrix(const T& x) {
320
+ Base::template _init1<T>(x);
321
+ }
322
+
323
+ template <typename T0, typename T1>
324
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix(const T0& x, const T1& y) {
325
+ Base::template _init2<T0, T1>(x, y);
326
+ }
327
+
328
+ #else
329
+ /** \brief Constructs a fixed-sized matrix initialized with coefficients starting at \a data */
330
+ EIGEN_DEVICE_FUNC explicit Matrix(const Scalar* data);
331
+
332
+ /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors
333
+ *
334
+ * This is useful for dynamic-size vectors. For fixed-size vectors,
335
+ * it is redundant to pass these parameters, so one should use the default constructor
336
+ * Matrix() instead.
337
+ *
338
+ * \warning This constructor is disabled for fixed-size \c 1x1 matrices. For instance,
339
+ * calling Matrix<double,1,1>(1) will call the initialization constructor: Matrix(const Scalar&).
340
+ * For fixed-size \c 1x1 matrices it is therefore recommended to use the default
341
+ * constructor Matrix() instead, especially when using one of the non standard
342
+ * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
343
+ */
344
+ EIGEN_STRONG_INLINE explicit Matrix(Index dim);
345
+ /** \brief Constructs an initialized 1x1 matrix with the given coefficient
346
+ * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
347
+ Matrix(const Scalar& x);
348
+ /** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns.
349
+ *
350
+ * This is useful for dynamic-size matrices. For fixed-size matrices,
351
+ * it is redundant to pass these parameters, so one should use the default constructor
352
+ * Matrix() instead.
353
+ *
354
+ * \warning This constructor is disabled for fixed-size \c 1x2 and \c 2x1 vectors. For instance,
355
+ * calling Matrix2f(2,1) will call the initialization constructor: Matrix(const Scalar& x, const Scalar& y).
356
+ * For fixed-size \c 1x2 or \c 2x1 vectors it is therefore recommended to use the default
357
+ * constructor Matrix() instead, especially when using one of the non standard
358
+ * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
359
+ */
360
+ EIGEN_DEVICE_FUNC Matrix(Index rows, Index cols);
361
+
362
+ /** \brief Constructs an initialized 2D vector with given coefficients
363
+ * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
364
+ Matrix(const Scalar& x, const Scalar& y);
365
+ #endif // end EIGEN_PARSED_BY_DOXYGEN
366
+
367
+ /** \brief Constructs an initialized 3D vector with given coefficients
368
+ * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
369
+ */
370
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z) {
371
+ EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3)
372
+ m_storage.data()[0] = x;
373
+ m_storage.data()[1] = y;
374
+ m_storage.data()[2] = z;
375
+ }
376
+ /** \brief Constructs an initialized 4D vector with given coefficients
377
+ * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
378
+ */
379
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w) {
380
+ EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4)
381
+ m_storage.data()[0] = x;
382
+ m_storage.data()[1] = y;
383
+ m_storage.data()[2] = z;
384
+ m_storage.data()[3] = w;
385
+ }
386
+
387
+ /** \brief Copy constructor */
388
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix(const Matrix&) = default;
389
+
390
+ /** \brief Copy constructor for generic expressions.
391
+ * \sa MatrixBase::operator=(const EigenBase<OtherDerived>&)
392
+ */
393
+ template <typename OtherDerived>
394
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Matrix(const EigenBase<OtherDerived>& other) : Base(other.derived()) {}
395
+
396
+ EIGEN_DEVICE_FUNC constexpr Index innerStride() const noexcept { return 1; }
397
+ EIGEN_DEVICE_FUNC constexpr Index outerStride() const noexcept { return this->innerSize(); }
398
+
399
+ /////////// Geometry module ///////////
400
+
401
+ template <typename OtherDerived>
402
+ EIGEN_DEVICE_FUNC explicit Matrix(const RotationBase<OtherDerived, ColsAtCompileTime>& r);
403
+ template <typename OtherDerived>
404
+ EIGEN_DEVICE_FUNC Matrix& operator=(const RotationBase<OtherDerived, ColsAtCompileTime>& r);
405
+
406
+ // allow to extend Matrix outside Eigen
407
+ #ifdef EIGEN_MATRIX_PLUGIN
408
+ #include EIGEN_MATRIX_PLUGIN
284
409
  #endif
285
410
 
286
- #ifndef EIGEN_PARSED_BY_DOXYGEN
287
-
288
- // This constructor is for both 1x1 matrices and dynamic vectors
289
- template<typename T>
290
- EIGEN_DEVICE_FUNC
291
- EIGEN_STRONG_INLINE explicit Matrix(const T& x)
292
- {
293
- Base::_check_template_params();
294
- Base::template _init1<T>(x);
295
- }
296
-
297
- template<typename T0, typename T1>
298
- EIGEN_DEVICE_FUNC
299
- EIGEN_STRONG_INLINE Matrix(const T0& x, const T1& y)
300
- {
301
- Base::_check_template_params();
302
- Base::template _init2<T0,T1>(x, y);
303
- }
304
- #else
305
- /** \brief Constructs a fixed-sized matrix initialized with coefficients starting at \a data */
306
- EIGEN_DEVICE_FUNC
307
- explicit Matrix(const Scalar *data);
308
-
309
- /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors
310
- *
311
- * This is useful for dynamic-size vectors. For fixed-size vectors,
312
- * it is redundant to pass these parameters, so one should use the default constructor
313
- * Matrix() instead.
314
- *
315
- * \warning This constructor is disabled for fixed-size \c 1x1 matrices. For instance,
316
- * calling Matrix<double,1,1>(1) will call the initialization constructor: Matrix(const Scalar&).
317
- * For fixed-size \c 1x1 matrices it is therefore recommended to use the default
318
- * constructor Matrix() instead, especially when using one of the non standard
319
- * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
320
- */
321
- EIGEN_STRONG_INLINE explicit Matrix(Index dim);
322
- /** \brief Constructs an initialized 1x1 matrix with the given coefficient */
323
- Matrix(const Scalar& x);
324
- /** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns.
325
- *
326
- * This is useful for dynamic-size matrices. For fixed-size matrices,
327
- * it is redundant to pass these parameters, so one should use the default constructor
328
- * Matrix() instead.
329
- *
330
- * \warning This constructor is disabled for fixed-size \c 1x2 and \c 2x1 vectors. For instance,
331
- * calling Matrix2f(2,1) will call the initialization constructor: Matrix(const Scalar& x, const Scalar& y).
332
- * For fixed-size \c 1x2 or \c 2x1 vectors it is therefore recommended to use the default
333
- * constructor Matrix() instead, especially when using one of the non standard
334
- * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
335
- */
336
- EIGEN_DEVICE_FUNC
337
- Matrix(Index rows, Index cols);
338
-
339
- /** \brief Constructs an initialized 2D vector with given coefficients */
340
- Matrix(const Scalar& x, const Scalar& y);
341
- #endif
342
-
343
- /** \brief Constructs an initialized 3D vector with given coefficients */
344
- EIGEN_DEVICE_FUNC
345
- EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z)
346
- {
347
- Base::_check_template_params();
348
- EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3)
349
- m_storage.data()[0] = x;
350
- m_storage.data()[1] = y;
351
- m_storage.data()[2] = z;
352
- }
353
- /** \brief Constructs an initialized 4D vector with given coefficients */
354
- EIGEN_DEVICE_FUNC
355
- EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w)
356
- {
357
- Base::_check_template_params();
358
- EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4)
359
- m_storage.data()[0] = x;
360
- m_storage.data()[1] = y;
361
- m_storage.data()[2] = z;
362
- m_storage.data()[3] = w;
363
- }
364
-
365
-
366
- /** \brief Copy constructor */
367
- EIGEN_DEVICE_FUNC
368
- EIGEN_STRONG_INLINE Matrix(const Matrix& other) : Base(other)
369
- { }
370
-
371
- /** \brief Copy constructor for generic expressions.
372
- * \sa MatrixBase::operator=(const EigenBase<OtherDerived>&)
373
- */
374
- template<typename OtherDerived>
375
- EIGEN_DEVICE_FUNC
376
- EIGEN_STRONG_INLINE Matrix(const EigenBase<OtherDerived> &other)
377
- : Base(other.derived())
378
- { }
379
-
380
- EIGEN_DEVICE_FUNC inline Index innerStride() const { return 1; }
381
- EIGEN_DEVICE_FUNC inline Index outerStride() const { return this->innerSize(); }
382
-
383
- /////////// Geometry module ///////////
384
-
385
- template<typename OtherDerived>
386
- EIGEN_DEVICE_FUNC
387
- explicit Matrix(const RotationBase<OtherDerived,ColsAtCompileTime>& r);
388
- template<typename OtherDerived>
389
- EIGEN_DEVICE_FUNC
390
- Matrix& operator=(const RotationBase<OtherDerived,ColsAtCompileTime>& r);
391
-
392
- // allow to extend Matrix outside Eigen
393
- #ifdef EIGEN_MATRIX_PLUGIN
394
- #include EIGEN_MATRIX_PLUGIN
395
- #endif
396
-
397
- protected:
398
- template <typename Derived, typename OtherDerived, bool IsVector>
399
- friend struct internal::conservative_resize_like_impl;
400
-
401
- using Base::m_storage;
411
+ protected:
412
+ template <typename Derived, typename OtherDerived, bool IsVector>
413
+ friend struct internal::conservative_resize_like_impl;
414
+
415
+ using Base::m_storage;
402
416
  };
403
417
 
404
418
  /** \defgroup matrixtypedefs Global matrix typedefs
405
- *
406
- * \ingroup Core_Module
407
- *
408
- * Eigen defines several typedef shortcuts for most common matrix and vector types.
409
- *
410
- * The general patterns are the following:
411
- *
412
- * \c MatrixSizeType where \c Size can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size,
413
- * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd
414
- * for complex double.
415
- *
416
- * For example, \c Matrix3d is a fixed-size 3x3 matrix type of doubles, and \c MatrixXf is a dynamic-size matrix of floats.
417
- *
418
- * There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is
419
- * a fixed-size vector of 4 complex floats.
420
- *
421
- * \sa class Matrix
422
- */
423
-
424
- #define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
425
- /** \ingroup matrixtypedefs */ \
426
- typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix; \
427
- /** \ingroup matrixtypedefs */ \
428
- typedef Matrix<Type, Size, 1> Vector##SizeSuffix##TypeSuffix; \
429
- /** \ingroup matrixtypedefs */ \
430
- typedef Matrix<Type, 1, Size> RowVector##SizeSuffix##TypeSuffix;
431
-
432
- #define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
433
- /** \ingroup matrixtypedefs */ \
434
- typedef Matrix<Type, Size, Dynamic> Matrix##Size##X##TypeSuffix; \
435
- /** \ingroup matrixtypedefs */ \
436
- typedef Matrix<Type, Dynamic, Size> Matrix##X##Size##TypeSuffix;
419
+ *
420
+ * \ingroup Core_Module
421
+ *
422
+ * %Eigen defines several typedef shortcuts for most common matrix and vector types.
423
+ *
424
+ * The general patterns are the following:
425
+ *
426
+ * \c MatrixSizeType where \c Size can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size,
427
+ * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd
428
+ * for complex double.
429
+ *
430
+ * For example, \c Matrix3d is a fixed-size 3x3 matrix type of doubles, and \c MatrixXf is a dynamic-size matrix of
431
+ * floats.
432
+ *
433
+ * There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is
434
+ * a fixed-size vector of 4 complex floats.
435
+ *
436
+ * With \cpp11, template alias are also defined for common sizes.
437
+ * They follow the same pattern as above except that the scalar type suffix is replaced by a
438
+ * template parameter, i.e.:
439
+ * - `MatrixSize<Type>` where `Size` can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size.
440
+ * - `MatrixXSize<Type>` and `MatrixSizeX<Type>` where `Size` can be \c 2,\c 3,\c 4 for hybrid dynamic/fixed matrices.
441
+ * - `VectorSize<Type>` and `RowVectorSize<Type>` for column and row vectors.
442
+ *
443
+ * With \cpp11, you can also use fully generic column and row vector types: `Vector<Type,Size>` and
444
+ * `RowVector<Type,Size>`.
445
+ *
446
+ * \sa class Matrix
447
+ */
448
+
449
+ #define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
450
+ /** \ingroup matrixtypedefs */ \
451
+ /** \brief `Size`&times;`Size` matrix of type `Type`. */ \
452
+ typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix; \
453
+ /** \ingroup matrixtypedefs */ \
454
+ /** \brief `Size`&times;`1` vector of type `Type`. */ \
455
+ typedef Matrix<Type, Size, 1> Vector##SizeSuffix##TypeSuffix; \
456
+ /** \ingroup matrixtypedefs */ \
457
+ /** \brief `1`&times;`Size` vector of type `Type`. */ \
458
+ typedef Matrix<Type, 1, Size> RowVector##SizeSuffix##TypeSuffix;
459
+
460
+ #define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
461
+ /** \ingroup matrixtypedefs */ \
462
+ /** \brief `Size`&times;`Dynamic` matrix of type `Type`. */ \
463
+ typedef Matrix<Type, Size, Dynamic> Matrix##Size##X##TypeSuffix; \
464
+ /** \ingroup matrixtypedefs */ \
465
+ /** \brief `Dynamic`&times;`Size` matrix of type `Type`. */ \
466
+ typedef Matrix<Type, Dynamic, Size> Matrix##X##Size##TypeSuffix;
437
467
 
438
468
  #define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
439
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
440
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
441
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
442
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
443
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
444
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
445
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
446
-
447
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int, i)
448
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)
449
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double, d)
450
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
469
+ EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
470
+ EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
471
+ EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
472
+ EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
473
+ EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
474
+ EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
475
+ EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
476
+
477
+ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int, i)
478
+ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)
479
+ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double, d)
480
+ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
451
481
  EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
452
482
 
453
483
  #undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES
454
484
  #undef EIGEN_MAKE_TYPEDEFS
455
485
  #undef EIGEN_MAKE_FIXED_TYPEDEFS
456
486
 
457
- } // end namespace Eigen
487
+ #define EIGEN_MAKE_TYPEDEFS(Size, SizeSuffix) \
488
+ /** \ingroup matrixtypedefs */ \
489
+ /** \brief \cpp11 `Size`&times;`Size` matrix of type `Type`.*/ \
490
+ template <typename Type> \
491
+ using Matrix##SizeSuffix = Matrix<Type, Size, Size>; \
492
+ /** \ingroup matrixtypedefs */ \
493
+ /** \brief \cpp11 `Size`&times;`1` vector of type `Type`.*/ \
494
+ template <typename Type> \
495
+ using Vector##SizeSuffix = Matrix<Type, Size, 1>; \
496
+ /** \ingroup matrixtypedefs */ \
497
+ /** \brief \cpp11 `1`&times;`Size` vector of type `Type`.*/ \
498
+ template <typename Type> \
499
+ using RowVector##SizeSuffix = Matrix<Type, 1, Size>;
500
+
501
+ #define EIGEN_MAKE_FIXED_TYPEDEFS(Size) \
502
+ /** \ingroup matrixtypedefs */ \
503
+ /** \brief \cpp11 `Size`&times;`Dynamic` matrix of type `Type` */ \
504
+ template <typename Type> \
505
+ using Matrix##Size##X = Matrix<Type, Size, Dynamic>; \
506
+ /** \ingroup matrixtypedefs */ \
507
+ /** \brief \cpp11 `Dynamic`&times;`Size` matrix of type `Type`. */ \
508
+ template <typename Type> \
509
+ using Matrix##X##Size = Matrix<Type, Dynamic, Size>;
510
+
511
+ EIGEN_MAKE_TYPEDEFS(2, 2)
512
+ EIGEN_MAKE_TYPEDEFS(3, 3)
513
+ EIGEN_MAKE_TYPEDEFS(4, 4)
514
+ EIGEN_MAKE_TYPEDEFS(Dynamic, X)
515
+ EIGEN_MAKE_FIXED_TYPEDEFS(2)
516
+ EIGEN_MAKE_FIXED_TYPEDEFS(3)
517
+ EIGEN_MAKE_FIXED_TYPEDEFS(4)
518
+
519
+ /** \ingroup matrixtypedefs
520
+ * \brief \cpp11 `Size`&times;`1` vector of type `Type`. */
521
+ template <typename Type, int Size>
522
+ using Vector = Matrix<Type, Size, 1>;
523
+
524
+ /** \ingroup matrixtypedefs
525
+ * \brief \cpp11 `1`&times;`Size` vector of type `Type`. */
526
+ template <typename Type, int Size>
527
+ using RowVector = Matrix<Type, 1, Size>;
528
+
529
+ #undef EIGEN_MAKE_TYPEDEFS
530
+ #undef EIGEN_MAKE_FIXED_TYPEDEFS
531
+
532
+ } // end namespace Eigen
458
533
 
459
- #endif // EIGEN_MATRIX_H
534
+ #endif // EIGEN_MATRIX_H