tomoto 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +8 -10
  4. data/ext/tomoto/extconf.rb +6 -2
  5. data/ext/tomoto/{ext.cpp → tomoto.cpp} +1 -1
  6. data/lib/tomoto/version.rb +1 -1
  7. data/lib/tomoto.rb +5 -1
  8. data/vendor/EigenRand/EigenRand/Core.h +10 -10
  9. data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
  10. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
  11. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
  12. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
  13. data/vendor/EigenRand/EigenRand/EigenRand +11 -6
  14. data/vendor/EigenRand/EigenRand/Macro.h +13 -7
  15. data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
  16. data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
  17. data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
  18. data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
  19. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
  20. data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
  21. data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
  22. data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
  23. data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
  24. data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
  25. data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
  26. data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
  27. data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
  28. data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
  29. data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
  30. data/vendor/EigenRand/EigenRand/doc.h +24 -12
  31. data/vendor/EigenRand/README.md +57 -4
  32. data/vendor/eigen/COPYING.APACHE +203 -0
  33. data/vendor/eigen/COPYING.BSD +1 -1
  34. data/vendor/eigen/COPYING.MINPACK +51 -52
  35. data/vendor/eigen/Eigen/Cholesky +0 -1
  36. data/vendor/eigen/Eigen/Core +112 -265
  37. data/vendor/eigen/Eigen/Eigenvalues +2 -3
  38. data/vendor/eigen/Eigen/Geometry +5 -8
  39. data/vendor/eigen/Eigen/Householder +0 -1
  40. data/vendor/eigen/Eigen/Jacobi +0 -1
  41. data/vendor/eigen/Eigen/KLUSupport +41 -0
  42. data/vendor/eigen/Eigen/LU +2 -5
  43. data/vendor/eigen/Eigen/OrderingMethods +0 -3
  44. data/vendor/eigen/Eigen/PaStiXSupport +1 -0
  45. data/vendor/eigen/Eigen/PardisoSupport +0 -0
  46. data/vendor/eigen/Eigen/QR +2 -3
  47. data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
  48. data/vendor/eigen/Eigen/SVD +0 -1
  49. data/vendor/eigen/Eigen/Sparse +0 -2
  50. data/vendor/eigen/Eigen/SparseCholesky +0 -8
  51. data/vendor/eigen/Eigen/SparseLU +4 -0
  52. data/vendor/eigen/Eigen/SparseQR +0 -1
  53. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  54. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  55. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  56. data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  57. data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
  58. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
  59. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  60. data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
  61. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  62. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  63. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  64. data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
  65. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  66. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  67. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  68. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  69. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  70. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  71. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  72. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
  73. data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
  74. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  75. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
  76. data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
  77. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  78. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  79. data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
  80. data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
  81. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  82. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  83. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  84. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
  85. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  86. data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
  87. data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
  88. data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
  89. data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
  90. data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
  91. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
  92. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  93. data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
  94. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
  95. data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
  96. data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
  97. data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
  98. data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  99. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
  100. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
  101. data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
  102. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
  103. data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
  104. data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
  105. data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
  106. data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
  107. data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
  108. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  109. data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
  110. data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
  111. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  112. data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
  113. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
  114. data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
  115. data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
  116. data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
  117. data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
  118. data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
  119. data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
  120. data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
  121. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
  122. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  123. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  124. data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
  125. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  126. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  127. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  128. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  129. data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  130. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
  131. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
  132. data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  133. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  134. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  135. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  136. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  137. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  138. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  139. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  140. data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  141. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  142. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  143. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  145. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  146. data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  148. data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  149. data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  153. data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  154. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  155. data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  156. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  157. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  158. data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  160. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  161. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  162. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  163. data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  164. data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  165. data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  166. data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  167. data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  168. data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  169. data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  170. data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  171. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  172. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  173. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  174. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  175. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  176. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  177. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  178. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
  179. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
  180. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
  181. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
  182. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
  183. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
  184. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  185. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
  186. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
  187. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
  188. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  189. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
  190. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  191. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
  192. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
  193. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
  194. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
  195. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  196. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
  197. data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  198. data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
  199. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
  200. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
  201. data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  202. data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  203. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  204. data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
  205. data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
  206. data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
  207. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
  208. data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  209. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  210. data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  211. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
  212. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  213. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
  214. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  215. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  216. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  217. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  218. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  219. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
  220. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
  221. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  222. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  223. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  224. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  225. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  226. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  227. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  228. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  229. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
  230. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  231. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
  232. data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
  233. data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
  234. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
  235. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  236. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  237. data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
  238. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  239. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  240. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  241. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  242. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  243. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  244. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  245. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  246. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  247. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  248. data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  249. data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
  250. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  251. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  252. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
  253. data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  254. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  255. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  256. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  257. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  258. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
  259. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  260. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  261. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  262. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  263. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  264. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
  265. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  266. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
  267. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  268. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
  269. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
  270. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
  271. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  272. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  273. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  274. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  275. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  276. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  277. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
  278. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  279. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
  280. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  281. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  282. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  283. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
  284. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  285. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  286. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
  287. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
  288. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  289. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  290. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  291. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  292. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  293. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  294. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
  295. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  296. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  297. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  298. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  299. data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
  300. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
  301. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  302. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  303. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  304. data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  305. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  306. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  307. data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  308. data/vendor/eigen/README.md +2 -0
  309. data/vendor/eigen/bench/btl/README +1 -1
  310. data/vendor/eigen/bench/tensors/README +6 -7
  311. data/vendor/eigen/ci/README.md +56 -0
  312. data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
  313. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
  314. data/vendor/eigen/unsupported/README.txt +1 -1
  315. data/vendor/tomotopy/README.kr.rst +21 -0
  316. data/vendor/tomotopy/README.rst +20 -0
  317. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
  318. data/vendor/tomotopy/src/Labeling/Phraser.hpp +1 -1
  319. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +2 -1
  320. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +2 -1
  321. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +1 -1
  322. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
  323. data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
  324. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +53 -2
  325. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +1 -1
  326. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +1 -0
  327. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +2 -2
  328. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +16 -5
  329. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +1 -0
  330. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +1 -0
  331. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +1 -0
  332. data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
  333. data/vendor/tomotopy/src/TopicModel/PTModel.hpp +31 -1
  334. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +2 -2
  335. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +7 -5
  336. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
  337. data/vendor/tomotopy/src/Utils/exception.h +6 -0
  338. data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
  339. data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
  340. metadata +60 -14
  341. data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
  342. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
  343. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  344. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  345. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  346. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  347. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
