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,237 @@
|
|
|
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_VISITOR_H
|
|
11
|
+
#define EIGEN_VISITOR_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
template<typename Visitor, typename Derived, int UnrollCount>
|
|
18
|
+
struct visitor_impl
|
|
19
|
+
{
|
|
20
|
+
enum {
|
|
21
|
+
col = (UnrollCount-1) / Derived::RowsAtCompileTime,
|
|
22
|
+
row = (UnrollCount-1) % Derived::RowsAtCompileTime
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
static inline void run(const Derived &mat, Visitor& visitor)
|
|
26
|
+
{
|
|
27
|
+
visitor_impl<Visitor, Derived, UnrollCount-1>::run(mat, visitor);
|
|
28
|
+
visitor(mat.coeff(row, col), row, col);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
template<typename Visitor, typename Derived>
|
|
33
|
+
struct visitor_impl<Visitor, Derived, 1>
|
|
34
|
+
{
|
|
35
|
+
static inline void run(const Derived &mat, Visitor& visitor)
|
|
36
|
+
{
|
|
37
|
+
return visitor.init(mat.coeff(0, 0), 0, 0);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
template<typename Visitor, typename Derived>
|
|
42
|
+
struct visitor_impl<Visitor, Derived, Dynamic>
|
|
43
|
+
{
|
|
44
|
+
typedef typename Derived::Index Index;
|
|
45
|
+
static inline void run(const Derived& mat, Visitor& visitor)
|
|
46
|
+
{
|
|
47
|
+
visitor.init(mat.coeff(0,0), 0, 0);
|
|
48
|
+
for(Index i = 1; i < mat.rows(); ++i)
|
|
49
|
+
visitor(mat.coeff(i, 0), i, 0);
|
|
50
|
+
for(Index j = 1; j < mat.cols(); ++j)
|
|
51
|
+
for(Index i = 0; i < mat.rows(); ++i)
|
|
52
|
+
visitor(mat.coeff(i, j), i, j);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
} // end namespace internal
|
|
57
|
+
|
|
58
|
+
/** Applies the visitor \a visitor to the whole coefficients of the matrix or vector.
|
|
59
|
+
*
|
|
60
|
+
* The template parameter \a Visitor is the type of the visitor and provides the following interface:
|
|
61
|
+
* \code
|
|
62
|
+
* struct MyVisitor {
|
|
63
|
+
* // called for the first coefficient
|
|
64
|
+
* void init(const Scalar& value, Index i, Index j);
|
|
65
|
+
* // called for all other coefficients
|
|
66
|
+
* void operator() (const Scalar& value, Index i, Index j);
|
|
67
|
+
* };
|
|
68
|
+
* \endcode
|
|
69
|
+
*
|
|
70
|
+
* \note compared to one or two \em for \em loops, visitors offer automatic
|
|
71
|
+
* unrolling for small fixed size matrix.
|
|
72
|
+
*
|
|
73
|
+
* \sa minCoeff(Index*,Index*), maxCoeff(Index*,Index*), DenseBase::redux()
|
|
74
|
+
*/
|
|
75
|
+
template<typename Derived>
|
|
76
|
+
template<typename Visitor>
|
|
77
|
+
void DenseBase<Derived>::visit(Visitor& visitor) const
|
|
78
|
+
{
|
|
79
|
+
enum { unroll = SizeAtCompileTime != Dynamic
|
|
80
|
+
&& CoeffReadCost != Dynamic
|
|
81
|
+
&& (SizeAtCompileTime == 1 || internal::functor_traits<Visitor>::Cost != Dynamic)
|
|
82
|
+
&& SizeAtCompileTime * CoeffReadCost + (SizeAtCompileTime-1) * internal::functor_traits<Visitor>::Cost
|
|
83
|
+
<= EIGEN_UNROLLING_LIMIT };
|
|
84
|
+
return internal::visitor_impl<Visitor, Derived,
|
|
85
|
+
unroll ? int(SizeAtCompileTime) : Dynamic
|
|
86
|
+
>::run(derived(), visitor);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
namespace internal {
|
|
90
|
+
|
|
91
|
+
/** \internal
|
|
92
|
+
* \brief Base class to implement min and max visitors
|
|
93
|
+
*/
|
|
94
|
+
template <typename Derived>
|
|
95
|
+
struct coeff_visitor
|
|
96
|
+
{
|
|
97
|
+
typedef typename Derived::Index Index;
|
|
98
|
+
typedef typename Derived::Scalar Scalar;
|
|
99
|
+
Index row, col;
|
|
100
|
+
Scalar res;
|
|
101
|
+
inline void init(const Scalar& value, Index i, Index j)
|
|
102
|
+
{
|
|
103
|
+
res = value;
|
|
104
|
+
row = i;
|
|
105
|
+
col = j;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/** \internal
|
|
110
|
+
* \brief Visitor computing the min coefficient with its value and coordinates
|
|
111
|
+
*
|
|
112
|
+
* \sa DenseBase::minCoeff(Index*, Index*)
|
|
113
|
+
*/
|
|
114
|
+
template <typename Derived>
|
|
115
|
+
struct min_coeff_visitor : coeff_visitor<Derived>
|
|
116
|
+
{
|
|
117
|
+
typedef typename Derived::Index Index;
|
|
118
|
+
typedef typename Derived::Scalar Scalar;
|
|
119
|
+
void operator() (const Scalar& value, Index i, Index j)
|
|
120
|
+
{
|
|
121
|
+
if(value < this->res)
|
|
122
|
+
{
|
|
123
|
+
this->res = value;
|
|
124
|
+
this->row = i;
|
|
125
|
+
this->col = j;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
template<typename Scalar>
|
|
131
|
+
struct functor_traits<min_coeff_visitor<Scalar> > {
|
|
132
|
+
enum {
|
|
133
|
+
Cost = NumTraits<Scalar>::AddCost
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/** \internal
|
|
138
|
+
* \brief Visitor computing the max coefficient with its value and coordinates
|
|
139
|
+
*
|
|
140
|
+
* \sa DenseBase::maxCoeff(Index*, Index*)
|
|
141
|
+
*/
|
|
142
|
+
template <typename Derived>
|
|
143
|
+
struct max_coeff_visitor : coeff_visitor<Derived>
|
|
144
|
+
{
|
|
145
|
+
typedef typename Derived::Index Index;
|
|
146
|
+
typedef typename Derived::Scalar Scalar;
|
|
147
|
+
void operator() (const Scalar& value, Index i, Index j)
|
|
148
|
+
{
|
|
149
|
+
if(value > this->res)
|
|
150
|
+
{
|
|
151
|
+
this->res = value;
|
|
152
|
+
this->row = i;
|
|
153
|
+
this->col = j;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
template<typename Scalar>
|
|
159
|
+
struct functor_traits<max_coeff_visitor<Scalar> > {
|
|
160
|
+
enum {
|
|
161
|
+
Cost = NumTraits<Scalar>::AddCost
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
} // end namespace internal
|
|
166
|
+
|
|
167
|
+
/** \returns the minimum of all coefficients of *this and puts in *row and *col its location.
|
|
168
|
+
* \warning the result is undefined if \c *this contains NaN.
|
|
169
|
+
*
|
|
170
|
+
* \sa DenseBase::minCoeff(Index*), DenseBase::maxCoeff(Index*,Index*), DenseBase::visitor(), DenseBase::minCoeff()
|
|
171
|
+
*/
|
|
172
|
+
template<typename Derived>
|
|
173
|
+
template<typename IndexType>
|
|
174
|
+
typename internal::traits<Derived>::Scalar
|
|
175
|
+
DenseBase<Derived>::minCoeff(IndexType* rowId, IndexType* colId) const
|
|
176
|
+
{
|
|
177
|
+
internal::min_coeff_visitor<Derived> minVisitor;
|
|
178
|
+
this->visit(minVisitor);
|
|
179
|
+
*rowId = minVisitor.row;
|
|
180
|
+
if (colId) *colId = minVisitor.col;
|
|
181
|
+
return minVisitor.res;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** \returns the minimum of all coefficients of *this and puts in *index its location.
|
|
185
|
+
* \warning the result is undefined if \c *this contains NaN.
|
|
186
|
+
*
|
|
187
|
+
* \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::visitor(), DenseBase::minCoeff()
|
|
188
|
+
*/
|
|
189
|
+
template<typename Derived>
|
|
190
|
+
template<typename IndexType>
|
|
191
|
+
typename internal::traits<Derived>::Scalar
|
|
192
|
+
DenseBase<Derived>::minCoeff(IndexType* index) const
|
|
193
|
+
{
|
|
194
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
195
|
+
internal::min_coeff_visitor<Derived> minVisitor;
|
|
196
|
+
this->visit(minVisitor);
|
|
197
|
+
*index = (RowsAtCompileTime==1) ? minVisitor.col : minVisitor.row;
|
|
198
|
+
return minVisitor.res;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** \returns the maximum of all coefficients of *this and puts in *row and *col its location.
|
|
202
|
+
* \warning the result is undefined if \c *this contains NaN.
|
|
203
|
+
*
|
|
204
|
+
* \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visitor(), DenseBase::maxCoeff()
|
|
205
|
+
*/
|
|
206
|
+
template<typename Derived>
|
|
207
|
+
template<typename IndexType>
|
|
208
|
+
typename internal::traits<Derived>::Scalar
|
|
209
|
+
DenseBase<Derived>::maxCoeff(IndexType* rowPtr, IndexType* colPtr) const
|
|
210
|
+
{
|
|
211
|
+
internal::max_coeff_visitor<Derived> maxVisitor;
|
|
212
|
+
this->visit(maxVisitor);
|
|
213
|
+
*rowPtr = maxVisitor.row;
|
|
214
|
+
if (colPtr) *colPtr = maxVisitor.col;
|
|
215
|
+
return maxVisitor.res;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** \returns the maximum of all coefficients of *this and puts in *index its location.
|
|
219
|
+
* \warning the result is undefined if \c *this contains NaN.
|
|
220
|
+
*
|
|
221
|
+
* \sa DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visitor(), DenseBase::maxCoeff()
|
|
222
|
+
*/
|
|
223
|
+
template<typename Derived>
|
|
224
|
+
template<typename IndexType>
|
|
225
|
+
typename internal::traits<Derived>::Scalar
|
|
226
|
+
DenseBase<Derived>::maxCoeff(IndexType* index) const
|
|
227
|
+
{
|
|
228
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
229
|
+
internal::max_coeff_visitor<Derived> maxVisitor;
|
|
230
|
+
this->visit(maxVisitor);
|
|
231
|
+
*index = (RowsAtCompileTime==1) ? maxVisitor.col : maxVisitor.row;
|
|
232
|
+
return maxVisitor.res;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
} // end namespace Eigen
|
|
236
|
+
|
|
237
|
+
#endif // EIGEN_VISITOR_H
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 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_COMPLEX_ALTIVEC_H
|
|
11
|
+
#define EIGEN_COMPLEX_ALTIVEC_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
static Packet4ui p4ui_CONJ_XOR = vec_mergeh((Packet4ui)p4i_ZERO, (Packet4ui)p4f_ZERO_);//{ 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
|
|
18
|
+
static Packet16uc p16uc_COMPLEX_RE = vec_sld((Packet16uc) vec_splat((Packet4ui)p16uc_FORWARD, 0), (Packet16uc) vec_splat((Packet4ui)p16uc_FORWARD, 2), 8);//{ 0,1,2,3, 0,1,2,3, 8,9,10,11, 8,9,10,11 };
|
|
19
|
+
static Packet16uc p16uc_COMPLEX_IM = vec_sld((Packet16uc) vec_splat((Packet4ui)p16uc_FORWARD, 1), (Packet16uc) vec_splat((Packet4ui)p16uc_FORWARD, 3), 8);//{ 4,5,6,7, 4,5,6,7, 12,13,14,15, 12,13,14,15 };
|
|
20
|
+
static Packet16uc p16uc_COMPLEX_REV = vec_sld(p16uc_REVERSE, p16uc_REVERSE, 8);//{ 4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11 };
|
|
21
|
+
static Packet16uc p16uc_COMPLEX_REV2 = vec_sld(p16uc_FORWARD, p16uc_FORWARD, 8);//{ 8,9,10,11, 12,13,14,15, 0,1,2,3, 4,5,6,7 };
|
|
22
|
+
static Packet16uc p16uc_PSET_HI = (Packet16uc) vec_mergeh((Packet4ui) vec_splat((Packet4ui)p16uc_FORWARD, 0), (Packet4ui) vec_splat((Packet4ui)p16uc_FORWARD, 1));//{ 0,1,2,3, 4,5,6,7, 0,1,2,3, 4,5,6,7 };
|
|
23
|
+
static Packet16uc p16uc_PSET_LO = (Packet16uc) vec_mergeh((Packet4ui) vec_splat((Packet4ui)p16uc_FORWARD, 2), (Packet4ui) vec_splat((Packet4ui)p16uc_FORWARD, 3));//{ 8,9,10,11, 12,13,14,15, 8,9,10,11, 12,13,14,15 };
|
|
24
|
+
|
|
25
|
+
//---------- float ----------
|
|
26
|
+
struct Packet2cf
|
|
27
|
+
{
|
|
28
|
+
EIGEN_STRONG_INLINE Packet2cf() {}
|
|
29
|
+
EIGEN_STRONG_INLINE explicit Packet2cf(const Packet4f& a) : v(a) {}
|
|
30
|
+
Packet4f v;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
template<> struct packet_traits<std::complex<float> > : default_packet_traits
|
|
34
|
+
{
|
|
35
|
+
typedef Packet2cf type;
|
|
36
|
+
enum {
|
|
37
|
+
Vectorizable = 1,
|
|
38
|
+
AlignedOnScalar = 1,
|
|
39
|
+
size = 2,
|
|
40
|
+
|
|
41
|
+
HasAdd = 1,
|
|
42
|
+
HasSub = 1,
|
|
43
|
+
HasMul = 1,
|
|
44
|
+
HasDiv = 1,
|
|
45
|
+
HasNegate = 1,
|
|
46
|
+
HasAbs = 0,
|
|
47
|
+
HasAbs2 = 0,
|
|
48
|
+
HasMin = 0,
|
|
49
|
+
HasMax = 0,
|
|
50
|
+
HasSetLinear = 0
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
template<> struct unpacket_traits<Packet2cf> { typedef std::complex<float> type; enum {size=2}; };
|
|
55
|
+
|
|
56
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from)
|
|
57
|
+
{
|
|
58
|
+
Packet2cf res;
|
|
59
|
+
/* On AltiVec we cannot load 64-bit registers, so wa have to take care of alignment */
|
|
60
|
+
if((ptrdiff_t(&from) % 16) == 0)
|
|
61
|
+
res.v = pload<Packet4f>((const float *)&from);
|
|
62
|
+
else
|
|
63
|
+
res.v = ploadu<Packet4f>((const float *)&from);
|
|
64
|
+
res.v = vec_perm(res.v, res.v, p16uc_PSET_HI);
|
|
65
|
+
return res;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
template<> EIGEN_STRONG_INLINE Packet2cf padd<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_add(a.v,b.v)); }
|
|
69
|
+
template<> EIGEN_STRONG_INLINE Packet2cf psub<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_sub(a.v,b.v)); }
|
|
70
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf& a) { return Packet2cf(pnegate(a.v)); }
|
|
71
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf& a) { return Packet2cf((Packet4f)vec_xor((Packet4ui)a.v, p4ui_CONJ_XOR)); }
|
|
72
|
+
|
|
73
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pmul<Packet2cf>(const Packet2cf& a, const Packet2cf& b)
|
|
74
|
+
{
|
|
75
|
+
Packet4f v1, v2;
|
|
76
|
+
|
|
77
|
+
// Permute and multiply the real parts of a and b
|
|
78
|
+
v1 = vec_perm(a.v, a.v, p16uc_COMPLEX_RE);
|
|
79
|
+
// Get the imaginary parts of a
|
|
80
|
+
v2 = vec_perm(a.v, a.v, p16uc_COMPLEX_IM);
|
|
81
|
+
// multiply a_re * b
|
|
82
|
+
v1 = vec_madd(v1, b.v, p4f_ZERO);
|
|
83
|
+
// multiply a_im * b and get the conjugate result
|
|
84
|
+
v2 = vec_madd(v2, b.v, p4f_ZERO);
|
|
85
|
+
v2 = (Packet4f) vec_xor((Packet4ui)v2, p4ui_CONJ_XOR);
|
|
86
|
+
// permute back to a proper order
|
|
87
|
+
v2 = vec_perm(v2, v2, p16uc_COMPLEX_REV);
|
|
88
|
+
|
|
89
|
+
return Packet2cf(vec_add(v1, v2));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pand <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_and(a.v,b.v)); }
|
|
93
|
+
template<> EIGEN_STRONG_INLINE Packet2cf por <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_or(a.v,b.v)); }
|
|
94
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pxor <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_xor(a.v,b.v)); }
|
|
95
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(vec_and(a.v, vec_nor(b.v,b.v))); }
|
|
96
|
+
|
|
97
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pload <Packet2cf>(const std::complex<float>* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet2cf(pload<Packet4f>((const float*)from)); }
|
|
98
|
+
template<> EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<float>* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet2cf(ploadu<Packet4f>((const float*)from)); }
|
|
99
|
+
|
|
100
|
+
template<> EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from)
|
|
101
|
+
{
|
|
102
|
+
return pset1<Packet2cf>(*from);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
template<> EIGEN_STRONG_INLINE void pstore <std::complex<float> >(std::complex<float> * to, const Packet2cf& from) { EIGEN_DEBUG_ALIGNED_STORE pstore((float*)to, from.v); }
|
|
106
|
+
template<> EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float> * to, const Packet2cf& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, from.v); }
|
|
107
|
+
|
|
108
|
+
template<> EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::complex<float> * addr) { vec_dstt((float *)addr, DST_CTRL(2,2,32), DST_CHAN); }
|
|
109
|
+
|
|
110
|
+
template<> EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a)
|
|
111
|
+
{
|
|
112
|
+
std::complex<float> EIGEN_ALIGN16 res[2];
|
|
113
|
+
pstore((float *)&res, a.v);
|
|
114
|
+
|
|
115
|
+
return res[0];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
template<> EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a)
|
|
119
|
+
{
|
|
120
|
+
Packet4f rev_a;
|
|
121
|
+
rev_a = vec_perm(a.v, a.v, p16uc_COMPLEX_REV2);
|
|
122
|
+
return Packet2cf(rev_a);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
template<> EIGEN_STRONG_INLINE std::complex<float> predux<Packet2cf>(const Packet2cf& a)
|
|
126
|
+
{
|
|
127
|
+
Packet4f b;
|
|
128
|
+
b = (Packet4f) vec_sld(a.v, a.v, 8);
|
|
129
|
+
b = padd(a.v, b);
|
|
130
|
+
return pfirst(Packet2cf(b));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
template<> EIGEN_STRONG_INLINE Packet2cf preduxp<Packet2cf>(const Packet2cf* vecs)
|
|
134
|
+
{
|
|
135
|
+
Packet4f b1, b2;
|
|
136
|
+
|
|
137
|
+
b1 = (Packet4f) vec_sld(vecs[0].v, vecs[1].v, 8);
|
|
138
|
+
b2 = (Packet4f) vec_sld(vecs[1].v, vecs[0].v, 8);
|
|
139
|
+
b2 = (Packet4f) vec_sld(b2, b2, 8);
|
|
140
|
+
b2 = padd(b1, b2);
|
|
141
|
+
|
|
142
|
+
return Packet2cf(b2);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
template<> EIGEN_STRONG_INLINE std::complex<float> predux_mul<Packet2cf>(const Packet2cf& a)
|
|
146
|
+
{
|
|
147
|
+
Packet4f b;
|
|
148
|
+
Packet2cf prod;
|
|
149
|
+
b = (Packet4f) vec_sld(a.v, a.v, 8);
|
|
150
|
+
prod = pmul(a, Packet2cf(b));
|
|
151
|
+
|
|
152
|
+
return pfirst(prod);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
template<int Offset>
|
|
156
|
+
struct palign_impl<Offset,Packet2cf>
|
|
157
|
+
{
|
|
158
|
+
static EIGEN_STRONG_INLINE void run(Packet2cf& first, const Packet2cf& second)
|
|
159
|
+
{
|
|
160
|
+
if (Offset==1)
|
|
161
|
+
{
|
|
162
|
+
first.v = vec_sld(first.v, second.v, 8);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
template<> struct conj_helper<Packet2cf, Packet2cf, false,true>
|
|
168
|
+
{
|
|
169
|
+
EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& x, const Packet2cf& y, const Packet2cf& c) const
|
|
170
|
+
{ return padd(pmul(x,y),c); }
|
|
171
|
+
|
|
172
|
+
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b) const
|
|
173
|
+
{
|
|
174
|
+
return internal::pmul(a, pconj(b));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
template<> struct conj_helper<Packet2cf, Packet2cf, true,false>
|
|
179
|
+
{
|
|
180
|
+
EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& x, const Packet2cf& y, const Packet2cf& c) const
|
|
181
|
+
{ return padd(pmul(x,y),c); }
|
|
182
|
+
|
|
183
|
+
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b) const
|
|
184
|
+
{
|
|
185
|
+
return internal::pmul(pconj(a), b);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
template<> struct conj_helper<Packet2cf, Packet2cf, true,true>
|
|
190
|
+
{
|
|
191
|
+
EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& x, const Packet2cf& y, const Packet2cf& c) const
|
|
192
|
+
{ return padd(pmul(x,y),c); }
|
|
193
|
+
|
|
194
|
+
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b) const
|
|
195
|
+
{
|
|
196
|
+
return pconj(internal::pmul(a, b));
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b)
|
|
201
|
+
{
|
|
202
|
+
// TODO optimize it for AltiVec
|
|
203
|
+
Packet2cf res = conj_helper<Packet2cf,Packet2cf,false,true>().pmul(a,b);
|
|
204
|
+
Packet4f s = vec_madd(b.v, b.v, p4f_ZERO);
|
|
205
|
+
return Packet2cf(pdiv(res.v, vec_add(s,vec_perm(s, s, p16uc_COMPLEX_REV))));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
template<> EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& x)
|
|
209
|
+
{
|
|
210
|
+
return Packet2cf(vec_perm(x.v, x.v, p16uc_COMPLEX_REV));
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
} // end namespace internal
|
|
214
|
+
|
|
215
|
+
} // end namespace Eigen
|
|
216
|
+
|
|
217
|
+
#endif // EIGEN_COMPLEX_ALTIVEC_H
|