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,448 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2009 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_SPARSEVECTOR_H
|
|
11
|
+
#define EIGEN_SPARSEVECTOR_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
/** \ingroup SparseCore_Module
|
|
16
|
+
* \class SparseVector
|
|
17
|
+
*
|
|
18
|
+
* \brief a sparse vector class
|
|
19
|
+
*
|
|
20
|
+
* \tparam _Scalar the scalar type, i.e. the type of the coefficients
|
|
21
|
+
*
|
|
22
|
+
* See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.
|
|
23
|
+
*
|
|
24
|
+
* This class can be extended with the help of the plugin mechanism described on the page
|
|
25
|
+
* \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_SPARSEVECTOR_PLUGIN.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
namespace internal {
|
|
29
|
+
template<typename _Scalar, int _Options, typename _Index>
|
|
30
|
+
struct traits<SparseVector<_Scalar, _Options, _Index> >
|
|
31
|
+
{
|
|
32
|
+
typedef _Scalar Scalar;
|
|
33
|
+
typedef _Index Index;
|
|
34
|
+
typedef Sparse StorageKind;
|
|
35
|
+
typedef MatrixXpr XprKind;
|
|
36
|
+
enum {
|
|
37
|
+
IsColVector = (_Options & RowMajorBit) ? 0 : 1,
|
|
38
|
+
|
|
39
|
+
RowsAtCompileTime = IsColVector ? Dynamic : 1,
|
|
40
|
+
ColsAtCompileTime = IsColVector ? 1 : Dynamic,
|
|
41
|
+
MaxRowsAtCompileTime = RowsAtCompileTime,
|
|
42
|
+
MaxColsAtCompileTime = ColsAtCompileTime,
|
|
43
|
+
Flags = _Options | NestByRefBit | LvalueBit | (IsColVector ? 0 : RowMajorBit),
|
|
44
|
+
CoeffReadCost = NumTraits<Scalar>::ReadCost,
|
|
45
|
+
SupportedAccessPatterns = InnerRandomAccessPattern
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Sparse-Vector-Assignment kinds:
|
|
50
|
+
enum {
|
|
51
|
+
SVA_RuntimeSwitch,
|
|
52
|
+
SVA_Inner,
|
|
53
|
+
SVA_Outer
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
template< typename Dest, typename Src,
|
|
57
|
+
int AssignmentKind = !bool(Src::IsVectorAtCompileTime) ? SVA_RuntimeSwitch
|
|
58
|
+
: Src::InnerSizeAtCompileTime==1 ? SVA_Outer
|
|
59
|
+
: SVA_Inner>
|
|
60
|
+
struct sparse_vector_assign_selector;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
template<typename _Scalar, int _Options, typename _Index>
|
|
65
|
+
class SparseVector
|
|
66
|
+
: public SparseMatrixBase<SparseVector<_Scalar, _Options, _Index> >
|
|
67
|
+
{
|
|
68
|
+
typedef SparseMatrixBase<SparseVector> SparseBase;
|
|
69
|
+
|
|
70
|
+
public:
|
|
71
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
|
|
72
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
|
|
73
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
|
|
74
|
+
|
|
75
|
+
typedef internal::CompressedStorage<Scalar,Index> Storage;
|
|
76
|
+
enum { IsColVector = internal::traits<SparseVector>::IsColVector };
|
|
77
|
+
|
|
78
|
+
enum {
|
|
79
|
+
Options = _Options
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
|
|
83
|
+
EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
|
|
84
|
+
EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
|
|
85
|
+
EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
|
|
86
|
+
|
|
87
|
+
EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return &m_data.value(0); }
|
|
88
|
+
EIGEN_STRONG_INLINE Scalar* valuePtr() { return &m_data.value(0); }
|
|
89
|
+
|
|
90
|
+
EIGEN_STRONG_INLINE const Index* innerIndexPtr() const { return &m_data.index(0); }
|
|
91
|
+
EIGEN_STRONG_INLINE Index* innerIndexPtr() { return &m_data.index(0); }
|
|
92
|
+
|
|
93
|
+
/** \internal */
|
|
94
|
+
inline Storage& data() { return m_data; }
|
|
95
|
+
/** \internal */
|
|
96
|
+
inline const Storage& data() const { return m_data; }
|
|
97
|
+
|
|
98
|
+
inline Scalar coeff(Index row, Index col) const
|
|
99
|
+
{
|
|
100
|
+
eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
|
|
101
|
+
return coeff(IsColVector ? row : col);
|
|
102
|
+
}
|
|
103
|
+
inline Scalar coeff(Index i) const
|
|
104
|
+
{
|
|
105
|
+
eigen_assert(i>=0 && i<m_size);
|
|
106
|
+
return m_data.at(i);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
inline Scalar& coeffRef(Index row, Index col)
|
|
110
|
+
{
|
|
111
|
+
eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
|
|
112
|
+
return coeff(IsColVector ? row : col);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** \returns a reference to the coefficient value at given index \a i
|
|
116
|
+
* This operation involes a log(rho*size) binary search. If the coefficient does not
|
|
117
|
+
* exist yet, then a sorted insertion into a sequential buffer is performed.
|
|
118
|
+
*
|
|
119
|
+
* This insertion might be very costly if the number of nonzeros above \a i is large.
|
|
120
|
+
*/
|
|
121
|
+
inline Scalar& coeffRef(Index i)
|
|
122
|
+
{
|
|
123
|
+
eigen_assert(i>=0 && i<m_size);
|
|
124
|
+
return m_data.atWithInsertion(i);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public:
|
|
128
|
+
|
|
129
|
+
class InnerIterator;
|
|
130
|
+
class ReverseInnerIterator;
|
|
131
|
+
|
|
132
|
+
inline void setZero() { m_data.clear(); }
|
|
133
|
+
|
|
134
|
+
/** \returns the number of non zero coefficients */
|
|
135
|
+
inline Index nonZeros() const { return static_cast<Index>(m_data.size()); }
|
|
136
|
+
|
|
137
|
+
inline void startVec(Index outer)
|
|
138
|
+
{
|
|
139
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
140
|
+
eigen_assert(outer==0);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
inline Scalar& insertBackByOuterInner(Index outer, Index inner)
|
|
144
|
+
{
|
|
145
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
146
|
+
eigen_assert(outer==0);
|
|
147
|
+
return insertBack(inner);
|
|
148
|
+
}
|
|
149
|
+
inline Scalar& insertBack(Index i)
|
|
150
|
+
{
|
|
151
|
+
m_data.append(0, i);
|
|
152
|
+
return m_data.value(m_data.size()-1);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
inline Scalar& insert(Index row, Index col)
|
|
156
|
+
{
|
|
157
|
+
eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
|
|
158
|
+
|
|
159
|
+
Index inner = IsColVector ? row : col;
|
|
160
|
+
Index outer = IsColVector ? col : row;
|
|
161
|
+
EIGEN_ONLY_USED_FOR_DEBUG(outer);
|
|
162
|
+
eigen_assert(outer==0);
|
|
163
|
+
return insert(inner);
|
|
164
|
+
}
|
|
165
|
+
Scalar& insert(Index i)
|
|
166
|
+
{
|
|
167
|
+
eigen_assert(i>=0 && i<m_size);
|
|
168
|
+
|
|
169
|
+
Index startId = 0;
|
|
170
|
+
Index p = Index(m_data.size()) - 1;
|
|
171
|
+
// TODO smart realloc
|
|
172
|
+
m_data.resize(p+2,1);
|
|
173
|
+
|
|
174
|
+
while ( (p >= startId) && (m_data.index(p) > i) )
|
|
175
|
+
{
|
|
176
|
+
m_data.index(p+1) = m_data.index(p);
|
|
177
|
+
m_data.value(p+1) = m_data.value(p);
|
|
178
|
+
--p;
|
|
179
|
+
}
|
|
180
|
+
m_data.index(p+1) = i;
|
|
181
|
+
m_data.value(p+1) = 0;
|
|
182
|
+
return m_data.value(p+1);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
*/
|
|
187
|
+
inline void reserve(Index reserveSize) { m_data.reserve(reserveSize); }
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
inline void finalize() {}
|
|
191
|
+
|
|
192
|
+
void prune(const Scalar& reference, const RealScalar& epsilon = NumTraits<RealScalar>::dummy_precision())
|
|
193
|
+
{
|
|
194
|
+
m_data.prune(reference,epsilon);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
void resize(Index rows, Index cols)
|
|
198
|
+
{
|
|
199
|
+
eigen_assert(rows==1 || cols==1);
|
|
200
|
+
resize(IsColVector ? rows : cols);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
void resize(Index newSize)
|
|
204
|
+
{
|
|
205
|
+
m_size = newSize;
|
|
206
|
+
m_data.clear();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
void resizeNonZeros(Index size) { m_data.resize(size); }
|
|
210
|
+
|
|
211
|
+
inline SparseVector() : m_size(0) { check_template_parameters(); resize(0); }
|
|
212
|
+
|
|
213
|
+
inline SparseVector(Index size) : m_size(0) { check_template_parameters(); resize(size); }
|
|
214
|
+
|
|
215
|
+
inline SparseVector(Index rows, Index cols) : m_size(0) { check_template_parameters(); resize(rows,cols); }
|
|
216
|
+
|
|
217
|
+
template<typename OtherDerived>
|
|
218
|
+
inline SparseVector(const SparseMatrixBase<OtherDerived>& other)
|
|
219
|
+
: m_size(0)
|
|
220
|
+
{
|
|
221
|
+
check_template_parameters();
|
|
222
|
+
*this = other.derived();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
inline SparseVector(const SparseVector& other)
|
|
226
|
+
: SparseBase(other), m_size(0)
|
|
227
|
+
{
|
|
228
|
+
check_template_parameters();
|
|
229
|
+
*this = other.derived();
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** Swaps the values of \c *this and \a other.
|
|
233
|
+
* Overloaded for performance: this version performs a \em shallow swap by swaping pointers and attributes only.
|
|
234
|
+
* \sa SparseMatrixBase::swap()
|
|
235
|
+
*/
|
|
236
|
+
inline void swap(SparseVector& other)
|
|
237
|
+
{
|
|
238
|
+
std::swap(m_size, other.m_size);
|
|
239
|
+
m_data.swap(other.m_data);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
inline SparseVector& operator=(const SparseVector& other)
|
|
243
|
+
{
|
|
244
|
+
if (other.isRValue())
|
|
245
|
+
{
|
|
246
|
+
swap(other.const_cast_derived());
|
|
247
|
+
}
|
|
248
|
+
else
|
|
249
|
+
{
|
|
250
|
+
resize(other.size());
|
|
251
|
+
m_data = other.m_data;
|
|
252
|
+
}
|
|
253
|
+
return *this;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
template<typename OtherDerived>
|
|
257
|
+
inline SparseVector& operator=(const SparseMatrixBase<OtherDerived>& other)
|
|
258
|
+
{
|
|
259
|
+
SparseVector tmp(other.size());
|
|
260
|
+
internal::sparse_vector_assign_selector<SparseVector,OtherDerived>::run(tmp,other.derived());
|
|
261
|
+
this->swap(tmp);
|
|
262
|
+
return *this;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
266
|
+
template<typename Lhs, typename Rhs>
|
|
267
|
+
inline SparseVector& operator=(const SparseSparseProduct<Lhs,Rhs>& product)
|
|
268
|
+
{
|
|
269
|
+
return Base::operator=(product);
|
|
270
|
+
}
|
|
271
|
+
#endif
|
|
272
|
+
|
|
273
|
+
friend std::ostream & operator << (std::ostream & s, const SparseVector& m)
|
|
274
|
+
{
|
|
275
|
+
for (Index i=0; i<m.nonZeros(); ++i)
|
|
276
|
+
s << "(" << m.m_data.value(i) << "," << m.m_data.index(i) << ") ";
|
|
277
|
+
s << std::endl;
|
|
278
|
+
return s;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/** Destructor */
|
|
282
|
+
inline ~SparseVector() {}
|
|
283
|
+
|
|
284
|
+
/** Overloaded for performance */
|
|
285
|
+
Scalar sum() const;
|
|
286
|
+
|
|
287
|
+
public:
|
|
288
|
+
|
|
289
|
+
/** \internal \deprecated use setZero() and reserve() */
|
|
290
|
+
EIGEN_DEPRECATED void startFill(Index reserve)
|
|
291
|
+
{
|
|
292
|
+
setZero();
|
|
293
|
+
m_data.reserve(reserve);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/** \internal \deprecated use insertBack(Index,Index) */
|
|
297
|
+
EIGEN_DEPRECATED Scalar& fill(Index r, Index c)
|
|
298
|
+
{
|
|
299
|
+
eigen_assert(r==0 || c==0);
|
|
300
|
+
return fill(IsColVector ? r : c);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** \internal \deprecated use insertBack(Index) */
|
|
304
|
+
EIGEN_DEPRECATED Scalar& fill(Index i)
|
|
305
|
+
{
|
|
306
|
+
m_data.append(0, i);
|
|
307
|
+
return m_data.value(m_data.size()-1);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** \internal \deprecated use insert(Index,Index) */
|
|
311
|
+
EIGEN_DEPRECATED Scalar& fillrand(Index r, Index c)
|
|
312
|
+
{
|
|
313
|
+
eigen_assert(r==0 || c==0);
|
|
314
|
+
return fillrand(IsColVector ? r : c);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/** \internal \deprecated use insert(Index) */
|
|
318
|
+
EIGEN_DEPRECATED Scalar& fillrand(Index i)
|
|
319
|
+
{
|
|
320
|
+
return insert(i);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** \internal \deprecated use finalize() */
|
|
324
|
+
EIGEN_DEPRECATED void endFill() {}
|
|
325
|
+
|
|
326
|
+
// These two functions were here in the 3.1 release, so let's keep them in case some code rely on them.
|
|
327
|
+
/** \internal \deprecated use data() */
|
|
328
|
+
EIGEN_DEPRECATED Storage& _data() { return m_data; }
|
|
329
|
+
/** \internal \deprecated use data() */
|
|
330
|
+
EIGEN_DEPRECATED const Storage& _data() const { return m_data; }
|
|
331
|
+
|
|
332
|
+
# ifdef EIGEN_SPARSEVECTOR_PLUGIN
|
|
333
|
+
# include EIGEN_SPARSEVECTOR_PLUGIN
|
|
334
|
+
# endif
|
|
335
|
+
|
|
336
|
+
protected:
|
|
337
|
+
|
|
338
|
+
static void check_template_parameters()
|
|
339
|
+
{
|
|
340
|
+
EIGEN_STATIC_ASSERT(NumTraits<Index>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
|
|
341
|
+
EIGEN_STATIC_ASSERT((_Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
Storage m_data;
|
|
345
|
+
Index m_size;
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
template<typename Scalar, int _Options, typename _Index>
|
|
349
|
+
class SparseVector<Scalar,_Options,_Index>::InnerIterator
|
|
350
|
+
{
|
|
351
|
+
public:
|
|
352
|
+
InnerIterator(const SparseVector& vec, Index outer=0)
|
|
353
|
+
: m_data(vec.m_data), m_id(0), m_end(static_cast<Index>(m_data.size()))
|
|
354
|
+
{
|
|
355
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
356
|
+
eigen_assert(outer==0);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
InnerIterator(const internal::CompressedStorage<Scalar,Index>& data)
|
|
360
|
+
: m_data(data), m_id(0), m_end(static_cast<Index>(m_data.size()))
|
|
361
|
+
{}
|
|
362
|
+
|
|
363
|
+
inline InnerIterator& operator++() { m_id++; return *this; }
|
|
364
|
+
|
|
365
|
+
inline Scalar value() const { return m_data.value(m_id); }
|
|
366
|
+
inline Scalar& valueRef() { return const_cast<Scalar&>(m_data.value(m_id)); }
|
|
367
|
+
|
|
368
|
+
inline Index index() const { return m_data.index(m_id); }
|
|
369
|
+
inline Index row() const { return IsColVector ? index() : 0; }
|
|
370
|
+
inline Index col() const { return IsColVector ? 0 : index(); }
|
|
371
|
+
|
|
372
|
+
inline operator bool() const { return (m_id < m_end); }
|
|
373
|
+
|
|
374
|
+
protected:
|
|
375
|
+
const internal::CompressedStorage<Scalar,Index>& m_data;
|
|
376
|
+
Index m_id;
|
|
377
|
+
const Index m_end;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
template<typename Scalar, int _Options, typename _Index>
|
|
381
|
+
class SparseVector<Scalar,_Options,_Index>::ReverseInnerIterator
|
|
382
|
+
{
|
|
383
|
+
public:
|
|
384
|
+
ReverseInnerIterator(const SparseVector& vec, Index outer=0)
|
|
385
|
+
: m_data(vec.m_data), m_id(static_cast<Index>(m_data.size())), m_start(0)
|
|
386
|
+
{
|
|
387
|
+
EIGEN_UNUSED_VARIABLE(outer);
|
|
388
|
+
eigen_assert(outer==0);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
ReverseInnerIterator(const internal::CompressedStorage<Scalar,Index>& data)
|
|
392
|
+
: m_data(data), m_id(static_cast<Index>(m_data.size())), m_start(0)
|
|
393
|
+
{}
|
|
394
|
+
|
|
395
|
+
inline ReverseInnerIterator& operator--() { m_id--; return *this; }
|
|
396
|
+
|
|
397
|
+
inline Scalar value() const { return m_data.value(m_id-1); }
|
|
398
|
+
inline Scalar& valueRef() { return const_cast<Scalar&>(m_data.value(m_id-1)); }
|
|
399
|
+
|
|
400
|
+
inline Index index() const { return m_data.index(m_id-1); }
|
|
401
|
+
inline Index row() const { return IsColVector ? index() : 0; }
|
|
402
|
+
inline Index col() const { return IsColVector ? 0 : index(); }
|
|
403
|
+
|
|
404
|
+
inline operator bool() const { return (m_id > m_start); }
|
|
405
|
+
|
|
406
|
+
protected:
|
|
407
|
+
const internal::CompressedStorage<Scalar,Index>& m_data;
|
|
408
|
+
Index m_id;
|
|
409
|
+
const Index m_start;
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
namespace internal {
|
|
413
|
+
|
|
414
|
+
template< typename Dest, typename Src>
|
|
415
|
+
struct sparse_vector_assign_selector<Dest,Src,SVA_Inner> {
|
|
416
|
+
static void run(Dest& dst, const Src& src) {
|
|
417
|
+
eigen_internal_assert(src.innerSize()==src.size());
|
|
418
|
+
for(typename Src::InnerIterator it(src, 0); it; ++it)
|
|
419
|
+
dst.insert(it.index()) = it.value();
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
template< typename Dest, typename Src>
|
|
424
|
+
struct sparse_vector_assign_selector<Dest,Src,SVA_Outer> {
|
|
425
|
+
static void run(Dest& dst, const Src& src) {
|
|
426
|
+
eigen_internal_assert(src.outerSize()==src.size());
|
|
427
|
+
for(typename Dest::Index i=0; i<src.size(); ++i)
|
|
428
|
+
{
|
|
429
|
+
typename Src::InnerIterator it(src, i);
|
|
430
|
+
if(it)
|
|
431
|
+
dst.insert(i) = it.value();
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
template< typename Dest, typename Src>
|
|
437
|
+
struct sparse_vector_assign_selector<Dest,Src,SVA_RuntimeSwitch> {
|
|
438
|
+
static void run(Dest& dst, const Src& src) {
|
|
439
|
+
if(src.outerSize()==1) sparse_vector_assign_selector<Dest,Src,SVA_Inner>::run(dst, src);
|
|
440
|
+
else sparse_vector_assign_selector<Dest,Src,SVA_Outer>::run(dst, src);
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
} // end namespace Eigen
|
|
447
|
+
|
|
448
|
+
#endif // EIGEN_SPARSEVECTOR_H
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2011 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
// Copyright (C) 2010 Daniel Lowengrub <lowdanie@gmail.com>
|
|
6
|
+
//
|
|
7
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
8
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
9
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
10
|
+
|
|
11
|
+
#ifndef EIGEN_SPARSEVIEW_H
|
|
12
|
+
#define EIGEN_SPARSEVIEW_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
namespace internal {
|
|
17
|
+
|
|
18
|
+
template<typename MatrixType>
|
|
19
|
+
struct traits<SparseView<MatrixType> > : traits<MatrixType>
|
|
20
|
+
{
|
|
21
|
+
typedef typename MatrixType::Index Index;
|
|
22
|
+
typedef Sparse StorageKind;
|
|
23
|
+
enum {
|
|
24
|
+
Flags = int(traits<MatrixType>::Flags) & (RowMajorBit)
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
} // end namespace internal
|
|
29
|
+
|
|
30
|
+
template<typename MatrixType>
|
|
31
|
+
class SparseView : public SparseMatrixBase<SparseView<MatrixType> >
|
|
32
|
+
{
|
|
33
|
+
typedef typename MatrixType::Nested MatrixTypeNested;
|
|
34
|
+
typedef typename internal::remove_all<MatrixTypeNested>::type _MatrixTypeNested;
|
|
35
|
+
public:
|
|
36
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(SparseView)
|
|
37
|
+
|
|
38
|
+
SparseView(const MatrixType& mat, const Scalar& m_reference = Scalar(0),
|
|
39
|
+
typename NumTraits<Scalar>::Real m_epsilon = NumTraits<Scalar>::dummy_precision()) :
|
|
40
|
+
m_matrix(mat), m_reference(m_reference), m_epsilon(m_epsilon) {}
|
|
41
|
+
|
|
42
|
+
class InnerIterator;
|
|
43
|
+
|
|
44
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
45
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
46
|
+
|
|
47
|
+
inline Index innerSize() const { return m_matrix.innerSize(); }
|
|
48
|
+
inline Index outerSize() const { return m_matrix.outerSize(); }
|
|
49
|
+
|
|
50
|
+
protected:
|
|
51
|
+
MatrixTypeNested m_matrix;
|
|
52
|
+
Scalar m_reference;
|
|
53
|
+
typename NumTraits<Scalar>::Real m_epsilon;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
template<typename MatrixType>
|
|
57
|
+
class SparseView<MatrixType>::InnerIterator : public _MatrixTypeNested::InnerIterator
|
|
58
|
+
{
|
|
59
|
+
typedef typename SparseView::Index Index;
|
|
60
|
+
public:
|
|
61
|
+
typedef typename _MatrixTypeNested::InnerIterator IterBase;
|
|
62
|
+
InnerIterator(const SparseView& view, Index outer) :
|
|
63
|
+
IterBase(view.m_matrix, outer), m_view(view)
|
|
64
|
+
{
|
|
65
|
+
incrementToNonZero();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
|
69
|
+
{
|
|
70
|
+
IterBase::operator++();
|
|
71
|
+
incrementToNonZero();
|
|
72
|
+
return *this;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
using IterBase::value;
|
|
76
|
+
|
|
77
|
+
protected:
|
|
78
|
+
const SparseView& m_view;
|
|
79
|
+
|
|
80
|
+
private:
|
|
81
|
+
void incrementToNonZero()
|
|
82
|
+
{
|
|
83
|
+
while((bool(*this)) && internal::isMuchSmallerThan(value(), m_view.m_reference, m_view.m_epsilon))
|
|
84
|
+
{
|
|
85
|
+
IterBase::operator++();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
template<typename Derived>
|
|
91
|
+
const SparseView<Derived> MatrixBase<Derived>::sparseView(const Scalar& m_reference,
|
|
92
|
+
const typename NumTraits<Scalar>::Real& m_epsilon) const
|
|
93
|
+
{
|
|
94
|
+
return SparseView<Derived>(derived(), m_reference, m_epsilon);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
} // end namespace Eigen
|
|
98
|
+
|
|
99
|
+
#endif
|