@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,531 +11,502 @@
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,
51
+ OuterStrideAtCompileTime = (int(Options) & int(RowMajor)) ? ColsAtCompileTime : RowsAtCompileTime,
47
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 EIGEN_STRONG_INLINE
259
- 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 EIGEN_STRONG_INLINE
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 EIGEN_STRONG_INLINE
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 EIGEN_STRONG_INLINE
279
- Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
280
- {
281
- Base::operator=(std::move(other));
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;
284
255
  #endif
285
-
286
- #if EIGEN_HAS_CXX11
287
- /** \copydoc PlainObjectBase(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&... args)
288
- *
289
- * Example: \include Matrix_variadic_ctor_cxx11.cpp
290
- * Output: \verbinclude Matrix_variadic_ctor_cxx11.out
291
- *
292
- * \sa Matrix(const std::initializer_list<std::initializer_list<Scalar>>&)
293
- */
294
- template <typename... ArgTypes>
295
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
296
- Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
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)
297
285
  : Base(a0, a1, a2, a3, args...) {}
298
286
 
299
- /** \brief Constructs a Matrix and initializes it from the coefficients given as initializer-lists grouped by row. \cpp11
300
- *
301
- * In the general case, the constructor takes a list of rows, each row being represented as a list of coefficients:
302
- *
303
- * Example: \include Matrix_initializer_list_23_cxx11.cpp
304
- * Output: \verbinclude Matrix_initializer_list_23_cxx11.out
305
- *
306
- * Each of the inner initializer lists must contain the exact same number of elements, otherwise an assertion is triggered.
307
- *
308
- * In the case of a compile-time column vector, implicit transposition from a single row is allowed.
309
- * Therefore <code>VectorXd{{1,2,3,4,5}}</code> is legal and the more verbose syntax
310
- * <code>RowVectorXd{{1},{2},{3},{4},{5}}</code> can be avoided:
311
- *
312
- * Example: \include Matrix_initializer_list_vector_cxx11.cpp
313
- * Output: \verbinclude Matrix_initializer_list_vector_cxx11.out
314
- *
315
- * In the case of fixed-sized matrices, the initializer list sizes must exactly match the matrix sizes,
316
- * and implicit transposition is allowed for compile-time vectors only.
317
- *
318
- * \sa Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
319
- */
320
- EIGEN_DEVICE_FUNC
321
- explicit EIGEN_STRONG_INLINE Matrix(const std::initializer_list<std::initializer_list<Scalar>>& list) : Base(list) {}
322
- #endif // end EIGEN_HAS_CXX11
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) {}
323
314
 
324
315
  #ifndef EIGEN_PARSED_BY_DOXYGEN
325
316
 
326
- // This constructor is for both 1x1 matrices and dynamic vectors
327
- template<typename T>
328
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
329
- explicit Matrix(const T& x)
330
- {
331
- Base::_check_template_params();
332
- Base::template _init1<T>(x);
333
- }
334
-
335
- template<typename T0, typename T1>
336
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
337
- Matrix(const T0& x, const T1& y)
338
- {
339
- Base::_check_template_params();
340
- Base::template _init2<T0,T1>(x, y);
341
- }
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
+ }
342
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
+ }
343
327
 
344
328
  #else
