tomoto 0.2.3 → 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 +6 -0
- data/README.md +8 -10
- data/ext/tomoto/extconf.rb +6 -2
- data/ext/tomoto/{ext.cpp → tomoto.cpp} +1 -1
- 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 +21 -0
- data/vendor/tomotopy/README.rst +20 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
- data/vendor/tomotopy/src/Labeling/Phraser.hpp +1 -1
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +2 -1
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +2 -1
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +1 -1
- 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 +53 -2
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +1 -1
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +1 -0
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +2 -2
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +16 -5
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +1 -0
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +1 -0
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +1 -0
- data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
- data/vendor/tomotopy/src/TopicModel/PTModel.hpp +31 -1
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +2 -2
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +7 -5
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
- data/vendor/tomotopy/src/Utils/exception.h +6 -0
- data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
- data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
- metadata +60 -14
- 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.
|
|
@@ -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이 아닌 경우에도 정확한 값을 반환합니다.
|
data/vendor/tomotopy/README.rst
CHANGED
|
@@ -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([
|
|
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)
|
|
@@ -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->
|
|
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 =
|
|
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.
|
|
382
|
+
else if (args.nuSq.size() == 1)
|
|
383
383
|
{
|
|
384
384
|
nuSq = Vector::Constant(F, args.nuSq[0]);
|
|
385
385
|
}
|
|
386
|
-
else if (args.
|
|
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::
|
|
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::
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
{
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
3
|
#include <random>
|
|
4
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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__)
|
|
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)));
|