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