@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
@@ -10,672 +10,559 @@
10
10
  #ifndef EIGEN_DENSECOEFFSBASE_H
11
11
  #define EIGEN_DENSECOEFFSBASE_H
12
12
 
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
13
16
  namespace Eigen {
14
17
 
15
18
  namespace internal {
16
- template<typename T> struct add_const_on_value_type_if_arithmetic
17
- {
18
- typedef typename conditional<is_arithmetic<T>::value, T, typename add_const_on_value_type<T>::type>::type type;
19
+ template <typename T>
20
+ struct add_const_on_value_type_if_arithmetic {
21
+ typedef std::conditional_t<is_arithmetic<T>::value, T, add_const_on_value_type_t<T>> type;
19
22
  };
20
- }
23
+ } // namespace internal
21
24
 
22
25
  /** \brief Base class providing read-only coefficient access to matrices and arrays.
23
- * \ingroup Core_Module
24
- * \tparam Derived Type of the derived class
25
- * \tparam #ReadOnlyAccessors Constant indicating read-only access
26
- *
27
- * This class defines the \c operator() \c const function and friends, which can be used to read specific
28
- * entries of a matrix or array.
29
- *
30
- * \sa DenseCoeffsBase<Derived, WriteAccessors>, DenseCoeffsBase<Derived, DirectAccessors>,
31
- * \ref TopicClassHierarchy
32
- */
33
- template<typename Derived>
34
- class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived>
35
- {
36
- public:
37
- typedef typename internal::traits<Derived>::StorageKind StorageKind;
38
- typedef typename internal::traits<Derived>::Scalar Scalar;
39
- typedef typename internal::packet_traits<Scalar>::type PacketScalar;
40
-
41
- // Explanation for this CoeffReturnType typedef.
42
- // - This is the return type of the coeff() method.
43
- // - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references
44
- // to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value).
45
- // - The is_artihmetic check is required since "const int", "const double", etc. will cause warnings on some systems
46
- // while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is
47
- // not possible, since the underlying expressions might not offer a valid address the reference could be referring to.
48
- typedef typename internal::conditional<bool(internal::traits<Derived>::Flags&LvalueBit),
49
- const Scalar&,
50
- typename internal::conditional<internal::is_arithmetic<Scalar>::value, Scalar, const Scalar>::type
51
- >::type CoeffReturnType;
52
-
53
- typedef typename internal::add_const_on_value_type_if_arithmetic<
54
- typename internal::packet_traits<Scalar>::type
55
- >::type PacketReturnType;
56
-
57
- typedef EigenBase<Derived> Base;
58
- using Base::rows;
59
- using Base::cols;
60
- using Base::size;
61
- using Base::derived;
62
-
63
- EIGEN_DEVICE_FUNC
64
- EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner) const
65
- {
66
- return int(Derived::RowsAtCompileTime) == 1 ? 0
67
- : int(Derived::ColsAtCompileTime) == 1 ? inner
68
- : int(Derived::Flags)&RowMajorBit ? outer
69
- : inner;
70
- }
71
-
72
- EIGEN_DEVICE_FUNC
73
- EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner) const
74
- {
75
- return int(Derived::ColsAtCompileTime) == 1 ? 0
76
- : int(Derived::RowsAtCompileTime) == 1 ? inner
77
- : int(Derived::Flags)&RowMajorBit ? inner
78
- : outer;
79
- }
80
-
81
- /** Short version: don't use this function, use
82
- * \link operator()(Index,Index) const \endlink instead.
83
- *
84
- * Long version: this function is similar to
85
- * \link operator()(Index,Index) const \endlink, but without the assertion.
86
- * Use this for limiting the performance cost of debugging code when doing
87
- * repeated coefficient access. Only use this when it is guaranteed that the
88
- * parameters \a row and \a col are in range.
89
- *
90
- * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
91
- * function equivalent to \link operator()(Index,Index) const \endlink.
92
- *
93
- * \sa operator()(Index,Index) const, coeffRef(Index,Index), coeff(Index) const
94
- */
95
- EIGEN_DEVICE_FUNC
96
- EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const
97
- {
98
- eigen_internal_assert(row >= 0 && row < rows()
99
- && col >= 0 && col < cols());
100
- return internal::evaluator<Derived>(derived()).coeff(row,col);
101
- }
102
-
103
- EIGEN_DEVICE_FUNC
104
- EIGEN_STRONG_INLINE CoeffReturnType coeffByOuterInner(Index outer, Index inner) const
105
- {
106
- return coeff(rowIndexByOuterInner(outer, inner),
107
- colIndexByOuterInner(outer, inner));
108
- }
109
-
110
- /** \returns the coefficient at given the given row and column.
111
- *
112
- * \sa operator()(Index,Index), operator[](Index)
113
- */
114
- EIGEN_DEVICE_FUNC
115
- EIGEN_STRONG_INLINE CoeffReturnType operator()(Index row, Index col) const
116
- {
117
- eigen_assert(row >= 0 && row < rows()
118
- && col >= 0 && col < cols());
119
- return coeff(row, col);
120
- }
121
-
122
- /** Short version: don't use this function, use
123
- * \link operator[](Index) const \endlink instead.
124
- *
125
- * Long version: this function is similar to
126
- * \link operator[](Index) const \endlink, but without the assertion.
127
- * Use this for limiting the performance cost of debugging code when doing
128
- * repeated coefficient access. Only use this when it is guaranteed that the
129
- * parameter \a index is in range.
130
- *
131
- * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
132
- * function equivalent to \link operator[](Index) const \endlink.
133
- *
134
- * \sa operator[](Index) const, coeffRef(Index), coeff(Index,Index) const
135
- */
136
-
137
- EIGEN_DEVICE_FUNC
138
- EIGEN_STRONG_INLINE CoeffReturnType
139
- coeff(Index index) const
140
- {
141
- EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
142
- THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
143
- eigen_internal_assert(index >= 0 && index < size());
144
- return internal::evaluator<Derived>(derived()).coeff(index);
145
- }
146
-
147
-
148
- /** \returns the coefficient at given index.
149
- *
150
- * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
151
- *
152
- * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
153
- * z() const, w() const
154
- */
155
-
156
- EIGEN_DEVICE_FUNC
157
- EIGEN_STRONG_INLINE CoeffReturnType
158
- operator[](Index index) const
159
- {
160
- EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
161
- THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
162
- eigen_assert(index >= 0 && index < size());
163
- return coeff(index);
164
- }
165
-
166
- /** \returns the coefficient at given index.
167
- *
168
- * This is synonymous to operator[](Index) const.
169
- *
170
- * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
171
- *
172
- * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
173
- * z() const, w() const
174
- */
175
-
176
- EIGEN_DEVICE_FUNC
177
- EIGEN_STRONG_INLINE CoeffReturnType
178
- operator()(Index index) const
179
- {
180
- eigen_assert(index >= 0 && index < size());
181
- return coeff(index);
182
- }
183
-
184
- /** equivalent to operator[](0). */
185
-
186
- EIGEN_DEVICE_FUNC
187
- EIGEN_STRONG_INLINE CoeffReturnType
188
- x() const { return (*this)[0]; }
189
-
190
- /** equivalent to operator[](1). */
191
-
192
- EIGEN_DEVICE_FUNC
193
- EIGEN_STRONG_INLINE CoeffReturnType
194
- y() const
195
- {
196
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=2, OUT_OF_RANGE_ACCESS);
197
- return (*this)[1];
198
- }
199
-
200
- /** equivalent to operator[](2). */
201
-
202
- EIGEN_DEVICE_FUNC
203
- EIGEN_STRONG_INLINE CoeffReturnType
204
- z() const
205
- {
206
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=3, OUT_OF_RANGE_ACCESS);
207
- return (*this)[2];
208
- }
209
-
210
- /** equivalent to operator[](3). */
211
-
212
- EIGEN_DEVICE_FUNC
213
- EIGEN_STRONG_INLINE CoeffReturnType
214
- w() const
215
- {
216
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=4, OUT_OF_RANGE_ACCESS);
217
- return (*this)[3];
218
- }
219
-
220
- /** \internal
221
- * \returns the packet of coefficients starting at the given row and column. It is your responsibility
222
- * to ensure that a packet really starts there. This method is only available on expressions having the
223
- * PacketAccessBit.
224
- *
225
- * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
226
- * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
227
- * starting at an address which is a multiple of the packet size.
228
- */
229
-
230
- template<int LoadMode>
231
- EIGEN_STRONG_INLINE PacketReturnType packet(Index row, Index col) const
232
- {
233
- typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
234
- eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
235
- return internal::evaluator<Derived>(derived()).template packet<LoadMode,DefaultPacketType>(row,col);
236
- }
237
-
238
-
239
- /** \internal */
240
- template<int LoadMode>
241
- EIGEN_STRONG_INLINE PacketReturnType packetByOuterInner(Index outer, Index inner) const
242
- {
243
- return packet<LoadMode>(rowIndexByOuterInner(outer, inner),
244
- colIndexByOuterInner(outer, inner));
245
- }
246
-
247
- /** \internal
248
- * \returns the packet of coefficients starting at the given index. It is your responsibility
249
- * to ensure that a packet really starts there. This method is only available on expressions having the
250
- * PacketAccessBit and the LinearAccessBit.
251
- *
252
- * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
253
- * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
254
- * starting at an address which is a multiple of the packet size.
255
- */
256
-
257
- template<int LoadMode>
258
- EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
259
- {
260
- EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
261
- THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
262
- typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
263
- eigen_internal_assert(index >= 0 && index < size());
264
- return internal::evaluator<Derived>(derived()).template packet<LoadMode,DefaultPacketType>(index);
265
- }
266
-
267
- protected:
268
- // explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
269
- // But some methods are only available in the DirectAccess case.
270
- // So we add dummy methods here with these names, so that "using... " doesn't fail.
271
- // It's not private so that the child class DenseBase can access them, and it's not public
272
- // either since it's an implementation detail, so has to be protected.
273
- void coeffRef();
274
- void coeffRefByOuterInner();
275
- void writePacket();
276
- void writePacketByOuterInner();
277
- void copyCoeff();
278
- void copyCoeffByOuterInner();
279
- void copyPacket();
280
- void copyPacketByOuterInner();
281
- void stride();
282
- void innerStride();
283
- void outerStride();
284
- void rowStride();
285
- void colStride();
26
+ * \ingroup Core_Module
27
+ * \tparam Derived Type of the derived class
28
+ *
29
+ * \note #ReadOnlyAccessors Constant indicating read-only access
30
+ *
31
+ * This class defines the \c operator() \c const function and friends, which can be used to read specific
32
+ * entries of a matrix or array.
33
+ *
34
+ * \sa DenseCoeffsBase<Derived, WriteAccessors>, DenseCoeffsBase<Derived, DirectAccessors>,
35
+ * \ref TopicClassHierarchy
36
+ */
37
+ template <typename Derived>
38
+ class DenseCoeffsBase<Derived, ReadOnlyAccessors> : public EigenBase<Derived> {
39
+ public:
40
+ typedef typename internal::traits<Derived>::StorageKind StorageKind;
41
+ typedef typename internal::traits<Derived>::Scalar Scalar;
42
+ typedef typename internal::packet_traits<Scalar>::type PacketScalar;
43
+
44
+ // Explanation for this CoeffReturnType typedef.
45
+ // - This is the return type of the coeff() method.
46
+ // - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references
47
+ // to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value).
48
+ // - The DirectAccessBit means exactly that the underlying data of coefficients can be directly accessed as a plain
49
+ // strided array, which means exactly that the underlying data of coefficients does exist in memory, which means
50
+ // exactly that the coefficients is const-referencable, which means exactly that we can have coeff() return a const
51
+ // reference. For example, Map<const Matrix> have DirectAccessBit but not LvalueBit, so that Map<const Matrix>.coeff()
52
+ // does points to a const Scalar& which exists in memory, while does not allow coeffRef() as it would not provide a
53
+ // lvalue. Notice that DirectAccessBit and LvalueBit are mutually orthogonal.
54
+ // - The is_arithmetic check is required since "const int", "const double", etc. will cause warnings on some systems
55
+ // while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is
56
+ // not possible, since the underlying expressions might not offer a valid address the reference could be referring to.
57
+ typedef std::conditional_t<bool(internal::traits<Derived>::Flags&(LvalueBit | DirectAccessBit)), const Scalar&,
58
+ std::conditional_t<internal::is_arithmetic<Scalar>::value, Scalar, const Scalar>>
59
+ CoeffReturnType;
60
+
61
+ typedef typename internal::add_const_on_value_type_if_arithmetic<typename internal::packet_traits<Scalar>::type>::type
62
+ PacketReturnType;
63
+
64
+ typedef EigenBase<Derived> Base;
65
+ using Base::cols;
66
+ using Base::derived;
67
+ using Base::rows;
68
+ using Base::size;
69
+
70
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner) const {
71
+ return int(Derived::RowsAtCompileTime) == 1 ? 0
72
+ : int(Derived::ColsAtCompileTime) == 1 ? inner
73
+ : int(Derived::Flags) & RowMajorBit ? outer
74
+ : inner;
75
+ }
76
+
77
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner) const {
78
+ return int(Derived::ColsAtCompileTime) == 1 ? 0
79
+ : int(Derived::RowsAtCompileTime) == 1 ? inner
80
+ : int(Derived::Flags) & RowMajorBit ? inner
81
+ : outer;
82
+ }
83
+
84
+ /** Short version: don't use this function, use
85
+ * \link operator()(Index,Index) const \endlink instead.
86
+ *
87
+ * Long version: this function is similar to
88
+ * \link operator()(Index,Index) const \endlink, but without the assertion.
89
+ * Use this for limiting the performance cost of debugging code when doing
90
+ * repeated coefficient access. Only use this when it is guaranteed that the
91
+ * parameters \a row and \a col are in range.
92
+ *
93
+ * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
94
+ * function equivalent to \link operator()(Index,Index) const \endlink.
95
+ *
96
+ * \sa operator()(Index,Index) const, coeffRef(Index,Index), coeff(Index) const
97
+ */
98
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeff(Index row, Index col) const {
99
+ eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
100
+ return internal::evaluator<Derived>(derived()).coeff(row, col);
101
+ }
102
+
103
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeffByOuterInner(Index outer, Index inner) const {
104
+ return coeff(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
105
+ }
106
+
107
+ /** \returns the coefficient at given the given row and column.
108
+ *
109
+ * \sa operator()(Index,Index), operator[](Index)
110
+ */
111
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator()(Index row, Index col) const {
112
+ eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
113
+ return coeff(row, col);
114
+ }
115
+
116
+ /** Short version: don't use this function, use
117
+ * \link operator[](Index) const \endlink instead.
118
+ *
119
+ * Long version: this function is similar to
120
+ * \link operator[](Index) const \endlink, but without the assertion.
121
+ * Use this for limiting the performance cost of debugging code when doing
122
+ * repeated coefficient access. Only use this when it is guaranteed that the
123
+ * parameter \a index is in range.
124
+ *
125
+ * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
126
+ * function equivalent to \link operator[](Index) const \endlink.
127
+ *
128
+ * \sa operator[](Index) const, coeffRef(Index), coeff(Index,Index) const
129
+ */
130
+
131
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeff(Index index) const {
132
+ EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
133
+ THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
134
+ eigen_internal_assert(index >= 0 && index < size());
135
+ return internal::evaluator<Derived>(derived()).coeff(index);
136
+ }
137
+
138
+ /** \returns the coefficient at given index.
139
+ *
140
+ * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
141
+ *
142
+ * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
143
+ * z() const, w() const
144
+ */
145
+
146
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator[](Index index) const {
147
+ EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
148
+ THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
149
+ eigen_assert(index >= 0 && index < size());
150
+ return coeff(index);
151
+ }
152
+
153
+ /** \returns the coefficient at given index.
154
+ *
155
+ * This is synonymous to operator[](Index) const.
156
+ *
157
+ * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
158
+ *
159
+ * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
160
+ * z() const, w() const
161
+ */
162
+
163
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator()(Index index) const {
164
+ eigen_assert(index >= 0 && index < size());
165
+ return coeff(index);
166
+ }
167
+
168
+ /** equivalent to operator[](0). */
169
+
170
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType x() const { return (*this)[0]; }
171
+
172
+ /** equivalent to operator[](1). */
173
+
174
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType y() const {
175
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 2, OUT_OF_RANGE_ACCESS);
176
+ return (*this)[1];
177
+ }
178
+
179
+ /** equivalent to operator[](2). */
180
+
181
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType z() const {
182
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 3, OUT_OF_RANGE_ACCESS);
183
+ return (*this)[2];
184
+ }
185
+
186
+ /** equivalent to operator[](3). */
187
+
188
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType w() const {
189
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 4, OUT_OF_RANGE_ACCESS);
190
+ return (*this)[3];
191
+ }
192
+
193
+ /** \internal
194
+ * \returns the packet of coefficients starting at the given row and column. It is your responsibility
195
+ * to ensure that a packet really starts there. This method is only available on expressions having the
196
+ * PacketAccessBit.
197
+ *
198
+ * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
199
+ * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
200
+ * starting at an address which is a multiple of the packet size.
201
+ */
202
+
203
+ template <int LoadMode>
204
+ EIGEN_STRONG_INLINE PacketReturnType packet(Index row, Index col) const {
205
+ typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
206
+ eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
207
+ return internal::evaluator<Derived>(derived()).template packet<LoadMode, DefaultPacketType>(row, col);
208
+ }
209
+
210
+ /** \internal */
211
+ template <int LoadMode>
212
+ EIGEN_STRONG_INLINE PacketReturnType packetByOuterInner(Index outer, Index inner) const {
213
+ return packet<LoadMode>(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
214
+ }
215
+
216
+ /** \internal
217
+ * \returns the packet of coefficients starting at the given index. It is your responsibility
218
+ * to ensure that a packet really starts there. This method is only available on expressions having the
219
+ * PacketAccessBit and the LinearAccessBit.
220
+ *
221
+ * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
222
+ * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
223
+ * starting at an address which is a multiple of the packet size.
224
+ */
225
+
226
+ template <int LoadMode>
227
+ EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const {
228
+ EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
229
+ THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
230
+ typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
231
+ eigen_internal_assert(index >= 0 && index < size());
232
+ return internal::evaluator<Derived>(derived()).template packet<LoadMode, DefaultPacketType>(index);
233
+ }
234
+
235
+ protected:
236
+ // explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
237
+ // But some methods are only available in the DirectAccess case.
238
+ // So we add dummy methods here with these names, so that "using... " doesn't fail.
239
+ // It's not private so that the child class DenseBase can access them, and it's not public
240
+ // either since it's an implementation detail, so has to be protected.
241
+ void coeffRef();
242
+ void coeffRefByOuterInner();
243
+ void writePacket();
244
+ void writePacketByOuterInner();
245
+ void copyCoeff();
246
+ void copyCoeffByOuterInner();
247
+ void copyPacket();
248
+ void copyPacketByOuterInner();
249
+ void stride();
250
+ void innerStride();
251
+ void outerStride();
252
+ void rowStride();
253
+ void colStride();
286
254
  };
