umappp 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (395) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +25 -0
  3. data/README.md +110 -0
  4. data/ext/umappp/extconf.rb +25 -0
  5. data/ext/umappp/numo.hpp +867 -0
  6. data/ext/umappp/umappp.cpp +225 -0
  7. data/lib/umappp/version.rb +5 -0
  8. data/lib/umappp.rb +41 -0
  9. data/vendor/Eigen/Cholesky +45 -0
  10. data/vendor/Eigen/CholmodSupport +48 -0
  11. data/vendor/Eigen/Core +384 -0
  12. data/vendor/Eigen/Dense +7 -0
  13. data/vendor/Eigen/Eigen +2 -0
  14. data/vendor/Eigen/Eigenvalues +60 -0
  15. data/vendor/Eigen/Geometry +59 -0
  16. data/vendor/Eigen/Householder +29 -0
  17. data/vendor/Eigen/IterativeLinearSolvers +48 -0
  18. data/vendor/Eigen/Jacobi +32 -0
  19. data/vendor/Eigen/KLUSupport +41 -0
  20. data/vendor/Eigen/LU +47 -0
  21. data/vendor/Eigen/MetisSupport +35 -0
  22. data/vendor/Eigen/OrderingMethods +70 -0
  23. data/vendor/Eigen/PaStiXSupport +49 -0
  24. data/vendor/Eigen/PardisoSupport +35 -0
  25. data/vendor/Eigen/QR +50 -0
  26. data/vendor/Eigen/QtAlignedMalloc +39 -0
  27. data/vendor/Eigen/SPQRSupport +34 -0
  28. data/vendor/Eigen/SVD +50 -0
  29. data/vendor/Eigen/Sparse +34 -0
  30. data/vendor/Eigen/SparseCholesky +37 -0
  31. data/vendor/Eigen/SparseCore +69 -0
  32. data/vendor/Eigen/SparseLU +50 -0
  33. data/vendor/Eigen/SparseQR +36 -0
  34. data/vendor/Eigen/StdDeque +27 -0
  35. data/vendor/Eigen/StdList +26 -0
  36. data/vendor/Eigen/StdVector +27 -0
  37. data/vendor/Eigen/SuperLUSupport +64 -0
  38. data/vendor/Eigen/UmfPackSupport +40 -0
  39. data/vendor/Eigen/src/Cholesky/LDLT.h +688 -0
  40. data/vendor/Eigen/src/Cholesky/LLT.h +558 -0
  41. data/vendor/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  42. data/vendor/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  43. data/vendor/Eigen/src/Core/ArithmeticSequence.h +413 -0
  44. data/vendor/Eigen/src/Core/Array.h +417 -0
  45. data/vendor/Eigen/src/Core/ArrayBase.h +226 -0
  46. data/vendor/Eigen/src/Core/ArrayWrapper.h +209 -0
  47. data/vendor/Eigen/src/Core/Assign.h +90 -0
  48. data/vendor/Eigen/src/Core/AssignEvaluator.h +1010 -0
  49. data/vendor/Eigen/src/Core/Assign_MKL.h +178 -0
  50. data/vendor/Eigen/src/Core/BandMatrix.h +353 -0
  51. data/vendor/Eigen/src/Core/Block.h +448 -0
  52. data/vendor/Eigen/src/Core/BooleanRedux.h +162 -0
  53. data/vendor/Eigen/src/Core/CommaInitializer.h +164 -0
  54. data/vendor/Eigen/src/Core/ConditionEstimator.h +175 -0
  55. data/vendor/Eigen/src/Core/CoreEvaluators.h +1741 -0
  56. data/vendor/Eigen/src/Core/CoreIterators.h +132 -0
  57. data/vendor/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  58. data/vendor/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  59. data/vendor/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  60. data/vendor/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  61. data/vendor/Eigen/src/Core/CwiseUnaryView.h +132 -0
  62. data/vendor/Eigen/src/Core/DenseBase.h +701 -0
  63. data/vendor/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  64. data/vendor/Eigen/src/Core/DenseStorage.h +652 -0
  65. data/vendor/Eigen/src/Core/Diagonal.h +258 -0
  66. data/vendor/Eigen/src/Core/DiagonalMatrix.h +391 -0
  67. data/vendor/Eigen/src/Core/DiagonalProduct.h +28 -0
  68. data/vendor/Eigen/src/Core/Dot.h +318 -0
  69. data/vendor/Eigen/src/Core/EigenBase.h +160 -0
  70. data/vendor/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  71. data/vendor/Eigen/src/Core/Fuzzy.h +155 -0
  72. data/vendor/Eigen/src/Core/GeneralProduct.h +465 -0
  73. data/vendor/Eigen/src/Core/GenericPacketMath.h +1040 -0
  74. data/vendor/Eigen/src/Core/GlobalFunctions.h +194 -0
  75. data/vendor/Eigen/src/Core/IO.h +258 -0
  76. data/vendor/Eigen/src/Core/IndexedView.h +237 -0
  77. data/vendor/Eigen/src/Core/Inverse.h +117 -0
  78. data/vendor/Eigen/src/Core/Map.h +171 -0
  79. data/vendor/Eigen/src/Core/MapBase.h +310 -0
  80. data/vendor/Eigen/src/Core/MathFunctions.h +2057 -0
  81. data/vendor/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  82. data/vendor/Eigen/src/Core/Matrix.h +565 -0
  83. data/vendor/Eigen/src/Core/MatrixBase.h +547 -0
  84. data/vendor/Eigen/src/Core/NestByValue.h +85 -0
  85. data/vendor/Eigen/src/Core/NoAlias.h +109 -0
  86. data/vendor/Eigen/src/Core/NumTraits.h +335 -0
  87. data/vendor/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  88. data/vendor/Eigen/src/Core/PermutationMatrix.h +605 -0
  89. data/vendor/Eigen/src/Core/PlainObjectBase.h +1128 -0
  90. data/vendor/Eigen/src/Core/Product.h +191 -0
  91. data/vendor/Eigen/src/Core/ProductEvaluators.h +1179 -0
  92. data/vendor/Eigen/src/Core/Random.h +218 -0
  93. data/vendor/Eigen/src/Core/Redux.h +515 -0
  94. data/vendor/Eigen/src/Core/Ref.h +381 -0
  95. data/vendor/Eigen/src/Core/Replicate.h +142 -0
  96. data/vendor/Eigen/src/Core/Reshaped.h +454 -0
  97. data/vendor/Eigen/src/Core/ReturnByValue.h +119 -0
  98. data/vendor/Eigen/src/Core/Reverse.h +217 -0
  99. data/vendor/Eigen/src/Core/Select.h +164 -0
  100. data/vendor/Eigen/src/Core/SelfAdjointView.h +365 -0
  101. data/vendor/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  102. data/vendor/Eigen/src/Core/Solve.h +188 -0
  103. data/vendor/Eigen/src/Core/SolveTriangular.h +235 -0
  104. data/vendor/Eigen/src/Core/SolverBase.h +168 -0
  105. data/vendor/Eigen/src/Core/StableNorm.h +251 -0
  106. data/vendor/Eigen/src/Core/StlIterators.h +463 -0
  107. data/vendor/Eigen/src/Core/Stride.h +116 -0
  108. data/vendor/Eigen/src/Core/Swap.h +68 -0
  109. data/vendor/Eigen/src/Core/Transpose.h +464 -0
  110. data/vendor/Eigen/src/Core/Transpositions.h +386 -0
  111. data/vendor/Eigen/src/Core/TriangularMatrix.h +1001 -0
  112. data/vendor/Eigen/src/Core/VectorBlock.h +96 -0
  113. data/vendor/Eigen/src/Core/VectorwiseOp.h +784 -0
  114. data/vendor/Eigen/src/Core/Visitor.h +381 -0
  115. data/vendor/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  116. data/vendor/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  117. data/vendor/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  118. data/vendor/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  119. data/vendor/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  120. data/vendor/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  121. data/vendor/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  122. data/vendor/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  123. data/vendor/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  124. data/vendor/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  125. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  126. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  127. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  128. data/vendor/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  129. data/vendor/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  130. data/vendor/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  131. data/vendor/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  132. data/vendor/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  133. data/vendor/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  134. data/vendor/Eigen/src/Core/arch/Default/Half.h +942 -0
  135. data/vendor/Eigen/src/Core/arch/Default/Settings.h +49 -0
  136. data/vendor/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  137. data/vendor/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  138. data/vendor/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  139. data/vendor/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  140. data/vendor/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  141. data/vendor/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  142. data/vendor/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  143. data/vendor/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  144. data/vendor/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  145. data/vendor/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  146. data/vendor/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  147. data/vendor/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  148. data/vendor/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  149. data/vendor/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  150. data/vendor/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  151. data/vendor/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  152. data/vendor/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  153. data/vendor/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  154. data/vendor/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  155. data/vendor/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  156. data/vendor/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  157. data/vendor/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  158. data/vendor/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  159. data/vendor/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  160. data/vendor/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  161. data/vendor/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  162. data/vendor/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  163. data/vendor/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  164. data/vendor/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  165. data/vendor/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  166. data/vendor/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  167. data/vendor/Eigen/src/Core/functors/StlFunctors.h +166 -0
  168. data/vendor/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  169. data/vendor/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  170. data/vendor/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  171. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  172. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  173. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  174. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  175. data/vendor/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  176. data/vendor/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  177. data/vendor/Eigen/src/Core/products/Parallelizer.h +180 -0
  178. data/vendor/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  179. data/vendor/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  180. data/vendor/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  181. data/vendor/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  182. data/vendor/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  183. data/vendor/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  184. data/vendor/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  185. data/vendor/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  186. data/vendor/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  187. data/vendor/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  188. data/vendor/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  189. data/vendor/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  190. data/vendor/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  191. data/vendor/Eigen/src/Core/util/BlasUtil.h +583 -0
  192. data/vendor/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  193. data/vendor/Eigen/src/Core/util/Constants.h +563 -0
  194. data/vendor/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  195. data/vendor/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  196. data/vendor/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  197. data/vendor/Eigen/src/Core/util/IntegralConstant.h +272 -0
  198. data/vendor/Eigen/src/Core/util/MKL_support.h +137 -0
  199. data/vendor/Eigen/src/Core/util/Macros.h +1464 -0
  200. data/vendor/Eigen/src/Core/util/Memory.h +1163 -0
  201. data/vendor/Eigen/src/Core/util/Meta.h +812 -0
  202. data/vendor/Eigen/src/Core/util/NonMPL2.h +3 -0
  203. data/vendor/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  204. data/vendor/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  205. data/vendor/Eigen/src/Core/util/StaticAssert.h +221 -0
  206. data/vendor/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  207. data/vendor/Eigen/src/Core/util/XprHelper.h +856 -0
  208. data/vendor/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  209. data/vendor/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  210. data/vendor/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  211. data/vendor/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  212. data/vendor/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  213. data/vendor/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  214. data/vendor/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  215. data/vendor/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  216. data/vendor/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  217. data/vendor/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  218. data/vendor/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  219. data/vendor/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  220. data/vendor/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  221. data/vendor/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  222. data/vendor/Eigen/src/Geometry/AlignedBox.h +486 -0
  223. data/vendor/Eigen/src/Geometry/AngleAxis.h +247 -0
  224. data/vendor/Eigen/src/Geometry/EulerAngles.h +114 -0
  225. data/vendor/Eigen/src/Geometry/Homogeneous.h +501 -0
  226. data/vendor/Eigen/src/Geometry/Hyperplane.h +282 -0
  227. data/vendor/Eigen/src/Geometry/OrthoMethods.h +235 -0
  228. data/vendor/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  229. data/vendor/Eigen/src/Geometry/Quaternion.h +870 -0
  230. data/vendor/Eigen/src/Geometry/Rotation2D.h +199 -0
  231. data/vendor/Eigen/src/Geometry/RotationBase.h +206 -0
  232. data/vendor/Eigen/src/Geometry/Scaling.h +188 -0
  233. data/vendor/Eigen/src/Geometry/Transform.h +1563 -0
  234. data/vendor/Eigen/src/Geometry/Translation.h +202 -0
  235. data/vendor/Eigen/src/Geometry/Umeyama.h +166 -0
  236. data/vendor/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  237. data/vendor/Eigen/src/Householder/BlockHouseholder.h +110 -0
  238. data/vendor/Eigen/src/Householder/Householder.h +176 -0
  239. data/vendor/Eigen/src/Householder/HouseholderSequence.h +545 -0
  240. data/vendor/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  241. data/vendor/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  242. data/vendor/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  243. data/vendor/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  244. data/vendor/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  245. data/vendor/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  246. data/vendor/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  247. data/vendor/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  248. data/vendor/Eigen/src/Jacobi/Jacobi.h +483 -0
  249. data/vendor/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  250. data/vendor/Eigen/src/LU/Determinant.h +117 -0
  251. data/vendor/Eigen/src/LU/FullPivLU.h +877 -0
  252. data/vendor/Eigen/src/LU/InverseImpl.h +432 -0
  253. data/vendor/Eigen/src/LU/PartialPivLU.h +624 -0
  254. data/vendor/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  255. data/vendor/Eigen/src/LU/arch/InverseSize4.h +351 -0
  256. data/vendor/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  257. data/vendor/Eigen/src/OrderingMethods/Amd.h +435 -0
  258. data/vendor/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  259. data/vendor/Eigen/src/OrderingMethods/Ordering.h +153 -0
  260. data/vendor/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  261. data/vendor/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  262. data/vendor/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  263. data/vendor/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  264. data/vendor/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  265. data/vendor/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  266. data/vendor/Eigen/src/QR/HouseholderQR.h +434 -0
  267. data/vendor/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  268. data/vendor/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  269. data/vendor/Eigen/src/SVD/BDCSVD.h +1366 -0
  270. data/vendor/Eigen/src/SVD/JacobiSVD.h +812 -0
  271. data/vendor/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  272. data/vendor/Eigen/src/SVD/SVDBase.h +376 -0
  273. data/vendor/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  274. data/vendor/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  275. data/vendor/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  276. data/vendor/Eigen/src/SparseCore/AmbiVector.h +378 -0
  277. data/vendor/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  278. data/vendor/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  279. data/vendor/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  280. data/vendor/Eigen/src/SparseCore/SparseAssign.h +270 -0
  281. data/vendor/Eigen/src/SparseCore/SparseBlock.h +571 -0
  282. data/vendor/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  283. data/vendor/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  284. data/vendor/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  285. data/vendor/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  286. data/vendor/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  287. data/vendor/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  288. data/vendor/Eigen/src/SparseCore/SparseDot.h +98 -0
  289. data/vendor/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  290. data/vendor/Eigen/src/SparseCore/SparseMap.h +305 -0
  291. data/vendor/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  292. data/vendor/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  293. data/vendor/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  294. data/vendor/Eigen/src/SparseCore/SparseProduct.h +181 -0
  295. data/vendor/Eigen/src/SparseCore/SparseRedux.h +49 -0
  296. data/vendor/Eigen/src/SparseCore/SparseRef.h +397 -0
  297. data/vendor/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  298. data/vendor/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  299. data/vendor/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  300. data/vendor/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  301. data/vendor/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  302. data/vendor/Eigen/src/SparseCore/SparseUtil.h +186 -0
  303. data/vendor/Eigen/src/SparseCore/SparseVector.h +478 -0
  304. data/vendor/Eigen/src/SparseCore/SparseView.h +254 -0
  305. data/vendor/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  306. data/vendor/Eigen/src/SparseLU/SparseLU.h +923 -0
  307. data/vendor/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  308. data/vendor/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  309. data/vendor/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  310. data/vendor/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  311. data/vendor/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  312. data/vendor/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  313. data/vendor/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  314. data/vendor/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  315. data/vendor/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  316. data/vendor/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  317. data/vendor/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  318. data/vendor/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  319. data/vendor/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  320. data/vendor/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  321. data/vendor/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  322. data/vendor/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  323. data/vendor/Eigen/src/SparseQR/SparseQR.h +758 -0
  324. data/vendor/Eigen/src/StlSupport/StdDeque.h +116 -0
  325. data/vendor/Eigen/src/StlSupport/StdList.h +106 -0
  326. data/vendor/Eigen/src/StlSupport/StdVector.h +131 -0
  327. data/vendor/Eigen/src/StlSupport/details.h +84 -0
  328. data/vendor/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  329. data/vendor/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  330. data/vendor/Eigen/src/misc/Image.h +82 -0
  331. data/vendor/Eigen/src/misc/Kernel.h +79 -0
  332. data/vendor/Eigen/src/misc/RealSvd2x2.h +55 -0
  333. data/vendor/Eigen/src/misc/blas.h +440 -0
  334. data/vendor/Eigen/src/misc/lapack.h +152 -0
  335. data/vendor/Eigen/src/misc/lapacke.h +16292 -0
  336. data/vendor/Eigen/src/misc/lapacke_mangling.h +17 -0
  337. data/vendor/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  338. data/vendor/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  339. data/vendor/Eigen/src/plugins/BlockMethods.h +1442 -0
  340. data/vendor/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  341. data/vendor/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  342. data/vendor/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  343. data/vendor/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  344. data/vendor/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  345. data/vendor/Eigen/src/plugins/ReshapedMethods.h +149 -0
  346. data/vendor/aarand/aarand.hpp +114 -0
  347. data/vendor/annoy/annoylib.h +1495 -0
  348. data/vendor/annoy/kissrandom.h +120 -0
  349. data/vendor/annoy/mman.h +242 -0
  350. data/vendor/hnswlib/bruteforce.h +152 -0
  351. data/vendor/hnswlib/hnswalg.h +1192 -0
  352. data/vendor/hnswlib/hnswlib.h +108 -0
  353. data/vendor/hnswlib/space_ip.h +282 -0
  354. data/vendor/hnswlib/space_l2.h +281 -0
  355. data/vendor/hnswlib/visited_list_pool.h +79 -0
  356. data/vendor/irlba/irlba.hpp +575 -0
  357. data/vendor/irlba/lanczos.hpp +212 -0
  358. data/vendor/irlba/parallel.hpp +474 -0
  359. data/vendor/irlba/utils.hpp +224 -0
  360. data/vendor/irlba/wrappers.hpp +228 -0
  361. data/vendor/kmeans/Base.hpp +75 -0
  362. data/vendor/kmeans/Details.hpp +79 -0
  363. data/vendor/kmeans/HartiganWong.hpp +492 -0
  364. data/vendor/kmeans/InitializeKmeansPP.hpp +144 -0
  365. data/vendor/kmeans/InitializeNone.hpp +44 -0
  366. data/vendor/kmeans/InitializePCAPartition.hpp +309 -0
  367. data/vendor/kmeans/InitializeRandom.hpp +91 -0
  368. data/vendor/kmeans/Kmeans.hpp +161 -0
  369. data/vendor/kmeans/Lloyd.hpp +134 -0
  370. data/vendor/kmeans/MiniBatch.hpp +269 -0
  371. data/vendor/kmeans/QuickSearch.hpp +179 -0
  372. data/vendor/kmeans/compute_centroids.hpp +32 -0
  373. data/vendor/kmeans/compute_wcss.hpp +27 -0
  374. data/vendor/kmeans/is_edge_case.hpp +42 -0
  375. data/vendor/kmeans/random.hpp +55 -0
  376. data/vendor/knncolle/Annoy/Annoy.hpp +193 -0
  377. data/vendor/knncolle/BruteForce/BruteForce.hpp +120 -0
  378. data/vendor/knncolle/Hnsw/Hnsw.hpp +225 -0
  379. data/vendor/knncolle/Kmknn/Kmknn.hpp +286 -0
  380. data/vendor/knncolle/VpTree/VpTree.hpp +256 -0
  381. data/vendor/knncolle/knncolle.hpp +34 -0
  382. data/vendor/knncolle/utils/Base.hpp +100 -0
  383. data/vendor/knncolle/utils/NeighborQueue.hpp +94 -0
  384. data/vendor/knncolle/utils/distances.hpp +98 -0
  385. data/vendor/knncolle/utils/find_nearest_neighbors.hpp +112 -0
  386. data/vendor/powerit/PowerIterations.hpp +157 -0
  387. data/vendor/umappp/NeighborList.hpp +37 -0
  388. data/vendor/umappp/Umap.hpp +662 -0
  389. data/vendor/umappp/combine_neighbor_sets.hpp +95 -0
  390. data/vendor/umappp/find_ab.hpp +157 -0
  391. data/vendor/umappp/neighbor_similarities.hpp +136 -0
  392. data/vendor/umappp/optimize_layout.hpp +285 -0
  393. data/vendor/umappp/spectral_init.hpp +181 -0
  394. data/vendor/umappp/umappp.hpp +13 -0
  395. metadata +465 -0
