tomoto 0.2.2 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +8 -10
- data/ext/tomoto/ct.cpp +11 -11
- data/ext/tomoto/dmr.cpp +14 -13
- data/ext/tomoto/dt.cpp +14 -14
- data/ext/tomoto/extconf.rb +7 -5
- data/ext/tomoto/gdmr.cpp +7 -7
- data/ext/tomoto/hdp.cpp +9 -9
- data/ext/tomoto/hlda.cpp +13 -13
- data/ext/tomoto/hpa.cpp +5 -5
- data/ext/tomoto/lda.cpp +42 -39
- data/ext/tomoto/llda.cpp +6 -6
- data/ext/tomoto/mglda.cpp +15 -15
- data/ext/tomoto/pa.cpp +6 -6
- data/ext/tomoto/plda.cpp +6 -6
- data/ext/tomoto/slda.cpp +8 -8
- data/ext/tomoto/{ext.cpp → tomoto.cpp} +8 -8
- data/ext/tomoto/utils.h +16 -70
- data/lib/tomoto/version.rb +1 -1
- data/lib/tomoto.rb +5 -1
- data/vendor/EigenRand/EigenRand/Core.h +10 -10
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
- data/vendor/EigenRand/EigenRand/EigenRand +11 -6
- data/vendor/EigenRand/EigenRand/Macro.h +13 -7
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
- data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
- data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
- data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
- data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
- data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
- data/vendor/EigenRand/EigenRand/doc.h +24 -12
- data/vendor/EigenRand/README.md +57 -4
- data/vendor/eigen/COPYING.APACHE +203 -0
- data/vendor/eigen/COPYING.BSD +1 -1
- data/vendor/eigen/COPYING.MINPACK +51 -52
- data/vendor/eigen/Eigen/Cholesky +0 -1
- data/vendor/eigen/Eigen/Core +112 -265
- data/vendor/eigen/Eigen/Eigenvalues +2 -3
- data/vendor/eigen/Eigen/Geometry +5 -8
- data/vendor/eigen/Eigen/Householder +0 -1
- data/vendor/eigen/Eigen/Jacobi +0 -1
- data/vendor/eigen/Eigen/KLUSupport +41 -0
- data/vendor/eigen/Eigen/LU +2 -5
- data/vendor/eigen/Eigen/OrderingMethods +0 -3
- data/vendor/eigen/Eigen/PaStiXSupport +1 -0
- data/vendor/eigen/Eigen/PardisoSupport +0 -0
- data/vendor/eigen/Eigen/QR +2 -3
- data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
- data/vendor/eigen/Eigen/SVD +0 -1
- data/vendor/eigen/Eigen/Sparse +0 -2
- data/vendor/eigen/Eigen/SparseCholesky +0 -8
- data/vendor/eigen/Eigen/SparseLU +4 -0
- data/vendor/eigen/Eigen/SparseQR +0 -1
- data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
- data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
- data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
- data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
- data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
- data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
- data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
- data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
- data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
- data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
- data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
- data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
- data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
- data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
- data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
- data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
- data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
- data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
- data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
- data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
- data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
- data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
- data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
- data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
- data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
- data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
- data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
- data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
- data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
- data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
- data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
- data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
- data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
- data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
- data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
- data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
- data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
- data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
- data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
- data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
- data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
- data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
- data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
- data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
- data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
- data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
- data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
- data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
- data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
- data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
- data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
- data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
- data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
- data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
- data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
- data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
- data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
- data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
- data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
- data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
- data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
- data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
- data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
- data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
- data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
- data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
- data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- data/vendor/eigen/README.md +2 -0
- data/vendor/eigen/bench/btl/README +1 -1
- data/vendor/eigen/bench/tensors/README +6 -7
- data/vendor/eigen/ci/README.md +56 -0
- data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
- data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
- data/vendor/eigen/unsupported/README.txt +1 -1
- data/vendor/tomotopy/README.kr.rst +78 -0
- data/vendor/tomotopy/README.rst +75 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
- data/vendor/tomotopy/src/Labeling/Phraser.hpp +4 -4
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
- data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +57 -6
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/LDA.h +3 -3
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +5 -5
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +50 -19
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/PAModel.hpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
- data/vendor/tomotopy/src/TopicModel/PTModel.hpp +36 -3
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +55 -26
- data/vendor/tomotopy/src/Utils/AliasMethod.hpp +5 -4
- data/vendor/tomotopy/src/Utils/Dictionary.h +2 -2
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
- data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +1 -1
- data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +1 -1
- data/vendor/tomotopy/src/Utils/exception.h +6 -0
- data/vendor/tomotopy/src/Utils/math.h +2 -2
- data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
- data/vendor/tomotopy/src/Utils/serializer.hpp +30 -5
- data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
- metadata +64 -18
- data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- 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
|
|
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.
|
|
@@ -198,6 +198,57 @@ add_doc은 `tomotopy.LDAModel.train`을 시작하기 전까지만 사용할 수
|
|
|
198
198
|
infer 메소드는 `tomotopy.Document` 인스턴스 하나를 추론하거나 `tomotopy.Document` 인스턴스의 `list`를 추론하는데 사용할 수 있습니다.
|
|
199
199
|
자세한 것은 `tomotopy.LDAModel.infer`을 참조하길 바랍니다.
|
|
200
200
|
|
|
201
|
+
Corpus와 transform
|
|
202
|
+
--------------------
|
|
203
|
+
`tomotopy`의 모든 토픽 모델들은 각자 별도의 내부적인 문헌 타입을 가지고 있습니다.
|
|
204
|
+
그리고 이 문헌 타입들에 맞는 문헌들은 각 모델의 `add_doc` 메소드를 통해 생성될 수 있습니다.
|
|
205
|
+
하지만 이 때문에 동일한 목록의 문헌들을 서로 다른 토픽 모델에 입력해야 하는 경우
|
|
206
|
+
매 모델에 각 문헌을 추가할때마다 `add_doc`을 호출해야하기 때문에 비효율이 발생합니다.
|
|
207
|
+
따라서 `tomotopy`에서는 여러 문헌을 묶어서 관리해주는 `tomotopy.utils.Corpus` 클래스를 제공합니다.
|
|
208
|
+
토픽 모델 객체를 생성할때 `tomotopy.utils.Corpus`를 `__init__` 메소드의 `corpus` 인자로 넘겨줌으로써
|
|
209
|
+
어떤 모델에든 쉽게 문헌들을 삽입할 수 있게 해줍니다.
|
|
210
|
+
`tomotopy.utils.Corpus`를 토픽 모델에 삽입하면 corpus 객체가 가지고 있는 문헌들 전부가 모델에 자동으로 삽입됩니다.
|
|
211
|
+
|
|
212
|
+
그런데 일부 토픽 모델의 경우 문헌을 생성하기 위해 서로 다른 데이터를 요구합니다.
|
|
213
|
+
예를 들어 `tomotopy.DMRModel`는 `metadata`라는 `str` 타입의 데이터를 요구하고,
|
|
214
|
+
`tomotopy.PLDAModel`는 `labels`라는 `List[str]` 타입의 데이터를 요구합니다.
|
|
215
|
+
그러나 `tomotopy.utils.Corpus`는 토픽 모델에 종속되지 않은 독립적인 문헌 데이터를 보관하기 때문에,
|
|
216
|
+
corpus가 가지고 있는 문헌 데이터가 실제 토픽 모델이 요구하는 데이터와 일치하지 않을 가능성이 있습니다.
|
|
217
|
+
이 경우 `transform`라는 인자를 통해 corpus 내의 데이터를 변형시켜 토픽 모델이 요구하는 실제 데이터와 일치시킬 수 있습니다.
|
|
218
|
+
자세한 내용은 아래의 코드를 확인해주세요:
|
|
219
|
+
|
|
220
|
+
::
|
|
221
|
+
|
|
222
|
+
from tomotopy import DMRModel
|
|
223
|
+
from tomotopy.utils import Corpus
|
|
224
|
+
|
|
225
|
+
corpus = Corpus()
|
|
226
|
+
corpus.add_doc("a b c d e".split(), a_data=1)
|
|
227
|
+
corpus.add_doc("e f g h i".split(), a_data=2)
|
|
228
|
+
corpus.add_doc("i j k l m".split(), a_data=3)
|
|
229
|
+
|
|
230
|
+
model = DMRModel(k=10)
|
|
231
|
+
model.add_corpus(corpus)
|
|
232
|
+
# `corpus`에 있던 `a_data`는 사라지고
|
|
233
|
+
# `DMRModel`이 요구하는 `metadata`에는 기본값인 빈 문자열이 채워집니다.
|
|
234
|
+
|
|
235
|
+
assert model.docs[0].metadata == ''
|
|
236
|
+
assert model.docs[1].metadata == ''
|
|
237
|
+
assert model.docs[2].metadata == ''
|
|
238
|
+
|
|
239
|
+
def transform_a_data_to_metadata(misc: dict):
|
|
240
|
+
return {'metadata': str(misc['a_data'])}
|
|
241
|
+
# 이 함수는 `a_data`를 `metadata`로 변환합니다.
|
|
242
|
+
|
|
243
|
+
model = DMRModel(k=10)
|
|
244
|
+
model.add_corpus(corpus, transform=transform_a_data_to_metadata)
|
|
245
|
+
# 이제 `model`에는 기본값이 아닌 `metadata`가 입력됩니다. 이들은 `transform`에 의해 `a_data`로부터 생성됩니다.
|
|
246
|
+
|
|
247
|
+
assert model.docs[0].metadata == '1'
|
|
248
|
+
assert model.docs[1].metadata == '2'
|
|
249
|
+
assert model.docs[2].metadata == '3'
|
|
250
|
+
|
|
251
|
+
|
|
201
252
|
병렬 샘플링 알고리즘
|
|
202
253
|
----------------------------
|
|
203
254
|
`tomotopy`는 0.5.0버전부터 병렬 알고리즘을 고를 수 있는 선택지를 제공합니다.
|
|
@@ -254,6 +305,33 @@ tomotopy의 Python3 예제 코드는 https://github.com/bab2min/tomotopy/blob/ma
|
|
|
254
305
|
|
|
255
306
|
역사
|
|
256
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
|
+
|
|
329
|
+
* 0.12.1 (2021-06-20)
|
|
330
|
+
* `tomotopy.LDAModel.set_word_prior()`가 크래시를 발생시키던 문제를 해결했습니다.
|
|
331
|
+
* 이제 `tomotopy.LDAModel.perplexity`와 `tomotopy.LDAModel.ll_per_word`가 TermWeight가 ONE이 아닌 경우에도 정확한 값을 반환합니다.
|
|
332
|
+
* 용어가중치가 적용된 빈도수를 반환하는 `tomotopy.LDAModel.used_vocab_weighted_freq`가 추가되었습니다.
|
|
333
|
+
* 이제 `tomotopy.LDAModel.summary()`가 단어의 엔트로피뿐만 아니라, 용어 가중치가 적용된 단어의 엔트로피도 함께 보여줍니다.
|
|
334
|
+
|
|
257
335
|
* 0.12.0 (2021-04-26)
|
|
258
336
|
* 이제 `tomotopy.DMRModel`와 `tomotopy.GDMRModel`가 다중 메타데이터를 지원합니다. (https://github.com/bab2min/tomotopy/blob/main/examples/dmr_multi_label.py 참조)
|
|
259
337
|
* `tomotopy.GDMRModel`의 성능이 개선되었습니다.
|
data/vendor/tomotopy/README.rst
CHANGED
|
@@ -202,6 +202,55 @@ Inference for unseen document should be performed using `tomotopy.LDAModel.infer
|
|
|
202
202
|
The `infer` method can infer only one instance of `tomotopy.Document` or a `list` of instances of `tomotopy.Document`.
|
|
203
203
|
See more at `tomotopy.LDAModel.infer`.
|
|
204
204
|
|
|
205
|
+
Corpus and transform
|
|
206
|
+
--------------------
|
|
207
|
+
Every topic model in `tomotopy` has its own internal document type.
|
|
208
|
+
A document can be created and added into suitable for each model through each model's `add_doc` method.
|
|
209
|
+
However, trying to add the same list of documents to different models becomes quite inconvenient,
|
|
210
|
+
because `add_doc` should be called for the same list of documents to each different model.
|
|
211
|
+
Thus, `tomotopy` provides `tomotopy.utils.Corpus` class that holds a list of documents.
|
|
212
|
+
`tomotopy.utils.Corpus` can be inserted into any model by passing as argument `corpus` to `__init__` or `add_corpus` method of each model.
|
|
213
|
+
So, inserting `tomotopy.utils.Corpus` just has the same effect to inserting documents the corpus holds.
|
|
214
|
+
|
|
215
|
+
Some topic models requires different data for its documents.
|
|
216
|
+
For example, `tomotopy.DMRModel` requires argument `metadata` in `str` type,
|
|
217
|
+
but `tomotopy.PLDAModel` requires argument `labels` in `List[str]` type.
|
|
218
|
+
Since `tomotopy.utils.Corpus` holds an independent set of documents rather than being tied to a specific topic model,
|
|
219
|
+
data types required by a topic model may be inconsistent when a corpus is added into that topic model.
|
|
220
|
+
In this case, miscellaneous data can be transformed to be fitted target topic model using argument `transform`.
|
|
221
|
+
See more details in the following code:
|
|
222
|
+
|
|
223
|
+
::
|
|
224
|
+
|
|
225
|
+
from tomotopy import DMRModel
|
|
226
|
+
from tomotopy.utils import Corpus
|
|
227
|
+
|
|
228
|
+
corpus = Corpus()
|
|
229
|
+
corpus.add_doc("a b c d e".split(), a_data=1)
|
|
230
|
+
corpus.add_doc("e f g h i".split(), a_data=2)
|
|
231
|
+
corpus.add_doc("i j k l m".split(), a_data=3)
|
|
232
|
+
|
|
233
|
+
model = DMRModel(k=10)
|
|
234
|
+
model.add_corpus(corpus)
|
|
235
|
+
# You lose `a_data` field in `corpus`,
|
|
236
|
+
# and `metadata` that `DMRModel` requires is filled with the default value, empty str.
|
|
237
|
+
|
|
238
|
+
assert model.docs[0].metadata == ''
|
|
239
|
+
assert model.docs[1].metadata == ''
|
|
240
|
+
assert model.docs[2].metadata == ''
|
|
241
|
+
|
|
242
|
+
def transform_a_data_to_metadata(misc: dict):
|
|
243
|
+
return {'metadata': str(misc['a_data'])}
|
|
244
|
+
# this function transforms `a_data` to `metadata`
|
|
245
|
+
|
|
246
|
+
model = DMRModel(k=10)
|
|
247
|
+
model.add_corpus(corpus, transform=transform_a_data_to_metadata)
|
|
248
|
+
# Now docs in `model` has non-default `metadata`, that generated from `a_data` field.
|
|
249
|
+
|
|
250
|
+
assert model.docs[0].metadata == '1'
|
|
251
|
+
assert model.docs[1].metadata == '2'
|
|
252
|
+
assert model.docs[2].metadata == '3'
|
|
253
|
+
|
|
205
254
|
Parallel Sampling Algorithms
|
|
206
255
|
----------------------------
|
|
207
256
|
Since version 0.5.0, `tomotopy` allows you to choose a parallelism algorithm.
|
|
@@ -260,6 +309,32 @@ meaning you can use it for any reasonable purpose and remain in complete ownersh
|
|
|
260
309
|
|
|
261
310
|
History
|
|
262
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
|
+
|
|
332
|
+
* 0.12.1 (2021-06-20)
|
|
333
|
+
* An issue where `tomotopy.LDAModel.set_word_prior()` causes a crash has been fixed.
|
|
334
|
+
* Now `tomotopy.LDAModel.perplexity` and `tomotopy.LDAModel.ll_per_word` return the accurate value when `TermWeight` is not `ONE`.
|
|
335
|
+
* `tomotopy.LDAModel.used_vocab_weighted_freq` was added, which returns term-weighted frequencies of words.
|
|
336
|
+
* Now `tomotopy.LDAModel.summary()` shows not only the entropy of words, but also the entropy of term-weighted words.
|
|
337
|
+
|
|
263
338
|
* 0.12.0 (2021-04-26)
|
|
264
339
|
* Now `tomotopy.DMRModel` and `tomotopy.GDMRModel` support multiple values of metadata (see https://github.com/bab2min/tomotopy/blob/main/examples/dmr_multi_label.py )
|
|
265
340
|
* The performance of `tomotopy.GDMRModel` was improved.
|
|
@@ -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
|
{
|
|
@@ -316,7 +316,7 @@ namespace tomoto
|
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
float totN = std::accumulate(vocabFreqs.begin(), vocabFreqs.end(), (size_t)0);
|
|
319
|
+
float totN = (float)std::accumulate(vocabFreqs.begin(), vocabFreqs.end(), (size_t)0);
|
|
320
320
|
const float logTotN = std::log(totN);
|
|
321
321
|
|
|
322
322
|
// calculating PMIs
|
|
@@ -489,7 +489,7 @@ namespace tomoto
|
|
|
489
489
|
|
|
490
490
|
float rbe = branchingEntropy(trieNodes[0].getNext(bigram.first)->getNext(bigram.second), candMinCnt);
|
|
491
491
|
float lbe = branchingEntropy(trieNodesBw[0].getNext(bigram.second)->getNext(bigram.first), candMinCnt);
|
|
492
|
-
float nbe = std::sqrt(rbe * lbe) / std::log(p.second);
|
|
492
|
+
float nbe = std::sqrt(rbe * lbe) / (float)std::log(p.second);
|
|
493
493
|
if (nbe < minNBE) continue;
|
|
494
494
|
candidates.emplace_back(npmi * nbe, bigram.first, bigram.second);
|
|
495
495
|
candidates.back().cf = p.second;
|
|
@@ -512,7 +512,7 @@ namespace tomoto
|
|
|
512
512
|
|
|
513
513
|
float rbe = branchingEntropy(node, candMinCnt);
|
|
514
514
|
float lbe = branchingEntropy(trieNodesBw[0].findNode(rkeys.rbegin(), rkeys.rend()), candMinCnt);
|
|
515
|
-
float nbe = std::sqrt(rbe * lbe) / std::log(node->val);
|
|
515
|
+
float nbe = std::sqrt(rbe * lbe) / (float)std::log(node->val);
|
|
516
516
|
if (nbe < minNBE) return;
|
|
517
517
|
candidates.emplace_back(npmi * nbe, rkeys);
|
|
518
518
|
candidates.back().cf = node->val;
|
|
@@ -33,7 +33,10 @@ namespace tomoto
|
|
|
33
33
|
friend typename BaseClass::BaseClass;
|
|
34
34
|
using WeightType = typename BaseClass::WeightType;
|
|
35
35
|
|
|
36
|
-
static constexpr
|
|
36
|
+
static constexpr auto tmid()
|
|
37
|
+
{
|
|
38
|
+
return serializer::to_key("CTM\0");
|
|
39
|
+
}
|
|
37
40
|
|
|
38
41
|
uint64_t numBetaSample = 10;
|
|
39
42
|
uint64_t numTMNSample = 5;
|
|
@@ -128,7 +131,7 @@ namespace tomoto
|
|
|
128
131
|
{
|
|
129
132
|
if (this->globalStep < this->burnIn || !this->optimInterval || (this->globalStep + 1) % this->optimInterval != 0) return;
|
|
130
133
|
|
|
131
|
-
if (pool)
|
|
134
|
+
if (pool && pool->getNumWorkers() > 1)
|
|
132
135
|
{
|
|
133
136
|
std::vector<std::future<void>> res;
|
|
134
137
|
const size_t chStride = pool->getNumWorkers() * 8;
|
|
@@ -247,8 +250,9 @@ namespace tomoto
|
|
|
247
250
|
this->optimInterval = 2;
|
|
248
251
|
}
|
|
249
252
|
|
|
250
|
-
std::vector<Float>
|
|
253
|
+
std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
|
|
251
254
|
{
|
|
255
|
+
if (!doc.numByTopic.size()) return {};
|
|
252
256
|
std::vector<Float> ret(this->K);
|
|
253
257
|
Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
|
|
254
258
|
if (normalize)
|
|
@@ -47,7 +47,10 @@ namespace tomoto
|
|
|
47
47
|
friend typename BaseClass::BaseClass;
|
|
48
48
|
using WeightType = typename BaseClass::WeightType;
|
|
49
49
|
|
|
50
|
-
static constexpr
|
|
50
|
+
static constexpr auto tmid()
|
|
51
|
+
{
|
|
52
|
+
return serializer::to_key("DMR\0");
|
|
53
|
+
}
|
|
51
54
|
|
|
52
55
|
Matrix lambda;
|
|
53
56
|
mutable std::unordered_map<std::pair<uint64_t, Vector>, size_t, MdHash> mdHashMap;
|
|
@@ -83,7 +86,7 @@ namespace tomoto
|
|
|
83
86
|
const size_t chStride = pool.getNumWorkers() * 8;
|
|
84
87
|
for (size_t ch = 0; ch < chStride; ++ch)
|
|
85
88
|
{
|
|
86
|
-
res.emplace_back(pool.enqueue([
|
|
89
|
+
res.emplace_back(pool.enqueue([&, ch](size_t threadId)
|
|
87
90
|
{
|
|
88
91
|
auto& tmpK = localData[threadId].tmpK;
|
|
89
92
|
if (!tmpK.size()) tmpK.resize(this->K);
|
|
@@ -449,8 +452,9 @@ namespace tomoto
|
|
|
449
452
|
optimRepeat = _optimRepeat;
|
|
450
453
|
}
|
|
451
454
|
|
|
452
|
-
std::vector<Float>
|
|
455
|
+
std::vector<Float> _getTopicsByDoc(const _DocType& doc, bool normalize) const
|
|
453
456
|
{
|
|
457
|
+
if (!doc.numByTopic.size()) return {};
|
|
454
458
|
std::vector<Float> ret(this->K);
|
|
455
459
|
auto alphaDoc = getCachedAlpha(doc);
|
|
456
460
|
Eigen::Map<Eigen::Array<Float, -1, 1>> m{ ret.data(), this->K };
|
|
@@ -41,7 +41,10 @@ namespace tomoto
|
|
|
41
41
|
friend typename BaseClass::BaseClass;
|
|
42
42
|
using WeightType = typename BaseClass::WeightType;
|
|
43
43
|
|
|
44
|
-
static constexpr
|
|
44
|
+
static constexpr auto tmid()
|
|
45
|
+
{
|
|
46
|
+
return serializer::to_key("DTM\0");
|
|
47
|
+
}
|
|
45
48
|
|
|
46
49
|
uint64_t T;
|
|
47
50
|
Float shapeA = 0.03f, shapeB = 0.1f, shapeC = 0.55f;
|
|
@@ -54,7 +57,7 @@ namespace tomoto
|
|
|
54
57
|
std::vector<sample::AliasMethod<>> wordAliasTables; // Dim: (Word * Time)
|
|
55
58
|
|
|
56
59
|
template<int _inc>
|
|
57
|
-
inline void addWordTo(_ModelState& ld, _DocType& doc,
|
|
60
|
+
inline void addWordTo(_ModelState& ld, _DocType& doc, size_t pid, Vid vid, Tid tid) const
|
|
58
61
|
{
|
|
59
62
|
assert(tid < this->K);
|
|
60
63
|
assert(vid < this->realV);
|
|
@@ -233,7 +236,7 @@ namespace tomoto
|
|
|
233
236
|
for (size_t t = 0; t < T; ++t)
|
|
234
237
|
{
|
|
235
238
|
// update alias tables for word proposal
|
|
236
|
-
if (pool)
|
|
239
|
+
if (pool && pool->getNumWorkers() > 1)
|
|
237
240
|
{
|
|
238
241
|
const size_t chStride = pool->getNumWorkers() * 8;
|
|
239
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)
|
|
@@ -168,7 +168,7 @@ namespace tomoto
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
template<int _inc>
|
|
171
|
-
inline void addWordTo(_ModelState& ld, _DocType& doc,
|
|
171
|
+
inline void addWordTo(_ModelState& ld, _DocType& doc, size_t pid, Vid vid, size_t tableId, Tid tid) const
|
|
172
172
|
{
|
|
173
173
|
addOnlyWordTo<_inc>(ld, doc, pid, vid, tid);
|
|
174
174
|
constexpr bool _dec = _inc < 0 && _tw != TermWeight::one;
|
|
@@ -490,8 +490,9 @@ namespace tomoto
|
|
|
490
490
|
THROW_ERROR_WITH_INFO(exc::Unimplemented, "HDPModel doesn't provide setWordPrior function.");
|
|
491
491
|
}
|
|
492
492
|
|
|
493
|
-
std::vector<Float>
|
|
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)
|
|
@@ -522,7 +523,7 @@ namespace tomoto
|
|
|
522
523
|
for (size_t i = 0; i < cntIdx.size(); ++i)
|
|
523
524
|
{
|
|
524
525
|
if (i && cntIdx[i].first / sum <= topicThreshold) break;
|
|
525
|
-
newK[cntIdx[i].second] = i;
|
|
526
|
+
newK[cntIdx[i].second] = (Tid)i;
|
|
526
527
|
liveK++;
|
|
527
528
|
}
|
|
528
529
|
|
|
@@ -538,8 +539,11 @@ namespace tomoto
|
|
|
538
539
|
auto d = lda->_makeFromRawDoc(doc);
|
|
539
540
|
lda->_addDoc(d);
|
|
540
541
|
}
|
|
541
|
-
|
|
542
|
-
lda->
|
|
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{
|
|
@@ -558,7 +562,7 @@ namespace tomoto
|
|
|
558
562
|
lda->docs[i].Zs[j] = non_topic_id;
|
|
559
563
|
continue;
|
|
560
564
|
}
|
|
561
|
-
|
|
565
|
+
Tid newTopic = newK[this->docs[i].numTopicByTable[this->docs[i].Zs[j]].topic];
|
|
562
566
|
while (newTopic == (Tid)-1) newTopic = newK[randomTopic(rng)];
|
|
563
567
|
lda->docs[i].Zs[j] = newTopic;
|
|
564
568
|
}
|
|
@@ -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)
|
|
@@ -335,7 +335,10 @@ namespace tomoto
|
|
|
335
335
|
friend typename BaseClass::BaseClass;
|
|
336
336
|
using WeightType = typename BaseClass::WeightType;
|
|
337
337
|
|
|
338
|
-
static constexpr
|
|
338
|
+
static constexpr auto tmid()
|
|
339
|
+
{
|
|
340
|
+
return serializer::to_key("hLDA");
|
|
341
|
+
}
|
|
339
342
|
|
|
340
343
|
Float gamma;
|
|
341
344
|
|
|
@@ -422,7 +425,7 @@ namespace tomoto
|
|
|
422
425
|
}
|
|
423
426
|
|
|
424
427
|
template<int _inc>
|
|
425
|
-
inline void addWordTo(_ModelState& ld, _DocType& doc,
|
|
428
|
+
inline void addWordTo(_ModelState& ld, _DocType& doc, size_t pid, Vid vid, Tid level) const
|
|
426
429
|
{
|
|
427
430
|
assert(vid < this->realV);
|
|
428
431
|
constexpr bool _dec = _inc < 0 && _tw != TermWeight::one;
|
|
@@ -143,7 +143,7 @@ namespace tomoto
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
template<int _inc>
|
|
146
|
-
inline void addWordTo(_ModelState& ld, _DocType& doc,
|
|
146
|
+
inline void addWordTo(_ModelState& ld, _DocType& doc, size_t pid, Vid vid, Tid z1, Tid z2) const
|
|
147
147
|
{
|
|
148
148
|
assert(vid < this->realV);
|
|
149
149
|
constexpr bool _dec = _inc < 0 && _tw != TermWeight::one;
|
|
@@ -540,8 +540,9 @@ namespace tomoto
|
|
|
540
540
|
return ret;
|
|
541
541
|
}
|
|
542
542
|
|
|
543
|
-
std::vector<Float>
|
|
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;
|
|
@@ -121,7 +121,7 @@ namespace tomoto
|
|
|
121
121
|
|
|
122
122
|
void updateSumWordWeight(size_t realV)
|
|
123
123
|
{
|
|
124
|
-
sumWordWeight = std::count_if(static_cast<_Base*>(this)->words.begin(), static_cast<_Base*>(this)->words.end(), [realV](Vid w)
|
|
124
|
+
sumWordWeight = (int32_t)std::count_if(static_cast<_Base*>(this)->words.begin(), static_cast<_Base*>(this)->words.end(), [realV](Vid w)
|
|
125
125
|
{
|
|
126
126
|
return w < realV;
|
|
127
127
|
});
|
|
@@ -164,8 +164,8 @@ namespace tomoto
|
|
|
164
164
|
struct LDAArgs
|
|
165
165
|
{
|
|
166
166
|
size_t k = 1;
|
|
167
|
-
std::vector<Float> alpha = { 0.1 };
|
|
168
|
-
Float eta = 0.01;
|
|
167
|
+
std::vector<Float> alpha = { (Float)0.1 };
|
|
168
|
+
Float eta = (Float)0.01;
|
|
169
169
|
size_t seed = std::random_device{}();
|
|
170
170
|
};
|
|
171
171
|
|
|
@@ -82,7 +82,7 @@ namespace tomoto
|
|
|
82
82
|
friend BaseClass;
|
|
83
83
|
|
|
84
84
|
static constexpr const char TWID[] = "one\0";
|
|
85
|
-
static constexpr
|
|
85
|
+
static constexpr const char TMID[] = "LDA\0";
|
|
86
86
|
|
|
87
87
|
Float alpha;
|
|
88
88
|
Vector alphas;
|
|
@@ -125,7 +125,7 @@ namespace tomoto
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
template<int _Inc, typename _Vec>
|
|
128
|
-
inline void addWordTo(_ModelState& ld, _DocType& doc,
|
|
128
|
+
inline void addWordTo(_ModelState& ld, _DocType& doc, size_t pid, Vid vid, _Vec tDist) const
|
|
129
129
|
{
|
|
130
130
|
assert(vid < this->realV);
|
|
131
131
|
constexpr bool _dec = _Inc < 0;
|
|
@@ -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
|
|
|
@@ -392,7 +392,7 @@ namespace tomoto
|
|
|
392
392
|
return static_cast<const DerivedClass*>(this)->_getTopicsCount();
|
|
393
393
|
}
|
|
394
394
|
|
|
395
|
-
std::vector<Float>
|
|
395
|
+
std::vector<Float> _getTopicsByDoc(const _DocType& doc) const
|
|
396
396
|
{
|
|
397
397
|
std::vector<Float> ret(K);
|
|
398
398
|
Float sum = doc.getSumWordWeight() + K * alpha;
|