@@ -20,7 +20,7 @@ However, it:
20
20
  - must rely on Eigen,
21
21
  - must be highly related to math,
22
22
  - should have some general purpose in the sense that it could
23
- potentially become an offical Eigen module (or be merged into another one).
23
+ potentially become an official Eigen module (or be merged into another one).
24
24
 
25
25
  In doubt feel free to contact us. For instance, if your addons is very too specific
26
26
  but it shows an interesting way of using Eigen, then it could be a nice demo.
@@ -305,6 +305,27 @@ tomotopy의 Python3 예제 코드는 https://github.com/bab2min/tomotopy/blob/ma
305
305
 
306
306
  역사
307
307
  -------
308
+ * 0.12.3 (2022-07-19)
309
+ * 기능 개선
310
+ * 이제 `tomotopy.LDAModel.add_doc()`로 빈 문서를 삽입할 경우 예외를 발생시키는 대신 그냥 무시합니다. 새로 추가된 인자인 `ignore_empty_words`를 False로 설정할 경우 이전처럼 예외를 발생시킵니다.
311
+ * 유효하지 않은 토픽들을 모델에서 제거하는 `tomotopy.HDPModel.purge_dead_topics()` 메소드가 추가되었습니다.
312
+ * 버그 수정
313
+ * `tomotopy.SLDAModel`에서 `nuSq` 값을 지정할 때 발생하는 문제를 해결했습니다. (by @jucendrero)
314
+ * `tomotopy.utils.Coherence`가 `tomotopy.DTModel`에 대해서 작동하지 않는 문제를 해결했습니다.
315
+ * `train()` 호출 전에 `make_dic()`을 호출할 때 종종 크래시가 발생하는 문제를 해결했습니다.
316
+ * seed가 고정된 상태에서도 `tomotopy.DMRModel`, `tomotopy.GDMRModel`의 결과가 다르게 나오는 문제를 해결했습니다.
317
+ * `tomotopy.DMRModel`, `tomotopy.GDMRModel`의 파라미터 최적화 과정이 부정확하던 문제를 해결했습니다.
318
+ * `tomotopy.PTModel.copy()` 호출 시 종종 크래시가 발생하는 문제를 해결했습니다.
319
+ * 싱글스레드에서의 작동 효율을 개선했습니다.
320
+
321
+ * 0.12.2 (2021-09-06)
322
+ * `min_cf > 0`, `min_df > 0`나 `rm_top > 0`로 설정된 `tomotopy.HDPModel`에서 `convert_to_lda`를 호출할때 크래시가 발생하는 문제를 해결했습니다.
323
+ * `tomotopy.Document.get_topics`와 `tomotopy.Document.get_topic_dist`에 `from_pseudo_doc` 인자가 추가되었습니다.
324
+ 이 인자는 `PTModel`에 대해서만 유효하며, 이를 통해 토픽 분포를 구할 때 가상 문헌을 사용할지 여부를 선택할 수 있습니다.
325
+ * `tomotopy.PTModel` 생성시 기본 인자값이 변경되었습니다. `p`를 생략시 `k * 10`으로 설정됩니다.
326
+ * `make_doc`으로 생성한 문헌을 `infer` 없이 사용할 경우 발생하는 크래시를 해결하고 경고 메세지를 추가했습니다.
327
+ * 내부 C++코드가 clang c++17 환경에서 컴파일에 실패하는 문제를 해결했습니다.
328
+
308
329
  * 0.12.1 (2021-06-20)
