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,168 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
#ifndef EIGEN_ASSIGNMENT_FUNCTORS_H
|
|
11
|
+
#define EIGEN_ASSIGNMENT_FUNCTORS_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
/** \internal
|
|
18
|
+
* \brief Template functor for scalar/packet assignment
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
template<typename DstScalar,typename SrcScalar> struct assign_op {
|
|
22
|
+
|
|
23
|
+
EIGEN_EMPTY_STRUCT_CTOR(assign_op)
|
|
24
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a = b; }
|
|
25
|
+
|
|
26
|
+
template<int Alignment, typename Packet>
|
|
27
|
+
EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
|
|
28
|
+
{ internal::pstoret<DstScalar,Packet,Alignment>(a,b); }
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Empty overload for void type (used by PermutationMatrix)
|
|
32
|
+
template<typename DstScalar> struct assign_op<DstScalar,void> {};
|
|
33
|
+
|
|
34
|
+
template<typename DstScalar,typename SrcScalar>
|
|
35
|
+
struct functor_traits<assign_op<DstScalar,SrcScalar> > {
|
|
36
|
+
enum {
|
|
37
|
+
Cost = NumTraits<DstScalar>::ReadCost,
|
|
38
|
+
PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::Vectorizable && packet_traits<SrcScalar>::Vectorizable
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/** \internal
|
|
43
|
+
* \brief Template functor for scalar/packet assignment with addition
|
|
44
|
+
*
|
|
45
|
+
*/
|
|
46
|
+
template<typename DstScalar,typename SrcScalar> struct add_assign_op {
|
|
47
|
+
|
|
48
|
+
EIGEN_EMPTY_STRUCT_CTOR(add_assign_op)
|
|
49
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a += b; }
|
|
50
|
+
|
|
51
|
+
template<int Alignment, typename Packet>
|
|
52
|
+
EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
|
|
53
|
+
{ internal::pstoret<DstScalar,Packet,Alignment>(a,internal::padd(internal::ploadt<Packet,Alignment>(a),b)); }
|
|
54
|
+
};
|
|
55
|
+
template<typename DstScalar,typename SrcScalar>
|
|
56
|
+
struct functor_traits<add_assign_op<DstScalar,SrcScalar> > {
|
|
57
|
+
enum {
|
|
58
|
+
Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::AddCost,
|
|
59
|
+
PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasAdd
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/** \internal
|
|
64
|
+
* \brief Template functor for scalar/packet assignment with subtraction
|
|
65
|
+
*
|
|
66
|
+
*/
|
|
67
|
+
template<typename DstScalar,typename SrcScalar> struct sub_assign_op {
|
|
68
|
+
|
|
69
|
+
EIGEN_EMPTY_STRUCT_CTOR(sub_assign_op)
|
|
70
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a -= b; }
|
|
71
|
+
|
|
72
|
+
template<int Alignment, typename Packet>
|
|
73
|
+
EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
|
|
74
|
+
{ internal::pstoret<DstScalar,Packet,Alignment>(a,internal::psub(internal::ploadt<Packet,Alignment>(a),b)); }
|
|
75
|
+
};
|
|
76
|
+
template<typename DstScalar,typename SrcScalar>
|
|
77
|
+
struct functor_traits<sub_assign_op<DstScalar,SrcScalar> > {
|
|
78
|
+
enum {
|
|
79
|
+
Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::AddCost,
|
|
80
|
+
PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasSub
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/** \internal
|
|
85
|
+
* \brief Template functor for scalar/packet assignment with multiplication
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
template<typename DstScalar, typename SrcScalar=DstScalar>
|
|
89
|
+
struct mul_assign_op {
|
|
90
|
+
|
|
91
|
+
EIGEN_EMPTY_STRUCT_CTOR(mul_assign_op)
|
|
92
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a *= b; }
|
|
93
|
+
|
|
94
|
+
template<int Alignment, typename Packet>
|
|
95
|
+
EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
|
|
96
|
+
{ internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pmul(internal::ploadt<Packet,Alignment>(a),b)); }
|
|
97
|
+
};
|
|
98
|
+
template<typename DstScalar, typename SrcScalar>
|
|
99
|
+
struct functor_traits<mul_assign_op<DstScalar,SrcScalar> > {
|
|
100
|
+
enum {
|
|
101
|
+
Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::MulCost,
|
|
102
|
+
PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasMul
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/** \internal
|
|
107
|
+
* \brief Template functor for scalar/packet assignment with diviving
|
|
108
|
+
*
|
|
109
|
+
*/
|
|
110
|
+
template<typename DstScalar, typename SrcScalar=DstScalar> struct div_assign_op {
|
|
111
|
+
|
|
112
|
+
EIGEN_EMPTY_STRUCT_CTOR(div_assign_op)
|
|
113
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a /= b; }
|
|
114
|
+
|
|
115
|
+
template<int Alignment, typename Packet>
|
|
116
|
+
EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
|
|
117
|
+
{ internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pdiv(internal::ploadt<Packet,Alignment>(a),b)); }
|
|
118
|
+
};
|
|
119
|
+
template<typename DstScalar, typename SrcScalar>
|
|
120
|
+
struct functor_traits<div_assign_op<DstScalar,SrcScalar> > {
|
|
121
|
+
enum {
|
|
122
|
+
Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::MulCost,
|
|
123
|
+
PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasDiv
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/** \internal
|
|
128
|
+
* \brief Template functor for scalar/packet assignment with swapping
|
|
129
|
+
*
|
|
130
|
+
* It works as follow. For a non-vectorized evaluation loop, we have:
|
|
131
|
+
* for(i) func(A.coeffRef(i), B.coeff(i));
|
|
132
|
+
* where B is a SwapWrapper expression. The trick is to make SwapWrapper::coeff behaves like a non-const coeffRef.
|
|
133
|
+
* Actually, SwapWrapper might not even be needed since even if B is a plain expression, since it has to be writable
|
|
134
|
+
* B.coeff already returns a const reference to the underlying scalar value.
|
|
135
|
+
*
|
|
136
|
+
* The case of a vectorized loop is more tricky:
|
|
137
|
+
* for(i,j) func.assignPacket<A_Align>(&A.coeffRef(i,j), B.packet<B_Align>(i,j));
|
|
138
|
+
* Here, B must be a SwapWrapper whose packet function actually returns a proxy object holding a Scalar*,
|
|
139
|
+
* the actual alignment and Packet type.
|
|
140
|
+
*
|
|
141
|
+
*/
|
|
142
|
+
template<typename Scalar> struct swap_assign_op {
|
|
143
|
+
|
|
144
|
+
EIGEN_EMPTY_STRUCT_CTOR(swap_assign_op)
|
|
145
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const
|
|
146
|
+
{
|
|
147
|
+
#ifdef __CUDACC__
|
|
148
|
+
// FIXME is there some kind of cuda::swap?
|
|
149
|
+
Scalar t=b; const_cast<Scalar&>(b)=a; a=t;
|
|
150
|
+
#else
|
|
151
|
+
using std::swap;
|
|
152
|
+
swap(a,const_cast<Scalar&>(b));
|
|
153
|
+
#endif
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
template<typename Scalar>
|
|
157
|
+
struct functor_traits<swap_assign_op<Scalar> > {
|
|
158
|
+
enum {
|
|
159
|
+
Cost = 3 * NumTraits<Scalar>::ReadCost,
|
|
160
|
+
PacketAccess = packet_traits<Scalar>::Vectorizable
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
} // namespace internal
|
|
165
|
+
|
|
166
|
+
} // namespace Eigen
|
|
167
|
+
|
|
168
|
+
#endif // EIGEN_ASSIGNMENT_FUNCTORS_H
|
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
#ifndef EIGEN_BINARY_FUNCTORS_H
|
|
11
|
+
#define EIGEN_BINARY_FUNCTORS_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
//---------- associative binary functors ----------
|
|
18
|
+
|
|
19
|
+
template<typename Arg1, typename Arg2>
|
|
20
|
+
struct binary_op_base
|
|
21
|
+
{
|
|
22
|
+
typedef Arg1 first_argument_type;
|
|
23
|
+
typedef Arg2 second_argument_type;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** \internal
|
|
27
|
+
* \brief Template functor to compute the sum of two scalars
|
|
28
|
+
*
|
|
29
|
+
* \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, DenseBase::sum()
|
|
30
|
+
*/
|
|
31
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
32
|
+
struct scalar_sum_op : binary_op_base<LhsScalar,RhsScalar>
|
|
33
|
+
{
|
|
34
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_sum_op>::ReturnType result_type;
|
|
35
|
+
#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
36
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_op)
|
|
37
|
+
#else
|
|
38
|
+
scalar_sum_op() {
|
|
39
|
+
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
40
|
+
}
|
|
41
|
+
#endif
|
|
42
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a + b; }
|
|
43
|
+
template<typename Packet>
|
|
44
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
45
|
+
{ return internal::padd(a,b); }
|
|
46
|
+
template<typename Packet>
|
|
47
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
|
|
48
|
+
{ return internal::predux(a); }
|
|
49
|
+
};
|
|
50
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
51
|
+
struct functor_traits<scalar_sum_op<LhsScalar,RhsScalar> > {
|
|
52
|
+
enum {
|
|
53
|
+
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2, // rough estimate!
|
|
54
|
+
PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasAdd && packet_traits<RhsScalar>::HasAdd
|
|
55
|
+
// TODO vectorize mixed sum
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** \internal
|
|
60
|
+
* \brief Template specialization to deprecate the summation of boolean expressions.
|
|
61
|
+
* This is required to solve Bug 426.
|
|
62
|
+
* \sa DenseBase::count(), DenseBase::any(), ArrayBase::cast(), MatrixBase::cast()
|
|
63
|
+
*/
|
|
64
|
+
template<> struct scalar_sum_op<bool,bool> : scalar_sum_op<int,int> {
|
|
65
|
+
EIGEN_DEPRECATED
|
|
66
|
+
scalar_sum_op() {}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/** \internal
|
|
71
|
+
* \brief Template functor to compute the product of two scalars
|
|
72
|
+
*
|
|
73
|
+
* \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux()
|
|
74
|
+
*/
|
|
75
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
76
|
+
struct scalar_product_op : binary_op_base<LhsScalar,RhsScalar>
|
|
77
|
+
{
|
|
78
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_product_op>::ReturnType result_type;
|
|
79
|
+
#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
80
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_product_op)
|
|
81
|
+
#else
|
|
82
|
+
scalar_product_op() {
|
|
83
|
+
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
84
|
+
}
|
|
85
|
+
#endif
|
|
86
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a * b; }
|
|
87
|
+
template<typename Packet>
|
|
88
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
89
|
+
{ return internal::pmul(a,b); }
|
|
90
|
+
template<typename Packet>
|
|
91
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
|
|
92
|
+
{ return internal::predux_mul(a); }
|
|
93
|
+
};
|
|
94
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
95
|
+
struct functor_traits<scalar_product_op<LhsScalar,RhsScalar> > {
|
|
96
|
+
enum {
|
|
97
|
+
Cost = (NumTraits<LhsScalar>::MulCost + NumTraits<RhsScalar>::MulCost)/2, // rough estimate!
|
|
98
|
+
PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasMul && packet_traits<RhsScalar>::HasMul
|
|
99
|
+
// TODO vectorize mixed product
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/** \internal
|
|
104
|
+
* \brief Template functor to compute the conjugate product of two scalars
|
|
105
|
+
*
|
|
106
|
+
* This is a short cut for conj(x) * y which is needed for optimization purpose; in Eigen2 support mode, this becomes x * conj(y)
|
|
107
|
+
*/
|
|
108
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
109
|
+
struct scalar_conj_product_op : binary_op_base<LhsScalar,RhsScalar>
|
|
110
|
+
{
|
|
111
|
+
|
|
112
|
+
enum {
|
|
113
|
+
Conj = NumTraits<LhsScalar>::IsComplex
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_conj_product_op>::ReturnType result_type;
|
|
117
|
+
|
|
118
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_conj_product_op)
|
|
119
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const
|
|
120
|
+
{ return conj_helper<LhsScalar,RhsScalar,Conj,false>().pmul(a,b); }
|
|
121
|
+
|
|
122
|
+
template<typename Packet>
|
|
123
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
124
|
+
{ return conj_helper<Packet,Packet,Conj,false>().pmul(a,b); }
|
|
125
|
+
};
|
|
126
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
127
|
+
struct functor_traits<scalar_conj_product_op<LhsScalar,RhsScalar> > {
|
|
128
|
+
enum {
|
|
129
|
+
Cost = NumTraits<LhsScalar>::MulCost,
|
|
130
|
+
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMul
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/** \internal
|
|
135
|
+
* \brief Template functor to compute the min of two scalars
|
|
136
|
+
*
|
|
137
|
+
* \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff()
|
|
138
|
+
*/
|
|
139
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
140
|
+
struct scalar_min_op : binary_op_base<LhsScalar,RhsScalar>
|
|
141
|
+
{
|
|
142
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_min_op>::ReturnType result_type;
|
|
143
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_min_op)
|
|
144
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return numext::mini(a, b); }
|
|
145
|
+
template<typename Packet>
|
|
146
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
147
|
+
{ return internal::pmin(a,b); }
|
|
148
|
+
template<typename Packet>
|
|
149
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
|
|
150
|
+
{ return internal::predux_min(a); }
|
|
151
|
+
};
|
|
152
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
153
|
+
struct functor_traits<scalar_min_op<LhsScalar,RhsScalar> > {
|
|
154
|
+
enum {
|
|
155
|
+
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
156
|
+
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMin
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
/** \internal
|
|
161
|
+
* \brief Template functor to compute the max of two scalars
|
|
162
|
+
*
|
|
163
|
+
* \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff()
|
|
164
|
+
*/
|
|
165
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
166
|
+
struct scalar_max_op : binary_op_base<LhsScalar,RhsScalar>
|
|
167
|
+
{
|
|
168
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_max_op>::ReturnType result_type;
|
|
169
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_max_op)
|
|
170
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return numext::maxi(a, b); }
|
|
171
|
+
template<typename Packet>
|
|
172
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
173
|
+
{ return internal::pmax(a,b); }
|
|
174
|
+
template<typename Packet>
|
|
175
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
|
|
176
|
+
{ return internal::predux_max(a); }
|
|
177
|
+
};
|
|
178
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
179
|
+
struct functor_traits<scalar_max_op<LhsScalar,RhsScalar> > {
|
|
180
|
+
enum {
|
|
181
|
+
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
182
|
+
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMax
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/** \internal
|
|
187
|
+
* \brief Template functors for comparison of two scalars
|
|
188
|
+
* \todo Implement packet-comparisons
|
|
189
|
+
*/
|
|
190
|
+
template<typename LhsScalar, typename RhsScalar, ComparisonName cmp> struct scalar_cmp_op;
|
|
191
|
+
|
|
192
|
+
template<typename LhsScalar, typename RhsScalar, ComparisonName cmp>
|
|
193
|
+
struct functor_traits<scalar_cmp_op<LhsScalar,RhsScalar, cmp> > {
|
|
194
|
+
enum {
|
|
195
|
+
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
196
|
+
PacketAccess = false
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
template<ComparisonName Cmp, typename LhsScalar, typename RhsScalar>
|
|
201
|
+
struct result_of<scalar_cmp_op<LhsScalar, RhsScalar, Cmp>(LhsScalar,RhsScalar)> {
|
|
202
|
+
typedef bool type;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
207
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_EQ> : binary_op_base<LhsScalar,RhsScalar>
|
|
208
|
+
{
|
|
209
|
+
typedef bool result_type;
|
|
210
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
211
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a==b;}
|
|
212
|
+
};
|
|
213
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
214
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_LT> : binary_op_base<LhsScalar,RhsScalar>
|
|
215
|
+
{
|
|
216
|
+
typedef bool result_type;
|
|
217
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
218
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a<b;}
|
|
219
|
+
};
|
|
220
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
221
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_LE> : binary_op_base<LhsScalar,RhsScalar>
|
|
222
|
+
{
|
|
223
|
+
typedef bool result_type;
|
|
224
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
225
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a<=b;}
|
|
226
|
+
};
|
|
227
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
228
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_GT> : binary_op_base<LhsScalar,RhsScalar>
|
|
229
|
+
{
|
|
230
|
+
typedef bool result_type;
|
|
231
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
232
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a>b;}
|
|
233
|
+
};
|
|
234
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
235
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_GE> : binary_op_base<LhsScalar,RhsScalar>
|
|
236
|
+
{
|
|
237
|
+
typedef bool result_type;
|
|
238
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
239
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a>=b;}
|
|
240
|
+
};
|
|
241
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
242
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_UNORD> : binary_op_base<LhsScalar,RhsScalar>
|
|
243
|
+
{
|
|
244
|
+
typedef bool result_type;
|
|
245
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
246
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return !(a<=b || b<=a);}
|
|
247
|
+
};
|
|
248
|
+
template<typename LhsScalar, typename RhsScalar>
|
|
249
|
+
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_NEQ> : binary_op_base<LhsScalar,RhsScalar>
|
|
250
|
+
{
|
|
251
|
+
typedef bool result_type;
|
|
252
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
253
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a!=b;}
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
/** \internal
|
|
258
|
+
* \brief Template functor to compute the hypot of two \b positive \b and \b real scalars
|
|
259
|
+
*
|
|
260
|
+
* \sa MatrixBase::stableNorm(), class Redux
|
|
261
|
+
*/
|
|
262
|
+
template<typename Scalar>
|
|
263
|
+
struct scalar_hypot_op<Scalar,Scalar> : binary_op_base<Scalar,Scalar>
|
|
264
|
+
{
|
|
265
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_hypot_op)
|
|
266
|
+
|
|
267
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar &x, const Scalar &y) const
|
|
268
|
+
{
|
|
269
|
+
// This functor is used by hypotNorm only for which it is faster to first apply abs
|
|
270
|
+
// on all coefficients prior to reduction through hypot.
|
|
271
|
+
// This way we avoid calling abs on positive and real entries, and this also permits
|
|
272
|
+
// to seamlessly handle complexes. Otherwise we would have to handle both real and complexes
|
|
273
|
+
// through the same functor...
|
|
274
|
+
return internal::positive_real_hypot(x,y);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
template<typename Scalar>
|
|
278
|
+
struct functor_traits<scalar_hypot_op<Scalar,Scalar> > {
|
|
279
|
+
enum
|
|
280
|
+
{
|
|
281
|
+
Cost = 3 * NumTraits<Scalar>::AddCost +
|
|
282
|
+
2 * NumTraits<Scalar>::MulCost +
|
|
283
|
+
2 * scalar_div_cost<Scalar,false>::value,
|
|
284
|
+
PacketAccess = false
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
/** \internal
|
|
289
|
+
* \brief Template functor to compute the pow of two scalars
|
|
290
|
+
*/
|
|
291
|
+
template<typename Scalar, typename Exponent>
|
|
292
|
+
struct scalar_pow_op : binary_op_base<Scalar,Exponent>
|
|
293
|
+
{
|
|
294
|
+
typedef typename ScalarBinaryOpTraits<Scalar,Exponent,scalar_pow_op>::ReturnType result_type;
|
|
295
|
+
#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
296
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_pow_op)
|
|
297
|
+
#else
|
|
298
|
+
scalar_pow_op() {
|
|
299
|
+
typedef Scalar LhsScalar;
|
|
300
|
+
typedef Exponent RhsScalar;
|
|
301
|
+
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
302
|
+
}
|
|
303
|
+
#endif
|
|
304
|
+
EIGEN_DEVICE_FUNC
|
|
305
|
+
inline result_type operator() (const Scalar& a, const Exponent& b) const { return numext::pow(a, b); }
|
|
306
|
+
};
|
|
307
|
+
template<typename Scalar, typename Exponent>
|
|
308
|
+
struct functor_traits<scalar_pow_op<Scalar,Exponent> > {
|
|
309
|
+
enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
//---------- non associative binary functors ----------
|
|
315
|
+
|
|
316
|
+
/** \internal
|
|
317
|
+
* \brief Template functor to compute the difference of two scalars
|
|
318
|
+
*
|
|
319
|
+
* \sa class CwiseBinaryOp, MatrixBase::operator-
|
|
320
|
+
*/
|
|
321
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
322
|
+
struct scalar_difference_op : binary_op_base<LhsScalar,RhsScalar>
|
|
323
|
+
{
|
|
324
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_difference_op>::ReturnType result_type;
|
|
325
|
+
#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
326
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_difference_op)
|
|
327
|
+
#else
|
|
328
|
+
scalar_difference_op() {
|
|
329
|
+
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
330
|
+
}
|
|
331
|
+
#endif
|
|
332
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a - b; }
|
|
333
|
+
template<typename Packet>
|
|
334
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
335
|
+
{ return internal::psub(a,b); }
|
|
336
|
+
};
|
|
337
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
338
|
+
struct functor_traits<scalar_difference_op<LhsScalar,RhsScalar> > {
|
|
339
|
+
enum {
|
|
340
|
+
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
341
|
+
PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasSub && packet_traits<RhsScalar>::HasSub
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
/** \internal
|
|
346
|
+
* \brief Template functor to compute the quotient of two scalars
|
|
347
|
+
*
|
|
348
|
+
* \sa class CwiseBinaryOp, Cwise::operator/()
|
|
349
|
+
*/
|
|
350
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
351
|
+
struct scalar_quotient_op : binary_op_base<LhsScalar,RhsScalar>
|
|
352
|
+
{
|
|
353
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_quotient_op>::ReturnType result_type;
|
|
354
|
+
#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
355
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_quotient_op)
|
|
356
|
+
#else
|
|
357
|
+
scalar_quotient_op() {
|
|
358
|
+
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
359
|
+
}
|
|
360
|
+
#endif
|
|
361
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a / b; }
|
|
362
|
+
template<typename Packet>
|
|
363
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
|
|
364
|
+
{ return internal::pdiv(a,b); }
|
|
365
|
+
};
|
|
366
|
+
template<typename LhsScalar,typename RhsScalar>
|
|
367
|
+
struct functor_traits<scalar_quotient_op<LhsScalar,RhsScalar> > {
|
|
368
|
+
typedef typename scalar_quotient_op<LhsScalar,RhsScalar>::result_type result_type;
|
|
369
|
+
enum {
|
|
370
|
+
PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasDiv && packet_traits<RhsScalar>::HasDiv,
|
|
371
|
+
Cost = scalar_div_cost<result_type,PacketAccess>::value
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
/** \internal
|
|
378
|
+
* \brief Template functor to compute the and of two booleans
|
|
379
|
+
*
|
|
380
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator&&
|
|
381
|
+
*/
|
|
382
|
+
struct scalar_boolean_and_op {
|
|
383
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_and_op)
|
|
384
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a && b; }
|
|
385
|
+
};
|
|
386
|
+
template<> struct functor_traits<scalar_boolean_and_op> {
|
|
387
|
+
enum {
|
|
388
|
+
Cost = NumTraits<bool>::AddCost,
|
|
389
|
+
PacketAccess = false
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
/** \internal
|
|
394
|
+
* \brief Template functor to compute the or of two booleans
|
|
395
|
+
*
|
|
396
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator||
|
|
397
|
+
*/
|
|
398
|
+
struct scalar_boolean_or_op {
|
|
399
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_or_op)
|
|
400
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a || b; }
|
|
401
|
+
};
|
|
402
|
+
template<> struct functor_traits<scalar_boolean_or_op> {
|
|
403
|
+
enum {
|
|
404
|
+
Cost = NumTraits<bool>::AddCost,
|
|
405
|
+
PacketAccess = false
|
|
406
|
+
};
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
/** \internal
|
|
410
|
+
* \brief Template functor to compute the xor of two booleans
|
|
411
|
+
*
|
|
412
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator^
|
|
413
|
+
*/
|
|
414
|
+
struct scalar_boolean_xor_op {
|
|
415
|
+
EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_xor_op)
|
|
416
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a ^ b; }
|
|
417
|
+
};
|
|
418
|
+
template<> struct functor_traits<scalar_boolean_xor_op> {
|
|
419
|
+
enum {
|
|
420
|
+
Cost = NumTraits<bool>::AddCost,
|
|
421
|
+
PacketAccess = false
|
|
422
|
+
};
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
//---------- binary functors bound to a constant, thus appearing as a unary functor ----------
|
|
428
|
+
|
|
429
|
+
// The following two classes permits to turn any binary functor into a unary one with one argument bound to a constant value.
|
|
430
|
+
// They are analogues to std::binder1st/binder2nd but with the following differences:
|
|
431
|
+
// - they are compatible with packetOp
|
|
432
|
+
// - they are portable across C++ versions (the std::binder* are deprecated in C++11)
|
|
433
|
+
template<typename BinaryOp> struct bind1st_op : BinaryOp {
|
|
434
|
+
|
|
435
|
+
typedef typename BinaryOp::first_argument_type first_argument_type;
|
|
436
|
+
typedef typename BinaryOp::second_argument_type second_argument_type;
|
|
437
|
+
typedef typename BinaryOp::result_type result_type;
|
|
438
|
+
|
|
439
|
+
bind1st_op(const first_argument_type &val) : m_value(val) {}
|
|
440
|
+
|
|
441
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const second_argument_type& b) const { return BinaryOp::operator()(m_value,b); }
|
|
442
|
+
|
|
443
|
+
template<typename Packet>
|
|
444
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& b) const
|
|
445
|
+
{ return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b); }
|
|
446
|
+
|
|
447
|
+
first_argument_type m_value;
|
|
448
|
+
};
|
|
449
|
+
template<typename BinaryOp> struct functor_traits<bind1st_op<BinaryOp> > : functor_traits<BinaryOp> {};
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
template<typename BinaryOp> struct bind2nd_op : BinaryOp {
|
|
453
|
+
|
|
454
|
+
typedef typename BinaryOp::first_argument_type first_argument_type;
|
|
455
|
+
typedef typename BinaryOp::second_argument_type second_argument_type;
|
|
456
|
+
typedef typename BinaryOp::result_type result_type;
|
|
457
|
+
|
|
458
|
+
bind2nd_op(const second_argument_type &val) : m_value(val) {}
|
|
459
|
+
|
|
460
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const first_argument_type& a) const { return BinaryOp::operator()(a,m_value); }
|
|
461
|
+
|
|
462
|
+
template<typename Packet>
|
|
463
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const
|
|
464
|
+
{ return BinaryOp::packetOp(a,internal::pset1<Packet>(m_value)); }
|
|
465
|
+
|
|
466
|
+
second_argument_type m_value;
|
|
467
|
+
};
|
|
468
|
+
template<typename BinaryOp> struct functor_traits<bind2nd_op<BinaryOp> > : functor_traits<BinaryOp> {};
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
} // end namespace internal
|
|
472
|
+
|
|
473
|
+
} // end namespace Eigen
|
|
474
|
+
|
|
475
|
+
#endif // EIGEN_BINARY_FUNCTORS_H
|