345
- /** \brief Constructs a fixed-sized matrix initialized with coefficients starting at \a data */
346
- EIGEN_DEVICE_FUNC
347
- explicit Matrix(const Scalar *data);
348
-
349
- /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors
350
- *
351
- * This is useful for dynamic-size vectors. For fixed-size vectors,
352
- * it is redundant to pass these parameters, so one should use the default constructor
353
- * Matrix() instead.
354
- *
355
- * \warning This constructor is disabled for fixed-size \c 1x1 matrices. For instance,
356
- * calling Matrix<double,1,1>(1) will call the initialization constructor: Matrix(const Scalar&).
357
- * For fixed-size \c 1x1 matrices it is therefore recommended to use the default
358
- * constructor Matrix() instead, especially when using one of the non standard
359
- * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
360
- */
361
- EIGEN_STRONG_INLINE explicit Matrix(Index dim);
362
- /** \brief Constructs an initialized 1x1 matrix with the given coefficient
363
- * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
364
- Matrix(const Scalar& x);
365
- /** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns.
366
- *
367
- * This is useful for dynamic-size matrices. For fixed-size matrices,
368
- * it is redundant to pass these parameters, so one should use the default constructor
369
- * Matrix() instead.
370
- *
371
- * \warning This constructor is disabled for fixed-size \c 1x2 and \c 2x1 vectors. For instance,
372
- * calling Matrix2f(2,1) will call the initialization constructor: Matrix(const Scalar& x, const Scalar& y).
373
- * For fixed-size \c 1x2 or \c 2x1 vectors it is therefore recommended to use the default
374
- * constructor Matrix() instead, especially when using one of the non standard
375
- * \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
376
- */
377
- EIGEN_DEVICE_FUNC
378
- Matrix(Index rows, Index cols);
379
-
380
- /** \brief Constructs an initialized 2D vector with given coefficients
381
- * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
382
- Matrix(const Scalar& x, const Scalar& y);
383
- #endif // end EIGEN_PARSED_BY_DOXYGEN
384
-
385
- /** \brief Constructs an initialized 3D vector with given coefficients
386
- * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
387
- */
388
- EIGEN_DEVICE_FUNC
389
- EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z)
390
- {
391
- Base::_check_template_params();
392
- EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3)
393
- m_storage.data()[0] = x;
394
- m_storage.data()[1] = y;
395
- m_storage.data()[2] = z;
396
- }
397
- /** \brief Constructs an initialized 4D vector with given coefficients
398
- * \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
399
- */
400
- EIGEN_DEVICE_FUNC
401
- EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w)
402
- {
403
- Base::_check_template_params();
404
- EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4)
405
- m_storage.data()[0] = x;
406
- m_storage.data()[1] = y;
407
- m_storage.data()[2] = z;
408
- m_storage.data()[3] = w;
409
- }
410
-
411
-
412
- /** \brief Copy constructor */
413
- EIGEN_DEVICE_FUNC
414
- EIGEN_STRONG_INLINE Matrix(const Matrix& other) : Base(other)
415
- { }
416
-
417
- /** \brief Copy constructor for generic expressions.
418
- * \sa MatrixBase::operator=(const EigenBase<OtherDerived>&)
419
- */
420
- template<typename OtherDerived>
421
- EIGEN_DEVICE_FUNC
422
- EIGEN_STRONG_INLINE Matrix(const EigenBase<OtherDerived> &other)
423
- : Base(other.derived())
424
- { }
425
-
426
- EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
427
- inline Index innerStride() const EIGEN_NOEXCEPT { return 1; }
428
- EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
429
- inline Index outerStride() const EIGEN_NOEXCEPT { return this->innerSize(); }
430
-
431
- /////////// Geometry module ///////////
432
-
433
- template<typename OtherDerived>
434
- EIGEN_DEVICE_FUNC
435
- explicit Matrix(const RotationBase<OtherDerived,ColsAtCompileTime>& r);
436
- template<typename OtherDerived>
437
- EIGEN_DEVICE_FUNC
438
- Matrix& operator=(const RotationBase<OtherDerived,ColsAtCompileTime>& r);
439
-
440
- // allow to extend Matrix outside Eigen
441
- #ifdef EIGEN_MATRIX_PLUGIN
442
- #include EIGEN_MATRIX_PLUGIN
443
- #endif
444
-
445
- protected:
446
- template <typename Derived, typename OtherDerived, bool IsVector>
447
- friend struct internal::conservative_resize_like_impl;
448
-
449
- using Base::m_storage;
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
409
+ #endif
410
+
411
+ protected:
412
+ template <typename Derived, typename OtherDerived, bool IsVector>
413
+ friend struct internal::conservative_resize_like_impl;
414
+
415
+ using Base::m_storage;
450
416
  };
451
417
 