309
330
  * `tomotopy.LDAModel.set_word_prior()`가 크래시를 발생시키던 문제를 해결했습니다.
310
331
  * 이제 `tomotopy.LDAModel.perplexity`와 `tomotopy.LDAModel.ll_per_word`가 TermWeight가 ONE이 아닌 경우에도 정확한 값을 반환합니다.
@@ -309,6 +309,26 @@ meaning you can use it for any reasonable purpose and remain in complete ownersh
309
309
 
310
310
  History
311
311
  -------
312
+ * 0.12.3 (2022-07-19)
313
+ * New features
314
+ * Now, inserting an empty document using `tomotopy.LDAModel.add_doc()` just ignores it instead of raising an exception. If the newly added argument `ignore_empty_words` is set to False, an exception is raised as before.
315
+ * `tomotopy.HDPModel.purge_dead_topics()` method is added to remove non-live topics from the model.
316
+ * Bug fixes
317
+ * Fixed an issue that prevents setting user defined values for nuSq in `tomotopy.SLDAModel` (by @jucendrero).
318
+ * Fixed an issue where `tomotopy.utils.Coherence` did not work for `tomotopy.DTModel`.
319
+ * Fixed an issue that often crashed when calling `make_dic()` before calling `train()`.
320
+ * Resolved the problem that the results of `tomotopy.DMRModel` and `tomotopy.GDMRModel` are different even when the seed is fixed.
321
+ * The parameter optimization process of `tomotopy.DMRModel` and `tomotopy.GDMRModel` has been improved.
322
+ * Fixed an issue that sometimes crashed when calling `tomotopy.PTModel.copy()`.
323
+
324
+ * 0.12.2 (2021-09-06)
325
+ * An issue where calling `convert_to_lda` of `tomotopy.HDPModel` with `min_cf > 0`, `min_df > 0` or `rm_top > 0` causes a crash has been fixed.
326
+ * A new argument `from_pseudo_doc` is added to `tomotopy.Document.get_topics` and `tomotopy.Document.get_topic_dist`.
327
+ This argument is only valid for documents of `PTModel`, it enables to control a source for computing topic distribution.
328
+ * A default value for argument `p` of `tomotopy.PTModel` has been changed. The new default value is `k * 10`.
329
+ * Using documents generated by `make_doc` without calling `infer` doesn't cause a crash anymore, but just print warning messages.
330
+ * An issue where the internal C++ code isn't compiled at clang c++17 environment has been fixed.
331
+
312
332
  * 0.12.1 (2021-06-20)
313
333
  * An issue where `tomotopy.LDAModel.set_word_prior()` causes a crash has been fixed.
314
334
  * Now `tomotopy.LDAModel.perplexity` and `tomotopy.LDAModel.ll_per_word` return the accurate value when `TermWeight` is not `ONE`.
@@ -238,7 +238,7 @@ void FoRelevance::estimateContexts()
238
238
 
239
239
  Eigen::ArrayXi df = Eigen::ArrayXi::Zero(tm->getV());
240
240
 
241
- if (pool)
241
+ if (pool && pool->getNumWorkers() > 1)
242
242
  {
243
243
  const size_t groups = pool->getNumWorkers() * 4;
244
244
  std::vector<std::future<Eigen::ArrayXi>> futures;
@@ -379,7 +379,7 @@ void FoRelevance::estimateContexts()
379
379
  ((wcPMI.array() + smoothing) * totDocCnt / docCnt / df.cast<Float>()).log().matrix();
380
380
  };
381
381
 
