@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
@@ -13,50 +13,52 @@
13
13
  // This file contains many lightweight helper classes used to
14
14
  // implement and control fast level 2 and level 3 BLAS-like routines.
15
15
 
16
+ // IWYU pragma: private
17
+ #include "../InternalHeaderCheck.h"
18
+
16
19
  namespace Eigen {
17
20
 
18
21
  namespace internal {
19
22
 
20
23
  // forward declarations
21
- template<typename LhsScalar, typename RhsScalar, typename Index, typename DataMapper, int mr, int nr, bool ConjugateLhs=false, bool ConjugateRhs=false>
24
+ template <typename LhsScalar, typename RhsScalar, typename Index, typename DataMapper, int mr, int nr,
25
+ bool ConjugateLhs = false, bool ConjugateRhs = false>
22
26
  struct gebp_kernel;
23
27
 
24
- template<typename Scalar, typename Index, typename DataMapper, int nr, int StorageOrder, bool Conjugate = false, bool PanelMode=false>
28
+ template <typename Scalar, typename Index, typename DataMapper, int nr, int StorageOrder, bool Conjugate = false,
29
+ bool PanelMode = false>
25
30
  struct gemm_pack_rhs;
26
31
 
27
- template<typename Scalar, typename Index, typename DataMapper, int Pack1, int Pack2, typename Packet, int StorageOrder, bool Conjugate = false, bool PanelMode = false>
32
+ template <typename Scalar, typename Index, typename DataMapper, int Pack1, int Pack2, typename Packet, int StorageOrder,
33
+ bool Conjugate = false, bool PanelMode = false>
28
34
  struct gemm_pack_lhs;
29
35
 
30
- template<
31
- typename Index,
32
- typename LhsScalar, int LhsStorageOrder, bool ConjugateLhs,
33
- typename RhsScalar, int RhsStorageOrder, bool ConjugateRhs,
34
- int ResStorageOrder, int ResInnerStride>
36
+ template <typename Index, typename LhsScalar, int LhsStorageOrder, bool ConjugateLhs, typename RhsScalar,
37
+ int RhsStorageOrder, bool ConjugateRhs, int ResStorageOrder, int ResInnerStride>
35
38
  struct general_matrix_matrix_product;
36
39
 
37
- template<typename Index,
38
- typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
39
- typename RhsScalar, typename RhsMapper, bool ConjugateRhs, int Version=Specialized>
40
+ template <typename Index, typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
41
+ typename RhsScalar, typename RhsMapper, bool ConjugateRhs, int Version = Specialized>
40
42
  struct general_matrix_vector_product;
41
43
 
42
- template<typename From,typename To> struct get_factor {
44
+ template <typename From, typename To>
45
+ struct get_factor {
43
46
  EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE To run(const From& x) { return To(x); }
44
47
  };
45
48
 
46
- template<typename Scalar> struct get_factor<Scalar,typename NumTraits<Scalar>::Real> {
47
- EIGEN_DEVICE_FUNC
48
- static EIGEN_STRONG_INLINE typename NumTraits<Scalar>::Real run(const Scalar& x) { return numext::real(x); }
49
+ template <typename Scalar>
50
+ struct get_factor<Scalar, typename NumTraits<Scalar>::Real> {
51
+ EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE typename NumTraits<Scalar>::Real run(const Scalar& x) {
52
+ return numext::real(x);
53
+ }
49
54
  };
50
55
 
51
-
52
- template<typename Scalar, typename Index>
56
+ template <typename Scalar, typename Index>
53
57
  class BlasVectorMapper {
54
- public:
55
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasVectorMapper(Scalar *data) : m_data(data) {}
58
+ public:
59
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasVectorMapper(Scalar* data) : m_data(data) {}
56
60
 
57
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i) const {
58
- return m_data[i];
59
- }
61
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i) const { return m_data[i]; }
60
62
  template <typename Packet, int AlignmentType>
61
63
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet load(Index i) const {
62
64
  return ploadt<Packet, AlignmentType>(m_data + i);
@@ -64,82 +66,91 @@ class BlasVectorMapper {
64
66
 
65
67
  template <typename Packet>
66
68
  EIGEN_DEVICE_FUNC bool aligned(Index i) const {
67
- return (UIntPtr(m_data+i)%sizeof(Packet))==0;
69
+ return (std::uintptr_t(m_data + i) % sizeof(Packet)) == 0;
68
70
  }
69
71
 
70
- protected:
72
+ protected:
71
73
  Scalar* m_data;
72
74
  };
73
75
 
74
- template<typename Scalar, typename Index, int AlignmentType, int Incr=1>
76
+ template <typename Scalar, typename Index, int AlignmentType, int Incr = 1>
75
77
  class BlasLinearMapper;
76
78
 
77
- template<typename Scalar, typename Index, int AlignmentType>
78
- class BlasLinearMapper<Scalar,Index,AlignmentType>
79
- {
80
- public:
81
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar *data, Index incr=1)
82
- : m_data(data)
83
- {
79
+ template <typename Scalar, typename Index, int AlignmentType>
80
+ class BlasLinearMapper<Scalar, Index, AlignmentType> {
81
+ public:
82
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar* data, Index incr = 1) : m_data(data) {
84
83
  EIGEN_ONLY_USED_FOR_DEBUG(incr);
85
- eigen_assert(incr==1);
84
+ eigen_assert(incr == 1);
86
85
  }
87
86
 
88
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const {
89
- internal::prefetch(&operator()(i));
90
- }
87
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i) const { internal::prefetch(&operator()(i)); }
91
88
 
92
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const {
93
- return m_data[i];
94
- }
89
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const { return m_data[i]; }
95
90
 
96
- template<typename PacketType>
91
+ template <typename PacketType>
97
92
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i) const {
98
93
  return ploadt<PacketType, AlignmentType>(m_data + i);
99
94
  }
100
95
 
101
- template<typename PacketType>
102
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType &p) const {
96
+ template <typename PacketType>
97
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index n, Index offset = 0) const {
98
+ return ploadt_partial<PacketType, AlignmentType>(m_data + i, n, offset);
99
+ }
100
+
101
+ template <typename PacketType, int AlignmentT>
102
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType load(Index i) const {
103
+ return ploadt<PacketType, AlignmentT>(m_data + i);
104
+ }
105
+
106
+ template <typename PacketType>
107
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType& p) const {
103
108
  pstoret<Scalar, PacketType, AlignmentType>(m_data + i, p);
104
109
  }
105
110
 
106
- protected:
107
- Scalar *m_data;
111
+ template <typename PacketType>
112
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, const PacketType& p, Index n,
113
+ Index offset = 0) const {
114
+ pstoret_partial<Scalar, PacketType, AlignmentType>(m_data + i, p, n, offset);
115
+ }
116
+
117
+ protected:
118
+ Scalar* m_data;
108
119
  };