287
255
 
288
256
  /** \brief Base class providing read/write coefficient access to matrices and arrays.
289
- * \ingroup Core_Module
290
- * \tparam Derived Type of the derived class
291
- * \tparam #WriteAccessors Constant indicating read/write access
292
- *
293
- * This class defines the non-const \c operator() function and friends, which can be used to write specific
294
- * entries of a matrix or array. This class inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which
295
- * defines the const variant for reading specific entries.
296
- *
297
- * \sa DenseCoeffsBase<Derived, DirectAccessors>, \ref TopicClassHierarchy
298
- */
299
- template<typename Derived>
300
- class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors>
301
- {
302
- public:
303
-
304
- typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
305
-
306
- typedef typename internal::traits<Derived>::StorageKind StorageKind;
307
- typedef typename internal::traits<Derived>::Scalar Scalar;
308
- typedef typename internal::packet_traits<Scalar>::type PacketScalar;
309
- typedef typename NumTraits<Scalar>::Real RealScalar;
310
-
311
- using Base::coeff;
312
- using Base::rows;
313
- using Base::cols;
314
- using Base::size;
315
- using Base::derived;
316
- using Base::rowIndexByOuterInner;
317
- using Base::colIndexByOuterInner;
318
- using Base::operator[];
319
- using Base::operator();
320
- using Base::x;
321
- using Base::y;
322
- using Base::z;
323
- using Base::w;
324
-
325
- /** Short version: don't use this function, use
326
- * \link operator()(Index,Index) \endlink instead.
327
- *
328
- * Long version: this function is similar to
329
- * \link operator()(Index,Index) \endlink, but without the assertion.
330
- * Use this for limiting the performance cost of debugging code when doing
331
- * repeated coefficient access. Only use this when it is guaranteed that the
332
- * parameters \a row and \a col are in range.
333
- *
334
- * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
335
- * function equivalent to \link operator()(Index,Index) \endlink.
336
- *
337
- * \sa operator()(Index,Index), coeff(Index, Index) const, coeffRef(Index)
338
- */
339
- EIGEN_DEVICE_FUNC
340
- EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col)
341
- {
342
- eigen_internal_assert(row >= 0 && row < rows()
343
- && col >= 0 && col < cols());
344
- return internal::evaluator<Derived>(derived()).coeffRef(row,col);
345
- }
346
-
347
- EIGEN_DEVICE_FUNC
348
- EIGEN_STRONG_INLINE Scalar&
349
- coeffRefByOuterInner(Index outer, Index inner)
350
- {
351
- return coeffRef(rowIndexByOuterInner(outer, inner),
352
- colIndexByOuterInner(outer, inner));
353
- }
354
-
355
- /** \returns a reference to the coefficient at given the given row and column.
356
- *
357
- * \sa operator[](Index)
358
- */
359
-
360
- EIGEN_DEVICE_FUNC
361
- EIGEN_STRONG_INLINE Scalar&
362
- operator()(Index row, Index col)
363
- {
364
- eigen_assert(row >= 0 && row < rows()
365
- && col >= 0 && col < cols());
366
- return coeffRef(row, col);
367
- }
368
-
369
-
370
- /** Short version: don't use this function, use
371
- * \link operator[](Index) \endlink instead.
372
- *
373
- * Long version: this function is similar to
374
- * \link operator[](Index) \endlink, but without the assertion.
375
- * Use this for limiting the performance cost of debugging code when doing
376
- * repeated coefficient access. Only use this when it is guaranteed that the
377
- * parameters \a row and \a col are in range.
378
- *
379
- * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
380
- * function equivalent to \link operator[](Index) \endlink.
381
- *
382
- * \sa operator[](Index), coeff(Index) const, coeffRef(Index,Index)
383
- */
384
-
385
- EIGEN_DEVICE_FUNC
386
- EIGEN_STRONG_INLINE Scalar&
387
- coeffRef(Index index)
388
- {
389
- EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
390
- THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
391
- eigen_internal_assert(index >= 0 && index < size());
392
- return internal::evaluator<Derived>(derived()).coeffRef(index);
393
- }
394
-
395
- /** \returns a reference to the coefficient at given index.
396
- *
397
- * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
398
- *
399
- * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
400
- */
401
-
402
- EIGEN_DEVICE_FUNC
403
- EIGEN_STRONG_INLINE Scalar&
404
- operator[](Index index)
405
- {
406
- EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
407
- THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
408
- eigen_assert(index >= 0 && index < size());
409
- return coeffRef(index);
410
- }
411
-
412
- /** \returns a reference to the coefficient at given index.
413
- *
414
- * This is synonymous to operator[](Index).
415
- *
416
- * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
417
- *
418
- * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
419
- */
420
-
421
- EIGEN_DEVICE_FUNC
422
- EIGEN_STRONG_INLINE Scalar&
423
- operator()(Index index)
424
- {
425
- eigen_assert(index >= 0 && index < size());
426
- return coeffRef(index);
427
- }
428
-
429
- /** equivalent to operator[](0). */
430
-
431
- EIGEN_DEVICE_FUNC
432
- EIGEN_STRONG_INLINE Scalar&
433
- x() { return (*this)[0]; }
434
-
435
- /** equivalent to operator[](1). */
436
-
437
- EIGEN_DEVICE_FUNC
438
- EIGEN_STRONG_INLINE Scalar&
439
- y()
440
- {
441
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=2, OUT_OF_RANGE_ACCESS);
442
- return (*this)[1];
443
- }
444
-
445
- /** equivalent to operator[](2). */
446
-
447
- EIGEN_DEVICE_FUNC
448
- EIGEN_STRONG_INLINE Scalar&
449
- z()
450
- {
451
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=3, OUT_OF_RANGE_ACCESS);
452
- return (*this)[2];
453
- }
454
-
455
- /** equivalent to operator[](3). */
456
-
457
- EIGEN_DEVICE_FUNC
458
- EIGEN_STRONG_INLINE Scalar&
459
- w()
460
- {
461
- EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=4, OUT_OF_RANGE_ACCESS);
462
- return (*this)[3];
463
- }
257
+ * \ingroup Core_Module
258
+ * \tparam Derived Type of the derived class
259
+ *
260
+ * \note #WriteAccessors Constant indicating read/write access
261
+ *
262
+ * This class defines the non-const \c operator() function and friends, which can be used to write specific
263
+ * entries of a matrix or array. This class inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which
264
+ * defines the const variant for reading specific entries.
265
+ *
266
+ * \sa DenseCoeffsBase<Derived, DirectAccessors>, \ref TopicClassHierarchy
267
+ */
268
+ template <typename Derived>
269
+ class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors> {
270
+ public:
271
+ typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
272
+
273
+ typedef typename internal::traits<Derived>::StorageKind StorageKind;
274
+ typedef typename internal::traits<Derived>::Scalar Scalar;
275
+ typedef typename internal::packet_traits<Scalar>::type PacketScalar;
276
+ typedef typename NumTraits<Scalar>::Real RealScalar;
277
+
278
+ using Base::coeff;
279
+ using Base::colIndexByOuterInner;
280
+ using Base::cols;
281
+ using Base::derived;
282
+ using Base::rowIndexByOuterInner;
283
+ using Base::rows;
284
+ using Base::size;
285
+ using Base::operator[];
286
+ using Base::operator();
287
+ using Base::w;
288
+ using Base::x;
289
+ using Base::y;
290
+ using Base::z;
291
+
292
+ /** Short version: don't use this function, use
293
+ * \link operator()(Index,Index) \endlink instead.
294
+ *
295
+ * Long version: this function is similar to
296
+ * \link operator()(Index,Index) \endlink, but without the assertion.
297
+ * Use this for limiting the performance cost of debugging code when doing
298
+ * repeated coefficient access. Only use this when it is guaranteed that the
299
+ * parameters \a row and \a col are in range.
300
+ *
301
+ * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
302
+ * function equivalent to \link operator()(Index,Index) \endlink.
303
+ *
304
+ * \sa operator()(Index,Index), coeff(Index, Index) const, coeffRef(Index)
305
+ */
306
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& coeffRef(Index row, Index col) {
307
+ eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
308
+ return internal::evaluator<Derived>(derived()).coeffRef(row, col);
309
+ }
310
+
311
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar& coeffRefByOuterInner(Index outer, Index inner) {
312
+ return coeffRef(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
313
+ }
314
+
315
+ /** \returns a reference to the coefficient at given the given row and column.
316
+ *
317
+ * \sa operator[](Index)
318
+ */
319
+
320
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator()(Index row, Index col) {
321
+ eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
322
+ return coeffRef(row, col);
323
+ }
324
+
325
+ /** Short version: don't use this function, use
326
+ * \link operator[](Index) \endlink instead.
327
+ *
328
+ * Long version: this function is similar to
329
+ * \link operator[](Index) \endlink, but without the assertion.
330
+ * Use this for limiting the performance cost of debugging code when doing
331
+ * repeated coefficient access. Only use this when it is guaranteed that the
332
+ * parameters \a row and \a col are in range.
333
+ *
334
+ * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
335
+ * function equivalent to \link operator[](Index) \endlink.
336
+ *
337
+ * \sa operator[](Index), coeff(Index) const, coeffRef(Index,Index)
338
+ */
339
+
340
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& coeffRef(Index index) {
341
+ EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
342
+ THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
343
+ eigen_internal_assert(index >= 0 && index < size());
344
+ return internal::evaluator<Derived>(derived()).coeffRef(index);
345
+ }
346
+
347
+ /** \returns a reference to the coefficient at given index.
348
+ *
349
+ * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
350
+ *
351
+ * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
352
+ */
353
+
354
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator[](Index index) {
355
+ EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
356
+ THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
357
+ eigen_assert(index >= 0 && index < size());
358
+ return coeffRef(index);
359
+ }
360
+
361
+ /** \returns a reference to the coefficient at given index.
362
+ *
363
+ * This is synonymous to operator[](Index).
364
+ *
365
+ * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
366
+ *
367
+ * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
368
+ */
369
+
370
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator()(Index index) {
371
+ eigen_assert(index >= 0 && index < size());
372
+ return coeffRef(index);
373
+ }
374
+
375
+ /** equivalent to operator[](0). */
376
+
377
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& x() { return (*this)[0]; }
378
+
379
+ /** equivalent to operator[](1). */
380
+
381
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& y() {
382
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 2, OUT_OF_RANGE_ACCESS);
383
+ return (*this)[1];
384
+ }
385
+
386
+ /** equivalent to operator[](2). */
387
+
388
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& z() {
389
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 3, OUT_OF_RANGE_ACCESS);
390
+ return (*this)[2];
391
+ }
392
+
393
+ /** equivalent to operator[](3). */
394
+
395
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& w() {
396
+ EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 4, OUT_OF_RANGE_ACCESS);
397
+ return (*this)[3];
398
+ }
464
399
  };
