@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,469 +10,523 @@
10
10
  #ifndef EIGEN_SPARSEVECTOR_H
11
11
  #define EIGEN_SPARSEVECTOR_H
12
12
 
13
- namespace Eigen {
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
14
17
 
15
18
  /** \ingroup SparseCore_Module
16
- * \class SparseVector
17
- *
18
- * \brief a sparse vector class
19
- *
20
- * \tparam _Scalar the scalar type, i.e. the type of the coefficients
21
- *
22
- * See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.
23
- *
24
- * This class can be extended with the help of the plugin mechanism described on the page
25
- * \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_SPARSEVECTOR_PLUGIN.
26
- */
19
+ * \class SparseVector
20
+ *
21
+ * \brief a sparse vector class
22
+ *
23
+ * \tparam Scalar_ the scalar type, i.e. the type of the coefficients
24
+ *
25
+ * See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.
26
+ *
27
+ * This class can be extended with the help of the plugin mechanism described on the page
28
+ * \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_SPARSEVECTOR_PLUGIN.
29
+ */
27
30
 
28
31
  namespace internal {
29
- template<typename _Scalar, int _Options, typename _StorageIndex>
30
- struct traits<SparseVector<_Scalar, _Options, _StorageIndex> >
31
- {
32
- typedef _Scalar Scalar;
33
- typedef _StorageIndex StorageIndex;
32
+ template <typename Scalar_, int Options_, typename StorageIndex_>
33
+ struct traits<SparseVector<Scalar_, Options_, StorageIndex_> > {
34
+ typedef Scalar_ Scalar;
35
+ typedef StorageIndex_ StorageIndex;
34
36
  typedef Sparse StorageKind;
35
37
  typedef MatrixXpr XprKind;
36
38
  enum {
37
- IsColVector = (_Options & RowMajorBit) ? 0 : 1,
39
+ IsColVector = (Options_ & RowMajorBit) ? 0 : 1,
38
40
 
39
41
  RowsAtCompileTime = IsColVector ? Dynamic : 1,
40
42
  ColsAtCompileTime = IsColVector ? 1 : Dynamic,
41
43
  MaxRowsAtCompileTime = RowsAtCompileTime,
42
44
  MaxColsAtCompileTime = ColsAtCompileTime,
43
- Flags = _Options | NestByRefBit | LvalueBit | (IsColVector ? 0 : RowMajorBit) | CompressedAccessBit,
45
+ Flags = Options_ | NestByRefBit | LvalueBit | (IsColVector ? 0 : RowMajorBit) | CompressedAccessBit,
44
46
  SupportedAccessPatterns = InnerRandomAccessPattern
45
47
  };
46
48
  };
47
49
 
48
50
  // Sparse-Vector-Assignment kinds:
49
- enum {
50
- SVA_RuntimeSwitch,
51
- SVA_Inner,
52
- SVA_Outer
53
- };
51
+ enum { SVA_RuntimeSwitch, SVA_Inner, SVA_Outer };
54
52
 
55
- template< typename Dest, typename Src,
56
- int AssignmentKind = !bool(Src::IsVectorAtCompileTime) ? SVA_RuntimeSwitch
57
- : Src::InnerSizeAtCompileTime==1 ? SVA_Outer
58
- : SVA_Inner>
53
+ template <typename Dest, typename Src,
54
+ int AssignmentKind = !bool(Src::IsVectorAtCompileTime) ? SVA_RuntimeSwitch
55
+ : Src::InnerSizeAtCompileTime == 1 ? SVA_Outer
56
+ : SVA_Inner>
59
57
  struct sparse_vector_assign_selector;
60
58
 
61
- }
62
-
63
- template<typename _Scalar, int _Options, typename _StorageIndex>
64
- class SparseVector
65
- : public SparseCompressedBase<SparseVector<_Scalar, _Options, _StorageIndex> >
66
- {
67
- typedef SparseCompressedBase<SparseVector> Base;
68
- using Base::convert_index;
69
- public:
70
- EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
71
- EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
72
- EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
73
-
74
- typedef internal::CompressedStorage<Scalar,StorageIndex> Storage;
75
- enum { IsColVector = internal::traits<SparseVector>::IsColVector };
76
-
77
- enum {
78
- Options = _Options
79
- };
80
-
81
- EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
82
- EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
83
- EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
84
- EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
85
-
86
- EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return m_data.valuePtr(); }
87
- EIGEN_STRONG_INLINE Scalar* valuePtr() { return m_data.valuePtr(); }
88
-
89
- EIGEN_STRONG_INLINE const StorageIndex* innerIndexPtr() const { return m_data.indexPtr(); }
90
- EIGEN_STRONG_INLINE StorageIndex* innerIndexPtr() { return m_data.indexPtr(); }
91
-
92
- inline const StorageIndex* outerIndexPtr() const { return 0; }
93
- inline StorageIndex* outerIndexPtr() { return 0; }
94
- inline const StorageIndex* innerNonZeroPtr() const { return 0; }
95
- inline StorageIndex* innerNonZeroPtr() { return 0; }
96
-
97
- /** \internal */
98
- inline Storage& data() { return m_data; }
99
- /** \internal */
100
- inline const Storage& data() const { return m_data; }
101
-
102
- inline Scalar coeff(Index row, Index col) const
103
- {
104
- eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
105
- return coeff(IsColVector ? row : col);
106
- }
107
- inline Scalar coeff(Index i) const
108
- {
109
- eigen_assert(i>=0 && i<m_size);
110
- return m_data.at(StorageIndex(i));
111
- }
59
+ } // namespace internal
112
60
 
113
- inline Scalar& coeffRef(Index row, Index col)
114
- {
115
- eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
116
- return coeffRef(IsColVector ? row : col);
117
- }
61
+ template <typename Scalar_, int Options_, typename StorageIndex_>
62
+ class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_, StorageIndex_> > {
63
+ typedef SparseCompressedBase<SparseVector> Base;
64
+ using Base::convert_index;
118
65
 
119
- /** \returns a reference to the coefficient value at given index \a i
120
- * This operation involes a log(rho*size) binary search. If the coefficient does not
121
- * exist yet, then a sorted insertion into a sequential buffer is performed.
122
- *
123
- * This insertion might be very costly if the number of nonzeros above \a i is large.
124
- */
125
- inline Scalar& coeffRef(Index i)
126
- {
127
- eigen_assert(i>=0 && i<m_size);
128
-
129
- return m_data.atWithInsertion(StorageIndex(i));
130
- }
66
+ public:
67
+ EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
68
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
69
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
131
70
 
132
- public:
71
+ typedef internal::CompressedStorage<Scalar, StorageIndex> Storage;
72
+ enum { IsColVector = internal::traits<SparseVector>::IsColVector };
133
73
 
134
- typedef typename Base::InnerIterator InnerIterator;
135
- typedef typename Base::ReverseInnerIterator ReverseInnerIterator;
74
+ enum { Options = Options_ };
136
75
 
137
- inline void setZero() { m_data.clear(); }
76
+ EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
77
+ EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
78
+ EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
79
+ EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
138
80
 
139
- /** \returns the number of non zero coefficients */
140
- inline Index nonZeros() const { return m_data.size(); }
81
+ EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return m_data.valuePtr(); }
82
+ EIGEN_STRONG_INLINE Scalar* valuePtr() { return m_data.valuePtr(); }
141
83
 
142
- inline void startVec(Index outer)
143
- {
144
- EIGEN_UNUSED_VARIABLE(outer);
145
- eigen_assert(outer==0);
146
- }
84
+ EIGEN_STRONG_INLINE const StorageIndex* innerIndexPtr() const { return m_data.indexPtr(); }
85
+ EIGEN_STRONG_INLINE StorageIndex* innerIndexPtr() { return m_data.indexPtr(); }
147
86
 
148
- inline Scalar& insertBackByOuterInner(Index outer, Index inner)
149
- {
150
- EIGEN_UNUSED_VARIABLE(outer);
151
- eigen_assert(outer==0);
152
- return insertBack(inner);
153
- }
154
- inline Scalar& insertBack(Index i)
155
- {
156
- m_data.append(0, i);
157
- return m_data.value(m_data.size()-1);
158
- }
159
-
160
- Scalar& insertBackByOuterInnerUnordered(Index outer, Index inner)
161
- {
162
- EIGEN_UNUSED_VARIABLE(outer);
163
- eigen_assert(outer==0);
164
- return insertBackUnordered(inner);
165
- }
166
- inline Scalar& insertBackUnordered(Index i)
167
- {
168
- m_data.append(0, i);
169
- return m_data.value(m_data.size()-1);
170
- }
87
+ inline const StorageIndex* outerIndexPtr() const { return 0; }
88
+ inline StorageIndex* outerIndexPtr() { return 0; }
89
+ inline const StorageIndex* innerNonZeroPtr() const { return 0; }
90
+ inline StorageIndex* innerNonZeroPtr() { return 0; }
171
91
 
172
- inline Scalar& insert(Index row, Index col)
173
- {
174
- eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
175
-
176
- Index inner = IsColVector ? row : col;
177
- Index outer = IsColVector ? col : row;
178
- EIGEN_ONLY_USED_FOR_DEBUG(outer);
179
- eigen_assert(outer==0);
180
- return insert(inner);
181
- }
182
- Scalar& insert(Index i)
183
- {
184
- eigen_assert(i>=0 && i<m_size);
185
-
186
- Index startId = 0;
187
- Index p = Index(m_data.size()) - 1;
188
- // TODO smart realloc
189
- m_data.resize(p+2,1);
190
-
191
- while ( (p >= startId) && (m_data.index(p) > i) )
192
- {
193
- m_data.index(p+1) = m_data.index(p);
194
- m_data.value(p+1) = m_data.value(p);
195
- --p;
196
- }
197
- m_data.index(p+1) = convert_index(i);
198
- m_data.value(p+1) = 0;
199
- return m_data.value(p+1);
200
- }
92
+ /** \internal */
93
+ constexpr Storage& data() { return m_data; }
94
+ /** \internal */
95
+ constexpr const Storage& data() const { return m_data; }
201
96
 
202
- /**
203
- */
204
- inline void reserve(Index reserveSize) { m_data.reserve(reserveSize); }
97
+ inline Scalar coeff(Index row, Index col) const {
98
+ eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
99
+ return coeff(IsColVector ? row : col);
100
+ }
101
+ inline Scalar coeff(Index i) const {
102
+ eigen_assert(i >= 0 && i < m_size);
103
+ return m_data.at(StorageIndex(i));
104
+ }
205
105
 
106
+ inline Scalar& coeffRef(Index row, Index col) {
107
+ eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
108
+ return coeffRef(IsColVector ? row : col);
109
+ }
206
110
 
207
- inline void finalize() {}
111
+ /** \returns a reference to the coefficient value at given index \a i
112
+ * This operation involves a log(rho*size) binary search. If the coefficient does not
113
+ * exist yet, then a sorted insertion into a sequential buffer is performed.
114
+ *
115
+ * This insertion might be very costly if the number of nonzeros above \a i is large.
116
+ */
117
+ inline Scalar& coeffRef(Index i) {
118
+ eigen_assert(i >= 0 && i < m_size);
208
119
 
209
- /** \copydoc SparseMatrix::prune(const Scalar&,const RealScalar&) */
210
- void prune(const Scalar& reference, const RealScalar& epsilon = NumTraits<RealScalar>::dummy_precision())
211
- {
212
- m_data.prune(reference,epsilon);
213
- }
120
+ return m_data.atWithInsertion(StorageIndex(i));
121
+ }
214
122
 
215
- /** Resizes the sparse vector to \a rows x \a cols
216
- *
217
- * This method is provided for compatibility with matrices.
218
- * For a column vector, \a cols must be equal to 1.
219
- * For a row vector, \a rows must be equal to 1.
220
- *
221
- * \sa resize(Index)
222
- */
223
- void resize(Index rows, Index cols)
224
- {
225
- eigen_assert((IsColVector ? cols : rows)==1 && "Outer dimension must equal 1");
226
- resize(IsColVector ? rows : cols);
227
- }
123
+ public:
124
+ typedef typename Base::InnerIterator InnerIterator;
125
+ typedef typename Base::ReverseInnerIterator ReverseInnerIterator;
228
126
 
229
- /** Resizes the sparse vector to \a newSize
230
- * This method deletes all entries, thus leaving an empty sparse vector
231
- *
232
- * \sa conservativeResize(), setZero() */
233
- void resize(Index newSize)
234
- {
235
- m_size = newSize;
236
- m_data.clear();
237
- }
127
+ inline void setZero() { m_data.clear(); }
238
128
 
239
- /** Resizes the sparse vector to \a newSize, while leaving old values untouched.
240
- *
241
- * If the size of the vector is decreased, then the storage of the out-of bounds coefficients is kept and reserved.
242
- * Call .data().squeeze() to free extra memory.
243
- *
244
- * \sa reserve(), setZero()
245
- */
246
- void conservativeResize(Index newSize)
247
- {
248
- if (newSize < m_size)
249
- {
250
- Index i = 0;
251
- while (i<m_data.size() && m_data.index(i)<newSize) ++i;
252
- m_data.resize(i);
253
- }
254
- m_size = newSize;
255
- }
129
+ /** \returns the number of non zero coefficients */
130
+ inline Index nonZeros() const { return m_data.size(); }
256
131
 
257
- void resizeNonZeros(Index size) { m_data.resize(size); }
132
+ inline void startVec(Index outer) {
133
+ EIGEN_UNUSED_VARIABLE(outer);
134
+ eigen_assert(outer == 0);
135
+ }
258
136
 
259
- inline SparseVector() : m_size(0) { check_template_parameters(); resize(0); }
137
+ inline Scalar& insertBackByOuterInner(Index outer, Index inner) {
138
+ EIGEN_UNUSED_VARIABLE(outer);
139
+ eigen_assert(outer == 0);
140
+ return insertBack(inner);
141
+ }
142
+ inline Scalar& insertBack(Index i) {
143
+ m_data.append(Scalar(0), i);
144
+ return m_data.value(m_data.size() - 1);
145
+ }
260
146
 
261
- explicit inline SparseVector(Index size) : m_size(0) { check_template_parameters(); resize(size); }
147
+ Scalar& insertBackByOuterInnerUnordered(Index outer, Index inner) {
148
+ EIGEN_UNUSED_VARIABLE(outer);
149
+ eigen_assert(outer == 0);
150
+ return insertBackUnordered(inner);
151
+ }
152
+ inline Scalar& insertBackUnordered(Index i) {
153
+ m_data.append(Scalar(0), i);
154
+ return m_data.value(m_data.size() - 1);
155
+ }
262
156
 
263
- inline SparseVector(Index rows, Index cols) : m_size(0) { check_template_parameters(); resize(rows,cols); }
157
+ inline Scalar& insert(Index row, Index col) {
158
+ eigen_assert(IsColVector ? (col == 0 && row >= 0 && row < m_size) : (row == 0 && col >= 0 && col < m_size));
264
159
 
265
- template<typename OtherDerived>
266
- inline SparseVector(const SparseMatrixBase<OtherDerived>& other)
267
- : m_size(0)
268
- {
269
- #ifdef EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
270
- EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
271
- #endif
272
- check_template_parameters();
273
- *this = other.derived();
160
+ Index inner = IsColVector ? row : col;
161
+ Index outer = IsColVector ? col : row;
162
+ EIGEN_ONLY_USED_FOR_DEBUG(outer);
163
+ eigen_assert(outer == 0);
164
+ return insert(inner);
165
+ }
166
+ Scalar& insert(Index i) {
167
+ eigen_assert(i >= 0 && i < m_size);
168
+
169
+ Index startId = 0;
170
+ Index p = Index(m_data.size()) - 1;
171
+ // TODO smart realloc
172
+ m_data.resize(p + 2, 1);
173
+
174
+ while ((p >= startId) && (m_data.index(p) > i)) {
175
+ m_data.index(p + 1) = m_data.index(p);
176
+ m_data.value(p + 1) = m_data.value(p);
177
+ --p;
274
178
  }
179
+ m_data.index(p + 1) = convert_index(i);
180
+ m_data.value(p + 1) = Scalar(0);
181
+ return m_data.value(p + 1);
182
+ }
275
183
 
276
- inline SparseVector(const SparseVector& other)
277
- : Base(other), m_size(0)
278
- {
279
- check_template_parameters();
280
- *this = other.derived();
281
- }
184
+ /**
185
+ */
186
+ inline void reserve(Index reserveSize) { m_data.reserve(reserveSize); }
282
187
 
283
- /** Swaps the values of \c *this and \a other.
284
- * Overloaded for performance: this version performs a \em shallow swap by swapping pointers and attributes only.
285
- * \sa SparseMatrixBase::swap()
286
- */
287
- inline void swap(SparseVector& other)
288
- {
289
- std::swap(m_size, other.m_size);
290
- m_data.swap(other.m_data);
291
- }
188
+ inline void finalize() {}
292
189
 
293
- template<int OtherOptions>
294
- inline void swap(SparseMatrix<Scalar,OtherOptions,StorageIndex>& other)
295
- {
296
- eigen_assert(other.outerSize()==1);
297
- std::swap(m_size, other.m_innerSize);
298
- m_data.swap(other.m_data);
299
- }
190
+ /** \copydoc SparseMatrix::prune(const Scalar&,const RealScalar&) */
191
+ Index prune(const Scalar& reference, const RealScalar& epsilon = NumTraits<RealScalar>::dummy_precision()) {
192
+ return prune([&](const Scalar& val) { return !internal::isMuchSmallerThan(val, reference, epsilon); });
193
+ }
300
194
 
301
- inline SparseVector& operator=(const SparseVector& other)
302
- {
303
- if (other.isRValue())
304
- {
305
- swap(other.const_cast_derived());
195
+ /**
196
+ * \brief Prunes the entries of the vector based on a `predicate`
197
+ * \tparam F Type of the predicate.
198
+ * \param keep_predicate The predicate that is used to test whether a value should be kept. A callable that
199
+ * gets passed om a `Scalar` value and returns a boolean. If the predicate returns true, the value is kept.
200
+ * \return The new number of structural non-zeros.
201
+ */
202
+ template <class F>
203
+ Index prune(F&& keep_predicate) {
204
+ Index k = 0;
205
+ Index n = m_data.size();
206
+ for (Index i = 0; i < n; ++i) {
207
+ if (keep_predicate(m_data.value(i))) {
208
+ m_data.value(k) = std::move(m_data.value(i));
209
+ m_data.index(k) = m_data.index(i);
210
+ ++k;
306
211
  }
307
- else
308
- {
309
- resize(other.size());
310
- m_data = other.m_data;
311
- }
312
- return *this;
313
212
  }
213
+ m_data.resize(k);
214
+ return k;
215
+ }
314
216
 
315
- template<typename OtherDerived>
316
- inline SparseVector& operator=(const SparseMatrixBase<OtherDerived>& other)
317
- {
318
- SparseVector tmp(other.size());
319
- internal::sparse_vector_assign_selector<SparseVector,OtherDerived>::run(tmp,other.derived());
320
- this->swap(tmp);
321
- return *this;
322
- }
217
+ /** Resizes the sparse vector to \a rows x \a cols
218
+ *
219
+ * This method is provided for compatibility with matrices.
220
+ * For a column vector, \a cols must be equal to 1.
221
+ * For a row vector, \a rows must be equal to 1.
222
+ *
223
+ * \sa resize(Index)
224
+ */
225
+ void resize(Index rows, Index cols) {
226
+ eigen_assert((IsColVector ? cols : rows) == 1 && "Outer dimension must equal 1");
227
+ resize(IsColVector ? rows : cols);
228
+ }
323
229
 
324
- #ifndef EIGEN_PARSED_BY_DOXYGEN
325
- template<typename Lhs, typename Rhs>
326
- inline SparseVector& operator=(const SparseSparseProduct<Lhs,Rhs>& product)
327
- {
328
- return Base::operator=(product);
329
- }
330
- #endif
331
-
332
- friend std::ostream & operator << (std::ostream & s, const SparseVector& m)
333
- {
334
- for (Index i=0; i<m.nonZeros(); ++i)
335
- s << "(" << m.m_data.value(i) << "," << m.m_data.index(i) << ") ";
336
- s << std::endl;
337
- return s;
230
+ /** Resizes the sparse vector to \a newSize
231
+ * This method deletes all entries, thus leaving an empty sparse vector
232
+ *
233
+ * \sa conservativeResize(), setZero() */
234
+ void resize(Index newSize) {
235
+ m_size = newSize;
236
+ m_data.clear();
237
+ }
238
+
239
+ /** Resizes the sparse vector to \a newSize, while leaving old values untouched.
240
+ *
241
+ * If the size of the vector is decreased, then the storage of the out-of bounds coefficients is kept and reserved.
242
+ * Call .data().squeeze() to free extra memory.
243
+ *
244
+ * \sa reserve(), setZero()
245
+ */
246
+ void conservativeResize(Index newSize) {
247
+ if (newSize < m_size) {
248
+ Index i = 0;
249
+ while (i < m_data.size() && m_data.index(i) < newSize) ++i;
250
+ m_data.resize(i);
338
251
  }
252
+ m_size = newSize;
253
+ }
339
254
 
340
- /** Destructor */
341
- inline ~SparseVector() {}
255
+ void resizeNonZeros(Index size) { m_data.resize(size); }
342
256
 
343
- /** Overloaded for performance */
344
- Scalar sum() const;
257
+ inline SparseVector() : m_size(0) { resize(0); }
345
258
 
346
- public:
259
+ explicit inline SparseVector(Index size) : m_size(0) { resize(size); }
347
260
 
348
- /** \internal \deprecated use setZero() and reserve() */
349
- EIGEN_DEPRECATED void startFill(Index reserve)
350
- {
351
- setZero();
352
- m_data.reserve(reserve);
353
- }
261
+ inline SparseVector(Index rows, Index cols) : m_size(0) { resize(rows, cols); }
354
262
 
355
- /** \internal \deprecated use insertBack(Index,Index) */
356
- EIGEN_DEPRECATED Scalar& fill(Index r, Index c)
357
- {
358
- eigen_assert(r==0 || c==0);
359
- return fill(IsColVector ? r : c);
360
- }
263
+ template <typename OtherDerived>
264
+ inline SparseVector(const SparseMatrixBase<OtherDerived>& other) : m_size(0) {
265
+ #ifdef EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
266
+ EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
267
+ #endif
268
+ *this = other.derived();
269
+ }
361
270
 
362
- /** \internal \deprecated use insertBack(Index) */
363
- EIGEN_DEPRECATED Scalar& fill(Index i)
364
- {
365
- m_data.append(0, i);
366
- return m_data.value(m_data.size()-1);
367
- }
271
+ inline SparseVector(const SparseVector& other) : Base(other), m_size(0) { *this = other.derived(); }
368
272
 
369
- /** \internal \deprecated use insert(Index,Index) */
370
- EIGEN_DEPRECATED Scalar& fillrand(Index r, Index c)
371
- {
372
- eigen_assert(r==0 || c==0);
373
- return fillrand(IsColVector ? r : c);
374
- }
273
+ /** Swaps the values of \c *this and \a other.
274
+ * Overloaded for performance: this version performs a \em shallow swap by swapping pointers and attributes only.
275
+ * \sa SparseMatrixBase::swap()
276
+ */
277
+ inline void swap(SparseVector& other) {
278
+ std::swap(m_size, other.m_size);
279
+ m_data.swap(other.m_data);
280
+ }
281
+ friend EIGEN_DEVICE_FUNC void swap(SparseVector& a, SparseVector& b) { a.swap(b); }
375
282
 
376
- /** \internal \deprecated use insert(Index) */
377
- EIGEN_DEPRECATED Scalar& fillrand(Index i)
378
- {
379
- return insert(i);
380
- }
283
+ template <int OtherOptions>
284
+ inline void swap(SparseMatrix<Scalar, OtherOptions, StorageIndex>& other) {
285
+ eigen_assert(other.outerSize() == 1);
286
+ std::swap(m_size, other.m_innerSize);
287
+ m_data.swap(other.m_data);
288
+ }
289
+ template <int OtherOptions>
290
+ friend EIGEN_DEVICE_FUNC void swap(SparseVector& a, SparseMatrix<Scalar, OtherOptions, StorageIndex>& b) {
291
+ a.swap(b);
292
+ }
293
+ template <int OtherOptions>
294
+ friend EIGEN_DEVICE_FUNC void swap(SparseMatrix<Scalar, OtherOptions, StorageIndex>& a, SparseVector& b) {
295
+ b.swap(a);
296
+ }
381
297
 
382
- /** \internal \deprecated use finalize() */
383
- EIGEN_DEPRECATED void endFill() {}
384
-
385
- // These two functions were here in the 3.1 release, so let's keep them in case some code rely on them.
386
- /** \internal \deprecated use data() */
387
- EIGEN_DEPRECATED Storage& _data() { return m_data; }
388
- /** \internal \deprecated use data() */
389
- EIGEN_DEPRECATED const Storage& _data() const { return m_data; }
390
-
391
- # ifdef EIGEN_SPARSEVECTOR_PLUGIN
392
- # include EIGEN_SPARSEVECTOR_PLUGIN
393
- # endif
394
-
395
- protected:
396
-
397
- static void check_template_parameters()
398
- {
399
- EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
400
- EIGEN_STATIC_ASSERT((_Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
298
+ inline SparseVector& operator=(const SparseVector& other) {
299
+ if (other.isRValue()) {
300
+ swap(other.const_cast_derived());
301
+ } else {
302
+ resize(other.size());
303
+ m_data = other.m_data;
401
304
  }
402
-
403
- Storage m_data;
404
- Index m_size;
305
+ return *this;
306
+ }
307
+
308
+ template <typename OtherDerived>
309
+ inline SparseVector& operator=(const SparseMatrixBase<OtherDerived>& other) {
310
+ SparseVector tmp(other.size());
311
+ internal::sparse_vector_assign_selector<SparseVector, OtherDerived>::run(tmp, other.derived());
312
+ this->swap(tmp);
313
+ return *this;
314
+ }
315
+
316
+ inline SparseVector(SparseVector&& other) : SparseVector() { this->swap(other); }
317
+
318
+ template <typename OtherDerived>
319
+ inline SparseVector(SparseCompressedBase<OtherDerived>&& other) : SparseVector() {
320
+ *this = other.derived().markAsRValue();
321
+ }
322
+
323
+ inline SparseVector& operator=(SparseVector&& other) {
324
+ this->swap(other);
325
+ return *this;
326
+ }
327
+
328
+ template <typename OtherDerived>
329
+ inline SparseVector& operator=(SparseCompressedBase<OtherDerived>&& other) {
330
+ *this = other.derived().markAsRValue();
331
+ return *this;
332
+ }
333
+
334
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
335
+ template <typename Lhs, typename Rhs>
336
+ inline SparseVector& operator=(const SparseSparseProduct<Lhs, Rhs>& product) {
337
+ return Base::operator=(product);
338
+ }
339
+ #endif
340
+
341
+ #ifndef EIGEN_NO_IO
342
+ friend std::ostream& operator<<(std::ostream& s, const SparseVector& m) {
343
+ for (Index i = 0; i < m.nonZeros(); ++i) s << "(" << m.m_data.value(i) << "," << m.m_data.index(i) << ") ";
344
+ s << std::endl;
345
+ return s;
346
+ }
347
+ #endif
348
+
349
+ /** Destructor */
350
+ inline ~SparseVector() {}
351
+
352
+ /** Overloaded for performance */
353
+ Scalar sum() const;
354
+
355
+ public:
356
+ /** \internal \deprecated use setZero() and reserve() */
357
+ EIGEN_DEPRECATED_WITH_REASON("Use .setZero() and .reserve() instead.") void startFill(Index reserve) {
358
+ setZero();
359
+ m_data.reserve(reserve);
360
+ }
361
+
362
+ /** \internal \deprecated use insertBack(Index,Index) */
363
+ EIGEN_DEPRECATED_WITH_REASON("Use .insertBack() instead.") Scalar& fill(Index r, Index c) {
364
+ eigen_assert(r == 0 || c == 0);
365
+ return fill(IsColVector ? r : c);
366
+ }
367
+
368
+ /** \internal \deprecated use insertBack(Index) */
369
+ EIGEN_DEPRECATED_WITH_REASON("Use .insertBack() instead.") Scalar& fill(Index i) {
370
+ m_data.append(Scalar(0), i);
371
+ return m_data.value(m_data.size() - 1);
372
+ }
373
+
374
+ /** \internal \deprecated use insert(Index,Index) */
375
+ EIGEN_DEPRECATED_WITH_REASON("Use .insert() instead.") Scalar& fillrand(Index r, Index c) {
376
+ eigen_assert(r == 0 || c == 0);
377
+ return fillrand(IsColVector ? r : c);
378
+ }
379
+
380
+ /** \internal \deprecated use insert(Index) */
381
+ EIGEN_DEPRECATED_WITH_REASON("Use .insert() instead.") Scalar& fillrand(Index i) { return insert(i); }
382
+
383
+ /** \internal \deprecated use finalize() */
384
+ EIGEN_DEPRECATED_WITH_REASON("Use .finalize() instead.") void endFill() {}
385
+
386
+ // These two functions were here in the 3.1 release, so let's keep them in case some code rely on them.
387
+ /** \internal \deprecated use data() */
388
+ EIGEN_DEPRECATED_WITH_REASON("Use .data() instead.") Storage& _data() { return m_data; }
389
+ /** \internal \deprecated use data() */
390
+ EIGEN_DEPRECATED_WITH_REASON("Use .data() instead.") const Storage& _data() const { return m_data; }
391
+
392
+ #ifdef EIGEN_SPARSEVECTOR_PLUGIN
393
+ #include EIGEN_SPARSEVECTOR_PLUGIN
394
+ #endif
395
+
396
+ protected:
397
+ EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned, THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
398
+ EIGEN_STATIC_ASSERT((Options_ & (ColMajor | RowMajor)) == Options, INVALID_MATRIX_TEMPLATE_PARAMETERS)
399
+
400
+ Storage m_data;
401
+ Index m_size;
405
402
  };
406
403
 
407
404
  namespace internal {
408
405
 
409
- template<typename _Scalar, int _Options, typename _Index>
410
- struct evaluator<SparseVector<_Scalar,_Options,_Index> >
411
- : evaluator_base<SparseVector<_Scalar,_Options,_Index> >
412
- {
413
- typedef SparseVector<_Scalar,_Options,_Index> SparseVectorType;
406
+ template <typename Scalar_, int Options_, typename Index_>
407
+ struct evaluator<SparseVector<Scalar_, Options_, Index_> > : evaluator_base<SparseVector<Scalar_, Options_, Index_> > {
408
+ typedef SparseVector<Scalar_, Options_, Index_> SparseVectorType;
414
409
  typedef evaluator_base<SparseVectorType> Base;
415
410
  typedef typename SparseVectorType::InnerIterator InnerIterator;
416
411
  typedef typename SparseVectorType::ReverseInnerIterator ReverseInnerIterator;
417
-
418
- enum {
419
- CoeffReadCost = NumTraits<_Scalar>::ReadCost,
420
- Flags = SparseVectorType::Flags
421
- };
412
+
413
+ enum { CoeffReadCost = NumTraits<Scalar_>::ReadCost, Flags = SparseVectorType::Flags };
422
414
 
423
415
  evaluator() : Base() {}
424
-
425
- explicit evaluator(const SparseVectorType &mat) : m_matrix(&mat)
426
- {
427
- EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
428
- }
429
-
430
- inline Index nonZerosEstimate() const {
431
- return m_matrix->nonZeros();
432
- }
433
-
416
+
417
+ explicit evaluator(const SparseVectorType& mat) : m_matrix(&mat) { EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost); }
418
+
419
+ inline Index nonZerosEstimate() const { return m_matrix->nonZeros(); }
420
+
434
421
  operator SparseVectorType&() { return m_matrix->const_cast_derived(); }
435
422
  operator const SparseVectorType&() const { return *m_matrix; }
436
-
437
- const SparseVectorType *m_matrix;
423
+
424
+ const SparseVectorType* m_matrix;
438
425
  };
439
426
 
440
- template< typename Dest, typename Src>
441
- struct sparse_vector_assign_selector<Dest,Src,SVA_Inner> {
427
+ template <typename Dest, typename Src>
428
+ struct sparse_vector_assign_selector<Dest, Src, SVA_Inner> {
442
429
  static void run(Dest& dst, const Src& src) {
443
- eigen_internal_assert(src.innerSize()==src.size());
430
+ eigen_internal_assert(src.innerSize() == src.size());
444
431
  typedef internal::evaluator<Src> SrcEvaluatorType;
445
432
  SrcEvaluatorType srcEval(src);
446
- for(typename SrcEvaluatorType::InnerIterator it(srcEval, 0); it; ++it)
447
- dst.insert(it.index()) = it.value();
433
+ for (typename SrcEvaluatorType::InnerIterator it(srcEval, 0); it; ++it) dst.insert(it.index()) = it.value();
448
434
  }
449
435
  };
450
436
 
451
- template< typename Dest, typename Src>
452
- struct sparse_vector_assign_selector<Dest,Src,SVA_Outer> {
437
+ template <typename Dest, typename Src>
438
+ struct sparse_vector_assign_selector<Dest, Src, SVA_Outer> {
453
439
  static void run(Dest& dst, const Src& src) {
454
- eigen_internal_assert(src.outerSize()==src.size());
440
+ eigen_internal_assert(src.outerSize() == src.size());
455
441
  typedef internal::evaluator<Src> SrcEvaluatorType;
456
442
  SrcEvaluatorType srcEval(src);
457
- for(Index i=0; i<src.size(); ++i)
458
- {
443
+ for (Index i = 0; i < src.size(); ++i) {
459
444
  typename SrcEvaluatorType::InnerIterator it(srcEval, i);
460
- if(it)
461
- dst.insert(i) = it.value();
445
+ if (it) dst.insert(i) = it.value();
462
446
  }
463
447
  }
464
448
  };
465
449
 
466
- template< typename Dest, typename Src>
467
- struct sparse_vector_assign_selector<Dest,Src,SVA_RuntimeSwitch> {
450
+ template <typename Dest, typename Src>
451
+ struct sparse_vector_assign_selector<Dest, Src, SVA_RuntimeSwitch> {
468
452
  static void run(Dest& dst, const Src& src) {
469
- if(src.outerSize()==1) sparse_vector_assign_selector<Dest,Src,SVA_Inner>::run(dst, src);
470
- else sparse_vector_assign_selector<Dest,Src,SVA_Outer>::run(dst, src);
453
+ if (src.outerSize() == 1)
454
+ sparse_vector_assign_selector<Dest, Src, SVA_Inner>::run(dst, src);
455
+ else
456
+ sparse_vector_assign_selector<Dest, Src, SVA_Outer>::run(dst, src);
471
457
  }
472
458
  };
473
459
 
474
- }
460
+ } // namespace internal
461
+
462
+ // Specialization for SparseVector.
463
+ // Serializes [size, numNonZeros, innerIndices, values].
464
+ template <typename Scalar, int Options, typename StorageIndex>
465
+ class Serializer<SparseVector<Scalar, Options, StorageIndex>, void> {
466
+ public:
467
+ typedef SparseVector<Scalar, Options, StorageIndex> SparseMat;
468
+
469
+ struct Header {
470
+ typename SparseMat::Index size;
471
+ Index num_non_zeros;
472
+ };
473
+
474
+ EIGEN_DEVICE_FUNC size_t size(const SparseMat& value) const {
475
+ return sizeof(Header) + (sizeof(Scalar) + sizeof(StorageIndex)) * value.nonZeros();
476
+ }
477
+
478
+ EIGEN_DEVICE_FUNC uint8_t* serialize(uint8_t* dest, uint8_t* end, const SparseMat& value) {
479
+ if (EIGEN_PREDICT_FALSE(dest == nullptr)) return nullptr;
480
+ if (EIGEN_PREDICT_FALSE(dest + size(value) > end)) return nullptr;
481
+
482
+ const size_t header_bytes = sizeof(Header);
483
+ Header header = {value.innerSize(), value.nonZeros()};
484
+ EIGEN_USING_STD(memcpy)
485
+ memcpy(dest, &header, header_bytes);
486
+ dest += header_bytes;
487
+
488
+ // Inner indices.
489
+ std::size_t data_bytes = sizeof(StorageIndex) * header.num_non_zeros;
490
+ memcpy(dest, value.innerIndexPtr(), data_bytes);
491
+ dest += data_bytes;
492
+
493
+ // Values.
494
+ data_bytes = sizeof(Scalar) * header.num_non_zeros;
495
+ memcpy(dest, value.valuePtr(), data_bytes);
496
+ dest += data_bytes;
497
+
498
+ return dest;
499
+ }
500
+
501
+ EIGEN_DEVICE_FUNC const uint8_t* deserialize(const uint8_t* src, const uint8_t* end, SparseMat& value) const {
502
+ if (EIGEN_PREDICT_FALSE(src == nullptr)) return nullptr;
503
+ if (EIGEN_PREDICT_FALSE(src + sizeof(Header) > end)) return nullptr;
504
+
505
+ const size_t header_bytes = sizeof(Header);
506
+ Header header;
507
+ EIGEN_USING_STD(memcpy)
508
+ memcpy(&header, src, header_bytes);
509
+ src += header_bytes;
510
+
511
+ value.setZero();
512
+ value.resize(header.size);
513
+ value.resizeNonZeros(header.num_non_zeros);
514
+
515
+ // Inner indices.
516
+ std::size_t data_bytes = sizeof(StorageIndex) * header.num_non_zeros;
517
+ if (EIGEN_PREDICT_FALSE(src + data_bytes > end)) return nullptr;
518
+ memcpy(value.innerIndexPtr(), src, data_bytes);
519
+ src += data_bytes;
520
+
521
+ // Values.
522
+ data_bytes = sizeof(Scalar) * header.num_non_zeros;
523
+ if (EIGEN_PREDICT_FALSE(src + data_bytes > end)) return nullptr;
524
+ memcpy(value.valuePtr(), src, data_bytes);
525
+ src += data_bytes;
526
+ return src;
527
+ }
528
+ };
475
529
 
476
- } // end namespace Eigen
530
+ } // end namespace Eigen
477
531
 
478
- #endif // EIGEN_SPARSEVECTOR_H
532
+ #endif // EIGEN_SPARSEVECTOR_H