tomoto 0.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 (420) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +123 -0
  5. data/ext/tomoto/ext.cpp +245 -0
  6. data/ext/tomoto/extconf.rb +28 -0
  7. data/lib/tomoto.rb +12 -0
  8. data/lib/tomoto/ct.rb +11 -0
  9. data/lib/tomoto/hdp.rb +11 -0
  10. data/lib/tomoto/lda.rb +67 -0
  11. data/lib/tomoto/version.rb +3 -0
  12. data/vendor/EigenRand/EigenRand/Core.h +1139 -0
  13. data/vendor/EigenRand/EigenRand/Dists/Basic.h +111 -0
  14. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +877 -0
  15. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +108 -0
  16. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +626 -0
  17. data/vendor/EigenRand/EigenRand/EigenRand +19 -0
  18. data/vendor/EigenRand/EigenRand/Macro.h +24 -0
  19. data/vendor/EigenRand/EigenRand/MorePacketMath.h +978 -0
  20. data/vendor/EigenRand/EigenRand/PacketFilter.h +286 -0
  21. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +624 -0
  22. data/vendor/EigenRand/EigenRand/RandUtils.h +413 -0
  23. data/vendor/EigenRand/EigenRand/doc.h +220 -0
  24. data/vendor/EigenRand/LICENSE +21 -0
  25. data/vendor/EigenRand/README.md +288 -0
  26. data/vendor/eigen/COPYING.BSD +26 -0
  27. data/vendor/eigen/COPYING.GPL +674 -0
  28. data/vendor/eigen/COPYING.LGPL +502 -0
  29. data/vendor/eigen/COPYING.MINPACK +52 -0
  30. data/vendor/eigen/COPYING.MPL2 +373 -0
  31. data/vendor/eigen/COPYING.README +18 -0
  32. data/vendor/eigen/Eigen/CMakeLists.txt +19 -0
  33. data/vendor/eigen/Eigen/Cholesky +46 -0
  34. data/vendor/eigen/Eigen/CholmodSupport +48 -0
  35. data/vendor/eigen/Eigen/Core +537 -0
  36. data/vendor/eigen/Eigen/Dense +7 -0
  37. data/vendor/eigen/Eigen/Eigen +2 -0
  38. data/vendor/eigen/Eigen/Eigenvalues +61 -0
  39. data/vendor/eigen/Eigen/Geometry +62 -0
  40. data/vendor/eigen/Eigen/Householder +30 -0
  41. data/vendor/eigen/Eigen/IterativeLinearSolvers +48 -0
  42. data/vendor/eigen/Eigen/Jacobi +33 -0
  43. data/vendor/eigen/Eigen/LU +50 -0
  44. data/vendor/eigen/Eigen/MetisSupport +35 -0
  45. data/vendor/eigen/Eigen/OrderingMethods +73 -0
  46. data/vendor/eigen/Eigen/PaStiXSupport +48 -0
  47. data/vendor/eigen/Eigen/PardisoSupport +35 -0
  48. data/vendor/eigen/Eigen/QR +51 -0
  49. data/vendor/eigen/Eigen/QtAlignedMalloc +40 -0
  50. data/vendor/eigen/Eigen/SPQRSupport +34 -0
  51. data/vendor/eigen/Eigen/SVD +51 -0
  52. data/vendor/eigen/Eigen/Sparse +36 -0
  53. data/vendor/eigen/Eigen/SparseCholesky +45 -0
  54. data/vendor/eigen/Eigen/SparseCore +69 -0
  55. data/vendor/eigen/Eigen/SparseLU +46 -0
  56. data/vendor/eigen/Eigen/SparseQR +37 -0
  57. data/vendor/eigen/Eigen/StdDeque +27 -0
  58. data/vendor/eigen/Eigen/StdList +26 -0
  59. data/vendor/eigen/Eigen/StdVector +27 -0
  60. data/vendor/eigen/Eigen/SuperLUSupport +64 -0
  61. data/vendor/eigen/Eigen/UmfPackSupport +40 -0
  62. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +673 -0
  63. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +542 -0
  64. data/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  65. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +639 -0
  66. data/vendor/eigen/Eigen/src/Core/Array.h +329 -0
  67. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +226 -0
  68. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +209 -0
  69. data/vendor/eigen/Eigen/src/Core/Assign.h +90 -0
  70. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +935 -0
  71. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +178 -0
  72. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +353 -0
  73. data/vendor/eigen/Eigen/src/Core/Block.h +452 -0
  74. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +164 -0
  75. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +160 -0
  76. data/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +175 -0
  77. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +1688 -0
  78. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +127 -0
  79. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +184 -0
  80. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +866 -0
  81. data/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  82. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  83. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +128 -0
  84. data/vendor/eigen/Eigen/src/Core/DenseBase.h +611 -0
  85. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +681 -0
  86. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +570 -0
  87. data/vendor/eigen/Eigen/src/Core/Diagonal.h +260 -0
  88. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +343 -0
  89. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +28 -0
  90. data/vendor/eigen/Eigen/src/Core/Dot.h +318 -0
  91. data/vendor/eigen/Eigen/src/Core/EigenBase.h +159 -0
  92. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  93. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +155 -0
  94. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +455 -0
  95. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +593 -0
  96. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +187 -0
  97. data/vendor/eigen/Eigen/src/Core/IO.h +225 -0
  98. data/vendor/eigen/Eigen/src/Core/Inverse.h +118 -0
  99. data/vendor/eigen/Eigen/src/Core/Map.h +171 -0
  100. data/vendor/eigen/Eigen/src/Core/MapBase.h +303 -0
  101. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +1415 -0
  102. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +101 -0
  103. data/vendor/eigen/Eigen/src/Core/Matrix.h +459 -0
  104. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +529 -0
  105. data/vendor/eigen/Eigen/src/Core/NestByValue.h +110 -0
  106. data/vendor/eigen/Eigen/src/Core/NoAlias.h +108 -0
  107. data/vendor/eigen/Eigen/src/Core/NumTraits.h +248 -0
  108. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +633 -0
  109. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1035 -0
  110. data/vendor/eigen/Eigen/src/Core/Product.h +186 -0
  111. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1112 -0
  112. data/vendor/eigen/Eigen/src/Core/Random.h +182 -0
  113. data/vendor/eigen/Eigen/src/Core/Redux.h +505 -0
  114. data/vendor/eigen/Eigen/src/Core/Ref.h +283 -0
  115. data/vendor/eigen/Eigen/src/Core/Replicate.h +142 -0
  116. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +117 -0
  117. data/vendor/eigen/Eigen/src/Core/Reverse.h +211 -0
  118. data/vendor/eigen/Eigen/src/Core/Select.h +162 -0
  119. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +352 -0
  120. data/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  121. data/vendor/eigen/Eigen/src/Core/Solve.h +188 -0
  122. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +235 -0
  123. data/vendor/eigen/Eigen/src/Core/SolverBase.h +130 -0
  124. data/vendor/eigen/Eigen/src/Core/StableNorm.h +221 -0
  125. data/vendor/eigen/Eigen/src/Core/Stride.h +111 -0
  126. data/vendor/eigen/Eigen/src/Core/Swap.h +67 -0
  127. data/vendor/eigen/Eigen/src/Core/Transpose.h +403 -0
  128. data/vendor/eigen/Eigen/src/Core/Transpositions.h +407 -0
  129. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +983 -0
  130. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +96 -0
  131. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +695 -0
  132. data/vendor/eigen/Eigen/src/Core/Visitor.h +273 -0
  133. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +451 -0
  134. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +439 -0
  135. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +637 -0
  136. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +51 -0
  137. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +391 -0
  138. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1316 -0
  139. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +430 -0
  140. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +322 -0
  141. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +1061 -0
  142. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +103 -0
  143. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +674 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +91 -0
  145. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +333 -0
  146. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +1124 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +212 -0
  148. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +29 -0
  149. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +49 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +490 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +91 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +760 -0
  153. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +471 -0
  154. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +562 -0
  155. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +895 -0
  156. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +77 -0
  157. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +397 -0
  158. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +137 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +945 -0
  160. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +168 -0
  161. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +475 -0
  162. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +188 -0
  163. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +136 -0
  164. data/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  165. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +792 -0
  166. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2156 -0
  167. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +492 -0
  168. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +311 -0
  169. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  170. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +122 -0
  171. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +619 -0
  172. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  173. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +163 -0
  174. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +521 -0
  175. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +287 -0
  176. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +260 -0
  177. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  178. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  179. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  180. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +466 -0
  181. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +315 -0
  182. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  183. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  184. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +335 -0
  185. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +163 -0
  186. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +145 -0
  187. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +398 -0
  188. data/vendor/eigen/Eigen/src/Core/util/Constants.h +547 -0
  189. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +83 -0
  190. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  191. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +130 -0
  192. data/vendor/eigen/Eigen/src/Core/util/Macros.h +1001 -0
  193. data/vendor/eigen/Eigen/src/Core/util/Memory.h +993 -0
  194. data/vendor/eigen/Eigen/src/Core/util/Meta.h +534 -0
  195. data/vendor/eigen/Eigen/src/Core/util/NonMPL2.h +3 -0
  196. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +27 -0
  197. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +218 -0
  198. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +821 -0
  199. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  200. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +459 -0
  201. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  202. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  203. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  204. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  205. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  206. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  207. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +654 -0
  208. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +546 -0
  209. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  210. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +870 -0
  211. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  212. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +556 -0
  213. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +392 -0
  214. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +247 -0
  215. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +114 -0
  216. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +497 -0
  217. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +282 -0
  218. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +234 -0
  219. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  220. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +814 -0
  221. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +199 -0
  222. data/vendor/eigen/Eigen/src/Geometry/RotationBase.h +206 -0
  223. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +170 -0
  224. data/vendor/eigen/Eigen/src/Geometry/Transform.h +1542 -0
  225. data/vendor/eigen/Eigen/src/Geometry/Translation.h +208 -0
  226. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +166 -0
  227. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +161 -0
  228. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +103 -0
  229. data/vendor/eigen/Eigen/src/Householder/Householder.h +172 -0
  230. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +470 -0
  231. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  232. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +228 -0
  233. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +246 -0
  234. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +400 -0
  235. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +462 -0
  236. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +394 -0
  237. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +216 -0
  238. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +115 -0
  239. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +462 -0
  240. data/vendor/eigen/Eigen/src/LU/Determinant.h +101 -0
  241. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +891 -0
  242. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +415 -0
  243. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +611 -0
  244. data/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  245. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +338 -0
  246. data/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  247. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +445 -0
  248. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1843 -0
  249. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +157 -0
  250. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  251. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +543 -0
  252. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +653 -0
  253. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  254. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +562 -0
  255. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +676 -0
  256. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +409 -0
  257. data/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  258. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +313 -0
  259. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1246 -0
  260. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +804 -0
  261. data/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  262. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +315 -0
  263. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  264. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +689 -0
  265. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  266. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +377 -0
  267. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +258 -0
  268. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  269. data/vendor/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  270. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +216 -0
  271. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +603 -0
  272. data/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  273. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +341 -0
  274. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +726 -0
  275. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +148 -0
  276. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +320 -0
  277. data/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  278. data/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +98 -0
  279. data/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  280. data/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +305 -0
  281. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1403 -0
  282. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +405 -0
  283. data/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  284. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +169 -0
  285. data/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +49 -0
  286. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +397 -0
  287. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +656 -0
  288. data/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  289. data/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  290. data/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  291. data/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  292. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +178 -0
  293. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +478 -0
  294. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +253 -0
  295. data/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  296. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +773 -0
  297. data/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  298. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  299. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  300. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +301 -0
  301. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  302. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  303. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  304. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  305. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  306. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  307. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  308. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  309. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  310. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  311. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  312. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  313. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +745 -0
  314. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +126 -0
  315. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +106 -0
  316. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +131 -0
  317. data/vendor/eigen/Eigen/src/StlSupport/details.h +84 -0
  318. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +1027 -0
  319. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +506 -0
  320. data/vendor/eigen/Eigen/src/misc/Image.h +82 -0
  321. data/vendor/eigen/Eigen/src/misc/Kernel.h +79 -0
  322. data/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +55 -0
  323. data/vendor/eigen/Eigen/src/misc/blas.h +440 -0
  324. data/vendor/eigen/Eigen/src/misc/lapack.h +152 -0
  325. data/vendor/eigen/Eigen/src/misc/lapacke.h +16291 -0
  326. data/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +17 -0
  327. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +332 -0
  328. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +552 -0
  329. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +1058 -0
  330. data/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  331. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +163 -0
  332. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  333. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +85 -0
  334. data/vendor/eigen/README.md +3 -0
  335. data/vendor/eigen/bench/README.txt +55 -0
  336. data/vendor/eigen/bench/btl/COPYING +340 -0
  337. data/vendor/eigen/bench/btl/README +154 -0
  338. data/vendor/eigen/bench/tensors/README +21 -0
  339. data/vendor/eigen/blas/README.txt +6 -0
  340. data/vendor/eigen/demos/mandelbrot/README +10 -0
  341. data/vendor/eigen/demos/mix_eigen_and_c/README +9 -0
  342. data/vendor/eigen/demos/opengl/README +13 -0
  343. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +1760 -0
  344. data/vendor/eigen/unsupported/README.txt +50 -0
  345. data/vendor/tomotopy/LICENSE +21 -0
  346. data/vendor/tomotopy/README.kr.rst +375 -0
  347. data/vendor/tomotopy/README.rst +382 -0
  348. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +362 -0
  349. data/vendor/tomotopy/src/Labeling/FoRelevance.h +88 -0
  350. data/vendor/tomotopy/src/Labeling/Labeler.h +50 -0
  351. data/vendor/tomotopy/src/TopicModel/CT.h +37 -0
  352. data/vendor/tomotopy/src/TopicModel/CTModel.cpp +13 -0
  353. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +293 -0
  354. data/vendor/tomotopy/src/TopicModel/DMR.h +51 -0
  355. data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +13 -0
  356. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +374 -0
  357. data/vendor/tomotopy/src/TopicModel/DT.h +65 -0
  358. data/vendor/tomotopy/src/TopicModel/DTM.h +22 -0
  359. data/vendor/tomotopy/src/TopicModel/DTModel.cpp +15 -0
  360. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +572 -0
  361. data/vendor/tomotopy/src/TopicModel/GDMR.h +37 -0
  362. data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +14 -0
  363. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +485 -0
  364. data/vendor/tomotopy/src/TopicModel/HDP.h +74 -0
  365. data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +13 -0
  366. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +592 -0
  367. data/vendor/tomotopy/src/TopicModel/HLDA.h +40 -0
  368. data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +13 -0
  369. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +681 -0
  370. data/vendor/tomotopy/src/TopicModel/HPA.h +27 -0
  371. data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +21 -0
  372. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +588 -0
  373. data/vendor/tomotopy/src/TopicModel/LDA.h +144 -0
  374. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +442 -0
  375. data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +13 -0
  376. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +1058 -0
  377. data/vendor/tomotopy/src/TopicModel/LLDA.h +45 -0
  378. data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +13 -0
  379. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +203 -0
  380. data/vendor/tomotopy/src/TopicModel/MGLDA.h +63 -0
  381. data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +17 -0
  382. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +558 -0
  383. data/vendor/tomotopy/src/TopicModel/PA.h +43 -0
  384. data/vendor/tomotopy/src/TopicModel/PAModel.cpp +13 -0
  385. data/vendor/tomotopy/src/TopicModel/PAModel.hpp +467 -0
  386. data/vendor/tomotopy/src/TopicModel/PLDA.h +17 -0
  387. data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +13 -0
  388. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +214 -0
  389. data/vendor/tomotopy/src/TopicModel/SLDA.h +54 -0
  390. data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +17 -0
  391. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +456 -0
  392. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +692 -0
  393. data/vendor/tomotopy/src/Utils/AliasMethod.hpp +169 -0
  394. data/vendor/tomotopy/src/Utils/Dictionary.h +80 -0
  395. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +181 -0
  396. data/vendor/tomotopy/src/Utils/LBFGS.h +202 -0
  397. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBacktracking.h +120 -0
  398. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBracketing.h +122 -0
  399. data/vendor/tomotopy/src/Utils/LBFGS/Param.h +213 -0
  400. data/vendor/tomotopy/src/Utils/LUT.hpp +82 -0
  401. data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +69 -0
  402. data/vendor/tomotopy/src/Utils/PolyaGamma.hpp +200 -0
  403. data/vendor/tomotopy/src/Utils/PolyaGammaHybrid.hpp +672 -0
  404. data/vendor/tomotopy/src/Utils/ThreadPool.hpp +150 -0
  405. data/vendor/tomotopy/src/Utils/Trie.hpp +220 -0
  406. data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +94 -0
  407. data/vendor/tomotopy/src/Utils/Utils.hpp +337 -0
  408. data/vendor/tomotopy/src/Utils/avx_gamma.h +46 -0
  409. data/vendor/tomotopy/src/Utils/avx_mathfun.h +736 -0
  410. data/vendor/tomotopy/src/Utils/exception.h +28 -0
  411. data/vendor/tomotopy/src/Utils/math.h +281 -0
  412. data/vendor/tomotopy/src/Utils/rtnorm.hpp +2690 -0
  413. data/vendor/tomotopy/src/Utils/sample.hpp +192 -0
  414. data/vendor/tomotopy/src/Utils/serializer.hpp +695 -0
  415. data/vendor/tomotopy/src/Utils/slp.hpp +131 -0
  416. data/vendor/tomotopy/src/Utils/sse_gamma.h +48 -0
  417. data/vendor/tomotopy/src/Utils/sse_mathfun.h +710 -0
  418. data/vendor/tomotopy/src/Utils/text.hpp +49 -0
  419. data/vendor/tomotopy/src/Utils/tvector.hpp +543 -0
  420. metadata +531 -0