382
- if (pool)
382
+ if (pool && pool->getNumWorkers() > 1)
383
383
  {
384
384
  const size_t groups = pool->getNumWorkers() * 4;
385
385
  std::vector<std::future<void>> futures;
@@ -197,7 +197,7 @@ namespace tomoto
197
197
  template<typename _LocalData, typename _ReduceFn>
198
198
  _LocalData parallelReduce(std::vector<_LocalData>&& data, _ReduceFn&& fn, ThreadPool* pool = nullptr)
199
199
  {
200
- if (pool)
200
+ if (pool && pool->getNumWorkers() > 1)
201
201
  {
202
202
  for (size_t s = data.size(); s > 1; s = (s + 1) / 2)
203
203
  {
@@ -131,7 +131,7 @@ namespace tomoto
131
131
  {
132
132
  if (this->globalStep < this->burnIn || !this->optimInterval || (this->globalStep + 1) % this->optimInterval != 0) return;
133
133
 
134
- if (pool)
134
+ if (pool && pool->getNumWorkers() > 1)
135
135
  {
136
136
  std::vector<std::future<void>> res;
137
137
  const size_t chStride = pool->getNumWorkers() * 8;
@@ -252,6 +252,7 @@ namespace tomoto
252
252
 
253
253
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
254
254
  {
255
+ if (!doc.numByTopic.size()) return {};
255
256
  std::vector<Float> ret(this->K);
256
257
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
257
258
  if (normalize)
@@ -86,7 +86,7 @@ namespace tomoto
86
86
  const size_t chStride = pool.getNumWorkers() * 8;
87
87
  for (size_t ch = 0; ch < chStride; ++ch)
88
88
  {
89
- res.emplace_back(pool.enqueue([&](size_t threadId)
89
+ res.emplace_back(pool.enqueue([&, ch](size_t threadId)
90
90
  {
91
91
  auto& tmpK = localData[threadId].tmpK;
92
92
  if (!tmpK.size()) tmpK.resize(this->K);
@@ -454,6 +454,7 @@ namespace tomoto
454
454
 
455
455
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
456
456
  {
457
+ if (!doc.numByTopic.size()) return {};
457
458
  std::vector<Float> ret(this->K);
458
459
  auto alphaDoc = getCachedAlpha(doc);
459
460
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
@@ -236,7 +236,7 @@ namespace tomoto
236
236
  for (size_t t = 0; t < T; ++t)
237
237
  {
238
238
  // update alias tables for word proposal
239
- if (pool)
239
+ if (pool && pool->getNumWorkers() > 1)
240
240
  {
241
241
  const size_t chStride = pool->getNumWorkers() * 8;
242
242
  std::vector<std::future<void>> futures;
@@ -85,8 +85,8 @@ namespace tomoto
85
85
 
86
86
  Float getNegativeLambdaLL(Eigen::Ref<Vector> x, Vector& g) const
87
87
  {
88
- auto mappedX = Eigen::Map<Matrix>(x.data(), this->K, this->F);
89
- auto mappedG = Eigen::Map<Matrix>(g.data(), this->K, this->F);
88
+ auto mappedX = Eigen::Map<Matrix>(x.data(), this->K, this->F * this->fCont);
89
+ auto mappedG = Eigen::Map<Matrix>(g.data(), this->K, this->F * this->fCont);
90
90
 
91
91
  Float fx = 0;
92
92
  for (size_t k = 0; k < this->K; ++k)
@@ -79,5 +79,6 @@ namespace tomoto
79
79
  virtual bool isLiveTopic(Tid tid) const = 0;
80
80
 
81
81
  virtual std::unique_ptr<ILDAModel> convertToLDA(float topicThreshold, std::vector<Tid>& newK) const = 0;
82
+ virtual std::vector<Tid> purgeDeadTopics() = 0;
82
83
  };
83
84
  }
@@ -492,6 +492,7 @@ namespace tomoto
492
492
 
493
493
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
494
494
  {
495
+ if (!doc.numByTopic.size()) return {};
495
496
  std::vector<Float> ret(this->K);
496
497
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
497
498
  if (normalize)
@@ -538,8 +539,11 @@ namespace tomoto
538
539
  auto d = lda->_makeFromRawDoc(doc);
539
540
  lda->_addDoc(d);
540
541
  }
541
-
542
- lda->prepare(true, this->minWordCf, this->minWordDf, this->removeTopN);
542
+
543
+ lda->realV = this->realV;
544
+ lda->realN = this->realN;
545
+ lda->weightedN = this->weightedN;
546
+ lda->prepare(true, 0, 0, 0, false);
543
547
 
544
548
  auto selectFirst = [&](const std::pair<size_t, size_t>& p) { return std::max(p.first / sum - topicThreshold, 0.f); };
545
549
  std::discrete_distribution<size_t> randomTopic{
@@ -569,6 +573,53 @@ namespace tomoto
569
573
 
570
574
  return lda;
571
575
  }
576
+
577
+ std::vector<Tid> purgeDeadTopics() override
578
+ {
579
+ std::vector<Tid> relocation(this->K, -1);
580
+ Tid numLiveTopics = 0;
581
+ for (size_t i = 0; i < this->K; ++i)
582
+ {
583
+ if (this->globalState.numTableByTopic[i])
584
+ {
585
+ relocation[i] = numLiveTopics++;
586
+ }
587
+ }
588
+
589
+ for (auto& doc : this->docs)
590
+ {
591
+ for (auto& nt : doc.numTopicByTable)
592
+ {
593
+ nt.topic = (relocation[nt.topic] == (Tid)-1) ? 0 : relocation[nt.topic];
594
+ }
595
+
596
+ for (size_t i = 0; i < relocation.size(); ++i)
597
+ {
598
+ if (relocation[i] == (Tid)-1) continue;
599
+ doc.numByTopic[relocation[i]] = doc.numByTopic[i];
600
+ }
601
+ doc.numByTopic.conservativeResize(numLiveTopics, 1);
602
+ }
603
+
604
+ for (auto tt : { &this->globalState, &this->tState })
605
+ {
606
+ auto& numTableByTopic = tt->numTableByTopic;
607
+ auto& numByTopic = tt->numByTopic;
608
+ auto& numByTopicWord = tt->numByTopicWord;
609
+ for (size_t i = 0; i < relocation.size(); ++i)
610
+ {
611
+ if (relocation[i] == (Tid)-1) continue;
612
+ numTableByTopic[relocation[i]] = numTableByTopic[i];
613
+ numByTopic[relocation[i]] = numByTopic[i];
614
+ numByTopicWord.row(relocation[i]) = numByTopicWord.row(i);
615
+ }
616
+ numTableByTopic.conservativeResize(numLiveTopics);
617
+ numByTopic.conservativeResize(numLiveTopics);
618
+ numByTopicWord.conservativeResize(numLiveTopics, numByTopicWord.cols());
619
+ }
620
+ this->K = numLiveTopics;
621
+ return relocation;
622
+ }
572
623
  };
573
624
 
574
625
  template<TermWeight _tw>
@@ -229,7 +229,7 @@ namespace tomoto
229
229
  };
230
230
 
231
231
  // we elide the likelihood for root node because its weight applied to all path and can be seen as constant.
232
- if (pool)
232
+ if (pool && pool->getNumWorkers() > 1)
233
233
  {
234
234
  const size_t chStride = pool->getNumWorkers() * 8;
235
235
  for (size_t ch = 0; ch < chStride; ++ch)
@@ -542,6 +542,7 @@ namespace tomoto
542
542
 
543
543
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
544
544
  {
545
+ if (!doc.numByTopic.size()) return {};
545
546
  std::vector<Float> ret(1 + this->K + K2);
546
547
  Float sum = doc.getSumWordWeight() + this->alphas.sum();
547
548
  if (!normalize) sum = 1;
@@ -366,9 +366,9 @@ namespace tomoto
366
366
  }
367
367
  }
368
368
 
369
- void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0) override
369
+ void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0, bool updateStopwords = true) override
370
370
  {
371
- if (initDocs) this->removeStopwords(minWordCnt, minWordDf, removeTopN);
371
+ if (initDocs) this->removeStopwords(minWordCnt, minWordDf, removeTopN, updateStopwords);
372
372
  static_cast<DerivedClass*>(this)->updateWeakArray();
373
373
  static_cast<DerivedClass*>(this)->initGlobalState(initDocs);
374
374
 
@@ -141,6 +141,12 @@ namespace tomoto
141
141
  }
142
142
  };
143
143
 
144
+ inline Float floorBit(Float x, int bitsUnderPoint = 8)
145
+ {
146
+ Float s = (1 << bitsUnderPoint);
147
+ return floor(x * s) / s;
148
+ }
149
+
144
150
  // to make HDP friend of LDA for HDPModel::converToLDA
145
151
  template<TermWeight _tw,
146
152
  typename _RandGen,
@@ -482,11 +488,11 @@ namespace tomoto
482
488
  {
483
489
  if (_ps == ParallelScheme::partition)
484
490
  {
485
- return (this->realV + 3) / 4;
491
+ return std::max(((size_t)this->realV + 3) / 4, (size_t)1);
486
492
  }
487
493
  if (_ps == ParallelScheme::copy_merge)
488
494
  {
489
- return (this->docs.size() + 1) / 2;
495
+ return std::max((this->docs.size() + 1) / 2, (size_t)1);
490
496
  }
491
497
  return (size_t)-1;
492
498
  }
@@ -1057,14 +1063,18 @@ namespace tomoto
1057
1063
  }
1058
1064
  }
1059
1065
 
1060
- void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0) override
1066
+ void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0, bool updateStopwords = true) override
1061
1067
  {
1062
- if (initDocs) this->removeStopwords(minWordCnt, minWordDf, removeTopN);
1068
+ if (initDocs && updateStopwords) this->removeStopwords(minWordCnt, minWordDf, removeTopN);
1063
1069
  static_cast<DerivedClass*>(this)->updateWeakArray();
1064
1070
  static_cast<DerivedClass*>(this)->initGlobalState(initDocs);
1065
1071
  static_cast<DerivedClass*>(this)->prepareWordPriors();
1066
1072
 
1067
1073
  const size_t V = this->realV;
1074
+ if (V == 0)
1075
+ {
1076
+ std::cerr << "[warn] No valid vocabs in the model!" << std::endl;
1077
+ }
1068
1078
 
1069
1079
  if (initDocs)
1070
1080
  {
@@ -1116,7 +1126,7 @@ namespace tomoto
1116
1126
  for (auto& doc : this->docs) doc.updateSumWordWeight(this->realV);
1117
1127
  }
1118
1128
  static_cast<DerivedClass*>(this)->prepareShared();
1119
- BaseClass::prepare(initDocs, minWordCnt, minWordDf, removeTopN);
1129
+ BaseClass::prepare(initDocs, minWordCnt, minWordDf, removeTopN, updateStopwords);
1120
1130
  }
1121
1131
 
1122
1132
  std::vector<uint64_t> getCountByTopic() const override
@@ -1126,6 +1136,7 @@ namespace tomoto
1126
1136
 
1127
1137
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
1128
1138
  {
1139
+ if (!doc.numByTopic.size()) return {};
1129
1140
  std::vector<Float> ret(K);
1130
1141
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), K };
1131
1142
  if (normalize)
@@ -176,6 +176,7 @@ namespace tomoto
176
176
 
177
177
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
178
178
  {
179
+ if (!doc.numByTopic.size()) return {};
179
180
  std::vector<Float> ret(this->K);
180
181
  auto maskedAlphas = this->alphas.array() * doc.labelMask.template cast<Float>().array();
181
182
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
@@ -529,6 +529,7 @@ namespace tomoto
529
529
 
530
530
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
531
531
  {
532
+ if (!doc.numByTopic.size()) return {};
532
533
  std::vector<Float> ret(this->K + KL);
533
534
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K + KL };
534
535
  if (normalize)
@@ -183,6 +183,7 @@ namespace tomoto
183
183
 
184
184
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
185
185
  {
186
+ if (!doc.numByTopic.size()) return {};
186
187
  std::vector<Float> ret(this->K);
187
188
  auto maskedAlphas = this->alphas.array() * doc.labelMask.template cast<Float>().array();
188
189
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
@@ -18,7 +18,7 @@ namespace tomoto
18
18
 
19
19
  struct PTArgs : public LDAArgs
20
20
  {
21
- size_t p = 100;
21
+ size_t p = 0;
22
22
  Float lambda = 0.01;
23
23
  };
24
24
 
@@ -30,5 +30,7 @@ namespace tomoto
30
30
  bool scalarRng = false);
31
31
 
32
32
  virtual size_t getP() const = 0;
33
+ virtual std::vector<Float> getTopicsFromPseudoDoc(const DocumentBase* doc, bool normalize = true) const = 0;
34
+ virtual std::vector<std::pair<Tid, Float>> getTopicsFromPseudoDocSorted(const DocumentBase* doc, size_t topN) const = 0;
33
35
  };
34
36
  }
@@ -75,7 +75,7 @@ namespace tomoto
75
75
  }
76
76
  --ld.numDocsByPDoc[doc.pseudoDoc];
77
77
 
78
- if (pool)
78
+ if (pool && pool->getNumWorkers() > 1)
79
79
  {
80
80
  std::vector<std::future<void>> futures;
81
81
  for (size_t w = 0; w < pool->getNumWorkers(); ++w)
@@ -253,6 +253,16 @@ namespace tomoto
253
253
  }
254
254
  }
255
255
 
256
+ void updateForCopy()
257
+ {
258
+ BaseClass::updateForCopy();
259
+ size_t offset = 0;
260
+ for (auto& doc : this->docs)
261
+ {
262
+ doc.template update<>(this->globalState.numByTopicPDoc.col(doc.pseudoDoc).data(), *static_cast<DerivedClass*>(this));
263
+ }
264
+ }
265
+
256
266
  public:
257
267
  DEFINE_SERIALIZER_AFTER_BASE_WITH_VERSION(BaseClass, 0, numPDocs, lambda);
258
268
  DEFINE_TAGGED_SERIALIZER_AFTER_BASE_WITH_VERSION(BaseClass, 1, 0x00010001, numPDocs, lambda);
@@ -266,6 +276,7 @@ namespace tomoto
266
276
 
267
277
  std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
268
278
  {
279
+ if (doc.Zs.empty()) return {};
269
280
  std::vector<Float> ret(this->K);
270
281
  Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
271
282
  m = this->alphas.array();
@@ -280,6 +291,25 @@ namespace tomoto
280
291
  return ret;
281
292
  }
282
293
 
294
+ std::vector<Float> getTopicsFromPseudoDoc(const DocumentBase* _doc, bool normalize) const override
295
+ {
296
+ auto& doc = *static_cast<const _DocType*>(_doc);
297
+ if (!doc.numByTopic.size()) return {};
298
+ std::vector<Float> ret(this->K);
299
+ Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
300
+ m = doc.numByTopic.array().template cast<Float>() + this->alphas.array();
301
+ if (normalize)
302
+ {
303
+ m /= m.sum();
304
+ }
305
+ return ret;
306
+ }
307
+
308
+ std::vector<std::pair<Tid, Float>> getTopicsFromPseudoDocSorted(const DocumentBase* doc, size_t topN) const override
309
+ {
310
+ return extractTopN<Tid>(getTopicsFromPseudoDoc(doc, true), topN);
311
+ }
312
+
283
313
  void updateDocs()
284
314
  {
285
315
  for (auto& doc : this->docs)
@@ -379,11 +379,11 @@ namespace tomoto
379
379
  {
380
380
  nuSq = Vector::Ones(F);
381
381
  }
382
- else if (args.mu.size() == 1)
382
+ else if (args.nuSq.size() == 1)
383
383
  {
384
384
  nuSq = Vector::Constant(F, args.nuSq[0]);
385
385
  }
386
- else if (args.mu.size() == F)
386
+ else if (args.nuSq.size() == F)
387
387
  {
388
388
  nuSq = Eigen::Map<const Vector>(args.nuSq.data(), args.nuSq.size());
389
389
  }
@@ -13,7 +13,7 @@
13
13
 
14
14
  namespace tomoto
15
15
  {
16
- using RandGen = Eigen::Rand::P8_mt19937_64<uint32_t>;
16
+ using RandGen = Eigen::Rand::P8_mt19937_64_32;
17
17
  using ScalarRandGen = Eigen::Rand::UniversalRandomEngine<uint32_t, std::mt19937_64>;
18
18
 
19
19
  using Vector = Eigen::Matrix<Float, -1, 1>;
@@ -254,7 +254,7 @@ namespace tomoto
254
254
 
255
255
  virtual int train(size_t iteration, size_t numWorkers, ParallelScheme ps = ParallelScheme::default_, bool freeze_topics = false) = 0;
256
256
  virtual size_t getGlobalStep() const = 0;
257
- virtual void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0) = 0;
257
+ virtual void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0, bool updateStopwords = true) = 0;
258
258
 
259
259
  virtual size_t getK() const = 0;
260
260
  virtual std::vector<Float> getWidsByTopic(size_t tid, bool normalize = true) const = 0;
@@ -437,7 +437,7 @@ namespace tomoto
437
437
  }
438
438
  else
439
439
  {
440
- throw exc::InvalidArgument{ "Either `words` or `rawWords` must be filled." };
440
+ throw exc::EmptyWordArgument{ "Either `words` or `rawWords` must be filled." };
441
441
  }
442
442
  return doc;
443
443
  }
