ruby-eigen 0.0.9 → 0.0.10.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +22 -0
- data/README.md +21 -0
- data/ext/eigen/eigen3/COPYING.BSD +26 -0
- data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
- data/ext/eigen/eigen3/COPYING.README +18 -0
- data/ext/eigen/eigen3/Eigen/Array +11 -0
- data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
- data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
- data/ext/eigen/eigen3/Eigen/Core +376 -0
- data/ext/eigen/eigen3/Eigen/Dense +7 -0
- data/ext/eigen/eigen3/Eigen/Eigen +2 -0
- data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
- data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
- data/ext/eigen/eigen3/Eigen/Geometry +63 -0
- data/ext/eigen/eigen3/Eigen/Householder +23 -0
- data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
- data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
- data/ext/eigen/eigen3/Eigen/LU +41 -0
- data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
- data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
- data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
- data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
- data/ext/eigen/eigen3/Eigen/QR +45 -0
- data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
- data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
- data/ext/eigen/eigen3/Eigen/SVD +37 -0
- data/ext/eigen/eigen3/Eigen/Sparse +27 -0
- data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
- data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
- data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
- data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
- data/ext/eigen/eigen3/Eigen/StdList +26 -0
- data/ext/eigen/eigen3/Eigen/StdVector +27 -0
- data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
- data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
- data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
- data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
- data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
- data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
- data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
- data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
- data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
- data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
- data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
- data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
- data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
- data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
- data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
- data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
- data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
- data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
- data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
- data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
- data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
- data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
- data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
- data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
- data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
- data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
- data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
- data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
- data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
- data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
- data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
- data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
- data/ext/eigen/eigen_wrap.cxx +19420 -10396
- data/ext/eigen/extconf.rb +37 -2
- data/lib/eigen.rb +146 -3
- metadata +294 -7
|
@@ -0,0 +1,163 @@
|
|
|
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_SPARSE_CWISE_UNARY_OP_H
|
|
11
|
+
#define EIGEN_SPARSE_CWISE_UNARY_OP_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
template<typename UnaryOp, typename MatrixType>
|
|
16
|
+
class CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>
|
|
17
|
+
: public SparseMatrixBase<CwiseUnaryOp<UnaryOp, MatrixType> >
|
|
18
|
+
{
|
|
19
|
+
public:
|
|
20
|
+
|
|
21
|
+
class InnerIterator;
|
|
22
|
+
class ReverseInnerIterator;
|
|
23
|
+
|
|
24
|
+
typedef CwiseUnaryOp<UnaryOp, MatrixType> Derived;
|
|
25
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
|
|
26
|
+
|
|
27
|
+
protected:
|
|
28
|
+
typedef typename internal::traits<Derived>::_XprTypeNested _MatrixTypeNested;
|
|
29
|
+
typedef typename _MatrixTypeNested::InnerIterator MatrixTypeIterator;
|
|
30
|
+
typedef typename _MatrixTypeNested::ReverseInnerIterator MatrixTypeReverseIterator;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
template<typename UnaryOp, typename MatrixType>
|
|
34
|
+
class CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::InnerIterator
|
|
35
|
+
: public CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::MatrixTypeIterator
|
|
36
|
+
{
|
|
37
|
+
typedef typename CwiseUnaryOpImpl::Scalar Scalar;
|
|
38
|
+
typedef typename CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::MatrixTypeIterator Base;
|
|
39
|
+
public:
|
|
40
|
+
|
|
41
|
+
EIGEN_STRONG_INLINE InnerIterator(const CwiseUnaryOpImpl& unaryOp, typename CwiseUnaryOpImpl::Index outer)
|
|
42
|
+
: Base(unaryOp.derived().nestedExpression(),outer), m_functor(unaryOp.derived().functor())
|
|
43
|
+
{}
|
|
44
|
+
|
|
45
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
|
46
|
+
{ Base::operator++(); return *this; }
|
|
47
|
+
|
|
48
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryOpImpl::Scalar value() const { return m_functor(Base::value()); }
|
|
49
|
+
|
|
50
|
+
protected:
|
|
51
|
+
const UnaryOp m_functor;
|
|
52
|
+
private:
|
|
53
|
+
typename CwiseUnaryOpImpl::Scalar& valueRef();
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
template<typename UnaryOp, typename MatrixType>
|
|
57
|
+
class CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::ReverseInnerIterator
|
|
58
|
+
: public CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::MatrixTypeReverseIterator
|
|
59
|
+
{
|
|
60
|
+
typedef typename CwiseUnaryOpImpl::Scalar Scalar;
|
|
61
|
+
typedef typename CwiseUnaryOpImpl<UnaryOp,MatrixType,Sparse>::MatrixTypeReverseIterator Base;
|
|
62
|
+
public:
|
|
63
|
+
|
|
64
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator(const CwiseUnaryOpImpl& unaryOp, typename CwiseUnaryOpImpl::Index outer)
|
|
65
|
+
: Base(unaryOp.derived().nestedExpression(),outer), m_functor(unaryOp.derived().functor())
|
|
66
|
+
{}
|
|
67
|
+
|
|
68
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator& operator--()
|
|
69
|
+
{ Base::operator--(); return *this; }
|
|
70
|
+
|
|
71
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryOpImpl::Scalar value() const { return m_functor(Base::value()); }
|
|
72
|
+
|
|
73
|
+
protected:
|
|
74
|
+
const UnaryOp m_functor;
|
|
75
|
+
private:
|
|
76
|
+
typename CwiseUnaryOpImpl::Scalar& valueRef();
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
template<typename ViewOp, typename MatrixType>
|
|
80
|
+
class CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>
|
|
81
|
+
: public SparseMatrixBase<CwiseUnaryView<ViewOp, MatrixType> >
|
|
82
|
+
{
|
|
83
|
+
public:
|
|
84
|
+
|
|
85
|
+
class InnerIterator;
|
|
86
|
+
class ReverseInnerIterator;
|
|
87
|
+
|
|
88
|
+
typedef CwiseUnaryView<ViewOp, MatrixType> Derived;
|
|
89
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
|
|
90
|
+
|
|
91
|
+
protected:
|
|
92
|
+
typedef typename internal::traits<Derived>::_MatrixTypeNested _MatrixTypeNested;
|
|
93
|
+
typedef typename _MatrixTypeNested::InnerIterator MatrixTypeIterator;
|
|
94
|
+
typedef typename _MatrixTypeNested::ReverseInnerIterator MatrixTypeReverseIterator;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
template<typename ViewOp, typename MatrixType>
|
|
98
|
+
class CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::InnerIterator
|
|
99
|
+
: public CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::MatrixTypeIterator
|
|
100
|
+
{
|
|
101
|
+
typedef typename CwiseUnaryViewImpl::Scalar Scalar;
|
|
102
|
+
typedef typename CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::MatrixTypeIterator Base;
|
|
103
|
+
public:
|
|
104
|
+
|
|
105
|
+
EIGEN_STRONG_INLINE InnerIterator(const CwiseUnaryViewImpl& unaryOp, typename CwiseUnaryViewImpl::Index outer)
|
|
106
|
+
: Base(unaryOp.derived().nestedExpression(),outer), m_functor(unaryOp.derived().functor())
|
|
107
|
+
{}
|
|
108
|
+
|
|
109
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
|
110
|
+
{ Base::operator++(); return *this; }
|
|
111
|
+
|
|
112
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryViewImpl::Scalar value() const { return m_functor(Base::value()); }
|
|
113
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryViewImpl::Scalar& valueRef() { return m_functor(Base::valueRef()); }
|
|
114
|
+
|
|
115
|
+
protected:
|
|
116
|
+
const ViewOp m_functor;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
template<typename ViewOp, typename MatrixType>
|
|
120
|
+
class CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::ReverseInnerIterator
|
|
121
|
+
: public CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::MatrixTypeReverseIterator
|
|
122
|
+
{
|
|
123
|
+
typedef typename CwiseUnaryViewImpl::Scalar Scalar;
|
|
124
|
+
typedef typename CwiseUnaryViewImpl<ViewOp,MatrixType,Sparse>::MatrixTypeReverseIterator Base;
|
|
125
|
+
public:
|
|
126
|
+
|
|
127
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator(const CwiseUnaryViewImpl& unaryOp, typename CwiseUnaryViewImpl::Index outer)
|
|
128
|
+
: Base(unaryOp.derived().nestedExpression(),outer), m_functor(unaryOp.derived().functor())
|
|
129
|
+
{}
|
|
130
|
+
|
|
131
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator& operator--()
|
|
132
|
+
{ Base::operator--(); return *this; }
|
|
133
|
+
|
|
134
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryViewImpl::Scalar value() const { return m_functor(Base::value()); }
|
|
135
|
+
EIGEN_STRONG_INLINE typename CwiseUnaryViewImpl::Scalar& valueRef() { return m_functor(Base::valueRef()); }
|
|
136
|
+
|
|
137
|
+
protected:
|
|
138
|
+
const ViewOp m_functor;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
template<typename Derived>
|
|
142
|
+
EIGEN_STRONG_INLINE Derived&
|
|
143
|
+
SparseMatrixBase<Derived>::operator*=(const Scalar& other)
|
|
144
|
+
{
|
|
145
|
+
for (Index j=0; j<outerSize(); ++j)
|
|
146
|
+
for (typename Derived::InnerIterator i(derived(),j); i; ++i)
|
|
147
|
+
i.valueRef() *= other;
|
|
148
|
+
return derived();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
template<typename Derived>
|
|
152
|
+
EIGEN_STRONG_INLINE Derived&
|
|
153
|
+
SparseMatrixBase<Derived>::operator/=(const Scalar& other)
|
|
154
|
+
{
|
|
155
|
+
for (Index j=0; j<outerSize(); ++j)
|
|
156
|
+
for (typename Derived::InnerIterator i(derived(),j); i; ++i)
|
|
157
|
+
i.valueRef() /= other;
|
|
158
|
+
return derived();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
} // end namespace Eigen
|
|
162
|
+
|
|
163
|
+
#endif // EIGEN_SPARSE_CWISE_UNARY_OP_H
|
|
@@ -0,0 +1,311 @@
|
|
|
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_SPARSEDENSEPRODUCT_H
|
|
11
|
+
#define EIGEN_SPARSEDENSEPRODUCT_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
template<typename Lhs, typename Rhs, int InnerSize> struct SparseDenseProductReturnType
|
|
16
|
+
{
|
|
17
|
+
typedef SparseTimeDenseProduct<Lhs,Rhs> Type;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
template<typename Lhs, typename Rhs> struct SparseDenseProductReturnType<Lhs,Rhs,1>
|
|
21
|
+
{
|
|
22
|
+
typedef typename internal::conditional<
|
|
23
|
+
Lhs::IsRowMajor,
|
|
24
|
+
SparseDenseOuterProduct<Rhs,Lhs,true>,
|
|
25
|
+
SparseDenseOuterProduct<Lhs,Rhs,false> >::type Type;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
template<typename Lhs, typename Rhs, int InnerSize> struct DenseSparseProductReturnType
|
|
29
|
+
{
|
|
30
|
+
typedef DenseTimeSparseProduct<Lhs,Rhs> Type;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
template<typename Lhs, typename Rhs> struct DenseSparseProductReturnType<Lhs,Rhs,1>
|
|
34
|
+
{
|
|
35
|
+
typedef typename internal::conditional<
|
|
36
|
+
Rhs::IsRowMajor,
|
|
37
|
+
SparseDenseOuterProduct<Rhs,Lhs,true>,
|
|
38
|
+
SparseDenseOuterProduct<Lhs,Rhs,false> >::type Type;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
namespace internal {
|
|
42
|
+
|
|
43
|
+
template<typename Lhs, typename Rhs, bool Tr>
|
|
44
|
+
struct traits<SparseDenseOuterProduct<Lhs,Rhs,Tr> >
|
|
45
|
+
{
|
|
46
|
+
typedef Sparse StorageKind;
|
|
47
|
+
typedef typename scalar_product_traits<typename traits<Lhs>::Scalar,
|
|
48
|
+
typename traits<Rhs>::Scalar>::ReturnType Scalar;
|
|
49
|
+
typedef typename Lhs::Index Index;
|
|
50
|
+
typedef typename Lhs::Nested LhsNested;
|
|
51
|
+
typedef typename Rhs::Nested RhsNested;
|
|
52
|
+
typedef typename remove_all<LhsNested>::type _LhsNested;
|
|
53
|
+
typedef typename remove_all<RhsNested>::type _RhsNested;
|
|
54
|
+
|
|
55
|
+
enum {
|
|
56
|
+
LhsCoeffReadCost = traits<_LhsNested>::CoeffReadCost,
|
|
57
|
+
RhsCoeffReadCost = traits<_RhsNested>::CoeffReadCost,
|
|
58
|
+
|
|
59
|
+
RowsAtCompileTime = Tr ? int(traits<Rhs>::RowsAtCompileTime) : int(traits<Lhs>::RowsAtCompileTime),
|
|
60
|
+
ColsAtCompileTime = Tr ? int(traits<Lhs>::ColsAtCompileTime) : int(traits<Rhs>::ColsAtCompileTime),
|
|
61
|
+
MaxRowsAtCompileTime = Tr ? int(traits<Rhs>::MaxRowsAtCompileTime) : int(traits<Lhs>::MaxRowsAtCompileTime),
|
|
62
|
+
MaxColsAtCompileTime = Tr ? int(traits<Lhs>::MaxColsAtCompileTime) : int(traits<Rhs>::MaxColsAtCompileTime),
|
|
63
|
+
|
|
64
|
+
Flags = Tr ? RowMajorBit : 0,
|
|
65
|
+
|
|
66
|
+
CoeffReadCost = LhsCoeffReadCost + RhsCoeffReadCost + NumTraits<Scalar>::MulCost
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
} // end namespace internal
|
|
71
|
+
|
|
72
|
+
template<typename Lhs, typename Rhs, bool Tr>
|
|
73
|
+
class SparseDenseOuterProduct
|
|
74
|
+
: public SparseMatrixBase<SparseDenseOuterProduct<Lhs,Rhs,Tr> >
|
|
75
|
+
{
|
|
76
|
+
public:
|
|
77
|
+
|
|
78
|
+
typedef SparseMatrixBase<SparseDenseOuterProduct> Base;
|
|
79
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(SparseDenseOuterProduct)
|
|
80
|
+
typedef internal::traits<SparseDenseOuterProduct> Traits;
|
|
81
|
+
|
|
82
|
+
private:
|
|
83
|
+
|
|
84
|
+
typedef typename Traits::LhsNested LhsNested;
|
|
85
|
+
typedef typename Traits::RhsNested RhsNested;
|
|
86
|
+
typedef typename Traits::_LhsNested _LhsNested;
|
|
87
|
+
typedef typename Traits::_RhsNested _RhsNested;
|
|
88
|
+
|
|
89
|
+
public:
|
|
90
|
+
|
|
91
|
+
class InnerIterator;
|
|
92
|
+
|
|
93
|
+
EIGEN_STRONG_INLINE SparseDenseOuterProduct(const Lhs& lhs, const Rhs& rhs)
|
|
94
|
+
: m_lhs(lhs), m_rhs(rhs)
|
|
95
|
+
{
|
|
96
|
+
EIGEN_STATIC_ASSERT(!Tr,YOU_MADE_A_PROGRAMMING_MISTAKE);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
EIGEN_STRONG_INLINE SparseDenseOuterProduct(const Rhs& rhs, const Lhs& lhs)
|
|
100
|
+
: m_lhs(lhs), m_rhs(rhs)
|
|
101
|
+
{
|
|
102
|
+
EIGEN_STATIC_ASSERT(Tr,YOU_MADE_A_PROGRAMMING_MISTAKE);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
EIGEN_STRONG_INLINE Index rows() const { return Tr ? m_rhs.rows() : m_lhs.rows(); }
|
|
106
|
+
EIGEN_STRONG_INLINE Index cols() const { return Tr ? m_lhs.cols() : m_rhs.cols(); }
|
|
107
|
+
|
|
108
|
+
EIGEN_STRONG_INLINE const _LhsNested& lhs() const { return m_lhs; }
|
|
109
|
+
EIGEN_STRONG_INLINE const _RhsNested& rhs() const { return m_rhs; }
|
|
110
|
+
|
|
111
|
+
protected:
|
|
112
|
+
LhsNested m_lhs;
|
|
113
|
+
RhsNested m_rhs;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
template<typename Lhs, typename Rhs, bool Transpose>
|
|
117
|
+
class SparseDenseOuterProduct<Lhs,Rhs,Transpose>::InnerIterator : public _LhsNested::InnerIterator
|
|
118
|
+
{
|
|
119
|
+
typedef typename _LhsNested::InnerIterator Base;
|
|
120
|
+
typedef typename SparseDenseOuterProduct::Index Index;
|
|
121
|
+
public:
|
|
122
|
+
EIGEN_STRONG_INLINE InnerIterator(const SparseDenseOuterProduct& prod, Index outer)
|
|
123
|
+
: Base(prod.lhs(), 0), m_outer(outer), m_factor(get(prod.rhs(), outer, typename internal::traits<Rhs>::StorageKind() ))
|
|
124
|
+
{ }
|
|
125
|
+
|
|
126
|
+
inline Index outer() const { return m_outer; }
|
|
127
|
+
inline Index row() const { return Transpose ? m_outer : Base::index(); }
|
|
128
|
+
inline Index col() const { return Transpose ? Base::index() : m_outer; }
|
|
129
|
+
|
|
130
|
+
inline Scalar value() const { return Base::value() * m_factor; }
|
|
131
|
+
|
|
132
|
+
protected:
|
|
133
|
+
static Scalar get(const _RhsNested &rhs, Index outer, Dense = Dense())
|
|
134
|
+
{
|
|
135
|
+
return rhs.coeff(outer);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
static Scalar get(const _RhsNested &rhs, Index outer, Sparse = Sparse())
|
|
139
|
+
{
|
|
140
|
+
typename Traits::_RhsNested::InnerIterator it(rhs, outer);
|
|
141
|
+
if (it && it.index()==0)
|
|
142
|
+
return it.value();
|
|
143
|
+
|
|
144
|
+
return Scalar(0);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
Index m_outer;
|
|
148
|
+
Scalar m_factor;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
namespace internal {
|
|
152
|
+
template<typename Lhs, typename Rhs>
|
|
153
|
+
struct traits<SparseTimeDenseProduct<Lhs,Rhs> >
|
|
154
|
+
: traits<ProductBase<SparseTimeDenseProduct<Lhs,Rhs>, Lhs, Rhs> >
|
|
155
|
+
{
|
|
156
|
+
typedef Dense StorageKind;
|
|
157
|
+
typedef MatrixXpr XprKind;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,
|
|
161
|
+
int LhsStorageOrder = ((SparseLhsType::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor,
|
|
162
|
+
bool ColPerCol = ((DenseRhsType::Flags&RowMajorBit)==0) || DenseRhsType::ColsAtCompileTime==1>
|
|
163
|
+
struct sparse_time_dense_product_impl;
|
|
164
|
+
|
|
165
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
166
|
+
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, RowMajor, true>
|
|
167
|
+
{
|
|
168
|
+
typedef typename internal::remove_all<SparseLhsType>::type Lhs;
|
|
169
|
+
typedef typename internal::remove_all<DenseRhsType>::type Rhs;
|
|
170
|
+
typedef typename internal::remove_all<DenseResType>::type Res;
|
|
171
|
+
typedef typename Lhs::Index Index;
|
|
172
|
+
typedef typename Lhs::InnerIterator LhsInnerIterator;
|
|
173
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
|
|
174
|
+
{
|
|
175
|
+
for(Index c=0; c<rhs.cols(); ++c)
|
|
176
|
+
{
|
|
177
|
+
Index n = lhs.outerSize();
|
|
178
|
+
for(Index j=0; j<n; ++j)
|
|
179
|
+
{
|
|
180
|
+
typename Res::Scalar tmp(0);
|
|
181
|
+
for(LhsInnerIterator it(lhs,j); it ;++it)
|
|
182
|
+
tmp += it.value() * rhs.coeff(it.index(),c);
|
|
183
|
+
res.coeffRef(j,c) += alpha * tmp;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
190
|
+
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, ColMajor, true>
|
|
191
|
+
{
|
|
192
|
+
typedef typename internal::remove_all<SparseLhsType>::type Lhs;
|
|
193
|
+
typedef typename internal::remove_all<DenseRhsType>::type Rhs;
|
|
194
|
+
typedef typename internal::remove_all<DenseResType>::type Res;
|
|
195
|
+
typedef typename Lhs::InnerIterator LhsInnerIterator;
|
|
196
|
+
typedef typename Lhs::Index Index;
|
|
197
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
|
|
198
|
+
{
|
|
199
|
+
for(Index c=0; c<rhs.cols(); ++c)
|
|
200
|
+
{
|
|
201
|
+
for(Index j=0; j<lhs.outerSize(); ++j)
|
|
202
|
+
{
|
|
203
|
+
typename Res::Scalar rhs_j = alpha * rhs.coeff(j,c);
|
|
204
|
+
for(LhsInnerIterator it(lhs,j); it ;++it)
|
|
205
|
+
res.coeffRef(it.index(),c) += it.value() * rhs_j;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
212
|
+
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, RowMajor, false>
|
|
213
|
+
{
|
|
214
|
+
typedef typename internal::remove_all<SparseLhsType>::type Lhs;
|
|
215
|
+
typedef typename internal::remove_all<DenseRhsType>::type Rhs;
|
|
216
|
+
typedef typename internal::remove_all<DenseResType>::type Res;
|
|
217
|
+
typedef typename Lhs::InnerIterator LhsInnerIterator;
|
|
218
|
+
typedef typename Lhs::Index Index;
|
|
219
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
|
|
220
|
+
{
|
|
221
|
+
for(Index j=0; j<lhs.outerSize(); ++j)
|
|
222
|
+
{
|
|
223
|
+
typename Res::RowXpr res_j(res.row(j));
|
|
224
|
+
for(LhsInnerIterator it(lhs,j); it ;++it)
|
|
225
|
+
res_j += (alpha*it.value()) * rhs.row(it.index());
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
231
|
+
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, ColMajor, false>
|
|
232
|
+
{
|
|
233
|
+
typedef typename internal::remove_all<SparseLhsType>::type Lhs;
|
|
234
|
+
typedef typename internal::remove_all<DenseRhsType>::type Rhs;
|
|
235
|
+
typedef typename internal::remove_all<DenseResType>::type Res;
|
|
236
|
+
typedef typename Lhs::InnerIterator LhsInnerIterator;
|
|
237
|
+
typedef typename Lhs::Index Index;
|
|
238
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const typename Res::Scalar& alpha)
|
|
239
|
+
{
|
|
240
|
+
for(Index j=0; j<lhs.outerSize(); ++j)
|
|
241
|
+
{
|
|
242
|
+
typename Rhs::ConstRowXpr rhs_j(rhs.row(j));
|
|
243
|
+
for(LhsInnerIterator it(lhs,j); it ;++it)
|
|
244
|
+
res.row(it.index()) += (alpha*it.value()) * rhs_j;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,typename AlphaType>
|
|
250
|
+
inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
|
|
251
|
+
{
|
|
252
|
+
sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType>::run(lhs, rhs, res, alpha);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
} // end namespace internal
|
|
256
|
+
|
|
257
|
+
template<typename Lhs, typename Rhs>
|
|
258
|
+
class SparseTimeDenseProduct
|
|
259
|
+
: public ProductBase<SparseTimeDenseProduct<Lhs,Rhs>, Lhs, Rhs>
|
|
260
|
+
{
|
|
261
|
+
public:
|
|
262
|
+
EIGEN_PRODUCT_PUBLIC_INTERFACE(SparseTimeDenseProduct)
|
|
263
|
+
|
|
264
|
+
SparseTimeDenseProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs)
|
|
265
|
+
{}
|
|
266
|
+
|
|
267
|
+
template<typename Dest> void scaleAndAddTo(Dest& dest, const Scalar& alpha) const
|
|
268
|
+
{
|
|
269
|
+
internal::sparse_time_dense_product(m_lhs, m_rhs, dest, alpha);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private:
|
|
273
|
+
SparseTimeDenseProduct& operator=(const SparseTimeDenseProduct&);
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
// dense = dense * sparse
|
|
278
|
+
namespace internal {
|
|
279
|
+
template<typename Lhs, typename Rhs>
|
|
280
|
+
struct traits<DenseTimeSparseProduct<Lhs,Rhs> >
|
|
281
|
+
: traits<ProductBase<DenseTimeSparseProduct<Lhs,Rhs>, Lhs, Rhs> >
|
|
282
|
+
{
|
|
283
|
+
typedef Dense StorageKind;
|
|
284
|
+
};
|
|
285
|
+
} // end namespace internal
|
|
286
|
+
|
|
287
|
+
template<typename Lhs, typename Rhs>
|
|
288
|
+
class DenseTimeSparseProduct
|
|
289
|
+
: public ProductBase<DenseTimeSparseProduct<Lhs,Rhs>, Lhs, Rhs>
|
|
290
|
+
{
|
|
291
|
+
public:
|
|
292
|
+
EIGEN_PRODUCT_PUBLIC_INTERFACE(DenseTimeSparseProduct)
|
|
293
|
+
|
|
294
|
+
DenseTimeSparseProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs)
|
|
295
|
+
{}
|
|
296
|
+
|
|
297
|
+
template<typename Dest> void scaleAndAddTo(Dest& dest, const Scalar& alpha) const
|
|
298
|
+
{
|
|
299
|
+
Transpose<const _LhsNested> lhs_t(m_lhs);
|
|
300
|
+
Transpose<const _RhsNested> rhs_t(m_rhs);
|
|
301
|
+
Transpose<Dest> dest_t(dest);
|
|
302
|
+
internal::sparse_time_dense_product(rhs_t, lhs_t, dest_t, alpha);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
private:
|
|
306
|
+
DenseTimeSparseProduct& operator=(const DenseTimeSparseProduct&);
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
} // end namespace Eigen
|
|
310
|
+
|
|
311
|
+
#endif // EIGEN_SPARSEDENSEPRODUCT_H
|