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,99 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
// Copyright (C) 2009-2010 Benoit Jacob <jacob.benoit.1@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_RETURNBYVALUE_H
|
|
12
|
+
#define EIGEN_RETURNBYVALUE_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
/** \class ReturnByValue
|
|
17
|
+
* \ingroup Core_Module
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
namespace internal {
|
|
22
|
+
|
|
23
|
+
template<typename Derived>
|
|
24
|
+
struct traits<ReturnByValue<Derived> >
|
|
25
|
+
: public traits<typename traits<Derived>::ReturnType>
|
|
26
|
+
{
|
|
27
|
+
enum {
|
|
28
|
+
// We're disabling the DirectAccess because e.g. the constructor of
|
|
29
|
+
// the Block-with-DirectAccess expression requires to have a coeffRef method.
|
|
30
|
+
// Also, we don't want to have to implement the stride stuff.
|
|
31
|
+
Flags = (traits<typename traits<Derived>::ReturnType>::Flags
|
|
32
|
+
| EvalBeforeNestingBit) & ~DirectAccessBit
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/* The ReturnByValue object doesn't even have a coeff() method.
|
|
37
|
+
* So the only way that nesting it in an expression can work, is by evaluating it into a plain matrix.
|
|
38
|
+
* So internal::nested always gives the plain return matrix type.
|
|
39
|
+
*
|
|
40
|
+
* FIXME: I don't understand why we need this specialization: isn't this taken care of by the EvalBeforeNestingBit ??
|
|
41
|
+
*/
|
|
42
|
+
template<typename Derived,int n,typename PlainObject>
|
|
43
|
+
struct nested<ReturnByValue<Derived>, n, PlainObject>
|
|
44
|
+
{
|
|
45
|
+
typedef typename traits<Derived>::ReturnType type;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
} // end namespace internal
|
|
49
|
+
|
|
50
|
+
template<typename Derived> class ReturnByValue
|
|
51
|
+
: internal::no_assignment_operator, public internal::dense_xpr_base< ReturnByValue<Derived> >::type
|
|
52
|
+
{
|
|
53
|
+
public:
|
|
54
|
+
typedef typename internal::traits<Derived>::ReturnType ReturnType;
|
|
55
|
+
|
|
56
|
+
typedef typename internal::dense_xpr_base<ReturnByValue>::type Base;
|
|
57
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(ReturnByValue)
|
|
58
|
+
|
|
59
|
+
template<typename Dest>
|
|
60
|
+
inline void evalTo(Dest& dst) const
|
|
61
|
+
{ static_cast<const Derived*>(this)->evalTo(dst); }
|
|
62
|
+
inline Index rows() const { return static_cast<const Derived*>(this)->rows(); }
|
|
63
|
+
inline Index cols() const { return static_cast<const Derived*>(this)->cols(); }
|
|
64
|
+
|
|
65
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
66
|
+
#define Unusable YOU_ARE_TRYING_TO_ACCESS_A_SINGLE_COEFFICIENT_IN_A_SPECIAL_EXPRESSION_WHERE_THAT_IS_NOT_ALLOWED_BECAUSE_THAT_WOULD_BE_INEFFICIENT
|
|
67
|
+
class Unusable{
|
|
68
|
+
Unusable(const Unusable&) {}
|
|
69
|
+
Unusable& operator=(const Unusable&) {return *this;}
|
|
70
|
+
};
|
|
71
|
+
const Unusable& coeff(Index) const { return *reinterpret_cast<const Unusable*>(this); }
|
|
72
|
+
const Unusable& coeff(Index,Index) const { return *reinterpret_cast<const Unusable*>(this); }
|
|
73
|
+
Unusable& coeffRef(Index) { return *reinterpret_cast<Unusable*>(this); }
|
|
74
|
+
Unusable& coeffRef(Index,Index) { return *reinterpret_cast<Unusable*>(this); }
|
|
75
|
+
template<int LoadMode> Unusable& packet(Index) const;
|
|
76
|
+
template<int LoadMode> Unusable& packet(Index, Index) const;
|
|
77
|
+
#endif
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
template<typename Derived>
|
|
81
|
+
template<typename OtherDerived>
|
|
82
|
+
Derived& DenseBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
|
|
83
|
+
{
|
|
84
|
+
other.evalTo(derived());
|
|
85
|
+
return derived();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
template<typename Derived>
|
|
89
|
+
template<typename OtherDerived>
|
|
90
|
+
Derived& DenseBase<Derived>::lazyAssign(const ReturnByValue<OtherDerived>& other)
|
|
91
|
+
{
|
|
92
|
+
other.evalTo(derived());
|
|
93
|
+
return derived();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
} // end namespace Eigen
|
|
98
|
+
|
|
99
|
+
#endif // EIGEN_RETURNBYVALUE_H
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
5
|
+
// Copyright (C) 2009 Ricard Marxer <email@ricardmarxer.com>
|
|
6
|
+
// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
7
|
+
//
|
|
8
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
9
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
10
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
11
|
+
|
|
12
|
+
#ifndef EIGEN_REVERSE_H
|
|
13
|
+
#define EIGEN_REVERSE_H
|
|
14
|
+
|
|
15
|
+
namespace Eigen {
|
|
16
|
+
|
|
17
|
+
/** \class Reverse
|
|
18
|
+
* \ingroup Core_Module
|
|
19
|
+
*
|
|
20
|
+
* \brief Expression of the reverse of a vector or matrix
|
|
21
|
+
*
|
|
22
|
+
* \param MatrixType the type of the object of which we are taking the reverse
|
|
23
|
+
*
|
|
24
|
+
* This class represents an expression of the reverse of a vector.
|
|
25
|
+
* It is the return type of MatrixBase::reverse() and VectorwiseOp::reverse()
|
|
26
|
+
* and most of the time this is the only way it is used.
|
|
27
|
+
*
|
|
28
|
+
* \sa MatrixBase::reverse(), VectorwiseOp::reverse()
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
namespace internal {
|
|
32
|
+
|
|
33
|
+
template<typename MatrixType, int Direction>
|
|
34
|
+
struct traits<Reverse<MatrixType, Direction> >
|
|
35
|
+
: traits<MatrixType>
|
|
36
|
+
{
|
|
37
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
38
|
+
typedef typename traits<MatrixType>::StorageKind StorageKind;
|
|
39
|
+
typedef typename traits<MatrixType>::XprKind XprKind;
|
|
40
|
+
typedef typename nested<MatrixType>::type MatrixTypeNested;
|
|
41
|
+
typedef typename remove_reference<MatrixTypeNested>::type _MatrixTypeNested;
|
|
42
|
+
enum {
|
|
43
|
+
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
44
|
+
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
45
|
+
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
|
46
|
+
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
|
47
|
+
|
|
48
|
+
// let's enable LinearAccess only with vectorization because of the product overhead
|
|
49
|
+
LinearAccess = ( (Direction==BothDirections) && (int(_MatrixTypeNested::Flags)&PacketAccessBit) )
|
|
50
|
+
? LinearAccessBit : 0,
|
|
51
|
+
|
|
52
|
+
Flags = int(_MatrixTypeNested::Flags) & (HereditaryBits | LvalueBit | PacketAccessBit | LinearAccess),
|
|
53
|
+
|
|
54
|
+
CoeffReadCost = _MatrixTypeNested::CoeffReadCost
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
template<typename PacketScalar, bool ReversePacket> struct reverse_packet_cond
|
|
59
|
+
{
|
|
60
|
+
static inline PacketScalar run(const PacketScalar& x) { return preverse(x); }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
template<typename PacketScalar> struct reverse_packet_cond<PacketScalar,false>
|
|
64
|
+
{
|
|
65
|
+
static inline PacketScalar run(const PacketScalar& x) { return x; }
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
} // end namespace internal
|
|
69
|
+
|
|
70
|
+
template<typename MatrixType, int Direction> class Reverse
|
|
71
|
+
: public internal::dense_xpr_base< Reverse<MatrixType, Direction> >::type
|
|
72
|
+
{
|
|
73
|
+
public:
|
|
74
|
+
|
|
75
|
+
typedef typename internal::dense_xpr_base<Reverse>::type Base;
|
|
76
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(Reverse)
|
|
77
|
+
using Base::IsRowMajor;
|
|
78
|
+
|
|
79
|
+
// next line is necessary because otherwise const version of operator()
|
|
80
|
+
// is hidden by non-const version defined in this file
|
|
81
|
+
using Base::operator();
|
|
82
|
+
|
|
83
|
+
protected:
|
|
84
|
+
enum {
|
|
85
|
+
PacketSize = internal::packet_traits<Scalar>::size,
|
|
86
|
+
IsColMajor = !IsRowMajor,
|
|
87
|
+
ReverseRow = (Direction == Vertical) || (Direction == BothDirections),
|
|
88
|
+
ReverseCol = (Direction == Horizontal) || (Direction == BothDirections),
|
|
89
|
+
OffsetRow = ReverseRow && IsColMajor ? PacketSize : 1,
|
|
90
|
+
OffsetCol = ReverseCol && IsRowMajor ? PacketSize : 1,
|
|
91
|
+
ReversePacket = (Direction == BothDirections)
|
|
92
|
+
|| ((Direction == Vertical) && IsColMajor)
|
|
93
|
+
|| ((Direction == Horizontal) && IsRowMajor)
|
|
94
|
+
};
|
|
95
|
+
typedef internal::reverse_packet_cond<PacketScalar,ReversePacket> reverse_packet;
|
|
96
|
+
public:
|
|
97
|
+
|
|
98
|
+
inline Reverse(const MatrixType& matrix) : m_matrix(matrix) { }
|
|
99
|
+
|
|
100
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reverse)
|
|
101
|
+
|
|
102
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
103
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
104
|
+
|
|
105
|
+
inline Index innerStride() const
|
|
106
|
+
{
|
|
107
|
+
return -m_matrix.innerStride();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
inline Scalar& operator()(Index row, Index col)
|
|
111
|
+
{
|
|
112
|
+
eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
113
|
+
return coeffRef(row, col);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
inline Scalar& coeffRef(Index row, Index col)
|
|
117
|
+
{
|
|
118
|
+
return m_matrix.const_cast_derived().coeffRef(ReverseRow ? m_matrix.rows() - row - 1 : row,
|
|
119
|
+
ReverseCol ? m_matrix.cols() - col - 1 : col);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
inline CoeffReturnType coeff(Index row, Index col) const
|
|
123
|
+
{
|
|
124
|
+
return m_matrix.coeff(ReverseRow ? m_matrix.rows() - row - 1 : row,
|
|
125
|
+
ReverseCol ? m_matrix.cols() - col - 1 : col);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
inline CoeffReturnType coeff(Index index) const
|
|
129
|
+
{
|
|
130
|
+
return m_matrix.coeff(m_matrix.size() - index - 1);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
inline Scalar& coeffRef(Index index)
|
|
134
|
+
{
|
|
135
|
+
return m_matrix.const_cast_derived().coeffRef(m_matrix.size() - index - 1);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
inline Scalar& operator()(Index index)
|
|
139
|
+
{
|
|
140
|
+
eigen_assert(index >= 0 && index < m_matrix.size());
|
|
141
|
+
return coeffRef(index);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
template<int LoadMode>
|
|
145
|
+
inline const PacketScalar packet(Index row, Index col) const
|
|
146
|
+
{
|
|
147
|
+
return reverse_packet::run(m_matrix.template packet<LoadMode>(
|
|
148
|
+
ReverseRow ? m_matrix.rows() - row - OffsetRow : row,
|
|
149
|
+
ReverseCol ? m_matrix.cols() - col - OffsetCol : col));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
template<int LoadMode>
|
|
153
|
+
inline void writePacket(Index row, Index col, const PacketScalar& x)
|
|
154
|
+
{
|
|
155
|
+
m_matrix.const_cast_derived().template writePacket<LoadMode>(
|
|
156
|
+
ReverseRow ? m_matrix.rows() - row - OffsetRow : row,
|
|
157
|
+
ReverseCol ? m_matrix.cols() - col - OffsetCol : col,
|
|
158
|
+
reverse_packet::run(x));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
template<int LoadMode>
|
|
162
|
+
inline const PacketScalar packet(Index index) const
|
|
163
|
+
{
|
|
164
|
+
return internal::preverse(m_matrix.template packet<LoadMode>( m_matrix.size() - index - PacketSize ));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
template<int LoadMode>
|
|
168
|
+
inline void writePacket(Index index, const PacketScalar& x)
|
|
169
|
+
{
|
|
170
|
+
m_matrix.const_cast_derived().template writePacket<LoadMode>(m_matrix.size() - index - PacketSize, internal::preverse(x));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const typename internal::remove_all<typename MatrixType::Nested>::type&
|
|
174
|
+
nestedExpression() const
|
|
175
|
+
{
|
|
176
|
+
return m_matrix;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
protected:
|
|
180
|
+
typename MatrixType::Nested m_matrix;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/** \returns an expression of the reverse of *this.
|
|
184
|
+
*
|
|
185
|
+
* Example: \include MatrixBase_reverse.cpp
|
|
186
|
+
* Output: \verbinclude MatrixBase_reverse.out
|
|
187
|
+
*
|
|
188
|
+
*/
|
|
189
|
+
template<typename Derived>
|
|
190
|
+
inline typename DenseBase<Derived>::ReverseReturnType
|
|
191
|
+
DenseBase<Derived>::reverse()
|
|
192
|
+
{
|
|
193
|
+
return derived();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** This is the const version of reverse(). */
|
|
197
|
+
template<typename Derived>
|
|
198
|
+
inline const typename DenseBase<Derived>::ConstReverseReturnType
|
|
199
|
+
DenseBase<Derived>::reverse() const
|
|
200
|
+
{
|
|
201
|
+
return derived();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** This is the "in place" version of reverse: it reverses \c *this.
|
|
205
|
+
*
|
|
206
|
+
* In most cases it is probably better to simply use the reversed expression
|
|
207
|
+
* of a matrix. However, when reversing the matrix data itself is really needed,
|
|
208
|
+
* then this "in-place" version is probably the right choice because it provides
|
|
209
|
+
* the following additional features:
|
|
210
|
+
* - less error prone: doing the same operation with .reverse() requires special care:
|
|
211
|
+
* \code m = m.reverse().eval(); \endcode
|
|
212
|
+
* - this API allows to avoid creating a temporary (the current implementation creates a temporary, but that could be avoided using swap)
|
|
213
|
+
* - it allows future optimizations (cache friendliness, etc.)
|
|
214
|
+
*
|
|
215
|
+
* \sa reverse() */
|
|
216
|
+
template<typename Derived>
|
|
217
|
+
inline void DenseBase<Derived>::reverseInPlace()
|
|
218
|
+
{
|
|
219
|
+
derived() = derived().reverse().eval();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
} // end namespace Eigen
|
|
223
|
+
|
|
224
|
+
#endif // EIGEN_REVERSE_H
|
|
@@ -0,0 +1,162 @@
|
|
|
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_SELECT_H
|
|
11
|
+
#define EIGEN_SELECT_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
/** \class Select
|
|
16
|
+
* \ingroup Core_Module
|
|
17
|
+
*
|
|
18
|
+
* \brief Expression of a coefficient wise version of the C++ ternary operator ?:
|
|
19
|
+
*
|
|
20
|
+
* \param ConditionMatrixType the type of the \em condition expression which must be a boolean matrix
|
|
21
|
+
* \param ThenMatrixType the type of the \em then expression
|
|
22
|
+
* \param ElseMatrixType the type of the \em else expression
|
|
23
|
+
*
|
|
24
|
+
* This class represents an expression of a coefficient wise version of the C++ ternary operator ?:.
|
|
25
|
+
* It is the return type of DenseBase::select() and most of the time this is the only way it is used.
|
|
26
|
+
*
|
|
27
|
+
* \sa DenseBase::select(const DenseBase<ThenDerived>&, const DenseBase<ElseDerived>&) const
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
namespace internal {
|
|
31
|
+
template<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType>
|
|
32
|
+
struct traits<Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >
|
|
33
|
+
: traits<ThenMatrixType>
|
|
34
|
+
{
|
|
35
|
+
typedef typename traits<ThenMatrixType>::Scalar Scalar;
|
|
36
|
+
typedef Dense StorageKind;
|
|
37
|
+
typedef typename traits<ThenMatrixType>::XprKind XprKind;
|
|
38
|
+
typedef typename ConditionMatrixType::Nested ConditionMatrixNested;
|
|
39
|
+
typedef typename ThenMatrixType::Nested ThenMatrixNested;
|
|
40
|
+
typedef typename ElseMatrixType::Nested ElseMatrixNested;
|
|
41
|
+
enum {
|
|
42
|
+
RowsAtCompileTime = ConditionMatrixType::RowsAtCompileTime,
|
|
43
|
+
ColsAtCompileTime = ConditionMatrixType::ColsAtCompileTime,
|
|
44
|
+
MaxRowsAtCompileTime = ConditionMatrixType::MaxRowsAtCompileTime,
|
|
45
|
+
MaxColsAtCompileTime = ConditionMatrixType::MaxColsAtCompileTime,
|
|
46
|
+
Flags = (unsigned int)ThenMatrixType::Flags & ElseMatrixType::Flags & HereditaryBits,
|
|
47
|
+
CoeffReadCost = traits<typename remove_all<ConditionMatrixNested>::type>::CoeffReadCost
|
|
48
|
+
+ EIGEN_SIZE_MAX(traits<typename remove_all<ThenMatrixNested>::type>::CoeffReadCost,
|
|
49
|
+
traits<typename remove_all<ElseMatrixNested>::type>::CoeffReadCost)
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
template<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType>
|
|
55
|
+
class Select : internal::no_assignment_operator,
|
|
56
|
+
public internal::dense_xpr_base< Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >::type
|
|
57
|
+
{
|
|
58
|
+
public:
|
|
59
|
+
|
|
60
|
+
typedef typename internal::dense_xpr_base<Select>::type Base;
|
|
61
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(Select)
|
|
62
|
+
|
|
63
|
+
Select(const ConditionMatrixType& a_conditionMatrix,
|
|
64
|
+
const ThenMatrixType& a_thenMatrix,
|
|
65
|
+
const ElseMatrixType& a_elseMatrix)
|
|
66
|
+
: m_condition(a_conditionMatrix), m_then(a_thenMatrix), m_else(a_elseMatrix)
|
|
67
|
+
{
|
|
68
|
+
eigen_assert(m_condition.rows() == m_then.rows() && m_condition.rows() == m_else.rows());
|
|
69
|
+
eigen_assert(m_condition.cols() == m_then.cols() && m_condition.cols() == m_else.cols());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
Index rows() const { return m_condition.rows(); }
|
|
73
|
+
Index cols() const { return m_condition.cols(); }
|
|
74
|
+
|
|
75
|
+
const Scalar coeff(Index i, Index j) const
|
|
76
|
+
{
|
|
77
|
+
if (m_condition.coeff(i,j))
|
|
78
|
+
return m_then.coeff(i,j);
|
|
79
|
+
else
|
|
80
|
+
return m_else.coeff(i,j);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const Scalar coeff(Index i) const
|
|
84
|
+
{
|
|
85
|
+
if (m_condition.coeff(i))
|
|
86
|
+
return m_then.coeff(i);
|
|
87
|
+
else
|
|
88
|
+
return m_else.coeff(i);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const ConditionMatrixType& conditionMatrix() const
|
|
92
|
+
{
|
|
93
|
+
return m_condition;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const ThenMatrixType& thenMatrix() const
|
|
97
|
+
{
|
|
98
|
+
return m_then;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const ElseMatrixType& elseMatrix() const
|
|
102
|
+
{
|
|
103
|
+
return m_else;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
protected:
|
|
107
|
+
typename ConditionMatrixType::Nested m_condition;
|
|
108
|
+
typename ThenMatrixType::Nested m_then;
|
|
109
|
+
typename ElseMatrixType::Nested m_else;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
/** \returns a matrix where each coefficient (i,j) is equal to \a thenMatrix(i,j)
|
|
114
|
+
* if \c *this(i,j), and \a elseMatrix(i,j) otherwise.
|
|
115
|
+
*
|
|
116
|
+
* Example: \include MatrixBase_select.cpp
|
|
117
|
+
* Output: \verbinclude MatrixBase_select.out
|
|
118
|
+
*
|
|
119
|
+
* \sa class Select
|
|
120
|
+
*/
|
|
121
|
+
template<typename Derived>
|
|
122
|
+
template<typename ThenDerived,typename ElseDerived>
|
|
123
|
+
inline const Select<Derived,ThenDerived,ElseDerived>
|
|
124
|
+
DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
125
|
+
const DenseBase<ElseDerived>& elseMatrix) const
|
|
126
|
+
{
|
|
127
|
+
return Select<Derived,ThenDerived,ElseDerived>(derived(), thenMatrix.derived(), elseMatrix.derived());
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Version of DenseBase::select(const DenseBase&, const DenseBase&) with
|
|
131
|
+
* the \em else expression being a scalar value.
|
|
132
|
+
*
|
|
133
|
+
* \sa DenseBase::select(const DenseBase<ThenDerived>&, const DenseBase<ElseDerived>&) const, class Select
|
|
134
|
+
*/
|
|
135
|
+
template<typename Derived>
|
|
136
|
+
template<typename ThenDerived>
|
|
137
|
+
inline const Select<Derived,ThenDerived, typename ThenDerived::ConstantReturnType>
|
|
138
|
+
DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
139
|
+
const typename ThenDerived::Scalar& elseScalar) const
|
|
140
|
+
{
|
|
141
|
+
return Select<Derived,ThenDerived,typename ThenDerived::ConstantReturnType>(
|
|
142
|
+
derived(), thenMatrix.derived(), ThenDerived::Constant(rows(),cols(),elseScalar));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Version of DenseBase::select(const DenseBase&, const DenseBase&) with
|
|
146
|
+
* the \em then expression being a scalar value.
|
|
147
|
+
*
|
|
148
|
+
* \sa DenseBase::select(const DenseBase<ThenDerived>&, const DenseBase<ElseDerived>&) const, class Select
|
|
149
|
+
*/
|
|
150
|
+
template<typename Derived>
|
|
151
|
+
template<typename ElseDerived>
|
|
152
|
+
inline const Select<Derived, typename ElseDerived::ConstantReturnType, ElseDerived >
|
|
153
|
+
DenseBase<Derived>::select(const typename ElseDerived::Scalar& thenScalar,
|
|
154
|
+
const DenseBase<ElseDerived>& elseMatrix) const
|
|
155
|
+
{
|
|
156
|
+
return Select<Derived,typename ElseDerived::ConstantReturnType,ElseDerived>(
|
|
157
|
+
derived(), ElseDerived::Constant(rows(),cols(),thenScalar), elseMatrix.derived());
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
} // end namespace Eigen
|
|
161
|
+
|
|
162
|
+
#endif // EIGEN_SELECT_H
|