@@ -605,7 +605,7 @@ namespace tomoto
605
605
  return empty;
606
606
  }
607
607
 
608
- void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0) override
608
+ void prepare(bool initDocs = true, size_t minWordCnt = 0, size_t minWordDf = 0, size_t removeTopN = 0, bool updateStopwords = true) override
609
609
  {
610
610
  auto p = countRealN();
611
611
  realN = p.first;
@@ -674,7 +674,8 @@ namespace tomoto
674
674
  auto state = ps == ParallelScheme::none ? &globalState : localData.data();
675
675
  for (size_t i = 0; i < iteration; ++i)
676
676
  {
677
- while (1)
677
+ size_t retry;
678
+ for (retry = 0; retry < 10; ++retry)
678
679
  {
679
680
  try
680
681
  {
@@ -703,6 +704,7 @@ namespace tomoto
703
704
  if(ret < 0) return ret;
704
705
  }
705
706
  }
707
+ if (retry >= 10) return -1;
706
708
  ++globalStep;
707
709
  }
708
710
  return 0;
@@ -56,7 +56,7 @@ namespace Eigen
56
56
  }
57
57
  }
58
58
  #endif
59
- #if defined(EIGEN_VECTORIZE_SSE2)
59
+ #ifdef EIGEN_VECTORIZE_SSE2
60
60
  #include <xmmintrin.h>
