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,726 @@
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
2
|
+
// for linear algebra.
|
3
|
+
//
|
4
|
+
// Copyright (C) 2008-2014 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_SPARSE_CWISE_BINARY_OP_H
|
11
|
+
#define EIGEN_SPARSE_CWISE_BINARY_OP_H
|
12
|
+
|
13
|
+
namespace Eigen {
|
14
|
+
|
15
|
+
// Here we have to handle 3 cases:
|
16
|
+
// 1 - sparse op dense
|
17
|
+
// 2 - dense op sparse
|
18
|
+
// 3 - sparse op sparse
|
19
|
+
// We also need to implement a 4th iterator for:
|
20
|
+
// 4 - dense op dense
|
21
|
+
// Finally, we also need to distinguish between the product and other operations :
|
22
|
+
// configuration returned mode
|
23
|
+
// 1 - sparse op dense product sparse
|
24
|
+
// generic dense
|
25
|
+
// 2 - dense op sparse product sparse
|
26
|
+
// generic dense
|
27
|
+
// 3 - sparse op sparse product sparse
|
28
|
+
// generic sparse
|
29
|
+
// 4 - dense op dense product dense
|
30
|
+
// generic dense
|
31
|
+
//
|
32
|
+
// TODO to ease compiler job, we could specialize product/quotient with a scalar
|
33
|
+
// and fallback to cwise-unary evaluator using bind1st_op and bind2nd_op.
|
34
|
+
|
35
|
+
template<typename BinaryOp, typename Lhs, typename Rhs>
|
36
|
+
class CwiseBinaryOpImpl<BinaryOp, Lhs, Rhs, Sparse>
|
37
|
+
: public SparseMatrixBase<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
|
38
|
+
{
|
39
|
+
public:
|
40
|
+
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> Derived;
|
41
|
+
typedef SparseMatrixBase<Derived> Base;
|
42
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
|
43
|
+
CwiseBinaryOpImpl()
|
44
|
+
{
|
45
|
+
EIGEN_STATIC_ASSERT((
|
46
|
+
(!internal::is_same<typename internal::traits<Lhs>::StorageKind,
|
47
|
+
typename internal::traits<Rhs>::StorageKind>::value)
|
48
|
+
|| ((internal::evaluator<Lhs>::Flags&RowMajorBit) == (internal::evaluator<Rhs>::Flags&RowMajorBit))),
|
49
|
+
THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH);
|
50
|
+
}
|
51
|
+
};
|
52
|
+
|
53
|
+
namespace internal {
|
54
|
+
|
55
|
+
|
56
|
+
// Generic "sparse OP sparse"
|
57
|
+
template<typename XprType> struct binary_sparse_evaluator;
|
58
|
+
|
59
|
+
template<typename BinaryOp, typename Lhs, typename Rhs>
|
60
|
+
struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IteratorBased, IteratorBased>
|
61
|
+
: evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
|
62
|
+
{
|
63
|
+
protected:
|
64
|
+
typedef typename evaluator<Lhs>::InnerIterator LhsIterator;
|
65
|
+
typedef typename evaluator<Rhs>::InnerIterator RhsIterator;
|
66
|
+
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
|
67
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
68
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
69
|
+
public:
|
70
|
+
|
71
|
+
class InnerIterator
|
72
|
+
{
|
73
|
+
public:
|
74
|
+
|
75
|
+
EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
|
76
|
+
: m_lhsIter(aEval.m_lhsImpl,outer), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor)
|
77
|
+
{
|
78
|
+
this->operator++();
|
79
|
+
}
|
80
|
+
|
81
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
82
|
+
{
|
83
|
+
if (m_lhsIter && m_rhsIter && (m_lhsIter.index() == m_rhsIter.index()))
|
84
|
+
{
|
85
|
+
m_id = m_lhsIter.index();
|
86
|
+
m_value = m_functor(m_lhsIter.value(), m_rhsIter.value());
|
87
|
+
++m_lhsIter;
|
88
|
+
++m_rhsIter;
|
89
|
+
}
|
90
|
+
else if (m_lhsIter && (!m_rhsIter || (m_lhsIter.index() < m_rhsIter.index())))
|
91
|
+
{
|
92
|
+
m_id = m_lhsIter.index();
|
93
|
+
m_value = m_functor(m_lhsIter.value(), Scalar(0));
|
94
|
+
++m_lhsIter;
|
95
|
+
}
|
96
|
+
else if (m_rhsIter && (!m_lhsIter || (m_lhsIter.index() > m_rhsIter.index())))
|
97
|
+
{
|
98
|
+
m_id = m_rhsIter.index();
|
99
|
+
m_value = m_functor(Scalar(0), m_rhsIter.value());
|
100
|
+
++m_rhsIter;
|
101
|
+
}
|
102
|
+
else
|
103
|
+
{
|
104
|
+
m_value = 0; // this is to avoid a compilation warning
|
105
|
+
m_id = -1;
|
106
|
+
}
|
107
|
+
return *this;
|
108
|
+
}
|
109
|
+
|
110
|
+
EIGEN_STRONG_INLINE Scalar value() const { return m_value; }
|
111
|
+
|
112
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
|
113
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
|
114
|
+
EIGEN_STRONG_INLINE Index row() const { return Lhs::IsRowMajor ? m_lhsIter.row() : index(); }
|
115
|
+
EIGEN_STRONG_INLINE Index col() const { return Lhs::IsRowMajor ? index() : m_lhsIter.col(); }
|
116
|
+
|
117
|
+
EIGEN_STRONG_INLINE operator bool() const { return m_id>=0; }
|
118
|
+
|
119
|
+
protected:
|
120
|
+
LhsIterator m_lhsIter;
|
121
|
+
RhsIterator m_rhsIter;
|
122
|
+
const BinaryOp& m_functor;
|
123
|
+
Scalar m_value;
|
124
|
+
StorageIndex m_id;
|
125
|
+
};
|
126
|
+
|
127
|
+
|
128
|
+
enum {
|
129
|
+
CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
130
|
+
Flags = XprType::Flags
|
131
|
+
};
|
132
|
+
|
133
|
+
explicit binary_evaluator(const XprType& xpr)
|
134
|
+
: m_functor(xpr.functor()),
|
135
|
+
m_lhsImpl(xpr.lhs()),
|
136
|
+
m_rhsImpl(xpr.rhs())
|
137
|
+
{
|
138
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
139
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
140
|
+
}
|
141
|
+
|
142
|
+
inline Index nonZerosEstimate() const {
|
143
|
+
return m_lhsImpl.nonZerosEstimate() + m_rhsImpl.nonZerosEstimate();
|
144
|
+
}
|
145
|
+
|
146
|
+
protected:
|
147
|
+
const BinaryOp m_functor;
|
148
|
+
evaluator<Lhs> m_lhsImpl;
|
149
|
+
evaluator<Rhs> m_rhsImpl;
|
150
|
+
};
|
151
|
+
|
152
|
+
// dense op sparse
|
153
|
+
template<typename BinaryOp, typename Lhs, typename Rhs>
|
154
|
+
struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IndexBased, IteratorBased>
|
155
|
+
: evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
|
156
|
+
{
|
157
|
+
protected:
|
158
|
+
typedef typename evaluator<Rhs>::InnerIterator RhsIterator;
|
159
|
+
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
|
160
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
161
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
162
|
+
public:
|
163
|
+
|
164
|
+
class InnerIterator
|
165
|
+
{
|
166
|
+
enum { IsRowMajor = (int(Rhs::Flags)&RowMajorBit)==RowMajorBit };
|
167
|
+
public:
|
168
|
+
|
169
|
+
EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
|
170
|
+
: m_lhsEval(aEval.m_lhsImpl), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor), m_value(0), m_id(-1), m_innerSize(aEval.m_expr.rhs().innerSize())
|
171
|
+
{
|
172
|
+
this->operator++();
|
173
|
+
}
|
174
|
+
|
175
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
176
|
+
{
|
177
|
+
++m_id;
|
178
|
+
if(m_id<m_innerSize)
|
179
|
+
{
|
180
|
+
Scalar lhsVal = m_lhsEval.coeff(IsRowMajor?m_rhsIter.outer():m_id,
|
181
|
+
IsRowMajor?m_id:m_rhsIter.outer());
|
182
|
+
if(m_rhsIter && m_rhsIter.index()==m_id)
|
183
|
+
{
|
184
|
+
m_value = m_functor(lhsVal, m_rhsIter.value());
|
185
|
+
++m_rhsIter;
|
186
|
+
}
|
187
|
+
else
|
188
|
+
m_value = m_functor(lhsVal, Scalar(0));
|
189
|
+
}
|
190
|
+
|
191
|
+
return *this;
|
192
|
+
}
|
193
|
+
|
194
|
+
EIGEN_STRONG_INLINE Scalar value() const { eigen_internal_assert(m_id<m_innerSize); return m_value; }
|
195
|
+
|
196
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
|
197
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_rhsIter.outer(); }
|
198
|
+
EIGEN_STRONG_INLINE Index row() const { return IsRowMajor ? m_rhsIter.outer() : m_id; }
|
199
|
+
EIGEN_STRONG_INLINE Index col() const { return IsRowMajor ? m_id : m_rhsIter.outer(); }
|
200
|
+
|
201
|
+
EIGEN_STRONG_INLINE operator bool() const { return m_id<m_innerSize; }
|
202
|
+
|
203
|
+
protected:
|
204
|
+
const evaluator<Lhs> &m_lhsEval;
|
205
|
+
RhsIterator m_rhsIter;
|
206
|
+
const BinaryOp& m_functor;
|
207
|
+
Scalar m_value;
|
208
|
+
StorageIndex m_id;
|
209
|
+
StorageIndex m_innerSize;
|
210
|
+
};
|
211
|
+
|
212
|
+
|
213
|
+
enum {
|
214
|
+
CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
215
|
+
// Expose storage order of the sparse expression
|
216
|
+
Flags = (XprType::Flags & ~RowMajorBit) | (int(Rhs::Flags)&RowMajorBit)
|
217
|
+
};
|
218
|
+
|
219
|
+
explicit binary_evaluator(const XprType& xpr)
|
220
|
+
: m_functor(xpr.functor()),
|
221
|
+
m_lhsImpl(xpr.lhs()),
|
222
|
+
m_rhsImpl(xpr.rhs()),
|
223
|
+
m_expr(xpr)
|
224
|
+
{
|
225
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
226
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
227
|
+
}
|
228
|
+
|
229
|
+
inline Index nonZerosEstimate() const {
|
230
|
+
return m_expr.size();
|
231
|
+
}
|
232
|
+
|
233
|
+
protected:
|
234
|
+
const BinaryOp m_functor;
|
235
|
+
evaluator<Lhs> m_lhsImpl;
|
236
|
+
evaluator<Rhs> m_rhsImpl;
|
237
|
+
const XprType &m_expr;
|
238
|
+
};
|
239
|
+
|
240
|
+
// sparse op dense
|
241
|
+
template<typename BinaryOp, typename Lhs, typename Rhs>
|
242
|
+
struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IteratorBased, IndexBased>
|
243
|
+
: evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
|
244
|
+
{
|
245
|
+
protected:
|
246
|
+
typedef typename evaluator<Lhs>::InnerIterator LhsIterator;
|
247
|
+
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
|
248
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
249
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
250
|
+
public:
|
251
|
+
|
252
|
+
class InnerIterator
|
253
|
+
{
|
254
|
+
enum { IsRowMajor = (int(Lhs::Flags)&RowMajorBit)==RowMajorBit };
|
255
|
+
public:
|
256
|
+
|
257
|
+
EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
|
258
|
+
: m_lhsIter(aEval.m_lhsImpl,outer), m_rhsEval(aEval.m_rhsImpl), m_functor(aEval.m_functor), m_value(0), m_id(-1), m_innerSize(aEval.m_expr.lhs().innerSize())
|
259
|
+
{
|
260
|
+
this->operator++();
|
261
|
+
}
|
262
|
+
|
263
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
264
|
+
{
|
265
|
+
++m_id;
|
266
|
+
if(m_id<m_innerSize)
|
267
|
+
{
|
268
|
+
Scalar rhsVal = m_rhsEval.coeff(IsRowMajor?m_lhsIter.outer():m_id,
|
269
|
+
IsRowMajor?m_id:m_lhsIter.outer());
|
270
|
+
if(m_lhsIter && m_lhsIter.index()==m_id)
|
271
|
+
{
|
272
|
+
m_value = m_functor(m_lhsIter.value(), rhsVal);
|
273
|
+
++m_lhsIter;
|
274
|
+
}
|
275
|
+
else
|
276
|
+
m_value = m_functor(Scalar(0),rhsVal);
|
277
|
+
}
|
278
|
+
|
279
|
+
return *this;
|
280
|
+
}
|
281
|
+
|
282
|
+
EIGEN_STRONG_INLINE Scalar value() const { eigen_internal_assert(m_id<m_innerSize); return m_value; }
|
283
|
+
|
284
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
|
285
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
|
286
|
+
EIGEN_STRONG_INLINE Index row() const { return IsRowMajor ? m_lhsIter.outer() : m_id; }
|
287
|
+
EIGEN_STRONG_INLINE Index col() const { return IsRowMajor ? m_id : m_lhsIter.outer(); }
|
288
|
+
|
289
|
+
EIGEN_STRONG_INLINE operator bool() const { return m_id<m_innerSize; }
|
290
|
+
|
291
|
+
protected:
|
292
|
+
LhsIterator m_lhsIter;
|
293
|
+
const evaluator<Rhs> &m_rhsEval;
|
294
|
+
const BinaryOp& m_functor;
|
295
|
+
Scalar m_value;
|
296
|
+
StorageIndex m_id;
|
297
|
+
StorageIndex m_innerSize;
|
298
|
+
};
|
299
|
+
|
300
|
+
|
301
|
+
enum {
|
302
|
+
CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
303
|
+
// Expose storage order of the sparse expression
|
304
|
+
Flags = (XprType::Flags & ~RowMajorBit) | (int(Lhs::Flags)&RowMajorBit)
|
305
|
+
};
|
306
|
+
|
307
|
+
explicit binary_evaluator(const XprType& xpr)
|
308
|
+
: m_functor(xpr.functor()),
|
309
|
+
m_lhsImpl(xpr.lhs()),
|
310
|
+
m_rhsImpl(xpr.rhs()),
|
311
|
+
m_expr(xpr)
|
312
|
+
{
|
313
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
314
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
315
|
+
}
|
316
|
+
|
317
|
+
inline Index nonZerosEstimate() const {
|
318
|
+
return m_expr.size();
|
319
|
+
}
|
320
|
+
|
321
|
+
protected:
|
322
|
+
const BinaryOp m_functor;
|
323
|
+
evaluator<Lhs> m_lhsImpl;
|
324
|
+
evaluator<Rhs> m_rhsImpl;
|
325
|
+
const XprType &m_expr;
|
326
|
+
};
|
327
|
+
|
328
|
+
template<typename T,
|
329
|
+
typename LhsKind = typename evaluator_traits<typename T::Lhs>::Kind,
|
330
|
+
typename RhsKind = typename evaluator_traits<typename T::Rhs>::Kind,
|
331
|
+
typename LhsScalar = typename traits<typename T::Lhs>::Scalar,
|
332
|
+
typename RhsScalar = typename traits<typename T::Rhs>::Scalar> struct sparse_conjunction_evaluator;
|
333
|
+
|
334
|
+
// "sparse .* sparse"
|
335
|
+
template<typename T1, typename T2, typename Lhs, typename Rhs>
|
336
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IteratorBased>
|
337
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
|
338
|
+
{
|
339
|
+
typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
|
340
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
341
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
342
|
+
};
|
343
|
+
// "dense .* sparse"
|
344
|
+
template<typename T1, typename T2, typename Lhs, typename Rhs>
|
345
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IndexBased, IteratorBased>
|
346
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
|
347
|
+
{
|
348
|
+
typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
|
349
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
350
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
351
|
+
};
|
352
|
+
// "sparse .* dense"
|
353
|
+
template<typename T1, typename T2, typename Lhs, typename Rhs>
|
354
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IndexBased>
|
355
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
|
356
|
+
{
|
357
|
+
typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
|
358
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
359
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
360
|
+
};
|
361
|
+
|
362
|
+
// "sparse ./ dense"
|
363
|
+
template<typename T1, typename T2, typename Lhs, typename Rhs>
|
364
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs>, IteratorBased, IndexBased>
|
365
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs> >
|
366
|
+
{
|
367
|
+
typedef CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs> XprType;
|
368
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
369
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
370
|
+
};
|
371
|
+
|
372
|
+
// "sparse && sparse"
|
373
|
+
template<typename Lhs, typename Rhs>
|
374
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IteratorBased, IteratorBased>
|
375
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
|
376
|
+
{
|
377
|
+
typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
|
378
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
379
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
380
|
+
};
|
381
|
+
// "dense && sparse"
|
382
|
+
template<typename Lhs, typename Rhs>
|
383
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IndexBased, IteratorBased>
|
384
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
|
385
|
+
{
|
386
|
+
typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
|
387
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
388
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
389
|
+
};
|
390
|
+
// "sparse && dense"
|
391
|
+
template<typename Lhs, typename Rhs>
|
392
|
+
struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IteratorBased, IndexBased>
|
393
|
+
: sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
|
394
|
+
{
|
395
|
+
typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
|
396
|
+
typedef sparse_conjunction_evaluator<XprType> Base;
|
397
|
+
explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
|
398
|
+
};
|
399
|
+
|
400
|
+
// "sparse ^ sparse"
|
401
|
+
template<typename XprType>
|
402
|
+
struct sparse_conjunction_evaluator<XprType, IteratorBased, IteratorBased>
|
403
|
+
: evaluator_base<XprType>
|
404
|
+
{
|
405
|
+
protected:
|
406
|
+
typedef typename XprType::Functor BinaryOp;
|
407
|
+
typedef typename XprType::Lhs LhsArg;
|
408
|
+
typedef typename XprType::Rhs RhsArg;
|
409
|
+
typedef typename evaluator<LhsArg>::InnerIterator LhsIterator;
|
410
|
+
typedef typename evaluator<RhsArg>::InnerIterator RhsIterator;
|
411
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
412
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
413
|
+
public:
|
414
|
+
|
415
|
+
class InnerIterator
|
416
|
+
{
|
417
|
+
public:
|
418
|
+
|
419
|
+
EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
|
420
|
+
: m_lhsIter(aEval.m_lhsImpl,outer), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor)
|
421
|
+
{
|
422
|
+
while (m_lhsIter && m_rhsIter && (m_lhsIter.index() != m_rhsIter.index()))
|
423
|
+
{
|
424
|
+
if (m_lhsIter.index() < m_rhsIter.index())
|
425
|
+
++m_lhsIter;
|
426
|
+
else
|
427
|
+
++m_rhsIter;
|
428
|
+
}
|
429
|
+
}
|
430
|
+
|
431
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
432
|
+
{
|
433
|
+
++m_lhsIter;
|
434
|
+
++m_rhsIter;
|
435
|
+
while (m_lhsIter && m_rhsIter && (m_lhsIter.index() != m_rhsIter.index()))
|
436
|
+
{
|
437
|
+
if (m_lhsIter.index() < m_rhsIter.index())
|
438
|
+
++m_lhsIter;
|
439
|
+
else
|
440
|
+
++m_rhsIter;
|
441
|
+
}
|
442
|
+
return *this;
|
443
|
+
}
|
444
|
+
|
445
|
+
EIGEN_STRONG_INLINE Scalar value() const { return m_functor(m_lhsIter.value(), m_rhsIter.value()); }
|
446
|
+
|
447
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_lhsIter.index(); }
|
448
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
|
449
|
+
EIGEN_STRONG_INLINE Index row() const { return m_lhsIter.row(); }
|
450
|
+
EIGEN_STRONG_INLINE Index col() const { return m_lhsIter.col(); }
|
451
|
+
|
452
|
+
EIGEN_STRONG_INLINE operator bool() const { return (m_lhsIter && m_rhsIter); }
|
453
|
+
|
454
|
+
protected:
|
455
|
+
LhsIterator m_lhsIter;
|
456
|
+
RhsIterator m_rhsIter;
|
457
|
+
const BinaryOp& m_functor;
|
458
|
+
};
|
459
|
+
|
460
|
+
|
461
|
+
enum {
|
462
|
+
CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
463
|
+
Flags = XprType::Flags
|
464
|
+
};
|
465
|
+
|
466
|
+
explicit sparse_conjunction_evaluator(const XprType& xpr)
|
467
|
+
: m_functor(xpr.functor()),
|
468
|
+
m_lhsImpl(xpr.lhs()),
|
469
|
+
m_rhsImpl(xpr.rhs())
|
470
|
+
{
|
471
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
472
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
473
|
+
}
|
474
|
+
|
475
|
+
inline Index nonZerosEstimate() const {
|
476
|
+
return (std::min)(m_lhsImpl.nonZerosEstimate(), m_rhsImpl.nonZerosEstimate());
|
477
|
+
}
|
478
|
+
|
479
|
+
protected:
|
480
|
+
const BinaryOp m_functor;
|
481
|
+
evaluator<LhsArg> m_lhsImpl;
|
482
|
+
evaluator<RhsArg> m_rhsImpl;
|
483
|
+
};
|
484
|
+
|
485
|
+
// "dense ^ sparse"
|
486
|
+
template<typename XprType>
|
487
|
+
struct sparse_conjunction_evaluator<XprType, IndexBased, IteratorBased>
|
488
|
+
: evaluator_base<XprType>
|
489
|
+
{
|
490
|
+
protected:
|
491
|
+
typedef typename XprType::Functor BinaryOp;
|
492
|
+
typedef typename XprType::Lhs LhsArg;
|
493
|
+
typedef typename XprType::Rhs RhsArg;
|
494
|
+
typedef evaluator<LhsArg> LhsEvaluator;
|
495
|
+
typedef typename evaluator<RhsArg>::InnerIterator RhsIterator;
|
496
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
497
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
498
|
+
public:
|
499
|
+
|
500
|
+
class InnerIterator
|
501
|
+
{
|
502
|
+
enum { IsRowMajor = (int(RhsArg::Flags)&RowMajorBit)==RowMajorBit };
|
503
|
+
|
504
|
+
public:
|
505
|
+
|
506
|
+
EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
|
507
|
+
: m_lhsEval(aEval.m_lhsImpl), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor), m_outer(outer)
|
508
|
+
{}
|
509
|
+
|
510
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
511
|
+
{
|
512
|
+
++m_rhsIter;
|
513
|
+
return *this;
|
514
|
+
}
|
515
|
+
|
516
|
+
EIGEN_STRONG_INLINE Scalar value() const
|
517
|
+
{ return m_functor(m_lhsEval.coeff(IsRowMajor?m_outer:m_rhsIter.index(),IsRowMajor?m_rhsIter.index():m_outer), m_rhsIter.value()); }
|
518
|
+
|
519
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_rhsIter.index(); }
|
520
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_rhsIter.outer(); }
|
521
|
+
EIGEN_STRONG_INLINE Index row() const { return m_rhsIter.row(); }
|
522
|
+
EIGEN_STRONG_INLINE Index col() const { return m_rhsIter.col(); }
|
523
|
+
|
524
|
+
EIGEN_STRONG_INLINE operator bool() const { return m_rhsIter; }
|
525
|
+
|
526
|
+
protected:
|
527
|
+
const LhsEvaluator &m_lhsEval;
|
528
|
+
RhsIterator m_rhsIter;
|
529
|
+
const BinaryOp& m_functor;
|
530
|
+
const Index m_outer;
|
531
|
+
};
|
532
|
+
|
533
|
+
|
534
|
+
enum {
|
535
|
+
CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
536
|
+
// Expose storage order of the sparse expression
|
537
|
+
Flags = (XprType::Flags & ~RowMajorBit) | (int(RhsArg::Flags)&RowMajorBit)
|
538
|
+
};
|
539
|
+
|
540
|
+
explicit sparse_conjunction_evaluator(const XprType& xpr)
|
541
|
+
: m_functor(xpr.functor()),
|
542
|
+
m_lhsImpl(xpr.lhs()),
|
543
|
+
m_rhsImpl(xpr.rhs())
|
544
|
+
{
|
545
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
546
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
547
|
+
}
|
548
|
+
|
549
|
+
inline Index nonZerosEstimate() const {
|
550
|
+
return m_rhsImpl.nonZerosEstimate();
|
551
|
+
}
|
552
|
+
|
553
|
+
protected:
|
554
|
+
const BinaryOp m_functor;
|
555
|
+
evaluator<LhsArg> m_lhsImpl;
|
556
|
+
evaluator<RhsArg> m_rhsImpl;
|
557
|
+
};
|
558
|
+
|
559
|
+
// "sparse ^ dense"
|
560
|
+
template<typename XprType>
|
561
|
+
struct sparse_conjunction_evaluator<XprType, IteratorBased, IndexBased>
|
562
|
+
: evaluator_base<XprType>
|
563
|
+
{
|
564
|
+
protected:
|
565
|
+
typedef typename XprType::Functor BinaryOp;
|
566
|
+
typedef typename XprType::Lhs LhsArg;
|
567
|
+
typedef typename XprType::Rhs RhsArg;
|
568
|
+
typedef typename evaluator<LhsArg>::InnerIterator LhsIterator;
|
569
|
+
typedef evaluator<RhsArg> RhsEvaluator;
|
570
|
+
typedef typename XprType::StorageIndex StorageIndex;
|
571
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
572
|
+
public:
|
573
|
+
|
574
|
+
class InnerIterator
|
575
|
+
{
|
576
|
+
enum { IsRowMajor = (int(LhsArg::Flags)&RowMajorBit)==RowMajorBit };
|
577
|
+
|
578
|
+
public:
|
579
|
+
|
580
|
+
EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
|
581
|
+
: m_lhsIter(aEval.m_lhsImpl,outer), m_rhsEval(aEval.m_rhsImpl), m_functor(aEval.m_functor), m_outer(outer)
|
582
|
+
{}
|
583
|
+
|
584
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
585
|
+
{
|
586
|
+
++m_lhsIter;
|
587
|
+
return *this;
|
588
|
+
}
|
589
|
+
|
590
|
+
EIGEN_STRONG_INLINE Scalar value() const
|
591
|
+
{ return m_functor(m_lhsIter.value(),
|
592
|
+
m_rhsEval.coeff(IsRowMajor?m_outer:m_lhsIter.index(),IsRowMajor?m_lhsIter.index():m_outer)); }
|
593
|
+
|
594
|
+
EIGEN_STRONG_INLINE StorageIndex index() const { return m_lhsIter.index(); }
|
595
|
+
EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
|
596
|
+
EIGEN_STRONG_INLINE Index row() const { return m_lhsIter.row(); }
|
597
|
+
EIGEN_STRONG_INLINE Index col() const { return m_lhsIter.col(); }
|
598
|
+
|
599
|
+
EIGEN_STRONG_INLINE operator bool() const { return m_lhsIter; }
|
600
|
+
|
601
|
+
protected:
|
602
|
+
LhsIterator m_lhsIter;
|
603
|
+
const evaluator<RhsArg> &m_rhsEval;
|
604
|
+
const BinaryOp& m_functor;
|
605
|
+
const Index m_outer;
|
606
|
+
};
|
607
|
+
|
608
|
+
|
609
|
+
enum {
|
610
|
+
CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
|
611
|
+
// Expose storage order of the sparse expression
|
612
|
+
Flags = (XprType::Flags & ~RowMajorBit) | (int(LhsArg::Flags)&RowMajorBit)
|
613
|
+
};
|
614
|
+
|
615
|
+
explicit sparse_conjunction_evaluator(const XprType& xpr)
|
616
|
+
: m_functor(xpr.functor()),
|
617
|
+
m_lhsImpl(xpr.lhs()),
|
618
|
+
m_rhsImpl(xpr.rhs())
|
619
|
+
{
|
620
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
621
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
622
|
+
}
|
623
|
+
|
624
|
+
inline Index nonZerosEstimate() const {
|
625
|
+
return m_lhsImpl.nonZerosEstimate();
|
626
|
+
}
|
627
|
+
|
628
|
+
protected:
|
629
|
+
const BinaryOp m_functor;
|
630
|
+
evaluator<LhsArg> m_lhsImpl;
|
631
|
+
evaluator<RhsArg> m_rhsImpl;
|
632
|
+
};
|
633
|
+
|
634
|
+
}
|
635
|
+
|
636
|
+
/***************************************************************************
|
637
|
+
* Implementation of SparseMatrixBase and SparseCwise functions/operators
|
638
|
+
***************************************************************************/
|
639
|
+
|
640
|
+
template<typename Derived>
|
641
|
+
template<typename OtherDerived>
|
642
|
+
Derived& SparseMatrixBase<Derived>::operator+=(const EigenBase<OtherDerived> &other)
|
643
|
+
{
|
644
|
+
call_assignment(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
|
645
|
+
return derived();
|
646
|
+
}
|
647
|
+
|
648
|
+
template<typename Derived>
|
649
|
+
template<typename OtherDerived>
|
650
|
+
Derived& SparseMatrixBase<Derived>::operator-=(const EigenBase<OtherDerived> &other)
|
651
|
+
{
|
652
|
+
call_assignment(derived(), other.derived(), internal::assign_op<Scalar,typename OtherDerived::Scalar>());
|
653
|
+
return derived();
|
654
|
+
}
|
655
|
+
|
656
|
+
template<typename Derived>
|
657
|
+
template<typename OtherDerived>
|
658
|
+
EIGEN_STRONG_INLINE Derived &
|
659
|
+
SparseMatrixBase<Derived>::operator-=(const SparseMatrixBase<OtherDerived> &other)
|
660
|
+
{
|
661
|
+
return derived() = derived() - other.derived();
|
662
|
+
}
|
663
|
+
|
664
|
+
template<typename Derived>
|
665
|
+
template<typename OtherDerived>
|
666
|
+
EIGEN_STRONG_INLINE Derived &
|
667
|
+
SparseMatrixBase<Derived>::operator+=(const SparseMatrixBase<OtherDerived>& other)
|
668
|
+
{
|
669
|
+
return derived() = derived() + other.derived();
|
670
|
+
}
|
671
|
+
|
672
|
+
template<typename Derived>
|
673
|
+
template<typename OtherDerived>
|
674
|
+
Derived& SparseMatrixBase<Derived>::operator+=(const DiagonalBase<OtherDerived>& other)
|
675
|
+
{
|
676
|
+
call_assignment_no_alias(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
|
677
|
+
return derived();
|
678
|
+
}
|
679
|
+
|
680
|
+
template<typename Derived>
|
681
|
+
template<typename OtherDerived>
|
682
|
+
Derived& SparseMatrixBase<Derived>::operator-=(const DiagonalBase<OtherDerived>& other)
|
683
|
+
{
|
684
|
+
call_assignment_no_alias(derived(), other.derived(), internal::sub_assign_op<Scalar,typename OtherDerived::Scalar>());
|
685
|
+
return derived();
|
686
|
+
}
|
687
|
+
|
688
|
+
template<typename Derived>
|
689
|
+
template<typename OtherDerived>
|
690
|
+
EIGEN_STRONG_INLINE const typename SparseMatrixBase<Derived>::template CwiseProductDenseReturnType<OtherDerived>::Type
|
691
|
+
SparseMatrixBase<Derived>::cwiseProduct(const MatrixBase<OtherDerived> &other) const
|
692
|
+
{
|
693
|
+
return typename CwiseProductDenseReturnType<OtherDerived>::Type(derived(), other.derived());
|
694
|
+
}
|
695
|
+
|
696
|
+
template<typename DenseDerived, typename SparseDerived>
|
697
|
+
EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_sum_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>
|
698
|
+
operator+(const MatrixBase<DenseDerived> &a, const SparseMatrixBase<SparseDerived> &b)
|
699
|
+
{
|
700
|
+
return CwiseBinaryOp<internal::scalar_sum_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>(a.derived(), b.derived());
|
701
|
+
}
|
702
|
+
|
703
|
+
template<typename SparseDerived, typename DenseDerived>
|
704
|
+
EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_sum_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>
|
705
|
+
operator+(const SparseMatrixBase<SparseDerived> &a, const MatrixBase<DenseDerived> &b)
|
706
|
+
{
|
707
|
+
return CwiseBinaryOp<internal::scalar_sum_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>(a.derived(), b.derived());
|
708
|
+
}
|
709
|
+
|
710
|
+
template<typename DenseDerived, typename SparseDerived>
|
711
|
+
EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_difference_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>
|
712
|
+
operator-(const MatrixBase<DenseDerived> &a, const SparseMatrixBase<SparseDerived> &b)
|
713
|
+
{
|
714
|
+
return CwiseBinaryOp<internal::scalar_difference_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>(a.derived(), b.derived());
|
715
|
+
}
|
716
|
+
|
717
|
+
template<typename SparseDerived, typename DenseDerived>
|
718
|
+
EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_difference_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>
|
719
|
+
operator-(const SparseMatrixBase<SparseDerived> &a, const MatrixBase<DenseDerived> &b)
|
720
|
+
{
|
721
|
+
return CwiseBinaryOp<internal::scalar_difference_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>(a.derived(), b.derived());
|
722
|
+
}
|
723
|
+
|
724
|
+
} // end namespace Eigen
|
725
|
+
|
726
|
+
#endif // EIGEN_SPARSE_CWISE_BINARY_OP_H
|