465
400
 
466
401
  /** \brief Base class providing direct read-only coefficient access to matrices and arrays.
467
- * \ingroup Core_Module
468
- * \tparam Derived Type of the derived class
469
- * \tparam #DirectAccessors Constant indicating direct access
470
- *
471
- * This class defines functions to work with strides which can be used to access entries directly. This class
472
- * inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which defines functions to access entries read-only using
473
- * \c operator() .
474
- *
475
- * \sa \blank \ref TopicClassHierarchy
476
- */
477
- template<typename Derived>
478
- class DenseCoeffsBase<Derived, DirectAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors>
479
- {
480
- public:
481
-
482
- typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
483
- typedef typename internal::traits<Derived>::Scalar Scalar;
484
- typedef typename NumTraits<Scalar>::Real RealScalar;
485
-
486
- using Base::rows;
487
- using Base::cols;
488
- using Base::size;
489
- using Base::derived;
490
-
491
- /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
492
- *
493
- * \sa outerStride(), rowStride(), colStride()
494
- */
495
- EIGEN_DEVICE_FUNC
496
- inline Index innerStride() const
497
- {
498
- return derived().innerStride();
499
- }
500
-
501
- /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
502
- * in a column-major matrix).
503
- *
504
- * \sa innerStride(), rowStride(), colStride()
505
- */
506
- EIGEN_DEVICE_FUNC
507
- inline Index outerStride() const
508
- {
509
- return derived().outerStride();
510
- }
511
-
512
- // FIXME shall we remove it ?
513
- inline Index stride() const
514
- {
515
- return Derived::IsVectorAtCompileTime ? innerStride() : outerStride();
516
- }
517
-
518
- /** \returns the pointer increment between two consecutive rows.
519
- *
520
- * \sa innerStride(), outerStride(), colStride()
521
- */
522
- EIGEN_DEVICE_FUNC
523
- inline Index rowStride() const
524
- {
525
- return Derived::IsRowMajor ? outerStride() : innerStride();
526
- }
527
-
528
- /** \returns the pointer increment between two consecutive columns.
529
- *
530
- * \sa innerStride(), outerStride(), rowStride()
531
- */
532
- EIGEN_DEVICE_FUNC
533
- inline Index colStride() const
534
- {
535
- return Derived::IsRowMajor ? innerStride() : outerStride();
536
- }
402
+ * \ingroup Core_Module
403
+ * \tparam Derived Type of the derived class
404
+ *
405
+ * \note #DirectAccessors Constant indicating direct access
406
+ *
407
+ * This class defines functions to work with strides which can be used to access entries directly. This class
408
+ * inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which defines functions to access entries read-only using
409
+ * \c operator() .
410
+ *
411
+ * \sa \blank \ref TopicClassHierarchy
412
+ */
413
+ template <typename Derived>
414
+ class DenseCoeffsBase<Derived, DirectAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors> {
415
+ public:
416
+ typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
417
+ typedef typename internal::traits<Derived>::Scalar Scalar;
418
+ typedef typename NumTraits<Scalar>::Real RealScalar;
419
+
420
+ using Base::cols;
421
+ using Base::derived;
422
+ using Base::rows;
423
+ using Base::size;
424
+
425
+ /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
426
+ *
427
+ * \sa outerStride(), rowStride(), colStride()
428
+ */
429
+ EIGEN_DEVICE_FUNC constexpr Index innerStride() const { return derived().innerStride(); }
430
+
431
+ /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
432
+ * in a column-major matrix).
433
+ *
434
+ * \sa innerStride(), rowStride(), colStride()
435
+ */
436
+ EIGEN_DEVICE_FUNC constexpr Index outerStride() const { return derived().outerStride(); }
437
+
438
+ // FIXME shall we remove it ?
439
+ constexpr Index stride() const { return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); }
440
+
441
+ /** \returns the pointer increment between two consecutive rows.
442
+ *
443
+ * \sa innerStride(), outerStride(), colStride()
444
+ */
445
+ EIGEN_DEVICE_FUNC constexpr Index rowStride() const { return Derived::IsRowMajor ? outerStride() : innerStride(); }
446
+
447
+ /** \returns the pointer increment between two consecutive columns.
448
+ *
449
+ * \sa innerStride(), outerStride(), rowStride()
450
+ */
451
+ EIGEN_DEVICE_FUNC constexpr Index colStride() const { return Derived::IsRowMajor ? innerStride() : outerStride(); }
537
452
  };