109
120
 
110
121
  // Lightweight helper class to access matrix coefficients.
111
- template<typename Scalar, typename Index, int StorageOrder, int AlignmentType = Unaligned, int Incr = 1>
122
+ template <typename Scalar, typename Index, int StorageOrder, int AlignmentType = Unaligned, int Incr = 1>
112
123
  class blas_data_mapper;
113
124
 
114
125
  // TMP to help PacketBlock store implementation.
115
126
  // There's currently no known use case for PacketBlock load.
116
127
  // The default implementation assumes ColMajor order.
117
128
  // It always store each packet sequentially one `stride` apart.
118
- template<typename Index, typename Scalar, typename Packet, int n, int idx, int StorageOrder>
119
- struct PacketBlockManagement
120
- {
129
+ template <typename Index, typename Scalar, typename Packet, int n, int idx, int StorageOrder>
130
+ struct PacketBlockManagement {
121
131
  PacketBlockManagement<Index, Scalar, Packet, n, idx - 1, StorageOrder> pbm;
122
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar *to, const Index stride, Index i, Index j, const PacketBlock<Packet, n> &block) const {
132
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
133
+ const PacketBlock<Packet, n>& block) const {
123
134
  pbm.store(to, stride, i, j, block);
124
- pstoreu<Scalar>(to + i + (j + idx)*stride, block.packet[idx]);
135
+ pstoreu<Scalar>(to + i + (j + idx) * stride, block.packet[idx]);
125
136
  }
126
137
  };
127
138
 
128
139
  // PacketBlockManagement specialization to take care of RowMajor order without ifs.
129
- template<typename Index, typename Scalar, typename Packet, int n, int idx>
130
- struct PacketBlockManagement<Index, Scalar, Packet, n, idx, RowMajor>
131
- {
140
+ template <typename Index, typename Scalar, typename Packet, int n, int idx>
141
+ struct PacketBlockManagement<Index, Scalar, Packet, n, idx, RowMajor> {
132
142
  PacketBlockManagement<Index, Scalar, Packet, n, idx - 1, RowMajor> pbm;
133
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar *to, const Index stride, Index i, Index j, const PacketBlock<Packet, n> &block) const {
143
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
144
+ const PacketBlock<Packet, n>& block) const {
134
145
  pbm.store(to, stride, i, j, block);
135
- pstoreu<Scalar>(to + j + (i + idx)*stride, block.packet[idx]);
146
+ pstoreu<Scalar>(to + j + (i + idx) * stride, block.packet[idx]);
136
147
  }
137
148
  };
138
149
 
139
- template<typename Index, typename Scalar, typename Packet, int n, int StorageOrder>
140
- struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder>
141
- {
142
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar *to, const Index stride, Index i, Index j, const PacketBlock<Packet, n> &block) const {
150
+ template <typename Index, typename Scalar, typename Packet, int n, int StorageOrder>
151
+ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder> {
152
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
153
+ const PacketBlock<Packet, n>& block) const {
143
154
  EIGEN_UNUSED_VARIABLE(to);
144
155
  EIGEN_UNUSED_VARIABLE(stride);
145
156
  EIGEN_UNUSED_VARIABLE(i);
@@ -148,10 +159,10 @@ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder>
148
159
  }
149
160
  };
150
161
 
151
- template<typename Index, typename Scalar, typename Packet, int n>
152
- struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor>
153
- {
154
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar *to, const Index stride, Index i, Index j, const PacketBlock<Packet, n> &block) const {
162
+ template <typename Index, typename Scalar, typename Packet, int n>
163
+ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor> {
164
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
165
+ const PacketBlock<Packet, n>& block) const {
155
166
  EIGEN_UNUSED_VARIABLE(to);
156
167
  EIGEN_UNUSED_VARIABLE(stride);
157
168
  EIGEN_UNUSED_VARIABLE(i);
@@ -160,75 +171,93 @@ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor>
160
171
  }
161
172
  };
162
173
 
