@smake/eigen 1.0.2 → 1.1.0

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 (287) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +26 -0
  4. package/eigen/COPYING.GPL +674 -0
  5. package/eigen/COPYING.LGPL +502 -0
  6. package/eigen/COPYING.MINPACK +51 -0
  7. package/eigen/COPYING.MPL2 +373 -0
  8. package/eigen/COPYING.README +18 -0
  9. package/eigen/Eigen/Cholesky +0 -1
  10. package/eigen/Eigen/Core +108 -266
  11. package/eigen/Eigen/Eigenvalues +0 -1
  12. package/eigen/Eigen/Geometry +3 -6
  13. package/eigen/Eigen/Householder +0 -1
  14. package/eigen/Eigen/Jacobi +0 -1
  15. package/eigen/Eigen/KLUSupport +41 -0
  16. package/eigen/Eigen/LU +2 -5
  17. package/eigen/Eigen/OrderingMethods +0 -3
  18. package/eigen/Eigen/PaStiXSupport +1 -0
  19. package/eigen/Eigen/PardisoSupport +0 -0
  20. package/eigen/Eigen/QR +0 -1
  21. package/eigen/Eigen/QtAlignedMalloc +0 -1
  22. package/eigen/Eigen/SVD +0 -1
  23. package/eigen/Eigen/Sparse +0 -2
  24. package/eigen/Eigen/SparseCholesky +0 -8
  25. package/eigen/Eigen/SparseLU +4 -0
  26. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  27. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  28. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  29. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  30. package/eigen/Eigen/src/Core/Array.h +99 -11
  31. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  32. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  33. package/eigen/Eigen/src/Core/Assign.h +1 -1
  34. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  35. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  36. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  37. package/eigen/Eigen/src/Core/Block.h +56 -60
  38. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  39. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  40. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  41. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  42. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  43. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  44. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  45. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  46. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  47. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  48. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  49. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  50. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  51. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  52. package/eigen/Eigen/src/Core/Dot.h +10 -10
  53. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  54. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  55. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  56. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  57. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  58. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  59. package/eigen/Eigen/src/Core/IO.h +40 -7
  60. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  61. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  62. package/eigen/Eigen/src/Core/Map.h +7 -7
  63. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  64. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  65. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  66. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  67. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  68. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  69. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  70. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  71. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  72. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  73. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  74. package/eigen/Eigen/src/Core/Product.h +30 -25
  75. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  76. package/eigen/Eigen/src/Core/Random.h +37 -1
  77. package/eigen/Eigen/src/Core/Redux.h +180 -170
  78. package/eigen/Eigen/src/Core/Ref.h +118 -21
  79. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  80. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  81. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  82. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  83. package/eigen/Eigen/src/Core/Select.h +8 -6
  84. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  85. package/eigen/Eigen/src/Core/Solve.h +14 -14
  86. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  87. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  88. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  89. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  90. package/eigen/Eigen/src/Core/Stride.h +9 -4
  91. package/eigen/Eigen/src/Core/Swap.h +5 -4
  92. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  93. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  94. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  95. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  96. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  97. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  98. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  99. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  100. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  101. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  102. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  103. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  104. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  105. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  107. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  108. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  109. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  110. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  111. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  112. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  113. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  114. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  115. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  116. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  117. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  118. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  119. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  120. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  121. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  122. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  123. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  124. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  125. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  126. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  127. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  128. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  129. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  130. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  131. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  132. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  133. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  134. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  135. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  136. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  137. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  138. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  140. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  141. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  142. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  143. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  144. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  145. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  146. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  147. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  148. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  149. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  150. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  151. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  152. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  153. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  154. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  155. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  156. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  157. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  158. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  159. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  160. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  161. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  162. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  163. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  164. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  165. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  166. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  167. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  168. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  169. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  170. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  171. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  172. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  173. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  174. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  175. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  176. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  177. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  178. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  179. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  180. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  181. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  182. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  183. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  184. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  185. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  186. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  187. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  188. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  189. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  190. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  191. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  192. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  193. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  194. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  195. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  196. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  197. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  198. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  199. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  200. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  201. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  202. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  203. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  204. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  205. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  206. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  207. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  208. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  209. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  210. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  211. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  212. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  213. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  214. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  215. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  216. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  217. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  218. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  219. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  220. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  221. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  222. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  223. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  224. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  225. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  226. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  227. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  228. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  229. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  230. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  231. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  232. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  233. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  234. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  235. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  236. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  237. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  238. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  239. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  240. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  241. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  242. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  243. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  244. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  245. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  246. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  247. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  248. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  249. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  250. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  251. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  252. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  253. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  254. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  255. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  256. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  257. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  258. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  259. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  260. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  261. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  262. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  263. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  264. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  265. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  266. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  267. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  268. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  269. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  270. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  271. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  272. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  273. package/eigen/README.md +5 -0
  274. package/lib/LibEigen.d.ts +4 -0
  275. package/lib/LibEigen.js +14 -0
  276. package/lib/index.d.ts +1 -1
  277. package/lib/index.js +7 -3
  278. package/package.json +2 -10
  279. package/eigen/Eigen/CMakeLists.txt +0 -19
  280. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  281. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  282. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  283. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  284. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  285. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  286. package/lib/eigen.d.ts +0 -2
  287. package/lib/eigen.js +0 -15