538
453
 
539
454
  /** \brief Base class providing direct read/write coefficient access to matrices and arrays.
540
- * \ingroup Core_Module
541
- * \tparam Derived Type of the derived class
542
- * \tparam #DirectWriteAccessors Constant indicating direct access
543
- *
544
- * This class defines functions to work with strides which can be used to access entries directly. This class
545
- * inherits DenseCoeffsBase<Derived, WriteAccessors> which defines functions to access entries read/write using
546
- * \c operator().
547
- *
548
- * \sa \blank \ref TopicClassHierarchy
549
- */
550
- template<typename Derived>
551
- class DenseCoeffsBase<Derived, DirectWriteAccessors>
552
- : public DenseCoeffsBase<Derived, WriteAccessors>
553
- {
554
- public:
555
-
556
- typedef DenseCoeffsBase<Derived, WriteAccessors> Base;
557
- typedef typename internal::traits<Derived>::Scalar Scalar;
558
- typedef typename NumTraits<Scalar>::Real RealScalar;
559
-
560
- using Base::rows;
561
- using Base::cols;
562
- using Base::size;
563
- using Base::derived;
564
-
565
- /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
566
- *
567
- * \sa outerStride(), rowStride(), colStride()
568
- */
569
- EIGEN_DEVICE_FUNC
570
- inline Index innerStride() const
571
- {
572
- return derived().innerStride();
573
- }
574
-
575
- /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
576
- * in a column-major matrix).
577
- *
578
- * \sa innerStride(), rowStride(), colStride()
579
- */
580
- EIGEN_DEVICE_FUNC
581
- inline Index outerStride() const
582
- {
583
- return derived().outerStride();
584
- }
585
-
586
- // FIXME shall we remove it ?
587
- inline Index stride() const
588
- {
589
- return Derived::IsVectorAtCompileTime ? innerStride() : outerStride();
590
- }
591
-
592
- /** \returns the pointer increment between two consecutive rows.
593
- *
594
- * \sa innerStride(), outerStride(), colStride()
595
- */
596
- EIGEN_DEVICE_FUNC
597
- inline Index rowStride() const
598
- {
599
- return Derived::IsRowMajor ? outerStride() : innerStride();
600
- }
601
-
602
- /** \returns the pointer increment between two consecutive columns.
603
- *
604
- * \sa innerStride(), outerStride(), rowStride()
605
- */
606
- EIGEN_DEVICE_FUNC
607
- inline Index colStride() const
608
- {
609
- return Derived::IsRowMajor ? innerStride() : outerStride();
610
- }
455
+ * \ingroup Core_Module
456
+ * \tparam Derived Type of the derived class
457
+ *
458
+ * \note #DirectWriteAccessors Constant indicating direct access
459
+ *
460
+ * This class defines functions to work with strides which can be used to access entries directly. This class
461
+ * inherits DenseCoeffsBase<Derived, WriteAccessors> which defines functions to access entries read/write using
462
+ * \c operator().
463
+ *
464
+ * \sa \blank \ref TopicClassHierarchy
465
+ */
466
+ template <typename Derived>
467
+ class DenseCoeffsBase<Derived, DirectWriteAccessors> : public DenseCoeffsBase<Derived, WriteAccessors> {
468
+ public:
469
+ typedef DenseCoeffsBase<Derived, WriteAccessors> Base;
470
+ typedef typename internal::traits<Derived>::Scalar Scalar;
471
+ typedef typename NumTraits<Scalar>::Real RealScalar;
472
+
473
+ using Base::cols;
474
+ using Base::derived;
475
+ using Base::rows;
476
+ using Base::size;
477
+
478
+ /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
479
+ *
480
+ * \sa outerStride(), rowStride(), colStride()
481
+ */
482
+ EIGEN_DEVICE_FUNC constexpr Index innerStride() const noexcept { return derived().innerStride(); }
483
+
484
+ /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
485
+ * in a column-major matrix).
486
+ *
487
+ * \sa innerStride(), rowStride(), colStride()
488
+ */
489
+ EIGEN_DEVICE_FUNC constexpr Index outerStride() const noexcept { return derived().outerStride(); }
490
+
491
+ // FIXME shall we remove it ?
492
+ constexpr Index stride() const noexcept { return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); }
493
+
494
+ /** \returns the pointer increment between two consecutive rows.
495
+ *
496
+ * \sa innerStride(), outerStride(), colStride()
497
+ */
498
+ EIGEN_DEVICE_FUNC constexpr Index rowStride() const noexcept {
499
+ return Derived::IsRowMajor ? outerStride() : innerStride();
500
+ }
501
+
502
+ /** \returns the pointer increment between two consecutive columns.
503
+ *
504
+ * \sa innerStride(), outerStride(), rowStride()
505
+ */
506
+ EIGEN_DEVICE_FUNC constexpr Index colStride() const noexcept {
507
+ return Derived::IsRowMajor ? innerStride() : outerStride();
508
+ }
611
509
  };