163
- template<typename Scalar, typename Index, int StorageOrder, int AlignmentType>
164
- class blas_data_mapper<Scalar,Index,StorageOrder,AlignmentType,1>
165
- {
166
- public:
174
+ template <typename Scalar, typename Index, int StorageOrder, int AlignmentType>
175
+ class blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, 1> {
176
+ public:
167
177
  typedef BlasLinearMapper<Scalar, Index, AlignmentType> LinearMapper;
178
+ typedef blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType> SubMapper;
168
179
  typedef BlasVectorMapper<Scalar, Index> VectorMapper;
169
180
 
170
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr=1)
171
- : m_data(data), m_stride(stride)
172
- {
181
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr = 1)
182
+ : m_data(data), m_stride(stride) {
173
183
  EIGEN_ONLY_USED_FOR_DEBUG(incr);
174
- eigen_assert(incr==1);
184
+ eigen_assert(incr == 1);
175
185
  }
176
186
 
177
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType>
178
- getSubMapper(Index i, Index j) const {
179
- return blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType>(&operator()(i, j), m_stride);
187
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
188
+ return SubMapper(&operator()(i, j), m_stride);
180
189
  }
181
190
 
182
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
191
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
183
192
  return LinearMapper(&operator()(i, j));
184
193
  }
185
194
 
186
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE VectorMapper getVectorMapper(Index i, Index j) const {
195
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE VectorMapper getVectorMapper(Index i, Index j) const {
187
196
  return VectorMapper(&operator()(i, j));
188
197
  }
189
198
 
199
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const { internal::prefetch(&operator()(i, j)); }
190
200
 
191
- EIGEN_DEVICE_FUNC
192
- EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
193
- return m_data[StorageOrder==RowMajor ? j + i*m_stride : i + j*m_stride];
201
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
202
+ return m_data[StorageOrder == RowMajor ? j + i * m_stride : i + j * m_stride];
194
203
  }
195
204
 
196
- template<typename PacketType>
205
+ template <typename PacketType>
197
206
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i, Index j) const {
198
207
  return ploadt<PacketType, AlignmentType>(&operator()(i, j));
199
208
  }
200
209
 
210
+ template <typename PacketType>
211
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index j, Index n,
212
+ Index offset = 0) const {
213
+ return ploadt_partial<PacketType, AlignmentType>(&operator()(i, j), n, offset);
214
+ }
215
+
201
216
  template <typename PacketT, int AlignmentT>
202
217
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT load(Index i, Index j) const {
203
218
  return ploadt<PacketT, AlignmentT>(&operator()(i, j));
204
219
  }
205
220
 
206
- template<typename SubPacket>
207
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket &p) const {
221
+ template <typename PacketType>
222
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, Index j, const PacketType& p) const {
223
+ pstoret<Scalar, PacketType, AlignmentType>(&operator()(i, j), p);
224
+ }
225
+
226
+ template <typename PacketType>
227
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, Index j, const PacketType& p, Index n,
228
+ Index offset = 0) const {
229
+ pstoret_partial<Scalar, PacketType, AlignmentType>(&operator()(i, j), p, n, offset);
230
+ }
231
+
232
+ template <typename SubPacket>
233
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket& p) const {
208
234
  pscatter<Scalar, SubPacket>(&operator()(i, j), p, m_stride);
209
235
  }
210
236
 
211
- template<typename SubPacket>
237
+ template <typename SubPacket>
212
238
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubPacket gatherPacket(Index i, Index j) const {
213
239
  return pgather<Scalar, SubPacket>(&operator()(i, j), m_stride);
214
240
  }
215
241
 
216
242
  EIGEN_DEVICE_FUNC const Index stride() const { return m_stride; }
217
- EIGEN_DEVICE_FUNC const Scalar* data() const { return m_data; }
243
+ EIGEN_DEVICE_FUNC const Index incr() const { return 1; }
244
+ EIGEN_DEVICE_FUNC constexpr const Scalar* data() const { return m_data; }
218
245
 
219
246
  EIGEN_DEVICE_FUNC Index firstAligned(Index size) const {
220
- if (UIntPtr(m_data)%sizeof(Scalar)) {
247
+ if (std::uintptr_t(m_data) % sizeof(Scalar)) {
221
248
  return -1;
222
249
  }
223
250
  return internal::first_default_aligned(m_data, size);
224
251
  }
225
252
 
226
- template<typename SubPacket, int n>
227
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j, const PacketBlock<SubPacket, n> &block) const {
228
- PacketBlockManagement<Index, Scalar, SubPacket, n, n-1, StorageOrder> pbm;
253
+ template <typename SubPacket, int n>
254
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j,
255
+ const PacketBlock<SubPacket, n>& block) const {
256
+ PacketBlockManagement<Index, Scalar, SubPacket, n, n - 1, StorageOrder> pbm;
229
257
  pbm.store(m_data, m_stride, i, j, block);
230
258
  }
231
- protected:
259
+
260
+ protected:
232
261
  Scalar* EIGEN_RESTRICT m_data;
233
262
  const Index m_stride;
234
263
  };
@@ -236,302 +265,320 @@ protected:
236
265
  // Implementation of non-natural increment (i.e. inner-stride != 1)
237
266
  // The exposed API is not complete yet compared to the Incr==1 case
238
267
  // because some features makes less sense in this case.
239
- template<typename Scalar, typename Index, int AlignmentType, int Incr>
240
- class BlasLinearMapper
241
- {
242
- public:
243
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar *data,Index incr) : m_data(data), m_incr(incr) {}
268
+ template <typename Scalar, typename Index, int AlignmentType, int Incr>
269
+ class BlasLinearMapper {
270
+ public:
271
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar* data, Index incr) : m_data(data), m_incr(incr) {}
244
272
 