61
61
  #include "sse_gamma.h"
62
62
 
@@ -91,6 +91,41 @@ namespace Eigen
91
91
  }
92
92
  }
93
93
  #endif
94
+ #ifdef EIGEN_VECTORIZE_NEON
95
+ #include <arm_neon.h>
96
+
97
+
98
+ namespace Eigen
99
+ {
100
+ namespace internal
101
+ {
102
+ template<> struct to_int_packet<Packet4f>
103
+ {
104
+ typedef Packet4i type;
105
+ };
106
+
107
+ template<> struct to_float_packet<Packet4i>
108
+ {
109
+ typedef Packet4f type;
110
+ };
111
+
112
+ EIGEN_STRONG_INLINE Packet4f p_to_f32(const Packet4i& a)
113
+ {
114
+ return vcvtq_f32_s32(a);
115
+ }
116
+
117
+ EIGEN_STRONG_INLINE Packet4f p_bool2float(const Packet4f& a)
118
+ {
119
+ return vcvtq_f32_s32(vandq_s32(a, vdupq_n_s32(1)));
120
+ }
121
+
122
+ EIGEN_STRONG_INLINE Packet4f p_bool2float(const Packet4i& a)
123
+ {
124
+ return p_bool2float((Packet4f)vreinterpretq_f32_s32((int32x4_t)a));
125
+ }
126
+ }
127
+ }
128
+ #endif
94
129
 
