@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,194 +10,192 @@
10
10
  #ifndef EIGEN_SPARSE_SELFADJOINTVIEW_H
11
11
  #define EIGEN_SPARSE_SELFADJOINTVIEW_H
12
12
 
13
- namespace Eigen {
14
-
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
17
+
15
18
  /** \ingroup SparseCore_Module
16
- * \class SparseSelfAdjointView
17
- *
18
- * \brief Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
19
- *
20
- * \param MatrixType the type of the dense matrix storing the coefficients
21
- * \param Mode can be either \c #Lower or \c #Upper
22
- *
23
- * This class is an expression of a sefladjoint matrix from a triangular part of a matrix
24
- * with given dense storage of the coefficients. It is the return type of MatrixBase::selfadjointView()
25
- * and most of the time this is the only way that it is used.
26
- *
27
- * \sa SparseMatrixBase::selfadjointView()
28
- */
19
+ * \class SparseSelfAdjointView
20
+ *
21
+ * \brief Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
22
+ *
23
+ * \param MatrixType the type of the dense matrix storing the coefficients
24
+ * \param Mode can be either \c #Lower or \c #Upper
25
+ *
26
+ * This class is an expression of a sefladjoint matrix from a triangular part of a matrix
27
+ * with given dense storage of the coefficients. It is the return type of MatrixBase::selfadjointView()
28
+ * and most of the time this is the only way that it is used.
29
+ *
30
+ * \sa SparseMatrixBase::selfadjointView()
31
+ */
29
32
  namespace internal {
30
-
31
- template<typename MatrixType, unsigned int Mode>
32
- struct traits<SparseSelfAdjointView<MatrixType,Mode> > : traits<MatrixType> {
33
- };
34
33
 
35
- template<int SrcMode,int DstMode,typename MatrixType,int DestOrder>
36
- void permute_symm_to_symm(const MatrixType& mat, SparseMatrix<typename MatrixType::Scalar,DestOrder,typename MatrixType::StorageIndex>& _dest, const typename MatrixType::StorageIndex* perm = 0);
34
+ template <typename MatrixType, unsigned int Mode>
35
+ struct traits<SparseSelfAdjointView<MatrixType, Mode> > : traits<MatrixType> {};
37
36
 
38
- template<int Mode,typename MatrixType,int DestOrder>
39
- void permute_symm_to_fullsymm(const MatrixType& mat, SparseMatrix<typename MatrixType::Scalar,DestOrder,typename MatrixType::StorageIndex>& _dest, const typename MatrixType::StorageIndex* perm = 0);
37
+ template <int SrcMode, int DstMode, bool NonHermitian, typename MatrixType, int DestOrder>
38
+ void permute_symm_to_symm(
39
+ const MatrixType& mat,
40
+ SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
41
+ const typename MatrixType::StorageIndex* perm = 0);
40
42
 
41
- }
43
+ template <int Mode, bool NonHermitian, typename MatrixType, int DestOrder>
44
+ void permute_symm_to_fullsymm(
45
+ const MatrixType& mat,
46
+ SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
47
+ const typename MatrixType::StorageIndex* perm = 0);
42
48
 
43
- template<typename MatrixType, unsigned int _Mode> class SparseSelfAdjointView
44
- : public EigenBase<SparseSelfAdjointView<MatrixType,_Mode> >
45
- {
46
- public:
47
-
48
- enum {
49
- Mode = _Mode,
50
- TransposeMode = ((Mode & Upper) ? Lower : 0) | ((Mode & Lower) ? Upper : 0),
51
- RowsAtCompileTime = internal::traits<SparseSelfAdjointView>::RowsAtCompileTime,
52
- ColsAtCompileTime = internal::traits<SparseSelfAdjointView>::ColsAtCompileTime
53
- };
54
-
55
- typedef EigenBase<SparseSelfAdjointView> Base;
56
- typedef typename MatrixType::Scalar Scalar;
57
- typedef typename MatrixType::StorageIndex StorageIndex;
58
- typedef Matrix<StorageIndex,Dynamic,1> VectorI;
59
- typedef typename internal::ref_selector<MatrixType>::non_const_type MatrixTypeNested;
60
- typedef typename internal::remove_all<MatrixTypeNested>::type _MatrixTypeNested;
61
-
62
- explicit inline SparseSelfAdjointView(MatrixType& matrix) : m_matrix(matrix)
63
- {
64
- eigen_assert(rows()==cols() && "SelfAdjointView is only for squared matrices");
65
- }
49
+ } // namespace internal
66
50
 
67
- inline Index rows() const { return m_matrix.rows(); }
68
- inline Index cols() const { return m_matrix.cols(); }
69
-
70
- /** \internal \returns a reference to the nested matrix */
71
- const _MatrixTypeNested& matrix() const { return m_matrix; }
72
- typename internal::remove_reference<MatrixTypeNested>::type& matrix() { return m_matrix; }
73
-
74
- /** \returns an expression of the matrix product between a sparse self-adjoint matrix \c *this and a sparse matrix \a rhs.
75
- *
76
- * Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix product.
77
- * Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing the product.
78
- */
79
- template<typename OtherDerived>
80
- Product<SparseSelfAdjointView, OtherDerived>
81
- operator*(const SparseMatrixBase<OtherDerived>& rhs) const
82
- {
83
- return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
84
- }
51
+ template <typename MatrixType, unsigned int Mode_>
52
+ class SparseSelfAdjointView : public EigenBase<SparseSelfAdjointView<MatrixType, Mode_> > {
53
+ public:
54
+ enum {
55
+ Mode = Mode_,
56
+ TransposeMode = ((int(Mode) & int(Upper)) ? Lower : 0) | ((int(Mode) & int(Lower)) ? Upper : 0),
57
+ RowsAtCompileTime = internal::traits<SparseSelfAdjointView>::RowsAtCompileTime,
58
+ ColsAtCompileTime = internal::traits<SparseSelfAdjointView>::ColsAtCompileTime
59
+ };
85
60
 
86
- /** \returns an expression of the matrix product between a sparse matrix \a lhs and a sparse self-adjoint matrix \a rhs.
87
- *
88
- * Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix product.
89
- * Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing the product.
90
- */
91
- template<typename OtherDerived> friend
92
- Product<OtherDerived, SparseSelfAdjointView>
93
- operator*(const SparseMatrixBase<OtherDerived>& lhs, const SparseSelfAdjointView& rhs)
94
- {
95
- return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
96
- }
97
-
98
- /** Efficient sparse self-adjoint matrix times dense vector/matrix product */
99
- template<typename OtherDerived>
100
- Product<SparseSelfAdjointView,OtherDerived>
101
- operator*(const MatrixBase<OtherDerived>& rhs) const
102
- {
103
- return Product<SparseSelfAdjointView,OtherDerived>(*this, rhs.derived());
104
- }
61
+ typedef EigenBase<SparseSelfAdjointView> Base;
62
+ typedef typename MatrixType::Scalar Scalar;
63
+ typedef typename MatrixType::StorageIndex StorageIndex;
64
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
65
+ typedef typename internal::ref_selector<MatrixType>::non_const_type MatrixTypeNested;
66
+ typedef internal::remove_all_t<MatrixTypeNested> MatrixTypeNested_;
105
67
 
106
- /** Efficient dense vector/matrix times sparse self-adjoint matrix product */
107
- template<typename OtherDerived> friend
108
- Product<OtherDerived,SparseSelfAdjointView>
109
- operator*(const MatrixBase<OtherDerived>& lhs, const SparseSelfAdjointView& rhs)
110
- {
111
- return Product<OtherDerived,SparseSelfAdjointView>(lhs.derived(), rhs);
112
- }
68
+ explicit inline SparseSelfAdjointView(MatrixType& matrix) : m_matrix(matrix) {
69
+ eigen_assert(rows() == cols() && "SelfAdjointView is only for squared matrices");
70
+ }
113
71
 
114
- /** Perform a symmetric rank K update of the selfadjoint matrix \c *this:
115
- * \f$ this = this + \alpha ( u u^* ) \f$ where \a u is a vector or matrix.
116
- *
117
- * \returns a reference to \c *this
118
- *
119
- * To perform \f$ this = this + \alpha ( u^* u ) \f$ you can simply
120
- * call this function with u.adjoint().
121
- */
122
- template<typename DerivedU>
123
- SparseSelfAdjointView& rankUpdate(const SparseMatrixBase<DerivedU>& u, const Scalar& alpha = Scalar(1));
124
-
125
- /** \returns an expression of P H P^-1 */
126
- // TODO implement twists in a more evaluator friendly fashion
127
- SparseSymmetricPermutationProduct<_MatrixTypeNested,Mode> twistedBy(const PermutationMatrix<Dynamic,Dynamic,StorageIndex>& perm) const
128
- {
129
- return SparseSymmetricPermutationProduct<_MatrixTypeNested,Mode>(m_matrix, perm);
130
- }
72
+ inline Index rows() const { return m_matrix.rows(); }
73
+ inline Index cols() const { return m_matrix.cols(); }
74
+
75
+ /** \internal \returns a reference to the nested matrix */
76
+ const MatrixTypeNested_& matrix() const { return m_matrix; }
77
+ std::remove_reference_t<MatrixTypeNested>& matrix() { return m_matrix; }
78
+
79
+ /** \returns an expression of the matrix product between a sparse self-adjoint matrix \c *this and a sparse matrix \a
80
+ * rhs.
81
+ *
82
+ * Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix
83
+ * product. Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing
84
+ * the product.
85
+ */
86
+ template <typename OtherDerived>
87
+ Product<SparseSelfAdjointView, OtherDerived> operator*(const SparseMatrixBase<OtherDerived>& rhs) const {
88
+ return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
89
+ }
131
90
 
132
- template<typename SrcMatrixType,int SrcMode>
133
- SparseSelfAdjointView& operator=(const SparseSymmetricPermutationProduct<SrcMatrixType,SrcMode>& permutedMatrix)
134
- {
135
- internal::call_assignment_no_alias_no_transpose(*this, permutedMatrix);
136
- return *this;
137
- }
91
+ /** \returns an expression of the matrix product between a sparse matrix \a lhs and a sparse self-adjoint matrix \a
92
+ * rhs.
93
+ *
94
+ * Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix
95
+ * product. Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing
96
+ * the product.
97
+ */
98
+ template <typename OtherDerived>
99
+ friend Product<OtherDerived, SparseSelfAdjointView> operator*(const SparseMatrixBase<OtherDerived>& lhs,
100
+ const SparseSelfAdjointView& rhs) {
101
+ return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
102
+ }
138
103
 
139
- SparseSelfAdjointView& operator=(const SparseSelfAdjointView& src)
140
- {
141
- PermutationMatrix<Dynamic,Dynamic,StorageIndex> pnull;
142
- return *this = src.twistedBy(pnull);
143
- }
104
+ /** Efficient sparse self-adjoint matrix times dense vector/matrix product */
105
+ template <typename OtherDerived>
106
+ Product<SparseSelfAdjointView, OtherDerived> operator*(const MatrixBase<OtherDerived>& rhs) const {
107
+ return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
108
+ }
144
109
 
145
- // Since we override the copy-assignment operator, we need to explicitly re-declare the copy-constructor
146
- EIGEN_DEFAULT_COPY_CONSTRUCTOR(SparseSelfAdjointView)
110
+ /** Efficient dense vector/matrix times sparse self-adjoint matrix product */
111
+ template <typename OtherDerived>
112
+ friend Product<OtherDerived, SparseSelfAdjointView> operator*(const MatrixBase<OtherDerived>& lhs,
113
+ const SparseSelfAdjointView& rhs) {
114
+ return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
115
+ }
147
116
 
148
- template<typename SrcMatrixType,unsigned int SrcMode>
149
- SparseSelfAdjointView& operator=(const SparseSelfAdjointView<SrcMatrixType,SrcMode>& src)
150
- {
151
- PermutationMatrix<Dynamic,Dynamic,StorageIndex> pnull;
152
- return *this = src.twistedBy(pnull);
153
- }
154
-
155
- void resize(Index rows, Index cols)
156
- {
157
- EIGEN_ONLY_USED_FOR_DEBUG(rows);
158
- EIGEN_ONLY_USED_FOR_DEBUG(cols);
159
- eigen_assert(rows == this->rows() && cols == this->cols()
160
- && "SparseSelfadjointView::resize() does not actually allow to resize.");
161
- }
162
-
163
- protected:
164
-
165
- MatrixTypeNested m_matrix;
166
- //mutable VectorI m_countPerRow;
167
- //mutable VectorI m_countPerCol;
168
- private:
169
- template<typename Dest> void evalTo(Dest &) const;
117
+ /** Perform a symmetric rank K update of the selfadjoint matrix \c *this:
118
+ * \f$ this = this + \alpha ( u u^* ) \f$ where \a u is a vector or matrix.
119
+ *
120
+ * \returns a reference to \c *this
121
+ *
122
+ * To perform \f$ this = this + \alpha ( u^* u ) \f$ you can simply
123
+ * call this function with u.adjoint().
124
+ */
125
+ template <typename DerivedU>
126
+ SparseSelfAdjointView& rankUpdate(const SparseMatrixBase<DerivedU>& u, const Scalar& alpha = Scalar(1));
127
+
128
+ /** \returns an expression of P H P^-1 */
129
+ // TODO implement twists in a more evaluator friendly fashion
130
+ SparseSymmetricPermutationProduct<MatrixTypeNested_, Mode> twistedBy(
131
+ const PermutationMatrix<Dynamic, Dynamic, StorageIndex>& perm) const {
132
+ return SparseSymmetricPermutationProduct<MatrixTypeNested_, Mode>(m_matrix, perm);
133
+ }
134
+
135
+ template <typename SrcMatrixType, int SrcMode>
136
+ SparseSelfAdjointView& operator=(const SparseSymmetricPermutationProduct<SrcMatrixType, SrcMode>& permutedMatrix) {
137
+ internal::call_assignment_no_alias_no_transpose(*this, permutedMatrix);
138
+ return *this;
139
+ }
140
+
141
+ SparseSelfAdjointView& operator=(const SparseSelfAdjointView& src) {
142
+ PermutationMatrix<Dynamic, Dynamic, StorageIndex> pnull;
143
+ return *this = src.twistedBy(pnull);
144
+ }
145
+
146
+ // Since we override the copy-assignment operator, we need to explicitly redeclare the copy-constructor
147
+ EIGEN_DEFAULT_COPY_CONSTRUCTOR(SparseSelfAdjointView)
148
+
149
+ template <typename SrcMatrixType, unsigned int SrcMode>
150
+ SparseSelfAdjointView& operator=(const SparseSelfAdjointView<SrcMatrixType, SrcMode>& src) {
151
+ PermutationMatrix<Dynamic, Dynamic, StorageIndex> pnull;
152
+ return *this = src.twistedBy(pnull);
153
+ }
154
+
155
+ void resize(Index rows, Index cols) {
156
+ EIGEN_ONLY_USED_FOR_DEBUG(rows);
157
+ EIGEN_ONLY_USED_FOR_DEBUG(cols);
158
+ eigen_assert(rows == this->rows() && cols == this->cols() &&
159
+ "SparseSelfadjointView::resize() does not actually allow to resize.");
160
+ }
161
+
162
+ protected:
163
+ MatrixTypeNested m_matrix;
164
+ // mutable VectorI m_countPerRow;
165
+ // mutable VectorI m_countPerCol;
166
+ private:
167
+ template <typename Dest>
168
+ void evalTo(Dest&) const;
170
169
  };
171
170
 
172
171
  /***************************************************************************
173
- * Implementation of SparseMatrixBase methods
174
- ***************************************************************************/
172
+ * Implementation of SparseMatrixBase methods
173
+ ***************************************************************************/
175
174
 
176
- template<typename Derived>
177
- template<unsigned int UpLo>
178
- typename SparseMatrixBase<Derived>::template ConstSelfAdjointViewReturnType<UpLo>::Type SparseMatrixBase<Derived>::selfadjointView() const
179
- {
175
+ template <typename Derived>
176
+ template <unsigned int UpLo>
177
+ typename SparseMatrixBase<Derived>::template ConstSelfAdjointViewReturnType<UpLo>::Type
178
+ SparseMatrixBase<Derived>::selfadjointView() const {
180
179
  return SparseSelfAdjointView<const Derived, UpLo>(derived());
181
180
  }
182
181
 
183
- template<typename Derived>
184
- template<unsigned int UpLo>
185
- typename SparseMatrixBase<Derived>::template SelfAdjointViewReturnType<UpLo>::Type SparseMatrixBase<Derived>::selfadjointView()
186
- {
182
+ template <typename Derived>
183
+ template <unsigned int UpLo>
184
+ typename SparseMatrixBase<Derived>::template SelfAdjointViewReturnType<UpLo>::Type
185
+ SparseMatrixBase<Derived>::selfadjointView() {
187
186
  return SparseSelfAdjointView<Derived, UpLo>(derived());
188
187
  }
189
188
 
190
189
  /***************************************************************************
191
- * Implementation of SparseSelfAdjointView methods
192
- ***************************************************************************/
193
-
194
- template<typename MatrixType, unsigned int Mode>
195
- template<typename DerivedU>
196
- SparseSelfAdjointView<MatrixType,Mode>&
197
- SparseSelfAdjointView<MatrixType,Mode>::rankUpdate(const SparseMatrixBase<DerivedU>& u, const Scalar& alpha)
198
- {
199
- SparseMatrix<Scalar,(MatrixType::Flags&RowMajorBit)?RowMajor:ColMajor> tmp = u * u.adjoint();
200
- if(alpha==Scalar(0))
190
+ * Implementation of SparseSelfAdjointView methods
191
+ ***************************************************************************/
192
+
193
+ template <typename MatrixType, unsigned int Mode>
194
+ template <typename DerivedU>
195
+ SparseSelfAdjointView<MatrixType, Mode>& SparseSelfAdjointView<MatrixType, Mode>::rankUpdate(
196
+ const SparseMatrixBase<DerivedU>& u, const Scalar& alpha) {
197
+ SparseMatrix<Scalar, (MatrixType::Flags & RowMajorBit) ? RowMajor : ColMajor> tmp = u * u.adjoint();
198
+ if (alpha == Scalar(0))
201
199
  m_matrix = tmp.template triangularView<Mode>();
202
200
  else
203
201
  m_matrix += alpha * tmp.template triangularView<Mode>();
@@ -206,454 +204,410 @@ SparseSelfAdjointView<MatrixType,Mode>::rankUpdate(const SparseMatrixBase<Derive
206
204
  }
207
205
 
208
206
  namespace internal {
209
-
207
+
210
208
  // TODO currently a selfadjoint expression has the form SelfAdjointView<.,.>
211
209
  // in the future selfadjoint-ness should be defined by the expression traits
212
- // such that Transpose<SelfAdjointView<.,.> > is valid. (currently TriangularBase::transpose() is overloaded to make it work)
213
- template<typename MatrixType, unsigned int Mode>
214
- struct evaluator_traits<SparseSelfAdjointView<MatrixType,Mode> >
215
- {
210
+ // such that Transpose<SelfAdjointView<.,.> > is valid. (currently TriangularBase::transpose() is overloaded to
211
+ // make it work)
212
+ template <typename MatrixType, unsigned int Mode>
213
+ struct evaluator_traits<SparseSelfAdjointView<MatrixType, Mode> > {
216
214
  typedef typename storage_kind_to_evaluator_kind<typename MatrixType::StorageKind>::Kind Kind;
217
215
  typedef SparseSelfAdjointShape Shape;
218
216
  };
219
217
 
220
218
  struct SparseSelfAdjoint2Sparse {};
221
219
 
222
- template<> struct AssignmentKind<SparseShape,SparseSelfAdjointShape> { typedef SparseSelfAdjoint2Sparse Kind; };
223
- template<> struct AssignmentKind<SparseSelfAdjointShape,SparseShape> { typedef Sparse2Sparse Kind; };
220
+ template <>
221
+ struct AssignmentKind<SparseShape, SparseSelfAdjointShape> {
222
+ typedef SparseSelfAdjoint2Sparse Kind;
223
+ };
224
+ template <>
225
+ struct AssignmentKind<SparseSelfAdjointShape, SparseShape> {
226
+ typedef Sparse2Sparse Kind;
227
+ };
224
228
 
225
- template< typename DstXprType, typename SrcXprType, typename Functor>
226
- struct Assignment<DstXprType, SrcXprType, Functor, SparseSelfAdjoint2Sparse>
227
- {
229
+ template <typename DstXprType, typename SrcXprType, typename Functor>
230
+ struct Assignment<DstXprType, SrcXprType, Functor, SparseSelfAdjoint2Sparse> {
228
231
  typedef typename DstXprType::StorageIndex StorageIndex;
229
- typedef internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> AssignOpType;
232
+ typedef internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar> AssignOpType;
230
233
 
231
- template<typename DestScalar,int StorageOrder>
232
- static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex> &dst, const SrcXprType &src, const AssignOpType&/*func*/)
233
- {
234
- internal::permute_symm_to_fullsymm<SrcXprType::Mode>(src.matrix(), dst);
234
+ template <typename DestScalar, int StorageOrder>
235
+ static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
236
+ const AssignOpType& /*func*/) {
237
+ internal::permute_symm_to_fullsymm<SrcXprType::Mode, false>(src.matrix(), dst);
235
238
  }
236
239
 
237
- // FIXME: the handling of += and -= in sparse matrices should be cleanup so that next two overloads could be reduced to:
238
- template<typename DestScalar,int StorageOrder,typename AssignFunc>
239
- static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex> &dst, const SrcXprType &src, const AssignFunc& func)
240
- {
241
- SparseMatrix<DestScalar,StorageOrder,StorageIndex> tmp(src.rows(),src.cols());
240
+ // FIXME: the handling of += and -= in sparse matrices should be cleanup so that next two overloads could be reduced
241
+ // to:
242
+ template <typename DestScalar, int StorageOrder, typename AssignFunc>
243
+ static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
244
+ const AssignFunc& func) {
245
+ SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
242
246
  run(tmp, src, AssignOpType());
243
247
  call_assignment_no_alias_no_transpose(dst, tmp, func);
244
248
  }
245
249
 
246
- template<typename DestScalar,int StorageOrder>
247
- static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex> &dst, const SrcXprType &src,
248
- const internal::add_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar>& /* func */)
249
- {
250
- SparseMatrix<DestScalar,StorageOrder,StorageIndex> tmp(src.rows(),src.cols());
250
+ template <typename DestScalar, int StorageOrder>
251
+ static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
252
+ const internal::add_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /* func */) {
253
+ SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
251
254
  run(tmp, src, AssignOpType());
252
255
  dst += tmp;
253
256
  }
254
257
 
255
- template<typename DestScalar,int StorageOrder>
256
- static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex> &dst, const SrcXprType &src,
257
- const internal::sub_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar>& /* func */)
258
- {
259
- SparseMatrix<DestScalar,StorageOrder,StorageIndex> tmp(src.rows(),src.cols());
258
+ template <typename DestScalar, int StorageOrder>
259
+ static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
260
+ const internal::sub_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /* func */) {
261
+ SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
260
262
  run(tmp, src, AssignOpType());
261
263
  dst -= tmp;
262
264
  }
263
-
264
- template<typename DestScalar>
265
- static void run(DynamicSparseMatrix<DestScalar,ColMajor,StorageIndex>& dst, const SrcXprType &src, const AssignOpType&/*func*/)
266
- {
267
- // TODO directly evaluate into dst;
268
- SparseMatrix<DestScalar,ColMajor,StorageIndex> tmp(dst.rows(),dst.cols());
269
- internal::permute_symm_to_fullsymm<SrcXprType::Mode>(src.matrix(), tmp);
270
- dst = tmp;
271
- }
272
265
  };
273
266
 
274
- } // end namespace internal
267
+ } // end namespace internal
275
268
 
276
269
  /***************************************************************************
277
- * Implementation of sparse self-adjoint time dense matrix
278
- ***************************************************************************/
270
+ * Implementation of sparse self-adjoint time dense matrix
271
+ ***************************************************************************/
279
272
 
280
273
  namespace internal {
281
274
 
282
- template<int Mode, typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
283
- inline void sparse_selfadjoint_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
284
- {
275
+ template <int Mode, typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
276
+ inline void sparse_selfadjoint_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
277
+ const AlphaType& alpha) {
285
278
  EIGEN_ONLY_USED_FOR_DEBUG(alpha);
286
-
287
- typedef typename internal::nested_eval<SparseLhsType,DenseRhsType::MaxColsAtCompileTime>::type SparseLhsTypeNested;
288
- typedef typename internal::remove_all<SparseLhsTypeNested>::type SparseLhsTypeNestedCleaned;
279
+
280
+ typedef typename internal::nested_eval<SparseLhsType, DenseRhsType::MaxColsAtCompileTime>::type SparseLhsTypeNested;
281
+ typedef internal::remove_all_t<SparseLhsTypeNested> SparseLhsTypeNestedCleaned;
289
282
  typedef evaluator<SparseLhsTypeNestedCleaned> LhsEval;
290
283
  typedef typename LhsEval::InnerIterator LhsIterator;
291
284
  typedef typename SparseLhsType::Scalar LhsScalar;
292
-
285
+
293
286
  enum {
294
- LhsIsRowMajor = (LhsEval::Flags&RowMajorBit)==RowMajorBit,
295
- ProcessFirstHalf =
296
- ((Mode&(Upper|Lower))==(Upper|Lower))
297
- || ( (Mode&Upper) && !LhsIsRowMajor)
298
- || ( (Mode&Lower) && LhsIsRowMajor),
287
+ LhsIsRowMajor = (LhsEval::Flags & RowMajorBit) == RowMajorBit,
288
+ ProcessFirstHalf = ((Mode & (Upper | Lower)) == (Upper | Lower)) || ((Mode & Upper) && !LhsIsRowMajor) ||
289
+ ((Mode & Lower) && LhsIsRowMajor),
299
290
  ProcessSecondHalf = !ProcessFirstHalf
300
291
  };
301
-
292
+
302
293
  SparseLhsTypeNested lhs_nested(lhs);
303
294
  LhsEval lhsEval(lhs_nested);
304
295
 
305
296
  // work on one column at once
306
- for (Index k=0; k<rhs.cols(); ++k)
307
- {
308
- for (Index j=0; j<lhs.outerSize(); ++j)
309
- {
310
- LhsIterator i(lhsEval,j);
297
+ for (Index k = 0; k < rhs.cols(); ++k) {
298
+ for (Index j = 0; j < lhs.outerSize(); ++j) {
299
+ LhsIterator i(lhsEval, j);
311
300
  // handle diagonal coeff
312
- if (ProcessSecondHalf)
313
- {
314
- while (i && i.index()<j) ++i;
315
- if(i && i.index()==j)
316
- {
317
- res.coeffRef(j,k) += alpha * i.value() * rhs.coeff(j,k);
301
+ if (ProcessSecondHalf) {
302
+ while (i && i.index() < j) ++i;
303
+ if (i && i.index() == j) {
304
+ res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
318
305
  ++i;
319
306
  }
320
307
  }
321
308
 
322
309
  // premultiplied rhs for scatters
323
- typename ScalarBinaryOpTraits<AlphaType, typename DenseRhsType::Scalar>::ReturnType rhs_j(alpha*rhs(j,k));
310
+ typename ScalarBinaryOpTraits<AlphaType, typename DenseRhsType::Scalar>::ReturnType rhs_j(alpha * rhs(j, k));
324
311
  // accumulator for partial scalar product
325
312
  typename DenseResType::Scalar res_j(0);
326
- for(; (ProcessFirstHalf ? i && i.index() < j : i) ; ++i)
327
- {
313
+ for (; (ProcessFirstHalf ? i && i.index() < j : i); ++i) {
328
314
  LhsScalar lhs_ij = i.value();
329
- if(!LhsIsRowMajor) lhs_ij = numext::conj(lhs_ij);
330
- res_j += lhs_ij * rhs.coeff(i.index(),k);
331
- res(i.index(),k) += numext::conj(lhs_ij) * rhs_j;
315
+ if (!LhsIsRowMajor) lhs_ij = numext::conj(lhs_ij);
316
+ res_j += lhs_ij * rhs.coeff(i.index(), k);
317
+ res(i.index(), k) += numext::conj(lhs_ij) * rhs_j;
332
318
  }
333
- res.coeffRef(j,k) += alpha * res_j;
319
+ res.coeffRef(j, k) += alpha * res_j;
334
320
 
335
321
  // handle diagonal coeff
336
- if (ProcessFirstHalf && i && (i.index()==j))
337
- res.coeffRef(j,k) += alpha * i.value() * rhs.coeff(j,k);
322
+ if (ProcessFirstHalf && i && (i.index() == j)) res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
338
323
  }
339
324
  }
340
325
  }
341
326
 
342
-
343
- template<typename LhsView, typename Rhs, int ProductType>
327
+ template <typename LhsView, typename Rhs, int ProductType>
344
328
  struct generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType>
345
- : generic_product_impl_base<LhsView, Rhs, generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType> >
346
- {
347
- template<typename Dest>
348
- static void scaleAndAddTo(Dest& dst, const LhsView& lhsView, const Rhs& rhs, const typename Dest::Scalar& alpha)
349
- {
350
- typedef typename LhsView::_MatrixTypeNested Lhs;
351
- typedef typename nested_eval<Lhs,Dynamic>::type LhsNested;
352
- typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
329
+ : generic_product_impl_base<LhsView, Rhs,
330
+ generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType> > {
331
+ template <typename Dest>
332
+ static void scaleAndAddTo(Dest& dst, const LhsView& lhsView, const Rhs& rhs, const typename Dest::Scalar& alpha) {
333
+ typedef typename LhsView::MatrixTypeNested_ Lhs;
334
+ typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
335
+ typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
353
336
  LhsNested lhsNested(lhsView.matrix());
354
337
  RhsNested rhsNested(rhs);
355
-
338
+
356
339
  internal::sparse_selfadjoint_time_dense_product<LhsView::Mode>(lhsNested, rhsNested, dst, alpha);
357
340
  }
358
341
  };
359
342
 
360
- template<typename Lhs, typename RhsView, int ProductType>
343
+ template <typename Lhs, typename RhsView, int ProductType>
361
344
  struct generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType>
362
- : generic_product_impl_base<Lhs, RhsView, generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType> >
363
- {
364
- template<typename Dest>
365
- static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const RhsView& rhsView, const typename Dest::Scalar& alpha)
366
- {
367
- typedef typename RhsView::_MatrixTypeNested Rhs;
368
- typedef typename nested_eval<Lhs,Dynamic>::type LhsNested;
369
- typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
345
+ : generic_product_impl_base<Lhs, RhsView,
346
+ generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType> > {
347
+ template <typename Dest>
348
+ static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const RhsView& rhsView, const typename Dest::Scalar& alpha) {
349
+ typedef typename RhsView::MatrixTypeNested_ Rhs;
350
+ typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
351
+ typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
370
352
  LhsNested lhsNested(lhs);
371
353
  RhsNested rhsNested(rhsView.matrix());
372
-
354
+
373
355
  // transpose everything
374
356
  Transpose<Dest> dstT(dst);
375
- internal::sparse_selfadjoint_time_dense_product<RhsView::TransposeMode>(rhsNested.transpose(), lhsNested.transpose(), dstT, alpha);
357
+ internal::sparse_selfadjoint_time_dense_product<RhsView::TransposeMode>(rhsNested.transpose(),
358
+ lhsNested.transpose(), dstT, alpha);
376
359
  }
377
360
  };
378
361
 
379
362
  // NOTE: these two overloads are needed to evaluate the sparse selfadjoint view into a full sparse matrix
380
363
  // TODO: maybe the copy could be handled by generic_product_impl so that these overloads would not be needed anymore
381
364
 
382
- template<typename LhsView, typename Rhs, int ProductTag>
365
+ template <typename LhsView, typename Rhs, int ProductTag>
383
366
  struct product_evaluator<Product<LhsView, Rhs, DefaultProduct>, ProductTag, SparseSelfAdjointShape, SparseShape>
384
- : public evaluator<typename Product<typename Rhs::PlainObject, Rhs, DefaultProduct>::PlainObject>
385
- {
367
+ : public evaluator<typename Product<typename Rhs::PlainObject, Rhs, DefaultProduct>::PlainObject> {
386
368
  typedef Product<LhsView, Rhs, DefaultProduct> XprType;
387
369
  typedef typename XprType::PlainObject PlainObject;
388
370
  typedef evaluator<PlainObject> Base;
389
371
 
390
- product_evaluator(const XprType& xpr)
391
- : m_lhs(xpr.lhs()), m_result(xpr.rows(), xpr.cols())
392
- {
393
- ::new (static_cast<Base*>(this)) Base(m_result);
394
- generic_product_impl<typename Rhs::PlainObject, Rhs, SparseShape, SparseShape, ProductTag>::evalTo(m_result, m_lhs, xpr.rhs());
372
+ product_evaluator(const XprType& xpr) : m_lhs(xpr.lhs()), m_result(xpr.rows(), xpr.cols()) {
373
+ internal::construct_at<Base>(this, m_result);
374
+ generic_product_impl<typename Rhs::PlainObject, Rhs, SparseShape, SparseShape, ProductTag>::evalTo(m_result, m_lhs,
375
+ xpr.rhs());
395
376
  }
396
-
397
- protected:
377
+
378
+ protected:
398
379
  typename Rhs::PlainObject m_lhs;
399
380
  PlainObject m_result;
400
381
  };
401
382
 
402
- template<typename Lhs, typename RhsView, int ProductTag>
383
+ template <typename Lhs, typename RhsView, int ProductTag>
403
384
  struct product_evaluator<Product<Lhs, RhsView, DefaultProduct>, ProductTag, SparseShape, SparseSelfAdjointShape>
404
- : public evaluator<typename Product<Lhs, typename Lhs::PlainObject, DefaultProduct>::PlainObject>
405
- {
385
+ : public evaluator<typename Product<Lhs, typename Lhs::PlainObject, DefaultProduct>::PlainObject> {
406
386
  typedef Product<Lhs, RhsView, DefaultProduct> XprType;
407
387
  typedef typename XprType::PlainObject PlainObject;
408
388
  typedef evaluator<PlainObject> Base;
409
389
 
410
- product_evaluator(const XprType& xpr)
411
- : m_rhs(xpr.rhs()), m_result(xpr.rows(), xpr.cols())
412
- {
390
+ product_evaluator(const XprType& xpr) : m_rhs(xpr.rhs()), m_result(xpr.rows(), xpr.cols()) {
413
391
  ::new (static_cast<Base*>(this)) Base(m_result);
414
- generic_product_impl<Lhs, typename Lhs::PlainObject, SparseShape, SparseShape, ProductTag>::evalTo(m_result, xpr.lhs(), m_rhs);
392
+ generic_product_impl<Lhs, typename Lhs::PlainObject, SparseShape, SparseShape, ProductTag>::evalTo(
393
+ m_result, xpr.lhs(), m_rhs);
415
394
  }
416
-
417
- protected:
395
+
396
+ protected:
418
397
  typename Lhs::PlainObject m_rhs;
419
398
  PlainObject m_result;
420
399
  };
421
400
 
422
- } // namespace internal
401
+ } // namespace internal
423
402
 
424
403
  /***************************************************************************
425
- * Implementation of symmetric copies and permutations
426
- ***************************************************************************/
404
+ * Implementation of symmetric copies and permutations
405
+ ***************************************************************************/
427
406
  namespace internal {
428
407
 
429
- template<int Mode,typename MatrixType,int DestOrder>
430
- void permute_symm_to_fullsymm(const MatrixType& mat, SparseMatrix<typename MatrixType::Scalar,DestOrder,typename MatrixType::StorageIndex>& _dest, const typename MatrixType::StorageIndex* perm)
431
- {
408
+ template <int Mode, bool NonHermitian, typename MatrixType, int DestOrder>
409
+ void permute_symm_to_fullsymm(
410
+ const MatrixType& mat,
411
+ SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
412
+ const typename MatrixType::StorageIndex* perm) {
432
413
  typedef typename MatrixType::StorageIndex StorageIndex;
433
414
  typedef typename MatrixType::Scalar Scalar;
434
- typedef SparseMatrix<Scalar,DestOrder,StorageIndex> Dest;
435
- typedef Matrix<StorageIndex,Dynamic,1> VectorI;
415
+ typedef SparseMatrix<Scalar, DestOrder, StorageIndex> Dest;
416
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
436
417
  typedef evaluator<MatrixType> MatEval;
437
418
  typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
438
-
419
+
439
420
  MatEval matEval(mat);
440
421
  Dest& dest(_dest.derived());
441
- enum {
442
- StorageOrderMatch = int(Dest::IsRowMajor) == int(MatrixType::IsRowMajor)
443
- };
444
-
422
+ enum { StorageOrderMatch = int(Dest::IsRowMajor) == int(MatrixType::IsRowMajor) };
423
+
445
424
  Index size = mat.rows();
446
425
  VectorI count;
447
426
  count.resize(size);
448
427
  count.setZero();
449
- dest.resize(size,size);
450
- for(Index j = 0; j<size; ++j)
451
- {
428
+ dest.resize(size, size);
429
+ for (Index j = 0; j < size; ++j) {
452
430
  Index jp = perm ? perm[j] : j;
453
- for(MatIterator it(matEval,j); it; ++it)
454
- {
431
+ for (MatIterator it(matEval, j); it; ++it) {
455
432
  Index i = it.index();
456
433
  Index r = it.row();
457
434
  Index c = it.col();
458
435
  Index ip = perm ? perm[i] : i;
459
- if(Mode==int(Upper|Lower))
436
+ if (Mode == int(Upper | Lower))
460
437
  count[StorageOrderMatch ? jp : ip]++;
461
- else if(r==c)
438
+ else if (r == c)
462
439
  count[ip]++;
463
- else if(( Mode==Lower && r>c) || ( Mode==Upper && r<c))
464
- {
440
+ else if ((Mode == Lower && r > c) || (Mode == Upper && r < c)) {
465
441
  count[ip]++;
466
442
  count[jp]++;
467
443
  }
468
444
  }
469
445
  }
470
446
  Index nnz = count.sum();
471
-
447
+
472
448
  // reserve space
473
449
  dest.resizeNonZeros(nnz);
474
450
  dest.outerIndexPtr()[0] = 0;
475
- for(Index j=0; j<size; ++j)
476
- dest.outerIndexPtr()[j+1] = dest.outerIndexPtr()[j] + count[j];
477
- for(Index j=0; j<size; ++j)
478
- count[j] = dest.outerIndexPtr()[j];
479
-
451
+ for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
452
+ for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
453
+
480
454
  // copy data
481
- for(StorageIndex j = 0; j<size; ++j)
482
- {
483
- for(MatIterator it(matEval,j); it; ++it)
484
- {
455
+ for (StorageIndex j = 0; j < size; ++j) {
456
+ for (MatIterator it(matEval, j); it; ++it) {
485
457
  StorageIndex i = internal::convert_index<StorageIndex>(it.index());
486
458
  Index r = it.row();
487
459
  Index c = it.col();
488
-
460
+
489
461
  StorageIndex jp = perm ? perm[j] : j;
490
462
  StorageIndex ip = perm ? perm[i] : i;
491
-
492
- if(Mode==int(Upper|Lower))
493
- {
463
+
464
+ if (Mode == int(Upper | Lower)) {
494
465
  Index k = count[StorageOrderMatch ? jp : ip]++;
495
466
  dest.innerIndexPtr()[k] = StorageOrderMatch ? ip : jp;
496
467
  dest.valuePtr()[k] = it.value();
497
- }
498
- else if(r==c)
499
- {
468
+ } else if (r == c) {
500
469
  Index k = count[ip]++;
501
470
  dest.innerIndexPtr()[k] = ip;
502
471
  dest.valuePtr()[k] = it.value();
503
- }
504
- else if(( (Mode&Lower)==Lower && r>c) || ( (Mode&Upper)==Upper && r<c))
505
- {
506
- if(!StorageOrderMatch)
507
- std::swap(ip,jp);
472
+ } else if (((Mode & Lower) == Lower && r > c) || ((Mode & Upper) == Upper && r < c)) {
473
+ if (!StorageOrderMatch) std::swap(ip, jp);
508
474
  Index k = count[jp]++;
509
475
  dest.innerIndexPtr()[k] = ip;
510
476
  dest.valuePtr()[k] = it.value();
511
477
  k = count[ip]++;
512
478
  dest.innerIndexPtr()[k] = jp;
513
- dest.valuePtr()[k] = numext::conj(it.value());
479
+ dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
514
480
  }
515
481
  }
516
482
  }
517
483
  }
518
484
 
519
- template<int _SrcMode,int _DstMode,typename MatrixType,int DstOrder>
520
- void permute_symm_to_symm(const MatrixType& mat, SparseMatrix<typename MatrixType::Scalar,DstOrder,typename MatrixType::StorageIndex>& _dest, const typename MatrixType::StorageIndex* perm)
521
- {
485
+ template <int SrcMode_, int DstMode_, bool NonHermitian, typename MatrixType, int DstOrder>
486
+ void permute_symm_to_symm(const MatrixType& mat,
487
+ SparseMatrix<typename MatrixType::Scalar, DstOrder, typename MatrixType::StorageIndex>& _dest,
488
+ const typename MatrixType::StorageIndex* perm) {
522
489
  typedef typename MatrixType::StorageIndex StorageIndex;
523
490
  typedef typename MatrixType::Scalar Scalar;
524
- SparseMatrix<Scalar,DstOrder,StorageIndex>& dest(_dest.derived());
525
- typedef Matrix<StorageIndex,Dynamic,1> VectorI;
491
+ SparseMatrix<Scalar, DstOrder, StorageIndex>& dest(_dest.derived());
492
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
526
493
  typedef evaluator<MatrixType> MatEval;
527
494
  typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
528
495
 
529
496
  enum {
530
497
  SrcOrder = MatrixType::IsRowMajor ? RowMajor : ColMajor,
531
498
  StorageOrderMatch = int(SrcOrder) == int(DstOrder),
532
- DstMode = DstOrder==RowMajor ? (_DstMode==Upper ? Lower : Upper) : _DstMode,
533
- SrcMode = SrcOrder==RowMajor ? (_SrcMode==Upper ? Lower : Upper) : _SrcMode
499
+ DstMode = DstOrder == RowMajor ? (DstMode_ == Upper ? Lower : Upper) : DstMode_,
500
+ SrcMode = SrcOrder == RowMajor ? (SrcMode_ == Upper ? Lower : Upper) : SrcMode_
534
501
  };
535
502
 
536
503
  MatEval matEval(mat);
537
-
504
+
538
505
  Index size = mat.rows();
539
506
  VectorI count(size);
540
507
  count.setZero();
541
- dest.resize(size,size);
542
- for(StorageIndex j = 0; j<size; ++j)
543
- {
508
+ dest.resize(size, size);
509
+ for (StorageIndex j = 0; j < size; ++j) {
544
510
  StorageIndex jp = perm ? perm[j] : j;
545
- for(MatIterator it(matEval,j); it; ++it)
546
- {
511
+ for (MatIterator it(matEval, j); it; ++it) {
547
512
  StorageIndex i = it.index();
548
- if((int(SrcMode)==int(Lower) && i<j) || (int(SrcMode)==int(Upper) && i>j))
549
- continue;
550
-
513
+ if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
514
+
551
515
  StorageIndex ip = perm ? perm[i] : i;
552
- count[int(DstMode)==int(Lower) ? (std::min)(ip,jp) : (std::max)(ip,jp)]++;
516
+ count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
553
517
  }
554
518
  }
555
519
  dest.outerIndexPtr()[0] = 0;
556
- for(Index j=0; j<size; ++j)
557
- dest.outerIndexPtr()[j+1] = dest.outerIndexPtr()[j] + count[j];
520
+ for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
558
521
  dest.resizeNonZeros(dest.outerIndexPtr()[size]);
559
- for(Index j=0; j<size; ++j)
560
- count[j] = dest.outerIndexPtr()[j];
561
-
562
- for(StorageIndex j = 0; j<size; ++j)
563
- {
564
-
565
- for(MatIterator it(matEval,j); it; ++it)
566
- {
522
+ for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
523
+
524
+ for (StorageIndex j = 0; j < size; ++j) {
525
+ for (MatIterator it(matEval, j); it; ++it) {
567
526
  StorageIndex i = it.index();
568
- if((int(SrcMode)==int(Lower) && i<j) || (int(SrcMode)==int(Upper) && i>j))
569
- continue;
570
-
527
+ if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
528
+
571
529
  StorageIndex jp = perm ? perm[j] : j;
572
- StorageIndex ip = perm? perm[i] : i;
573
-
574
- Index k = count[int(DstMode)==int(Lower) ? (std::min)(ip,jp) : (std::max)(ip,jp)]++;
575
- dest.innerIndexPtr()[k] = int(DstMode)==int(Lower) ? (std::max)(ip,jp) : (std::min)(ip,jp);
576
-
577
- if(!StorageOrderMatch) std::swap(ip,jp);
578
- if( ((int(DstMode)==int(Lower) && ip<jp) || (int(DstMode)==int(Upper) && ip>jp)))
579
- dest.valuePtr()[k] = numext::conj(it.value());
530
+ StorageIndex ip = perm ? perm[i] : i;
531
+
532
+ Index k = count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
533
+ dest.innerIndexPtr()[k] = int(DstMode) == int(Lower) ? (std::max)(ip, jp) : (std::min)(ip, jp);
534
+
535
+ if (!StorageOrderMatch) std::swap(ip, jp);
536
+ if (((int(DstMode) == int(Lower) && ip < jp) || (int(DstMode) == int(Upper) && ip > jp)))
537
+ dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
580
538
  else
581
539
  dest.valuePtr()[k] = it.value();
582
540
  }
583
541
  }
584
542
  }
585
543
 
586
- }
544
+ } // namespace internal
587
545
 
588
546
  // TODO implement twists in a more evaluator friendly fashion
589
547
 
590
548
  namespace internal {
591
549
 
592
- template<typename MatrixType, int Mode>
593
- struct traits<SparseSymmetricPermutationProduct<MatrixType,Mode> > : traits<MatrixType> {
594
- };
550
+ template <typename MatrixType, int Mode>
551
+ struct traits<SparseSymmetricPermutationProduct<MatrixType, Mode> > : traits<MatrixType> {};
595
552
 
596
- }
553
+ } // namespace internal
597
554
 
598
- template<typename MatrixType,int Mode>
599
- class SparseSymmetricPermutationProduct
600
- : public EigenBase<SparseSymmetricPermutationProduct<MatrixType,Mode> >
601
- {
602
- public:
603
- typedef typename MatrixType::Scalar Scalar;
604
- typedef typename MatrixType::StorageIndex StorageIndex;
605
- enum {
606
- RowsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::RowsAtCompileTime,
607
- ColsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::ColsAtCompileTime
608
- };
609
- protected:
610
- typedef PermutationMatrix<Dynamic,Dynamic,StorageIndex> Perm;
611
- public:
612
- typedef Matrix<StorageIndex,Dynamic,1> VectorI;
613
- typedef typename MatrixType::Nested MatrixTypeNested;
614
- typedef typename internal::remove_all<MatrixTypeNested>::type NestedExpression;
615
-
616
- SparseSymmetricPermutationProduct(const MatrixType& mat, const Perm& perm)
617
- : m_matrix(mat), m_perm(perm)
618
- {}
619
-
620
- inline Index rows() const { return m_matrix.rows(); }
621
- inline Index cols() const { return m_matrix.cols(); }
622
-
623
- const NestedExpression& matrix() const { return m_matrix; }
624
- const Perm& perm() const { return m_perm; }
625
-
626
- protected:
627
- MatrixTypeNested m_matrix;
628
- const Perm& m_perm;
555
+ template <typename MatrixType, int Mode>
556
+ class SparseSymmetricPermutationProduct : public EigenBase<SparseSymmetricPermutationProduct<MatrixType, Mode> > {
557
+ public:
558
+ typedef typename MatrixType::Scalar Scalar;
559
+ typedef typename MatrixType::StorageIndex StorageIndex;
560
+ enum {
561
+ RowsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::RowsAtCompileTime,
562
+ ColsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::ColsAtCompileTime
563
+ };
564
+
565
+ protected:
566
+ typedef PermutationMatrix<Dynamic, Dynamic, StorageIndex> Perm;
567
+
568
+ public:
569
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
570
+ typedef typename MatrixType::Nested MatrixTypeNested;
571
+ typedef internal::remove_all_t<MatrixTypeNested> NestedExpression;
572
+
573
+ SparseSymmetricPermutationProduct(const MatrixType& mat, const Perm& perm) : m_matrix(mat), m_perm(perm) {}
629
574
 
575
+ inline Index rows() const { return m_matrix.rows(); }
576
+ inline Index cols() const { return m_matrix.cols(); }
577
+
578
+ const NestedExpression& matrix() const { return m_matrix; }
579
+ const Perm& perm() const { return m_perm; }
580
+
581
+ protected:
582
+ MatrixTypeNested m_matrix;
583
+ const Perm& m_perm;
630
584
  };
631
585
 
632
586
  namespace internal {
633
-
634
- template<typename DstXprType, typename MatrixType, int Mode, typename Scalar>
635
- struct Assignment<DstXprType, SparseSymmetricPermutationProduct<MatrixType,Mode>, internal::assign_op<Scalar,typename MatrixType::Scalar>, Sparse2Sparse>
636
- {
637
- typedef SparseSymmetricPermutationProduct<MatrixType,Mode> SrcXprType;
587
+
588
+ template <typename DstXprType, typename MatrixType, int Mode, typename Scalar>
589
+ struct Assignment<DstXprType, SparseSymmetricPermutationProduct<MatrixType, Mode>,
590
+ internal::assign_op<Scalar, typename MatrixType::Scalar>, Sparse2Sparse> {
591
+ typedef SparseSymmetricPermutationProduct<MatrixType, Mode> SrcXprType;
638
592
  typedef typename DstXprType::StorageIndex DstIndex;
639
- template<int Options>
640
- static void run(SparseMatrix<Scalar,Options,DstIndex> &dst, const SrcXprType &src, const internal::assign_op<Scalar,typename MatrixType::Scalar> &)
641
- {
593
+ template <int Options>
594
+ static void run(SparseMatrix<Scalar, Options, DstIndex>& dst, const SrcXprType& src,
595
+ const internal::assign_op<Scalar, typename MatrixType::Scalar>&) {
642
596
  // internal::permute_symm_to_fullsymm<Mode>(m_matrix,_dest,m_perm.indices().data());
643
- SparseMatrix<Scalar,(Options&RowMajor)==RowMajor ? ColMajor : RowMajor, DstIndex> tmp;
644
- internal::permute_symm_to_fullsymm<Mode>(src.matrix(),tmp,src.perm().indices().data());
597
+ SparseMatrix<Scalar, (Options & RowMajor) == RowMajor ? ColMajor : RowMajor, DstIndex> tmp;
598
+ internal::permute_symm_to_fullsymm<Mode, false>(src.matrix(), tmp, src.perm().indices().data());
645
599
  dst = tmp;
646
600
  }
647
-
648
- template<typename DestType,unsigned int DestMode>
649
- static void run(SparseSelfAdjointView<DestType,DestMode>& dst, const SrcXprType &src, const internal::assign_op<Scalar,typename MatrixType::Scalar> &)
650
- {
651
- internal::permute_symm_to_symm<Mode,DestMode>(src.matrix(),dst.matrix(),src.perm().indices().data());
601
+
602
+ template <typename DestType, unsigned int DestMode>
603
+ static void run(SparseSelfAdjointView<DestType, DestMode>& dst, const SrcXprType& src,
604
+ const internal::assign_op<Scalar, typename MatrixType::Scalar>&) {
605
+ internal::permute_symm_to_symm<Mode, DestMode, false>(src.matrix(), dst.matrix(), src.perm().indices().data());
652
606
  }
653
607
  };
654
608
 
655
- } // end namespace internal
609
+ } // end namespace internal
656
610
 
657
- } // end namespace Eigen
611
+ } // end namespace Eigen
658
612
 
659
- #endif // EIGEN_SPARSE_SELFADJOINTVIEW_H
613
+ #endif // EIGEN_SPARSE_SELFADJOINTVIEW_H