245
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const {
246
- internal::prefetch(&operator()(i));
273
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const { internal::prefetch(&operator()(i)); }
274
+
275
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const { return m_data[i * m_incr.value()]; }
276
+
277
+ template <typename PacketType>
278
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i) const {
279
+ return pgather<Scalar, PacketType>(m_data + i * m_incr.value(), m_incr.value());
247
280
  }
248
281
 
249
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const {
250
- return m_data[i*m_incr.value()];
282
+ template <typename PacketType>
283
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index n, Index /*offset*/ = 0) const {
284
+ return pgather_partial<Scalar, PacketType>(m_data + i * m_incr.value(), m_incr.value(), n);
251
285
  }
252
286
 
253
- template<typename PacketType>
254
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i) const {
255
- return pgather<Scalar,PacketType>(m_data + i*m_incr.value(), m_incr.value());
287
+ template <typename PacketType>
288
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType& p) const {
289
+ pscatter<Scalar, PacketType>(m_data + i * m_incr.value(), p, m_incr.value());
256
290
  }
257
291
 
258
- template<typename PacketType>
259
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType &p) const {
260
- pscatter<Scalar, PacketType>(m_data + i*m_incr.value(), p, m_incr.value());
292
+ template <typename PacketType>
293
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, const PacketType& p, Index n,
294
+ Index /*offset*/ = 0) const {
295
+ pscatter_partial<Scalar, PacketType>(m_data + i * m_incr.value(), p, m_incr.value(), n);
261
296
  }
262
297
 
263
- protected:
264
- Scalar *m_data;
265
- const internal::variable_if_dynamic<Index,Incr> m_incr;
298
+ protected:
299
+ Scalar* m_data;
300
+ const internal::variable_if_dynamic<Index, Incr> m_incr;
266
301
  };
267
302
 
268
- template<typename Scalar, typename Index, int StorageOrder, int AlignmentType,int Incr>
269
- class blas_data_mapper
270
- {
271
- public:
272
- typedef BlasLinearMapper<Scalar, Index, AlignmentType,Incr> LinearMapper;
303
+ template <typename Scalar, typename Index, int StorageOrder, int AlignmentType, int Incr>
304
+ class blas_data_mapper {
305
+ public:
306
+ typedef BlasLinearMapper<Scalar, Index, AlignmentType, Incr> LinearMapper;
307
+ typedef blas_data_mapper SubMapper;
273
308
 
274
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr) : m_data(data), m_stride(stride), m_incr(incr) {}
309
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr)
310
+ : m_data(data), m_stride(stride), m_incr(incr) {}
275
311
 
276
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper
277
- getSubMapper(Index i, Index j) const {
278
- return blas_data_mapper(&operator()(i, j), m_stride, m_incr.value());
312
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
313
+ return SubMapper(&operator()(i, j), m_stride, m_incr.value());
279
314
  }
280
315
 
281
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
316
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
282
317
  return LinearMapper(&operator()(i, j), m_incr.value());
283
318
  }
284
319
 
285
- EIGEN_DEVICE_FUNC
286
- EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
287
- return m_data[StorageOrder==RowMajor ? j*m_incr.value() + i*m_stride : i*m_incr.value() + j*m_stride];
320
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const { internal::prefetch(&operator()(i, j)); }
321
+
322
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
323
+ return m_data[StorageOrder == RowMajor ? j * m_incr.value() + i * m_stride : i * m_incr.value() + j * m_stride];
288
324
  }
289
325
 
290
- template<typename PacketType>
326
+ template <typename PacketType>
291
327
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i, Index j) const {
292
- return pgather<Scalar,PacketType>(&operator()(i, j),m_incr.value());
328
+ return pgather<Scalar, PacketType>(&operator()(i, j), m_incr.value());
329
+ }
330
+
331
+ template <typename PacketType>
332
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index j, Index n,
333
+ Index /*offset*/ = 0) const {
334
+ return pgather_partial<Scalar, PacketType>(&operator()(i, j), m_incr.value(), n);
293
335
  }
294
336
 
295
337
  template <typename PacketT, int AlignmentT>
296
338
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT load(Index i, Index j) const {
297
- return pgather<Scalar,PacketT>(&operator()(i, j),m_incr.value());
339
+ return pgather<Scalar, PacketT>(&operator()(i, j), m_incr.value());
298
340
  }
299
341
 
300
- template<typename SubPacket>
301
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket &p) const {
342
+ template <typename PacketType>
343
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, Index j, const PacketType& p) const {
344
+ pscatter<Scalar, PacketType>(&operator()(i, j), p, m_incr.value());
345
+ }
346
+
347
+ template <typename PacketType>
348
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, Index j, const PacketType& p, Index n,
349
+ Index /*offset*/ = 0) const {
350
+ pscatter_partial<Scalar, PacketType>(&operator()(i, j), p, m_incr.value(), n);
351
+ }
352
+
353
+ template <typename SubPacket>
354
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket& p) const {
302
355
  pscatter<Scalar, SubPacket>(&operator()(i, j), p, m_stride);
303
356
  }
304
357
 
305
- template<typename SubPacket>
358
+ template <typename SubPacket>
306
359
  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubPacket gatherPacket(Index i, Index j) const {
307
360
  return pgather<Scalar, SubPacket>(&operator()(i, j), m_stride);
308
361
  }
309
362
 