95
130
  namespace Eigen
96
131
  {
@@ -22,6 +22,12 @@ namespace tomoto
22
22
  public:
23
23
  using std::invalid_argument::invalid_argument;
24
24
  };
25
+
26
+ class EmptyWordArgument : public InvalidArgument
27
+ {
28
+ public:
29
+ using InvalidArgument::InvalidArgument;
30
+ };
25
31
  }
26
32
  }
27
33
 
@@ -1,10 +1,8 @@
1
1
  #pragma once
2
2
 
3
3
  #include <random>
4
- #ifdef __AVX__
4
+ #if defined(__AVX__) || defined(__SSE2__)
5
5
  #include <immintrin.h>
6
- #elif defined(__SSE2__) || defined(_WIN64)
7
- #include <xmmintrin.h>
8
6
  #else
9
7
 
10
8
  #endif
@@ -23,17 +21,21 @@ namespace tomoto
23
21
  return __popcnt(i);
24
22
  }
25
23
 
26
- #ifdef _WIN64
24
+ #ifdef _WIN64
27
25
  inline uint64_t log2_ceil(uint64_t i)
28
26
  {
29
- return 64 - __lzcnt64(i) - ((i & (i - 1)) == 0 ? 1 : 0);
27
+ unsigned long idx;
28
+ if (!_BitScanReverse64(&idx, i)) return 0;
29
+ return idx + 1 - ((i & (i - 1)) == 0 ? 1 : 0);
30
30
  }
