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,150 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2011 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_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
11
|
+
#define EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
// perform a pseudo in-place sparse * sparse product assuming all matrices are col major
|
|
19
|
+
template<typename Lhs, typename Rhs, typename ResultType>
|
|
20
|
+
static void sparse_sparse_product_with_pruning_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res, const typename ResultType::RealScalar& tolerance)
|
|
21
|
+
{
|
|
22
|
+
// return sparse_sparse_product_with_pruning_impl2(lhs,rhs,res);
|
|
23
|
+
|
|
24
|
+
typedef typename remove_all<Lhs>::type::Scalar Scalar;
|
|
25
|
+
typedef typename remove_all<Lhs>::type::Index Index;
|
|
26
|
+
|
|
27
|
+
// make sure to call innerSize/outerSize since we fake the storage order.
|
|
28
|
+
Index rows = lhs.innerSize();
|
|
29
|
+
Index cols = rhs.outerSize();
|
|
30
|
+
//Index size = lhs.outerSize();
|
|
31
|
+
eigen_assert(lhs.outerSize() == rhs.innerSize());
|
|
32
|
+
|
|
33
|
+
// allocate a temporary buffer
|
|
34
|
+
AmbiVector<Scalar,Index> tempVector(rows);
|
|
35
|
+
|
|
36
|
+
// estimate the number of non zero entries
|
|
37
|
+
// given a rhs column containing Y non zeros, we assume that the respective Y columns
|
|
38
|
+
// of the lhs differs in average of one non zeros, thus the number of non zeros for
|
|
39
|
+
// the product of a rhs column with the lhs is X+Y where X is the average number of non zero
|
|
40
|
+
// per column of the lhs.
|
|
41
|
+
// Therefore, we have nnz(lhs*rhs) = nnz(lhs) + nnz(rhs)
|
|
42
|
+
Index estimated_nnz_prod = lhs.nonZeros() + rhs.nonZeros();
|
|
43
|
+
|
|
44
|
+
// mimics a resizeByInnerOuter:
|
|
45
|
+
if(ResultType::IsRowMajor)
|
|
46
|
+
res.resize(cols, rows);
|
|
47
|
+
else
|
|
48
|
+
res.resize(rows, cols);
|
|
49
|
+
|
|
50
|
+
res.reserve(estimated_nnz_prod);
|
|
51
|
+
double ratioColRes = double(estimated_nnz_prod)/double(lhs.rows()*rhs.cols());
|
|
52
|
+
for (Index j=0; j<cols; ++j)
|
|
53
|
+
{
|
|
54
|
+
// FIXME:
|
|
55
|
+
//double ratioColRes = (double(rhs.innerVector(j).nonZeros()) + double(lhs.nonZeros())/double(lhs.cols()))/double(lhs.rows());
|
|
56
|
+
// let's do a more accurate determination of the nnz ratio for the current column j of res
|
|
57
|
+
tempVector.init(ratioColRes);
|
|
58
|
+
tempVector.setZero();
|
|
59
|
+
for (typename Rhs::InnerIterator rhsIt(rhs, j); rhsIt; ++rhsIt)
|
|
60
|
+
{
|
|
61
|
+
// FIXME should be written like this: tmp += rhsIt.value() * lhs.col(rhsIt.index())
|
|
62
|
+
tempVector.restart();
|
|
63
|
+
Scalar x = rhsIt.value();
|
|
64
|
+
for (typename Lhs::InnerIterator lhsIt(lhs, rhsIt.index()); lhsIt; ++lhsIt)
|
|
65
|
+
{
|
|
66
|
+
tempVector.coeffRef(lhsIt.index()) += lhsIt.value() * x;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
res.startVec(j);
|
|
70
|
+
for (typename AmbiVector<Scalar,Index>::Iterator it(tempVector,tolerance); it; ++it)
|
|
71
|
+
res.insertBackByOuterInner(j,it.index()) = it.value();
|
|
72
|
+
}
|
|
73
|
+
res.finalize();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template<typename Lhs, typename Rhs, typename ResultType,
|
|
77
|
+
int LhsStorageOrder = traits<Lhs>::Flags&RowMajorBit,
|
|
78
|
+
int RhsStorageOrder = traits<Rhs>::Flags&RowMajorBit,
|
|
79
|
+
int ResStorageOrder = traits<ResultType>::Flags&RowMajorBit>
|
|
80
|
+
struct sparse_sparse_product_with_pruning_selector;
|
|
81
|
+
|
|
82
|
+
template<typename Lhs, typename Rhs, typename ResultType>
|
|
83
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,ColMajor>
|
|
84
|
+
{
|
|
85
|
+
typedef typename traits<typename remove_all<Lhs>::type>::Scalar Scalar;
|
|
86
|
+
typedef typename ResultType::RealScalar RealScalar;
|
|
87
|
+
|
|
88
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
89
|
+
{
|
|
90
|
+
typename remove_all<ResultType>::type _res(res.rows(), res.cols());
|
|
91
|
+
internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,ResultType>(lhs, rhs, _res, tolerance);
|
|
92
|
+
res.swap(_res);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
template<typename Lhs, typename Rhs, typename ResultType>
|
|
97
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,RowMajor>
|
|
98
|
+
{
|
|
99
|
+
typedef typename ResultType::RealScalar RealScalar;
|
|
100
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
101
|
+
{
|
|
102
|
+
// we need a col-major matrix to hold the result
|
|
103
|
+
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::Index> SparseTemporaryType;
|
|
104
|
+
SparseTemporaryType _res(res.rows(), res.cols());
|
|
105
|
+
internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,SparseTemporaryType>(lhs, rhs, _res, tolerance);
|
|
106
|
+
res = _res;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
template<typename Lhs, typename Rhs, typename ResultType>
|
|
111
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,RowMajor>
|
|
112
|
+
{
|
|
113
|
+
typedef typename ResultType::RealScalar RealScalar;
|
|
114
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
115
|
+
{
|
|
116
|
+
// let's transpose the product to get a column x column product
|
|
117
|
+
typename remove_all<ResultType>::type _res(res.rows(), res.cols());
|
|
118
|
+
internal::sparse_sparse_product_with_pruning_impl<Rhs,Lhs,ResultType>(rhs, lhs, _res, tolerance);
|
|
119
|
+
res.swap(_res);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
template<typename Lhs, typename Rhs, typename ResultType>
|
|
124
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,ColMajor>
|
|
125
|
+
{
|
|
126
|
+
typedef typename ResultType::RealScalar RealScalar;
|
|
127
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
128
|
+
{
|
|
129
|
+
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename Lhs::Index> ColMajorMatrixLhs;
|
|
130
|
+
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename Lhs::Index> ColMajorMatrixRhs;
|
|
131
|
+
ColMajorMatrixLhs colLhs(lhs);
|
|
132
|
+
ColMajorMatrixRhs colRhs(rhs);
|
|
133
|
+
internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs,ColMajorMatrixRhs,ResultType>(colLhs, colRhs, res, tolerance);
|
|
134
|
+
|
|
135
|
+
// let's transpose the product to get a column x column product
|
|
136
|
+
// typedef SparseMatrix<typename ResultType::Scalar> SparseTemporaryType;
|
|
137
|
+
// SparseTemporaryType _res(res.cols(), res.rows());
|
|
138
|
+
// sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs, _res);
|
|
139
|
+
// res = _res.transpose();
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// NOTE the 2 others cases (col row *) must never occur since they are caught
|
|
144
|
+
// by ProductReturnType which transforms it to (col col *) by evaluating rhs.
|
|
145
|
+
|
|
146
|
+
} // end namespace internal
|
|
147
|
+
|
|
148
|
+
} // end namespace Eigen
|
|
149
|
+
|
|
150
|
+
#endif // EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
@@ -0,0 +1,63 @@
|
|
|
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_SPARSETRANSPOSE_H
|
|
11
|
+
#define EIGEN_SPARSETRANSPOSE_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>
|
|
16
|
+
: public SparseMatrixBase<Transpose<MatrixType> >
|
|
17
|
+
{
|
|
18
|
+
typedef typename internal::remove_all<typename MatrixType::Nested>::type _MatrixTypeNested;
|
|
19
|
+
public:
|
|
20
|
+
|
|
21
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(Transpose<MatrixType> )
|
|
22
|
+
|
|
23
|
+
class InnerIterator;
|
|
24
|
+
class ReverseInnerIterator;
|
|
25
|
+
|
|
26
|
+
inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// NOTE: VC10 and VC11 trigger an ICE if don't put typename TransposeImpl<MatrixType,Sparse>:: in front of Index,
|
|
30
|
+
// a typedef typename TransposeImpl<MatrixType,Sparse>::Index Index;
|
|
31
|
+
// does not fix the issue.
|
|
32
|
+
// An alternative is to define the nested class in the parent class itself.
|
|
33
|
+
template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::InnerIterator
|
|
34
|
+
: public _MatrixTypeNested::InnerIterator
|
|
35
|
+
{
|
|
36
|
+
typedef typename _MatrixTypeNested::InnerIterator Base;
|
|
37
|
+
typedef typename TransposeImpl::Index Index;
|
|
38
|
+
public:
|
|
39
|
+
|
|
40
|
+
EIGEN_STRONG_INLINE InnerIterator(const TransposeImpl& trans, typename TransposeImpl<MatrixType,Sparse>::Index outer)
|
|
41
|
+
: Base(trans.derived().nestedExpression(), outer)
|
|
42
|
+
{}
|
|
43
|
+
typename TransposeImpl<MatrixType,Sparse>::Index row() const { return Base::col(); }
|
|
44
|
+
typename TransposeImpl<MatrixType,Sparse>::Index col() const { return Base::row(); }
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::ReverseInnerIterator
|
|
48
|
+
: public _MatrixTypeNested::ReverseInnerIterator
|
|
49
|
+
{
|
|
50
|
+
typedef typename _MatrixTypeNested::ReverseInnerIterator Base;
|
|
51
|
+
typedef typename TransposeImpl::Index Index;
|
|
52
|
+
public:
|
|
53
|
+
|
|
54
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator(const TransposeImpl& xpr, typename TransposeImpl<MatrixType,Sparse>::Index outer)
|
|
55
|
+
: Base(xpr.derived().nestedExpression(), outer)
|
|
56
|
+
{}
|
|
57
|
+
typename TransposeImpl<MatrixType,Sparse>::Index row() const { return Base::col(); }
|
|
58
|
+
typename TransposeImpl<MatrixType,Sparse>::Index col() const { return Base::row(); }
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
} // end namespace Eigen
|
|
62
|
+
|
|
63
|
+
#endif // EIGEN_SPARSETRANSPOSE_H
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
// Copyright (C) 2012 Désiré Nuentsa-Wakam <desire.nuentsa_wakam@inria.fr>
|
|
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_SPARSE_TRIANGULARVIEW_H
|
|
12
|
+
#define EIGEN_SPARSE_TRIANGULARVIEW_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
namespace internal {
|
|
17
|
+
|
|
18
|
+
template<typename MatrixType, int Mode>
|
|
19
|
+
struct traits<SparseTriangularView<MatrixType,Mode> >
|
|
20
|
+
: public traits<MatrixType>
|
|
21
|
+
{};
|
|
22
|
+
|
|
23
|
+
} // namespace internal
|
|
24
|
+
|
|
25
|
+
template<typename MatrixType, int Mode> class SparseTriangularView
|
|
26
|
+
: public SparseMatrixBase<SparseTriangularView<MatrixType,Mode> >
|
|
27
|
+
{
|
|
28
|
+
enum { SkipFirst = ((Mode&Lower) && !(MatrixType::Flags&RowMajorBit))
|
|
29
|
+
|| ((Mode&Upper) && (MatrixType::Flags&RowMajorBit)),
|
|
30
|
+
SkipLast = !SkipFirst,
|
|
31
|
+
SkipDiag = (Mode&ZeroDiag) ? 1 : 0,
|
|
32
|
+
HasUnitDiag = (Mode&UnitDiag) ? 1 : 0
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
public:
|
|
36
|
+
|
|
37
|
+
EIGEN_SPARSE_PUBLIC_INTERFACE(SparseTriangularView)
|
|
38
|
+
|
|
39
|
+
class InnerIterator;
|
|
40
|
+
class ReverseInnerIterator;
|
|
41
|
+
|
|
42
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
43
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
44
|
+
|
|
45
|
+
typedef typename MatrixType::Nested MatrixTypeNested;
|
|
46
|
+
typedef typename internal::remove_reference<MatrixTypeNested>::type MatrixTypeNestedNonRef;
|
|
47
|
+
typedef typename internal::remove_all<MatrixTypeNested>::type MatrixTypeNestedCleaned;
|
|
48
|
+
|
|
49
|
+
inline SparseTriangularView(const MatrixType& matrix) : m_matrix(matrix) {}
|
|
50
|
+
|
|
51
|
+
/** \internal */
|
|
52
|
+
inline const MatrixTypeNestedCleaned& nestedExpression() const { return m_matrix; }
|
|
53
|
+
|
|
54
|
+
template<typename OtherDerived>
|
|
55
|
+
typename internal::plain_matrix_type_column_major<OtherDerived>::type
|
|
56
|
+
solve(const MatrixBase<OtherDerived>& other) const;
|
|
57
|
+
|
|
58
|
+
template<typename OtherDerived> void solveInPlace(MatrixBase<OtherDerived>& other) const;
|
|
59
|
+
template<typename OtherDerived> void solveInPlace(SparseMatrixBase<OtherDerived>& other) const;
|
|
60
|
+
|
|
61
|
+
protected:
|
|
62
|
+
MatrixTypeNested m_matrix;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
template<typename MatrixType, int Mode>
|
|
66
|
+
class SparseTriangularView<MatrixType,Mode>::InnerIterator : public MatrixTypeNestedCleaned::InnerIterator
|
|
67
|
+
{
|
|
68
|
+
typedef typename MatrixTypeNestedCleaned::InnerIterator Base;
|
|
69
|
+
typedef typename SparseTriangularView::Index Index;
|
|
70
|
+
public:
|
|
71
|
+
|
|
72
|
+
EIGEN_STRONG_INLINE InnerIterator(const SparseTriangularView& view, Index outer)
|
|
73
|
+
: Base(view.nestedExpression(), outer), m_returnOne(false)
|
|
74
|
+
{
|
|
75
|
+
if(SkipFirst)
|
|
76
|
+
{
|
|
77
|
+
while((*this) && ((HasUnitDiag||SkipDiag) ? this->index()<=outer : this->index()<outer))
|
|
78
|
+
Base::operator++();
|
|
79
|
+
if(HasUnitDiag)
|
|
80
|
+
m_returnOne = true;
|
|
81
|
+
}
|
|
82
|
+
else if(HasUnitDiag && ((!Base::operator bool()) || Base::index()>=Base::outer()))
|
|
83
|
+
{
|
|
84
|
+
if((!SkipFirst) && Base::operator bool())
|
|
85
|
+
Base::operator++();
|
|
86
|
+
m_returnOne = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
EIGEN_STRONG_INLINE InnerIterator& operator++()
|
|
91
|
+
{
|
|
92
|
+
if(HasUnitDiag && m_returnOne)
|
|
93
|
+
m_returnOne = false;
|
|
94
|
+
else
|
|
95
|
+
{
|
|
96
|
+
Base::operator++();
|
|
97
|
+
if(HasUnitDiag && (!SkipFirst) && ((!Base::operator bool()) || Base::index()>=Base::outer()))
|
|
98
|
+
{
|
|
99
|
+
if((!SkipFirst) && Base::operator bool())
|
|
100
|
+
Base::operator++();
|
|
101
|
+
m_returnOne = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return *this;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
inline Index row() const { return (MatrixType::Flags&RowMajorBit ? Base::outer() : this->index()); }
|
|
108
|
+
inline Index col() const { return (MatrixType::Flags&RowMajorBit ? this->index() : Base::outer()); }
|
|
109
|
+
inline Index index() const
|
|
110
|
+
{
|
|
111
|
+
if(HasUnitDiag && m_returnOne) return Base::outer();
|
|
112
|
+
else return Base::index();
|
|
113
|
+
}
|
|
114
|
+
inline Scalar value() const
|
|
115
|
+
{
|
|
116
|
+
if(HasUnitDiag && m_returnOne) return Scalar(1);
|
|
117
|
+
else return Base::value();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
EIGEN_STRONG_INLINE operator bool() const
|
|
121
|
+
{
|
|
122
|
+
if(HasUnitDiag && m_returnOne)
|
|
123
|
+
return true;
|
|
124
|
+
if(SkipFirst) return Base::operator bool();
|
|
125
|
+
else
|
|
126
|
+
{
|
|
127
|
+
if (SkipDiag) return (Base::operator bool() && this->index() < this->outer());
|
|
128
|
+
else return (Base::operator bool() && this->index() <= this->outer());
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
protected:
|
|
132
|
+
bool m_returnOne;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
template<typename MatrixType, int Mode>
|
|
136
|
+
class SparseTriangularView<MatrixType,Mode>::ReverseInnerIterator : public MatrixTypeNestedCleaned::ReverseInnerIterator
|
|
137
|
+
{
|
|
138
|
+
typedef typename MatrixTypeNestedCleaned::ReverseInnerIterator Base;
|
|
139
|
+
typedef typename SparseTriangularView::Index Index;
|
|
140
|
+
public:
|
|
141
|
+
|
|
142
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator(const SparseTriangularView& view, Index outer)
|
|
143
|
+
: Base(view.nestedExpression(), outer)
|
|
144
|
+
{
|
|
145
|
+
eigen_assert((!HasUnitDiag) && "ReverseInnerIterator does not support yet triangular views with a unit diagonal");
|
|
146
|
+
if(SkipLast) {
|
|
147
|
+
while((*this) && (SkipDiag ? this->index()>=outer : this->index()>outer))
|
|
148
|
+
--(*this);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
EIGEN_STRONG_INLINE ReverseInnerIterator& operator--()
|
|
153
|
+
{ Base::operator--(); return *this; }
|
|
154
|
+
|
|
155
|
+
inline Index row() const { return Base::row(); }
|
|
156
|
+
inline Index col() const { return Base::col(); }
|
|
157
|
+
|
|
158
|
+
EIGEN_STRONG_INLINE operator bool() const
|
|
159
|
+
{
|
|
160
|
+
if (SkipLast) return Base::operator bool() ;
|
|
161
|
+
else
|
|
162
|
+
{
|
|
163
|
+
if(SkipDiag) return (Base::operator bool() && this->index() > this->outer());
|
|
164
|
+
else return (Base::operator bool() && this->index() >= this->outer());
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
template<typename Derived>
|
|
170
|
+
template<int Mode>
|
|
171
|
+
inline const SparseTriangularView<Derived, Mode>
|
|
172
|
+
SparseMatrixBase<Derived>::triangularView() const
|
|
173
|
+
{
|
|
174
|
+
return derived();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
} // end namespace Eigen
|
|
178
|
+
|
|
179
|
+
#endif // EIGEN_SPARSE_TRIANGULARVIEW_H
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008 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_SPARSEUTIL_H
|
|
11
|
+
#define EIGEN_SPARSEUTIL_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
#ifdef NDEBUG
|
|
16
|
+
#define EIGEN_DBG_SPARSE(X)
|
|
17
|
+
#else
|
|
18
|
+
#define EIGEN_DBG_SPARSE(X) X
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
#define EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, Op) \
|
|
22
|
+
template<typename OtherDerived> \
|
|
23
|
+
EIGEN_STRONG_INLINE Derived& operator Op(const Eigen::SparseMatrixBase<OtherDerived>& other) \
|
|
24
|
+
{ \
|
|
25
|
+
return Base::operator Op(other.derived()); \
|
|
26
|
+
} \
|
|
27
|
+
EIGEN_STRONG_INLINE Derived& operator Op(const Derived& other) \
|
|
28
|
+
{ \
|
|
29
|
+
return Base::operator Op(other); \
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#define EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, Op) \
|
|
33
|
+
template<typename Other> \
|
|
34
|
+
EIGEN_STRONG_INLINE Derived& operator Op(const Other& scalar) \
|
|
35
|
+
{ \
|
|
36
|
+
return Base::operator Op(scalar); \
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#define EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATORS(Derived) \
|
|
40
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, =) \
|
|
41
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, +=) \
|
|
42
|
+
EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, -=) \
|
|
43
|
+
EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, *=) \
|
|
44
|
+
EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, /=)
|
|
45
|
+
|
|
46
|
+
#define _EIGEN_SPARSE_PUBLIC_INTERFACE(Derived, BaseClass) \
|
|
47
|
+
typedef BaseClass Base; \
|
|
48
|
+
typedef typename Eigen::internal::traits<Derived >::Scalar Scalar; \
|
|
49
|
+
typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; \
|
|
50
|
+
typedef typename Eigen::internal::nested<Derived >::type Nested; \
|
|
51
|
+
typedef typename Eigen::internal::traits<Derived >::StorageKind StorageKind; \
|
|
52
|
+
typedef typename Eigen::internal::traits<Derived >::Index Index; \
|
|
53
|
+
enum { RowsAtCompileTime = Eigen::internal::traits<Derived >::RowsAtCompileTime, \
|
|
54
|
+
ColsAtCompileTime = Eigen::internal::traits<Derived >::ColsAtCompileTime, \
|
|
55
|
+
Flags = Eigen::internal::traits<Derived >::Flags, \
|
|
56
|
+
CoeffReadCost = Eigen::internal::traits<Derived >::CoeffReadCost, \
|
|
57
|
+
SizeAtCompileTime = Base::SizeAtCompileTime, \
|
|
58
|
+
IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \
|
|
59
|
+
using Base::derived; \
|
|
60
|
+
using Base::const_cast_derived;
|
|
61
|
+
|
|
62
|
+
#define EIGEN_SPARSE_PUBLIC_INTERFACE(Derived) \
|
|
63
|
+
_EIGEN_SPARSE_PUBLIC_INTERFACE(Derived, Eigen::SparseMatrixBase<Derived >)
|
|
64
|
+
|
|
65
|
+
const int CoherentAccessPattern = 0x1;
|
|
66
|
+
const int InnerRandomAccessPattern = 0x2 | CoherentAccessPattern;
|
|
67
|
+
const int OuterRandomAccessPattern = 0x4 | CoherentAccessPattern;
|
|
68
|
+
const int RandomAccessPattern = 0x8 | OuterRandomAccessPattern | InnerRandomAccessPattern;
|
|
69
|
+
|
|
70
|
+
template<typename _Scalar, int _Flags = 0, typename _Index = int> class SparseMatrix;
|
|
71
|
+
template<typename _Scalar, int _Flags = 0, typename _Index = int> class DynamicSparseMatrix;
|
|
72
|
+
template<typename _Scalar, int _Flags = 0, typename _Index = int> class SparseVector;
|
|
73
|
+
template<typename _Scalar, int _Flags = 0, typename _Index = int> class MappedSparseMatrix;
|
|
74
|
+
|
|
75
|
+
template<typename MatrixType, int Mode> class SparseTriangularView;
|
|
76
|
+
template<typename MatrixType, unsigned int UpLo> class SparseSelfAdjointView;
|
|
77
|
+
template<typename Lhs, typename Rhs> class SparseDiagonalProduct;
|
|
78
|
+
template<typename MatrixType> class SparseView;
|
|
79
|
+
|
|
80
|
+
template<typename Lhs, typename Rhs> class SparseSparseProduct;
|
|
81
|
+
template<typename Lhs, typename Rhs> class SparseTimeDenseProduct;
|
|
82
|
+
template<typename Lhs, typename Rhs> class DenseTimeSparseProduct;
|
|
83
|
+
template<typename Lhs, typename Rhs, bool Transpose> class SparseDenseOuterProduct;
|
|
84
|
+
|
|
85
|
+
template<typename Lhs, typename Rhs> struct SparseSparseProductReturnType;
|
|
86
|
+
template<typename Lhs, typename Rhs,
|
|
87
|
+
int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct DenseSparseProductReturnType;
|
|
88
|
+
template<typename Lhs, typename Rhs,
|
|
89
|
+
int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct SparseDenseProductReturnType;
|
|
90
|
+
template<typename MatrixType,int UpLo> class SparseSymmetricPermutationProduct;
|
|
91
|
+
|
|
92
|
+
namespace internal {
|
|
93
|
+
|
|
94
|
+
template<typename T,int Rows,int Cols> struct sparse_eval;
|
|
95
|
+
|
|
96
|
+
template<typename T> struct eval<T,Sparse>
|
|
97
|
+
: public sparse_eval<T, traits<T>::RowsAtCompileTime,traits<T>::ColsAtCompileTime>
|
|
98
|
+
{};
|
|
99
|
+
|
|
100
|
+
template<typename T,int Cols> struct sparse_eval<T,1,Cols> {
|
|
101
|
+
typedef typename traits<T>::Scalar _Scalar;
|
|
102
|
+
typedef typename traits<T>::Index _Index;
|
|
103
|
+
public:
|
|
104
|
+
typedef SparseVector<_Scalar, RowMajor, _Index> type;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
template<typename T,int Rows> struct sparse_eval<T,Rows,1> {
|
|
108
|
+
typedef typename traits<T>::Scalar _Scalar;
|
|
109
|
+
typedef typename traits<T>::Index _Index;
|
|
110
|
+
public:
|
|
111
|
+
typedef SparseVector<_Scalar, ColMajor, _Index> type;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
template<typename T,int Rows,int Cols> struct sparse_eval {
|
|
115
|
+
typedef typename traits<T>::Scalar _Scalar;
|
|
116
|
+
typedef typename traits<T>::Index _Index;
|
|
117
|
+
enum { _Options = ((traits<T>::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor };
|
|
118
|
+
public:
|
|
119
|
+
typedef SparseMatrix<_Scalar, _Options, _Index> type;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
template<typename T> struct sparse_eval<T,1,1> {
|
|
123
|
+
typedef typename traits<T>::Scalar _Scalar;
|
|
124
|
+
public:
|
|
125
|
+
typedef Matrix<_Scalar, 1, 1> type;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
template<typename T> struct plain_matrix_type<T,Sparse>
|
|
129
|
+
{
|
|
130
|
+
typedef typename traits<T>::Scalar _Scalar;
|
|
131
|
+
typedef typename traits<T>::Index _Index;
|
|
132
|
+
enum { _Options = ((traits<T>::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor };
|
|
133
|
+
public:
|
|
134
|
+
typedef SparseMatrix<_Scalar, _Options, _Index> type;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
} // end namespace internal
|
|
138
|
+
|
|
139
|
+
/** \ingroup SparseCore_Module
|
|
140
|
+
*
|
|
141
|
+
* \class Triplet
|
|
142
|
+
*
|
|
143
|
+
* \brief A small structure to hold a non zero as a triplet (i,j,value).
|
|
144
|
+
*
|
|
145
|
+
* \sa SparseMatrix::setFromTriplets()
|
|
146
|
+
*/
|
|
147
|
+
template<typename Scalar, typename Index=typename SparseMatrix<Scalar>::Index >
|
|
148
|
+
class Triplet
|
|
149
|
+
{
|
|
150
|
+
public:
|
|
151
|
+
Triplet() : m_row(0), m_col(0), m_value(0) {}
|
|
152
|
+
|
|
153
|
+
Triplet(const Index& i, const Index& j, const Scalar& v = Scalar(0))
|
|
154
|
+
: m_row(i), m_col(j), m_value(v)
|
|
155
|
+
{}
|
|
156
|
+
|
|
157
|
+
/** \returns the row index of the element */
|
|
158
|
+
const Index& row() const { return m_row; }
|
|
159
|
+
|
|
160
|
+
/** \returns the column index of the element */
|
|
161
|
+
const Index& col() const { return m_col; }
|
|
162
|
+
|
|
163
|
+
/** \returns the value of the element */
|
|
164
|
+
const Scalar& value() const { return m_value; }
|
|
165
|
+
protected:
|
|
166
|
+
Index m_row, m_col;
|
|
167
|
+
Scalar m_value;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
} // end namespace Eigen
|
|
171
|
+
|
|
172
|
+
#endif // EIGEN_SPARSEUTIL_H
|