@@ -0,0 +1,653 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
12
+ #define EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+ template<typename _MatrixType> struct traits<ColPivHouseholderQR<_MatrixType> >
18
+ : traits<_MatrixType>
19
+ {
20
+ enum { Flags = 0 };
21
+ };
22
+
23
+ } // end namespace internal
24
+
25
+ /** \ingroup QR_Module
26
+ *
27
+ * \class ColPivHouseholderQR
28
+ *
29
+ * \brief Householder rank-revealing QR decomposition of a matrix with column-pivoting
30
+ *
31
+ * \tparam _MatrixType the type of the matrix of which we are computing the QR decomposition
32
+ *
33
+ * This class performs a rank-revealing QR decomposition of a matrix \b A into matrices \b P, \b Q and \b R
34
+ * such that
35
+ * \f[
36
+ * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \, \mathbf{R}
37
+ * \f]
38
+ * by using Householder transformations. Here, \b P is a permutation matrix, \b Q a unitary matrix and \b R an
39
+ * upper triangular matrix.
40
+ *
41
+ * This decomposition performs column pivoting in order to be rank-revealing and improve
42
+ * numerical stability. It is slower than HouseholderQR, and faster than FullPivHouseholderQR.
43
+ *
44
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
45
+ *
46
+ * \sa MatrixBase::colPivHouseholderQr()
47
+ */
48
+ template<typename _MatrixType> class ColPivHouseholderQR
49
+ {
50
+ public:
51
+
52
+ typedef _MatrixType MatrixType;
53
+ enum {
54
+ RowsAtCompileTime = MatrixType::RowsAtCompileTime,
55
+ ColsAtCompileTime = MatrixType::ColsAtCompileTime,
56
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
57
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
58
+ };
59
+ typedef typename MatrixType::Scalar Scalar;
60
+ typedef typename MatrixType::RealScalar RealScalar;
61
+ // FIXME should be int
62
+ typedef typename MatrixType::StorageIndex StorageIndex;
63
+ typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
64
+ typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime> PermutationType;
65
+ typedef typename internal::plain_row_type<MatrixType, Index>::type IntRowVectorType;
66
+ typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
67
+ typedef typename internal::plain_row_type<MatrixType, RealScalar>::type RealRowVectorType;
68
+ typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename HCoeffsType::ConjugateReturnType>::type> HouseholderSequenceType;
69
+ typedef typename MatrixType::PlainObject PlainObject;
70
+
71
+ private:
72
+
73
+ typedef typename PermutationType::StorageIndex PermIndexType;
74
+
75
+ public:
76
+
77
+ /**
78
+ * \brief Default Constructor.
79
+ *
80
+ * The default constructor is useful in cases in which the user intends to
81
+ * perform decompositions via ColPivHouseholderQR::compute(const MatrixType&).
82
+ */
83
+ ColPivHouseholderQR()
84
+ : m_qr(),
85
+ m_hCoeffs(),
86
+ m_colsPermutation(),
87
+ m_colsTranspositions(),
88
+ m_temp(),
89
+ m_colNormsUpdated(),
90
+ m_colNormsDirect(),
91
+ m_isInitialized(false),
92
+ m_usePrescribedThreshold(false) {}
93
+
94
+ /** \brief Default Constructor with memory preallocation
95
+ *
96
+ * Like the default constructor but with preallocation of the internal data
97
+ * according to the specified problem \a size.
98
+ * \sa ColPivHouseholderQR()
99
+ */
100
+ ColPivHouseholderQR(Index rows, Index cols)
101
+ : m_qr(rows, cols),
102
+ m_hCoeffs((std::min)(rows,cols)),
103
+ m_colsPermutation(PermIndexType(cols)),
104
+ m_colsTranspositions(cols),
105
+ m_temp(cols),
106
+ m_colNormsUpdated(cols),
107
+ m_colNormsDirect(cols),
108
+ m_isInitialized(false),
109
+ m_usePrescribedThreshold(false) {}
110
+
111
+ /** \brief Constructs a QR factorization from a given matrix
112
+ *
113
+ * This constructor computes the QR factorization of the matrix \a matrix by calling
114
+ * the method compute(). It is a short cut for:
115
+ *
116
+ * \code
117
+ * ColPivHouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
118
+ * qr.compute(matrix);
119
+ * \endcode
120
+ *
121
+ * \sa compute()
122
+ */
123
+ template<typename InputType>
124
+ explicit ColPivHouseholderQR(const EigenBase<InputType>& matrix)
125
+ : m_qr(matrix.rows(), matrix.cols()),
126
+ m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
127
+ m_colsPermutation(PermIndexType(matrix.cols())),
128
+ m_colsTranspositions(matrix.cols()),
129
+ m_temp(matrix.cols()),
130
+ m_colNormsUpdated(matrix.cols()),
131
+ m_colNormsDirect(matrix.cols()),
132
+ m_isInitialized(false),
133
+ m_usePrescribedThreshold(false)
134
+ {
135
+ compute(matrix.derived());
136
+ }
137
+
138
+ /** \brief Constructs a QR factorization from a given matrix
139
+ *
140
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
141
+ *
142
+ * \sa ColPivHouseholderQR(const EigenBase&)
143
+ */
144
+ template<typename InputType>
145
+ explicit ColPivHouseholderQR(EigenBase<InputType>& matrix)
146
+ : m_qr(matrix.derived()),
147
+ m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
148
+ m_colsPermutation(PermIndexType(matrix.cols())),
149
+ m_colsTranspositions(matrix.cols()),
150
+ m_temp(matrix.cols()),
151
+ m_colNormsUpdated(matrix.cols()),
152
+ m_colNormsDirect(matrix.cols()),
153
+ m_isInitialized(false),
154
+ m_usePrescribedThreshold(false)
155
+ {
156
+ computeInPlace();
157
+ }
158
+
159
+ /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
160
+ * *this is the QR decomposition, if any exists.
161
+ *
162
+ * \param b the right-hand-side of the equation to solve.
163
+ *
164
+ * \returns a solution.
165
+ *
166
+ * \note_about_checking_solutions
167
+ *
168
+ * \note_about_arbitrary_choice_of_solution
169
+ *
170
+ * Example: \include ColPivHouseholderQR_solve.cpp
171
+ * Output: \verbinclude ColPivHouseholderQR_solve.out
172
+ */
173
+ template<typename Rhs>
174
+ inline const Solve<ColPivHouseholderQR, Rhs>
175
+ solve(const MatrixBase<Rhs>& b) const
176
+ {
177
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
178
+ return Solve<ColPivHouseholderQR, Rhs>(*this, b.derived());
179
+ }
180
+
181
+ HouseholderSequenceType householderQ() const;
182
+ HouseholderSequenceType matrixQ() const
183
+ {
184
+ return householderQ();
185
+ }
186
+
187
+ /** \returns a reference to the matrix where the Householder QR decomposition is stored
188
+ */
189
+ const MatrixType& matrixQR() const
190
+ {
191
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
192
+ return m_qr;
193
+ }
194
+
195
+ /** \returns a reference to the matrix where the result Householder QR is stored
196
+ * \warning The strict lower part of this matrix contains internal values.
197
+ * Only the upper triangular part should be referenced. To get it, use
198
+ * \code matrixR().template triangularView<Upper>() \endcode
199
+ * For rank-deficient matrices, use
200
+ * \code
201
+ * matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
202
+ * \endcode
203
+ */
204
+ const MatrixType& matrixR() const
205
+ {
206
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
207
+ return m_qr;
208
+ }
209
+
210
+ template<typename InputType>
211
+ ColPivHouseholderQR& compute(const EigenBase<InputType>& matrix);
212
+
213
+ /** \returns a const reference to the column permutation matrix */
214
+ const PermutationType& colsPermutation() const
215
+ {
216
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
217
+ return m_colsPermutation;
218
+ }
219
+
220
+ /** \returns the absolute value of the determinant of the matrix of which
221
+ * *this is the QR decomposition. It has only linear complexity
222
+ * (that is, O(n) where n is the dimension of the square matrix)
223
+ * as the QR decomposition has already been computed.
224
+ *
225
+ * \note This is only for square matrices.
226
+ *
227
+ * \warning a determinant can be very big or small, so for matrices
228
+ * of large enough dimension, there is a risk of overflow/underflow.
229
+ * One way to work around that is to use logAbsDeterminant() instead.
230
+ *
231
+ * \sa logAbsDeterminant(), MatrixBase::determinant()
232
+ */
233
+ typename MatrixType::RealScalar absDeterminant() const;
234
+
235
+ /** \returns the natural log of the absolute value of the determinant of the matrix of which
236
+ * *this is the QR decomposition. It has only linear complexity
237
+ * (that is, O(n) where n is the dimension of the square matrix)
238
+ * as the QR decomposition has already been computed.
239
+ *
240
+ * \note This is only for square matrices.
241
+ *
242
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
243
+ * to determinant computation.
244
+ *
245
+ * \sa absDeterminant(), MatrixBase::determinant()
246
+ */
247
+ typename MatrixType::RealScalar logAbsDeterminant() const;
248
+
249
+ /** \returns the rank of the matrix of which *this is the QR decomposition.
250
+ *
251
+ * \note This method has to determine which pivots should be considered nonzero.
252
+ * For that, it uses the threshold value that you can control by calling
253
+ * setThreshold(const RealScalar&).
254
+ */
255
+ inline Index rank() const
256
+ {
257
+ using std::abs;
258
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
259
+ RealScalar premultiplied_threshold = abs(m_maxpivot) * threshold();
260
+ Index result = 0;
261
+ for(Index i = 0; i < m_nonzero_pivots; ++i)
262
+ result += (abs(m_qr.coeff(i,i)) > premultiplied_threshold);
263
+ return result;
264
+ }
265
+
266
+ /** \returns the dimension of the kernel of the matrix of which *this is the QR decomposition.
267
+ *
268
+ * \note This method has to determine which pivots should be considered nonzero.
269
+ * For that, it uses the threshold value that you can control by calling
270
+ * setThreshold(const RealScalar&).
271
+ */
272
+ inline Index dimensionOfKernel() const
273
+ {
274
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
275
+ return cols() - rank();
276
+ }
277
+
278
+ /** \returns true if the matrix of which *this is the QR decomposition represents an injective
279
+ * linear map, i.e. has trivial kernel; false otherwise.
280
+ *
281
+ * \note This method has to determine which pivots should be considered nonzero.
282
+ * For that, it uses the threshold value that you can control by calling
283
+ * setThreshold(const RealScalar&).
284
+ */
285
+ inline bool isInjective() const
286
+ {
287
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
288
+ return rank() == cols();
289
+ }
290
+
291
+ /** \returns true if the matrix of which *this is the QR decomposition represents a surjective
292
+ * linear map; false otherwise.
293
+ *
294
+ * \note This method has to determine which pivots should be considered nonzero.
295
+ * For that, it uses the threshold value that you can control by calling
296
+ * setThreshold(const RealScalar&).
297
+ */
298
+ inline bool isSurjective() const
299
+ {
300
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
301
+ return rank() == rows();
302
+ }
303
+
304
+ /** \returns true if the matrix of which *this is the QR decomposition is invertible.
305
+ *
306
+ * \note This method has to determine which pivots should be considered nonzero.
307
+ * For that, it uses the threshold value that you can control by calling
308
+ * setThreshold(const RealScalar&).
309
+ */
310
+ inline bool isInvertible() const
311
+ {
312
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
313
+ return isInjective() && isSurjective();
314
+ }
315
+
316
+ /** \returns the inverse of the matrix of which *this is the QR decomposition.
317
+ *
318
+ * \note If this matrix is not invertible, the returned matrix has undefined coefficients.
319
+ * Use isInvertible() to first determine whether this matrix is invertible.
320
+ */
321
+ inline const Inverse<ColPivHouseholderQR> inverse() const
322
+ {
323
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
324
+ return Inverse<ColPivHouseholderQR>(*this);
325
+ }
326
+
327
+ inline Index rows() const { return m_qr.rows(); }
328
+ inline Index cols() const { return m_qr.cols(); }
329
+
330
+ /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
331
+ *
332
+ * For advanced uses only.
333
+ */
334
+ const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
335
+
336
+ /** Allows to prescribe a threshold to be used by certain methods, such as rank(),
337
+ * who need to determine when pivots are to be considered nonzero. This is not used for the
338
+ * QR decomposition itself.
339
+ *
340
+ * When it needs to get the threshold value, Eigen calls threshold(). By default, this
341
+ * uses a formula to automatically determine a reasonable threshold.
342
+ * Once you have called the present method setThreshold(const RealScalar&),
343
+ * your value is used instead.
344
+ *
345
+ * \param threshold The new value to use as the threshold.
346
+ *
347
+ * A pivot will be considered nonzero if its absolute value is strictly greater than
348
+ * \f$ \vert pivot \vert \leqslant threshold \times \vert maxpivot \vert \f$
349
+ * where maxpivot is the biggest pivot.
350
+ *
351
+ * If you want to come back to the default behavior, call setThreshold(Default_t)
352
+ */
353
+ ColPivHouseholderQR& setThreshold(const RealScalar& threshold)
354
+ {
355
+ m_usePrescribedThreshold = true;
356
+ m_prescribedThreshold = threshold;
357
+ return *this;
358
+ }
359
+
360
+ /** Allows to come back to the default behavior, letting Eigen use its default formula for
361
+ * determining the threshold.
362
+ *
363
+ * You should pass the special object Eigen::Default as parameter here.
364
+ * \code qr.setThreshold(Eigen::Default); \endcode
365
+ *
366
+ * See the documentation of setThreshold(const RealScalar&).
367
+ */
368
+ ColPivHouseholderQR& setThreshold(Default_t)
369
+ {
370
+ m_usePrescribedThreshold = false;
371
+ return *this;
372
+ }
373
+
374
+ /** Returns the threshold that will be used by certain methods such as rank().
375
+ *
376
+ * See the documentation of setThreshold(const RealScalar&).
377
+ */
378
+ RealScalar threshold() const
379
+ {
380
+ eigen_assert(m_isInitialized || m_usePrescribedThreshold);
381
+ return m_usePrescribedThreshold ? m_prescribedThreshold
382
+ // this formula comes from experimenting (see "LU precision tuning" thread on the list)
383
+ // and turns out to be identical to Higham's formula used already in LDLt.
384
+ : NumTraits<Scalar>::epsilon() * RealScalar(m_qr.diagonalSize());
385
+ }
386
+
387
+ /** \returns the number of nonzero pivots in the QR decomposition.
388
+ * Here nonzero is meant in the exact sense, not in a fuzzy sense.
389
+ * So that notion isn't really intrinsically interesting, but it is
390
+ * still useful when implementing algorithms.
391
+ *
392
+ * \sa rank()
393
+ */
394
+ inline Index nonzeroPivots() const
395
+ {
396
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
397
+ return m_nonzero_pivots;
398
+ }
399
+
400
+ /** \returns the absolute value of the biggest pivot, i.e. the biggest
401
+ * diagonal coefficient of R.
402
+ */
403
+ RealScalar maxPivot() const { return m_maxpivot; }
404
+
405
+ /** \brief Reports whether the QR factorization was succesful.
406
+ *
407
+ * \note This function always returns \c Success. It is provided for compatibility
408
+ * with other factorization routines.
409
+ * \returns \c Success
410
+ */
411
+ ComputationInfo info() const
412
+ {
413
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
414
+ return Success;
415
+ }
416
+
417
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
418
+ template<typename RhsType, typename DstType>
419
+ EIGEN_DEVICE_FUNC
420
+ void _solve_impl(const RhsType &rhs, DstType &dst) const;
421
+ #endif
422
+
423
+ protected:
424
+
425
+ friend class CompleteOrthogonalDecomposition<MatrixType>;
426
+
427
+ static void check_template_parameters()
428
+ {
429
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
430
+ }
431
+
432
+ void computeInPlace();
433
+
434
+ MatrixType m_qr;
435
+ HCoeffsType m_hCoeffs;
436
+ PermutationType m_colsPermutation;
437
+ IntRowVectorType m_colsTranspositions;
438
+ RowVectorType m_temp;
439
+ RealRowVectorType m_colNormsUpdated;
440
+ RealRowVectorType m_colNormsDirect;
441
+ bool m_isInitialized, m_usePrescribedThreshold;
442
+ RealScalar m_prescribedThreshold, m_maxpivot;
443
+ Index m_nonzero_pivots;
444
+ Index m_det_pq;
445
+ };
446
+
447
+ template<typename MatrixType>
448
+ typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType>::absDeterminant() const
449
+ {
450
+ using std::abs;
451
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
452
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
453
+ return abs(m_qr.diagonal().prod());
454
+ }
455
+
456
+ template<typename MatrixType>
457
+ typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType>::logAbsDeterminant() const
458
+ {
459
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
460
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
461
+ return m_qr.diagonal().cwiseAbs().array().log().sum();
462
+ }
463
+
464
+ /** Performs the QR factorization of the given matrix \a matrix. The result of
465
+ * the factorization is stored into \c *this, and a reference to \c *this
466
+ * is returned.
467
+ *
468
+ * \sa class ColPivHouseholderQR, ColPivHouseholderQR(const MatrixType&)
469
+ */
470
+ template<typename MatrixType>
471
+ template<typename InputType>
472
+ ColPivHouseholderQR<MatrixType>& ColPivHouseholderQR<MatrixType>::compute(const EigenBase<InputType>& matrix)
473
+ {
474
+ m_qr = matrix.derived();
475
+ computeInPlace();
476
+ return *this;
477
+ }
478
+
479
+ template<typename MatrixType>
480
+ void ColPivHouseholderQR<MatrixType>::computeInPlace()
481
+ {
482
+ check_template_parameters();
483
+
484
+ // the column permutation is stored as int indices, so just to be sure:
485
+ eigen_assert(m_qr.cols()<=NumTraits<int>::highest());
486
+
487
+ using std::abs;
488
+
489
+ Index rows = m_qr.rows();
490
+ Index cols = m_qr.cols();
491
+ Index size = m_qr.diagonalSize();
492
+
493
+ m_hCoeffs.resize(size);
494
+
495
+ m_temp.resize(cols);
496
+
497
+ m_colsTranspositions.resize(m_qr.cols());
498
+ Index number_of_transpositions = 0;
499
+
500
+ m_colNormsUpdated.resize(cols);
501
+ m_colNormsDirect.resize(cols);
502
+ for (Index k = 0; k < cols; ++k) {
503
+ // colNormsDirect(k) caches the most recent directly computed norm of
504
+ // column k.
505
+ m_colNormsDirect.coeffRef(k) = m_qr.col(k).norm();
506
+ m_colNormsUpdated.coeffRef(k) = m_colNormsDirect.coeffRef(k);
507
+ }
508
+
509
+ RealScalar threshold_helper = numext::abs2<RealScalar>(m_colNormsUpdated.maxCoeff() * NumTraits<RealScalar>::epsilon()) / RealScalar(rows);
510
+ RealScalar norm_downdate_threshold = numext::sqrt(NumTraits<RealScalar>::epsilon());
511
+
512
+ m_nonzero_pivots = size; // the generic case is that in which all pivots are nonzero (invertible case)
513
+ m_maxpivot = RealScalar(0);
514
+
515
+ for(Index k = 0; k < size; ++k)
516
+ {
517
+ // first, we look up in our table m_colNormsUpdated which column has the biggest norm
518
+ Index biggest_col_index;
519
+ RealScalar biggest_col_sq_norm = numext::abs2(m_colNormsUpdated.tail(cols-k).maxCoeff(&biggest_col_index));
520
+ biggest_col_index += k;
521
+
522
+ // Track the number of meaningful pivots but do not stop the decomposition to make
523
+ // sure that the initial matrix is properly reproduced. See bug 941.
524
+ if(m_nonzero_pivots==size && biggest_col_sq_norm < threshold_helper * RealScalar(rows-k))
525
+ m_nonzero_pivots = k;
526
+
527
+ // apply the transposition to the columns
528
+ m_colsTranspositions.coeffRef(k) = biggest_col_index;
529
+ if(k != biggest_col_index) {
530
+ m_qr.col(k).swap(m_qr.col(biggest_col_index));
531
+ std::swap(m_colNormsUpdated.coeffRef(k), m_colNormsUpdated.coeffRef(biggest_col_index));
532
+ std::swap(m_colNormsDirect.coeffRef(k), m_colNormsDirect.coeffRef(biggest_col_index));
533
+ ++number_of_transpositions;
534
+ }
535
+
536
+ // generate the householder vector, store it below the diagonal
537
+ RealScalar beta;
538
+ m_qr.col(k).tail(rows-k).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta);
539
+
540
+ // apply the householder transformation to the diagonal coefficient
541
+ m_qr.coeffRef(k,k) = beta;
542
+
543
+ // remember the maximum absolute value of diagonal coefficients
544
+ if(abs(beta) > m_maxpivot) m_maxpivot = abs(beta);
545
+
546
+ // apply the householder transformation
547
+ m_qr.bottomRightCorner(rows-k, cols-k-1)
548
+ .applyHouseholderOnTheLeft(m_qr.col(k).tail(rows-k-1), m_hCoeffs.coeffRef(k), &m_temp.coeffRef(k+1));
549
+
550
+ // update our table of norms of the columns
551
+ for (Index j = k + 1; j < cols; ++j) {
552
+ // The following implements the stable norm downgrade step discussed in
553
+ // http://www.netlib.org/lapack/lawnspdf/lawn176.pdf
554
+ // and used in LAPACK routines xGEQPF and xGEQP3.
555
+ // See lines 278-297 in http://www.netlib.org/lapack/explore-html/dc/df4/sgeqpf_8f_source.html
556
+ if (m_colNormsUpdated.coeffRef(j) != RealScalar(0)) {
557
+ RealScalar temp = abs(m_qr.coeffRef(k, j)) / m_colNormsUpdated.coeffRef(j);
558
+ temp = (RealScalar(1) + temp) * (RealScalar(1) - temp);
559
+ temp = temp < RealScalar(0) ? RealScalar(0) : temp;
560
+ RealScalar temp2 = temp * numext::abs2<RealScalar>(m_colNormsUpdated.coeffRef(j) /
561
+ m_colNormsDirect.coeffRef(j));
562
+ if (temp2 <= norm_downdate_threshold) {
563
+ // The updated norm has become too inaccurate so re-compute the column
564
+ // norm directly.
565
+ m_colNormsDirect.coeffRef(j) = m_qr.col(j).tail(rows - k - 1).norm();
566
+ m_colNormsUpdated.coeffRef(j) = m_colNormsDirect.coeffRef(j);
567
+ } else {
568
+ m_colNormsUpdated.coeffRef(j) *= numext::sqrt(temp);
569
+ }
570
+ }
571
+ }
572
+ }
573
+
574
+ m_colsPermutation.setIdentity(PermIndexType(cols));
575
+ for(PermIndexType k = 0; k < size/*m_nonzero_pivots*/; ++k)
576
+ m_colsPermutation.applyTranspositionOnTheRight(k, PermIndexType(m_colsTranspositions.coeff(k)));
577
+
578
+ m_det_pq = (number_of_transpositions%2) ? -1 : 1;
579
+ m_isInitialized = true;
580
+ }
581
+
582
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
583
+ template<typename _MatrixType>
584
+ template<typename RhsType, typename DstType>
585
+ void ColPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
586
+ {
587
+ eigen_assert(rhs.rows() == rows());
588
+
589
+ const Index nonzero_pivots = nonzeroPivots();
590
+
591
+ if(nonzero_pivots == 0)
592
+ {
593
+ dst.setZero();
594
+ return;
595
+ }
596
+
597
+ typename RhsType::PlainObject c(rhs);
598
+
599
+ // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T
600
+ c.applyOnTheLeft(householderSequence(m_qr, m_hCoeffs)
601
+ .setLength(nonzero_pivots)
602
+ .transpose()
603
+ );
604
+
605
+ m_qr.topLeftCorner(nonzero_pivots, nonzero_pivots)
606
+ .template triangularView<Upper>()
607
+ .solveInPlace(c.topRows(nonzero_pivots));
608
+
609
+ for(Index i = 0; i < nonzero_pivots; ++i) dst.row(m_colsPermutation.indices().coeff(i)) = c.row(i);
610
+ for(Index i = nonzero_pivots; i < cols(); ++i) dst.row(m_colsPermutation.indices().coeff(i)).setZero();
611
+ }
612
+ #endif
613
+
614
+ namespace internal {
615
+
616
+ template<typename DstXprType, typename MatrixType>
617
+ struct Assignment<DstXprType, Inverse<ColPivHouseholderQR<MatrixType> >, internal::assign_op<typename DstXprType::Scalar,typename ColPivHouseholderQR<MatrixType>::Scalar>, Dense2Dense>
618
+ {
619
+ typedef ColPivHouseholderQR<MatrixType> QrType;
620
+ typedef Inverse<QrType> SrcXprType;
621
+ static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename QrType::Scalar> &)
622
+ {
623
+ dst = src.nestedExpression().solve(MatrixType::Identity(src.rows(), src.cols()));
624
+ }
625
+ };
626
+
627
+ } // end namespace internal
628
+
629
+ /** \returns the matrix Q as a sequence of householder transformations.
630
+ * You can extract the meaningful part only by using:
631
+ * \code qr.householderQ().setLength(qr.nonzeroPivots()) \endcode*/
632
+ template<typename MatrixType>
633
+ typename ColPivHouseholderQR<MatrixType>::HouseholderSequenceType ColPivHouseholderQR<MatrixType>
634
+ ::householderQ() const
635
+ {
636
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
637
+ return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
638
+ }
639
+
640
+ /** \return the column-pivoting Householder QR decomposition of \c *this.
641
+ *
642
+ * \sa class ColPivHouseholderQR
643
+ */
644
+ template<typename Derived>
645
+ const ColPivHouseholderQR<typename MatrixBase<Derived>::PlainObject>
646
+ MatrixBase<Derived>::colPivHouseholderQr() const
647
+ {
648
+ return ColPivHouseholderQR<PlainObject>(eval());
649
+ }
650
+
651
+ } // end namespace Eigen
652
+
653
+ #endif // EIGEN_COLPIVOTINGHOUSEHOLDERQR_H