@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,491 +10,454 @@
10
10
  #ifndef EIGEN_SPARSE_BLOCK_H
11
11
  #define EIGEN_SPARSE_BLOCK_H
12
12
 
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
13
16
  namespace Eigen {
14
17
 
15
18
  // Subset of columns or rows
16
- template<typename XprType, int BlockRows, int BlockCols>
17
- class BlockImpl<XprType,BlockRows,BlockCols,true,Sparse>
18
- : public SparseMatrixBase<Block<XprType,BlockRows,BlockCols,true> >
19
- {
20
- typedef typename internal::remove_all<typename XprType::Nested>::type _MatrixTypeNested;
21
- typedef Block<XprType, BlockRows, BlockCols, true> BlockType;
22
- public:
23
- enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
24
- protected:
25
- enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
26
- typedef SparseMatrixBase<BlockType> Base;
27
- using Base::convert_index;
28
- public:
29
- EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
30
-
31
- inline BlockImpl(XprType& xpr, Index i)
32
- : m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize)
33
- {}
34
-
35
- inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
36
- : m_matrix(xpr), m_outerStart(convert_index(IsRowMajor ? startRow : startCol)), m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols))
37
- {}
38
-
39
- EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
40
- EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
41
-
42
- Index nonZeros() const
43
- {
44
- typedef internal::evaluator<XprType> EvaluatorType;
45
- EvaluatorType matEval(m_matrix);
46
- Index nnz = 0;
47
- Index end = m_outerStart + m_outerSize.value();
48
- for(Index j=m_outerStart; j<end; ++j)
49
- for(typename EvaluatorType::InnerIterator it(matEval, j); it; ++it)
50
- ++nnz;
51
- return nnz;
52
- }
19
+ template <typename XprType, int BlockRows, int BlockCols>
20
+ class BlockImpl<XprType, BlockRows, BlockCols, true, Sparse>
21
+ : public SparseMatrixBase<Block<XprType, BlockRows, BlockCols, true> > {
22
+ typedef internal::remove_all_t<typename XprType::Nested> MatrixTypeNested_;
23
+ typedef Block<XprType, BlockRows, BlockCols, true> BlockType;
53
24
 
54
- inline const Scalar coeff(Index row, Index col) const
55
- {
56
- return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
57
- }
25
+ public:
26
+ enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
58
27
 
59
- inline const Scalar coeff(Index index) const
60
- {
61
- return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
62
- }
28
+ protected:
29
+ enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
30
+ typedef SparseMatrixBase<BlockType> Base;
31
+ using Base::convert_index;
63
32
 
64
- inline const XprType& nestedExpression() const { return m_matrix; }
65
- inline XprType& nestedExpression() { return m_matrix; }
66
- Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
67
- Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
68
- Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
69
- Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
70
-
71
- protected:
72
-
73
- typename internal::ref_selector<XprType>::non_const_type m_matrix;
74
- Index m_outerStart;
75
- const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
76
-
77
- protected:
78
- // Disable assignment with clear error message.
79
- // Note that simply removing operator= yields compilation errors with ICC+MSVC
80
- template<typename T>
81
- BlockImpl& operator=(const T&)
82
- {
83
- EIGEN_STATIC_ASSERT(sizeof(T)==0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
84
- return *this;
85
- }
86
- };
33
+ public:
34
+ EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
35
+
36
+ inline BlockImpl(XprType& xpr, Index i) : m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize) {}
87
37
 
38
+ inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
39
+ : m_matrix(xpr),
40
+ m_outerStart(convert_index(IsRowMajor ? startRow : startCol)),
41
+ m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols)) {}
42
+
43
+ EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
44
+ EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
45
+
46
+ Index nonZeros() const {
47
+ typedef internal::evaluator<XprType> EvaluatorType;
48
+ EvaluatorType matEval(m_matrix);
49
+ Index nnz = 0;
50
+ Index end = m_outerStart + m_outerSize.value();
51
+ for (Index j = m_outerStart; j < end; ++j)
52
+ for (typename EvaluatorType::InnerIterator it(matEval, j); it; ++it) ++nnz;
53
+ return nnz;
54
+ }
55
+
56
+ inline const Scalar coeff(Index row, Index col) const {
57
+ return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
58
+ }
59
+
60
+ inline const Scalar coeff(Index index) const {
61
+ return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
62
+ }
63
+
64
+ inline const XprType& nestedExpression() const { return m_matrix; }
65
+ inline XprType& nestedExpression() { return m_matrix; }
66
+ Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
67
+ Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
68
+ Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
69
+ Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
70
+
71
+ protected:
72
+ typename internal::ref_selector<XprType>::non_const_type m_matrix;
73
+ Index m_outerStart;
74
+ const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
75
+
76
+ protected:
77
+ // Disable assignment with clear error message.
78
+ // Note that simply removing operator= yields compilation errors with ICC+MSVC
79
+ template <typename T>
80
+ BlockImpl& operator=(const T&) {
81
+ EIGEN_STATIC_ASSERT(sizeof(T) == 0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
82
+ return *this;
83
+ }
84
+ };
88
85
 
89
86
  /***************************************************************************
90
- * specialization for SparseMatrix
91
- ***************************************************************************/
87
+ * specialization for SparseMatrix
88
+ ***************************************************************************/
92
89
 
