tomoto 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +123 -0
- data/ext/tomoto/ext.cpp +245 -0
- data/ext/tomoto/extconf.rb +28 -0
- data/lib/tomoto.rb +12 -0
- data/lib/tomoto/ct.rb +11 -0
- data/lib/tomoto/hdp.rb +11 -0
- data/lib/tomoto/lda.rb +67 -0
- data/lib/tomoto/version.rb +3 -0
- data/vendor/EigenRand/EigenRand/Core.h +1139 -0
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +111 -0
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +877 -0
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +108 -0
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +626 -0
- data/vendor/EigenRand/EigenRand/EigenRand +19 -0
- data/vendor/EigenRand/EigenRand/Macro.h +24 -0
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +978 -0
- data/vendor/EigenRand/EigenRand/PacketFilter.h +286 -0
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +624 -0
- data/vendor/EigenRand/EigenRand/RandUtils.h +413 -0
- data/vendor/EigenRand/EigenRand/doc.h +220 -0
- data/vendor/EigenRand/LICENSE +21 -0
- data/vendor/EigenRand/README.md +288 -0
- data/vendor/eigen/COPYING.BSD +26 -0
- data/vendor/eigen/COPYING.GPL +674 -0
- data/vendor/eigen/COPYING.LGPL +502 -0
- data/vendor/eigen/COPYING.MINPACK +52 -0
- data/vendor/eigen/COPYING.MPL2 +373 -0
- data/vendor/eigen/COPYING.README +18 -0
- data/vendor/eigen/Eigen/CMakeLists.txt +19 -0
- data/vendor/eigen/Eigen/Cholesky +46 -0
- data/vendor/eigen/Eigen/CholmodSupport +48 -0
- data/vendor/eigen/Eigen/Core +537 -0
- data/vendor/eigen/Eigen/Dense +7 -0
- data/vendor/eigen/Eigen/Eigen +2 -0
- data/vendor/eigen/Eigen/Eigenvalues +61 -0
- data/vendor/eigen/Eigen/Geometry +62 -0
- data/vendor/eigen/Eigen/Householder +30 -0
- data/vendor/eigen/Eigen/IterativeLinearSolvers +48 -0
- data/vendor/eigen/Eigen/Jacobi +33 -0
- data/vendor/eigen/Eigen/LU +50 -0
- data/vendor/eigen/Eigen/MetisSupport +35 -0
- data/vendor/eigen/Eigen/OrderingMethods +73 -0
- data/vendor/eigen/Eigen/PaStiXSupport +48 -0
- data/vendor/eigen/Eigen/PardisoSupport +35 -0
- data/vendor/eigen/Eigen/QR +51 -0
- data/vendor/eigen/Eigen/QtAlignedMalloc +40 -0
- data/vendor/eigen/Eigen/SPQRSupport +34 -0
- data/vendor/eigen/Eigen/SVD +51 -0
- data/vendor/eigen/Eigen/Sparse +36 -0
- data/vendor/eigen/Eigen/SparseCholesky +45 -0
- data/vendor/eigen/Eigen/SparseCore +69 -0
- data/vendor/eigen/Eigen/SparseLU +46 -0
- data/vendor/eigen/Eigen/SparseQR +37 -0
- data/vendor/eigen/Eigen/StdDeque +27 -0
- data/vendor/eigen/Eigen/StdList +26 -0
- data/vendor/eigen/Eigen/StdVector +27 -0
- data/vendor/eigen/Eigen/SuperLUSupport +64 -0
- data/vendor/eigen/Eigen/UmfPackSupport +40 -0
- data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +673 -0
- data/vendor/eigen/Eigen/src/Cholesky/LLT.h +542 -0
- data/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +639 -0
- data/vendor/eigen/Eigen/src/Core/Array.h +329 -0
- data/vendor/eigen/Eigen/src/Core/ArrayBase.h +226 -0
- data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +209 -0
- data/vendor/eigen/Eigen/src/Core/Assign.h +90 -0
- data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +935 -0
- data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +178 -0
- data/vendor/eigen/Eigen/src/Core/BandMatrix.h +353 -0
- data/vendor/eigen/Eigen/src/Core/Block.h +452 -0
- data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +164 -0
- data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +160 -0
- data/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +175 -0
- data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +1688 -0
- data/vendor/eigen/Eigen/src/Core/CoreIterators.h +127 -0
- data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +184 -0
- data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +866 -0
- data/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +128 -0
- data/vendor/eigen/Eigen/src/Core/DenseBase.h +611 -0
- data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +681 -0
- data/vendor/eigen/Eigen/src/Core/DenseStorage.h +570 -0
- data/vendor/eigen/Eigen/src/Core/Diagonal.h +260 -0
- data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +343 -0
- data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +28 -0
- data/vendor/eigen/Eigen/src/Core/Dot.h +318 -0
- data/vendor/eigen/Eigen/src/Core/EigenBase.h +159 -0
- data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +146 -0
- data/vendor/eigen/Eigen/src/Core/Fuzzy.h +155 -0
- data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +455 -0
- data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +593 -0
- data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +187 -0
- data/vendor/eigen/Eigen/src/Core/IO.h +225 -0
- data/vendor/eigen/Eigen/src/Core/Inverse.h +118 -0
- data/vendor/eigen/Eigen/src/Core/Map.h +171 -0
- data/vendor/eigen/Eigen/src/Core/MapBase.h +303 -0
- data/vendor/eigen/Eigen/src/Core/MathFunctions.h +1415 -0
- data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +101 -0
- data/vendor/eigen/Eigen/src/Core/Matrix.h +459 -0
- data/vendor/eigen/Eigen/src/Core/MatrixBase.h +529 -0
- data/vendor/eigen/Eigen/src/Core/NestByValue.h +110 -0
- data/vendor/eigen/Eigen/src/Core/NoAlias.h +108 -0
- data/vendor/eigen/Eigen/src/Core/NumTraits.h +248 -0
- data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +633 -0
- data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1035 -0
- data/vendor/eigen/Eigen/src/Core/Product.h +186 -0
- data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1112 -0
- data/vendor/eigen/Eigen/src/Core/Random.h +182 -0
- data/vendor/eigen/Eigen/src/Core/Redux.h +505 -0
- data/vendor/eigen/Eigen/src/Core/Ref.h +283 -0
- data/vendor/eigen/Eigen/src/Core/Replicate.h +142 -0
- data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +117 -0
- data/vendor/eigen/Eigen/src/Core/Reverse.h +211 -0
- data/vendor/eigen/Eigen/src/Core/Select.h +162 -0
- data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +352 -0
- data/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- data/vendor/eigen/Eigen/src/Core/Solve.h +188 -0
- data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +235 -0
- data/vendor/eigen/Eigen/src/Core/SolverBase.h +130 -0
- data/vendor/eigen/Eigen/src/Core/StableNorm.h +221 -0
- data/vendor/eigen/Eigen/src/Core/Stride.h +111 -0
- data/vendor/eigen/Eigen/src/Core/Swap.h +67 -0
- data/vendor/eigen/Eigen/src/Core/Transpose.h +403 -0
- data/vendor/eigen/Eigen/src/Core/Transpositions.h +407 -0
- data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +983 -0
- data/vendor/eigen/Eigen/src/Core/VectorBlock.h +96 -0
- data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +695 -0
- data/vendor/eigen/Eigen/src/Core/Visitor.h +273 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +451 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +439 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +637 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +51 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +391 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1316 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +430 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +322 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +1061 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +103 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +674 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +91 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +333 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +1124 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +212 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +29 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +49 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +490 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +91 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +760 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +471 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +562 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +895 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +77 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +397 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +137 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +945 -0
- data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +168 -0
- data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +475 -0
- data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +188 -0
- data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +136 -0
- data/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +792 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2156 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +492 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +311 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +122 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +619 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +163 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +521 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +287 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +260 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +466 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +315 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +335 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +163 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +145 -0
- data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +398 -0
- data/vendor/eigen/Eigen/src/Core/util/Constants.h +547 -0
- data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +83 -0
- data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
- data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +130 -0
- data/vendor/eigen/Eigen/src/Core/util/Macros.h +1001 -0
- data/vendor/eigen/Eigen/src/Core/util/Memory.h +993 -0
- data/vendor/eigen/Eigen/src/Core/util/Meta.h +534 -0
- data/vendor/eigen/Eigen/src/Core/util/NonMPL2.h +3 -0
- data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +27 -0
- data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +218 -0
- data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +821 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +459 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +654 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +546 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +870 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +556 -0
- data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +392 -0
- data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +247 -0
- data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +114 -0
- data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +497 -0
- data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +282 -0
- data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +234 -0
- data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +195 -0
- data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +814 -0
- data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +199 -0
- data/vendor/eigen/Eigen/src/Geometry/RotationBase.h +206 -0
- data/vendor/eigen/Eigen/src/Geometry/Scaling.h +170 -0
- data/vendor/eigen/Eigen/src/Geometry/Transform.h +1542 -0
- data/vendor/eigen/Eigen/src/Geometry/Translation.h +208 -0
- data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +166 -0
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +161 -0
- data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +103 -0
- data/vendor/eigen/Eigen/src/Householder/Householder.h +172 -0
- data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +470 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +228 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +246 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +400 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +462 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +394 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +216 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +115 -0
- data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +462 -0
- data/vendor/eigen/Eigen/src/LU/Determinant.h +101 -0
- data/vendor/eigen/Eigen/src/LU/FullPivLU.h +891 -0
- data/vendor/eigen/Eigen/src/LU/InverseImpl.h +415 -0
- data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +611 -0
- data/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +338 -0
- data/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +445 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1843 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +157 -0
- data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +543 -0
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +653 -0
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +562 -0
- data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +676 -0
- data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +409 -0
- data/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +313 -0
- data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1246 -0
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +804 -0
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- data/vendor/eigen/Eigen/src/SVD/SVDBase.h +315 -0
- data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +689 -0
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
- data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +377 -0
- data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +258 -0
- data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- data/vendor/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +216 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +603 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +341 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +726 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +148 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +320 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +98 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +305 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1403 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +405 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +169 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +49 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +397 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +656 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +178 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +478 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +253 -0
- data/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +773 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +301 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +745 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +126 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdList.h +106 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +131 -0
- data/vendor/eigen/Eigen/src/StlSupport/details.h +84 -0
- data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +1027 -0
- data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +506 -0
- data/vendor/eigen/Eigen/src/misc/Image.h +82 -0
- data/vendor/eigen/Eigen/src/misc/Kernel.h +79 -0
- data/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +55 -0
- data/vendor/eigen/Eigen/src/misc/blas.h +440 -0
- data/vendor/eigen/Eigen/src/misc/lapack.h +152 -0
- data/vendor/eigen/Eigen/src/misc/lapacke.h +16291 -0
- data/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +17 -0
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +332 -0
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +552 -0
- data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +1058 -0
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +163 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +85 -0
- data/vendor/eigen/README.md +3 -0
- data/vendor/eigen/bench/README.txt +55 -0
- data/vendor/eigen/bench/btl/COPYING +340 -0
- data/vendor/eigen/bench/btl/README +154 -0
- data/vendor/eigen/bench/tensors/README +21 -0
- data/vendor/eigen/blas/README.txt +6 -0
- data/vendor/eigen/demos/mandelbrot/README +10 -0
- data/vendor/eigen/demos/mix_eigen_and_c/README +9 -0
- data/vendor/eigen/demos/opengl/README +13 -0
- data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +1760 -0
- data/vendor/eigen/unsupported/README.txt +50 -0
- data/vendor/tomotopy/LICENSE +21 -0
- data/vendor/tomotopy/README.kr.rst +375 -0
- data/vendor/tomotopy/README.rst +382 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +362 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.h +88 -0
- data/vendor/tomotopy/src/Labeling/Labeler.h +50 -0
- data/vendor/tomotopy/src/TopicModel/CT.h +37 -0
- data/vendor/tomotopy/src/TopicModel/CTModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +293 -0
- data/vendor/tomotopy/src/TopicModel/DMR.h +51 -0
- data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +374 -0
- data/vendor/tomotopy/src/TopicModel/DT.h +65 -0
- data/vendor/tomotopy/src/TopicModel/DTM.h +22 -0
- data/vendor/tomotopy/src/TopicModel/DTModel.cpp +15 -0
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +572 -0
- data/vendor/tomotopy/src/TopicModel/GDMR.h +37 -0
- data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +14 -0
- data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +485 -0
- data/vendor/tomotopy/src/TopicModel/HDP.h +74 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +592 -0
- data/vendor/tomotopy/src/TopicModel/HLDA.h +40 -0
- data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +681 -0
- data/vendor/tomotopy/src/TopicModel/HPA.h +27 -0
- data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +21 -0
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +588 -0
- data/vendor/tomotopy/src/TopicModel/LDA.h +144 -0
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +442 -0
- data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +1058 -0
- data/vendor/tomotopy/src/TopicModel/LLDA.h +45 -0
- data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +203 -0
- data/vendor/tomotopy/src/TopicModel/MGLDA.h +63 -0
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +17 -0
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +558 -0
- data/vendor/tomotopy/src/TopicModel/PA.h +43 -0
- data/vendor/tomotopy/src/TopicModel/PAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/PAModel.hpp +467 -0
- data/vendor/tomotopy/src/TopicModel/PLDA.h +17 -0
- data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +214 -0
- data/vendor/tomotopy/src/TopicModel/SLDA.h +54 -0
- data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +17 -0
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +456 -0
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +692 -0
- data/vendor/tomotopy/src/Utils/AliasMethod.hpp +169 -0
- data/vendor/tomotopy/src/Utils/Dictionary.h +80 -0
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +181 -0
- data/vendor/tomotopy/src/Utils/LBFGS.h +202 -0
- data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBacktracking.h +120 -0
- data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBracketing.h +122 -0
- data/vendor/tomotopy/src/Utils/LBFGS/Param.h +213 -0
- data/vendor/tomotopy/src/Utils/LUT.hpp +82 -0
- data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +69 -0
- data/vendor/tomotopy/src/Utils/PolyaGamma.hpp +200 -0
- data/vendor/tomotopy/src/Utils/PolyaGammaHybrid.hpp +672 -0
- data/vendor/tomotopy/src/Utils/ThreadPool.hpp +150 -0
- data/vendor/tomotopy/src/Utils/Trie.hpp +220 -0
- data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +94 -0
- data/vendor/tomotopy/src/Utils/Utils.hpp +337 -0
- data/vendor/tomotopy/src/Utils/avx_gamma.h +46 -0
- data/vendor/tomotopy/src/Utils/avx_mathfun.h +736 -0
- data/vendor/tomotopy/src/Utils/exception.h +28 -0
- data/vendor/tomotopy/src/Utils/math.h +281 -0
- data/vendor/tomotopy/src/Utils/rtnorm.hpp +2690 -0
- data/vendor/tomotopy/src/Utils/sample.hpp +192 -0
- data/vendor/tomotopy/src/Utils/serializer.hpp +695 -0
- data/vendor/tomotopy/src/Utils/slp.hpp +131 -0
- data/vendor/tomotopy/src/Utils/sse_gamma.h +48 -0
- data/vendor/tomotopy/src/Utils/sse_mathfun.h +710 -0
- data/vendor/tomotopy/src/Utils/text.hpp +49 -0
- data/vendor/tomotopy/src/Utils/tvector.hpp +543 -0
- metadata +531 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include <memory>
|
|
3
|
+
#include <iterator>
|
|
4
|
+
#include <limits>
|
|
5
|
+
|
|
6
|
+
namespace tomoto
|
|
7
|
+
{
|
|
8
|
+
namespace sample
|
|
9
|
+
{
|
|
10
|
+
template<typename _Precision = uint32_t>
|
|
11
|
+
class AliasMethod
|
|
12
|
+
{
|
|
13
|
+
std::unique_ptr<_Precision[]> arr;
|
|
14
|
+
std::unique_ptr<size_t[]> alias;
|
|
15
|
+
size_t msize = 0, bitsize = 0;
|
|
16
|
+
|
|
17
|
+
public:
|
|
18
|
+
AliasMethod()
|
|
19
|
+
{
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
AliasMethod(const AliasMethod& o)
|
|
23
|
+
{
|
|
24
|
+
operator=(o);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
AliasMethod(AliasMethod&& o)
|
|
28
|
+
{
|
|
29
|
+
operator=(o);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
AliasMethod& operator=(const AliasMethod& o)
|
|
33
|
+
{
|
|
34
|
+
msize = o.msize;
|
|
35
|
+
bitsize = o.bitsize;
|
|
36
|
+
if (msize)
|
|
37
|
+
{
|
|
38
|
+
arr = make_unique<_Precision[]>(1 << bitsize);
|
|
39
|
+
alias = make_unique<size_t[]>(1 << bitsize);
|
|
40
|
+
|
|
41
|
+
std::copy(o.arr.get(), o.arr.get() + (1 << bitsize), arr.get());
|
|
42
|
+
std::copy(o.alias.get(), o.alias.get() + (1 << bitsize), alias.get());
|
|
43
|
+
}
|
|
44
|
+
return *this;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
AliasMethod& operator=(AliasMethod&& o)
|
|
48
|
+
{
|
|
49
|
+
msize = o.msize;
|
|
50
|
+
bitsize = o.bitsize;
|
|
51
|
+
std::swap(arr, o.arr);
|
|
52
|
+
std::swap(alias, o.alias);
|
|
53
|
+
return *this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template<typename _Iter>
|
|
57
|
+
AliasMethod(_Iter first, _Iter last)
|
|
58
|
+
{
|
|
59
|
+
buildTable(first, last);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
template<typename _Iter>
|
|
63
|
+
void buildTable(_Iter first, _Iter last)
|
|
64
|
+
{
|
|
65
|
+
size_t psize, nbsize;
|
|
66
|
+
msize = 0;
|
|
67
|
+
double sum = 0;
|
|
68
|
+
for (auto it = first; it != last; ++it, ++msize)
|
|
69
|
+
{
|
|
70
|
+
sum += *it;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!std::isfinite(sum)) THROW_ERROR_WITH_INFO(exception::InvalidArgument, "cannot build NaN value distribution");
|
|
74
|
+
|
|
75
|
+
// ceil to power of 2
|
|
76
|
+
nbsize = log2_ceil(msize);
|
|
77
|
+
psize = (size_t)1 << nbsize;
|
|
78
|
+
|
|
79
|
+
if (nbsize != bitsize)
|
|
80
|
+
{
|
|
81
|
+
arr = make_unique<_Precision[]>(psize);
|
|
82
|
+
std::fill(arr.get(), arr.get() + psize, 0);
|
|
83
|
+
alias = make_unique<size_t[]>(psize);
|
|
84
|
+
bitsize = nbsize;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
sum /= psize;
|
|
88
|
+
|
|
89
|
+
auto f = make_unique<double[]>(psize);
|
|
90
|
+
auto pf = f.get();
|
|
91
|
+
for (auto it = first; it != last; ++it, ++pf)
|
|
92
|
+
{
|
|
93
|
+
*pf = *it / sum;
|
|
94
|
+
}
|
|
95
|
+
std::fill(pf, pf + psize - msize, 0);
|
|
96
|
+
|
|
97
|
+
size_t over = 0, under = 0, mm;
|
|
98
|
+
while (over < psize && f[over] < 1) ++over;
|
|
99
|
+
while (under < psize && f[under] >= 1) ++under;
|
|
100
|
+
mm = under + 1;
|
|
101
|
+
|
|
102
|
+
while (over < psize && under < psize)
|
|
103
|
+
{
|
|
104
|
+
arr[under] = f[under] * (std::numeric_limits<_Precision>::max() + 1.0);
|
|
105
|
+
alias[under] = over;
|
|
106
|
+
f[over] += f[under] - 1;
|
|
107
|
+
if (f[over] >= 1 || mm <= over)
|
|
108
|
+
{
|
|
109
|
+
for (under = mm; under < psize && f[under] >= 1; ++under);
|
|
110
|
+
mm = under + 1;
|
|
111
|
+
}
|
|
112
|
+
else
|
|
113
|
+
{
|
|
114
|
+
under = over;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
while (over < psize && f[over] < 1) ++over;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
for (; over < psize; ++over)
|
|
121
|
+
{
|
|
122
|
+
if (f[over] >= 1)
|
|
123
|
+
{
|
|
124
|
+
arr[over] = std::numeric_limits<_Precision>::max();
|
|
125
|
+
alias[over] = over;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (under < psize)
|
|
130
|
+
{
|
|
131
|
+
arr[under] = std::numeric_limits<_Precision>::max();
|
|
132
|
+
alias[under] = under;
|
|
133
|
+
for (under = mm; under < msize; ++under)
|
|
134
|
+
{
|
|
135
|
+
if (f[under] < 1)
|
|
136
|
+
{
|
|
137
|
+
arr[under] = std::numeric_limits<_Precision>::max();
|
|
138
|
+
alias[under] = under;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
template<typename _Rng>
|
|
145
|
+
size_t operator()(_Rng& rng) const
|
|
146
|
+
{
|
|
147
|
+
auto x = rng();
|
|
148
|
+
size_t a;
|
|
149
|
+
if (sizeof(_Precision) < sizeof(typename _Rng::result_type))
|
|
150
|
+
{
|
|
151
|
+
a = x >> (sizeof(x) * 8 - bitsize);
|
|
152
|
+
}
|
|
153
|
+
else
|
|
154
|
+
{
|
|
155
|
+
a = rng() & ((1 << bitsize) - 1);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
_Precision b = (_Precision)x;
|
|
159
|
+
if (b < arr[a])
|
|
160
|
+
{
|
|
161
|
+
assert(a < msize);
|
|
162
|
+
return a;
|
|
163
|
+
}
|
|
164
|
+
assert(alias[a] < msize);
|
|
165
|
+
return alias[a];
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include <random>
|
|
3
|
+
#include <exception>
|
|
4
|
+
#include <unordered_map>
|
|
5
|
+
#include <vector>
|
|
6
|
+
#include <iostream>
|
|
7
|
+
#include <sstream>
|
|
8
|
+
#include <cassert>
|
|
9
|
+
#include "serializer.hpp"
|
|
10
|
+
|
|
11
|
+
namespace tomoto
|
|
12
|
+
{
|
|
13
|
+
using Vid = uint32_t;
|
|
14
|
+
using Tid = uint16_t;
|
|
15
|
+
using Float = float;
|
|
16
|
+
|
|
17
|
+
class Dictionary
|
|
18
|
+
{
|
|
19
|
+
protected:
|
|
20
|
+
std::unordered_map<std::string, Vid> dict;
|
|
21
|
+
std::vector<std::string> id2word;
|
|
22
|
+
public:
|
|
23
|
+
Vid add(const std::string& word)
|
|
24
|
+
{
|
|
25
|
+
auto it = dict.find(word);
|
|
26
|
+
if (it == dict.end())
|
|
27
|
+
{
|
|
28
|
+
dict.emplace(std::make_pair(word, dict.size()));
|
|
29
|
+
id2word.emplace_back(word);
|
|
30
|
+
return (Vid)(dict.size() - 1);
|
|
31
|
+
}
|
|
32
|
+
return it->second;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
size_t size() const { return dict.size(); }
|
|
36
|
+
|
|
37
|
+
std::string toWord(Vid vid) const
|
|
38
|
+
{
|
|
39
|
+
assert(vid < id2word.size());
|
|
40
|
+
return id2word[vid];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
Vid toWid(const std::string& word) const
|
|
44
|
+
{
|
|
45
|
+
auto it = dict.find(word);
|
|
46
|
+
if (it == dict.end()) return (Vid)-1;
|
|
47
|
+
return it->second;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void serializerWrite(std::ostream& writer) const
|
|
51
|
+
{
|
|
52
|
+
serializer::writeMany(writer, serializer::to_key("Dict"), id2word);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void serializerRead(std::istream& reader)
|
|
56
|
+
{
|
|
57
|
+
serializer::readMany(reader, serializer::to_key("Dict"), id2word);
|
|
58
|
+
for (size_t i = 0; i < id2word.size(); ++i)
|
|
59
|
+
{
|
|
60
|
+
dict.emplace(id2word[i], i);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void swap(Dictionary& rhs)
|
|
65
|
+
{
|
|
66
|
+
std::swap(dict, rhs.dict);
|
|
67
|
+
std::swap(id2word, rhs.id2word);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void reorder(const std::vector<Vid>& order)
|
|
71
|
+
{
|
|
72
|
+
for (auto& p : dict)
|
|
73
|
+
{
|
|
74
|
+
p.second = order[p.second];
|
|
75
|
+
id2word[p.second] = p.first;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include <type_traits>
|
|
3
|
+
#include <Eigen/Dense>
|
|
4
|
+
#include "math.h"
|
|
5
|
+
|
|
6
|
+
namespace Eigen
|
|
7
|
+
{
|
|
8
|
+
namespace internal
|
|
9
|
+
{
|
|
10
|
+
template<typename PacketType>
|
|
11
|
+
struct to_int_packet
|
|
12
|
+
{
|
|
13
|
+
typedef PacketType type;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#ifdef EIGEN_VECTORIZE_AVX
|
|
19
|
+
#include <immintrin.h>
|
|
20
|
+
#include "avx_gamma.h"
|
|
21
|
+
|
|
22
|
+
namespace Eigen
|
|
23
|
+
{
|
|
24
|
+
namespace internal
|
|
25
|
+
{
|
|
26
|
+
template<> struct to_int_packet<Packet8f>
|
|
27
|
+
{
|
|
28
|
+
typedef Packet8i type;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
EIGEN_STRONG_INLINE Packet8f p_to_f32(const Packet8i& a)
|
|
32
|
+
{
|
|
33
|
+
return _mm256_cvtepi32_ps(a);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#elif defined(EIGEN_VECTORIZE_SSE2)
|
|
40
|
+
#include <xmmintrin.h>
|
|
41
|
+
#include "sse_gamma.h"
|
|
42
|
+
|
|
43
|
+
namespace Eigen
|
|
44
|
+
{
|
|
45
|
+
namespace internal
|
|
46
|
+
{
|
|
47
|
+
template<> struct to_int_packet<Packet4f>
|
|
48
|
+
{
|
|
49
|
+
typedef Packet4i type;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
EIGEN_STRONG_INLINE Packet4f p_to_f32(const Packet4i& a)
|
|
53
|
+
{
|
|
54
|
+
return _mm_cvtepi32_ps(a);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
namespace Eigen
|
|
62
|
+
{
|
|
63
|
+
namespace internal
|
|
64
|
+
{
|
|
65
|
+
template<typename Scalar, typename Scalar2> struct scalar_lgamma_subt_op {
|
|
66
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_lgamma_subt_op)
|
|
67
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& z, const Scalar2& a) const { return tomoto::math::lgammaSubt(z, a); }
|
|
68
|
+
template<typename Packet>
|
|
69
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& z, const Packet& a) const
|
|
70
|
+
{
|
|
71
|
+
return lgamma_subt(z, a);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
template<typename Scalar, typename Scalar2>
|
|
76
|
+
struct functor_traits<scalar_lgamma_subt_op<Scalar, Scalar2> >
|
|
77
|
+
{
|
|
78
|
+
enum {
|
|
79
|
+
Cost = HugeCost,
|
|
80
|
+
PacketAccess = 1
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
template<>
|
|
85
|
+
struct scalar_cast_op<int32_t, float> {
|
|
86
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cast_op)
|
|
87
|
+
typedef float result_type;
|
|
88
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const float operator() (const int32_t& a) const { return cast<int32_t, float>(a); }
|
|
89
|
+
|
|
90
|
+
template<typename Packet>
|
|
91
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const typename to_int_packet<typename std::remove_const<Packet>::type>::type& a) const
|
|
92
|
+
{
|
|
93
|
+
return p_to_f32(a);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
template<>
|
|
98
|
+
struct functor_traits<scalar_cast_op<int32_t, float> >
|
|
99
|
+
{
|
|
100
|
+
enum { Cost = NumTraits<float>::AddCost, PacketAccess = 1 };
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
template<typename ArgType>
|
|
104
|
+
struct unary_evaluator<CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType>, IndexBased >
|
|
105
|
+
: evaluator_base<CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType> >
|
|
106
|
+
{
|
|
107
|
+
typedef CwiseUnaryOp<scalar_cast_op<int32_t, float>, ArgType> XprType;
|
|
108
|
+
|
|
109
|
+
enum {
|
|
110
|
+
CoeffReadCost = evaluator<ArgType>::CoeffReadCost + functor_traits<scalar_cast_op<int32_t, float>>::Cost,
|
|
111
|
+
|
|
112
|
+
Flags = evaluator<ArgType>::Flags
|
|
113
|
+
& (HereditaryBits | LinearAccessBit | (functor_traits<scalar_cast_op<int32_t, float>>::PacketAccess ? PacketAccessBit : 0)),
|
|
114
|
+
Alignment = evaluator<ArgType>::Alignment
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
118
|
+
explicit unary_evaluator(const XprType& op)
|
|
119
|
+
: m_functor(op.functor()),
|
|
120
|
+
m_argImpl(op.nestedExpression())
|
|
121
|
+
{
|
|
122
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(NumTraits<float>::AddCost);
|
|
123
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
|
127
|
+
|
|
128
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
129
|
+
CoeffReturnType coeff(Index row, Index col) const
|
|
130
|
+
{
|
|
131
|
+
return m_functor(m_argImpl.coeff(row, col));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
135
|
+
CoeffReturnType coeff(Index index) const
|
|
136
|
+
{
|
|
137
|
+
return m_functor(m_argImpl.coeff(index));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
template<int LoadMode, typename PacketType>
|
|
141
|
+
EIGEN_STRONG_INLINE
|
|
142
|
+
PacketType packet(Index row, Index col) const
|
|
143
|
+
{
|
|
144
|
+
return m_functor.packetOp<PacketType>(m_argImpl.template packet<LoadMode, typename to_int_packet<PacketType>::type>(row, col));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
template<int LoadMode, typename PacketType>
|
|
148
|
+
EIGEN_STRONG_INLINE
|
|
149
|
+
PacketType packet(Index index) const
|
|
150
|
+
{
|
|
151
|
+
return m_functor.packetOp<PacketType>(m_argImpl.template packet<LoadMode, typename to_int_packet<PacketType>::type>(index));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
protected:
|
|
155
|
+
const scalar_cast_op<int32_t, float> m_functor;
|
|
156
|
+
evaluator<ArgType> m_argImpl;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
template <typename Derived, typename T> EIGEN_DEVICE_FUNC inline
|
|
162
|
+
const CwiseBinaryOp<internal::scalar_lgamma_subt_op< typename internal::traits<Derived>::Scalar, T >, const Derived,
|
|
163
|
+
const typename internal::plain_constant_type<Derived, T>::type>
|
|
164
|
+
lgamma_subt(const Eigen::ArrayBase<Derived>& x, const T& scalar) {
|
|
165
|
+
|
|
166
|
+
return CwiseBinaryOp<internal::scalar_lgamma_subt_op< typename internal::traits<Derived>::Scalar, T >, const Derived,
|
|
167
|
+
const typename internal::plain_constant_type<Derived, T>::type>(x.derived(),
|
|
168
|
+
typename internal::plain_constant_type<Derived, T>::type(x.derived().rows(), x.derived().cols(), internal::scalar_constant_op<T>(scalar))
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
template<typename Derived, typename Derived2>
|
|
173
|
+
inline const CwiseBinaryOp<internal::scalar_lgamma_subt_op<typename Derived::Scalar, typename Derived2::Scalar>, const Derived, const Derived2>
|
|
174
|
+
lgamma_subt(const Eigen::ArrayBase<Derived>& x, const Eigen::ArrayBase<Derived2>& y)
|
|
175
|
+
{
|
|
176
|
+
return CwiseBinaryOp<internal::scalar_lgamma_subt_op<typename Derived::Scalar, typename Derived2::Scalar>, const Derived, const Derived2>(
|
|
177
|
+
x.derived(),
|
|
178
|
+
y.derived()
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// Copyright (C) 2016-2019 Yixuan Qiu <yixuan.qiu@cos.name>
|
|
2
|
+
// Under MIT license
|
|
3
|
+
// https://github.com/yixuan/LBFGSpp
|
|
4
|
+
// bab2min modified some features
|
|
5
|
+
|
|
6
|
+
#ifndef LBFGS_H
|
|
7
|
+
#define LBFGS_H
|
|
8
|
+
|
|
9
|
+
#include <Eigen/Core>
|
|
10
|
+
#include "LBFGS/Param.h"
|
|
11
|
+
#include "LBFGS/LineSearchBacktracking.h"
|
|
12
|
+
#include "LBFGS/LineSearchBracketing.h"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
namespace LBFGSpp {
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
///
|
|
19
|
+
/// LBFGS solver for unconstrained numerical optimization
|
|
20
|
+
///
|
|
21
|
+
template < typename Scalar,
|
|
22
|
+
template<class> class LineSearch = LineSearchBacktracking >
|
|
23
|
+
class LBFGSSolver
|
|
24
|
+
{
|
|
25
|
+
private:
|
|
26
|
+
typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
|
|
27
|
+
typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> Matrix;
|
|
28
|
+
typedef Eigen::Map<Vector> MapVec;
|
|
29
|
+
|
|
30
|
+
static constexpr Scalar epsilon = Scalar(0.001); // add epsilon for preventing division-by-zero
|
|
31
|
+
|
|
32
|
+
LBFGSParam<Scalar> m_param; // Parameters to control the LBFGS algorithm
|
|
33
|
+
Matrix m_s; // History of the s vectors
|
|
34
|
+
Matrix m_y; // History of the y vectors
|
|
35
|
+
Vector m_ys; // History of the s'y values
|
|
36
|
+
Vector m_alpha; // History of the step lengths
|
|
37
|
+
Vector m_fx; // History of the objective function values
|
|
38
|
+
Vector m_xp; // Old x
|
|
39
|
+
Vector m_grad; // New gradient
|
|
40
|
+
Vector m_gradp; // Old gradient
|
|
41
|
+
Vector m_drt; // Moving direction
|
|
42
|
+
|
|
43
|
+
inline void reset(int n)
|
|
44
|
+
{
|
|
45
|
+
const int m = m_param.m;
|
|
46
|
+
m_s.resize(n, m);
|
|
47
|
+
m_y.resize(n, m);
|
|
48
|
+
m_ys.resize(m);
|
|
49
|
+
m_alpha.resize(m);
|
|
50
|
+
m_xp.resize(n);
|
|
51
|
+
m_grad.resize(n);
|
|
52
|
+
m_gradp.resize(n);
|
|
53
|
+
m_drt.resize(n);
|
|
54
|
+
if (m_param.past > 0)
|
|
55
|
+
m_fx.resize(m_param.past);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public:
|
|
59
|
+
///
|
|
60
|
+
/// Constructor for LBFGS solver.
|
|
61
|
+
///
|
|
62
|
+
/// \param param An object of \ref LBFGSParam to store parameters for the
|
|
63
|
+
/// algorithm
|
|
64
|
+
///
|
|
65
|
+
LBFGSSolver(const LBFGSParam<Scalar>& param = {}) :
|
|
66
|
+
m_param(param)
|
|
67
|
+
{
|
|
68
|
+
m_param.check_param();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
///
|
|
72
|
+
/// Minimizing a multivariate function using LBFGS algorithm.
|
|
73
|
+
/// Exceptions will be thrown if error occurs.
|
|
74
|
+
///
|
|
75
|
+
/// \param f A function object such that `f(x, grad)` returns the
|
|
76
|
+
/// objective function value at `x`, and overwrites `grad` with
|
|
77
|
+
/// the gradient.
|
|
78
|
+
/// \param x In: An initial guess of the optimal point. Out: The best point
|
|
79
|
+
/// found.
|
|
80
|
+
/// \param fx Out: The objective function value at `x`.
|
|
81
|
+
///
|
|
82
|
+
/// \return Number of iterations used.
|
|
83
|
+
///
|
|
84
|
+
template <typename Foo>
|
|
85
|
+
inline int minimize(Foo&& f, Eigen::Ref<Vector> x, Scalar& fx)
|
|
86
|
+
{
|
|
87
|
+
const int n = x.size();
|
|
88
|
+
const int fpast = m_param.past;
|
|
89
|
+
reset(n);
|
|
90
|
+
|
|
91
|
+
// Evaluate function and compute gradient
|
|
92
|
+
fx = f(x, m_grad);
|
|
93
|
+
|
|
94
|
+
Scalar xnorm = x.norm();
|
|
95
|
+
Scalar gnorm = m_grad.norm();
|
|
96
|
+
if (fpast > 0)
|
|
97
|
+
m_fx[0] = fx;
|
|
98
|
+
|
|
99
|
+
// Early exit if the initial x is already a minimizer
|
|
100
|
+
if (gnorm <= m_param.epsilon * std::max(xnorm, Scalar(1.0)))
|
|
101
|
+
{
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Initial direction
|
|
106
|
+
m_drt.noalias() = -m_grad;
|
|
107
|
+
// Initial step
|
|
108
|
+
Scalar step = Scalar(1.0) / m_drt.norm();
|
|
109
|
+
|
|
110
|
+
int k = 1;
|
|
111
|
+
int end = 0;
|
|
112
|
+
for (; ; )
|
|
113
|
+
{
|
|
114
|
+
// Save the curent x and gradient
|
|
115
|
+
m_xp.noalias() = x;
|
|
116
|
+
m_gradp.noalias() = m_grad;
|
|
117
|
+
|
|
118
|
+
// Line search to update x, fx and gradient
|
|
119
|
+
LineSearch<Scalar>::LineSearch(f, fx, x, m_grad, step, m_drt, m_xp, m_param);
|
|
120
|
+
|
|
121
|
+
// New x norm and gradient norm
|
|
122
|
+
xnorm = x.norm();
|
|
123
|
+
gnorm = m_grad.norm();
|
|
124
|
+
|
|
125
|
+
// Convergence test -- gradient
|
|
126
|
+
if (gnorm <= m_param.epsilon * std::max(xnorm, Scalar(1.0)))
|
|
127
|
+
{
|
|
128
|
+
return k;
|
|
129
|
+
}
|
|
130
|
+
// Convergence test -- objective function value
|
|
131
|
+
if (fpast > 0)
|
|
132
|
+
{
|
|
133
|
+
if (k >= fpast && std::abs((m_fx[k % fpast] - fx) / fx) < m_param.delta)
|
|
134
|
+
return k;
|
|
135
|
+
|
|
136
|
+
m_fx[k % fpast] = fx;
|
|
137
|
+
}
|
|
138
|
+
// Maximum number of iterations
|
|
139
|
+
if (m_param.max_iterations != 0 && k >= m_param.max_iterations)
|
|
140
|
+
{
|
|
141
|
+
return k;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Update s and y
|
|
145
|
+
// s_{k+1} = x_{k+1} - x_k
|
|
146
|
+
// y_{k+1} = g_{k+1} - g_k
|
|
147
|
+
MapVec svec(&m_s(0, end), n);
|
|
148
|
+
MapVec yvec(&m_y(0, end), n);
|
|
149
|
+
svec.noalias() = x - m_xp;
|
|
150
|
+
yvec.noalias() = m_grad - m_gradp;
|
|
151
|
+
|
|
152
|
+
// ys = y's = 1/rho
|
|
153
|
+
// yy = y'y
|
|
154
|
+
Scalar ys = yvec.dot(svec);
|
|
155
|
+
Scalar yy = yvec.squaredNorm();
|
|
156
|
+
|
|
157
|
+
/* prevent division-by-zero */
|
|
158
|
+
if (yy == 0 || ys == 0)
|
|
159
|
+
{
|
|
160
|
+
ys += epsilon;
|
|
161
|
+
yy += epsilon;
|
|
162
|
+
}
|
|
163
|
+
m_ys[end] = ys;
|
|
164
|
+
|
|
165
|
+
// Recursive formula to compute d = -H * g
|
|
166
|
+
m_drt.noalias() = -m_grad;
|
|
167
|
+
int bound = std::min(m_param.m, k);
|
|
168
|
+
end = (end + 1) % m_param.m;
|
|
169
|
+
int j = end;
|
|
170
|
+
for (int i = 0; i < bound; i++)
|
|
171
|
+
{
|
|
172
|
+
j = (j + m_param.m - 1) % m_param.m;
|
|
173
|
+
MapVec sj(&m_s(0, j), n);
|
|
174
|
+
MapVec yj(&m_y(0, j), n);
|
|
175
|
+
m_alpha[j] = sj.dot(m_drt) / m_ys[j];
|
|
176
|
+
m_drt.noalias() -= m_alpha[j] * yj;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
m_drt *= (ys / yy);
|
|
180
|
+
|
|
181
|
+
for (int i = 0; i < bound; i++)
|
|
182
|
+
{
|
|
183
|
+
MapVec sj(&m_s(0, j), n);
|
|
184
|
+
MapVec yj(&m_y(0, j), n);
|
|
185
|
+
Scalar beta = yj.dot(m_drt) / m_ys[j];
|
|
186
|
+
m_drt.noalias() += (m_alpha[j] - beta) * sj;
|
|
187
|
+
j = (j + 1) % m_param.m;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// step = 1.0 as initial guess
|
|
191
|
+
step = Scalar(1.0);
|
|
192
|
+
k++;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return k;
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
} // namespace LBFGSpp
|
|
201
|
+
|
|
202
|
+
#endif // LBFGS_H
|