612
510
 
613
511
  namespace internal {
614
512
 
615
- template<int Alignment, typename Derived, bool JustReturnZero>
616
- struct first_aligned_impl
617
- {
618
- static inline Index run(const Derived&)
619
- { return 0; }
513
+ template <int Alignment, typename Derived, bool JustReturnZero>
514
+ struct first_aligned_impl {
515
+ static constexpr Index run(const Derived&) noexcept { return 0; }
620
516
  };
621
517
 
622
- template<int Alignment, typename Derived>
623
- struct first_aligned_impl<Alignment, Derived, false>
624
- {
625
- static inline Index run(const Derived& m)
626
- {
627
- return internal::first_aligned<Alignment>(m.data(), m.size());
628
- }
518
+ template <int Alignment, typename Derived>
519
+ struct first_aligned_impl<Alignment, Derived, false> {
520
+ static inline Index run(const Derived& m) { return internal::first_aligned<Alignment>(m.data(), m.size()); }
629
521
  };
630
522
 
631
- /** \internal \returns the index of the first element of the array stored by \a m that is properly aligned with respect to \a Alignment for vectorization.
632
- *
633
- * \tparam Alignment requested alignment in Bytes.
634
- *
635
- * There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more
636
- * documentation.
637
- */
638
- template<int Alignment, typename Derived>
639
- static inline Index first_aligned(const DenseBase<Derived>& m)
640
- {
523
+ /** \internal \returns the index of the first element of the array stored by \a m that is properly aligned with respect
524
+ * to \a Alignment for vectorization.
525
+ *
526
+ * \tparam Alignment requested alignment in Bytes.
527
+ *
528
+ * There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more
529
+ * documentation.
530
+ */
531
+ template <int Alignment, typename Derived>
532
+ static inline Index first_aligned(const DenseBase<Derived>& m) {
641
533
  enum { ReturnZero = (int(evaluator<Derived>::Alignment) >= Alignment) || !(Derived::Flags & DirectAccessBit) };
642
534
  return first_aligned_impl<Alignment, Derived, ReturnZero>::run(m.derived());
643
535
  }
644
536
 
645
- template<typename Derived>
646
- static inline Index first_default_aligned(const DenseBase<Derived>& m)
647
- {
537
+ template <typename Derived>
538
+ static inline Index first_default_aligned(const DenseBase<Derived>& m) {
648
539
  typedef typename Derived::Scalar Scalar;
649
540
  typedef typename packet_traits<Scalar>::type DefaultPacketType;
650
- return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);
541
+ return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment), Derived>(m);
651
542
  }
652
543
 
653
- template<typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
654
- struct inner_stride_at_compile_time
655
- {
544
+ template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
545
+ struct inner_stride_at_compile_time {
656
546
  enum { ret = traits<Derived>::InnerStrideAtCompileTime };
657
547
  };
658
548
 
659
- template<typename Derived>
660
- struct inner_stride_at_compile_time<Derived, false>
661
- {
549
+ template <typename Derived>
550
+ struct inner_stride_at_compile_time<Derived, false> {
662
551
  enum { ret = 0 };
663
552
  };
664
553
 
665
- template<typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
666
- struct outer_stride_at_compile_time
667
- {
554
+ template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
555
+ struct outer_stride_at_compile_time {
668
556
  enum { ret = traits<Derived>::OuterStrideAtCompileTime };
669
557
  };
670
558
 
671
- template<typename Derived>
672
- struct outer_stride_at_compile_time<Derived, false>
673
- {
559
+ template <typename Derived>
560
+ struct outer_stride_at_compile_time<Derived, false> {
674
561
  enum { ret = 0 };
675
562
  };
676
563
 
677
- } // end namespace internal
564
+ } // end namespace internal
678
565
 
679
- } // end namespace Eigen
566
+ } // end namespace Eigen
680
567
 
681
- #endif // EIGEN_DENSECOEFFSBASE_H
568
+ #endif // EIGEN_DENSECOEFFSBASE_H