93
90
  namespace internal {
94
91
 
95
- template<typename SparseMatrixType, int BlockRows, int BlockCols>
96
- class sparse_matrix_block_impl
97
- : public SparseCompressedBase<Block<SparseMatrixType,BlockRows,BlockCols,true> >
98
- {
99
- typedef typename internal::remove_all<typename SparseMatrixType::Nested>::type _MatrixTypeNested;
100
- typedef Block<SparseMatrixType, BlockRows, BlockCols, true> BlockType;
101
- typedef SparseCompressedBase<Block<SparseMatrixType,BlockRows,BlockCols,true> > Base;
102
- using Base::convert_index;
103
- public:
104
- enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
105
- EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
106
- protected:
107
- typedef typename Base::IndexVector IndexVector;
108
- enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
109
- public:
110
-
111
- inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index i)
112
- : m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize)
113
- {}
114
-
115
- inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
116
- : m_matrix(xpr), m_outerStart(convert_index(IsRowMajor ? startRow : startCol)), m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols))
117
- {}
118
-
119
- template<typename OtherDerived>
120
- inline BlockType& operator=(const SparseMatrixBase<OtherDerived>& other)
121
- {
122
- typedef typename internal::remove_all<typename SparseMatrixType::Nested>::type _NestedMatrixType;
123
- _NestedMatrixType& matrix = m_matrix;
124
- // This assignment is slow if this vector set is not empty
125
- // and/or it is not at the end of the nonzeros of the underlying matrix.
126
-
127
- // 1 - eval to a temporary to avoid transposition and/or aliasing issues
128
- Ref<const SparseMatrix<Scalar, IsRowMajor ? RowMajor : ColMajor, StorageIndex> > tmp(other.derived());
129
- eigen_internal_assert(tmp.outerSize()==m_outerSize.value());
130
-
131
- // 2 - let's check whether there is enough allocated memory
132
- Index nnz = tmp.nonZeros();
133
- Index start = m_outerStart==0 ? 0 : m_matrix.outerIndexPtr()[m_outerStart]; // starting position of the current block
134
- Index end = m_matrix.outerIndexPtr()[m_outerStart+m_outerSize.value()]; // ending position of the current block
135
- Index block_size = end - start; // available room in the current block
136
- Index tail_size = m_matrix.outerIndexPtr()[m_matrix.outerSize()] - end;
137
-
138
- Index free_size = m_matrix.isCompressed()
139
- ? Index(matrix.data().allocatedSize()) + block_size
140
- : block_size;
141
-
142
- Index tmp_start = tmp.outerIndexPtr()[0];
143
-
144
- bool update_trailing_pointers = false;
145
- if(nnz>free_size)
146
- {
147
- // realloc manually to reduce copies
148
- typename SparseMatrixType::Storage newdata(m_matrix.data().allocatedSize() - block_size + nnz);
149
-
150
- internal::smart_copy(m_matrix.valuePtr(), m_matrix.valuePtr() + start, newdata.valuePtr());
151
- internal::smart_copy(m_matrix.innerIndexPtr(), m_matrix.innerIndexPtr() + start, newdata.indexPtr());
152
-
153
- internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, newdata.valuePtr() + start);
154
- internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz, newdata.indexPtr() + start);
155
-
156
- internal::smart_copy(matrix.valuePtr()+end, matrix.valuePtr()+end + tail_size, newdata.valuePtr()+start+nnz);
157
- internal::smart_copy(matrix.innerIndexPtr()+end, matrix.innerIndexPtr()+end + tail_size, newdata.indexPtr()+start+nnz);
158
-
159
- newdata.resize(m_matrix.outerIndexPtr()[m_matrix.outerSize()] - block_size + nnz);
160
-
161
- matrix.data().swap(newdata);
92
+ template <typename SparseMatrixType, int BlockRows, int BlockCols>
93
+ class sparse_matrix_block_impl : public SparseCompressedBase<Block<SparseMatrixType, BlockRows, BlockCols, true> > {
94
+ typedef internal::remove_all_t<typename SparseMatrixType::Nested> MatrixTypeNested_;
95
+ typedef Block<SparseMatrixType, BlockRows, BlockCols, true> BlockType;
96
+ typedef SparseCompressedBase<Block<SparseMatrixType, BlockRows, BlockCols, true> > Base;
97
+ using Base::convert_index;
98
+
99
+ public:
100
+ enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
101
+ EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
102
+ protected:
103
+ typedef typename Base::IndexVector IndexVector;
104
+ enum { OuterSize = IsRowMajor ? BlockRows : BlockCols };
105
+
106
+ public:
107
+ inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index i)
108
+ : m_matrix(xpr), m_outerStart(convert_index(i)), m_outerSize(OuterSize) {}
109
+
110
+ inline sparse_matrix_block_impl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows,
111
+ Index blockCols)
112
+ : m_matrix(xpr),
113
+ m_outerStart(convert_index(IsRowMajor ? startRow : startCol)),
114
+ m_outerSize(convert_index(IsRowMajor ? blockRows : blockCols)) {}
162
115
 
163
- update_trailing_pointers = true;
164
- }
165
- else
166
- {
167
- if(m_matrix.isCompressed() && nnz!=block_size)
168
- {
169
- // no need to realloc, simply copy the tail at its respective position and insert tmp
170
- matrix.data().resize(start + nnz + tail_size);
116
+ template <typename OtherDerived>
117
+ inline BlockType& operator=(const SparseMatrixBase<OtherDerived>& other) {
118
+ typedef internal::remove_all_t<typename SparseMatrixType::Nested> NestedMatrixType_;
119
+ NestedMatrixType_& matrix = m_matrix;
120
+ // This assignment is slow if this vector set is not empty
121
+ // and/or it is not at the end of the nonzeros of the underlying matrix.
171
122
 
172
- internal::smart_memmove(matrix.valuePtr()+end, matrix.valuePtr() + end+tail_size, matrix.valuePtr() + start+nnz);
173
- internal::smart_memmove(matrix.innerIndexPtr()+end, matrix.innerIndexPtr() + end+tail_size, matrix.innerIndexPtr() + start+nnz);
123
+ // 1 - eval to a temporary to avoid transposition and/or aliasing issues
124
+ Ref<const SparseMatrix<Scalar, IsRowMajor ? RowMajor : ColMajor, StorageIndex> > tmp(other.derived());
125
+ eigen_internal_assert(tmp.outerSize() == m_outerSize.value());
174
126
 
175
- update_trailing_pointers = true;
176
- }
127
+ // 2 - let's check whether there is enough allocated memory
128
+ Index nnz = tmp.nonZeros();
129
+ Index start =
130
+ m_outerStart == 0 ? 0 : m_matrix.outerIndexPtr()[m_outerStart]; // starting position of the current block
131
+ Index end = m_matrix.outerIndexPtr()[m_outerStart + m_outerSize.value()]; // ending position of the current block
132
+ Index block_size = end - start; // available room in the current block
133
+ Index tail_size = m_matrix.outerIndexPtr()[m_matrix.outerSize()] - end;
177
134
 
178
- internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, matrix.valuePtr() + start);
179
- internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz, matrix.innerIndexPtr() + start);
180
- }
135
+ Index free_size = m_matrix.isCompressed() ? Index(matrix.data().allocatedSize()) + block_size : block_size;
181
136
 