452
418
  /** \defgroup matrixtypedefs Global matrix typedefs
453
- *
454
- * \ingroup Core_Module
455
- *
456
- * %Eigen defines several typedef shortcuts for most common matrix and vector types.
457
- *
458
- * The general patterns are the following:
459
- *
460
- * \c MatrixSizeType where \c Size can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size,
461
- * 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
462
- * for complex double.
463
- *
464
- * For example, \c Matrix3d is a fixed-size 3x3 matrix type of doubles, and \c MatrixXf is a dynamic-size matrix of floats.
465
- *
466
- * There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is
467
- * a fixed-size vector of 4 complex floats.
468
- *
469
- * With \cpp11, template alias are also defined for common sizes.
470
- * They follow the same pattern as above except that the scalar type suffix is replaced by a
471
- * template parameter, i.e.:
472
- * - `MatrixSize<Type>` where `Size` can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size.
473
- * - `MatrixXSize<Type>` and `MatrixSizeX<Type>` where `Size` can be \c 2,\c 3,\c 4 for hybrid dynamic/fixed matrices.
474
- * - `VectorSize<Type>` and `RowVectorSize<Type>` for column and row vectors.
475
- *
476
- * With \cpp11, you can also use fully generic column and row vector types: `Vector<Type,Size>` and `RowVector<Type,Size>`.
477
- *
478
- * \sa class Matrix
479
- */
480
-
481
- #define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
482
- /** \ingroup matrixtypedefs */ \
483
- typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix; \
484
- /** \ingroup matrixtypedefs */ \
485
- typedef Matrix<Type, Size, 1> Vector##SizeSuffix##TypeSuffix; \
486
- /** \ingroup matrixtypedefs */ \
487
- typedef Matrix<Type, 1, Size> RowVector##SizeSuffix##TypeSuffix;
488
-
489
- #define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
490
- /** \ingroup matrixtypedefs */ \
491
- typedef Matrix<Type, Size, Dynamic> Matrix##Size##X##TypeSuffix; \
492
- /** \ingroup matrixtypedefs */ \
493
- 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;
494
467
 
495
468
  #define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
496
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
497
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
498
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
499
- EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
500
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
501
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
502
- EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
503
-
504
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int, i)
505
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)
506
- EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double, d)
507
- 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)
508
481
  EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
509
482
 
510
483
  #undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES
511
484
  #undef EIGEN_MAKE_TYPEDEFS
512
485
  #undef EIGEN_MAKE_FIXED_TYPEDEFS
513
486
 
514
- #if EIGEN_HAS_CXX11
515
-
516
- #define EIGEN_MAKE_TYPEDEFS(Size, SizeSuffix) \
517
- /** \ingroup matrixtypedefs */ \
518
- /** \brief \cpp11 */ \
519
- template <typename Type> \
520
- using Matrix##SizeSuffix = Matrix<Type, Size, Size>; \
521
- /** \ingroup matrixtypedefs */ \
522
- /** \brief \cpp11 */ \
523
- template <typename Type> \
524
- using Vector##SizeSuffix = Matrix<Type, Size, 1>; \
525
- /** \ingroup matrixtypedefs */ \
526
- /** \brief \cpp11 */ \
527
- template <typename Type> \
528
- using RowVector##SizeSuffix = Matrix<Type, 1, Size>;
529
-
530
- #define EIGEN_MAKE_FIXED_TYPEDEFS(Size) \
531
- /** \ingroup matrixtypedefs */ \
532
- /** \brief \cpp11 */ \
533
- template <typename Type> \
534
- using Matrix##Size##X = Matrix<Type, Size, Dynamic>; \
535
- /** \ingroup matrixtypedefs */ \
536
- /** \brief \cpp11 */ \
537
- template <typename Type> \
538
- using Matrix##X##Size = Matrix<Type, Dynamic, Size>;
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>;
539
510
 
540
511
  EIGEN_MAKE_TYPEDEFS(2, 2)
541
512
  EIGEN_MAKE_TYPEDEFS(3, 3)
@@ -546,20 +517,18 @@ EIGEN_MAKE_FIXED_TYPEDEFS(3)
546
517
  EIGEN_MAKE_FIXED_TYPEDEFS(4)
547
518
 
548
519
  /** \ingroup matrixtypedefs
549
- * \brief \cpp11 */
520
+ * \brief \cpp11 `Size`&times;`1` vector of type `Type`. */
550
521
  template <typename Type, int Size>
551
522
  using Vector = Matrix<Type, Size, 1>;
552
523
 
553
524
  /** \ingroup matrixtypedefs
554
- * \brief \cpp11 */
525
+ * \brief \cpp11 `1`&times;`Size` vector of type `Type`. */
555
526
  template <typename Type, int Size>
556
527
  using RowVector = Matrix<Type, 1, Size>;
557
528
 
558
529
  #undef EIGEN_MAKE_TYPEDEFS
559
530
  #undef EIGEN_MAKE_FIXED_TYPEDEFS
560
531
 
561
- #endif // EIGEN_HAS_CXX11
562
-
563
- } // end namespace Eigen
532
+ } // end namespace Eigen
564
533
 
565
- #endif // EIGEN_MATRIX_H
534
+ #endif // EIGEN_MATRIX_H