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,169 @@
1
+ #pragma once
2
+ #include <memory>
3
+ #include <iterator>
4
+ #include <limits>
5
+
6
+ namespace tomoto
7
+ {
8
+ namespace sample
9
+ {
10
+ template<typename _Precision = uint32_t>
11
+ class AliasMethod
12
+ {
13
+ std::unique_ptr<_Precision[]> arr;
14
+ std::unique_ptr<size_t[]> alias;
15
+ size_t msize = 0, bitsize = 0;
16
+
17
+ public:
18
+ AliasMethod()
19
+ {
20
+ }
21
+
22
+ AliasMethod(const AliasMethod& o)
23
+ {
24
+ operator=(o);
25
+ }
26
+
27
+ AliasMethod(AliasMethod&& o)
28
+ {
29
+ operator=(o);
30
+ }
31
+
32
+ AliasMethod& operator=(const AliasMethod& o)
33
+ {
34
+ msize = o.msize;
35
+ bitsize = o.bitsize;
36
+ if (msize)
37
+ {
38
+ arr = make_unique<_Precision[]>(1 << bitsize);
39
+ alias = make_unique<size_t[]>(1 << bitsize);
40
+
41
+ std::copy(o.arr.get(), o.arr.get() + (1 << bitsize), arr.get());
42
+ std::copy(o.alias.get(), o.alias.get() + (1 << bitsize), alias.get());
43
+ }
44
+ return *this;
45
+ }
46
+
47
+ AliasMethod& operator=(AliasMethod&& o)
48
+ {
49
+ msize = o.msize;
50
+ bitsize = o.bitsize;
51
+ std::swap(arr, o.arr);
52
+ std::swap(alias, o.alias);
53
+ return *this;
54
+ }
55
+
56
+ template<typename _Iter>
57
+ AliasMethod(_Iter first, _Iter last)
58
+ {
59
+ buildTable(first, last);
60
+ }
61
+
62
+ template<typename _Iter>
63
+ void buildTable(_Iter first, _Iter last)
64
+ {
65
+ size_t psize, nbsize;
66
+ msize = 0;
67
+ double sum = 0;
68
+ for (auto it = first; it != last; ++it, ++msize)
69
+ {
70
+ sum += *it;
71
+ }
72
+
73
+ if (!std::isfinite(sum)) THROW_ERROR_WITH_INFO(exception::InvalidArgument, "cannot build NaN value distribution");
74
+
75
+ // ceil to power of 2
76
+ nbsize = log2_ceil(msize);
77
+ psize = (size_t)1 << nbsize;
78
+
79
+ if (nbsize != bitsize)
80
+ {
81
+ arr = make_unique<_Precision[]>(psize);
82
+ std::fill(arr.get(), arr.get() + psize, 0);
83
+ alias = make_unique<size_t[]>(psize);
84
+ bitsize = nbsize;
85
+ }
86
+
87
+ sum /= psize;
88
+
89
+ auto f = make_unique<double[]>(psize);
90
+ auto pf = f.get();
91
+ for (auto it = first; it != last; ++it, ++pf)
92
+ {
93
+ *pf = *it / sum;
94
+ }
95
+ std::fill(pf, pf + psize - msize, 0);
96
+
97
+ size_t over = 0, under = 0, mm;
98
+ while (over < psize && f[over] < 1) ++over;
99
+ while (under < psize && f[under] >= 1) ++under;
100
+ mm = under + 1;
101
+
102
+ while (over < psize && under < psize)
103
+ {
104
+ arr[under] = f[under] * (std::numeric_limits<_Precision>::max() + 1.0);
105
+ alias[under] = over;
106
+ f[over] += f[under] - 1;
107
+ if (f[over] >= 1 || mm <= over)
108
+ {
109
+ for (under = mm; under < psize && f[under] >= 1; ++under);
110
+ mm = under + 1;
111
+ }
112
+ else
113
+ {
114
+ under = over;
115
+ }
116
+
117
+ while (over < psize && f[over] < 1) ++over;
118
+ }
119
+
120
+ for (; over < psize; ++over)
121
+ {
122
+ if (f[over] >= 1)
123
+ {
124
+ arr[over] = std::numeric_limits<_Precision>::max();
125
+ alias[over] = over;
126
+ }
127
+ }
128
+
129
+ if (under < psize)
130
+ {
131
+ arr[under] = std::numeric_limits<_Precision>::max();
132
+ alias[under] = under;
133
+ for (under = mm; under < msize; ++under)
134
+ {
135
+ if (f[under] < 1)
136
+ {
137
+ arr[under] = std::numeric_limits<_Precision>::max();
138
+ alias[under] = under;
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ template<typename _Rng>
145
+ size_t operator()(_Rng& rng) const
146
+ {
147
+ auto x = rng();
148
+ size_t a;
149
+ if (sizeof(_Precision) < sizeof(typename _Rng::result_type))
150
+ {
151
+ a = x >> (sizeof(x) * 8 - bitsize);
152
+ }
153
+ else
154
+ {
155
+ a = rng() & ((1 << bitsize) - 1);
156
+ }
157
+
158
+ _Precision b = (_Precision)x;
159
+ if (b < arr[a])
160
+ {
161
+ assert(a < msize);
162
+ return a;
163
+ }
164
+ assert(alias[a] < msize);
165
+ return alias[a];
166
+ }
167
+ };
168
+ }
169
+ }
@@ -0,0 +1,80 @@
1
+ #pragma once
2
+ #include <random>
3
+ #include <exception>
4
+ #include <unordered_map>
5
+ #include <vector>
6
+ #include <iostream>
7
+ #include <sstream>
8
+ #include <cassert>
9
+ #include "serializer.hpp"
10
+
11
+ namespace tomoto
12
+ {
13
+ using Vid = uint32_t;
14
+ using Tid = uint16_t;
15
+ using Float = float;
16
+
17
+ class Dictionary
18
+ {
19
+ protected:
20
+ std::unordered_map<std::string, Vid> dict;
21
+ std::vector<std::string> id2word;
22
+ public:
23
+ Vid add(const std::string& word)
24
+ {
25
+ auto it = dict.find(word);
26
+ if (it == dict.end())
27
+ {
28
+ dict.emplace(std::make_pair(word, dict.size()));
29
+ id2word.emplace_back(word);
30
+ return (Vid)(dict.size() - 1);
31
+ }
32
+ return it->second;
33
+ }
34
+
35
+ size_t size() const { return dict.size(); }
36
+
37
+ std::string toWord(Vid vid) const
38
+ {
39
+ assert(vid < id2word.size());
40
+ return id2word[vid];
41
+ }
42
+
43
+ Vid toWid(const std::string& word) const
44
+ {
45
+ auto it = dict.find(word);
46
+ if (it == dict.end()) return (Vid)-1;
47
+ return it->second;
48
+ }
49
+
50
+ void serializerWrite(std::ostream& writer) const
51
+ {
52
+ serializer::writeMany(writer, serializer::to_key("Dict"), id2word);
53
+ }
54
+
55
+ void serializerRead(std::istream& reader)
56
+ {
57
+ serializer::readMany(reader, serializer::to_key("Dict"), id2word);
58
+ for (size_t i = 0; i < id2word.size(); ++i)
59
+ {
60
+ dict.emplace(id2word[i], i);
61
+ }
62
+ }
63
+
64
+ void swap(Dictionary& rhs)
65
+ {
66
+ std::swap(dict, rhs.dict);
67
+ std::swap(id2word, rhs.id2word);
68
+ }
69
+
70
+ void reorder(const std::vector<Vid>& order)
71
+ {
72
+ for (auto& p : dict)
73
+ {
74
+ p.second = order[p.second];
75
+ id2word[p.second] = p.first;
76
+ }
77
+ }
78
+ };
79
+
80
+ }
@@ -0,0 +1,181 @@
1
+ #pragma once
2
+ #include <type_traits>
3
+ #include <Eigen/Dense>
4
+ #include "math.h"
5
+
6
+ namespace Eigen
7
+ {
8
+ namespace internal
9
+ {
10
+ template<typename PacketType>
11
+ struct to_int_packet
12
+ {
13
+ typedef PacketType type;
14
+ };
15
+ }
16
+ }
17
+
18
+ #ifdef EIGEN_VECTORIZE_AVX
19
+ #include <immintrin.h>
20
+ #include "avx_gamma.h"
21
+
22
+ namespace Eigen
23
+ {
24
+ namespace internal
25
+ {
26
+ template<> struct to_int_packet<Packet8f>
27
+ {
28
+ typedef Packet8i type;
29
+ };
30
+
31
+ EIGEN_STRONG_INLINE Packet8f p_to_f32(const Packet8i& a)
32
+ {
33
+ return _mm256_cvtepi32_ps(a);
34
+ }
35
+
36
+ }
37
+ }
38
+
39
+ #elif defined(EIGEN_VECTORIZE_SSE2)
40
+ #include <xmmintrin.h>
41
+ #include "sse_gamma.h"
42
+
43
+ namespace Eigen
44
+ {
45
+ namespace internal
46
+ {
47
+ template<> struct to_int_packet<Packet4f>
48
+ {
49
+ typedef Packet4i type;
50
+ };
51
+
52
+ EIGEN_STRONG_INLINE Packet4f p_to_f32(const Packet4i& a)
53
+ {
54
+ return _mm_cvtepi32_ps(a);
55
+ }
56
+
57
+ }
58
+ }
59
+ #endif
60
+
61
+ namespace Eigen
62
+ {
63
+ namespace internal
64
+ {
65
+ template<typename Scalar, typename Scalar2> struct scalar_lgamma_subt_op {
66
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_lgamma_subt_op)
67
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& z, const Scalar2& a) const { return tomoto::math::lgammaSubt(z, a); }
68
+ template<typename Packet>
69
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& z, const Packet& a) const
70
+ {
71
+ return lgamma_subt(z, a);
72
+ }
73
+ };
74
+
75
+ template<typename Scalar, typename Scalar2>
76
+ struct functor_traits<scalar_lgamma_subt_op<Scalar, Scalar2> >
77
+ {
78
+ enum {
79
+ Cost = HugeCost,
80
+ PacketAccess = 1
81
+ };
82
+ };
83
+
84
+ template<>
85
+ struct scalar_cast_op<int32_t, float> {
86
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_cast_op)
87
+ typedef float result_type;
88
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const float operator() (const int32_t& a) const { return cast<int32_t, float>(a); }
89
+
90
+ template<typename Packet>
91
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const typename to_int_packet<typename std::remove_const<Packet>::type>::type& a) const
92
+ {
93
+ return p_to_f32(a);
94
+ }
95
+ };
96
+
97
+ template<>
98
+ struct functor_traits<scalar_cast_op<int32_t, float> >
99
+ {
100
+ enum { Cost = NumTraits<float>::AddCost, PacketAccess = 1 };
101
+ };
102
+
103
+ template<typename ArgType>
104
+ struct unary_evaluator<CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType>, IndexBased >
105
+ : evaluator_base<CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType> >
106
+ {
107
+ typedef CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType> XprType;
108
+
109
+ enum {
110
+ CoeffReadCost = evaluator<ArgType>::CoeffReadCost + functor_traits<scalar_cast_op<int32_t, float>>::Cost,
111
+
112
+ Flags = evaluator<ArgType>::Flags
113
+ & (HereditaryBits | LinearAccessBit | (functor_traits<scalar_cast_op<int32_t, float>>::PacketAccess ? PacketAccessBit : 0)),
114
+ Alignment = evaluator<ArgType>::Alignment
115
+ };
116
+
117
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
118
+ explicit unary_evaluator(const XprType& op)
119
+ : m_functor(op.functor()),
120
+ m_argImpl(op.nestedExpression())
121
+ {
122
+ EIGEN_INTERNAL_CHECK_COST_VALUE(NumTraits<float>::AddCost);
123
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
124
+ }
125
+
126
+ typedef typename XprType::CoeffReturnType CoeffReturnType;
127
+
128
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
129
+ CoeffReturnType coeff(Index row, Index col) const
130
+ {
131
+ return m_functor(m_argImpl.coeff(row, col));
132
+ }
133
+
134
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
135
+ CoeffReturnType coeff(Index index) const
136
+ {
137
+ return m_functor(m_argImpl.coeff(index));
138
+ }
139
+
140
+ template<int LoadMode, typename PacketType>
141
+ EIGEN_STRONG_INLINE
142
+ PacketType packet(Index row, Index col) const
143
+ {
144
+ return m_functor.packetOp<PacketType>(m_argImpl.template packet<LoadMode, typename to_int_packet<PacketType>::type>(row, col));
145
+ }
146
+
147
+ template<int LoadMode, typename PacketType>
148
+ EIGEN_STRONG_INLINE
149
+ PacketType packet(Index index) const
150
+ {
151
+ return m_functor.packetOp<PacketType>(m_argImpl.template packet<LoadMode, typename to_int_packet<PacketType>::type>(index));
152
+ }
153
+
154
+ protected:
155
+ const scalar_cast_op<int32_t, float> m_functor;
156
+ evaluator<ArgType> m_argImpl;
157
+ };
158
+
159
+ }
160
+
161
+ template <typename Derived, typename T> EIGEN_DEVICE_FUNC inline
162
+ const CwiseBinaryOp<internal::scalar_lgamma_subt_op< typename internal::traits<Derived>::Scalar, T >, const Derived,
163
+ const typename internal::plain_constant_type<Derived, T>::type>
164
+ lgamma_subt(const Eigen::ArrayBase<Derived>& x, const T& scalar) {
165
+
166
+ return CwiseBinaryOp<internal::scalar_lgamma_subt_op< typename internal::traits<Derived>::Scalar, T >, const Derived,
167
+ const typename internal::plain_constant_type<Derived, T>::type>(x.derived(),
168
+ typename internal::plain_constant_type<Derived, T>::type(x.derived().rows(), x.derived().cols(), internal::scalar_constant_op<T>(scalar))
169
+ );
170
+ }
171
+
172
+ template<typename Derived, typename Derived2>
173
+ inline const CwiseBinaryOp<internal::scalar_lgamma_subt_op<typename Derived::Scalar, typename Derived2::Scalar>, const Derived, const Derived2>
174
+ lgamma_subt(const Eigen::ArrayBase<Derived>& x, const Eigen::ArrayBase<Derived2>& y)
175
+ {
176
+ return CwiseBinaryOp<internal::scalar_lgamma_subt_op<typename Derived::Scalar, typename Derived2::Scalar>, const Derived, const Derived2>(
177
+ x.derived(),
178
+ y.derived()
179
+ );
180
+ }
181
+ }
@@ -0,0 +1,202 @@
1
+ // Copyright (C) 2016-2019 Yixuan Qiu <yixuan.qiu@cos.name>
2
+ // Under MIT license
3
+ // https://github.com/yixuan/LBFGSpp
4
+ // bab2min modified some features
5
+
6
+ #ifndef LBFGS_H
7
+ #define LBFGS_H
8
+
9
+ #include <Eigen/Core>
10
+ #include "LBFGS/Param.h"
11
+ #include "LBFGS/LineSearchBacktracking.h"
12
+ #include "LBFGS/LineSearchBracketing.h"
13
+
14
+
15
+ namespace LBFGSpp {
16
+
17
+
18
+ ///
19
+ /// LBFGS solver for unconstrained numerical optimization
20
+ ///
21
+ template < typename Scalar,
22
+ template<class> class LineSearch = LineSearchBacktracking >
23
+ class LBFGSSolver
24
+ {
25
+ private:
26
+ typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
27
+ typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> Matrix;
28
+ typedef Eigen::Map<Vector> MapVec;
29
+
30
+ static constexpr Scalar epsilon = Scalar(0.001); // add epsilon for preventing division-by-zero
31
+
32
+ LBFGSParam<Scalar> m_param; // Parameters to control the LBFGS algorithm
33
+ Matrix m_s; // History of the s vectors
34
+ Matrix m_y; // History of the y vectors
35
+ Vector m_ys; // History of the s'y values
36
+ Vector m_alpha; // History of the step lengths
37
+ Vector m_fx; // History of the objective function values
38
+ Vector m_xp; // Old x
39
+ Vector m_grad; // New gradient
40
+ Vector m_gradp; // Old gradient
41
+ Vector m_drt; // Moving direction
42
+
43
+ inline void reset(int n)
44
+ {
45
+ const int m = m_param.m;
46
+ m_s.resize(n, m);
47
+ m_y.resize(n, m);
48
+ m_ys.resize(m);
49
+ m_alpha.resize(m);
50
+ m_xp.resize(n);
51
+ m_grad.resize(n);
52
+ m_gradp.resize(n);
53
+ m_drt.resize(n);
54
+ if (m_param.past > 0)
55
+ m_fx.resize(m_param.past);
56
+ }
57
+
58
+ public:
59
+ ///
60
+ /// Constructor for LBFGS solver.
61
+ ///
62
+ /// \param param An object of \ref LBFGSParam to store parameters for the
63
+ /// algorithm
64
+ ///
65
+ LBFGSSolver(const LBFGSParam<Scalar>& param = {}) :
66
+ m_param(param)
67
+ {
68
+ m_param.check_param();
69
+ }
70
+
71
+ ///
72
+ /// Minimizing a multivariate function using LBFGS algorithm.
73
+ /// Exceptions will be thrown if error occurs.
74
+ ///
75
+ /// \param f A function object such that `f(x, grad)` returns the
76
+ /// objective function value at `x`, and overwrites `grad` with
77
+ /// the gradient.
78
+ /// \param x In: An initial guess of the optimal point. Out: The best point
79
+ /// found.
80
+ /// \param fx Out: The objective function value at `x`.
81
+ ///
82
+ /// \return Number of iterations used.
83
+ ///
84
+ template <typename Foo>
85
+ inline int minimize(Foo&& f, Eigen::Ref<Vector> x, Scalar& fx)
86
+ {
87
+ const int n = x.size();
88
+ const int fpast = m_param.past;
89
+ reset(n);
90
+
91
+ // Evaluate function and compute gradient
92
+ fx = f(x, m_grad);
93
+
94
+ Scalar xnorm = x.norm();
95
+ Scalar gnorm = m_grad.norm();
96
+ if (fpast > 0)
97
+ m_fx[0] = fx;
98
+
99
+ // Early exit if the initial x is already a minimizer
100
+ if (gnorm <= m_param.epsilon * std::max(xnorm, Scalar(1.0)))
101
+ {
102
+ return 1;
103
+ }
104
+
105
+ // Initial direction
106
+ m_drt.noalias() = -m_grad;
107
+ // Initial step
108
+ Scalar step = Scalar(1.0) / m_drt.norm();
109
+
110
+ int k = 1;
111
+ int end = 0;
112
+ for (; ; )
113
+ {
114
+ // Save the curent x and gradient
115
+ m_xp.noalias() = x;
116
+ m_gradp.noalias() = m_grad;
117
+
118
+ // Line search to update x, fx and gradient
119
+ LineSearch<Scalar>::LineSearch(f, fx, x, m_grad, step, m_drt, m_xp, m_param);
120
+
121
+ // New x norm and gradient norm
122
+ xnorm = x.norm();
123
+ gnorm = m_grad.norm();
124
+
125
+ // Convergence test -- gradient
126
+ if (gnorm <= m_param.epsilon * std::max(xnorm, Scalar(1.0)))
127
+ {
128
+ return k;
129
+ }
130
+ // Convergence test -- objective function value
131
+ if (fpast > 0)
132
+ {
133
+ if (k >= fpast && std::abs((m_fx[k % fpast] - fx) / fx) < m_param.delta)
134
+ return k;
135
+
136
+ m_fx[k % fpast] = fx;
137
+ }
138
+ // Maximum number of iterations
139
+ if (m_param.max_iterations != 0 && k >= m_param.max_iterations)
140
+ {
141
+ return k;
142
+ }
143
+
144
+ // Update s and y
145
+ // s_{k+1} = x_{k+1} - x_k
146
+ // y_{k+1} = g_{k+1} - g_k
147
+ MapVec svec(&m_s(0, end), n);
148
+ MapVec yvec(&m_y(0, end), n);
149
+ svec.noalias() = x - m_xp;
150
+ yvec.noalias() = m_grad - m_gradp;
151
+
152
+ // ys = y's = 1/rho
153
+ // yy = y'y
154
+ Scalar ys = yvec.dot(svec);
155
+ Scalar yy = yvec.squaredNorm();
156
+
157
+ /* prevent division-by-zero */
158
+ if (yy == 0 || ys == 0)
159
+ {
160
+ ys += epsilon;
161
+ yy += epsilon;
162
+ }
163
+ m_ys[end] = ys;
164
+
165
+ // Recursive formula to compute d = -H * g
166
+ m_drt.noalias() = -m_grad;
167
+ int bound = std::min(m_param.m, k);
168
+ end = (end + 1) % m_param.m;
169
+ int j = end;
170
+ for (int i = 0; i < bound; i++)
171
+ {
172
+ j = (j + m_param.m - 1) % m_param.m;
173
+ MapVec sj(&m_s(0, j), n);
174
+ MapVec yj(&m_y(0, j), n);
175
+ m_alpha[j] = sj.dot(m_drt) / m_ys[j];
176
+ m_drt.noalias() -= m_alpha[j] * yj;
177
+ }
178
+
179
+ m_drt *= (ys / yy);
180
+
181
+ for (int i = 0; i < bound; i++)
182
+ {
183
+ MapVec sj(&m_s(0, j), n);
184
+ MapVec yj(&m_y(0, j), n);
185
+ Scalar beta = yj.dot(m_drt) / m_ys[j];
186
+ m_drt.noalias() += (m_alpha[j] - beta) * sj;
187
+ j = (j + 1) % m_param.m;
188
+ }
189
+
190
+ // step = 1.0 as initial guess
191
+ step = Scalar(1.0);
192
+ k++;
193
+ }
194
+
195
+ return k;
196
+ }
197
+ };
198
+
199
+
200
+ } // namespace LBFGSpp
201
+
202
+ #endif // LBFGS_H