@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -10,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 swaping 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