182
- // update outer index pointers and innerNonZeros
183
- if(IsVectorAtCompileTime)
184
- {
185
- if(!m_matrix.isCompressed())
186
- matrix.innerNonZeroPtr()[m_outerStart] = StorageIndex(nnz);
187
- matrix.outerIndexPtr()[m_outerStart] = StorageIndex(start);
188
- }
189
- else
190
- {
191
- StorageIndex p = StorageIndex(start);
192
- for(Index k=0; k<m_outerSize.value(); ++k)
193
- {
194
- StorageIndex nnz_k = internal::convert_index<StorageIndex>(tmp.innerVector(k).nonZeros());
195
- if(!m_matrix.isCompressed())
196
- matrix.innerNonZeroPtr()[m_outerStart+k] = nnz_k;
197
- matrix.outerIndexPtr()[m_outerStart+k] = p;
198
- p += nnz_k;
199
- }
200
- }
137
+ Index tmp_start = tmp.outerIndexPtr()[0];
201
138
 
202
- if(update_trailing_pointers)
203
- {
204
- StorageIndex offset = internal::convert_index<StorageIndex>(nnz - block_size);
205
- for(Index k = m_outerStart + m_outerSize.value(); k<=matrix.outerSize(); ++k)
206
- {
207
- matrix.outerIndexPtr()[k] += offset;
208
- }
209
- }
139
+ bool update_trailing_pointers = false;
140
+ if (nnz > free_size) {
141
+ // realloc manually to reduce copies
142
+ typename SparseMatrixType::Storage newdata(m_matrix.data().allocatedSize() - block_size + nnz);
210
143
 
211
- return derived();
212
- }
144
+ internal::smart_copy(m_matrix.valuePtr(), m_matrix.valuePtr() + start, newdata.valuePtr());
145
+ internal::smart_copy(m_matrix.innerIndexPtr(), m_matrix.innerIndexPtr() + start, newdata.indexPtr());
213
146
 
214
- inline BlockType& operator=(const BlockType& other)
215
- {
216
- return operator=<BlockType>(other);
217
- }
147
+ internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, newdata.valuePtr() + start);
148
+ internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz,
149
+ newdata.indexPtr() + start);
218
150
 
219
- inline const Scalar* valuePtr() const
220
- { return m_matrix.valuePtr(); }
221
- inline Scalar* valuePtr()
222
- { return m_matrix.valuePtr(); }
151
+ internal::smart_copy(matrix.valuePtr() + end, matrix.valuePtr() + end + tail_size,
152
+ newdata.valuePtr() + start + nnz);
153
+ internal::smart_copy(matrix.innerIndexPtr() + end, matrix.innerIndexPtr() + end + tail_size,
154
+ newdata.indexPtr() + start + nnz);
223
155
 
224
- inline const StorageIndex* innerIndexPtr() const
225
- { return m_matrix.innerIndexPtr(); }
226
- inline StorageIndex* innerIndexPtr()
227
- { return m_matrix.innerIndexPtr(); }
156
+ newdata.resize(m_matrix.outerIndexPtr()[m_matrix.outerSize()] - block_size + nnz);
228
157
 
229
- inline const StorageIndex* outerIndexPtr() const
230
- { return m_matrix.outerIndexPtr() + m_outerStart; }
231
- inline StorageIndex* outerIndexPtr()
232
- { return m_matrix.outerIndexPtr() + m_outerStart; }
158
+ matrix.data().swap(newdata);
233
159
 