310
- // storePacketBlock_helper defines a way to access values inside the PacketBlock, this is essentially required by the Complex types.
311
- template<typename SubPacket, typename ScalarT, int n, int idx>
312
- struct storePacketBlock_helper
313
- {
314
- storePacketBlock_helper<SubPacket, ScalarT, n, idx-1> spbh;
315
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j, const PacketBlock<SubPacket, n>& block) const {
316
- spbh.store(sup, i,j,block);
317
- for(int l = 0; l < unpacket_traits<SubPacket>::size; l++)
318
- {
319
- ScalarT *v = &sup->operator()(i+l, j+idx);
320
- *v = block.packet[idx][l];
321
- }
363
+ // storePacketBlock_helper defines a way to access values inside the PacketBlock, this is essentially required by the
364
+ // Complex types.
365
+ template <typename SubPacket, typename Scalar_, int n, int idx>
366
+ struct storePacketBlock_helper {
367
+ storePacketBlock_helper<SubPacket, Scalar_, n, idx - 1> spbh;
368
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
369
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
370
+ const PacketBlock<SubPacket, n>& block) const {
371
+ spbh.store(sup, i, j, block);
372
+ sup->template storePacket<SubPacket>(i, j + idx, block.packet[idx]);
322
373
  }
323
374
  };
324
375
 
325
- template<typename SubPacket, int n, int idx>
326
- struct storePacketBlock_helper<SubPacket, std::complex<float>, n, idx>
327
- {
328
- storePacketBlock_helper<SubPacket, std::complex<float>, n, idx-1> spbh;
329
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j, const PacketBlock<SubPacket, n>& block) const {
330
- spbh.store(sup,i,j,block);
331
- for(int l = 0; l < unpacket_traits<SubPacket>::size; l++)
332
- {
333
- std::complex<float> *v = &sup->operator()(i+l, j+idx);
334
- v->real(block.packet[idx].v[2*l+0]);
335
- v->imag(block.packet[idx].v[2*l+1]);
336
- }
376
+ template <typename SubPacket, int n, int idx>
377
+ struct storePacketBlock_helper<SubPacket, std::complex<float>, n, idx> {
378
+ storePacketBlock_helper<SubPacket, std::complex<float>, n, idx - 1> spbh;
379
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
380
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
381
+ const PacketBlock<SubPacket, n>& block) const {
382
+ spbh.store(sup, i, j, block);
383
+ sup->template storePacket<SubPacket>(i, j + idx, block.packet[idx]);
337
384
  }
338
385
  };
339
386
 
340
- template<typename SubPacket, int n, int idx>
341
- struct storePacketBlock_helper<SubPacket, std::complex<double>, n, idx>
342
- {
343
- storePacketBlock_helper<SubPacket, std::complex<double>, n, idx-1> spbh;
344
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j, const PacketBlock<SubPacket, n>& block) const {
345
- spbh.store(sup,i,j,block);
346
- for(int l = 0; l < unpacket_traits<SubPacket>::size; l++)
347
- {
348
- std::complex<double> *v = &sup->operator()(i+l, j+idx);
349
- v->real(block.packet[idx].v[2*l+0]);
350
- v->imag(block.packet[idx].v[2*l+1]);
387
+ template <typename SubPacket, int n, int idx>
388
+ struct storePacketBlock_helper<SubPacket, std::complex<double>, n, idx> {
389
+ storePacketBlock_helper<SubPacket, std::complex<double>, n, idx - 1> spbh;
390
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
391
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
392
+ const PacketBlock<SubPacket, n>& block) const {
393
+ spbh.store(sup, i, j, block);
394
+ for (int l = 0; l < unpacket_traits<SubPacket>::size; l++) {
395
+ std::complex<double>* v = &sup->operator()(i + l, j + idx);
396
+ v->real(block.packet[idx].v[2 * l + 0]);
397
+ v->imag(block.packet[idx].v[2 * l + 1]);
351
398
  }
352
399
  }
353
400
  };
354
401
 
355
- template<typename SubPacket, typename ScalarT, int n>
356
- struct storePacketBlock_helper<SubPacket, ScalarT, n, -1>
357
- {
358
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index, const PacketBlock<SubPacket, n>& ) const {
359
- }
402
+ template <typename SubPacket, typename Scalar_, int n>
403
+ struct storePacketBlock_helper<SubPacket, Scalar_, n, -1> {
404
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
405
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
406
+ const PacketBlock<SubPacket, n>&) const {}
360
407
  };
361
408
 
362
- template<typename SubPacket, int n>
363
- struct storePacketBlock_helper<SubPacket, std::complex<float>, n, -1>
364
- {
365
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index, const PacketBlock<SubPacket, n>& ) const {
366
- }
409
+ template <typename SubPacket, int n>
410
+ struct storePacketBlock_helper<SubPacket, std::complex<float>, n, -1> {
411
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
412
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
413
+ const PacketBlock<SubPacket, n>&) const {}
367
414
  };
368
415
 
369
- template<typename SubPacket, int n>
370
- struct storePacketBlock_helper<SubPacket, std::complex<double>, n, -1>
371
- {
372
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index, const PacketBlock<SubPacket, n>& ) const {
373
- }
416
+ template <typename SubPacket, int n>
417
+ struct storePacketBlock_helper<SubPacket, std::complex<double>, n, -1> {
418
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
419
+ const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
420
+ const PacketBlock<SubPacket, n>&) const {}
374
421
  };