@@ -23,6 +23,8 @@
23
23
  // Ordering interface
24
24
  #include "OrderingMethods"
25
25
 
26
+ #include "src/Core/util/DisableStupidWarnings.h"
27
+
26
28
  #include "src/SparseLU/SparseLU_gemm_kernel.h"
27
29
 
28
30
  #include "src/SparseLU/SparseLU_Structs.h"
@@ -43,4 +45,6 @@
43
45
  #include "src/SparseLU/SparseLU_Utils.h"
44
46
  #include "src/SparseLU/SparseLU.h"
45
47
 
48
+ #include "src/Core/util/ReenableStupidWarnings.h"
49
+
46
50
  #endif // EIGEN_SPARSELU_MODULE_H
@@ -16,6 +16,15 @@
16
16
  namespace Eigen {
17
17
 
18
18
  namespace internal {
19
+ template<typename _MatrixType, int _UpLo> struct traits<LDLT<_MatrixType, _UpLo> >
20
+ : traits<_MatrixType>
21
+ {
22
+ typedef MatrixXpr XprKind;
23
+ typedef SolverStorage StorageKind;
24
+ typedef int StorageIndex;
25
+ enum { Flags = 0 };
26
+ };
27
+
19
28
  template<typename MatrixType, int UpLo> struct LDLT_Traits;
20
29
 
21
30
  // PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef
@@ -36,7 +45,7 @@ namespace internal {
36
45
  * matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L
37
46
  * is lower triangular with a unit diagonal and D is a diagonal matrix.
38
47
  *
39
- * The decomposition uses pivoting to ensure stability, so that L will have
48
+ * The decomposition uses pivoting to ensure stability, so that D will have
40
49
  * zeros in the bottom right rank(A) - n submatrix. Avoiding the square root
41
50
  * on D also stabilizes the computation.
42
51
  *
@@ -44,24 +53,23 @@ namespace internal {
44
53
  * decomposition to determine whether a system of equations has a solution.
45
54
  *
46
55
  * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
47
- *
56
+ *
48
57
  * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT
49
58
  */
50
59
  template<typename _MatrixType, int _UpLo> class LDLT
60
+ : public SolverBase<LDLT<_MatrixType, _UpLo> >
51
61
  {
52
62
  public:
53
63
  typedef _MatrixType MatrixType;
64
+ typedef SolverBase<LDLT> Base;
65
+ friend class SolverBase<LDLT>;
66
+
67
+ EIGEN_GENERIC_PUBLIC_INTERFACE(LDLT)
54
68
  enum {
55
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
56
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
57
69
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
58
70
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
59
71
  UpLo = _UpLo
60
72
  };
61
- typedef typename MatrixType::Scalar Scalar;
62
- typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
63
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
64
- typedef typename MatrixType::StorageIndex StorageIndex;
65
73
  typedef Matrix<Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1> TmpMatrixType;
66
74
 
67
75
  typedef Transpositions<RowsAtCompileTime, MaxRowsAtCompileTime> TranspositionType;
@@ -180,6 +188,7 @@ template<typename _MatrixType, int _UpLo> class LDLT
180
188
  return m_sign == internal::NegativeSemiDef || m_sign == internal::ZeroSign;
181
189
  }
182
190
 
191
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
183
192
  /** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A.
184
193
  *
185
194
  * This function also supports in-place solves using the syntax <tt>x = decompositionObject.solve(x)</tt> .
@@ -191,19 +200,14 @@ template<typename _MatrixType, int _UpLo> class LDLT
191
200
  * \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then
192
201
  * \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the
193
202
  * least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function
194
- * computes the least-square solution of \f$ A x = b \f$ is \f$ A \f$ is singular.
203
+ * computes the least-square solution of \f$ A x = b \f$ if \f$ A \f$ is singular.
195
204
  *
196
205
  * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
197
206
  */
198
207
  template<typename Rhs>
199
208
  inline const Solve<LDLT, Rhs>
200
- solve(const MatrixBase<Rhs>& b) const
201
- {
202
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
203
- eigen_assert(m_matrix.rows()==b.rows()
204
- && "LDLT::solve(): invalid number of rows of the right hand side matrix b");
205
- return Solve<LDLT, Rhs>(*this, b.derived());
206
- }
209
+ solve(const MatrixBase<Rhs>& b) const;
210
+ #endif
207
211
 
208
212
  template<typename Derived>
209
213
  bool solveInPlace(MatrixBase<Derived> &bAndX) const;
@@ -242,12 +246,12 @@ template<typename _MatrixType, int _UpLo> class LDLT
242
246
  */
243
247
  const LDLT& adjoint() const { return *this; };
244
248
 
245
- inline Index rows() const { return m_matrix.rows(); }
246
- inline Index cols() const { return m_matrix.cols(); }
249
+ EIGEN_DEVICE_FUNC inline EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
250
+ EIGEN_DEVICE_FUNC inline EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
247
251
 
248
252
  /** \brief Reports whether previous computation was successful.
249
253
  *
250
- * \returns \c Success if computation was succesful,
254
+ * \returns \c Success if computation was successful,
251
255
  * \c NumericalIssue if the factorization failed because of a zero pivot.
252
256
  */
253
257
  ComputationInfo info() const
@@ -258,8 +262,10 @@ template<typename _MatrixType, int _UpLo> class LDLT
258
262
 
259
263
  #ifndef EIGEN_PARSED_BY_DOXYGEN
260
264
  template<typename RhsType, typename DstType>
261
- EIGEN_DEVICE_FUNC
262
265
  void _solve_impl(const RhsType &rhs, DstType &dst) const;
266
+
267
+ template<bool Conjugate, typename RhsType, typename DstType>
268
+ void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
263
269
  #endif
264
270
 
265
271
  protected:
@@ -560,14 +566,22 @@ template<typename _MatrixType, int _UpLo>
560
566
  template<typename RhsType, typename DstType>
561
567
  void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
562
568
  {
563
- eigen_assert(rhs.rows() == rows());
569
+ _solve_impl_transposed<true>(rhs, dst);
570
+ }
571
+
572
+ template<typename _MatrixType,int _UpLo>
573
+ template<bool Conjugate, typename RhsType, typename DstType>
574
+ void LDLT<_MatrixType,_UpLo>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
575
+ {
564
576
  // dst = P b
565
577
  dst = m_transpositions * rhs;
566
578
 
567
579
  // dst = L^-1 (P b)
568
- matrixL().solveInPlace(dst);
580
+ // dst = L^-*T (P b)
581
+ matrixL().template conjugateIf<!Conjugate>().solveInPlace(dst);
569
582
 
570
- // dst = D^-1 (L^-1 P b)
583
+ // dst = D^-* (L^-1 P b)
584
+ // dst = D^-1 (L^-*T P b)
571
585
  // more precisely, use pseudo-inverse of D (see bug 241)
572
586
  using std::abs;
573
587
  const typename Diagonal<const MatrixType>::RealReturnType vecD(vectorD());
@@ -579,7 +593,6 @@ void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) cons
579
593
  // Moreover, Lapack's xSYTRS routines use 0 for the tolerance.
580
594
  // Using numeric_limits::min() gives us more robustness to denormals.
581
595
  RealScalar tolerance = (std::numeric_limits<RealScalar>::min)();
582
-
583
596
  for (Index i = 0; i < vecD.size(); ++i)
584
597
  {
585
598
  if(abs(vecD(i)) > tolerance)
@@ -588,10 +601,12 @@ void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) cons
588
601
  dst.row(i).setZero();
589
602
  }
590
603
 
591
- // dst = L^-T (D^-1 L^-1 P b)
592
- matrixU().solveInPlace(dst);
604
+ // dst = L^-* (D^-* L^-1 P b)
605
+ // dst = L^-T (D^-1 L^-*T P b)
606
+ matrixL().transpose().template conjugateIf<Conjugate>().solveInPlace(dst);
593
607
 
594
- // dst = P^-1 (L^-T D^-1 L^-1 P b) = A^-1 b
608
+ // dst = P^T (L^-* D^-* L^-1 P b) = A^-1 b
609
+ // dst = P^-T (L^-T D^-1 L^-*T P b) = A^-1 b
595
610
  dst = m_transpositions.transpose() * dst;
596
611
  }
597
612
  #endif
@@ -13,6 +13,16 @@
13
13
  namespace Eigen {
14
14
 
15
15
  namespace internal{
16
+
17
+ template<typename _MatrixType, int _UpLo> struct traits<LLT<_MatrixType, _UpLo> >
18
+ : traits<_MatrixType>
19
+ {
20
+ typedef MatrixXpr XprKind;
21
+ typedef SolverStorage StorageKind;
22
+ typedef int StorageIndex;
23
+ enum { Flags = 0 };
24
+ };
25
+
16
26
  template<typename MatrixType, int UpLo> struct LLT_Traits;
17
27
  }
18
28
 
@@ -54,18 +64,17 @@ template<typename MatrixType, int UpLo> struct LLT_Traits;
54
64
  * \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
55
65
  */
56
66
  template<typename _MatrixType, int _UpLo> class LLT
67
+ : public SolverBase<LLT<_MatrixType, _UpLo> >
57
68
  {
58
69
  public:
59
70
  typedef _MatrixType MatrixType;
71
+ typedef SolverBase<LLT> Base;
72
+ friend class SolverBase<LLT>;
73
+
74
+ EIGEN_GENERIC_PUBLIC_INTERFACE(LLT)
60
75
  enum {
61
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
62
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
63
76
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
64
77
  };
65
- typedef typename MatrixType::Scalar Scalar;
66
- typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
67
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
68
- typedef typename MatrixType::StorageIndex StorageIndex;
69
78
 
70
79
  enum {
71
80
  PacketSize = internal::packet_traits<Scalar>::size,
@@ -100,7 +109,7 @@ template<typename _MatrixType, int _UpLo> class LLT
100
109
  compute(matrix.derived());
101
110
  }
102
111
 
103
- /** \brief Constructs a LDLT factorization from a given matrix
112
+ /** \brief Constructs a LLT factorization from a given matrix
104
113
  *
105
114
  * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
106
115
  * \c MatrixType is a Eigen::Ref.
@@ -129,6 +138,7 @@ template<typename _MatrixType, int _UpLo> class LLT
129
138
  return Traits::getL(m_matrix);
130
139
  }
131
140
 
141
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
132
142
  /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
133
143
  *
134
144
  * Since this LLT class assumes anyway that the matrix A is invertible, the solution
@@ -141,13 +151,8 @@ template<typename _MatrixType, int _UpLo> class LLT
141
151
  */
142
152
  template<typename Rhs>
143
153
  inline const Solve<LLT, Rhs>
144
- solve(const MatrixBase<Rhs>& b) const
145
- {
146
- eigen_assert(m_isInitialized && "LLT is not initialized.");
147
- eigen_assert(m_matrix.rows()==b.rows()
148
- && "LLT::solve(): invalid number of rows of the right hand side matrix b");
149
- return Solve<LLT, Rhs>(*this, b.derived());
150
- }
154
+ solve(const MatrixBase<Rhs>& b) const;
155
+ #endif
151
156
 
152
157
  template<typename Derived>
153
158
  void solveInPlace(const MatrixBase<Derived> &bAndX) const;
@@ -180,7 +185,7 @@ template<typename _MatrixType, int _UpLo> class LLT
180
185
 
181
186
  /** \brief Reports whether previous computation was successful.
182
187
  *
183
- * \returns \c Success if computation was succesful,
188
+ * \returns \c Success if computation was successful,
184
189
  * \c NumericalIssue if the matrix.appears not to be positive definite.
185
190
  */
186
191
  ComputationInfo info() const
@@ -194,18 +199,20 @@ template<typename _MatrixType, int _UpLo> class LLT
194
199
  * This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
195
200
  * \code x = decomposition.adjoint().solve(b) \endcode
196
201
  */
197
- const LLT& adjoint() const { return *this; };
202
+ const LLT& adjoint() const EIGEN_NOEXCEPT { return *this; };
198
203
 
199
- inline Index rows() const { return m_matrix.rows(); }
200
- inline Index cols() const { return m_matrix.cols(); }
204
+ inline EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
205
+ inline EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
201
206
 
202
207
  template<typename VectorType>
203
- LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
208
+ LLT & rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
204
209
 
205
210
  #ifndef EIGEN_PARSED_BY_DOXYGEN
206
211
  template<typename RhsType, typename DstType>
207
- EIGEN_DEVICE_FUNC
208
212
  void _solve_impl(const RhsType &rhs, DstType &dst) const;
213
+
214
+ template<bool Conjugate, typename RhsType, typename DstType>
215
+ void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
209
216
  #endif
210
217
 
211
218
  protected:
@@ -459,7 +466,7 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
459
466
  */
460
467
  template<typename _MatrixType, int _UpLo>
461
468
  template<typename VectorType>
462
- LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
469
+ LLT<_MatrixType,_UpLo> & LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
463
470
  {
464
471
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
465
472
  eigen_assert(v.size()==m_matrix.cols());
@@ -477,8 +484,17 @@ template<typename _MatrixType,int _UpLo>
477
484
  template<typename RhsType, typename DstType>
478
485
  void LLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
479
486
  {
480
- dst = rhs;
481
- solveInPlace(dst);
487
+ _solve_impl_transposed<true>(rhs, dst);
488
+ }
489
+
490
+ template<typename _MatrixType,int _UpLo>
491
+ template<bool Conjugate, typename RhsType, typename DstType>
492
+ void LLT<_MatrixType,_UpLo>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
493
+ {
494
+ dst = rhs;
495
+
496
+ matrixL().template conjugateIf<!Conjugate>().solveInPlace(dst);
497
+ matrixU().template conjugateIf<!Conjugate>().solveInPlace(dst);
482
498
  }
483
499
  #endif
484
500
 
@@ -10,7 +10,7 @@
10
10
  #ifndef EIGEN_CHOLMODSUPPORT_H
11
11
  #define EIGEN_CHOLMODSUPPORT_H
12
12
 
13
- namespace Eigen {
13
+ namespace Eigen {
14
14
 
15
15
  namespace internal {
16
16
 
@@ -32,7 +32,7 @@ template<> struct cholmod_configure_matrix<std::complex<double> > {
32
32
  }
33
33
  };
34
34
 
35
- // Other scalar types are not yet suppotred by Cholmod
35
+ // Other scalar types are not yet supported by Cholmod
36
36
  // template<> struct cholmod_configure_matrix<float> {
37
37
  // template<typename CholmodType>
38
38
  // static void run(CholmodType& mat) {
@@ -79,12 +79,12 @@ cholmod_sparse viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_StorageIndex> >
79
79
 
80
80
  res.dtype = 0;
81
81
  res.stype = -1;
82
-
82
+
83
83
  if (internal::is_same<_StorageIndex,int>::value)
84
84
  {
85
85
  res.itype = CHOLMOD_INT;
86
86
  }
87
- else if (internal::is_same<_StorageIndex,long>::value)
87
+ else if (internal::is_same<_StorageIndex,SuiteSparse_long>::value)
88
88
  {
89
89
  res.itype = CHOLMOD_LONG;
90
90
  }
@@ -95,9 +95,9 @@ cholmod_sparse viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_StorageIndex> >
95
95
 
96
96
  // setup res.xtype
97
97
  internal::cholmod_configure_matrix<_Scalar>::run(res);
98
-
98
+
99
99
  res.stype = 0;
100
-
100
+
101
101
  return res;
102
102
  }
103
103
 
@@ -121,9 +121,12 @@ template<typename _Scalar, int _Options, typename _Index, unsigned int UpLo>
121
121
  cholmod_sparse viewAsCholmod(const SparseSelfAdjointView<const SparseMatrix<_Scalar,_Options,_Index>, UpLo>& mat)
122
122
  {
123
123
  cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.matrix().const_cast_derived()));
124
-
124
+
125
125
  if(UpLo==Upper) res.stype = 1;
126
126
  if(UpLo==Lower) res.stype = -1;
127
+ // swap stype for rowmajor matrices (only works for real matrices)
128
+ EIGEN_STATIC_ASSERT((_Options & RowMajorBit) == 0 || NumTraits<_Scalar>::IsComplex == 0, THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
129
+ if(_Options & RowMajorBit) res.stype *=-1;
127
130
 
128
131
  return res;
129
132
  }
@@ -159,6 +162,44 @@ MappedSparseMatrix<Scalar,Flags,StorageIndex> viewAsEigen(cholmod_sparse& cm)
159
162
  static_cast<StorageIndex*>(cm.p), static_cast<StorageIndex*>(cm.i),static_cast<Scalar*>(cm.x) );
160
163
  }
161
164
 
165
+ namespace internal {
166
+
167
+ // template specializations for int and long that call the correct cholmod method
168
+
169
+ #define EIGEN_CHOLMOD_SPECIALIZE0(ret, name) \
170
+ template<typename _StorageIndex> inline ret cm_ ## name (cholmod_common &Common) { return cholmod_ ## name (&Common); } \
171
+ template<> inline ret cm_ ## name<SuiteSparse_long> (cholmod_common &Common) { return cholmod_l_ ## name (&Common); }
172
+
173
+ #define EIGEN_CHOLMOD_SPECIALIZE1(ret, name, t1, a1) \
174
+ template<typename _StorageIndex> inline ret cm_ ## name (t1& a1, cholmod_common &Common) { return cholmod_ ## name (&a1, &Common); } \
175
+ template<> inline ret cm_ ## name<SuiteSparse_long> (t1& a1, cholmod_common &Common) { return cholmod_l_ ## name (&a1, &Common); }
176
+
177
+ EIGEN_CHOLMOD_SPECIALIZE0(int, start)
178
+ EIGEN_CHOLMOD_SPECIALIZE0(int, finish)
179
+
180
+ EIGEN_CHOLMOD_SPECIALIZE1(int, free_factor, cholmod_factor*, L)
181
+ EIGEN_CHOLMOD_SPECIALIZE1(int, free_dense, cholmod_dense*, X)
182
+ EIGEN_CHOLMOD_SPECIALIZE1(int, free_sparse, cholmod_sparse*, A)
183
+
184
+ EIGEN_CHOLMOD_SPECIALIZE1(cholmod_factor*, analyze, cholmod_sparse, A)
185
+
186
+ template<typename _StorageIndex> inline cholmod_dense* cm_solve (int sys, cholmod_factor& L, cholmod_dense& B, cholmod_common &Common) { return cholmod_solve (sys, &L, &B, &Common); }
187
+ template<> inline cholmod_dense* cm_solve<SuiteSparse_long> (int sys, cholmod_factor& L, cholmod_dense& B, cholmod_common &Common) { return cholmod_l_solve (sys, &L, &B, &Common); }
188
+
189
+ template<typename _StorageIndex> inline cholmod_sparse* cm_spsolve (int sys, cholmod_factor& L, cholmod_sparse& B, cholmod_common &Common) { return cholmod_spsolve (sys, &L, &B, &Common); }
190
+ template<> inline cholmod_sparse* cm_spsolve<SuiteSparse_long> (int sys, cholmod_factor& L, cholmod_sparse& B, cholmod_common &Common) { return cholmod_l_spsolve (sys, &L, &B, &Common); }
191
+
192
+ template<typename _StorageIndex>
193
+ inline int cm_factorize_p (cholmod_sparse* A, double beta[2], _StorageIndex* fset, std::size_t fsize, cholmod_factor* L, cholmod_common &Common) { return cholmod_factorize_p (A, beta, fset, fsize, L, &Common); }
194
+ template<>
195
+ inline int cm_factorize_p<SuiteSparse_long> (cholmod_sparse* A, double beta[2], SuiteSparse_long* fset, std::size_t fsize, cholmod_factor* L, cholmod_common &Common) { return cholmod_l_factorize_p (A, beta, fset, fsize, L, &Common); }
196
+
197
+ #undef EIGEN_CHOLMOD_SPECIALIZE0
198
+ #undef EIGEN_CHOLMOD_SPECIALIZE1
199
+
200
+ } // namespace internal
201
+
202
+
162
203
  enum CholmodMode {
163
204
  CholmodAuto, CholmodSimplicialLLt, CholmodSupernodalLLt, CholmodLDLt
164
205
  };
@@ -195,7 +236,7 @@ class CholmodBase : public SparseSolverBase<Derived>
195
236
  {
196
237
  EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
197
238
  m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
198
- cholmod_start(&m_cholmod);
239
+ internal::cm_start<StorageIndex>(m_cholmod);
199
240
  }
200
241
 
201
242
  explicit CholmodBase(const MatrixType& matrix)
@@ -203,23 +244,23 @@ class CholmodBase : public SparseSolverBase<Derived>
203
244
  {
204
245
  EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
205
246
  m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
206
- cholmod_start(&m_cholmod);
247
+ internal::cm_start<StorageIndex>(m_cholmod);
207
248
  compute(matrix);
208
249
  }
209
250
 
210
251
  ~CholmodBase()
211
252
  {
212
253
  if(m_cholmodFactor)
213
- cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
214
- cholmod_finish(&m_cholmod);
254
+ internal::cm_free_factor<StorageIndex>(m_cholmodFactor, m_cholmod);
255
+ internal::cm_finish<StorageIndex>(m_cholmod);
215
256
  }
216
-
257
+
217
258
  inline StorageIndex cols() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
218
259
  inline StorageIndex rows() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
219
-
260
+
220
261
  /** \brief Reports whether previous computation was successful.
221
262
  *
222
- * \returns \c Success if computation was succesful,
263
+ * \returns \c Success if computation was successful,
223
264
  * \c NumericalIssue if the matrix.appears to be negative.
224
265
  */
225
266
  ComputationInfo info() const
@@ -235,29 +276,29 @@ class CholmodBase : public SparseSolverBase<Derived>
235
276
  factorize(matrix);
236
277
  return derived();
237
278
  }
238
-
279
+
239
280
  /** Performs a symbolic decomposition on the sparsity pattern of \a matrix.
240
281
  *
241
282
  * This function is particularly useful when solving for several problems having the same structure.
242
- *
283
+ *
243
284
  * \sa factorize()
244
285
  */
245
286
  void analyzePattern(const MatrixType& matrix)
246
287
  {
247
288
  if(m_cholmodFactor)
248
289
  {
249
- cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
290
+ internal::cm_free_factor<StorageIndex>(m_cholmodFactor, m_cholmod);
250
291
  m_cholmodFactor = 0;
251
292
  }
252
293
  cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
253
- m_cholmodFactor = cholmod_analyze(&A, &m_cholmod);
254
-
294
+ m_cholmodFactor = internal::cm_analyze<StorageIndex>(A, m_cholmod);
295
+
255
296
  this->m_isInitialized = true;
256
297
  this->m_info = Success;
257
298
  m_analysisIsOk = true;
258
299
  m_factorizationIsOk = false;
259
300
  }
260
-
301
+
261
302
  /** Performs a numeric decomposition of \a matrix
262
303
  *
263
304
  * The given matrix must have the same sparsity pattern as the matrix on which the symbolic decomposition has been performed.
@@ -268,17 +309,17 @@ class CholmodBase : public SparseSolverBase<Derived>
268
309
  {
269
310
  eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
270
311
  cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
271
- cholmod_factorize_p(&A, m_shiftOffset, 0, 0, m_cholmodFactor, &m_cholmod);
312
+ internal::cm_factorize_p<StorageIndex>(&A, m_shiftOffset, 0, 0, m_cholmodFactor, m_cholmod);
272
313
 
273
314
  // If the factorization failed, minor is the column at which it did. On success minor == n.
274
315
  this->m_info = (m_cholmodFactor->minor == m_cholmodFactor->n ? Success : NumericalIssue);
275
316
  m_factorizationIsOk = true;
276
317
  }
277
-
318
+
278
319
  /** Returns a reference to the Cholmod's configuration structure to get a full control over the performed operations.
279
320
  * See the Cholmod user guide for details. */
280
321
  cholmod_common& cholmod() { return m_cholmod; }
281
-
322
+
282
323
  #ifndef EIGEN_PARSED_BY_DOXYGEN
283
324
  /** \internal */
284
325
  template<typename Rhs,typename Dest>
@@ -288,22 +329,23 @@ class CholmodBase : public SparseSolverBase<Derived>
288
329
  const Index size = m_cholmodFactor->n;
289
330
  EIGEN_UNUSED_VARIABLE(size);
290
331
  eigen_assert(size==b.rows());
291
-
292
- // Cholmod needs column-major stoarge without inner-stride, which corresponds to the default behavior of Ref.
332
+
333
+ // Cholmod needs column-major storage without inner-stride, which corresponds to the default behavior of Ref.
293
334
  Ref<const Matrix<typename Rhs::Scalar,Dynamic,Dynamic,ColMajor> > b_ref(b.derived());
294
335
 
295
336
  cholmod_dense b_cd = viewAsCholmod(b_ref);
296
- cholmod_dense* x_cd = cholmod_solve(CHOLMOD_A, m_cholmodFactor, &b_cd, &m_cholmod);
337
+ cholmod_dense* x_cd = internal::cm_solve<StorageIndex>(CHOLMOD_A, *m_cholmodFactor, b_cd, m_cholmod);
297
338
  if(!x_cd)
298
339
  {
299
340
  this->m_info = NumericalIssue;
300
341
  return;
301
342
  }
302
343
  // TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
344
+ // NOTE Actually, the copy can be avoided by calling cholmod_solve2 instead of cholmod_solve
303
345
  dest = Matrix<Scalar,Dest::RowsAtCompileTime,Dest::ColsAtCompileTime>::Map(reinterpret_cast<Scalar*>(x_cd->x),b.rows(),b.cols());
304
- cholmod_free_dense(&x_cd, &m_cholmod);
346
+ internal::cm_free_dense<StorageIndex>(x_cd, m_cholmod);
305
347
  }
306
-
348
+
307
349
  /** \internal */
308
350
  template<typename RhsDerived, typename DestDerived>
309
351
  void _solve_impl(const SparseMatrixBase<RhsDerived> &b, SparseMatrixBase<DestDerived> &dest) const
@@ -316,19 +358,20 @@ class CholmodBase : public SparseSolverBase<Derived>
316
358
  // note: cs stands for Cholmod Sparse
317
359
  Ref<SparseMatrix<typename RhsDerived::Scalar,ColMajor,typename RhsDerived::StorageIndex> > b_ref(b.const_cast_derived());
318
360
  cholmod_sparse b_cs = viewAsCholmod(b_ref);
319
- cholmod_sparse* x_cs = cholmod_spsolve(CHOLMOD_A, m_cholmodFactor, &b_cs, &m_cholmod);
361
+ cholmod_sparse* x_cs = internal::cm_spsolve<StorageIndex>(CHOLMOD_A, *m_cholmodFactor, b_cs, m_cholmod);
320
362
  if(!x_cs)
321
363
  {
322
364
  this->m_info = NumericalIssue;
323
365
  return;
324
366
  }
325
367
  // TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
368
+ // NOTE cholmod_spsolve in fact just calls the dense solver for blocks of 4 columns at a time (similar to Eigen's sparse solver)
326
369
  dest.derived() = viewAsEigen<typename DestDerived::Scalar,ColMajor,typename DestDerived::StorageIndex>(*x_cs);
327
- cholmod_free_sparse(&x_cs, &m_cholmod);
370
+ internal::cm_free_sparse<StorageIndex>(x_cs, m_cholmod);
328
371
  }
