@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,71 +10,80 @@
10
10
  #ifndef EIGEN_SPARSEDENSEPRODUCT_H
11
11
  #define EIGEN_SPARSEDENSEPRODUCT_H
12
12
 
13
- namespace Eigen {
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
14
17
 
15
18
  namespace internal {
16
19
 
17
- template <> struct product_promote_storage_type<Sparse,Dense, OuterProduct> { typedef Sparse ret; };
18
- template <> struct product_promote_storage_type<Dense,Sparse, OuterProduct> { typedef Sparse ret; };
20
+ template <>
21
+ struct product_promote_storage_type<Sparse, Dense, OuterProduct> {
22
+ typedef Sparse ret;
23
+ };
24
+ template <>
25
+ struct product_promote_storage_type<Dense, Sparse, OuterProduct> {
26
+ typedef Sparse ret;
27
+ };
19
28
 
20
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,
21
- typename AlphaType,
22
- int LhsStorageOrder = ((SparseLhsType::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor,
23
- bool ColPerCol = ((DenseRhsType::Flags&RowMajorBit)==0) || DenseRhsType::ColsAtCompileTime==1>
29
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType,
30
+ int LhsStorageOrder = ((SparseLhsType::Flags & RowMajorBit) == RowMajorBit) ? RowMajor : ColMajor,
31
+ bool ColPerCol = ((DenseRhsType::Flags & RowMajorBit) == 0) || DenseRhsType::ColsAtCompileTime == 1>
24
32
  struct sparse_time_dense_product_impl;
25
33
 
26
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
27
- struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar, RowMajor, true>
28
- {
29
- typedef typename internal::remove_all<SparseLhsType>::type Lhs;
30
- typedef typename internal::remove_all<DenseRhsType>::type Rhs;
31
- typedef typename internal::remove_all<DenseResType>::type Res;
34
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
35
+ struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
36
+ RowMajor, true> {
37
+ typedef internal::remove_all_t<SparseLhsType> Lhs;
38
+ typedef internal::remove_all_t<DenseRhsType> Rhs;
39
+ typedef internal::remove_all_t<DenseResType> Res;
32
40
  typedef typename evaluator<Lhs>::InnerIterator LhsInnerIterator;
33
41
  typedef evaluator<Lhs> LhsEval;
34
- static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
35
- {
42
+ static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
43
+ const typename Res::Scalar& alpha) {
36
44
  LhsEval lhsEval(lhs);
37
-
45
+
38
46
  Index n = lhs.outerSize();
39
47
  #ifdef EIGEN_HAS_OPENMP
40
- Eigen::initParallel();
41
48
  Index threads = Eigen::nbThreads();
42
49
  #endif
43
-
44
- for(Index c=0; c<rhs.cols(); ++c)
45
- {
50
+
51
+ for (Index c = 0; c < rhs.cols(); ++c) {
46
52
  #ifdef EIGEN_HAS_OPENMP
47
53
  // This 20000 threshold has been found experimentally on 2D and 3D Poisson problems.
48
54
  // It basically represents the minimal amount of work to be done to be worth it.
49
- if(threads>1 && lhsEval.nonZerosEstimate() > 20000)
50
- {
51
- #pragma omp parallel for schedule(dynamic,(n+threads*4-1)/(threads*4)) num_threads(threads)
52
- for(Index i=0; i<n; ++i)
53
- processRow(lhsEval,rhs,res,alpha,i,c);
54
- }
55
- else
55
+ if (threads > 1 && lhsEval.nonZerosEstimate() > 20000) {
56
+ #pragma omp parallel for schedule(dynamic, (n + threads * 4 - 1) / (threads * 4)) num_threads(threads)
57
+ for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i, c);
58
+ } else
56
59
  #endif
57
60
  {
58
- for(Index i=0; i<n; ++i)
59
- processRow(lhsEval,rhs,res,alpha,i,c);
61
+ for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i, c);
60
62
  }
61
63
  }
62
64
  }
63
-
64
- static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha, Index i, Index col)
65
- {
66
- typename Res::Scalar tmp(0);
67
- for(LhsInnerIterator it(lhsEval,i); it ;++it)
68
- tmp += it.value() * rhs.coeff(it.index(),col);
69
- res.coeffRef(i,col) += alpha * tmp;
65
+
66
+ static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, DenseResType& res,
67
+ const typename Res::Scalar& alpha, Index i, Index col) {
68
+ // Two accumulators, which breaks the dependency chain on the accumulator
69
+ // and allows more instruction-level parallelism in the following loop
70
+ typename Res::Scalar tmp_a(0);
71
+ typename Res::Scalar tmp_b(0);
72
+ for (LhsInnerIterator it(lhsEval, i); it; ++it) {
73
+ tmp_a += it.value() * rhs.coeff(it.index(), col);
74
+ ++it;
75
+ if (it) {
76
+ tmp_b += it.value() * rhs.coeff(it.index(), col);
77
+ }
78
+ }
79
+ res.coeffRef(i, col) += alpha * (tmp_a + tmp_b);
70
80
  }
71
-
72
81
  };
73
82
 
74
83
  // FIXME: what is the purpose of the following specialization? Is it for the BlockedSparse format?
75
84
  // -> let's disable it for now as it is conflicting with generic scalar*matrix and matrix*scalar operators
76
- // template<typename T1, typename T2/*, int _Options, typename _StrideType*/>
77
- // struct ScalarBinaryOpTraits<T1, Ref<T2/*, _Options, _StrideType*/> >
85
+ // template<typename T1, typename T2/*, int Options_, typename StrideType_*/>
86
+ // struct ScalarBinaryOpTraits<T1, Ref<T2/*, Options_, StrideType_*/> >
78
87
  // {
79
88
  // enum {
80
89
  // Defined = 1
@@ -82,261 +91,224 @@ struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, t
82
91
  // typedef typename CwiseUnaryOp<scalar_multiple2_op<T1, typename T2::Scalar>, T2>::PlainObject ReturnType;
83
92
  // };
84
93
 
85
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
86
- struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, AlphaType, ColMajor, true>
87
- {
88
- typedef typename internal::remove_all<SparseLhsType>::type Lhs;
89
- typedef typename internal::remove_all<DenseRhsType>::type Rhs;
90
- typedef typename internal::remove_all<DenseResType>::type Res;
94
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
95
+ struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, AlphaType, ColMajor, true> {
96
+ typedef internal::remove_all_t<SparseLhsType> Lhs;
97
+ typedef internal::remove_all_t<DenseRhsType> Rhs;
98
+ typedef internal::remove_all_t<DenseResType> Res;
91
99
  typedef evaluator<Lhs> LhsEval;
92
100
  typedef typename LhsEval::InnerIterator LhsInnerIterator;
93
- static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
94
- {
101
+ static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha) {
95
102
  LhsEval lhsEval(lhs);
96
- for(Index c=0; c<rhs.cols(); ++c)
97
- {
98
- for(Index j=0; j<lhs.outerSize(); ++j)
99
- {
100
- // typename Res::Scalar rhs_j = alpha * rhs.coeff(j,c);
101
- typename ScalarBinaryOpTraits<AlphaType, typename Rhs::Scalar>::ReturnType rhs_j(alpha * rhs.coeff(j,c));
102
- for(LhsInnerIterator it(lhsEval,j); it ;++it)
103
- res.coeffRef(it.index(),c) += it.value() * rhs_j;
103
+ for (Index c = 0; c < rhs.cols(); ++c) {
104
+ for (Index j = 0; j < lhs.outerSize(); ++j) {
105
+ // typename Res::Scalar rhs_j = alpha * rhs.coeff(j,c);
106
+ typename ScalarBinaryOpTraits<AlphaType, typename Rhs::Scalar>::ReturnType rhs_j(alpha * rhs.coeff(j, c));
107
+ for (LhsInnerIterator it(lhsEval, j); it; ++it) res.coeffRef(it.index(), c) += it.value() * rhs_j;
104
108
  }
105
109
  }
106
110
  }
107
111
  };
108
112
 
109
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
110
- struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar, RowMajor, false>
111
- {
112
- typedef typename internal::remove_all<SparseLhsType>::type Lhs;
113
- typedef typename internal::remove_all<DenseRhsType>::type Rhs;
114
- typedef typename internal::remove_all<DenseResType>::type Res;
113
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
114
+ struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
115
+ RowMajor, false> {
116
+ typedef internal::remove_all_t<SparseLhsType> Lhs;
117
+ typedef internal::remove_all_t<DenseRhsType> Rhs;
118
+ typedef internal::remove_all_t<DenseResType> Res;
115
119
  typedef evaluator<Lhs> LhsEval;
116
120
  typedef typename LhsEval::InnerIterator LhsInnerIterator;
117
- static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
118
- {
121
+ static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
122
+ const typename Res::Scalar& alpha) {
119
123
  Index n = lhs.rows();
120
124
  LhsEval lhsEval(lhs);
121
125
 
122
126
  #ifdef EIGEN_HAS_OPENMP
123
- Eigen::initParallel();
124
127
  Index threads = Eigen::nbThreads();
125
128
  // This 20000 threshold has been found experimentally on 2D and 3D Poisson problems.
126
129
  // It basically represents the minimal amount of work to be done to be worth it.
127
- if(threads>1 && lhsEval.nonZerosEstimate()*rhs.cols() > 20000)
128
- {
129
- #pragma omp parallel for schedule(dynamic,(n+threads*4-1)/(threads*4)) num_threads(threads)
130
- for(Index i=0; i<n; ++i)
131
- processRow(lhsEval,rhs,res,alpha,i);
132
- }
133
- else
130
+ if (threads > 1 && lhsEval.nonZerosEstimate() * rhs.cols() > 20000) {
131
+ #pragma omp parallel for schedule(dynamic, (n + threads * 4 - 1) / (threads * 4)) num_threads(threads)
132
+ for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i);
133
+ } else
134
134
  #endif
135
135
  {
136
- for(Index i=0; i<n; ++i)
137
- processRow(lhsEval, rhs, res, alpha, i);
136
+ for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i);
138
137
  }
139
138
  }
140
139
 
141
- static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, Res& res, const typename Res::Scalar& alpha, Index i)
142
- {
140
+ static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, Res& res, const typename Res::Scalar& alpha,
141
+ Index i) {
143
142
  typename Res::RowXpr res_i(res.row(i));
144
- for(LhsInnerIterator it(lhsEval,i); it ;++it)
145
- res_i += (alpha*it.value()) * rhs.row(it.index());
143
+ for (LhsInnerIterator it(lhsEval, i); it; ++it) res_i += (alpha * it.value()) * rhs.row(it.index());
146
144
  }
147
145
  };
148
146
 
149
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
150
- struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar, ColMajor, false>
151
- {
152
- typedef typename internal::remove_all<SparseLhsType>::type Lhs;
153
- typedef typename internal::remove_all<DenseRhsType>::type Rhs;
154
- typedef typename internal::remove_all<DenseResType>::type Res;
147
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
148
+ struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
149
+ ColMajor, false> {
150
+ typedef internal::remove_all_t<SparseLhsType> Lhs;
151
+ typedef internal::remove_all_t<DenseRhsType> Rhs;
152
+ typedef internal::remove_all_t<DenseResType> Res;
155
153
  typedef typename evaluator<Lhs>::InnerIterator LhsInnerIterator;
156
- static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
157
- {
154
+ static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
155
+ const typename Res::Scalar& alpha) {
158
156
  evaluator<Lhs> lhsEval(lhs);
159
- for(Index j=0; j<lhs.outerSize(); ++j)
160
- {
157
+ for (Index j = 0; j < lhs.outerSize(); ++j) {
161
158
  typename Rhs::ConstRowXpr rhs_j(rhs.row(j));
162
- for(LhsInnerIterator it(lhsEval,j); it ;++it)
163
- res.row(it.index()) += (alpha*it.value()) * rhs_j;
159
+ for (LhsInnerIterator it(lhsEval, j); it; ++it) res.row(it.index()) += (alpha * it.value()) * rhs_j;
164
160
  }
165
161
  }
166
162
  };
167
163
 
168
- template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,typename AlphaType>
169
- inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
170
- {
171
- sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, AlphaType>::run(lhs, rhs, res, alpha);
164
+ template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
165
+ inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
166
+ const AlphaType& alpha) {
167
+ sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, AlphaType>::run(lhs, rhs, res, alpha);
172
168
  }
173
169
 
174
- } // end namespace internal
170
+ } // end namespace internal
175
171
 
176
172
  namespace internal {
177
173
 
178
- template<typename Lhs, typename Rhs, int ProductType>
174
+ template <typename Lhs, typename Rhs, int ProductType>
179
175
  struct generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType>
180
- : generic_product_impl_base<Lhs,Rhs,generic_product_impl<Lhs,Rhs,SparseShape,DenseShape,ProductType> >
181
- {
182
- typedef typename Product<Lhs,Rhs>::Scalar Scalar;
183
-
184
- template<typename Dest>
185
- static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha)
186
- {
187
- typedef typename nested_eval<Lhs,((Rhs::Flags&RowMajorBit)==0) ? 1 : Rhs::ColsAtCompileTime>::type LhsNested;
188
- typedef typename nested_eval<Rhs,((Lhs::Flags&RowMajorBit)==0) ? 1 : Dynamic>::type RhsNested;
176
+ : generic_product_impl_base<Lhs, Rhs, generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType> > {
177
+ typedef typename Product<Lhs, Rhs>::Scalar Scalar;
178
+
179
+ template <typename Dest>
180
+ static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha) {
181
+ typedef typename nested_eval<Lhs, ((Rhs::Flags & RowMajorBit) == 0) ? 1 : Rhs::ColsAtCompileTime>::type LhsNested;
182
+ typedef typename nested_eval<Rhs, ((Lhs::Flags & RowMajorBit) == 0) ? 1 : Dynamic>::type RhsNested;
189
183
  LhsNested lhsNested(lhs);
190
184
  RhsNested rhsNested(rhs);
191
185
  internal::sparse_time_dense_product(lhsNested, rhsNested, dst, alpha);
192
186
  }
193
187
  };
194
188
 
195
- template<typename Lhs, typename Rhs, int ProductType>
189
+ template <typename Lhs, typename Rhs, int ProductType>
196
190
  struct generic_product_impl<Lhs, Rhs, SparseTriangularShape, DenseShape, ProductType>
197
- : generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType>
198
- {};
191
+ : generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType> {};
199
192
 
200
- template<typename Lhs, typename Rhs, int ProductType>
193
+ template <typename Lhs, typename Rhs, int ProductType>
201
194
  struct generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType>
202
- : generic_product_impl_base<Lhs,Rhs,generic_product_impl<Lhs,Rhs,DenseShape,SparseShape,ProductType> >
203
- {
204
- typedef typename Product<Lhs,Rhs>::Scalar Scalar;
205
-
206
- template<typename Dst>
207
- static void scaleAndAddTo(Dst& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha)
208
- {
209
- typedef typename nested_eval<Lhs,((Rhs::Flags&RowMajorBit)==0) ? Dynamic : 1>::type LhsNested;
210
- typedef typename nested_eval<Rhs,((Lhs::Flags&RowMajorBit)==RowMajorBit) ? 1 : Lhs::RowsAtCompileTime>::type RhsNested;
195
+ : generic_product_impl_base<Lhs, Rhs, generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType> > {
196
+ typedef typename Product<Lhs, Rhs>::Scalar Scalar;
197
+
198
+ template <typename Dst>
199
+ static void scaleAndAddTo(Dst& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha) {
200
+ typedef typename nested_eval<Lhs, ((Rhs::Flags & RowMajorBit) == 0) ? Dynamic : 1>::type LhsNested;
201
+ typedef typename nested_eval<Rhs, ((Lhs::Flags & RowMajorBit) == RowMajorBit) ? 1 : Lhs::RowsAtCompileTime>::type
202
+ RhsNested;
211
203
  LhsNested lhsNested(lhs);
212
204
  RhsNested rhsNested(rhs);
213
-
205
+
214
206
  // transpose everything
215
207
  Transpose<Dst> dstT(dst);
216
208
  internal::sparse_time_dense_product(rhsNested.transpose(), lhsNested.transpose(), dstT, alpha);
217
209
  }
218
210
  };
219
211
 
220
- template<typename Lhs, typename Rhs, int ProductType>
212
+ template <typename Lhs, typename Rhs, int ProductType>
221
213
  struct generic_product_impl<Lhs, Rhs, DenseShape, SparseTriangularShape, ProductType>
222
- : generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType>
223
- {};
224
-
225
- template<typename LhsT, typename RhsT, bool NeedToTranspose>
226
- struct sparse_dense_outer_product_evaluator
227
- {
228
- protected:
229
- typedef typename conditional<NeedToTranspose,RhsT,LhsT>::type Lhs1;
230
- typedef typename conditional<NeedToTranspose,LhsT,RhsT>::type ActualRhs;
231
- typedef Product<LhsT,RhsT,DefaultProduct> ProdXprType;
232
-
214
+ : generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType> {};
215
+
216
+ template <typename LhsT, typename RhsT, bool NeedToTranspose>
217
+ struct sparse_dense_outer_product_evaluator {
218
+ protected:
219
+ typedef std::conditional_t<NeedToTranspose, RhsT, LhsT> Lhs1;
220
+ typedef std::conditional_t<NeedToTranspose, LhsT, RhsT> ActualRhs;
221
+ typedef Product<LhsT, RhsT, DefaultProduct> ProdXprType;
222
+
233
223
  // if the actual left-hand side is a dense vector,
234
224
  // then build a sparse-view so that we can seamlessly iterate over it.
235
- typedef typename conditional<is_same<typename internal::traits<Lhs1>::StorageKind,Sparse>::value,
236
- Lhs1, SparseView<Lhs1> >::type ActualLhs;
237
- typedef typename conditional<is_same<typename internal::traits<Lhs1>::StorageKind,Sparse>::value,
238
- Lhs1 const&, SparseView<Lhs1> >::type LhsArg;
239
-
225
+ typedef std::conditional_t<is_same<typename internal::traits<Lhs1>::StorageKind, Sparse>::value, Lhs1,
226
+ SparseView<Lhs1> >
227
+ ActualLhs;
228
+ typedef std::conditional_t<is_same<typename internal::traits<Lhs1>::StorageKind, Sparse>::value, Lhs1 const&,
229
+ SparseView<Lhs1> >
230
+ LhsArg;
231
+
240
232
  typedef evaluator<ActualLhs> LhsEval;
241
233
  typedef evaluator<ActualRhs> RhsEval;
242
234
  typedef typename evaluator<ActualLhs>::InnerIterator LhsIterator;
243
235
  typedef typename ProdXprType::Scalar Scalar;
244
-
245
- public:
246
- enum {
247
- Flags = NeedToTranspose ? RowMajorBit : 0,
248
- CoeffReadCost = HugeCost
249
- };
250
-
251
- class InnerIterator : public LhsIterator
252
- {
253
- public:
254
- InnerIterator(const sparse_dense_outer_product_evaluator &xprEval, Index outer)
255
- : LhsIterator(xprEval.m_lhsXprImpl, 0),
256
- m_outer(outer),
257
- m_empty(false),
258
- m_factor(get(xprEval.m_rhsXprImpl, outer, typename internal::traits<ActualRhs>::StorageKind() ))
259
- {}
260
-
236
+
237
+ public:
238
+ enum { Flags = NeedToTranspose ? RowMajorBit : 0, CoeffReadCost = HugeCost };
239
+
240
+ class InnerIterator : public LhsIterator {
241
+ public:
242
+ InnerIterator(const sparse_dense_outer_product_evaluator& xprEval, Index outer)
243
+ : LhsIterator(xprEval.m_lhsXprImpl, 0),
244
+ m_outer(outer),
245
+ m_empty(false),
246
+ m_factor(get(xprEval.m_rhsXprImpl, outer, typename internal::traits<ActualRhs>::StorageKind())) {}
247
+
261
248
  EIGEN_STRONG_INLINE Index outer() const { return m_outer; }
262
- EIGEN_STRONG_INLINE Index row() const { return NeedToTranspose ? m_outer : LhsIterator::index(); }
263
- EIGEN_STRONG_INLINE Index col() const { return NeedToTranspose ? LhsIterator::index() : m_outer; }
249
+ EIGEN_STRONG_INLINE Index row() const { return NeedToTranspose ? m_outer : LhsIterator::index(); }
250
+ EIGEN_STRONG_INLINE Index col() const { return NeedToTranspose ? LhsIterator::index() : m_outer; }
264
251
 
265
252
  EIGEN_STRONG_INLINE Scalar value() const { return LhsIterator::value() * m_factor; }
266
253
  EIGEN_STRONG_INLINE operator bool() const { return LhsIterator::operator bool() && (!m_empty); }
267
-
268
- protected:
269
- Scalar get(const RhsEval &rhs, Index outer, Dense = Dense()) const
270
- {
271
- return rhs.coeff(outer);
272
- }
273
-
274
- Scalar get(const RhsEval &rhs, Index outer, Sparse = Sparse())
275
- {
254
+
255
+ protected:
256
+ Scalar get(const RhsEval& rhs, Index outer, Dense = Dense()) const { return rhs.coeff(outer); }
257
+
258
+ Scalar get(const RhsEval& rhs, Index outer, Sparse = Sparse()) {
276
259
  typename RhsEval::InnerIterator it(rhs, outer);
277
- if (it && it.index()==0 && it.value()!=Scalar(0))
278
- return it.value();
260
+ if (it && it.index() == 0 && it.value() != Scalar(0)) return it.value();
279
261
  m_empty = true;
280
262
  return Scalar(0);
281
263
  }
282
-
264
+
283
265
  Index m_outer;
284
266
  bool m_empty;
285
267
  Scalar m_factor;
286
268
  };
287
-
288
- sparse_dense_outer_product_evaluator(const Lhs1 &lhs, const ActualRhs &rhs)
289
- : m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs)
290
- {
269
+
270
+ sparse_dense_outer_product_evaluator(const Lhs1& lhs, const ActualRhs& rhs)
271
+ : m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
291
272
  EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
292
273
  }
293
-
274
+
294
275
  // transpose case
295
- sparse_dense_outer_product_evaluator(const ActualRhs &rhs, const Lhs1 &lhs)
296
- : m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs)
297
- {
276
+ sparse_dense_outer_product_evaluator(const ActualRhs& rhs, const Lhs1& lhs)
277
+ : m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
298
278
  EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
299
279
  }
300
-
301
- protected:
280
+
281
+ protected:
302
282
  const LhsArg m_lhs;
303
283
  evaluator<ActualLhs> m_lhsXprImpl;
304
284
  evaluator<ActualRhs> m_rhsXprImpl;
305
285
  };
306
286
 
307
287
  // sparse * dense outer product
308
- template<typename Lhs, typename Rhs>
288
+ template <typename Lhs, typename Rhs>
309
289
  struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, SparseShape, DenseShape>
310
- : sparse_dense_outer_product_evaluator<Lhs,Rhs, Lhs::IsRowMajor>
311
- {
312
- typedef sparse_dense_outer_product_evaluator<Lhs,Rhs, Lhs::IsRowMajor> Base;
313
-
290
+ : sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> {
291
+ typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> Base;
292
+
314
293
  typedef Product<Lhs, Rhs> XprType;
315
294
  typedef typename XprType::PlainObject PlainObject;
316
295
 
317
- explicit product_evaluator(const XprType& xpr)
318
- : Base(xpr.lhs(), xpr.rhs())
319
- {}
320
-
296
+ explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
321
297
  };
322
298
 
323
- template<typename Lhs, typename Rhs>
299
+ template <typename Lhs, typename Rhs>
324
300
  struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, DenseShape, SparseShape>
325
- : sparse_dense_outer_product_evaluator<Lhs,Rhs, Rhs::IsRowMajor>
326
- {
327
- typedef sparse_dense_outer_product_evaluator<Lhs,Rhs, Rhs::IsRowMajor> Base;
328
-
301
+ : sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> {
302
+ typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> Base;
303
+
329
304
  typedef Product<Lhs, Rhs> XprType;
330
305
  typedef typename XprType::PlainObject PlainObject;
331
306
 
332
- explicit product_evaluator(const XprType& xpr)
333
- : Base(xpr.lhs(), xpr.rhs())
334
- {}
335
-
307
+ explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
336
308
  };
337
309
 
338
- } // end namespace internal
310
+ } // end namespace internal
339
311
 
340
- } // end namespace Eigen
312
+ } // end namespace Eigen
341
313
 
342
- #endif // EIGEN_SPARSEDENSEPRODUCT_H
314
+ #endif // EIGEN_SPARSEDENSEPRODUCT_H