tomoto 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +8 -10
- data/ext/tomoto/ct.cpp +11 -11
- data/ext/tomoto/dmr.cpp +14 -13
- data/ext/tomoto/dt.cpp +14 -14
- data/ext/tomoto/extconf.rb +7 -5
- data/ext/tomoto/gdmr.cpp +7 -7
- data/ext/tomoto/hdp.cpp +9 -9
- data/ext/tomoto/hlda.cpp +13 -13
- data/ext/tomoto/hpa.cpp +5 -5
- data/ext/tomoto/lda.cpp +42 -39
- data/ext/tomoto/llda.cpp +6 -6
- data/ext/tomoto/mglda.cpp +15 -15
- data/ext/tomoto/pa.cpp +6 -6
- data/ext/tomoto/plda.cpp +6 -6
- data/ext/tomoto/slda.cpp +8 -8
- data/ext/tomoto/{ext.cpp → tomoto.cpp} +8 -8
- data/ext/tomoto/utils.h +16 -70
- data/lib/tomoto/version.rb +1 -1
- data/lib/tomoto.rb +5 -1
- data/vendor/EigenRand/EigenRand/Core.h +10 -10
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
- data/vendor/EigenRand/EigenRand/EigenRand +11 -6
- data/vendor/EigenRand/EigenRand/Macro.h +13 -7
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
- data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
- data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
- data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
- data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
- data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
- data/vendor/EigenRand/EigenRand/doc.h +24 -12
- data/vendor/EigenRand/README.md +57 -4
- data/vendor/eigen/COPYING.APACHE +203 -0
- data/vendor/eigen/COPYING.BSD +1 -1
- data/vendor/eigen/COPYING.MINPACK +51 -52
- data/vendor/eigen/Eigen/Cholesky +0 -1
- data/vendor/eigen/Eigen/Core +112 -265
- data/vendor/eigen/Eigen/Eigenvalues +2 -3
- data/vendor/eigen/Eigen/Geometry +5 -8
- data/vendor/eigen/Eigen/Householder +0 -1
- data/vendor/eigen/Eigen/Jacobi +0 -1
- data/vendor/eigen/Eigen/KLUSupport +41 -0
- data/vendor/eigen/Eigen/LU +2 -5
- data/vendor/eigen/Eigen/OrderingMethods +0 -3
- data/vendor/eigen/Eigen/PaStiXSupport +1 -0
- data/vendor/eigen/Eigen/PardisoSupport +0 -0
- data/vendor/eigen/Eigen/QR +2 -3
- data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
- data/vendor/eigen/Eigen/SVD +0 -1
- data/vendor/eigen/Eigen/Sparse +0 -2
- data/vendor/eigen/Eigen/SparseCholesky +0 -8
- data/vendor/eigen/Eigen/SparseLU +4 -0
- data/vendor/eigen/Eigen/SparseQR +0 -1
- data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
- data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
- data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
- data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
- data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
- data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
- data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
- data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
- data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
- data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
- data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
- data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
- data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
- data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
- data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
- data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
- data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
- data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
- data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
- data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
- data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
- data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
- data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
- data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
- data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
- data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
- data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
- data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
- data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
- data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
- data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
- data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
- data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
- data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
- data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
- data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
- data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
- data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
- data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
- data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
- data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
- data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
- data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
- data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
- data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
- data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
- data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
- data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
- data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
- data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
- data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
- data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
- data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
- data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
- data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
- data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
- data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
- data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
- data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
- data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
- data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
- data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
- data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
- data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
- data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
- data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
- data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- data/vendor/eigen/README.md +2 -0
- data/vendor/eigen/bench/btl/README +1 -1
- data/vendor/eigen/bench/tensors/README +6 -7
- data/vendor/eigen/ci/README.md +56 -0
- data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
- data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
- data/vendor/eigen/unsupported/README.txt +1 -1
- data/vendor/tomotopy/README.kr.rst +78 -0
- data/vendor/tomotopy/README.rst +75 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
- data/vendor/tomotopy/src/Labeling/Phraser.hpp +4 -4
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
- data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +57 -6
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/LDA.h +3 -3
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +5 -5
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +50 -19
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/PAModel.hpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
- data/vendor/tomotopy/src/TopicModel/PTModel.hpp +36 -3
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +55 -26
- data/vendor/tomotopy/src/Utils/AliasMethod.hpp +5 -4
- data/vendor/tomotopy/src/Utils/Dictionary.h +2 -2
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
- data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +1 -1
- data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +1 -1
- data/vendor/tomotopy/src/Utils/exception.h +6 -0
- data/vendor/tomotopy/src/Utils/math.h +2 -2
- data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
- data/vendor/tomotopy/src/Utils/serializer.hpp +30 -5
- data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
- metadata +64 -18
- data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @file Core.h
|
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
|
4
4
|
* @brief
|
|
5
|
-
* @version 0.3.
|
|
6
|
-
* @date
|
|
5
|
+
* @version 0.3.3
|
|
6
|
+
* @date 2021-03-31
|
|
7
7
|
*
|
|
8
|
-
* @copyright Copyright (c) 2020
|
|
8
|
+
* @copyright Copyright (c) 2020-2021
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
#ifndef EIGENRAND_CORE_H
|
|
14
14
|
#define EIGENRAND_CORE_H
|
|
15
15
|
|
|
16
|
-
#include
|
|
16
|
+
#include "RandUtils.h"
|
|
17
17
|
|
|
18
|
-
#include
|
|
19
|
-
#include
|
|
20
|
-
#include
|
|
21
|
-
#include
|
|
18
|
+
#include "Dists/Basic.h"
|
|
19
|
+
#include "Dists/Discrete.h"
|
|
20
|
+
#include "Dists/NormalExp.h"
|
|
21
|
+
#include "Dists/GammaPoisson.h"
|
|
22
22
|
|
|
23
|
-
#include
|
|
24
|
-
#include
|
|
23
|
+
#include "MvDists/MvNormal.h"
|
|
24
|
+
#include "MvDists/Multinomial.h"
|
|
25
25
|
|
|
26
26
|
namespace Eigen
|
|
27
27
|
{
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @file Basic.h
|
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
|
4
4
|
* @brief
|
|
5
|
-
* @version 0.3.
|
|
6
|
-
* @date
|
|
5
|
+
* @version 0.3.3
|
|
6
|
+
* @date 2021-03-31
|
|
7
7
|
*
|
|
8
|
-
* @copyright Copyright (c) 2020
|
|
8
|
+
* @copyright Copyright (c) 2020-2021
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -238,6 +238,31 @@ namespace Eigen
|
|
|
238
238
|
|
|
239
239
|
using OptCacheStore = CacheStore<EIGEN_MAX_ALIGN_BYTES>;
|
|
240
240
|
|
|
241
|
+
template<typename _Scalar>
|
|
242
|
+
struct ExtractFirstUint;
|
|
243
|
+
|
|
244
|
+
template<>
|
|
245
|
+
struct ExtractFirstUint<float>
|
|
246
|
+
{
|
|
247
|
+
template<typename Packet>
|
|
248
|
+
auto operator()(Packet v) -> decltype(Eigen::internal::pfirst(v))
|
|
249
|
+
{
|
|
250
|
+
return Eigen::internal::pfirst(v);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
template<>
|
|
255
|
+
struct ExtractFirstUint<double>
|
|
256
|
+
{
|
|
257
|
+
template<typename Packet>
|
|
258
|
+
auto operator()(Packet v) -> uint64_t
|
|
259
|
+
{
|
|
260
|
+
uint64_t arr[sizeof(Packet) / 8];
|
|
261
|
+
Eigen::internal::pstoreu((Packet*)arr, v);
|
|
262
|
+
return arr[0];
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
|
|
241
266
|
/**
|
|
242
267
|
* @brief Generator of random bits for integral scalars
|
|
243
268
|
*
|
|
@@ -296,13 +321,52 @@ namespace Eigen
|
|
|
296
321
|
}
|
|
297
322
|
};
|
|
298
323
|
|
|
324
|
+
/**
|
|
325
|
+
* @brief Generator of reals in a range `[a, b]`
|
|
326
|
+
*
|
|
327
|
+
* @tparam _Scalar any real type
|
|
328
|
+
*/
|
|
329
|
+
template<typename _Scalar>
|
|
330
|
+
class Balanced2Gen : public GenBase<Balanced2Gen<_Scalar>, _Scalar>
|
|
331
|
+
{
|
|
332
|
+
static_assert(std::is_floating_point<_Scalar>::value, "balanced needs floating point types.");
|
|
333
|
+
_Scalar slope = 2, bias = -1;
|
|
334
|
+
public:
|
|
335
|
+
using Scalar = _Scalar;
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* @brief Construct a new balanced generator
|
|
339
|
+
*
|
|
340
|
+
* @param _a,_b left and right boundary
|
|
341
|
+
*/
|
|
342
|
+
Balanced2Gen(_Scalar _a = -1, _Scalar _b = 1)
|
|
343
|
+
: slope{ _b - _a }, bias{ _a }
|
|
344
|
+
{
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
template<typename Rng>
|
|
348
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
|
|
349
|
+
{
|
|
350
|
+
using namespace Eigen::internal;
|
|
351
|
+
return ((_Scalar)((int32_t)pfirst(std::forward<Rng>(rng)()) & 0x7FFFFFFF) / 0x7FFFFFFF) * slope + bias;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
template<typename Packet, typename Rng>
|
|
355
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
|
|
356
|
+
{
|
|
357
|
+
using namespace Eigen::internal;
|
|
358
|
+
using RUtils = RandUtils<Packet, Rng>;
|
|
359
|
+
return RUtils{}.balanced(std::forward<Rng>(rng), slope, bias);
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
|
|
299
363
|
/**
|
|
300
364
|
* @brief Generator of reals in a range `[0, 1)`
|
|
301
365
|
*
|
|
302
366
|
* @tparam _Scalar any real type
|
|
303
367
|
*/
|
|
304
368
|
template<typename _Scalar>
|
|
305
|
-
class
|
|
369
|
+
class StdUniformRealGen : public GenBase<StdUniformRealGen<_Scalar>, _Scalar>
|
|
306
370
|
{
|
|
307
371
|
static_assert(std::is_floating_point<_Scalar>::value, "uniformReal needs floating point types.");
|
|
308
372
|
|
|
@@ -313,14 +377,14 @@ namespace Eigen
|
|
|
313
377
|
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
|
|
314
378
|
{
|
|
315
379
|
using namespace Eigen::internal;
|
|
316
|
-
return
|
|
380
|
+
return BitScalar<_Scalar>{}.to_ur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
|
|
317
381
|
}
|
|
318
382
|
|
|
319
383
|
template<typename Rng>
|
|
320
384
|
EIGEN_STRONG_INLINE const _Scalar nzur_scalar(Rng&& rng)
|
|
321
385
|
{
|
|
322
386
|
using namespace Eigen::internal;
|
|
323
|
-
return
|
|
387
|
+
return BitScalar<_Scalar>{}.to_nzur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
|
|
324
388
|
}
|
|
325
389
|
|
|
326
390
|
template<typename Packet, typename Rng>
|
|
@@ -332,6 +396,49 @@ namespace Eigen
|
|
|
332
396
|
}
|
|
333
397
|
};
|
|
334
398
|
|
|
399
|
+
/**
|
|
400
|
+
* @brief Generator of reals in a range `[a, b)`
|
|
401
|
+
*
|
|
402
|
+
* @tparam _Scalar any real type
|
|
403
|
+
*/
|
|
404
|
+
template<typename _Scalar>
|
|
405
|
+
class UniformRealGen : public GenBase<UniformRealGen<_Scalar>, _Scalar>
|
|
406
|
+
{
|
|
407
|
+
static_assert(std::is_floating_point<_Scalar>::value, "uniformReal needs floating point types.");
|
|
408
|
+
_Scalar bias, slope;
|
|
409
|
+
|
|
410
|
+
public:
|
|
411
|
+
using Scalar = _Scalar;
|
|
412
|
+
|
|
413
|
+
UniformRealGen(_Scalar _min = 0, _Scalar _max = 1)
|
|
414
|
+
: bias{ _min }, slope{ _max - _min }
|
|
415
|
+
{
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
UniformRealGen(const UniformRealGen&) = default;
|
|
419
|
+
UniformRealGen(UniformRealGen&&) = default;
|
|
420
|
+
|
|
421
|
+
UniformRealGen& operator=(const UniformRealGen&) = default;
|
|
422
|
+
UniformRealGen& operator=(UniformRealGen&&) = default;
|
|
423
|
+
|
|
424
|
+
template<typename Rng>
|
|
425
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
|
|
426
|
+
{
|
|
427
|
+
using namespace Eigen::internal;
|
|
428
|
+
return bias + BitScalar<_Scalar>{}.to_ur(pfirst(std::forward<Rng>(rng)())) * slope;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
template<typename Packet, typename Rng>
|
|
432
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
|
|
433
|
+
{
|
|
434
|
+
using namespace Eigen::internal;
|
|
435
|
+
using RUtils = RandUtils<Packet, Rng>;
|
|
436
|
+
return padd(pmul(
|
|
437
|
+
RUtils{}.uniform_real(std::forward<Rng>(rng)), pset1<Packet>(slope)
|
|
438
|
+
), pset1<Packet>(bias));
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
|
|
335
442
|
|
|
336
443
|
/**
|
|
337
444
|
* @brief Generator of Bernoulli distribution
|
|
@@ -468,7 +575,53 @@ namespace Eigen
|
|
|
468
575
|
}
|
|
469
576
|
|
|
470
577
|
template<typename Derived, typename Urng>
|
|
471
|
-
using
|
|
578
|
+
using Balanced2Type = CwiseNullaryOp<internal::scalar_rng_adaptor<Balanced2Gen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* @brief generates reals in a range `[a, b]`
|
|
582
|
+
*
|
|
583
|
+
* @tparam Derived a type of Eigen::DenseBase
|
|
584
|
+
* @tparam Urng
|
|
585
|
+
* @param rows the number of rows being generated
|
|
586
|
+
* @param cols the number of columns being generated
|
|
587
|
+
* @param urng c++11-style random number generator
|
|
588
|
+
* @param a,b left and right boundary
|
|
589
|
+
* @return a random matrix expression with a shape (`rows`, `cols`)
|
|
590
|
+
*
|
|
591
|
+
* @see Eigen::Rand::BalancedGen
|
|
592
|
+
*/
|
|
593
|
+
template<typename Derived, typename Urng>
|
|
594
|
+
inline const Balanced2Type<Derived, Urng>
|
|
595
|
+
balanced(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a, typename Derived::Scalar b)
|
|
596
|
+
{
|
|
597
|
+
return {
|
|
598
|
+
rows, cols, { std::forward<Urng>(urng), Balanced2Gen<typename Derived::Scalar>{a, b} }
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* @brief generates reals in a range `[a, b]`
|
|
604
|
+
*
|
|
605
|
+
* @tparam Derived
|
|
606
|
+
* @tparam Urng
|
|
607
|
+
* @param o an instance of any type of Eigen::DenseBase
|
|
608
|
+
* @param urng c++11-style random number generator
|
|
609
|
+
* @param a,b left and right boundary
|
|
610
|
+
* @return a random matrix expression of the same shape as `o`
|
|
611
|
+
*
|
|
612
|
+
* @see Eigen::Rand::BalancedGen
|
|
613
|
+
*/
|
|
614
|
+
template<typename Derived, typename Urng>
|
|
615
|
+
inline const Balanced2Type<Derived, Urng>
|
|
616
|
+
balancedLike(const Derived& o, Urng&& urng, typename Derived::Scalar a, typename Derived::Scalar b)
|
|
617
|
+
{
|
|
618
|
+
return {
|
|
619
|
+
o.rows(), o.cols(), { std::forward<Urng>(urng), Balanced2Gen<typename Derived::Scalar>{a, b} }
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
template<typename Derived, typename Urng>
|
|
624
|
+
using StdUniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<StdUniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
472
625
|
|
|
473
626
|
/**
|
|
474
627
|
* @brief generates reals in a range `[0, 1)`
|
|
@@ -483,7 +636,7 @@ namespace Eigen
|
|
|
483
636
|
* @see Eigen::Rand::UniformRealGen
|
|
484
637
|
*/
|
|
485
638
|
template<typename Derived, typename Urng>
|
|
486
|
-
inline const
|
|
639
|
+
inline const StdUniformRealType<Derived, Urng>
|
|
487
640
|
uniformReal(Index rows, Index cols, Urng&& urng)
|
|
488
641
|
{
|
|
489
642
|
return {
|
|
@@ -503,7 +656,7 @@ namespace Eigen
|
|
|
503
656
|
* @see Eigen::Rand::UniformRealGen
|
|
504
657
|
*/
|
|
505
658
|
template<typename Derived, typename Urng>
|
|
506
|
-
inline const
|
|
659
|
+
inline const StdUniformRealType<Derived, Urng>
|
|
507
660
|
uniformRealLike(Derived& o, Urng&& urng)
|
|
508
661
|
{
|
|
509
662
|
return {
|
|
@@ -511,6 +664,52 @@ namespace Eigen
|
|
|
511
664
|
};
|
|
512
665
|
}
|
|
513
666
|
|
|
667
|
+
template<typename Derived, typename Urng>
|
|
668
|
+
using UniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<UniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* @brief generates reals in a range `[min, max)`
|
|
672
|
+
*
|
|
673
|
+
* @tparam Derived a type of Eigen::DenseBase
|
|
674
|
+
* @tparam Urng
|
|
675
|
+
* @param rows the number of rows being generated
|
|
676
|
+
* @param cols the number of columns being generated
|
|
677
|
+
* @param urng c++11-style random number generator
|
|
678
|
+
* @param min, max the range of reals being generated
|
|
679
|
+
* @return a random matrix expression with a shape (`rows`, `cols`)
|
|
680
|
+
*
|
|
681
|
+
* @see Eigen::Rand::UniformRealGen
|
|
682
|
+
*/
|
|
683
|
+
template<typename Derived, typename Urng>
|
|
684
|
+
inline const UniformRealType<Derived, Urng>
|
|
685
|
+
uniformReal(Index rows, Index cols, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
|
|
686
|
+
{
|
|
687
|
+
return {
|
|
688
|
+
rows, cols, { std::forward<Urng>(urng), UniformRealGen<typename Derived::Scalar>{ min, max } }
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
/**
|
|
693
|
+
* @brief generates reals in a range `[min, max)`
|
|
694
|
+
*
|
|
695
|
+
* @tparam Derived
|
|
696
|
+
* @tparam Urng
|
|
697
|
+
* @param o an instance of any type of Eigen::DenseBase
|
|
698
|
+
* @param urng c++11-style random number generator
|
|
699
|
+
* @param min, max the range of reals being generated
|
|
700
|
+
* @return a random matrix expression of the same shape as `o`
|
|
701
|
+
*
|
|
702
|
+
* @see Eigen::Rand::UniformRealGen
|
|
703
|
+
*/
|
|
704
|
+
template<typename Derived, typename Urng>
|
|
705
|
+
inline const UniformRealType<Derived, Urng>
|
|
706
|
+
uniformRealLike(Derived& o, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
|
|
707
|
+
{
|
|
708
|
+
return {
|
|
709
|
+
o.rows(), o.cols(), { std::forward<Urng>(urng), UniformRealGen<typename Derived::Scalar>{ min, max } }
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
|
|
514
713
|
template<typename Derived, typename Urng>
|
|
515
714
|
using BernoulliType = CwiseNullaryOp<internal::scalar_rng_adaptor<BernoulliGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
516
715
|
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @file Discrete.h
|
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
|
4
4
|
* @brief
|
|
5
|
-
* @version 0.3.
|
|
6
|
-
* @date
|
|
5
|
+
* @version 0.3.3
|
|
6
|
+
* @date 2021-03-31
|
|
7
7
|
*
|
|
8
|
-
* @copyright Copyright (c) 2020
|
|
8
|
+
* @copyright Copyright (c) 2020-2021
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -49,11 +49,11 @@ namespace Eigen
|
|
|
49
49
|
bitmask = o.bitmask;
|
|
50
50
|
if (msize)
|
|
51
51
|
{
|
|
52
|
-
arr = std::unique_ptr<_Precision[]>(new _Precision[1 << bitsize]);
|
|
53
|
-
alias = std::unique_ptr<_Size[]>(new _Size[1 << bitsize]);
|
|
52
|
+
arr = std::unique_ptr<_Precision[]>(new _Precision[(size_t)1 << bitsize]);
|
|
53
|
+
alias = std::unique_ptr<_Size[]>(new _Size[(size_t)1 << bitsize]);
|
|
54
54
|
|
|
55
|
-
std::copy(o.arr.get(), o.arr.get() + (1 << bitsize), arr.get());
|
|
56
|
-
std::copy(o.alias.get(), o.alias.get() + (1 << bitsize), alias.get());
|
|
55
|
+
std::copy(o.arr.get(), o.arr.get() + ((size_t)1 << bitsize), arr.get());
|
|
56
|
+
std::copy(o.alias.get(), o.alias.get() + ((size_t)1 << bitsize), alias.get());
|
|
57
57
|
}
|
|
58
58
|
return *this;
|
|
59
59
|
}
|
|
@@ -125,7 +125,7 @@ namespace Eigen
|
|
|
125
125
|
{
|
|
126
126
|
arr[under] = (_Precision)f[under];
|
|
127
127
|
}
|
|
128
|
-
alias[under] = over;
|
|
128
|
+
alias[under] = (_Size)over;
|
|
129
129
|
f[over] += f[under] - 1;
|
|
130
130
|
if (f[over] >= 1 || mm <= over)
|
|
131
131
|
{
|
|
@@ -152,7 +152,7 @@ namespace Eigen
|
|
|
152
152
|
{
|
|
153
153
|
arr[over] = 1;
|
|
154
154
|
}
|
|
155
|
-
alias[over] = over;
|
|
155
|
+
alias[over] = (_Size)over;
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
@@ -166,7 +166,7 @@ namespace Eigen
|
|
|
166
166
|
{
|
|
167
167
|
arr[under] = 1;
|
|
168
168
|
}
|
|
169
|
-
alias[under] = under;
|
|
169
|
+
alias[under] = (_Size)under;
|
|
170
170
|
for (under = mm; under < msize; ++under)
|
|
171
171
|
{
|
|
172
172
|
if (f[under] < 1)
|
|
@@ -179,7 +179,7 @@ namespace Eigen
|
|
|
179
179
|
{
|
|
180
180
|
arr[under] = 1;
|
|
181
181
|
}
|
|
182
|
-
alias[under] = under;
|
|
182
|
+
alias[under] = (_Size)under;
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
}
|
|
@@ -260,8 +260,9 @@ namespace Eigen
|
|
|
260
260
|
else
|
|
261
261
|
{
|
|
262
262
|
size_t bitcnt = bitsize;
|
|
263
|
-
|
|
263
|
+
for (int _i = 0; ; ++_i)
|
|
264
264
|
{
|
|
265
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
265
266
|
_Scalar cands = (_Scalar)(rx & bitmask);
|
|
266
267
|
if (cands <= pdiff) return cands;
|
|
267
268
|
if (bitcnt + bitsize < 32)
|
|
@@ -293,8 +294,9 @@ namespace Eigen
|
|
|
293
294
|
auto& cm = Rand::detail::CompressMask<sizeof(Packet)>::get_inst();
|
|
294
295
|
auto plen = pset1<Packet>(pdiff + 1);
|
|
295
296
|
size_t bitcnt = bitsize;
|
|
296
|
-
|
|
297
|
+
for (int _i = 0; ; ++_i)
|
|
297
298
|
{
|
|
299
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
298
300
|
// accept cands that only < plen
|
|
299
301
|
auto cands = pand(rx, pbitmask);
|
|
300
302
|
bool full = false;
|
|
@@ -304,7 +306,7 @@ namespace Eigen
|
|
|
304
306
|
|
|
305
307
|
if (bitcnt + bitsize < 32)
|
|
306
308
|
{
|
|
307
|
-
rx = psrl(rx, bitsize);
|
|
309
|
+
rx = psrl<-1>(rx, bitsize);
|
|
308
310
|
bitcnt += bitsize;
|
|
309
311
|
}
|
|
310
312
|
else
|
|
@@ -417,7 +419,7 @@ namespace Eigen
|
|
|
417
419
|
auto rx = randbits(std::forward<Rng>(rng));
|
|
418
420
|
auto albit = rx & alias_table.get_bitmask();
|
|
419
421
|
uint32_t alx = (uint32_t)(rx >> (sizeof(rx) * 8 - 31));
|
|
420
|
-
if (alx < alias_table.get_prob()[albit]) return albit;
|
|
422
|
+
if (alx < alias_table.get_prob()[albit]) return (_Scalar)albit;
|
|
421
423
|
return alias_table.get_alias()[albit];
|
|
422
424
|
}
|
|
423
425
|
}
|
|
@@ -451,7 +453,7 @@ namespace Eigen
|
|
|
451
453
|
{
|
|
452
454
|
auto rx = randbits.template packetOp<PacketType>(std::forward<Rng>(rng));
|
|
453
455
|
auto albit = pand(rx, pset1<PacketType>(alias_table.get_bitmask()));
|
|
454
|
-
auto c = pcmplt(psrl(rx
|
|
456
|
+
auto c = pcmplt(psrl<1>(rx), pgather(alias_table.get_prob(), albit));
|
|
455
457
|
ret = pblendv(c, albit, pgather(alias_table.get_alias(), albit));
|
|
456
458
|
}
|
|
457
459
|
|
|
@@ -673,6 +675,8 @@ namespace Eigen
|
|
|
673
675
|
}
|
|
674
676
|
}
|
|
675
677
|
|
|
678
|
+
#ifdef EIGEN_VECTORIZE_NEON
|
|
679
|
+
#else
|
|
676
680
|
template<typename Packet, typename Rng>
|
|
677
681
|
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
|
|
678
682
|
{
|
|
@@ -681,7 +685,7 @@ namespace Eigen
|
|
|
681
685
|
if (!cdf.empty())
|
|
682
686
|
{
|
|
683
687
|
auto ret = pset1<Packet>(cdf.size());
|
|
684
|
-
#ifdef EIGEN_VECTORIZE_AVX
|
|
688
|
+
#ifdef EIGEN_VECTORIZE_AVX
|
|
685
689
|
auto rx = ur.template packetOp<Packet4d>(std::forward<Rng>(rng));
|
|
686
690
|
for (auto& p : cdf)
|
|
687
691
|
{
|
|
@@ -689,7 +693,7 @@ namespace Eigen
|
|
|
689
693
|
auto r = combine_low32(c);
|
|
690
694
|
ret = padd(ret, r);
|
|
691
695
|
}
|
|
692
|
-
#else
|
|
696
|
+
#else
|
|
693
697
|
auto rx1 = ur.template packetOp<DPacket>(rng),
|
|
694
698
|
rx2 = ur.template packetOp<DPacket>(rng);
|
|
695
699
|
for (auto& p : cdf)
|
|
@@ -697,25 +701,26 @@ namespace Eigen
|
|
|
697
701
|
auto pp = pset1<decltype(rx1)>(p);
|
|
698
702
|
ret = padd(ret, combine_low32(reinterpret_to_int(pcmplt(rx1, pp)), reinterpret_to_int(pcmplt(rx2, pp))));
|
|
699
703
|
}
|
|
700
|
-
#endif
|
|
704
|
+
#endif
|
|
701
705
|
return ret;
|
|
702
706
|
}
|
|
703
707
|
else
|
|
704
708
|
{
|
|
705
|
-
#ifdef EIGEN_VECTORIZE_AVX
|
|
709
|
+
#ifdef EIGEN_VECTORIZE_AVX
|
|
706
710
|
using RUtils = RawbitsMaker<Packet, Rng>;
|
|
707
711
|
auto albit = pand(RUtils{}.rawbits(rng), pset1<Packet>(alias_table.get_bitmask()));
|
|
708
712
|
auto c = reinterpret_to_int(pcmplt(ur.template packetOp<Packet4d>(rng), pgather(alias_table.get_prob(), _mm256_castsi128_si256(albit))));
|
|
709
713
|
return pblendv(combine_low32(c), albit, pgather(alias_table.get_alias(), albit));
|
|
710
|
-
#else
|
|
714
|
+
#else
|
|
711
715
|
using RUtils = RawbitsMaker<Packet, Rng>;
|
|
712
716
|
auto albit = pand(RUtils{}.rawbits(rng), pset1<Packet>(alias_table.get_bitmask()));
|
|
713
717
|
auto c1 = reinterpret_to_int(pcmplt(ur.template packetOp<DPacket>(rng), pgather(alias_table.get_prob(), albit)));
|
|
714
718
|
auto c2 = reinterpret_to_int(pcmplt(ur.template packetOp<DPacket>(rng), pgather(alias_table.get_prob(), albit, true)));
|
|
715
719
|
return pblendv(combine_low32(c1, c2), albit, pgather(alias_table.get_alias(), albit));
|
|
716
|
-
#endif
|
|
720
|
+
#endif
|
|
717
721
|
}
|
|
718
722
|
}
|
|
723
|
+
#endif
|
|
719
724
|
};
|
|
720
725
|
|
|
721
726
|
template<typename> class BinomialGen;
|
|
@@ -777,8 +782,9 @@ namespace Eigen
|
|
|
777
782
|
{
|
|
778
783
|
_Scalar res;
|
|
779
784
|
double yx;
|
|
780
|
-
|
|
785
|
+
for (int _i = 0; ; ++_i)
|
|
781
786
|
{
|
|
787
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
782
788
|
yx = std::tan(constant::pi * ur(rng));
|
|
783
789
|
res = (_Scalar)(sqrt_tmean * yx + mean);
|
|
784
790
|
if (res >= 0 && ur(rng) <= 0.9 * (1.0 + yx * yx)
|
|
@@ -800,8 +806,9 @@ namespace Eigen
|
|
|
800
806
|
{
|
|
801
807
|
Packet res = pset1<Packet>(0);
|
|
802
808
|
PacketType val = pset1<PacketType>(1), pne_mean = pset1<PacketType>(ne_mean);
|
|
803
|
-
|
|
809
|
+
for (int _i = 0; ; ++_i)
|
|
804
810
|
{
|
|
811
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
805
812
|
val = pmul(val, ur.template packetOp<PacketType>(rng));
|
|
806
813
|
auto c = reinterpret_to_int(pcmplt(pne_mean, val));
|
|
807
814
|
if (pmovemask(c) == 0) break;
|
|
@@ -817,15 +824,16 @@ namespace Eigen
|
|
|
817
824
|
pmean = pset1<PacketType>(mean),
|
|
818
825
|
plog_mean = pset1<PacketType>(log_mean),
|
|
819
826
|
pg1 = pset1<PacketType>(g1);
|
|
820
|
-
|
|
827
|
+
for (int _i = 0; ; ++_i)
|
|
821
828
|
{
|
|
829
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
822
830
|
PacketType fres, yx, psin, pcos;
|
|
823
831
|
psincos(pmul(ppi, ur.template packetOp<PacketType>(rng)), psin, pcos);
|
|
824
832
|
yx = pdiv(psin, pcos);
|
|
825
833
|
fres = ptruncate(padd(pmul(psqrt_tmean, yx), pmean));
|
|
826
834
|
|
|
827
835
|
auto p1 = pmul(padd(pmul(yx, yx), pset1<PacketType>(1)), pset1<PacketType>(0.9));
|
|
828
|
-
auto p2 = pexp(psub(psub(pmul(fres, plog_mean),
|
|
836
|
+
auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma_approx(padd(fres, pset1<PacketType>(1)))), pg1));
|
|
829
837
|
|
|
830
838
|
auto c1 = pcmple(pset1<PacketType>(0), fres);
|
|
831
839
|
auto c2 = pcmple(ur.template packetOp<PacketType>(rng), pmul(p1, p2));
|
|
@@ -852,7 +860,7 @@ namespace Eigen
|
|
|
852
860
|
|
|
853
861
|
PoissonGen<_Scalar> poisson;
|
|
854
862
|
_Scalar trials;
|
|
855
|
-
double p, small_p, g1, sqrt_v, log_small_p, log_small_q;
|
|
863
|
+
double p = 0, small_p = 0, g1 = 0, sqrt_v = 0, log_small_p = 0, log_small_q = 0;
|
|
856
864
|
|
|
857
865
|
public:
|
|
858
866
|
using Scalar = _Scalar;
|
|
@@ -903,8 +911,9 @@ namespace Eigen
|
|
|
903
911
|
}
|
|
904
912
|
else
|
|
905
913
|
{
|
|
906
|
-
|
|
914
|
+
for (int _i = 0; ; ++_i)
|
|
907
915
|
{
|
|
916
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
908
917
|
double ys;
|
|
909
918
|
ys = std::tan(constant::pi * poisson.ur(rng));
|
|
910
919
|
res = (_Scalar)(sqrt_v * ys + poisson.mean);
|
|
@@ -954,8 +963,9 @@ namespace Eigen
|
|
|
954
963
|
plog_small_p = pset1<PacketType>(log_small_p),
|
|
955
964
|
plog_small_q = pset1<PacketType>(log_small_q),
|
|
956
965
|
pg1 = pset1<PacketType>(g1);
|
|
957
|
-
|
|
966
|
+
for (int _i = 0; ; ++_i)
|
|
958
967
|
{
|
|
968
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
959
969
|
PacketType fres, ys, psin, pcos;
|
|
960
970
|
psincos(pmul(ppi, poisson.ur.template packetOp<PacketType>(rng)), psin, pcos);
|
|
961
971
|
ys = pdiv(psin, pcos);
|
|
@@ -964,8 +974,8 @@ namespace Eigen
|
|
|
964
974
|
auto p1 = pmul(pmul(pset1<PacketType>(1.2), psqrt_v), padd(pset1<PacketType>(1), pmul(ys, ys)));
|
|
965
975
|
auto p2 = pexp(
|
|
966
976
|
padd(padd(psub(
|
|
967
|
-
psub(pg1,
|
|
968
|
-
|
|
977
|
+
psub(pg1, plgamma_approx(padd(fres, pset1<PacketType>(1)))),
|
|
978
|
+
plgamma_approx(psub(padd(ptrials, pset1<PacketType>(1)), fres))
|
|
969
979
|
), pmul(fres, plog_small_p)), pmul(psub(ptrials, fres), plog_small_q))
|
|
970
980
|
);
|
|
971
981
|
|
|
@@ -1503,6 +1513,17 @@ namespace Eigen
|
|
|
1503
1513
|
};
|
|
1504
1514
|
}
|
|
1505
1515
|
}
|
|
1516
|
+
|
|
1517
|
+
#ifdef EIGEN_VECTORIZE_NEON
|
|
1518
|
+
namespace internal
|
|
1519
|
+
{
|
|
1520
|
+
template<typename _Scalar, typename Urng, bool _mutable>
|
|
1521
|
+
struct functor_traits<scalar_rng_adaptor<Rand::DiscreteGen<_Scalar, double>, _Scalar, Urng, _mutable> >
|
|
1522
|
+
{
|
|
1523
|
+
enum { Cost = HugeCost, PacketAccess = 0, IsRepeatable = false };
|
|
1524
|
+
};
|
|
1525
|
+
}
|
|
1526
|
+
#endif
|
|
1506
1527
|
}
|
|
1507
1528
|
|
|
1508
1529
|
#endif
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @file GammaPoisson.h
|
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
|
4
4
|
* @brief
|
|
5
|
-
* @version 0.3.
|
|
6
|
-
* @date
|
|
5
|
+
* @version 0.3.3
|
|
6
|
+
* @date 2021-03-31
|
|
7
7
|
*
|
|
8
|
-
* @copyright Copyright (c) 2020
|
|
8
|
+
* @copyright Copyright (c) 2020-2021
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -58,7 +58,6 @@ namespace Eigen
|
|
|
58
58
|
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
|
|
59
59
|
{
|
|
60
60
|
using namespace Eigen::internal;
|
|
61
|
-
using ur_base = UniformRealGen<float>;
|
|
62
61
|
using PacketType = decltype(reinterpret_to_float(std::declval<Packet>()));
|
|
63
62
|
|
|
64
63
|
auto mean = gamma.template packetOp<PacketType>(rng);
|
|
@@ -66,8 +65,9 @@ namespace Eigen
|
|
|
66
65
|
PacketType val = pset1<PacketType>(1), pne_mean = pexp(pnegate(mean));
|
|
67
66
|
if (pmovemask(pcmplt(pset1<PacketType>(12), mean)) == 0)
|
|
68
67
|
{
|
|
69
|
-
|
|
68
|
+
for (int _i = 0; ; ++_i)
|
|
70
69
|
{
|
|
70
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
71
71
|
val = pmul(val, ur.template packetOp<PacketType>(rng));
|
|
72
72
|
auto c = reinterpret_to_int(pcmplt(pne_mean, val));
|
|
73
73
|
if (pmovemask(c) == 0) break;
|
|
@@ -81,16 +81,17 @@ namespace Eigen
|
|
|
81
81
|
const PacketType ppi = pset1<PacketType>(constant::pi),
|
|
82
82
|
psqrt_tmean = psqrt(pmul(pset1<PacketType>(2), mean)),
|
|
83
83
|
plog_mean = plog(mean),
|
|
84
|
-
pg1 = psub(pmul(mean, plog_mean),
|
|
85
|
-
|
|
84
|
+
pg1 = psub(pmul(mean, plog_mean), plgamma_approx(padd(mean, pset1<PacketType>(1))));
|
|
85
|
+
for (int _i = 0; ; ++_i)
|
|
86
86
|
{
|
|
87
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
87
88
|
PacketType fres, yx, psin, pcos;
|
|
88
89
|
psincos(pmul(ppi, ur.template packetOp<PacketType>(rng)), psin, pcos);
|
|
89
90
|
yx = pdiv(psin, pcos);
|
|
90
91
|
fres = ptruncate(padd(pmul(psqrt_tmean, yx), mean));
|
|
91
92
|
|
|
92
93
|
auto p1 = pmul(padd(pmul(yx, yx), pset1<PacketType>(1)), pset1<PacketType>(0.9));
|
|
93
|
-
auto p2 = pexp(psub(psub(pmul(fres, plog_mean),
|
|
94
|
+
auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma_approx(padd(fres, pset1<PacketType>(1)))), pg1));
|
|
94
95
|
|
|
95
96
|
auto c1 = pcmple(pset1<PacketType>(0), fres);
|
|
96
97
|
auto c2 = pcmple(ur.template packetOp<PacketType>(rng), pmul(p1, p2));
|