375
- // This function stores a PacketBlock on m_data, this approach is really quite slow compare to Incr=1 and should be avoided when possible.
376
- template<typename SubPacket, int n>
377
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j, const PacketBlock<SubPacket, n>&block) const {
378
- storePacketBlock_helper<SubPacket, Scalar, n, n-1> spb;
379
- spb.store(this, i,j,block);
422
+ // This function stores a PacketBlock on m_data, this approach is really quite slow compare to Incr=1 and should be
423
+ // avoided when possible.
424
+ template <typename SubPacket, int n>
425
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j,
426
+ const PacketBlock<SubPacket, n>& block) const {
427
+ storePacketBlock_helper<SubPacket, Scalar, n, n - 1> spb;
428
+ spb.store(this, i, j, block);
380
429
  }
381
- protected:
430
+
431
+ EIGEN_DEVICE_FUNC const Index stride() const { return m_stride; }
432
+ EIGEN_DEVICE_FUNC const Index incr() const { return m_incr.value(); }
433
+ EIGEN_DEVICE_FUNC constexpr Scalar* data() const { return m_data; }
434
+
435
+ protected:
382
436
  Scalar* EIGEN_RESTRICT m_data;
383
437
  const Index m_stride;
384
- const internal::variable_if_dynamic<Index,Incr> m_incr;
438
+ const internal::variable_if_dynamic<Index, Incr> m_incr;
385
439
  };
386
440
 
387
441
  // lightweight helper class to access matrix coefficients (const version)
388
- template<typename Scalar, typename Index, int StorageOrder>
442
+ template <typename Scalar, typename Index, int StorageOrder>
389
443
  class const_blas_data_mapper : public blas_data_mapper<const Scalar, Index, StorageOrder> {
390
- public:
391
- EIGEN_ALWAYS_INLINE const_blas_data_mapper(const Scalar *data, Index stride) : blas_data_mapper<const Scalar, Index, StorageOrder>(data, stride) {}
444
+ public:
445
+ typedef const_blas_data_mapper<Scalar, Index, StorageOrder> SubMapper;
446
+
447
+ EIGEN_ALWAYS_INLINE const_blas_data_mapper(const Scalar* data, Index stride)
448
+ : blas_data_mapper<const Scalar, Index, StorageOrder>(data, stride) {}
392
449
 
393
- EIGEN_ALWAYS_INLINE const_blas_data_mapper<Scalar, Index, StorageOrder> getSubMapper(Index i, Index j) const {
394
- return const_blas_data_mapper<Scalar, Index, StorageOrder>(&(this->operator()(i, j)), this->m_stride);
450
+ EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
451
+ return SubMapper(&(this->operator()(i, j)), this->m_stride);
395
452
  }
396
453
  };
397
454
 
398
-
399
455
  /* Helper class to analyze the factors of a Product expression.
400
456
  * In particular it allows to pop out operator-, scalar multiples,
401
457
  * and conjugate */
402
- template<typename XprType> struct blas_traits
403
- {
458
+ template <typename XprType>
459
+ struct blas_traits {
404
460
  typedef typename traits<XprType>::Scalar Scalar;
405
461
  typedef const XprType& ExtractType;
406
- typedef XprType _ExtractType;
462
+ typedef XprType ExtractType_;
407
463
  enum {
408
464
  IsComplex = NumTraits<Scalar>::IsComplex,
409
465
  IsTransposed = false,
410
466
  NeedToConjugate = false,
411
- HasUsableDirectAccess = ( (int(XprType::Flags)&DirectAccessBit)
412
- && ( bool(XprType::IsVectorAtCompileTime)
413
- || int(inner_stride_at_compile_time<XprType>::ret) == 1)
414
- ) ? 1 : 0,
467
+ HasUsableDirectAccess =
468
+ ((int(XprType::Flags) & DirectAccessBit) &&
469
+ (bool(XprType::IsVectorAtCompileTime) || int(inner_stride_at_compile_time<XprType>::ret) == 1))
470
+ ? 1
471
+ : 0,
415
472
  HasScalarFactor = false
416
473
  };
417
- typedef typename conditional<bool(HasUsableDirectAccess),
418
- ExtractType,
419
- typename _ExtractType::PlainObject
420
- >::type DirectLinearAccessType;
421
- static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) { return x; }
422
- static inline EIGEN_DEVICE_FUNC const Scalar extractScalarFactor(const XprType&) { return Scalar(1); }
474
+ typedef std::conditional_t<bool(HasUsableDirectAccess), ExtractType, typename ExtractType_::PlainObject>
475
+ DirectLinearAccessType;
476
+ EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) { return x; }
477
+ EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC const Scalar extractScalarFactor(const XprType&) {
478
+ return Scalar(1);
479
+ }
423
480
  };
424
481
 
425
482
  // pop conjugate
426
- template<typename Scalar, typename NestedXpr>
427
- struct blas_traits<CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> >
428
- : blas_traits<NestedXpr>
429
- {
483
+ template <typename Scalar, typename NestedXpr>
484
+ struct blas_traits<CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> > : blas_traits<NestedXpr> {
430
485
  typedef blas_traits<NestedXpr> Base;
431
486
  typedef CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> XprType;
432
487
  typedef typename Base::ExtractType ExtractType;
433
488
 
434
- enum {
435
- IsComplex = NumTraits<Scalar>::IsComplex,
436
- NeedToConjugate = Base::NeedToConjugate ? 0 : IsComplex
437
- };
438
- static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
439
- static inline Scalar extractScalarFactor(const XprType& x) { return conj(Base::extractScalarFactor(x.nestedExpression())); }
489
+ enum { IsComplex = NumTraits<Scalar>::IsComplex, NeedToConjugate = Base::NeedToConjugate ? 0 : IsComplex };
490
+ EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
491
+ EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
492
+ return conj(Base::extractScalarFactor(x.nestedExpression()));
493
+ }
440
494
  };