329
372
  #endif // EIGEN_PARSED_BY_DOXYGEN
330
-
331
-
373
+
374
+
332
375
  /** Sets the shift parameter that will be used to adjust the diagonal coefficients during the numerical factorization.
333
376
  *
334
377
  * During the numerical factorization, an offset term is added to the diagonal coefficients:\n
@@ -343,7 +386,7 @@ class CholmodBase : public SparseSolverBase<Derived>
343
386
  m_shiftOffset[0] = double(offset);
344
387
  return derived();
345
388
  }
346
-
389
+
347
390
  /** \returns the determinant of the underlying matrix from the current factorization */
348
391
  Scalar determinant() const
349
392
  {
@@ -398,7 +441,7 @@ class CholmodBase : public SparseSolverBase<Derived>
398
441
  template<typename Stream>
399
442
  void dumpMemory(Stream& /*s*/)
400
443
  {}
401
-
444
+
402
445
  protected:
403
446
  mutable cholmod_common m_cholmod;
404
447
  cholmod_factor* m_cholmodFactor;
@@ -435,11 +478,11 @@ class CholmodSimplicialLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimpl
435
478
  {
436
479
  typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT> Base;
437
480
  using Base::m_cholmod;
438
-
481
+
439
482
  public:
440
-
483
+
441
484
  typedef _MatrixType MatrixType;
442
-
485
+
443
486
  CholmodSimplicialLLT() : Base() { init(); }
444
487
 
445
488
  CholmodSimplicialLLT(const MatrixType& matrix) : Base()
@@ -486,11 +529,11 @@ class CholmodSimplicialLDLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimp
486
529
  {
487
530
  typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT> Base;
488
531
  using Base::m_cholmod;
489
-
532
+
490
533
  public:
491
-
534
+
492
535
  typedef _MatrixType MatrixType;
493
-
536
+
494
537
  CholmodSimplicialLDLT() : Base() { init(); }
495
538
 
496
539
  CholmodSimplicialLDLT(const MatrixType& matrix) : Base()
@@ -535,11 +578,11 @@ class CholmodSupernodalLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSuper
535
578
  {
536
579
  typedef CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT> Base;
537
580
  using Base::m_cholmod;
538
-
581
+
539
582
  public:
540
-
583
+
541
584
  typedef _MatrixType MatrixType;
542
-
585
+
543
586
  CholmodSupernodalLLT() : Base() { init(); }
544
587
 
545
588
  CholmodSupernodalLLT(const MatrixType& matrix) : Base()
@@ -586,11 +629,11 @@ class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecom
586
629
  {
587
630
  typedef CholmodBase<_MatrixType, _UpLo, CholmodDecomposition> Base;
588
631
  using Base::m_cholmod;
589
-
632
+
590
633
  public:
591
-
634
+
592
635
  typedef _MatrixType MatrixType;
593
-
636
+
594
637
  CholmodDecomposition() : Base() { init(); }
595
638
 
596
639
  CholmodDecomposition(const MatrixType& matrix) : Base()
@@ -600,7 +643,7 @@ class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecom
600
643
  }
601
644
 
602
645
  ~CholmodDecomposition() {}
603
-
646
+
604
647
  void setMode(CholmodMode mode)
605
648
  {
606
649
  switch(mode)