234
- inline const StorageIndex* innerNonZeroPtr() const
235
- { return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr()+m_outerStart); }
236
- inline StorageIndex* innerNonZeroPtr()
237
- { return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr()+m_outerStart); }
160
+ update_trailing_pointers = true;
161
+ } else {
162
+ if (m_matrix.isCompressed() && nnz != block_size) {
163
+ // no need to realloc, simply copy the tail at its respective position and insert tmp
164
+ matrix.data().resize(start + nnz + tail_size);
238
165
 
239
- bool isCompressed() const { return m_matrix.innerNonZeroPtr()==0; }
166
+ internal::smart_memmove(matrix.valuePtr() + end, matrix.valuePtr() + end + tail_size,
167
+ matrix.valuePtr() + start + nnz);
168
+ internal::smart_memmove(matrix.innerIndexPtr() + end, matrix.innerIndexPtr() + end + tail_size,
169
+ matrix.innerIndexPtr() + start + nnz);
240
170
 
241
- inline Scalar& coeffRef(Index row, Index col)
242
- {
243
- return m_matrix.coeffRef(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
244
- }
171
+ update_trailing_pointers = true;
172
+ }
245
173
 
246
- inline const Scalar coeff(Index row, Index col) const
247
- {
248
- return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
174
+ internal::smart_copy(tmp.valuePtr() + tmp_start, tmp.valuePtr() + tmp_start + nnz, matrix.valuePtr() + start);
175
+ internal::smart_copy(tmp.innerIndexPtr() + tmp_start, tmp.innerIndexPtr() + tmp_start + nnz,
176
+ matrix.innerIndexPtr() + start);
249
177
  }
250
178
 
251
- inline const Scalar coeff(Index index) const
252
- {
253
- return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
179
+ // update outer index pointers and innerNonZeros
180
+ if (IsVectorAtCompileTime) {
181
+ if (!m_matrix.isCompressed()) matrix.innerNonZeroPtr()[m_outerStart] = StorageIndex(nnz);
182
+ matrix.outerIndexPtr()[m_outerStart] = StorageIndex(start);
183
+ } else {
184
+ StorageIndex p = StorageIndex(start);
185
+ for (Index k = 0; k < m_outerSize.value(); ++k) {
186
+ StorageIndex nnz_k = internal::convert_index<StorageIndex>(tmp.innerVector(k).nonZeros());
187
+ if (!m_matrix.isCompressed()) matrix.innerNonZeroPtr()[m_outerStart + k] = nnz_k;
188
+ matrix.outerIndexPtr()[m_outerStart + k] = p;
189
+ p += nnz_k;
190
+ }
254
191
  }
255
192
 
256
- const Scalar& lastCoeff() const
257
- {
258
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(sparse_matrix_block_impl);
259
- eigen_assert(Base::nonZeros()>0);
260
- if(m_matrix.isCompressed())
261
- return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart+1]-1];
262
- else
263
- return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart]+m_matrix.innerNonZeroPtr()[m_outerStart]-1];
193
+ if (update_trailing_pointers) {
194
+ StorageIndex offset = internal::convert_index<StorageIndex>(nnz - block_size);
195
+ for (Index k = m_outerStart + m_outerSize.value(); k <= matrix.outerSize(); ++k) {
196
+ matrix.outerIndexPtr()[k] += offset;
197
+ }
264
198
  }
265
199
 
266
- EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
267
- EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
200
+ return derived();
201
+ }
202
+
203
+ inline BlockType& operator=(const BlockType& other) { return operator= <BlockType>(other); }
268
204
 
269
- inline const SparseMatrixType& nestedExpression() const { return m_matrix; }
270
- inline SparseMatrixType& nestedExpression() { return m_matrix; }
271
- Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
272
- Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
273
- Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
274
- Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
205
+ inline const Scalar* valuePtr() const { return m_matrix.valuePtr(); }
206
+ inline Scalar* valuePtr() { return m_matrix.valuePtr(); }
275
207
 
276
- protected:
208
+ inline const StorageIndex* innerIndexPtr() const { return m_matrix.innerIndexPtr(); }
209
+ inline StorageIndex* innerIndexPtr() { return m_matrix.innerIndexPtr(); }
277
210
 
278
- typename internal::ref_selector<SparseMatrixType>::non_const_type m_matrix;
279
- Index m_outerStart;
280
- const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
211
+ inline const StorageIndex* outerIndexPtr() const { return m_matrix.outerIndexPtr() + m_outerStart; }
212
+ inline StorageIndex* outerIndexPtr() { return m_matrix.outerIndexPtr() + m_outerStart; }
281
213
 
214
+ inline const StorageIndex* innerNonZeroPtr() const {
215
+ return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr() + m_outerStart);
216
+ }
217
+ inline StorageIndex* innerNonZeroPtr() { return isCompressed() ? 0 : (m_matrix.innerNonZeroPtr() + m_outerStart); }
218
+
219
+ bool isCompressed() const { return m_matrix.innerNonZeroPtr() == 0; }
220
+
221
+ inline Scalar& coeffRef(Index row, Index col) {
222
+ return m_matrix.coeffRef(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
223
+ }
224
+
225
+ inline const Scalar coeff(Index row, Index col) const {
226
+ return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart));
227
+ }
228
+
229
+ inline const Scalar coeff(Index index) const {
230
+ return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart);
231
+ }
232
+
233
+ const Scalar& lastCoeff() const {
234
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(sparse_matrix_block_impl);
235
+ eigen_assert(Base::nonZeros() > 0);
236
+ if (m_matrix.isCompressed())
237
+ return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart + 1] - 1];
238
+ else
239
+ return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart] + m_matrix.innerNonZeroPtr()[m_outerStart] - 1];
240
+ }
241
+
242
+ EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
243
+ EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
244
+
245
+ inline const SparseMatrixType& nestedExpression() const { return m_matrix; }
246
+ inline SparseMatrixType& nestedExpression() { return m_matrix; }
247
+ Index startRow() const { return IsRowMajor ? m_outerStart : 0; }
248
+ Index startCol() const { return IsRowMajor ? 0 : m_outerStart; }
249
+ Index blockRows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); }
250
+ Index blockCols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); }
251
+
252
+ protected:
253
+ typename internal::ref_selector<SparseMatrixType>::non_const_type m_matrix;
254
+ Index m_outerStart;
255
+ const internal::variable_if_dynamic<Index, OuterSize> m_outerSize;
282
256
  };
283
257
 
284
- } // namespace internal
258
+ } // namespace internal
285
259
 