441
495
 
442
496
  // pop scalar multiple
443
- template<typename Scalar, typename NestedXpr, typename Plain>
444
- struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain>, NestedXpr> >
445
- : blas_traits<NestedXpr>
446
- {
447
- enum {
448
- HasScalarFactor = true
449
- };
497
+ template <typename Scalar, typename NestedXpr, typename Plain>
498
+ struct blas_traits<
499
+ CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain>, NestedXpr> >
500
+ : blas_traits<NestedXpr> {
501
+ enum { HasScalarFactor = true };
450
502
  typedef blas_traits<NestedXpr> Base;
451
- typedef CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain>, NestedXpr> XprType;
503
+ typedef CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain>, NestedXpr>
504
+ XprType;
452
505
  typedef typename Base::ExtractType ExtractType;
453
- static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) { return Base::extract(x.rhs()); }
454
- static inline EIGEN_DEVICE_FUNC Scalar extractScalarFactor(const XprType& x)
455
- { return x.lhs().functor().m_other * Base::extractScalarFactor(x.rhs()); }
506
+ EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) {
507
+ return Base::extract(x.rhs());
508
+ }
509
+ EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC Scalar extractScalarFactor(const XprType& x) {
510
+ return x.lhs().functor().m_other * Base::extractScalarFactor(x.rhs());
511
+ }
456
512
  };
457
- template<typename Scalar, typename NestedXpr, typename Plain>
458
- struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain> > >
459
- : blas_traits<NestedXpr>
460
- {
461
- enum {
462
- HasScalarFactor = true
463
- };
513
+ template <typename Scalar, typename NestedXpr, typename Plain>
514
+ struct blas_traits<
515
+ CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain> > >
516
+ : blas_traits<NestedXpr> {
517
+ enum { HasScalarFactor = true };
464
518
  typedef blas_traits<NestedXpr> Base;
465
- typedef CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain> > XprType;
519
+ typedef CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain> >
520
+ XprType;
466
521
  typedef typename Base::ExtractType ExtractType;
467
- static inline ExtractType extract(const XprType& x) { return Base::extract(x.lhs()); }
468
- static inline Scalar extractScalarFactor(const XprType& x)
469
- { return Base::extractScalarFactor(x.lhs()) * x.rhs().functor().m_other; }
522
+ EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.lhs()); }
523
+ EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
524
+ return Base::extractScalarFactor(x.lhs()) * x.rhs().functor().m_other;
525
+ }
470
526
  };
471
- template<typename Scalar, typename Plain1, typename Plain2>
472
- struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain1>,
473
- const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain2> > >
474
- : blas_traits<CwiseNullaryOp<scalar_constant_op<Scalar>,Plain1> >
475
- {};
527
+ template <typename Scalar, typename Plain1, typename Plain2>
528
+ struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain1>,
529
+ const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain2> > >
530
+ : blas_traits<CwiseNullaryOp<scalar_constant_op<Scalar>, Plain1> > {};
476
531
 
477
532
  // pop opposite
478
- template<typename Scalar, typename NestedXpr>
479
- struct blas_traits<CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> >
480
- : blas_traits<NestedXpr>
481
- {
482
- enum {
483
- HasScalarFactor = true
484
- };
533
+ template <typename Scalar, typename NestedXpr>
534
+ struct blas_traits<CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> > : blas_traits<NestedXpr> {
535
+ enum { HasScalarFactor = true };
485
536
  typedef blas_traits<NestedXpr> Base;
486
537
  typedef CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> XprType;
487
538
  typedef typename Base::ExtractType ExtractType;
488
- static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
489
- static inline Scalar extractScalarFactor(const XprType& x)
490
- { return - Base::extractScalarFactor(x.nestedExpression()); }
539
+ EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
540
+ EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
541
+ return -Base::extractScalarFactor(x.nestedExpression());
542
+ }
491
543
  };
492
544
 
493
545
  // pop/push transpose
494
- template<typename NestedXpr>
495
- struct blas_traits<Transpose<NestedXpr> >
496
- : blas_traits<NestedXpr>
497
- {
546
+ template <typename NestedXpr>
547
+ struct blas_traits<Transpose<NestedXpr> > : blas_traits<NestedXpr> {
498
548
  typedef typename NestedXpr::Scalar Scalar;
499
549
  typedef blas_traits<NestedXpr> Base;
500
550
  typedef Transpose<NestedXpr> XprType;
501
- typedef Transpose<const typename Base::_ExtractType> ExtractType; // const to get rid of a compile error; anyway blas traits are only used on the RHS
502
- typedef Transpose<const typename Base::_ExtractType> _ExtractType;
503
- typedef typename conditional<bool(Base::HasUsableDirectAccess),
504
- ExtractType,
505
- typename ExtractType::PlainObject
506
- >::type DirectLinearAccessType;
507
- enum {
508
- IsTransposed = Base::IsTransposed ? 0 : 1
509
- };
510
- static inline ExtractType extract(const XprType& x) { return ExtractType(Base::extract(x.nestedExpression())); }
511
- static inline Scalar extractScalarFactor(const XprType& x) { return Base::extractScalarFactor(x.nestedExpression()); }
551
+ typedef Transpose<const typename Base::ExtractType_>
552
+ ExtractType; // const to get rid of a compile error; anyway blas traits are only used on the RHS
553
+ typedef Transpose<const typename Base::ExtractType_> ExtractType_;
554
+ typedef std::conditional_t<bool(Base::HasUsableDirectAccess), ExtractType, typename ExtractType::PlainObject>
555
+ DirectLinearAccessType;
556
+ enum { IsTransposed = Base::IsTransposed ? 0 : 1 };
557
+ EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) {
558
+ return ExtractType(Base::extract(x.nestedExpression()));
559
+ }
560
+ EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
561
+ return Base::extractScalarFactor(x.nestedExpression());
562
+ }
512
563
  };