@@ -0,0 +1,351 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2001 Intel Corporation
5
+ // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.fr>
6
+ // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
7
+ //
8
+ // This Source Code Form is subject to the terms of the Mozilla
9
+ // Public License v. 2.0. If a copy of the MPL was not distributed
10
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
+ //
12
+ // The algorithm below is a reimplementation of former \src\LU\Inverse_SSE.h using PacketMath.
13
+ // inv(M) = M#/|M|, where inv(M), M# and |M| denote the inverse of M,
14
+ // adjugate of M and determinant of M respectively. M# is computed block-wise
15
+ // using specific formulae. For proof, see:
16
+ // https://lxjk.github.io/2017/09/03/Fast-4x4-Matrix-Inverse-with-SSE-SIMD-Explained.html
17
+ // Variable names are adopted from \src\LU\Inverse_SSE.h.
18
+ //
19
+ // The SSE code for the 4x4 float and double matrix inverse in former (deprecated) \src\LU\Inverse_SSE.h
20
+ // comes from the following Intel's library:
21
+ // http://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/
22
+ //
23
+ // Here is the respective copyright and license statement:
24
+ //
25
+ // Copyright (c) 2001 Intel Corporation.
26
+ //
27
+ // Permition is granted to use, copy, distribute and prepare derivative works
28
+ // of this library for any purpose and without fee, provided, that the above
29
+ // copyright notice and this statement appear in all copies.
30
+ // Intel makes no representations about the suitability of this software for
31
+ // any purpose, and specifically disclaims all warranties.
32
+ // See LEGAL.TXT for all the legal information.
33
+ //
34
+ // TODO: Unify implementations of different data types (i.e. float and double).
35
+ #ifndef EIGEN_INVERSE_SIZE_4_H
36
+ #define EIGEN_INVERSE_SIZE_4_H
37
+
38
+ namespace Eigen
39
+ {
40
+ namespace internal
41
+ {
42
+ template <typename MatrixType, typename ResultType>
43
+ struct compute_inverse_size4<Architecture::Target, float, MatrixType, ResultType>
44
+ {
45
+ enum
46
+ {
47
+ MatrixAlignment = traits<MatrixType>::Alignment,
48
+ ResultAlignment = traits<ResultType>::Alignment,
49
+ StorageOrdersMatch = (MatrixType::Flags & RowMajorBit) == (ResultType::Flags & RowMajorBit)
50
+ };
51
+ typedef typename conditional<(MatrixType::Flags & LinearAccessBit), MatrixType const &, typename MatrixType::PlainObject>::type ActualMatrixType;
52
+
53
+ static void run(const MatrixType &mat, ResultType &result)
54
+ {
55
+ ActualMatrixType matrix(mat);
56
+
57
+ const float* data = matrix.data();
58
+ const Index stride = matrix.innerStride();
59
+ Packet4f _L1 = ploadt<Packet4f,MatrixAlignment>(data);
60
+ Packet4f _L2 = ploadt<Packet4f,MatrixAlignment>(data + stride*4);
61
+ Packet4f _L3 = ploadt<Packet4f,MatrixAlignment>(data + stride*8);
62
+ Packet4f _L4 = ploadt<Packet4f,MatrixAlignment>(data + stride*12);
63
+
64
+ // Four 2x2 sub-matrices of the input matrix
65
+ // input = [[A, B],
66
+ // [C, D]]
67
+ Packet4f A, B, C, D;
68
+
69
+ if (!StorageOrdersMatch)
70
+ {
71
+ A = vec4f_unpacklo(_L1, _L2);
72
+ B = vec4f_unpacklo(_L3, _L4);
73
+ C = vec4f_unpackhi(_L1, _L2);
74
+ D = vec4f_unpackhi(_L3, _L4);
75
+ }
76
+ else
77
+ {
78
+ A = vec4f_movelh(_L1, _L2);
79
+ B = vec4f_movehl(_L2, _L1);
80
+ C = vec4f_movelh(_L3, _L4);
81
+ D = vec4f_movehl(_L4, _L3);
82
+ }
83
+
84
+ Packet4f AB, DC;
85
+
86
+ // AB = A# * B, where A# denotes the adjugate of A, and * denotes matrix product.
87
+ AB = pmul(vec4f_swizzle2(A, A, 3, 3, 0, 0), B);
88
+ AB = psub(AB, pmul(vec4f_swizzle2(A, A, 1, 1, 2, 2), vec4f_swizzle2(B, B, 2, 3, 0, 1)));
89
+
90
+ // DC = D#*C
91
+ DC = pmul(vec4f_swizzle2(D, D, 3, 3, 0, 0), C);
92
+ DC = psub(DC, pmul(vec4f_swizzle2(D, D, 1, 1, 2, 2), vec4f_swizzle2(C, C, 2, 3, 0, 1)));
93
+
94
+ // determinants of the sub-matrices
95
+ Packet4f dA, dB, dC, dD;
96
+
97
+ dA = pmul(vec4f_swizzle2(A, A, 3, 3, 1, 1), A);
98
+ dA = psub(dA, vec4f_movehl(dA, dA));
99
+
100
+ dB = pmul(vec4f_swizzle2(B, B, 3, 3, 1, 1), B);
101
+ dB = psub(dB, vec4f_movehl(dB, dB));
102
+
103
+ dC = pmul(vec4f_swizzle2(C, C, 3, 3, 1, 1), C);
104
+ dC = psub(dC, vec4f_movehl(dC, dC));
105
+
106
+ dD = pmul(vec4f_swizzle2(D, D, 3, 3, 1, 1), D);
107
+ dD = psub(dD, vec4f_movehl(dD, dD));
108
+
109
+ Packet4f d, d1, d2;
110
+
111
+ d = pmul(vec4f_swizzle2(DC, DC, 0, 2, 1, 3), AB);
112
+ d = padd(d, vec4f_movehl(d, d));
113
+ d = padd(d, vec4f_swizzle2(d, d, 1, 0, 0, 0));
114
+ d1 = pmul(dA, dD);
115
+ d2 = pmul(dB, dC);
116
+
117
+ // determinant of the input matrix, det = |A||D| + |B||C| - trace(A#*B*D#*C)
118
+ Packet4f det = vec4f_duplane(psub(padd(d1, d2), d), 0);
119
+
120
+ // reciprocal of the determinant of the input matrix, rd = 1/det
121
+ Packet4f rd = pdiv(pset1<Packet4f>(1.0f), det);
122
+
123
+ // Four sub-matrices of the inverse
124
+ Packet4f iA, iB, iC, iD;
125
+
126
+ // iD = D*|A| - C*A#*B
127
+ iD = pmul(vec4f_swizzle2(C, C, 0, 0, 2, 2), vec4f_movelh(AB, AB));
128
+ iD = padd(iD, pmul(vec4f_swizzle2(C, C, 1, 1, 3, 3), vec4f_movehl(AB, AB)));
129
+ iD = psub(pmul(D, vec4f_duplane(dA, 0)), iD);
130
+
131
+ // iA = A*|D| - B*D#*C
132
+ iA = pmul(vec4f_swizzle2(B, B, 0, 0, 2, 2), vec4f_movelh(DC, DC));
133
+ iA = padd(iA, pmul(vec4f_swizzle2(B, B, 1, 1, 3, 3), vec4f_movehl(DC, DC)));
134
+ iA = psub(pmul(A, vec4f_duplane(dD, 0)), iA);
135
+
136
+ // iB = C*|B| - D * (A#B)# = C*|B| - D*B#*A
137
+ iB = pmul(D, vec4f_swizzle2(AB, AB, 3, 0, 3, 0));
138
+ iB = psub(iB, pmul(vec4f_swizzle2(D, D, 1, 0, 3, 2), vec4f_swizzle2(AB, AB, 2, 1, 2, 1)));
139
+ iB = psub(pmul(C, vec4f_duplane(dB, 0)), iB);
140
+
141
+ // iC = B*|C| - A * (D#C)# = B*|C| - A*C#*D
142
+ iC = pmul(A, vec4f_swizzle2(DC, DC, 3, 0, 3, 0));
143
+ iC = psub(iC, pmul(vec4f_swizzle2(A, A, 1, 0, 3, 2), vec4f_swizzle2(DC, DC, 2, 1, 2, 1)));
144
+ iC = psub(pmul(B, vec4f_duplane(dC, 0)), iC);
145
+
146
+ const float sign_mask[4] = {0.0f, numext::bit_cast<float>(0x80000000u), numext::bit_cast<float>(0x80000000u), 0.0f};
147
+ const Packet4f p4f_sign_PNNP = ploadu<Packet4f>(sign_mask);
148
+ rd = pxor(rd, p4f_sign_PNNP);
149
+ iA = pmul(iA, rd);
150
+ iB = pmul(iB, rd);
151
+ iC = pmul(iC, rd);
152
+ iD = pmul(iD, rd);
153
+
154
+ Index res_stride = result.outerStride();
155
+ float *res = result.data();
156
+
157
+ pstoret<float, Packet4f, ResultAlignment>(res + 0, vec4f_swizzle2(iA, iB, 3, 1, 3, 1));
158
+ pstoret<float, Packet4f, ResultAlignment>(res + res_stride, vec4f_swizzle2(iA, iB, 2, 0, 2, 0));
159
+ pstoret<float, Packet4f, ResultAlignment>(res + 2 * res_stride, vec4f_swizzle2(iC, iD, 3, 1, 3, 1));
160
+ pstoret<float, Packet4f, ResultAlignment>(res + 3 * res_stride, vec4f_swizzle2(iC, iD, 2, 0, 2, 0));
161
+ }
162
+ };
163
+
164
+ #if !(defined EIGEN_VECTORIZE_NEON && !(EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG))
165
+ // same algorithm as above, except that each operand is split into
166
+ // halves for two registers to hold.
167
+ template <typename MatrixType, typename ResultType>
168
+ struct compute_inverse_size4<Architecture::Target, double, MatrixType, ResultType>
169
+ {
170
+ enum
171
+ {
172
+ MatrixAlignment = traits<MatrixType>::Alignment,
173
+ ResultAlignment = traits<ResultType>::Alignment,
174
+ StorageOrdersMatch = (MatrixType::Flags & RowMajorBit) == (ResultType::Flags & RowMajorBit)
175
+ };
176
+ typedef typename conditional<(MatrixType::Flags & LinearAccessBit),
177
+ MatrixType const &,
178
+ typename MatrixType::PlainObject>::type
179
+ ActualMatrixType;
180
+
181
+ static void run(const MatrixType &mat, ResultType &result)
182
+ {
183
+ ActualMatrixType matrix(mat);
184
+
185
+ // Four 2x2 sub-matrices of the input matrix, each is further divided into upper and lower
186
+ // row e.g. A1, upper row of A, A2, lower row of A
187
+ // input = [[A, B], = [[[A1, [B1,
188
+ // [C, D]] A2], B2]],
189
+ // [[C1, [D1,
190
+ // C2], D2]]]
191
+
192
+ Packet2d A1, A2, B1, B2, C1, C2, D1, D2;
193
+
194
+ const double* data = matrix.data();
195
+ const Index stride = matrix.innerStride();
196
+ if (StorageOrdersMatch)
197
+ {
198
+ A1 = ploadt<Packet2d,MatrixAlignment>(data + stride*0);
199
+ B1 = ploadt<Packet2d,MatrixAlignment>(data + stride*2);
200
+ A2 = ploadt<Packet2d,MatrixAlignment>(data + stride*4);
201
+ B2 = ploadt<Packet2d,MatrixAlignment>(data + stride*6);
202
+ C1 = ploadt<Packet2d,MatrixAlignment>(data + stride*8);
203
+ D1 = ploadt<Packet2d,MatrixAlignment>(data + stride*10);
204
+ C2 = ploadt<Packet2d,MatrixAlignment>(data + stride*12);
205
+ D2 = ploadt<Packet2d,MatrixAlignment>(data + stride*14);
206
+ }
207
+ else
208
+ {
209
+ Packet2d temp;
210
+ A1 = ploadt<Packet2d,MatrixAlignment>(data + stride*0);
211
+ C1 = ploadt<Packet2d,MatrixAlignment>(data + stride*2);
212
+ A2 = ploadt<Packet2d,MatrixAlignment>(data + stride*4);
213
+ C2 = ploadt<Packet2d,MatrixAlignment>(data + stride*6);
214
+ temp = A1;
215
+ A1 = vec2d_unpacklo(A1, A2);
216
+ A2 = vec2d_unpackhi(temp, A2);
217
+
218
+ temp = C1;
219
+ C1 = vec2d_unpacklo(C1, C2);
220
+ C2 = vec2d_unpackhi(temp, C2);
221
+
222
+ B1 = ploadt<Packet2d,MatrixAlignment>(data + stride*8);
223
+ D1 = ploadt<Packet2d,MatrixAlignment>(data + stride*10);
224
+ B2 = ploadt<Packet2d,MatrixAlignment>(data + stride*12);
225
+ D2 = ploadt<Packet2d,MatrixAlignment>(data + stride*14);
226
+
227
+ temp = B1;
228
+ B1 = vec2d_unpacklo(B1, B2);
229
+ B2 = vec2d_unpackhi(temp, B2);
230
+
231
+ temp = D1;
232
+ D1 = vec2d_unpacklo(D1, D2);
233
+ D2 = vec2d_unpackhi(temp, D2);
234
+ }
235
+
236
+ // determinants of the sub-matrices
237
+ Packet2d dA, dB, dC, dD;
238
+
239
+ dA = vec2d_swizzle2(A2, A2, 1);
240
+ dA = pmul(A1, dA);
241
+ dA = psub(dA, vec2d_duplane(dA, 1));
242
+
243
+ dB = vec2d_swizzle2(B2, B2, 1);
244
+ dB = pmul(B1, dB);
245
+ dB = psub(dB, vec2d_duplane(dB, 1));
246
+
247
+ dC = vec2d_swizzle2(C2, C2, 1);
248
+ dC = pmul(C1, dC);
249
+ dC = psub(dC, vec2d_duplane(dC, 1));
250
+
251
+ dD = vec2d_swizzle2(D2, D2, 1);
252
+ dD = pmul(D1, dD);
253
+ dD = psub(dD, vec2d_duplane(dD, 1));
254
+
255
+ Packet2d DC1, DC2, AB1, AB2;
256
+
257
+ // AB = A# * B, where A# denotes the adjugate of A, and * denotes matrix product.
258
+ AB1 = pmul(B1, vec2d_duplane(A2, 1));
259
+ AB2 = pmul(B2, vec2d_duplane(A1, 0));
260
+ AB1 = psub(AB1, pmul(B2, vec2d_duplane(A1, 1)));
261
+ AB2 = psub(AB2, pmul(B1, vec2d_duplane(A2, 0)));
262
+
263
+ // DC = D#*C
264
+ DC1 = pmul(C1, vec2d_duplane(D2, 1));
265
+ DC2 = pmul(C2, vec2d_duplane(D1, 0));
266
+ DC1 = psub(DC1, pmul(C2, vec2d_duplane(D1, 1)));
267
+ DC2 = psub(DC2, pmul(C1, vec2d_duplane(D2, 0)));
268
+
269
+ Packet2d d1, d2;
270
+
271
+ // determinant of the input matrix, det = |A||D| + |B||C| - trace(A#*B*D#*C)
272
+ Packet2d det;
273
+
274
+ // reciprocal of the determinant of the input matrix, rd = 1/det
275
+ Packet2d rd;
276
+
277
+ d1 = pmul(AB1, vec2d_swizzle2(DC1, DC2, 0));
278
+ d2 = pmul(AB2, vec2d_swizzle2(DC1, DC2, 3));
279
+ rd = padd(d1, d2);
280
+ rd = padd(rd, vec2d_duplane(rd, 1));
281
+
282
+ d1 = pmul(dA, dD);
283
+ d2 = pmul(dB, dC);
284
+
285
+ det = padd(d1, d2);
286
+ det = psub(det, rd);
287
+ det = vec2d_duplane(det, 0);
288
+ rd = pdiv(pset1<Packet2d>(1.0), det);
289
+
290
+ // rows of four sub-matrices of the inverse
291
+ Packet2d iA1, iA2, iB1, iB2, iC1, iC2, iD1, iD2;
292
+
293
+ // iD = D*|A| - C*A#*B
294
+ iD1 = pmul(AB1, vec2d_duplane(C1, 0));
295
+ iD2 = pmul(AB1, vec2d_duplane(C2, 0));
296
+ iD1 = padd(iD1, pmul(AB2, vec2d_duplane(C1, 1)));
297
+ iD2 = padd(iD2, pmul(AB2, vec2d_duplane(C2, 1)));
298
+ dA = vec2d_duplane(dA, 0);
299
+ iD1 = psub(pmul(D1, dA), iD1);
300
+ iD2 = psub(pmul(D2, dA), iD2);
301
+
302
+ // iA = A*|D| - B*D#*C
303
+ iA1 = pmul(DC1, vec2d_duplane(B1, 0));
304
+ iA2 = pmul(DC1, vec2d_duplane(B2, 0));
305
+ iA1 = padd(iA1, pmul(DC2, vec2d_duplane(B1, 1)));
306
+ iA2 = padd(iA2, pmul(DC2, vec2d_duplane(B2, 1)));
307
+ dD = vec2d_duplane(dD, 0);
308
+ iA1 = psub(pmul(A1, dD), iA1);
309
+ iA2 = psub(pmul(A2, dD), iA2);
310
+
311
+ // iB = C*|B| - D * (A#B)# = C*|B| - D*B#*A
312
+ iB1 = pmul(D1, vec2d_swizzle2(AB2, AB1, 1));
313
+ iB2 = pmul(D2, vec2d_swizzle2(AB2, AB1, 1));
314
+ iB1 = psub(iB1, pmul(vec2d_swizzle2(D1, D1, 1), vec2d_swizzle2(AB2, AB1, 2)));
315
+ iB2 = psub(iB2, pmul(vec2d_swizzle2(D2, D2, 1), vec2d_swizzle2(AB2, AB1, 2)));
316
+ dB = vec2d_duplane(dB, 0);
317
+ iB1 = psub(pmul(C1, dB), iB1);
318
+ iB2 = psub(pmul(C2, dB), iB2);
319
+
320
+ // iC = B*|C| - A * (D#C)# = B*|C| - A*C#*D
321
+ iC1 = pmul(A1, vec2d_swizzle2(DC2, DC1, 1));
322
+ iC2 = pmul(A2, vec2d_swizzle2(DC2, DC1, 1));
323
+ iC1 = psub(iC1, pmul(vec2d_swizzle2(A1, A1, 1), vec2d_swizzle2(DC2, DC1, 2)));
324
+ iC2 = psub(iC2, pmul(vec2d_swizzle2(A2, A2, 1), vec2d_swizzle2(DC2, DC1, 2)));
325
+ dC = vec2d_duplane(dC, 0);
326
+ iC1 = psub(pmul(B1, dC), iC1);
327
+ iC2 = psub(pmul(B2, dC), iC2);
328
+
329
+ const double sign_mask1[2] = {0.0, numext::bit_cast<double>(0x8000000000000000ull)};
330
+ const double sign_mask2[2] = {numext::bit_cast<double>(0x8000000000000000ull), 0.0};
331
+ const Packet2d sign_PN = ploadu<Packet2d>(sign_mask1);
332
+ const Packet2d sign_NP = ploadu<Packet2d>(sign_mask2);
333
+ d1 = pxor(rd, sign_PN);
334
+ d2 = pxor(rd, sign_NP);
335
+
336
+ Index res_stride = result.outerStride();
337
+ double *res = result.data();
338
+ pstoret<double, Packet2d, ResultAlignment>(res + 0, pmul(vec2d_swizzle2(iA2, iA1, 3), d1));
339
+ pstoret<double, Packet2d, ResultAlignment>(res + res_stride, pmul(vec2d_swizzle2(iA2, iA1, 0), d2));
340
+ pstoret<double, Packet2d, ResultAlignment>(res + 2, pmul(vec2d_swizzle2(iB2, iB1, 3), d1));
341
+ pstoret<double, Packet2d, ResultAlignment>(res + res_stride + 2, pmul(vec2d_swizzle2(iB2, iB1, 0), d2));
342
+ pstoret<double, Packet2d, ResultAlignment>(res + 2 * res_stride, pmul(vec2d_swizzle2(iC2, iC1, 3), d1));
343
+ pstoret<double, Packet2d, ResultAlignment>(res + 3 * res_stride, pmul(vec2d_swizzle2(iC2, iC1, 0), d2));
344
+ pstoret<double, Packet2d, ResultAlignment>(res + 2 * res_stride + 2, pmul(vec2d_swizzle2(iD2, iD1, 3), d1));
345
+ pstoret<double, Packet2d, ResultAlignment>(res + 3 * res_stride + 2, pmul(vec2d_swizzle2(iD2, iD1, 0), d2));
346
+ }
347
+ };
348
+ #endif
349
+ } // namespace internal
350
+ } // namespace Eigen
351
+ #endif
@@ -0,0 +1,137 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2012 Désiré Nuentsa-Wakam <desire.nuentsa_wakam@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+ #ifndef METIS_SUPPORT_H
10
+ #define METIS_SUPPORT_H
11
+
12
+ namespace Eigen {
13
+ /**
14
+ * Get the fill-reducing ordering from the METIS package
15
+ *
16
+ * If A is the original matrix and Ap is the permuted matrix,
17
+ * the fill-reducing permutation is defined as follows :
18
+ * Row (column) i of A is the matperm(i) row (column) of Ap.
19
+ * WARNING: As computed by METIS, this corresponds to the vector iperm (instead of perm)
20
+ */
21
+ template <typename StorageIndex>
22
+ class MetisOrdering
23
+ {
24
+ public:
25
+ typedef PermutationMatrix<Dynamic,Dynamic,StorageIndex> PermutationType;
26
+ typedef Matrix<StorageIndex,Dynamic,1> IndexVector;
27
+
28
+ template <typename MatrixType>
29
+ void get_symmetrized_graph(const MatrixType& A)
30
+ {
31
+ Index m = A.cols();
32
+ eigen_assert((A.rows() == A.cols()) && "ONLY FOR SQUARED MATRICES");
33
+ // Get the transpose of the input matrix
34
+ MatrixType At = A.transpose();
35
+ // Get the number of nonzeros elements in each row/col of At+A
36
+ Index TotNz = 0;
37
+ IndexVector visited(m);
38
+ visited.setConstant(-1);
39
+ for (StorageIndex j = 0; j < m; j++)
40
+ {
41
+ // Compute the union structure of of A(j,:) and At(j,:)
42
+ visited(j) = j; // Do not include the diagonal element
43
+ // Get the nonzeros in row/column j of A
44
+ for (typename MatrixType::InnerIterator it(A, j); it; ++it)
45
+ {
46
+ Index idx = it.index(); // Get the row index (for column major) or column index (for row major)
47
+ if (visited(idx) != j )
48
+ {
49
+ visited(idx) = j;
50
+ ++TotNz;
51
+ }
52
+ }
53
+ //Get the nonzeros in row/column j of At
54
+ for (typename MatrixType::InnerIterator it(At, j); it; ++it)
55
+ {
56
+ Index idx = it.index();
57
+ if(visited(idx) != j)
58
+ {
59
+ visited(idx) = j;
60
+ ++TotNz;
61
+ }
62
+ }
63
+ }
64
+ // Reserve place for A + At
65
+ m_indexPtr.resize(m+1);
66
+ m_innerIndices.resize(TotNz);
67
+
68
+ // Now compute the real adjacency list of each column/row
69
+ visited.setConstant(-1);
70
+ StorageIndex CurNz = 0;
71
+ for (StorageIndex j = 0; j < m; j++)
72
+ {
73
+ m_indexPtr(j) = CurNz;
74
+
75
+ visited(j) = j; // Do not include the diagonal element
76
+ // Add the pattern of row/column j of A to A+At
77
+ for (typename MatrixType::InnerIterator it(A,j); it; ++it)
78
+ {
79
+ StorageIndex idx = it.index(); // Get the row index (for column major) or column index (for row major)
80
+ if (visited(idx) != j )
81
+ {
82
+ visited(idx) = j;
83
+ m_innerIndices(CurNz) = idx;
84
+ CurNz++;
85
+ }
86
+ }
87
+ //Add the pattern of row/column j of At to A+At
88
+ for (typename MatrixType::InnerIterator it(At, j); it; ++it)
89
+ {
90
+ StorageIndex idx = it.index();
91
+ if(visited(idx) != j)
92
+ {
93
+ visited(idx) = j;
94
+ m_innerIndices(CurNz) = idx;
95
+ ++CurNz;
96
+ }
97
+ }
98
+ }
99
+ m_indexPtr(m) = CurNz;
100
+ }
101
+
102
+ template <typename MatrixType>
103
+ void operator() (const MatrixType& A, PermutationType& matperm)
104
+ {
105
+ StorageIndex m = internal::convert_index<StorageIndex>(A.cols()); // must be StorageIndex, because it is passed by address to METIS
106
+ IndexVector perm(m),iperm(m);
107
+ // First, symmetrize the matrix graph.
108
+ get_symmetrized_graph(A);
109
+ int output_error;
110
+
111
+ // Call the fill-reducing routine from METIS
112
+ output_error = METIS_NodeND(&m, m_indexPtr.data(), m_innerIndices.data(), NULL, NULL, perm.data(), iperm.data());
113
+
114
+ if(output_error != METIS_OK)
115
+ {
116
+ //FIXME The ordering interface should define a class of possible errors
117
+ std::cerr << "ERROR WHILE CALLING THE METIS PACKAGE \n";
118
+ return;
119
+ }
120
+
121
+ // Get the fill-reducing permutation
122
+ //NOTE: If Ap is the permuted matrix then perm and iperm vectors are defined as follows
123
+ // Row (column) i of Ap is the perm(i) row(column) of A, and row (column) i of A is the iperm(i) row(column) of Ap
124
+
125
+ matperm.resize(m);
126
+ for (int j = 0; j < m; j++)
127
+ matperm.indices()(iperm(j)) = j;
128
+
129
+ }
130
+
131
+ protected:
132
+ IndexVector m_indexPtr; // Pointer to the adjacenccy list of each row/column
133
+ IndexVector m_innerIndices; // Adjacency list
134
+ };
135
+
136
+ }// end namespace eigen
137
+ #endif