286
- template<typename _Scalar, int _Options, typename _StorageIndex, int BlockRows, int BlockCols>
287
- class BlockImpl<SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true,Sparse>
288
- : public internal::sparse_matrix_block_impl<SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols>
289
- {
290
- public:
291
- typedef _StorageIndex StorageIndex;
292
- typedef SparseMatrix<_Scalar, _Options, _StorageIndex> SparseMatrixType;
293
- typedef internal::sparse_matrix_block_impl<SparseMatrixType,BlockRows,BlockCols> Base;
294
- inline BlockImpl(SparseMatrixType& xpr, Index i)
295
- : Base(xpr, i)
296
- {}
260
+ template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
261
+ class BlockImpl<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true, Sparse>
262
+ : public internal::sparse_matrix_block_impl<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols> {
263
+ public:
264
+ typedef StorageIndex_ StorageIndex;
265
+ typedef SparseMatrix<Scalar_, Options_, StorageIndex_> SparseMatrixType;
266
+ typedef internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols> Base;
267
+ inline BlockImpl(SparseMatrixType& xpr, Index i) : Base(xpr, i) {}
297
268
 
298
269
  inline BlockImpl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
299
- : Base(xpr, startRow, startCol, blockRows, blockCols)
300
- {}
270
+ : Base(xpr, startRow, startCol, blockRows, blockCols) {}
301
271
 
302
272
  using Base::operator=;
303
273
  };
304
274
 
305
- template<typename _Scalar, int _Options, typename _StorageIndex, int BlockRows, int BlockCols>
306
- class BlockImpl<const SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true,Sparse>
307
- : public internal::sparse_matrix_block_impl<const SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols>
308
- {
309
- public:
310
- typedef _StorageIndex StorageIndex;
311
- typedef const SparseMatrix<_Scalar, _Options, _StorageIndex> SparseMatrixType;
312
- typedef internal::sparse_matrix_block_impl<SparseMatrixType,BlockRows,BlockCols> Base;
313
- inline BlockImpl(SparseMatrixType& xpr, Index i)
314
- : Base(xpr, i)
315
- {}
275
+ template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
276
+ class BlockImpl<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true, Sparse>
277
+ : public internal::sparse_matrix_block_impl<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows,
278
+ BlockCols> {
279
+ public:
280
+ typedef StorageIndex_ StorageIndex;
281
+ typedef const SparseMatrix<Scalar_, Options_, StorageIndex_> SparseMatrixType;
282
+ typedef internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols> Base;
283
+ inline BlockImpl(SparseMatrixType& xpr, Index i) : Base(xpr, i) {}
316
284
 
317
285
  inline BlockImpl(SparseMatrixType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
318
- : Base(xpr, startRow, startCol, blockRows, blockCols)
319
- {}
286
+ : Base(xpr, startRow, startCol, blockRows, blockCols) {}
320
287
 
321
288
  using Base::operator=;
322
- private:
323
- template<typename Derived> BlockImpl(const SparseMatrixBase<Derived>& xpr, Index i);
324
- template<typename Derived> BlockImpl(const SparseMatrixBase<Derived>& xpr);
289
+
290
+ private:
291
+ template <typename Derived>
292
+ BlockImpl(const SparseMatrixBase<Derived>& xpr, Index i);
293
+ template <typename Derived>
294
+ BlockImpl(const SparseMatrixBase<Derived>& xpr);
325
295
  };
326
296
 
327
297
  //----------
328
298
 
329
299
  /** Generic implementation of sparse Block expression.
330
- * Real-only.
331
- */
332
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
333
- class BlockImpl<XprType,BlockRows,BlockCols,InnerPanel,Sparse>
334
- : public SparseMatrixBase<Block<XprType,BlockRows,BlockCols,InnerPanel> >, internal::no_assignment_operator
335
- {
336
- typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
337
- typedef SparseMatrixBase<BlockType> Base;
338
- using Base::convert_index;
339
- public:
340
- enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
341
- EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
342
-
343
- typedef typename internal::remove_all<typename XprType::Nested>::type _MatrixTypeNested;
344
-
345
- /** Column or Row constructor
346
- */
347
- inline BlockImpl(XprType& xpr, Index i)
300
+ * Real-only.
301
+ */
302
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
303
+ class BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Sparse>
304
+ : public SparseMatrixBase<Block<XprType, BlockRows, BlockCols, InnerPanel> >, internal::no_assignment_operator {
305
+ typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
306
+ typedef SparseMatrixBase<BlockType> Base;
307
+ using Base::convert_index;
308
+
309
+ public:
310
+ enum { IsRowMajor = internal::traits<BlockType>::IsRowMajor };
311
+ EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType)
312
+
313
+ typedef internal::remove_all_t<typename XprType::Nested> MatrixTypeNested_;
314
+
315
+ /** Column or Row constructor
316
+ */
317
+ inline BlockImpl(XprType& xpr, Index i)
348
318
  : m_matrix(xpr),
349
- m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? convert_index(i) : 0),
350
- m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? convert_index(i) : 0),
351
- m_blockRows(BlockRows==1 ? 1 : xpr.rows()),
352
- m_blockCols(BlockCols==1 ? 1 : xpr.cols())
353
- {}
354
-
355
- /** Dynamic-size constructor
356
- */
357
- inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
358
- : m_matrix(xpr), m_startRow(convert_index(startRow)), m_startCol(convert_index(startCol)), m_blockRows(convert_index(blockRows)), m_blockCols(convert_index(blockCols))
359
- {}
360
-
361
- inline Index rows() const { return m_blockRows.value(); }
362
- inline Index cols() const { return m_blockCols.value(); }
363
-
364
- inline Scalar& coeffRef(Index row, Index col)
365
- {
366
- return m_matrix.coeffRef(row + m_startRow.value(), col + m_startCol.value());
367
- }
319
+ m_startRow((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) ? convert_index(i) : 0),
320
+ m_startCol((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) ? convert_index(i) : 0),
321
+ m_blockRows(BlockRows == 1 ? 1 : xpr.rows()),
322
+ m_blockCols(BlockCols == 1 ? 1 : xpr.cols()) {}
323
+
324
+ /** Dynamic-size constructor
325
+ */
326
+ inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
327
+ : m_matrix(xpr),
328
+ m_startRow(convert_index(startRow)),
329
+ m_startCol(convert_index(startCol)),
330
+ m_blockRows(convert_index(blockRows)),
331
+ m_blockCols(convert_index(blockCols)) {}
368
332
 
369
- inline const Scalar coeff(Index row, Index col) const
370
- {
371
- return m_matrix.coeff(row + m_startRow.value(), col + m_startCol.value());
372
- }
333
+ inline Index rows() const { return m_blockRows.value(); }
334
+ inline Index cols() const { return m_blockCols.value(); }
373
335
 
374
- inline Scalar& coeffRef(Index index)
375
- {
376
- return m_matrix.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
377
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
378
- }
336
+ inline Scalar& coeffRef(Index row, Index col) {
337
+ return m_matrix.coeffRef(row + m_startRow.value(), col + m_startCol.value());
338
+ }
379
339
 
380
- inline const Scalar coeff(Index index) const
381
- {
382
- return m_matrix.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
383
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
384
- }
340
+ inline const Scalar coeff(Index row, Index col) const {
341
+ return m_matrix.coeff(row + m_startRow.value(), col + m_startCol.value());
342
+ }
385
343
 
386
- inline const XprType& nestedExpression() const { return m_matrix; }
387
- inline XprType& nestedExpression() { return m_matrix; }
388
- Index startRow() const { return m_startRow.value(); }
389
- Index startCol() const { return m_startCol.value(); }
390
- Index blockRows() const { return m_blockRows.value(); }
391
- Index blockCols() const { return m_blockCols.value(); }
392
-
393
- protected:
394
- // friend class internal::GenericSparseBlockInnerIteratorImpl<XprType,BlockRows,BlockCols,InnerPanel>;
395
- friend struct internal::unary_evaluator<Block<XprType,BlockRows,BlockCols,InnerPanel>, internal::IteratorBased, Scalar >;
396
-
397
- Index nonZeros() const { return Dynamic; }
398
-
399
- typename internal::ref_selector<XprType>::non_const_type m_matrix;
400
- const internal::variable_if_dynamic<Index, XprType::RowsAtCompileTime == 1 ? 0 : Dynamic> m_startRow;
401
- const internal::variable_if_dynamic<Index, XprType::ColsAtCompileTime == 1 ? 0 : Dynamic> m_startCol;
402
- const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_blockRows;
403
- const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_blockCols;
404
-
405
- protected:
406
- // Disable assignment with clear error message.
407
- // Note that simply removing operator= yields compilation errors with ICC+MSVC
408
- template<typename T>
409
- BlockImpl& operator=(const T&)
410
- {
411
- EIGEN_STATIC_ASSERT(sizeof(T)==0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
412
- return *this;
413
- }
344
+ inline Scalar& coeffRef(Index index) {
345
+ return m_matrix.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
346
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
347
+ }
348
+
349
+ inline const Scalar coeff(Index index) const {
350
+ return m_matrix.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
351
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
352
+ }
414
353
 
354
+ inline const XprType& nestedExpression() const { return m_matrix; }
355
+ inline XprType& nestedExpression() { return m_matrix; }
356
+ Index startRow() const { return m_startRow.value(); }
357
+ Index startCol() const { return m_startCol.value(); }
358
+ Index blockRows() const { return m_blockRows.value(); }
359
+ Index blockCols() const { return m_blockCols.value(); }
360
+
361
+ protected:
362
+ // friend class internal::GenericSparseBlockInnerIteratorImpl<XprType,BlockRows,BlockCols,InnerPanel>;
363
+ friend struct internal::unary_evaluator<Block<XprType, BlockRows, BlockCols, InnerPanel>, internal::IteratorBased,
364
+ Scalar>;
365
+
366
+ Index nonZeros() const { return Dynamic; }
367
+
368
+ typename internal::ref_selector<XprType>::non_const_type m_matrix;
369
+ const internal::variable_if_dynamic<Index, XprType::RowsAtCompileTime == 1 ? 0 : Dynamic> m_startRow;
370
+ const internal::variable_if_dynamic<Index, XprType::ColsAtCompileTime == 1 ? 0 : Dynamic> m_startCol;
371
+ const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_blockRows;
372
+ const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_blockCols;
373
+
374
+ protected:
375
+ // Disable assignment with clear error message.
376
+ // Note that simply removing operator= yields compilation errors with ICC+MSVC
377
+ template <typename T>
378
+ BlockImpl& operator=(const T&) {
379
+ EIGEN_STATIC_ASSERT(sizeof(T) == 0, THIS_SPARSE_BLOCK_SUBEXPRESSION_IS_READ_ONLY);
380
+ return *this;
381
+ }
415
382
  };
416
383
 
417
384
  namespace internal {
418
385
 
419
- template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
420
- struct unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased >
421
- : public evaluator_base<Block<ArgType,BlockRows,BlockCols,InnerPanel> >
422
- {
423
- class InnerVectorInnerIterator;
424
- class OuterVectorInnerIterator;
425
- public:
426
- typedef Block<ArgType,BlockRows,BlockCols,InnerPanel> XprType;
427
- typedef typename XprType::StorageIndex StorageIndex;
428
- typedef typename XprType::Scalar Scalar;
429
-
430
- enum {
431
- IsRowMajor = XprType::IsRowMajor,
432
-
433
- OuterVector = (BlockCols==1 && ArgType::IsRowMajor)
434
- | // FIXME | instead of || to please GCC 4.4.0 stupid warning "suggest parentheses around &&".
435
- // revert to || as soon as not needed anymore.
436
- (BlockRows==1 && !ArgType::IsRowMajor),
437
-
438
- CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
439
- Flags = XprType::Flags
440
- };
441
-
442
- typedef typename internal::conditional<OuterVector,OuterVectorInnerIterator,InnerVectorInnerIterator>::type InnerIterator;
443
-
444
- explicit unary_evaluator(const XprType& op)
445
- : m_argImpl(op.nestedExpression()), m_block(op)
446
- {}
447
-
448
- inline Index nonZerosEstimate() const {
449
- const Index nnz = m_block.nonZeros();
450
- if(nnz < 0) {
451
- // Scale the non-zero estimate for the underlying expression linearly with block size.
452
- // Return zero if the underlying block is empty.
453
- const Index nested_sz = m_block.nestedExpression().size();
454
- return nested_sz == 0 ? 0 : m_argImpl.nonZerosEstimate() * m_block.size() / nested_sz;
455
- }
456
- return nnz;
386
+ template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
387
+ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>
388
+ : public evaluator_base<Block<ArgType, BlockRows, BlockCols, InnerPanel> > {
389
+ class InnerVectorInnerIterator;
390
+ class OuterVectorInnerIterator;
391
+
392
+ public:
393
+ typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
394
+ typedef typename XprType::StorageIndex StorageIndex;
395
+ typedef typename XprType::Scalar Scalar;
396
+
397
+ enum {
398
+ IsRowMajor = XprType::IsRowMajor,
399
+ OuterVector = (BlockCols == 1 && ArgType::IsRowMajor) || (BlockRows == 1 && !ArgType::IsRowMajor),
400
+ CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
401
+ Flags = XprType::Flags
402
+ };
403
+
404
+ typedef std::conditional_t<OuterVector, OuterVectorInnerIterator, InnerVectorInnerIterator> InnerIterator;
405
+
406
+ explicit unary_evaluator(const XprType& op) : m_argImpl(op.nestedExpression()), m_block(op) {}
407
+
408
+ inline Index nonZerosEstimate() const {
409
+ const Index nnz = m_block.nonZeros();
410
+ if (nnz < 0) {
411
+ // Scale the non-zero estimate for the underlying expression linearly with block size.
412
+ // Return zero if the underlying block is empty.
413
+ const Index nested_sz = m_block.nestedExpression().size();
414
+ return nested_sz == 0 ? 0 : m_argImpl.nonZerosEstimate() * m_block.size() / nested_sz;
457
415
  }
416
+ return nnz;
417
+ }
458
418
 
459
- protected:
460
- typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
419
+ protected:
420
+ typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
461
421
 
462
- evaluator<ArgType> m_argImpl;
463
- const XprType &m_block;
422
+ evaluator<ArgType> m_argImpl;
423
+ const XprType& m_block;
464
424
  };
465
425
 
466
- template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
467
- class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::InnerVectorInnerIterator
468
- : public EvalIterator
469
- {
470
- // NOTE MSVC fails to compile if we don't explicitely "import" IsRowMajor from unary_evaluator
426
+ template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
427
+ class unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>::InnerVectorInnerIterator
428
+ : public EvalIterator {
429
+ // NOTE MSVC fails to compile if we don't explicitly "import" IsRowMajor from unary_evaluator
471
430
  // because the base class EvalIterator has a private IsRowMajor enum too. (bug #1786)
472
431
  // NOTE We cannot call it IsRowMajor because it would shadow unary_evaluator::IsRowMajor
473
432
  enum { XprIsRowMajor = unary_evaluator::IsRowMajor };
474
433
  const XprType& m_block;
475
434
  Index m_end;
476
- public:
477
435
 
436
+ public:
478
437
  EIGEN_STRONG_INLINE InnerVectorInnerIterator(const unary_evaluator& aEval, Index outer)
479
- : EvalIterator(aEval.m_argImpl, outer + (XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol())),
480
- m_block(aEval.m_block),
481
- m_end(XprIsRowMajor ? aEval.m_block.startCol()+aEval.m_block.blockCols() : aEval.m_block.startRow()+aEval.m_block.blockRows())
482
- {
483
- while( (EvalIterator::operator bool()) && (EvalIterator::index() < (XprIsRowMajor ? m_block.startCol() : m_block.startRow())) )
438
+ : EvalIterator(aEval.m_argImpl, outer + (XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol())),
439
+ m_block(aEval.m_block),
440
+ m_end(XprIsRowMajor ? aEval.m_block.startCol() + aEval.m_block.blockCols()
441
+ : aEval.m_block.startRow() + aEval.m_block.blockRows()) {
442
+ while ((EvalIterator::operator bool()) &&
443
+ (EvalIterator::index() < (XprIsRowMajor ? m_block.startCol() : m_block.startRow())))
484
444
  EvalIterator::operator++();
485
445
  }
486
446
 
487
- inline StorageIndex index() const { return EvalIterator::index() - convert_index<StorageIndex>(XprIsRowMajor ? m_block.startCol() : m_block.startRow()); }
488
- inline Index outer() const { return EvalIterator::outer() - (XprIsRowMajor ? m_block.startRow() : m_block.startCol()); }
489
- inline Index row() const { return EvalIterator::row() - m_block.startRow(); }
490
- inline Index col() const { return EvalIterator::col() - m_block.startCol(); }
447
+ inline StorageIndex index() const {
448
+ return EvalIterator::index() - convert_index<StorageIndex>(XprIsRowMajor ? m_block.startCol() : m_block.startRow());
449
+ }
450
+ inline Index outer() const {
451
+ return EvalIterator::outer() - (XprIsRowMajor ? m_block.startRow() : m_block.startCol());
452
+ }
453
+ inline Index row() const { return EvalIterator::row() - m_block.startRow(); }
454
+ inline Index col() const { return EvalIterator::col() - m_block.startCol(); }
491
455
 
492
456
  inline operator bool() const { return EvalIterator::operator bool() && EvalIterator::index() < m_end; }
493
457
  };
494
458
 
495
- template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
496
- class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::OuterVectorInnerIterator
497
- {
459
+ template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel>
460
+ class unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IteratorBased>::OuterVectorInnerIterator {
498
461
  // NOTE see above
499
462
  enum { XprIsRowMajor = unary_evaluator::IsRowMajor };
500
463
  const unary_evaluator& m_eval;
@@ -502,42 +465,42 @@ class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBas
502
465
  const Index m_innerIndex;
503
466
  Index m_end;
504
467
  EvalIterator m_it;
505
- public:
506
468
 
469
+ public:
507
470
  EIGEN_STRONG_INLINE OuterVectorInnerIterator(const unary_evaluator& aEval, Index outer)
508
- : m_eval(aEval),
509
- m_outerPos( (XprIsRowMajor ? aEval.m_block.startCol() : aEval.m_block.startRow()) ),
510
- m_innerIndex(XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol()),
511
- m_end(XprIsRowMajor ? aEval.m_block.startCol()+aEval.m_block.blockCols() : aEval.m_block.startRow()+aEval.m_block.blockRows()),
512
- m_it(m_eval.m_argImpl, m_outerPos)
513
- {
471
+ : m_eval(aEval),
472
+ m_outerPos((XprIsRowMajor ? aEval.m_block.startCol() : aEval.m_block.startRow())),
473
+ m_innerIndex(XprIsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol()),
474
+ m_end(XprIsRowMajor ? aEval.m_block.startCol() + aEval.m_block.blockCols()
475
+ : aEval.m_block.startRow() + aEval.m_block.blockRows()),
476
+ m_it(m_eval.m_argImpl, m_outerPos) {
514
477
  EIGEN_UNUSED_VARIABLE(outer);
515
- eigen_assert(outer==0);
478
+ eigen_assert(outer == 0);
516
479
 
517
- while(m_it && m_it.index() < m_innerIndex) ++m_it;
518
- if((!m_it) || (m_it.index()!=m_innerIndex))
519
- ++(*this);
480
+ while (m_it && m_it.index() < m_innerIndex) ++m_it;
481
+ if ((!m_it) || (m_it.index() != m_innerIndex)) ++(*this);
520
482
  }
521
483
 
522
- inline StorageIndex index() const { return convert_index<StorageIndex>(m_outerPos - (XprIsRowMajor ? m_eval.m_block.startCol() : m_eval.m_block.startRow())); }
523
- inline Index outer() const { return 0; }
524
- inline Index row() const { return XprIsRowMajor ? 0 : index(); }
525
- inline Index col() const { return XprIsRowMajor ? index() : 0; }
484
+ inline StorageIndex index() const {
485
+ return convert_index<StorageIndex>(m_outerPos -
486
+ (XprIsRowMajor ? m_eval.m_block.startCol() : m_eval.m_block.startRow()));
487
+ }
488
+ inline Index outer() const { return 0; }
489
+ inline Index row() const { return XprIsRowMajor ? 0 : index(); }
490
+ inline Index col() const { return XprIsRowMajor ? index() : 0; }
526
491
 
527
492
  inline Scalar value() const { return m_it.value(); }
528
493
  inline Scalar& valueRef() { return m_it.valueRef(); }
529
494
 
530
- inline OuterVectorInnerIterator& operator++()
531
- {
495
+ inline OuterVectorInnerIterator& operator++() {
532
496
  // search next non-zero entry
533
- while(++m_outerPos<m_end)
534
- {
497
+ while (++m_outerPos < m_end) {
535
498
  // Restart iterator at the next inner-vector:
536
- m_it.~EvalIterator();
537
- ::new (&m_it) EvalIterator(m_eval.m_argImpl, m_outerPos);
499
+ internal::destroy_at(&m_it);
500
+ internal::construct_at(&m_it, m_eval.m_argImpl, m_outerPos);
538
501
  // search for the key m_innerIndex in the current outer-vector
539
- while(m_it && m_it.index() < m_innerIndex) ++m_it;
540
- if(m_it && m_it.index()==m_innerIndex) break;
502
+ while (m_it && m_it.index() < m_innerIndex) ++m_it;
503
+ if (m_it && m_it.index() == m_innerIndex) break;
541
504
  }
542
505
  return *this;
543
506
  }
@@ -545,27 +508,27 @@ public:
545
508
  inline operator bool() const { return m_outerPos < m_end; }
546
509
  };
547
510
 
548
- template<typename _Scalar, int _Options, typename _StorageIndex, int BlockRows, int BlockCols>
549
- struct unary_evaluator<Block<SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true>, IteratorBased>
550
- : evaluator<SparseCompressedBase<Block<SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true> > >
551
- {
552
- typedef Block<SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true> XprType;
511
+ template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
512
+ struct unary_evaluator<Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true>, IteratorBased>
513
+ : evaluator<
514
+ SparseCompressedBase<Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> > > {
515
+ typedef Block<SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> XprType;
553
516
  typedef evaluator<SparseCompressedBase<XprType> > Base;
554
- explicit unary_evaluator(const XprType &xpr) : Base(xpr) {}
517
+ explicit unary_evaluator(const XprType& xpr) : Base(xpr) {}
555
518
  };
556
519
 
557
- template<typename _Scalar, int _Options, typename _StorageIndex, int BlockRows, int BlockCols>
558
- struct unary_evaluator<Block<const SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true>, IteratorBased>
559
- : evaluator<SparseCompressedBase<Block<const SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true> > >
560
- {
561
- typedef Block<const SparseMatrix<_Scalar, _Options, _StorageIndex>,BlockRows,BlockCols,true> XprType;
520
+ template <typename Scalar_, int Options_, typename StorageIndex_, int BlockRows, int BlockCols>
521
+ struct unary_evaluator<Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true>,
522
+ IteratorBased>
523
+ : evaluator<SparseCompressedBase<
524
+ Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> > > {
525
+ typedef Block<const SparseMatrix<Scalar_, Options_, StorageIndex_>, BlockRows, BlockCols, true> XprType;
562
526
  typedef evaluator<SparseCompressedBase<XprType> > Base;
563
- explicit unary_evaluator(const XprType &xpr) : Base(xpr) {}
527
+ explicit unary_evaluator(const XprType& xpr) : Base(xpr) {}
564
528
  };
565
529
 
566
- } // end namespace internal
567
-
530
+ } // end namespace internal
568
531
 
569
- } // end namespace Eigen
532
+ } // end namespace Eigen
570
533
 
571
- #endif // EIGEN_SPARSE_BLOCK_H
534
+ #endif // EIGEN_SPARSE_BLOCK_H