31
- #else
31
+ #else
32
32
  inline uint32_t log2_ceil(uint32_t i)
33
33
  {
34
- return 32 - __lzcnt(i) - ((i & (i - 1)) == 0 ? 1 : 0);
34
+ unsigned long idx;
35
+ if (!_BitScanReverse(&idx, i)) return 0;
36
+ return idx + 1 - ((i & (i - 1)) == 0 ? 1 : 0);
35
37
  }
36
- #endif
38
+ #endif
37
39
 
38
40
  #else
39
41
  inline uint32_t popcnt(uint32_t i)
@@ -41,22 +43,22 @@ namespace tomoto
41
43
  return __builtin_popcount(i);
42
44
  }
43
45
 
44
- #ifdef __x86_64
46
+ #ifdef __x86_64
45
47
  inline uint64_t log2_ceil(uint64_t i)
46
48
  {
47
49
  return 64 - __builtin_clzll(i) - ((i & (i - 1)) == 0 ? 1 : 0);
48
50
  }
49
- #else
51
+ #else
50
52
  inline uint32_t log2_ceil(uint32_t i)
51
53
  {
52
54
  return 32 - __builtin_clz(i) - ((i & (i - 1)) == 0 ? 1 : 0);
53
55
  }
54
- #endif
56
+ #endif
55
57
 
56
58
  #endif
57
59
 
58
60
 
59
- #if defined(__SSE2__) || defined(_WIN64)
61
+ #if defined(__SSE2__)
60
62
  inline __m128 scan_SSE(__m128 x)
61
63
  {
62
64
  x = _mm_add_ps(x, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(x), 4)));
@@ -1,7 +1,4 @@
1
1
  #pragma once
2
- #if _WIN64 || __x86_64__
3
- #define __SSE2__
4
- #endif
5
2
  #include "sse_mathfun.h"
6
3
 
7
4
  // approximation : lgamma(z) ~= (z+2.5)ln(z+3) - z - 3 + 0.5 ln (2pi) + 1/12/(z + 3) - ln (z(z+1)(z+2))