513
564
 
514
- template<typename T>
515
- struct blas_traits<const T>
516
- : blas_traits<T>
517
- {};
565
+ template <typename T>
566
+ struct blas_traits<const T> : blas_traits<T> {};
518
567
 
519
- template<typename T, bool HasUsableDirectAccess=blas_traits<T>::HasUsableDirectAccess>
568
+ template <typename T, bool HasUsableDirectAccess = blas_traits<T>::HasUsableDirectAccess>
520
569
  struct extract_data_selector {
521
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static const typename T::Scalar* run(const T& m)
522
- {
570
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static const typename T::Scalar* run(const T& m) {
523
571
  return blas_traits<T>::extract(m).data();
524
572
  }
525
573
  };
526
574
 
527
- template<typename T>
528
- struct extract_data_selector<T,false> {
529
- static typename T::Scalar* run(const T&) { return 0; }
575
+ template <typename T>
576
+ struct extract_data_selector<T, false> {
577
+ EIGEN_DEVICE_FUNC static typename T::Scalar* run(const T&) { return 0; }
530
578
  };
531
579
 
532
- template<typename T>
533
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(const T& m)
534
- {
580
+ template <typename T>
581
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(const T& m) {
535
582
  return extract_data_selector<T>::run(m);
536
583
  }
537
584
 
@@ -539,45 +586,37 @@ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(con
539
586
  * \c combine_scalar_factors extracts and multiplies factors from GEMM and GEMV products.
540
587
  * There is a specialization for booleans
541
588
  */
542
- template<typename ResScalar, typename Lhs, typename Rhs>
543
- struct combine_scalar_factors_impl
544
- {
545
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const Lhs& lhs, const Rhs& rhs)
546
- {
589
+ template <typename ResScalar, typename Lhs, typename Rhs>
590
+ struct combine_scalar_factors_impl {
591
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const Lhs& lhs, const Rhs& rhs) {
547
592
  return blas_traits<Lhs>::extractScalarFactor(lhs) * blas_traits<Rhs>::extractScalarFactor(rhs);
548
593
  }
549
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const ResScalar& alpha, const Lhs& lhs, const Rhs& rhs)
550
- {
594
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const ResScalar& alpha, const Lhs& lhs, const Rhs& rhs) {
551
595
  return alpha * blas_traits<Lhs>::extractScalarFactor(lhs) * blas_traits<Rhs>::extractScalarFactor(rhs);
552
596
  }
553
597
  };
554
- template<typename Lhs, typename Rhs>
555
- struct combine_scalar_factors_impl<bool, Lhs, Rhs>
556
- {
557
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const Lhs& lhs, const Rhs& rhs)
558
- {
598
+ template <typename Lhs, typename Rhs>
599
+ struct combine_scalar_factors_impl<bool, Lhs, Rhs> {
600
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const Lhs& lhs, const Rhs& rhs) {
559
601
  return blas_traits<Lhs>::extractScalarFactor(lhs) && blas_traits<Rhs>::extractScalarFactor(rhs);
560
602
  }
561
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const bool& alpha, const Lhs& lhs, const Rhs& rhs)
562
- {
603
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const bool& alpha, const Lhs& lhs, const Rhs& rhs) {
563
604
  return alpha && blas_traits<Lhs>::extractScalarFactor(lhs) && blas_traits<Rhs>::extractScalarFactor(rhs);
564
605
  }
565
606
  };
566
607
 
567
- template<typename ResScalar, typename Lhs, typename Rhs>
568
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const ResScalar& alpha, const Lhs& lhs, const Rhs& rhs)
569
- {
570
- return combine_scalar_factors_impl<ResScalar,Lhs,Rhs>::run(alpha, lhs, rhs);
608
+ template <typename ResScalar, typename Lhs, typename Rhs>
609
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const ResScalar& alpha, const Lhs& lhs,
610
+ const Rhs& rhs) {
611
+ return combine_scalar_factors_impl<ResScalar, Lhs, Rhs>::run(alpha, lhs, rhs);
571
612
  }
572
- template<typename ResScalar, typename Lhs, typename Rhs>
573
- EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const Lhs& lhs, const Rhs& rhs)
574
- {
575
- return combine_scalar_factors_impl<ResScalar,Lhs,Rhs>::run(lhs, rhs);
613
+ template <typename ResScalar, typename Lhs, typename Rhs>
614
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const Lhs& lhs, const Rhs& rhs) {
615
+ return combine_scalar_factors_impl<ResScalar, Lhs, Rhs>::run(lhs, rhs);
576
616
  }
577
617
 
618
+ } // end namespace internal
578
619
 
579
- } // end namespace internal
580
-
581
- } // end namespace Eigen
620
+ } // end namespace Eigen
582
621
 
583
- #endif // EIGEN_BLASUTIL_H
622
+ #endif // EIGEN_BLASUTIL_H