From 7c2cdfbb56757a0e7a023f2930f6641e254b7956 Mon Sep 17 00:00:00 2001 From: Anthony Pesch Date: Fri, 22 Apr 2016 21:55:08 -0700 Subject: [PATCH] updated eigen to 3.2.8 --- CMakeLists.txt | 2 +- deps/eigen-3.2.1/cmake/FindMetis.cmake | 25 - deps/eigen-3.2.1/test/simplicial_cholesky.cpp | 40 - .../unsupported/Eigen/CMakeLists.txt | 11 - .../.hg_archival.txt | 4 +- deps/{eigen-3.2.1 => eigen-3.2.8}/.hgeol | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/.hgignore | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/.hgtags | 7 + .../CMakeLists.txt | 66 +- deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.BSD | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.GPL | 0 .../{eigen-3.2.1 => eigen-3.2.8}/COPYING.LGPL | 0 .../COPYING.MINPACK | 0 .../{eigen-3.2.1 => eigen-3.2.8}/COPYING.MPL2 | 0 .../COPYING.README | 0 .../CTestConfig.cmake | 8 +- .../CTestCustom.cmake.in | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Array | 0 .../Eigen/CMakeLists.txt | 0 .../Eigen/Cholesky | 0 .../Eigen/CholmodSupport | 2 +- deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Core | 6 +- deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Dense | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Eigen | 0 .../Eigen/Eigen2Support | 0 .../Eigen/Eigenvalues | 0 .../Eigen/Geometry | 0 .../Eigen/Householder | 0 .../Eigen/IterativeLinearSolvers | 0 .../{eigen-3.2.1 => eigen-3.2.8}/Eigen/Jacobi | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/LU | 0 .../Eigen/LeastSquares | 0 .../Eigen/MetisSupport | 0 .../Eigen/OrderingMethods | 0 .../Eigen/PaStiXSupport | 0 .../Eigen/PardisoSupport | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/QR | 0 .../Eigen/QtAlignedMalloc | 0 .../Eigen/SPQRSupport | 2 +- deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SVD | 0 .../{eigen-3.2.1 => eigen-3.2.8}/Eigen/Sparse | 0 .../Eigen/SparseCholesky | 0 .../Eigen/SparseCore | 2 +- .../Eigen/SparseLU | 0 .../Eigen/SparseQR | 0 .../Eigen/StdDeque | 0 .../Eigen/StdList | 0 .../Eigen/StdVector | 0 .../Eigen/SuperLUSupport | 0 .../Eigen/UmfPackSupport | 2 +- .../Eigen/src/CMakeLists.txt | 0 .../Eigen/src/Cholesky/CMakeLists.txt | 0 .../Eigen/src/Cholesky/LDLT.h | 61 +- .../Eigen/src/Cholesky/LLT.h | 10 +- .../Eigen/src/Cholesky/LLT_MKL.h | 2 +- .../Eigen/src/CholmodSupport/CMakeLists.txt | 0 .../Eigen/src/CholmodSupport/CholmodSupport.h | 10 +- .../Eigen/src/Core/Array.h | 15 + .../Eigen/src/Core/ArrayBase.h | 4 +- .../Eigen/src/Core/ArrayWrapper.h | 10 + .../Eigen/src/Core/Assign.h | 15 +- .../Eigen/src/Core/Assign_MKL.h | 0 .../Eigen/src/Core/BandMatrix.h | 0 .../Eigen/src/Core/Block.h | 7 +- .../Eigen/src/Core/BooleanRedux.h | 0 .../Eigen/src/Core/CMakeLists.txt | 0 .../Eigen/src/Core/CommaInitializer.h | 11 + .../Eigen/src/Core/CoreIterators.h | 0 .../Eigen/src/Core/CwiseBinaryOp.h | 3 +- .../Eigen/src/Core/CwiseNullaryOp.h | 0 .../Eigen/src/Core/CwiseUnaryOp.h | 2 +- .../Eigen/src/Core/CwiseUnaryView.h | 2 +- .../Eigen/src/Core/DenseBase.h | 28 +- .../Eigen/src/Core/DenseCoeffsBase.h | 0 .../Eigen/src/Core/DenseStorage.h | 271 ++-- .../Eigen/src/Core/Diagonal.h | 8 +- .../Eigen/src/Core/DiagonalMatrix.h | 0 .../Eigen/src/Core/DiagonalProduct.h | 5 +- .../Eigen/src/Core/Dot.h | 0 .../Eigen/src/Core/EigenBase.h | 0 .../Eigen/src/Core/Flagged.h | 0 .../Eigen/src/Core/ForceAlignedAccess.h | 0 .../Eigen/src/Core/Functors.h | 45 +- .../Eigen/src/Core/Fuzzy.h | 0 .../Eigen/src/Core/GeneralProduct.h | 25 +- .../Eigen/src/Core/GenericPacketMath.h | 0 .../Eigen/src/Core/GlobalFunctions.h | 0 .../Eigen/src/Core/IO.h | 0 .../Eigen/src/Core/Map.h | 0 .../Eigen/src/Core/MapBase.h | 17 +- .../Eigen/src/Core/MathFunctions.h | 8 +- .../Eigen/src/Core/Matrix.h | 15 + .../Eigen/src/Core/MatrixBase.h | 27 +- .../Eigen/src/Core/NestByValue.h | 0 .../Eigen/src/Core/NoAlias.h | 0 .../Eigen/src/Core/NumTraits.h | 0 .../Eigen/src/Core/PermutationMatrix.h | 34 +- .../Eigen/src/Core/PlainObjectBase.h | 32 + .../Eigen/src/Core/ProductBase.h | 14 +- .../Eigen/src/Core/Random.h | 0 .../Eigen/src/Core/Redux.h | 5 +- .../Eigen/src/Core/Ref.h | 38 +- .../Eigen/src/Core/Replicate.h | 4 +- .../Eigen/src/Core/ReturnByValue.h | 11 + .../Eigen/src/Core/Reverse.h | 0 .../Eigen/src/Core/Select.h | 0 .../Eigen/src/Core/SelfAdjointView.h | 0 .../Eigen/src/Core/SelfCwiseBinaryOp.h | 10 +- .../Eigen/src/Core/SolveTriangular.h | 8 +- .../Eigen/src/Core/StableNorm.h | 0 .../Eigen/src/Core/Stride.h | 0 .../Eigen/src/Core/Swap.h | 0 .../Eigen/src/Core/Transpose.h | 0 .../Eigen/src/Core/Transpositions.h | 0 .../Eigen/src/Core/TriangularMatrix.h | 29 +- .../Eigen/src/Core/VectorBlock.h | 0 .../Eigen/src/Core/VectorwiseOp.h | 0 .../Eigen/src/Core/Visitor.h | 7 +- .../src/Core/arch/AltiVec/CMakeLists.txt | 0 .../Eigen/src/Core/arch/AltiVec/Complex.h | 0 .../Eigen/src/Core/arch/AltiVec/PacketMath.h | 0 .../Eigen/src/Core/arch/CMakeLists.txt | 0 .../src/Core/arch/Default/CMakeLists.txt | 0 .../Eigen/src/Core/arch/Default/Settings.h | 0 .../Eigen/src/Core/arch/NEON/CMakeLists.txt | 0 .../Eigen/src/Core/arch/NEON/Complex.h | 2 +- .../Eigen/src/Core/arch/NEON/PacketMath.h | 20 +- .../Eigen/src/Core/arch/SSE/CMakeLists.txt | 0 .../Eigen/src/Core/arch/SSE/Complex.h | 0 .../Eigen/src/Core/arch/SSE/MathFunctions.h | 14 +- .../Eigen/src/Core/arch/SSE/PacketMath.h | 44 +- .../Eigen/src/Core/products/CMakeLists.txt | 0 .../src/Core/products/CoeffBasedProduct.h | 79 +- .../Core/products/GeneralBlockPanelKernel.h | 0 .../src/Core/products/GeneralMatrixMatrix.h | 8 +- .../products/GeneralMatrixMatrixTriangular.h | 0 .../GeneralMatrixMatrixTriangular_MKL.h | 0 .../Core/products/GeneralMatrixMatrix_MKL.h | 0 .../src/Core/products/GeneralMatrixVector.h | 0 .../Core/products/GeneralMatrixVector_MKL.h | 0 .../Eigen/src/Core/products/Parallelizer.h | 17 +- .../Core/products/SelfadjointMatrixMatrix.h | 0 .../products/SelfadjointMatrixMatrix_MKL.h | 0 .../Core/products/SelfadjointMatrixVector.h | 0 .../products/SelfadjointMatrixVector_MKL.h | 0 .../src/Core/products/SelfadjointProduct.h | 0 .../Core/products/SelfadjointRank2Update.h | 0 .../Core/products/TriangularMatrixMatrix.h | 0 .../products/TriangularMatrixMatrix_MKL.h | 4 +- .../Core/products/TriangularMatrixVector.h | 0 .../products/TriangularMatrixVector_MKL.h | 0 .../Core/products/TriangularSolverMatrix.h | 13 +- .../products/TriangularSolverMatrix_MKL.h | 0 .../Core/products/TriangularSolverVector.h | 0 .../Eigen/src/Core/util/BlasUtil.h | 0 .../Eigen/src/Core/util/CMakeLists.txt | 0 .../Eigen/src/Core/util/Constants.h | 13 + .../src/Core/util/DisableStupidWarnings.h | 0 .../Eigen/src/Core/util/ForwardDeclarations.h | 3 + .../Eigen/src/Core/util/MKL_support.h | 51 +- .../Eigen/src/Core/util/Macros.h | 323 ++++- .../Eigen/src/Core/util/Memory.h | 29 +- .../Eigen/src/Core/util/Meta.h | 0 .../Eigen/src/Core/util/NonMPL2.h | 0 .../src/Core/util/ReenableStupidWarnings.h | 0 .../Eigen/src/Core/util/StaticAssert.h | 6 +- .../Eigen/src/Core/util/XprHelper.h | 10 +- .../Eigen/src/Eigen2Support/Block.h | 0 .../Eigen/src/Eigen2Support/CMakeLists.txt | 0 .../Eigen/src/Eigen2Support/Cwise.h | 0 .../Eigen/src/Eigen2Support/CwiseOperators.h | 0 .../src/Eigen2Support/Geometry/AlignedBox.h | 0 .../Eigen/src/Eigen2Support/Geometry/All.h | 0 .../src/Eigen2Support/Geometry/AngleAxis.h | 0 .../src/Eigen2Support/Geometry/CMakeLists.txt | 0 .../src/Eigen2Support/Geometry/Hyperplane.h | 0 .../Eigen2Support/Geometry/ParametrizedLine.h | 0 .../src/Eigen2Support/Geometry/Quaternion.h | 0 .../src/Eigen2Support/Geometry/Rotation2D.h | 0 .../src/Eigen2Support/Geometry/RotationBase.h | 0 .../src/Eigen2Support/Geometry/Scaling.h | 0 .../src/Eigen2Support/Geometry/Transform.h | 0 .../src/Eigen2Support/Geometry/Translation.h | 0 .../Eigen/src/Eigen2Support/LU.h | 0 .../Eigen/src/Eigen2Support/Lazy.h | 0 .../Eigen/src/Eigen2Support/LeastSquares.h | 1 - .../Eigen/src/Eigen2Support/Macros.h | 0 .../Eigen/src/Eigen2Support/MathFunctions.h | 0 .../Eigen/src/Eigen2Support/Memory.h | 0 .../Eigen/src/Eigen2Support/Meta.h | 0 .../Eigen/src/Eigen2Support/Minor.h | 0 .../Eigen/src/Eigen2Support/QR.h | 0 .../Eigen/src/Eigen2Support/SVD.h | 0 .../src/Eigen2Support/TriangularSolver.h | 0 .../Eigen/src/Eigen2Support/VectorBlock.h | 0 .../Eigen/src/Eigenvalues/CMakeLists.txt | 0 .../src/Eigenvalues/ComplexEigenSolver.h | 8 + .../Eigen/src/Eigenvalues/ComplexSchur.h | 0 .../Eigen/src/Eigenvalues/ComplexSchur_MKL.h | 1 - .../Eigen/src/Eigenvalues/EigenSolver.h | 9 + .../src/Eigenvalues/GeneralizedEigenSolver.h | 9 + .../GeneralizedSelfAdjointEigenSolver.h | 0 .../src/Eigenvalues/HessenbergDecomposition.h | 0 .../src/Eigenvalues/MatrixBaseEigenvalues.h | 0 .../Eigen/src/Eigenvalues/RealQZ.h | 14 +- .../Eigen/src/Eigenvalues/RealSchur.h | 12 +- .../Eigen/src/Eigenvalues/RealSchur_MKL.h | 4 - .../src/Eigenvalues/SelfAdjointEigenSolver.h | 231 ++-- .../Eigenvalues/SelfAdjointEigenSolver_MKL.h | 0 .../src/Eigenvalues/Tridiagonalization.h | 0 .../Eigen/src/Geometry/AlignedBox.h | 85 +- .../Eigen/src/Geometry/AngleAxis.h | 13 +- .../Eigen/src/Geometry/CMakeLists.txt | 0 .../Eigen/src/Geometry/EulerAngles.h | 0 .../Eigen/src/Geometry/Homogeneous.h | 2 +- .../Eigen/src/Geometry/Hyperplane.h | 12 +- .../Eigen/src/Geometry/OrthoMethods.h | 0 .../Eigen/src/Geometry/ParametrizedLine.h | 2 +- .../Eigen/src/Geometry/Quaternion.h | 34 +- .../Eigen/src/Geometry/Rotation2D.h | 7 +- .../Eigen/src/Geometry/RotationBase.h | 0 .../Eigen/src/Geometry/Scaling.h | 0 .../Eigen/src/Geometry/Transform.h | 82 +- .../Eigen/src/Geometry/Translation.h | 2 +- .../Eigen/src/Geometry/Umeyama.h | 10 +- .../Eigen/src/Geometry/arch/CMakeLists.txt | 0 .../Eigen/src/Geometry/arch/Geometry_SSE.h | 0 .../Eigen/src/Householder/BlockHouseholder.h | 2 +- .../Eigen/src/Householder/CMakeLists.txt | 0 .../Eigen/src/Householder/Householder.h | 0 .../src/Householder/HouseholderSequence.h | 0 .../BasicPreconditioners.h | 4 +- .../src/IterativeLinearSolvers/BiCGSTAB.h | 24 +- .../src/IterativeLinearSolvers/CMakeLists.txt | 0 .../ConjugateGradient.h | 35 +- .../IterativeLinearSolvers/IncompleteLUT.h | 25 +- .../IterativeSolverBase.h | 48 +- .../Eigen/src/Jacobi/CMakeLists.txt | 0 .../Eigen/src/Jacobi/Jacobi.h | 0 .../Eigen/src/LU/CMakeLists.txt | 0 .../Eigen/src/LU/Determinant.h | 0 .../Eigen/src/LU/FullPivLU.h | 23 +- .../Eigen/src/LU/Inverse.h | 0 .../Eigen/src/LU/PartialPivLU.h | 8 + .../Eigen/src/LU/PartialPivLU_MKL.h | 0 .../Eigen/src/LU/arch/CMakeLists.txt | 0 .../Eigen/src/LU/arch/Inverse_SSE.h | 0 .../Eigen/src/MetisSupport/CMakeLists.txt | 0 .../Eigen/src/MetisSupport/MetisSupport.h | 0 .../Eigen/src/OrderingMethods/Amd.h | 21 +- .../Eigen/src/OrderingMethods/CMakeLists.txt | 0 .../Eigen/src/OrderingMethods/Eigen_Colamd.h | 31 +- .../Eigen/src/OrderingMethods/Ordering.h | 12 +- .../Eigen/src/PaStiXSupport/CMakeLists.txt | 0 .../Eigen/src/PaStiXSupport/PaStiXSupport.h | 0 .../Eigen/src/PardisoSupport/CMakeLists.txt | 0 .../Eigen/src/PardisoSupport/PardisoSupport.h | 2 +- .../Eigen/src/QR/CMakeLists.txt | 0 .../Eigen/src/QR/ColPivHouseholderQR.h | 35 +- .../Eigen/src/QR/ColPivHouseholderQR_MKL.h | 1 - .../Eigen/src/QR/FullPivHouseholderQR.h | 8 + .../Eigen/src/QR/HouseholderQR.h | 102 +- .../Eigen/src/QR/HouseholderQR_MKL.h | 30 +- .../Eigen/src/SPQRSupport/CMakeLists.txt | 0 .../src/SPQRSupport/SuiteSparseQRSupport.h | 64 +- .../Eigen/src/SVD/CMakeLists.txt | 0 .../Eigen/src/SVD/JacobiSVD.h | 130 +- .../Eigen/src/SVD/JacobiSVD_MKL.h | 4 +- .../Eigen/src/SVD/UpperBidiagonalization.h | 0 .../Eigen/src/SparseCholesky/CMakeLists.txt | 0 .../src/SparseCholesky/SimplicialCholesky.h | 42 +- .../SparseCholesky/SimplicialCholesky_impl.h | 0 .../Eigen/src/SparseCore/AmbiVector.h | 4 +- .../Eigen/src/SparseCore/CMakeLists.txt | 0 .../Eigen/src/SparseCore/CompressedStorage.h | 8 +- .../ConservativeSparseSparseProduct.h | 0 .../Eigen/src/SparseCore/MappedSparseMatrix.h | 0 .../Eigen/src/SparseCore/SparseBlock.h | 140 +- .../Eigen/src/SparseCore/SparseColEtree.h | 0 .../src/SparseCore/SparseCwiseBinaryOp.h | 12 +- .../Eigen/src/SparseCore/SparseCwiseUnaryOp.h | 0 .../Eigen/src/SparseCore/SparseDenseProduct.h | 44 +- .../src/SparseCore/SparseDiagonalProduct.h | 0 .../Eigen/src/SparseCore/SparseDot.h | 0 .../Eigen/src/SparseCore/SparseFuzzy.h | 0 .../Eigen/src/SparseCore/SparseMatrix.h | 17 +- .../Eigen/src/SparseCore/SparseMatrixBase.h | 44 +- .../Eigen/src/SparseCore/SparsePermutation.h | 2 +- .../Eigen/src/SparseCore/SparseProduct.h | 0 .../Eigen/src/SparseCore/SparseRedux.h | 0 .../src/SparseCore/SparseSelfAdjointView.h | 0 .../SparseSparseProductWithPruning.h | 0 .../Eigen/src/SparseCore/SparseTranspose.h | 10 +- .../src/SparseCore/SparseTriangularView.h | 0 .../Eigen/src/SparseCore/SparseUtil.h | 7 +- .../Eigen/src/SparseCore/SparseVector.h | 1 + .../Eigen/src/SparseCore/SparseView.h | 6 +- .../Eigen/src/SparseCore/TriangularSolver.h | 2 +- .../Eigen/src/SparseLU/CMakeLists.txt | 0 .../Eigen/src/SparseLU/SparseLU.h | 90 +- .../Eigen/src/SparseLU/SparseLUImpl.h | 2 + .../Eigen/src/SparseLU/SparseLU_Memory.h | 4 +- .../Eigen/src/SparseLU/SparseLU_Structs.h | 0 .../src/SparseLU/SparseLU_SupernodalMatrix.h | 12 +- .../Eigen/src/SparseLU/SparseLU_Utils.h | 0 .../Eigen/src/SparseLU/SparseLU_column_bmod.h | 4 +- .../Eigen/src/SparseLU/SparseLU_column_dfs.h | 0 .../src/SparseLU/SparseLU_copy_to_ucol.h | 0 .../Eigen/src/SparseLU/SparseLU_gemm_kernel.h | 0 .../src/SparseLU/SparseLU_heap_relax_snode.h | 0 .../Eigen/src/SparseLU/SparseLU_kernel_bmod.h | 4 +- .../Eigen/src/SparseLU/SparseLU_panel_bmod.h | 8 +- .../Eigen/src/SparseLU/SparseLU_panel_dfs.h | 0 .../Eigen/src/SparseLU/SparseLU_pivotL.h | 13 +- .../Eigen/src/SparseLU/SparseLU_pruneL.h | 0 .../Eigen/src/SparseLU/SparseLU_relax_snode.h | 0 .../Eigen/src/SparseQR/CMakeLists.txt | 0 .../Eigen/src/SparseQR/SparseQR.h | 195 ++- .../Eigen/src/StlSupport/CMakeLists.txt | 0 .../Eigen/src/StlSupport/StdDeque.h | 20 +- .../Eigen/src/StlSupport/StdList.h | 20 +- .../Eigen/src/StlSupport/StdVector.h | 2 +- .../Eigen/src/StlSupport/details.h | 0 .../Eigen/src/SuperLUSupport/CMakeLists.txt | 0 .../Eigen/src/SuperLUSupport/SuperLUSupport.h | 0 .../Eigen/src/UmfPackSupport/CMakeLists.txt | 0 .../Eigen/src/UmfPackSupport/UmfPackSupport.h | 112 +- .../Eigen/src/misc/CMakeLists.txt | 0 .../Eigen/src/misc/Image.h | 0 .../Eigen/src/misc/Kernel.h | 0 .../Eigen/src/misc/Solve.h | 0 .../Eigen/src/misc/SparseSolve.h | 0 .../Eigen/src/misc/blas.h | 0 .../Eigen/src/plugins/ArrayCwiseBinaryOps.h | 54 +- .../Eigen/src/plugins/ArrayCwiseUnaryOps.h | 16 - .../Eigen/src/plugins/BlockMethods.h | 0 .../Eigen/src/plugins/CMakeLists.txt | 0 .../Eigen/src/plugins/CommonCwiseBinaryOps.h | 0 .../Eigen/src/plugins/CommonCwiseUnaryOps.h | 0 .../Eigen/src/plugins/MatrixCwiseBinaryOps.h | 17 + .../Eigen/src/plugins/MatrixCwiseUnaryOps.h | 15 - deps/{eigen-3.2.1 => eigen-3.2.8}/INSTALL | 0 .../bench/BenchSparseUtil.h | 0 .../bench/BenchTimer.h | 0 .../bench/BenchUtil.h | 0 .../bench/README.txt | 0 .../bench/basicbench.cxxlist | 0 .../bench/basicbenchmark.cpp | 0 .../bench/basicbenchmark.h | 0 .../bench/benchBlasGemm.cpp | 0 .../bench/benchCholesky.cpp | 0 .../bench/benchEigenSolver.cpp | 0 .../bench/benchFFT.cpp | 0 .../bench/benchGeometry.cpp | 0 .../bench/benchVecAdd.cpp | 0 .../bench/bench_gemm.cpp | 0 .../bench/bench_multi_compilers.sh | 0 .../bench/bench_norm.cpp | 0 .../bench/bench_reverse.cpp | 0 .../bench/bench_sum.cpp | 0 .../bench/bench_unrolling | 0 .../bench/benchmark.cpp | 0 .../bench/benchmarkSlice.cpp | 0 .../bench/benchmarkX.cpp | 0 .../bench/benchmarkXcwise.cpp | 0 .../bench/benchmark_suite | 0 .../bench/btl/CMakeLists.txt | 0 .../bench/btl/COPYING | 0 .../bench/btl/README | 0 .../bench/btl/actions/action_aat_product.hh | 0 .../bench/btl/actions/action_ata_product.hh | 0 .../bench/btl/actions/action_atv_product.hh | 0 .../bench/btl/actions/action_axpby.hh | 0 .../bench/btl/actions/action_axpy.hh | 0 .../bench/btl/actions/action_cholesky.hh | 0 .../bench/btl/actions/action_ger.hh | 0 .../bench/btl/actions/action_hessenberg.hh | 0 .../bench/btl/actions/action_lu_decomp.hh | 0 .../bench/btl/actions/action_lu_solve.hh | 0 .../actions/action_matrix_matrix_product.hh | 0 .../action_matrix_matrix_product_bis.hh | 0 .../actions/action_matrix_vector_product.hh | 0 .../bench/btl/actions/action_partial_lu.hh | 0 .../bench/btl/actions/action_rot.hh | 0 .../bench/btl/actions/action_symv.hh | 0 .../bench/btl/actions/action_syr2.hh | 0 .../bench/btl/actions/action_trisolve.hh | 0 .../btl/actions/action_trisolve_matrix.hh | 0 .../bench/btl/actions/action_trmm.hh | 0 .../bench/btl/actions/basic_actions.hh | 0 .../bench/btl/cmake/FindACML.cmake | 0 .../bench/btl/cmake/FindATLAS.cmake | 0 .../bench/btl/cmake/FindBlitz.cmake | 0 .../bench/btl/cmake/FindCBLAS.cmake | 0 .../bench/btl/cmake/FindGMM.cmake | 0 .../bench/btl/cmake/FindGOTO.cmake | 0 .../bench/btl/cmake/FindGOTO2.cmake | 0 .../bench/btl/cmake/FindMKL.cmake | 0 .../bench/btl/cmake/FindMTL4.cmake | 0 .../cmake/FindPackageHandleStandardArgs.cmake | 0 .../bench/btl/cmake/FindTvmet.cmake | 0 .../cmake/MacroOptionalAddSubdirectory.cmake | 0 .../bench/btl/data/CMakeLists.txt | 0 .../bench/btl/data/action_settings.txt | 0 .../bench/btl/data/gnuplot_common_settings.hh | 0 .../bench/btl/data/go_mean | 0 .../bench/btl/data/mean.cxx | 0 .../bench/btl/data/mk_gnuplot_script.sh | 0 .../bench/btl/data/mk_mean_script.sh | 0 .../bench/btl/data/mk_new_gnuplot.sh | 0 .../bench/btl/data/perlib_plot_settings.txt | 0 .../bench/btl/data/regularize.cxx | 0 .../bench/btl/data/smooth.cxx | 0 .../bench/btl/data/smooth_all.sh | 0 .../bench/btl/generic_bench/bench.hh | 0 .../btl/generic_bench/bench_parameter.hh | 0 .../bench/btl/generic_bench/btl.hh | 0 .../btl/generic_bench/init/init_function.hh | 0 .../btl/generic_bench/init/init_matrix.hh | 0 .../btl/generic_bench/init/init_vector.hh | 0 .../btl/generic_bench/static/bench_static.hh | 0 .../static/intel_bench_fixed_size.hh | 0 .../static/static_size_generator.hh | 0 .../generic_bench/timers/STL_perf_analyzer.hh | 0 .../btl/generic_bench/timers/STL_timer.hh | 0 .../timers/mixed_perf_analyzer.hh | 0 .../timers/portable_perf_analyzer.hh | 0 .../timers/portable_perf_analyzer_old.hh | 0 .../generic_bench/timers/portable_timer.hh | 0 .../generic_bench/timers/x86_perf_analyzer.hh | 0 .../btl/generic_bench/timers/x86_timer.hh | 0 .../btl/generic_bench/utils/size_lin_log.hh | 0 .../bench/btl/generic_bench/utils/size_log.hh | 0 .../bench/btl/generic_bench/utils/utilities.h | 0 .../bench/btl/generic_bench/utils/xy_file.hh | 0 .../bench/btl/libs/BLAS/CMakeLists.txt | 0 .../bench/btl/libs/BLAS/blas.h | 0 .../bench/btl/libs/BLAS/blas_interface.hh | 0 .../btl/libs/BLAS/blas_interface_impl.hh | 0 .../bench/btl/libs/BLAS/c_interface_base.h | 0 .../bench/btl/libs/BLAS/main.cpp | 0 .../bench/btl/libs/STL/CMakeLists.txt | 0 .../bench/btl/libs/STL/STL_interface.hh | 0 .../bench/btl/libs/STL/main.cpp | 0 .../bench/btl/libs/blitz/CMakeLists.txt | 0 .../libs/blitz/blitz_LU_solve_interface.hh | 0 .../bench/btl/libs/blitz/blitz_interface.hh | 0 .../bench/btl/libs/blitz/btl_blitz.cpp | 0 .../bench/btl/libs/blitz/btl_tiny_blitz.cpp | 0 .../btl/libs/blitz/tiny_blitz_interface.hh | 0 .../bench/btl/libs/eigen2/CMakeLists.txt | 0 .../bench/btl/libs/eigen2/btl_tiny_eigen2.cpp | 0 .../bench/btl/libs/eigen2/eigen2_interface.hh | 0 .../bench/btl/libs/eigen2/main_adv.cpp | 0 .../bench/btl/libs/eigen2/main_linear.cpp | 0 .../bench/btl/libs/eigen2/main_matmat.cpp | 0 .../bench/btl/libs/eigen2/main_vecmat.cpp | 0 .../bench/btl/libs/eigen3/CMakeLists.txt | 0 .../bench/btl/libs/eigen3/btl_tiny_eigen3.cpp | 0 .../bench/btl/libs/eigen3/eigen3_interface.hh | 0 .../bench/btl/libs/eigen3/main_adv.cpp | 0 .../bench/btl/libs/eigen3/main_linear.cpp | 0 .../bench/btl/libs/eigen3/main_matmat.cpp | 0 .../bench/btl/libs/eigen3/main_vecmat.cpp | 0 .../bench/btl/libs/gmm/CMakeLists.txt | 0 .../btl/libs/gmm/gmm_LU_solve_interface.hh | 0 .../bench/btl/libs/gmm/gmm_interface.hh | 0 .../bench/btl/libs/gmm/main.cpp | 0 .../bench/btl/libs/mtl4/.kdbgrc.main | 0 .../bench/btl/libs/mtl4/CMakeLists.txt | 0 .../bench/btl/libs/mtl4/main.cpp | 0 .../btl/libs/mtl4/mtl4_LU_solve_interface.hh | 0 .../bench/btl/libs/mtl4/mtl4_interface.hh | 0 .../bench/btl/libs/tvmet/CMakeLists.txt | 0 .../bench/btl/libs/tvmet/main.cpp | 0 .../bench/btl/libs/tvmet/tvmet_interface.hh | 0 .../bench/btl/libs/ublas/CMakeLists.txt | 0 .../bench/btl/libs/ublas/main.cpp | 0 .../bench/btl/libs/ublas/ublas_interface.hh | 0 .../bench/check_cache_queries.cpp | 0 .../bench/eig33.cpp | 0 .../bench/geometry.cpp | 0 .../bench/product_threshold.cpp | 0 .../bench/quat_slerp.cpp | 0 .../bench/quatmul.cpp | 0 .../bench/sparse_cholesky.cpp | 0 .../bench/sparse_dense_product.cpp | 0 .../bench/sparse_lu.cpp | 0 .../bench/sparse_product.cpp | 0 .../bench/sparse_randomsetter.cpp | 0 .../bench/sparse_setter.cpp | 0 .../bench/sparse_transpose.cpp | 0 .../bench/sparse_trisolver.cpp | 0 .../bench/spbench/CMakeLists.txt | 0 .../bench/spbench/sp_solver.cpp | 0 .../bench/spbench/spbench.dtd | 0 .../bench/spbench/spbenchsolver.cpp | 0 .../bench/spbench/spbenchsolver.h | 0 .../bench/spbench/spbenchstyle.h | 0 .../bench/spbench/test_sparseLU.cpp | 0 .../bench/spmv.cpp | 0 .../bench/vdw_new.cpp | 0 .../blas/BandTriangularSolver.h | 0 .../blas/CMakeLists.txt | 0 .../blas/GeneralRank1Update.h | 0 .../blas/PackedSelfadjointProduct.h | 0 .../blas/PackedTriangularMatrixVector.h | 0 .../blas/PackedTriangularSolverVector.h | 0 .../blas/README.txt | 3 - .../blas/Rank2Update.h | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/chbmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/chpmv.f | 0 .../blas/common.h | 0 .../blas/complex_double.cpp | 0 .../blas/complex_single.cpp | 0 .../blas/complexdots.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/ctbmv.f | 0 .../blas/double.cpp | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/drotm.f | 0 .../blas/drotmg.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/dsbmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/dspmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/dtbmv.f | 0 .../blas/level1_cplx_impl.h | 0 .../blas/level1_impl.h | 0 .../blas/level1_real_impl.h | 0 .../blas/level2_cplx_impl.h | 0 .../blas/level2_impl.h | 0 .../blas/level2_real_impl.h | 0 .../blas/level3_impl.h | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/lsame.f | 0 .../blas/single.cpp | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/srotm.f | 0 .../blas/srotmg.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/ssbmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/sspmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/stbmv.f | 0 .../blas/testing/CMakeLists.txt | 0 .../blas/testing/cblat1.f | 0 .../blas/testing/cblat2.dat | 0 .../blas/testing/cblat2.f | 0 .../blas/testing/cblat3.dat | 0 .../blas/testing/cblat3.f | 0 .../blas/testing/dblat1.f | 0 .../blas/testing/dblat2.dat | 0 .../blas/testing/dblat2.f | 0 .../blas/testing/dblat3.dat | 0 .../blas/testing/dblat3.f | 0 .../blas/testing/runblastest.sh | 0 .../blas/testing/sblat1.f | 0 .../blas/testing/sblat2.dat | 0 .../blas/testing/sblat2.f | 0 .../blas/testing/sblat3.dat | 0 .../blas/testing/sblat3.f | 0 .../blas/testing/zblat1.f | 0 .../blas/testing/zblat2.dat | 0 .../blas/testing/zblat2.f | 0 .../blas/testing/zblat3.dat | 0 .../blas/testing/zblat3.f | 0 .../blas/xerbla.cpp | 2 +- .../{eigen-3.2.1 => eigen-3.2.8}/blas/zhbmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/zhpmv.f | 0 .../{eigen-3.2.1 => eigen-3.2.8}/blas/ztbmv.f | 0 .../cmake/EigenConfigureTesting.cmake | 35 +- .../cmake/EigenDetermineOSVersion.cmake | 0 .../cmake/EigenDetermineVSServicePack.cmake | 0 .../cmake/EigenTesting.cmake | 37 +- .../cmake/FindAdolc.cmake | 0 .../cmake/FindBLAS.cmake | 0 .../cmake/FindCholmod.cmake | 2 +- .../cmake/FindEigen2.cmake | 0 .../cmake/FindEigen3.cmake | 0 .../cmake/FindFFTW.cmake | 2 +- .../cmake/FindGLEW.cmake | 0 .../cmake/FindGMP.cmake | 0 .../cmake/FindGSL.cmake | 0 .../cmake/FindGoogleHash.cmake | 0 .../cmake/FindLAPACK.cmake | 0 .../cmake/FindMPFR.cmake | 0 deps/eigen-3.2.8/cmake/FindMetis.cmake | 59 + .../cmake/FindPastix.cmake | 0 .../cmake/FindSPQR.cmake | 7 +- .../cmake/FindScotch.cmake | 0 .../cmake/FindStandardMathLibrary.cmake | 0 .../cmake/FindSuperLU.cmake | 0 .../cmake/FindUmfpack.cmake | 21 +- .../cmake/RegexUtils.cmake | 0 .../cmake/language_support.cmake | 2 +- .../debug/gdb/__init__.py | 0 .../debug/gdb/printers.py | 0 .../debug/msvc/eigen.natvis | 0 .../debug/msvc/eigen_autoexp_part.dat | 0 .../demos/CMakeLists.txt | 0 .../demos/mandelbrot/CMakeLists.txt | 0 .../demos/mandelbrot/README | 0 .../demos/mandelbrot/mandelbrot.cpp | 0 .../demos/mandelbrot/mandelbrot.h | 0 .../demos/mix_eigen_and_c/README | 0 .../demos/mix_eigen_and_c/binary_library.cpp | 0 .../demos/mix_eigen_and_c/binary_library.h | 0 .../demos/mix_eigen_and_c/example.c | 0 .../demos/opengl/CMakeLists.txt | 0 .../demos/opengl/README | 0 .../demos/opengl/camera.cpp | 0 .../demos/opengl/camera.h | 0 .../demos/opengl/gpuhelper.cpp | 0 .../demos/opengl/gpuhelper.h | 0 .../demos/opengl/icosphere.cpp | 0 .../demos/opengl/icosphere.h | 0 .../demos/opengl/quaternion_demo.cpp | 0 .../demos/opengl/quaternion_demo.h | 0 .../demos/opengl/trackball.cpp | 0 .../demos/opengl/trackball.h | 0 .../doc/A05_PortingFrom2To3.dox | 0 .../doc/A10_Eigen2SupportModes.dox | 0 .../doc/AsciiQuickReference.txt | 16 +- .../doc/B01_Experimental.dox | 0 .../doc/CMakeLists.txt | 4 +- .../doc/ClassHierarchy.dox | 0 .../doc/CustomizingEigen.dox | 0 .../doc/Doxyfile.in | 14 +- .../doc/Eigen_Silly_Professor_64x64.png | Bin .../doc/FixedSizeVectorizable.dox | 0 .../doc/FunctionsTakingEigenTypes.dox | 0 .../doc/HiPerformance.dox | 0 .../doc/InsideEigenExample.dox | 0 .../doc/Manual.dox | 3 + .../doc/MatrixfreeSolverExample.dox | 21 + .../doc/Overview.dox | 0 .../doc/PassingByValue.dox | 0 deps/eigen-3.2.8/doc/Pitfalls.dox | 38 + .../doc/PreprocessorDirectives.dox | 8 +- .../doc/QuickReference.dox | 0 .../doc/QuickStartGuide.dox | 0 .../doc/SparseLinearSystems.dox | 6 +- .../doc/SparseQuickReference.dox | 67 +- .../doc/StlContainers.dox | 0 .../doc/StorageOrders.dox | 0 .../doc/StructHavingEigenMembers.dox | 0 .../doc/TemplateKeyword.dox | 0 .../doc/TopicAliasing.dox | 0 .../doc/TopicAssertions.dox | 0 .../doc/TopicEigenExpressionTemplates.dox | 0 .../doc/TopicLazyEvaluation.dox | 0 .../doc/TopicLinearAlgebraDecompositions.dox | 0 .../doc/TopicMultithreading.dox | 2 +- .../doc/TopicResizing.dox | 0 .../doc/TopicScalarTypes.dox | 0 .../doc/TopicVectorization.dox | 0 .../doc/TutorialAdvancedInitialization.dox | 0 .../doc/TutorialArrayClass.dox | 0 .../doc/TutorialBlockOperations.dox | 0 .../doc/TutorialGeometry.dox | 0 .../doc/TutorialLinearAlgebra.dox | 0 .../doc/TutorialMapClass.dox | 0 .../doc/TutorialMatrixArithmetic.dox | 0 .../doc/TutorialMatrixClass.dox | 0 ...TutorialReductionsVisitorsBroadcasting.dox | 0 .../doc/TutorialSparse.dox | 31 +- .../doc/TutorialSparse_example_details.dox | 0 .../doc/UnalignedArrayAssert.dox | 15 +- .../doc/UsingIntelMKL.dox | 3 +- .../doc/WrongStackAlignment.dox | 0 .../doc/eigen_navtree_hacks.js | 0 .../doc/eigendoxy.css | 0 .../doc/eigendoxy_footer.html.in | 0 .../doc/eigendoxy_header.html.in | 0 .../doc/eigendoxy_layout.xml.in | 0 .../doc/eigendoxy_tabs.css | 0 .../doc/examples/.krazy | 0 .../doc/examples/CMakeLists.txt | 4 +- .../doc/examples/DenseBase_middleCols_int.cpp | 0 .../doc/examples/DenseBase_middleRows_int.cpp | 0 .../DenseBase_template_int_middleCols.cpp | 0 .../DenseBase_template_int_middleRows.cpp | 0 .../doc/examples/MatrixBase_cwise_const.cpp | 0 .../doc/examples/QuickStart_example.cpp | 0 .../examples/QuickStart_example2_dynamic.cpp | 0 .../examples/QuickStart_example2_fixed.cpp | 0 .../doc/examples/TemplateKeyword_flexible.cpp | 0 .../doc/examples/TemplateKeyword_simple.cpp | 0 .../examples/TutorialLinAlgComputeTwice.cpp | 0 .../TutorialLinAlgExComputeSolveError.cpp | 0 ...torialLinAlgExSolveColPivHouseholderQR.cpp | 0 .../examples/TutorialLinAlgExSolveLDLT.cpp | 0 .../TutorialLinAlgInverseDeterminant.cpp | 0 .../examples/TutorialLinAlgRankRevealing.cpp | 0 .../doc/examples/TutorialLinAlgSVDSolve.cpp | 0 .../TutorialLinAlgSelfAdjointEigenSolver.cpp | 0 .../examples/TutorialLinAlgSetThreshold.cpp | 0 .../Tutorial_ArrayClass_accessors.cpp | 0 .../examples/Tutorial_ArrayClass_addition.cpp | 0 .../Tutorial_ArrayClass_cwise_other.cpp | 0 .../examples/Tutorial_ArrayClass_interop.cpp | 0 .../Tutorial_ArrayClass_interop_matrix.cpp | 0 .../doc/examples/Tutorial_ArrayClass_mult.cpp | 0 ...orial_BlockOperations_block_assignment.cpp | 0 .../Tutorial_BlockOperations_colrow.cpp | 0 .../Tutorial_BlockOperations_corner.cpp | 0 .../Tutorial_BlockOperations_print_block.cpp | 0 .../Tutorial_BlockOperations_vector.cpp | 0 .../doc/examples/Tutorial_PartialLU_solve.cpp | 0 ...ionsVisitorsBroadcasting_broadcast_1nn.cpp | 0 ...sVisitorsBroadcasting_broadcast_simple.cpp | 0 ...sBroadcasting_broadcast_simple_rowwise.cpp | 0 ...ReductionsVisitorsBroadcasting_colwise.cpp | 0 ...ReductionsVisitorsBroadcasting_maxnorm.cpp | 0 ...nsVisitorsBroadcasting_reductions_bool.cpp | 0 ...nsVisitorsBroadcasting_reductions_norm.cpp | 0 ...ReductionsVisitorsBroadcasting_rowwise.cpp | 0 ...eductionsVisitorsBroadcasting_visitors.cpp | 0 .../Tutorial_simple_example_dynamic_size.cpp | 0 .../Tutorial_simple_example_fixed_size.cpp | 0 .../doc/examples/class_Block.cpp | 0 .../doc/examples/class_CwiseBinaryOp.cpp | 0 .../doc/examples/class_CwiseUnaryOp.cpp | 0 .../examples/class_CwiseUnaryOp_ptrfun.cpp | 0 .../doc/examples/class_FixedBlock.cpp | 0 .../doc/examples/class_FixedVectorBlock.cpp | 0 .../doc/examples/class_VectorBlock.cpp | 0 .../examples/function_taking_eigenbase.cpp | 0 .../doc/examples/function_taking_ref.cpp | 0 .../doc/examples/matrixfree_cg.cpp | 180 +++ .../doc/examples/tut_arithmetic_add_sub.cpp | 0 .../doc/examples/tut_arithmetic_dot_cross.cpp | 0 .../examples/tut_arithmetic_matrix_mul.cpp | 0 .../examples/tut_arithmetic_redux_basic.cpp | 0 .../tut_arithmetic_scalar_mul_div.cpp | 0 .../tut_matrix_coefficient_accessors.cpp | 0 .../doc/examples/tut_matrix_resize.cpp | 0 .../examples/tut_matrix_resize_fixed_size.cpp | 0 .../doc/snippets/.krazy | 0 .../doc/snippets/AngleAxis_mimic_euler.cpp | 0 .../doc/snippets/CMakeLists.txt | 6 +- .../snippets/ColPivHouseholderQR_solve.cpp | 0 .../snippets/ComplexEigenSolver_compute.cpp | 0 .../ComplexEigenSolver_eigenvalues.cpp | 0 .../ComplexEigenSolver_eigenvectors.cpp | 0 .../doc/snippets/ComplexSchur_compute.cpp | 0 .../doc/snippets/ComplexSchur_matrixT.cpp | 0 .../doc/snippets/ComplexSchur_matrixU.cpp | 0 .../doc/snippets/Cwise_abs.cpp | 0 .../doc/snippets/Cwise_abs2.cpp | 0 .../doc/snippets/Cwise_acos.cpp | 0 .../doc/snippets/Cwise_asin.cpp | 0 .../doc/snippets/Cwise_boolean_and.cpp | 0 .../doc/snippets/Cwise_boolean_or.cpp | 0 .../doc/snippets/Cwise_cos.cpp | 0 .../doc/snippets/Cwise_cube.cpp | 0 .../doc/snippets/Cwise_equal_equal.cpp | 0 .../doc/snippets/Cwise_exp.cpp | 0 .../doc/snippets/Cwise_greater.cpp | 0 .../doc/snippets/Cwise_greater_equal.cpp | 0 .../doc/snippets/Cwise_inverse.cpp | 0 .../doc/snippets/Cwise_less.cpp | 0 .../doc/snippets/Cwise_less_equal.cpp | 0 .../doc/snippets/Cwise_log.cpp | 0 .../doc/snippets/Cwise_max.cpp | 0 .../doc/snippets/Cwise_min.cpp | 0 .../doc/snippets/Cwise_minus.cpp | 0 .../doc/snippets/Cwise_minus_equal.cpp | 0 .../doc/snippets/Cwise_not_equal.cpp | 0 .../doc/snippets/Cwise_plus.cpp | 0 .../doc/snippets/Cwise_plus_equal.cpp | 0 .../doc/snippets/Cwise_pow.cpp | 0 .../doc/snippets/Cwise_product.cpp | 0 .../doc/snippets/Cwise_quotient.cpp | 0 .../doc/snippets/Cwise_sin.cpp | 0 .../doc/snippets/Cwise_slash_equal.cpp | 0 .../doc/snippets/Cwise_sqrt.cpp | 0 .../doc/snippets/Cwise_square.cpp | 0 .../doc/snippets/Cwise_tan.cpp | 0 .../doc/snippets/Cwise_times_equal.cpp | 0 .../doc/snippets/DenseBase_LinSpaced.cpp | 0 .../doc/snippets/DenseBase_LinSpaced_seq.cpp | 0 .../doc/snippets/DenseBase_setLinSpaced.cpp | 0 .../doc/snippets/DirectionWise_replicate.cpp | 0 .../snippets/DirectionWise_replicate_int.cpp | 0 .../EigenSolver_EigenSolver_MatrixType.cpp | 0 .../doc/snippets/EigenSolver_compute.cpp | 0 .../doc/snippets/EigenSolver_eigenvalues.cpp | 0 .../doc/snippets/EigenSolver_eigenvectors.cpp | 0 .../EigenSolver_pseudoEigenvectors.cpp | 0 .../snippets/FullPivHouseholderQR_solve.cpp | 0 .../doc/snippets/FullPivLU_image.cpp | 0 .../doc/snippets/FullPivLU_kernel.cpp | 0 .../doc/snippets/FullPivLU_solve.cpp | 0 .../doc/snippets/GeneralizedEigenSolver.cpp | 0 .../HessenbergDecomposition_compute.cpp | 0 .../HessenbergDecomposition_matrixH.cpp | 0 .../HessenbergDecomposition_packedMatrix.cpp | 0 .../snippets/HouseholderQR_householderQ.cpp | 0 .../doc/snippets/HouseholderQR_solve.cpp | 0 ...ouseholderSequence_HouseholderSequence.cpp | 0 .../doc/snippets/IOFormat.cpp | 0 .../doc/snippets/JacobiSVD_basic.cpp | 0 .../doc/snippets/Jacobi_makeGivens.cpp | 0 .../doc/snippets/Jacobi_makeJacobi.cpp | 0 .../doc/snippets/LLT_example.cpp | 0 .../doc/snippets/LLT_solve.cpp | 0 .../doc/snippets/Map_general_stride.cpp | 0 .../doc/snippets/Map_inner_stride.cpp | 0 .../doc/snippets/Map_outer_stride.cpp | 0 .../doc/snippets/Map_placement_new.cpp | 0 .../doc/snippets/Map_simple.cpp | 0 .../doc/snippets/MatrixBase_adjoint.cpp | 0 .../doc/snippets/MatrixBase_all.cpp | 0 .../snippets/MatrixBase_applyOnTheLeft.cpp | 0 .../snippets/MatrixBase_applyOnTheRight.cpp | 0 .../doc/snippets/MatrixBase_array.cpp | 0 .../doc/snippets/MatrixBase_array_const.cpp | 0 .../doc/snippets/MatrixBase_asDiagonal.cpp | 0 .../doc/snippets/MatrixBase_block_int_int.cpp | 0 .../MatrixBase_block_int_int_int_int.cpp | 0 .../MatrixBase_bottomLeftCorner_int_int.cpp | 0 .../MatrixBase_bottomRightCorner_int_int.cpp | 0 .../snippets/MatrixBase_bottomRows_int.cpp | 0 .../doc/snippets/MatrixBase_cast.cpp | 0 .../doc/snippets/MatrixBase_col.cpp | 0 .../doc/snippets/MatrixBase_colwise.cpp | 0 ...trixBase_computeInverseAndDetWithCheck.cpp | 0 .../MatrixBase_computeInverseWithCheck.cpp | 0 .../doc/snippets/MatrixBase_cwiseAbs.cpp | 0 .../doc/snippets/MatrixBase_cwiseAbs2.cpp | 0 .../doc/snippets/MatrixBase_cwiseEqual.cpp | 0 .../doc/snippets/MatrixBase_cwiseInverse.cpp | 0 .../doc/snippets/MatrixBase_cwiseMax.cpp | 0 .../doc/snippets/MatrixBase_cwiseMin.cpp | 0 .../doc/snippets/MatrixBase_cwiseNotEqual.cpp | 0 .../doc/snippets/MatrixBase_cwiseProduct.cpp | 0 .../doc/snippets/MatrixBase_cwiseQuotient.cpp | 0 .../doc/snippets/MatrixBase_cwiseSqrt.cpp | 0 .../doc/snippets/MatrixBase_diagonal.cpp | 0 .../doc/snippets/MatrixBase_diagonal_int.cpp | 0 .../MatrixBase_diagonal_template_int.cpp | 0 .../doc/snippets/MatrixBase_eigenvalues.cpp | 0 .../doc/snippets/MatrixBase_end_int.cpp | 0 .../doc/snippets/MatrixBase_eval.cpp | 0 .../doc/snippets/MatrixBase_extract.cpp | 0 .../MatrixBase_fixedBlock_int_int.cpp | 0 .../doc/snippets/MatrixBase_identity.cpp | 0 .../snippets/MatrixBase_identity_int_int.cpp | 0 .../doc/snippets/MatrixBase_inverse.cpp | 0 .../doc/snippets/MatrixBase_isDiagonal.cpp | 0 .../doc/snippets/MatrixBase_isIdentity.cpp | 0 .../doc/snippets/MatrixBase_isOnes.cpp | 0 .../doc/snippets/MatrixBase_isOrthogonal.cpp | 0 .../doc/snippets/MatrixBase_isUnitary.cpp | 0 .../doc/snippets/MatrixBase_isZero.cpp | 0 .../doc/snippets/MatrixBase_leftCols_int.cpp | 0 .../doc/snippets/MatrixBase_marked.cpp | 0 .../doc/snippets/MatrixBase_noalias.cpp | 0 .../doc/snippets/MatrixBase_ones.cpp | 0 .../doc/snippets/MatrixBase_ones_int.cpp | 0 .../doc/snippets/MatrixBase_ones_int_int.cpp | 0 .../doc/snippets/MatrixBase_operatorNorm.cpp | 0 .../doc/snippets/MatrixBase_part.cpp | 0 .../doc/snippets/MatrixBase_prod.cpp | 0 .../doc/snippets/MatrixBase_random.cpp | 0 .../doc/snippets/MatrixBase_random_int.cpp | 0 .../snippets/MatrixBase_random_int_int.cpp | 0 .../doc/snippets/MatrixBase_replicate.cpp | 0 .../snippets/MatrixBase_replicate_int_int.cpp | 0 .../doc/snippets/MatrixBase_reverse.cpp | 0 .../doc/snippets/MatrixBase_rightCols_int.cpp | 0 .../doc/snippets/MatrixBase_row.cpp | 0 .../doc/snippets/MatrixBase_rowwise.cpp | 0 .../snippets/MatrixBase_segment_int_int.cpp | 0 .../doc/snippets/MatrixBase_select.cpp | 0 .../doc/snippets/MatrixBase_set.cpp | 0 .../doc/snippets/MatrixBase_setIdentity.cpp | 0 .../doc/snippets/MatrixBase_setOnes.cpp | 0 .../doc/snippets/MatrixBase_setRandom.cpp | 0 .../doc/snippets/MatrixBase_setZero.cpp | 0 .../doc/snippets/MatrixBase_start_int.cpp | 0 .../MatrixBase_template_int_bottomRows.cpp | 0 .../snippets/MatrixBase_template_int_end.cpp | 0 ...template_int_int_block_int_int_int_int.cpp | 0 ...Base_template_int_int_bottomLeftCorner.cpp | 0 ...plate_int_int_bottomLeftCorner_int_int.cpp | 0 ...ase_template_int_int_bottomRightCorner.cpp | 0 ...late_int_int_bottomRightCorner_int_int.cpp | 0 ...rixBase_template_int_int_topLeftCorner.cpp | 0 ...template_int_int_topLeftCorner_int_int.cpp | 0 ...ixBase_template_int_int_topRightCorner.cpp | 0 ...emplate_int_int_topRightCorner_int_int.cpp | 0 .../MatrixBase_template_int_leftCols.cpp | 0 .../MatrixBase_template_int_rightCols.cpp | 0 .../MatrixBase_template_int_segment.cpp | 0 .../MatrixBase_template_int_start.cpp | 0 .../MatrixBase_template_int_topRows.cpp | 0 .../MatrixBase_topLeftCorner_int_int.cpp | 0 .../MatrixBase_topRightCorner_int_int.cpp | 0 .../doc/snippets/MatrixBase_topRows_int.cpp | 0 .../doc/snippets/MatrixBase_transpose.cpp | 0 .../doc/snippets/MatrixBase_zero.cpp | 0 .../doc/snippets/MatrixBase_zero_int.cpp | 0 .../doc/snippets/MatrixBase_zero_int_int.cpp | 0 .../snippets/Matrix_resize_NoChange_int.cpp | 0 .../doc/snippets/Matrix_resize_int.cpp | 0 .../snippets/Matrix_resize_int_NoChange.cpp | 0 .../doc/snippets/Matrix_resize_int_int.cpp | 0 .../doc/snippets/Matrix_setConstant_int.cpp | 0 .../snippets/Matrix_setConstant_int_int.cpp | 0 .../snippets/Matrix_setIdentity_int_int.cpp | 0 .../doc/snippets/Matrix_setOnes_int.cpp | 0 .../doc/snippets/Matrix_setOnes_int_int.cpp | 0 .../doc/snippets/Matrix_setRandom_int.cpp | 0 .../doc/snippets/Matrix_setRandom_int_int.cpp | 0 .../doc/snippets/Matrix_setZero_int.cpp | 0 .../doc/snippets/Matrix_setZero_int_int.cpp | 0 .../doc/snippets/PartialPivLU_solve.cpp | 0 .../doc/snippets/PartialRedux_count.cpp | 0 .../doc/snippets/PartialRedux_maxCoeff.cpp | 0 .../doc/snippets/PartialRedux_minCoeff.cpp | 0 .../doc/snippets/PartialRedux_norm.cpp | 0 .../doc/snippets/PartialRedux_prod.cpp | 0 .../doc/snippets/PartialRedux_squaredNorm.cpp | 0 .../doc/snippets/PartialRedux_sum.cpp | 0 .../doc/snippets/RealQZ_compute.cpp | 0 .../RealSchur_RealSchur_MatrixType.cpp | 0 .../doc/snippets/RealSchur_compute.cpp | 0 ...ointEigenSolver_SelfAdjointEigenSolver.cpp | 0 ...lver_SelfAdjointEigenSolver_MatrixType.cpp | 0 ...ver_SelfAdjointEigenSolver_MatrixType2.cpp | 0 ...fAdjointEigenSolver_compute_MatrixType.cpp | 0 ...AdjointEigenSolver_compute_MatrixType2.cpp | 0 .../SelfAdjointEigenSolver_eigenvalues.cpp | 0 .../SelfAdjointEigenSolver_eigenvectors.cpp | 0 ...AdjointEigenSolver_operatorInverseSqrt.cpp | 0 .../SelfAdjointEigenSolver_operatorSqrt.cpp | 0 .../snippets/SelfAdjointView_eigenvalues.cpp | 0 .../snippets/SelfAdjointView_operatorNorm.cpp | 0 .../doc/snippets/TopicAliasing_block.cpp | 0 .../snippets/TopicAliasing_block_correct.cpp | 0 .../doc/snippets/TopicAliasing_cwise.cpp | 0 .../doc/snippets/TopicAliasing_mult1.cpp | 0 .../doc/snippets/TopicAliasing_mult2.cpp | 0 .../doc/snippets/TopicAliasing_mult3.cpp | 0 .../snippets/TopicStorageOrders_example.cpp | 0 ...lization_Tridiagonalization_MatrixType.cpp | 0 .../snippets/Tridiagonalization_compute.cpp | 0 .../Tridiagonalization_decomposeInPlace.cpp | 0 .../snippets/Tridiagonalization_diagonal.cpp | 0 ...iagonalization_householderCoefficients.cpp | 0 .../Tridiagonalization_packedMatrix.cpp | 0 .../Tutorial_AdvancedInitialization_Block.cpp | 0 ..._AdvancedInitialization_CommaTemporary.cpp | 0 .../Tutorial_AdvancedInitialization_Join.cpp | 0 ...orial_AdvancedInitialization_LinSpaced.cpp | 0 ...orial_AdvancedInitialization_ThreeWays.cpp | 0 .../Tutorial_AdvancedInitialization_Zero.cpp | 0 .../doc/snippets/Tutorial_Map_rowmajor.cpp | 0 .../doc/snippets/Tutorial_Map_using.cpp | 0 .../doc/snippets/Tutorial_commainit_01.cpp | 0 .../doc/snippets/Tutorial_commainit_01b.cpp | 0 .../doc/snippets/Tutorial_commainit_02.cpp | 0 .../Tutorial_solve_matrix_inverse.cpp | 0 .../snippets/Tutorial_solve_multiple_rhs.cpp | 0 .../Tutorial_solve_reuse_decomposition.cpp | 0 .../doc/snippets/Tutorial_solve_singular.cpp | 0 .../snippets/Tutorial_solve_triangular.cpp | 0 .../Tutorial_solve_triangular_inplace.cpp | 0 .../doc/snippets/Vectorwise_reverse.cpp | 0 .../doc/snippets/class_FullPivLU.cpp | 0 .../doc/snippets/compile_snippet.cpp.in | 0 .../snippets/tut_arithmetic_redux_minmax.cpp | 0 .../tut_arithmetic_transpose_aliasing.cpp | 0 .../tut_arithmetic_transpose_conjugate.cpp | 0 .../tut_arithmetic_transpose_inplace.cpp | 0 .../tut_matrix_assignment_resizing.cpp | 0 .../doc/special_examples/CMakeLists.txt | 14 +- .../Tutorial_sparse_example.cpp | 0 .../Tutorial_sparse_example_details.cpp | 0 .../doc/tutorial.cpp | 0 .../{eigen-3.2.1 => eigen-3.2.8}/eigen3.pc.in | 7 +- .../failtest/CMakeLists.txt | 17 + .../block_nonconst_ctor_on_const_xpr_0.cpp | 0 .../block_nonconst_ctor_on_const_xpr_1.cpp | 0 .../block_nonconst_ctor_on_const_xpr_2.cpp | 0 .../block_on_const_type_actually_const_0.cpp | 0 .../block_on_const_type_actually_const_1.cpp | 0 deps/eigen-3.2.8/failtest/colpivqr_int.cpp | 14 + .../const_qualified_block_method_retval_0.cpp | 0 .../const_qualified_block_method_retval_1.cpp | 0 ...const_qualified_diagonal_method_retval.cpp | 0 ...onst_qualified_transpose_method_retval.cpp | 0 .../diagonal_nonconst_ctor_on_const_xpr.cpp | 0 .../diagonal_on_const_type_actually_const.cpp | 0 .../eigen-3.2.8/failtest/eigensolver_cplx.cpp | 14 + deps/eigen-3.2.8/failtest/eigensolver_int.cpp | 14 + .../failtest/failtest_sanity_check.cpp | 0 deps/eigen-3.2.8/failtest/fullpivlu_int.cpp | 14 + deps/eigen-3.2.8/failtest/fullpivqr_int.cpp | 14 + deps/eigen-3.2.8/failtest/jacobisvd_int.cpp | 14 + deps/eigen-3.2.8/failtest/ldlt_int.cpp | 14 + deps/eigen-3.2.8/failtest/llt_int.cpp | 14 + .../map_nonconst_ctor_on_const_ptr_0.cpp | 0 .../map_nonconst_ctor_on_const_ptr_1.cpp | 0 .../map_nonconst_ctor_on_const_ptr_2.cpp | 0 .../map_nonconst_ctor_on_const_ptr_3.cpp | 0 .../map_nonconst_ctor_on_const_ptr_4.cpp | 0 .../map_on_const_type_actually_const_0.cpp | 0 .../map_on_const_type_actually_const_1.cpp | 0 .../eigen-3.2.8/failtest/partialpivlu_int.cpp | 14 + deps/eigen-3.2.8/failtest/qr_int.cpp | 14 + deps/eigen-3.2.8/failtest/ref_1.cpp | 18 + deps/eigen-3.2.8/failtest/ref_2.cpp | 15 + deps/eigen-3.2.8/failtest/ref_3.cpp | 15 + deps/eigen-3.2.8/failtest/ref_4.cpp | 15 + deps/eigen-3.2.8/failtest/ref_5.cpp | 16 + .../transpose_nonconst_ctor_on_const_xpr.cpp | 0 ...transpose_on_const_type_actually_const.cpp | 0 .../lapack/CMakeLists.txt | 0 .../lapack/cholesky.cpp | 0 .../lapack/clacgv.f | 0 .../lapack/cladiv.f | 0 .../lapack/clarf.f | 0 .../lapack/clarfb.f | 0 .../lapack/clarfg.f | 0 .../lapack/clarft.f | 0 .../lapack/complex_double.cpp | 0 .../lapack/complex_single.cpp | 0 .../lapack/dladiv.f | 0 .../lapack/dlamch.f | 0 .../lapack/dlapy2.f | 0 .../lapack/dlapy3.f | 0 .../lapack/dlarf.f | 0 .../lapack/dlarfb.f | 0 .../lapack/dlarfg.f | 0 .../lapack/dlarft.f | 0 .../lapack/double.cpp | 0 .../lapack/dsecnd_NONE.f | 0 .../lapack/eigenvalues.cpp | 0 .../lapack/ilaclc.f | 0 .../lapack/ilaclr.f | 0 .../lapack/iladlc.f | 0 .../lapack/iladlr.f | 0 .../lapack/ilaslc.f | 0 .../lapack/ilaslr.f | 0 .../lapack/ilazlc.f | 0 .../lapack/ilazlr.f | 0 .../lapack/lapack_common.h | 0 .../lapack/lu.cpp | 0 .../lapack/second_NONE.f | 0 .../lapack/single.cpp | 0 .../lapack/sladiv.f | 0 .../lapack/slamch.f | 0 .../lapack/slapy2.f | 0 .../lapack/slapy3.f | 0 .../lapack/slarf.f | 0 .../lapack/slarfb.f | 0 .../lapack/slarfg.f | 0 .../lapack/slarft.f | 0 .../lapack/zlacgv.f | 0 .../lapack/zladiv.f | 0 .../lapack/zlarf.f | 0 .../lapack/zlarfb.f | 0 .../lapack/zlarfg.f | 0 .../lapack/zlarft.f | 0 .../scripts/CMakeLists.txt | 0 .../scripts/buildtests.in | 0 .../scripts/cdashtesting.cmake.in | 0 .../scripts/check.in | 0 .../scripts/debug.in | 0 .../scripts/eigen_gen_credits.cpp | 0 .../scripts/eigen_gen_docs | 0 .../scripts/release.in | 0 .../scripts/relicense.py | 0 .../signature_of_eigen3_matrix_library | 0 .../test/CMakeLists.txt | 13 +- .../test/adjoint.cpp | 0 .../test/array.cpp | 2 + .../test/array_for_matrix.cpp | 1 + .../test/array_replicate.cpp | 0 .../test/array_reverse.cpp | 0 .../test/bandmatrix.cpp | 0 .../test/basicstuff.cpp | 0 .../test/bicgstab.cpp | 0 .../test/block.cpp | 25 +- .../test/cholesky.cpp | 64 +- .../test/cholmod_support.cpp | 0 .../test/commainitializer.cpp | 0 .../test/conjugate_gradient.cpp | 6 +- .../test/conservative_resize.cpp | 0 .../test/corners.cpp | 0 .../test/cwiseop.cpp | 2 + .../test/denseLM.cpp | 0 .../test/determinant.cpp | 0 .../test/diagonal.cpp | 0 .../test/diagonalmatrices.cpp | 0 .../test/dontalign.cpp | 0 .../test/dynalloc.cpp | 41 +- .../test/eigen2/CMakeLists.txt | 1 + .../test/eigen2/eigen2_adjoint.cpp | 2 - .../test/eigen2/eigen2_alignedbox.cpp | 0 .../test/eigen2/eigen2_array.cpp | 0 .../test/eigen2/eigen2_basicstuff.cpp | 3 - .../test/eigen2/eigen2_bug_132.cpp | 0 .../test/eigen2/eigen2_cholesky.cpp | 0 .../test/eigen2/eigen2_commainitializer.cpp | 0 .../test/eigen2/eigen2_cwiseop.cpp | 7 +- .../test/eigen2/eigen2_determinant.cpp | 0 .../test/eigen2/eigen2_dynalloc.cpp | 0 .../test/eigen2/eigen2_eigensolver.cpp | 0 .../test/eigen2/eigen2_first_aligned.cpp | 0 .../test/eigen2/eigen2_geometry.cpp | 1 + .../eigen2_geometry_with_eigen2_prefix.cpp | 1 + .../test/eigen2/eigen2_hyperplane.cpp | 0 .../test/eigen2/eigen2_inverse.cpp | 1 - .../test/eigen2/eigen2_linearstructure.cpp | 3 +- .../test/eigen2/eigen2_lu.cpp | 0 .../test/eigen2/eigen2_map.cpp | 0 .../test/eigen2/eigen2_meta.cpp | 0 .../test/eigen2/eigen2_miscmatrices.cpp | 0 .../test/eigen2/eigen2_mixingtypes.cpp | 0 .../test/eigen2/eigen2_newstdvector.cpp | 0 .../test/eigen2/eigen2_nomalloc.cpp | 12 +- .../test/eigen2/eigen2_packetmath.cpp | 0 .../test/eigen2/eigen2_parametrizedline.cpp | 0 .../test/eigen2/eigen2_prec_inverse_4x4.cpp | 0 .../test/eigen2/eigen2_product_large.cpp | 0 .../test/eigen2/eigen2_product_small.cpp | 0 .../test/eigen2/eigen2_qr.cpp | 0 .../test/eigen2/eigen2_qtvector.cpp | 0 .../test/eigen2/eigen2_regression.cpp | 0 .../test/eigen2/eigen2_sizeof.cpp | 0 .../test/eigen2/eigen2_smallvectors.cpp | 0 .../test/eigen2/eigen2_sparse_basic.cpp | 0 .../test/eigen2/eigen2_sparse_product.cpp | 0 .../test/eigen2/eigen2_sparse_solvers.cpp | 0 .../test/eigen2/eigen2_sparse_vector.cpp | 0 .../test/eigen2/eigen2_stdvector.cpp | 0 .../test/eigen2/eigen2_submatrices.cpp | 8 +- .../test/eigen2/eigen2_sum.cpp | 0 .../test/eigen2/eigen2_svd.cpp | 0 .../test/eigen2/eigen2_swap.cpp | 0 .../test/eigen2/eigen2_triangular.cpp | 12 +- .../test/eigen2/eigen2_unalignedassert.cpp | 0 .../test/eigen2/eigen2_visitor.cpp | 0 .../test/eigen2/gsl_helper.h | 0 .../test/eigen2/main.h | 0 .../test/eigen2/product.h | 7 +- .../test/eigen2/runtest.sh | 0 .../test/eigen2/sparse.h | 0 .../test/eigen2/testsuite.cmake | 0 .../test/eigen2support.cpp | 1 + .../test/eigensolver_complex.cpp | 0 .../test/eigensolver_generalized_real.cpp | 0 .../test/eigensolver_generic.cpp | 0 .../test/eigensolver_selfadjoint.cpp | 43 +- .../test/exceptions.cpp | 0 .../test/first_aligned.cpp | 0 .../test/geo_alignedbox.cpp | 2 + .../test/geo_eulerangles.cpp | 0 .../test/geo_homogeneous.cpp | 0 .../test/geo_hyperplane.cpp | 28 + .../test/geo_orthomethods.cpp | 0 .../test/geo_parametrizedline.cpp | 0 .../test/geo_quaternion.cpp | 0 .../test/geo_transformations.cpp | 50 +- .../test/hessenberg.cpp | 0 .../test/householder.cpp | 0 .../test/integer_types.cpp | 0 .../test/inverse.cpp | 0 .../test/jacobi.cpp | 0 .../test/jacobisvd.cpp | 157 ++- .../test/linearstructure.cpp | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/test/lu.cpp | 9 +- deps/{eigen-3.2.1 => eigen-3.2.8}/test/main.h | 45 +- .../test/mapped_matrix.cpp | 24 + .../test/mapstaticmethods.cpp | 0 .../test/mapstride.cpp | 0 .../test/meta.cpp | 0 .../test/metis_support.cpp | 0 .../test/miscmatrices.cpp | 0 .../test/mixingtypes.cpp | 0 deps/eigen-3.2.8/test/mpl2only.cpp | 20 + .../test/nesting_ops.cpp | 0 .../test/nomalloc.cpp | 35 +- .../test/nullary.cpp | 4 +- .../test/packetmath.cpp | 22 +- .../test/pardiso_support.cpp | 0 .../test/pastix_support.cpp | 0 .../test/permutationmatrices.cpp | 0 .../test/prec_inverse_4x4.cpp | 0 .../test/product.h | 43 +- .../test/product_extra.cpp | 64 +- .../test/product_large.cpp | 23 + .../test/product_mmtr.cpp | 4 +- .../test/product_notemporary.cpp | 9 + .../test/product_selfadjoint.cpp | 0 .../test/product_small.cpp | 0 .../test/product_symm.cpp | 0 .../test/product_syrk.cpp | 0 .../test/product_trmm.cpp | 0 .../test/product_trmv.cpp | 0 .../test/product_trsolve.cpp | 0 deps/{eigen-3.2.1 => eigen-3.2.8}/test/qr.cpp | 0 .../test/qr_colpivoting.cpp | 0 .../test/qr_fullpivoting.cpp | 0 .../test/qtvector.cpp | 0 .../test/real_qz.cpp | 16 + .../test/redux.cpp | 8 + .../{eigen-3.2.1 => eigen-3.2.8}/test/ref.cpp | 141 +- .../test/resize.cpp | 0 .../test/runtest.sh | 0 deps/eigen-3.2.8/test/rvalue_types.cpp | 62 + .../test/schur_complex.cpp | 0 .../test/schur_real.cpp | 0 .../test/selfadjoint.cpp | 0 deps/eigen-3.2.8/test/simplicial_cholesky.cpp | 45 + .../test/sizeof.cpp | 0 .../test/sizeoverflow.cpp | 0 .../test/smallvectors.cpp | 0 .../test/sparse.h | 0 .../test/sparseLM.cpp | 0 .../test/sparse_basic.cpp | 81 +- .../test/sparse_permutations.cpp | 0 .../test/sparse_product.cpp | 0 .../test/sparse_solver.h | 73 +- .../test/sparse_solvers.cpp | 0 .../test/sparse_vector.cpp | 0 .../test/sparselu.cpp | 12 +- .../test/sparseqr.cpp | 36 +- .../test/special_numbers.cpp | 0 .../test/spqr_support.cpp | 0 .../test/stable_norm.cpp | 5 - .../test/stddeque.cpp | 0 deps/eigen-3.2.8/test/stddeque_overload.cpp | 158 +++ .../test/stdlist.cpp | 0 deps/eigen-3.2.8/test/stdlist_overload.cpp | 192 +++ .../test/stdvector.cpp | 0 .../test/stdvector_overload.cpp | 0 .../test/superlu_support.cpp | 0 .../test/swap.cpp | 0 .../test/testsuite.cmake | 0 .../test/triangular.cpp | 0 .../test/umeyama.cpp | 0 .../test/umfpack_support.cpp | 0 .../test/unalignedassert.cpp | 0 .../test/unalignedcount.cpp | 0 .../test/upperbidiagonalization.cpp | 0 .../test/vectorization_logic.cpp | 0 .../test/vectorwiseop.cpp | 12 + .../test/visitor.cpp | 5 + .../test/zerosized.cpp | 0 .../unsupported/CMakeLists.txt | 0 .../unsupported/Eigen/AdolcForward | 0 .../unsupported/Eigen/AlignedVector3 | 2 +- .../unsupported/Eigen/ArpackSupport | 0 .../unsupported/Eigen/AutoDiff | 0 .../unsupported/Eigen/BVH | 0 .../unsupported/Eigen/CMakeLists.txt | 11 + .../unsupported/Eigen/FFT | 0 .../unsupported/Eigen/IterativeSolvers | 0 .../unsupported/Eigen/KroneckerProduct | 0 .../unsupported/Eigen/LevenbergMarquardt | 0 .../unsupported/Eigen/MPRealSupport | 0 .../unsupported/Eigen/MatrixFunctions | 0 .../unsupported/Eigen/MoreVectorization | 0 .../unsupported/Eigen/NonLinearOptimization | 0 .../unsupported/Eigen/NumericalDiff | 0 .../unsupported/Eigen/OpenGLSupport | 34 +- .../unsupported/Eigen/Polynomials | 0 .../unsupported/Eigen/SVD | 0 .../unsupported/Eigen/Skyline | 0 .../unsupported/Eigen/SparseExtra | 0 .../unsupported/Eigen/Splines | 0 .../Eigen/src/AutoDiff/AutoDiffJacobian.h | 0 .../Eigen/src/AutoDiff/AutoDiffScalar.h | 2 +- .../Eigen/src/AutoDiff/AutoDiffVector.h | 0 .../Eigen/src/AutoDiff/CMakeLists.txt | 0 .../unsupported/Eigen/src/BVH/BVAlgorithms.h | 0 .../unsupported/Eigen/src/BVH/CMakeLists.txt | 0 .../unsupported/Eigen/src/BVH/KdBVH.h | 0 .../unsupported/Eigen/src/CMakeLists.txt | 4 +- .../ArpackSelfAdjointEigenSolver.h | 0 .../Eigen/src/Eigenvalues/CMakeLists.txt | 6 + .../unsupported/Eigen/src/FFT/CMakeLists.txt | 0 .../unsupported/Eigen/src/FFT/ei_fftw_impl.h | 0 .../Eigen/src/FFT/ei_kissfft_impl.h | 0 .../Eigen/src/IterativeSolvers/CMakeLists.txt | 0 .../IterativeSolvers/ConstrainedConjGrad.h | 0 .../Eigen/src/IterativeSolvers/DGMRES.h | 4 +- .../Eigen/src/IterativeSolvers/GMRES.h | 30 +- .../src/IterativeSolvers/IncompleteCholesky.h | 0 .../Eigen/src/IterativeSolvers/IncompleteLU.h | 0 .../IterativeSolvers/IterationController.h | 0 .../Eigen/src/IterativeSolvers/MINRES.h | 73 +- .../Eigen/src/IterativeSolvers/Scaling.h | 0 .../Eigen/src/KroneckerProduct/CMakeLists.txt | 0 .../KroneckerProduct/KroneckerTensorProduct.h | 0 .../src/LevenbergMarquardt/CMakeLists.txt | 2 +- .../LevenbergMarquardt/CopyrightMINPACK.txt | 0 .../Eigen/src/LevenbergMarquardt/LMcovar.h | 0 .../Eigen/src/LevenbergMarquardt/LMonestep.h | 0 .../Eigen/src/LevenbergMarquardt/LMpar.h | 0 .../Eigen/src/LevenbergMarquardt/LMqrsolv.h | 0 .../LevenbergMarquardt/LevenbergMarquardt.h | 0 .../Eigen/src/MatrixFunctions/CMakeLists.txt | 0 .../src/MatrixFunctions/MatrixExponential.h | 0 .../src/MatrixFunctions/MatrixFunction.h | 0 .../MatrixFunctions/MatrixFunctionAtomic.h | 0 .../src/MatrixFunctions/MatrixLogarithm.h | 0 .../Eigen/src/MatrixFunctions/MatrixPower.h | 1 - .../src/MatrixFunctions/MatrixSquareRoot.h | 0 .../Eigen/src/MatrixFunctions/StemFunction.h | 0 .../src/MoreVectorization/CMakeLists.txt | 0 .../src/MoreVectorization/MathFunctions.h | 0 .../src/NonLinearOptimization/CMakeLists.txt | 0 .../HybridNonLinearSolver.h | 0 .../LevenbergMarquardt.h | 0 .../Eigen/src/NonLinearOptimization/chkder.h | 0 .../Eigen/src/NonLinearOptimization/covar.h | 0 .../Eigen/src/NonLinearOptimization/dogleg.h | 0 .../Eigen/src/NonLinearOptimization/fdjac1.h | 0 .../Eigen/src/NonLinearOptimization/lmpar.h | 0 .../Eigen/src/NonLinearOptimization/qrsolv.h | 0 .../Eigen/src/NonLinearOptimization/r1mpyq.h | 0 .../Eigen/src/NonLinearOptimization/r1updt.h | 0 .../Eigen/src/NonLinearOptimization/rwupdt.h | 0 .../Eigen/src/NumericalDiff/CMakeLists.txt | 0 .../Eigen/src/NumericalDiff/NumericalDiff.h | 0 .../Eigen/src/Polynomials/CMakeLists.txt | 0 .../Eigen/src/Polynomials/Companion.h | 0 .../Eigen/src/Polynomials/PolynomialSolver.h | 0 .../Eigen/src/Polynomials/PolynomialUtils.h | 0 .../unsupported/Eigen/src/SVD/BDCSVD.h | 0 .../unsupported/Eigen/src/SVD/CMakeLists.txt | 0 .../unsupported/Eigen/src/SVD/JacobiSVD.h | 0 .../unsupported/Eigen/src/SVD/SVDBase.h | 0 .../unsupported/Eigen/src/SVD/TODOBdcsvd.txt | 0 .../Eigen/src/SVD/doneInBDCSVD.txt | 0 .../Eigen/src/Skyline/CMakeLists.txt | 0 .../Eigen/src/Skyline/SkylineInplaceLU.h | 0 .../Eigen/src/Skyline/SkylineMatrix.h | 0 .../Eigen/src/Skyline/SkylineMatrixBase.h | 0 .../Eigen/src/Skyline/SkylineProduct.h | 0 .../Eigen/src/Skyline/SkylineStorage.h | 0 .../Eigen/src/Skyline/SkylineUtil.h | 0 .../SparseExtra/BlockOfDynamicSparseMatrix.h | 0 .../Eigen/src/SparseExtra/CMakeLists.txt | 0 .../src/SparseExtra/DynamicSparseMatrix.h | 0 .../Eigen/src/SparseExtra/MarketIO.h | 0 .../src/SparseExtra/MatrixMarketIterator.h | 0 .../Eigen/src/SparseExtra/RandomSetter.h | 0 .../Eigen/src/Splines/CMakeLists.txt | 0 .../unsupported/Eigen/src/Splines/Spline.h | 0 .../Eigen/src/Splines/SplineFitting.h | 0 .../unsupported/Eigen/src/Splines/SplineFwd.h | 0 .../unsupported/README.txt | 0 .../unsupported/bench/bench_svd.cpp | 0 .../unsupported/doc/CMakeLists.txt | 0 .../unsupported/doc/Overview.dox | 0 .../unsupported/doc/eigendoxy_layout.xml.in | 0 .../unsupported/doc/examples/BVH_Example.cpp | 0 .../unsupported/doc/examples/CMakeLists.txt | 4 +- .../unsupported/doc/examples/FFT.cpp | 0 .../doc/examples/MatrixExponential.cpp | 0 .../doc/examples/MatrixFunction.cpp | 0 .../doc/examples/MatrixLogarithm.cpp | 0 .../unsupported/doc/examples/MatrixPower.cpp | 0 .../doc/examples/MatrixPower_optimal.cpp | 0 .../unsupported/doc/examples/MatrixSine.cpp | 0 .../unsupported/doc/examples/MatrixSinh.cpp | 0 .../doc/examples/MatrixSquareRoot.cpp | 0 .../doc/examples/PolynomialSolver1.cpp | 0 .../doc/examples/PolynomialUtils1.cpp | 0 .../unsupported/doc/snippets/CMakeLists.txt | 4 +- .../unsupported/test/BVH.cpp | 0 .../unsupported/test/CMakeLists.txt | 7 +- .../unsupported/test/FFT.cpp | 0 .../unsupported/test/FFTW.cpp | 0 .../test/NonLinearOptimization.cpp | 0 .../unsupported/test/NumericalDiff.cpp | 0 .../unsupported/test/alignedvector3.cpp | 0 .../unsupported/test/autodiff.cpp | 45 +- .../unsupported/test/bdcsvd.cpp | 0 .../unsupported/test/dgmres.cpp | 0 .../unsupported/test/forward_adolc.cpp | 0 .../unsupported/test/gmres.cpp | 0 .../unsupported/test/jacobisvd.cpp | 0 .../unsupported/test/kronecker_product.cpp | 0 .../unsupported/test/levenberg_marquardt.cpp | 0 .../unsupported/test/matrix_exponential.cpp | 0 .../unsupported/test/matrix_function.cpp | 0 .../unsupported/test/matrix_functions.h | 0 .../unsupported/test/matrix_power.cpp | 0 .../unsupported/test/matrix_square_root.cpp | 0 .../unsupported/test/minres.cpp | 25 +- .../unsupported/test/mpreal/mpreal.h | 1164 ++++++++++------- .../unsupported/test/mpreal_support.cpp | 0 .../unsupported/test/openglsupport.cpp | 0 .../unsupported/test/polynomialsolver.cpp | 2 - .../unsupported/test/polynomialutils.cpp | 0 .../unsupported/test/sparse_extra.cpp | 0 .../unsupported/test/splines.cpp | 0 .../unsupported/test/svd_common.h | 0 1399 files changed, 5417 insertions(+), 2169 deletions(-) delete mode 100644 deps/eigen-3.2.1/cmake/FindMetis.cmake delete mode 100644 deps/eigen-3.2.1/test/simplicial_cholesky.cpp delete mode 100644 deps/eigen-3.2.1/unsupported/Eigen/CMakeLists.txt rename deps/{eigen-3.2.1 => eigen-3.2.8}/.hg_archival.txt (50%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/.hgeol (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/.hgignore (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/.hgtags (80%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/CMakeLists.txt (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.BSD (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.GPL (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.LGPL (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.MINPACK (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.MPL2 (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/COPYING.README (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/CTestConfig.cmake (75%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/CTestCustom.cmake.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Array (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Cholesky (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/CholmodSupport (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Core (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Dense (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Eigen (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Eigen2Support (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Eigenvalues (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Geometry (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Householder (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/IterativeLinearSolvers (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Jacobi (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/LU (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/LeastSquares (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/MetisSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/OrderingMethods (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/PaStiXSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/PardisoSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/QR (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/QtAlignedMalloc (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SPQRSupport (89%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SVD (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/Sparse (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SparseCholesky (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SparseCore (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SparseLU (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SparseQR (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/StdDeque (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/StdList (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/StdVector (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/SuperLUSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/UmfPackSupport (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Cholesky/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Cholesky/LDLT.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Cholesky/LLT.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Cholesky/LLT_MKL.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/CholmodSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/CholmodSupport/CholmodSupport.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Array.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/ArrayBase.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/ArrayWrapper.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Assign.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Assign_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/BandMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Block.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/BooleanRedux.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CommaInitializer.h (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CoreIterators.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CwiseBinaryOp.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CwiseNullaryOp.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CwiseUnaryOp.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/CwiseUnaryView.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/DenseBase.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/DenseCoeffsBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/DenseStorage.h (51%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Diagonal.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/DiagonalMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/DiagonalProduct.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Dot.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/EigenBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Flagged.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/ForceAlignedAccess.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Functors.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Fuzzy.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/GeneralProduct.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/GenericPacketMath.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/GlobalFunctions.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/IO.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Map.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/MapBase.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/MathFunctions.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Matrix.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/MatrixBase.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/NestByValue.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/NoAlias.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/NumTraits.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/PermutationMatrix.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/PlainObjectBase.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/ProductBase.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Random.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Redux.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Ref.h (81%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Replicate.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/ReturnByValue.h (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Reverse.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Select.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/SelfAdjointView.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/SelfCwiseBinaryOp.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/SolveTriangular.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/StableNorm.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Stride.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Swap.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Transpose.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Transpositions.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/TriangularMatrix.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/VectorBlock.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/VectorwiseOp.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/Visitor.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/AltiVec/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/AltiVec/Complex.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/AltiVec/PacketMath.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/Default/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/Default/Settings.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/NEON/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/NEON/Complex.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/NEON/PacketMath.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/SSE/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/SSE/Complex.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/SSE/MathFunctions.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/arch/SSE/PacketMath.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/CoeffBasedProduct.h (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralBlockPanelKernel.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixMatrix.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/GeneralMatrixVector_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/Parallelizer.h (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointMatrixMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointMatrixVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/SelfadjointRank2Update.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularMatrixMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularMatrixVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularMatrixVector_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularSolverMatrix.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/products/TriangularSolverVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/BlasUtil.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/Constants.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/DisableStupidWarnings.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/ForwardDeclarations.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/MKL_support.h (72%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/Macros.h (67%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/Memory.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/Meta.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/NonMPL2.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/ReenableStupidWarnings.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/StaticAssert.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Core/util/XprHelper.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Block.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Cwise.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/CwiseOperators.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/AlignedBox.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/All.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/AngleAxis.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Hyperplane.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Quaternion.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Rotation2D.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/RotationBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Scaling.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Transform.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Geometry/Translation.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/LU.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Lazy.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/LeastSquares.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Macros.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/MathFunctions.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Memory.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Meta.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/Minor.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/QR.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/SVD.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/TriangularSolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigen2Support/VectorBlock.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/ComplexEigenSolver.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/ComplexSchur.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/ComplexSchur_MKL.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/EigenSolver.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/HessenbergDecomposition.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/RealQZ.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/RealSchur.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/RealSchur_MKL.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Eigenvalues/Tridiagonalization.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/AlignedBox.h (82%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/AngleAxis.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/EulerAngles.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Homogeneous.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Hyperplane.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/OrthoMethods.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/ParametrizedLine.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Quaternion.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Rotation2D.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/RotationBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Scaling.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Transform.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Translation.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/Umeyama.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/arch/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Geometry/arch/Geometry_SSE.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Householder/BlockHouseholder.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Householder/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Householder/Householder.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Householder/HouseholderSequence.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h (89%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h (87%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Jacobi/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/Jacobi/Jacobi.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/Determinant.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/FullPivLU.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/Inverse.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/PartialPivLU.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/PartialPivLU_MKL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/arch/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/LU/arch/Inverse_SSE.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/MetisSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/MetisSupport/MetisSupport.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/OrderingMethods/Amd.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/OrderingMethods/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/OrderingMethods/Eigen_Colamd.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/OrderingMethods/Ordering.h (87%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/PaStiXSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/PaStiXSupport/PaStiXSupport.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/PardisoSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/PardisoSupport/PardisoSupport.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/ColPivHouseholderQR.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/ColPivHouseholderQR_MKL.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/FullPivHouseholderQR.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/HouseholderQR.h (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/QR/HouseholderQR_MKL.h (75%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SPQRSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SVD/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SVD/JacobiSVD.h (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SVD/JacobiSVD_MKL.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SVD/UpperBidiagonalization.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCholesky/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCholesky/SimplicialCholesky.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/AmbiVector.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/CompressedStorage.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/MappedSparseMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseBlock.h (76%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseColEtree.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseCwiseBinaryOp.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseCwiseUnaryOp.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseDenseProduct.h (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseDiagonalProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseDot.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseFuzzy.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseMatrix.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseMatrixBase.h (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparsePermutation.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseRedux.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseSelfAdjointView.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseSparseProductWithPruning.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseTranspose.h (81%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseTriangularView.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseUtil.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseVector.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/SparseView.h (91%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseCore/TriangularSolver.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU.h (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLUImpl.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_Memory.h (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_Structs.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_Utils.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_column_bmod.h (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_column_dfs.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_gemm_kernel.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_kernel_bmod.h (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_panel_bmod.h (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_panel_dfs.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_pivotL.h (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_pruneL.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseLU/SparseLU_relax_snode.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseQR/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SparseQR/SparseQR.h (80%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/StlSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/StlSupport/StdDeque.h (87%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/StlSupport/StdList.h (85%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/StlSupport/StdVector.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/StlSupport/details.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SuperLUSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/SuperLUSupport/SuperLUSupport.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/UmfPackSupport/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/UmfPackSupport/UmfPackSupport.h (85%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/Image.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/Kernel.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/Solve.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/SparseSolve.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/misc/blas.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/ArrayCwiseBinaryOps.h (75%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/ArrayCwiseUnaryOps.h (86%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/BlockMethods.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/CommonCwiseBinaryOps.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/CommonCwiseUnaryOps.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/MatrixCwiseBinaryOps.h (86%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/Eigen/src/plugins/MatrixCwiseUnaryOps.h (71%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/INSTALL (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/BenchSparseUtil.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/BenchTimer.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/BenchUtil.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/README.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/basicbench.cxxlist (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/basicbenchmark.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/basicbenchmark.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchBlasGemm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchCholesky.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchEigenSolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchFFT.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchGeometry.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchVecAdd.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_gemm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_multi_compilers.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_norm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_reverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_sum.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/bench_unrolling (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchmark.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchmarkSlice.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchmarkX.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchmarkXcwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/benchmark_suite (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/COPYING (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/README (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_aat_product.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_ata_product.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_atv_product.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_axpby.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_axpy.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_cholesky.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_ger.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_hessenberg.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_lu_decomp.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_lu_solve.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_matrix_matrix_product.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_matrix_matrix_product_bis.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_matrix_vector_product.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_partial_lu.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_rot.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_symv.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_syr2.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_trisolve.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_trisolve_matrix.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/action_trmm.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/actions/basic_actions.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindACML.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindATLAS.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindBlitz.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindCBLAS.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindGMM.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindGOTO.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindGOTO2.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindMKL.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindMTL4.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindPackageHandleStandardArgs.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/FindTvmet.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/action_settings.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/gnuplot_common_settings.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/go_mean (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/mean.cxx (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/mk_gnuplot_script.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/mk_mean_script.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/mk_new_gnuplot.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/perlib_plot_settings.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/regularize.cxx (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/smooth.cxx (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/data/smooth_all.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/bench.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/bench_parameter.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/btl.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/init/init_function.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/init/init_matrix.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/init/init_vector.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/static/bench_static.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/static/intel_bench_fixed_size.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/static/static_size_generator.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/STL_perf_analyzer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/STL_timer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/portable_perf_analyzer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/portable_timer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/x86_perf_analyzer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/timers/x86_timer.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/utils/size_lin_log.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/utils/size_log.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/utils/utilities.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/generic_bench/utils/xy_file.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/blas.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/blas_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/blas_interface_impl.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/c_interface_base.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/BLAS/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/STL/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/STL/STL_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/STL/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/blitz_LU_solve_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/blitz_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/btl_blitz.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/btl_tiny_blitz.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/blitz/tiny_blitz_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/eigen2_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/main_adv.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/main_linear.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/main_matmat.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen2/main_vecmat.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/eigen3_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/main_adv.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/main_linear.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/main_matmat.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/eigen3/main_vecmat.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/gmm/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/gmm/gmm_LU_solve_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/gmm/gmm_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/gmm/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/mtl4/.kdbgrc.main (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/mtl4/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/mtl4/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/mtl4/mtl4_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/tvmet/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/tvmet/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/tvmet/tvmet_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/ublas/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/ublas/main.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/btl/libs/ublas/ublas_interface.hh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/check_cache_queries.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/eig33.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/geometry.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/product_threshold.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/quat_slerp.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/quatmul.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_cholesky.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_dense_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_lu.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_randomsetter.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_setter.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_transpose.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/sparse_trisolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/sp_solver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/spbench.dtd (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/spbenchsolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/spbenchsolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/spbenchstyle.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spbench/test_sparseLU.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/spmv.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/bench/vdw_new.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/BandTriangularSolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/GeneralRank1Update.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/PackedSelfadjointProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/PackedTriangularMatrixVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/PackedTriangularSolverVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/README.txt (60%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/Rank2Update.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/chbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/chpmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/common.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/complex_double.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/complex_single.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/complexdots.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/ctbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/double.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/drotm.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/drotmg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/dsbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/dspmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/dtbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level1_cplx_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level1_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level1_real_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level2_cplx_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level2_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level2_real_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/level3_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/lsame.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/single.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/srotm.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/srotmg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/ssbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/sspmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/stbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/cblat1.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/cblat2.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/cblat2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/cblat3.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/cblat3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/dblat1.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/dblat2.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/dblat2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/dblat3.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/dblat3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/runblastest.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/sblat1.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/sblat2.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/sblat2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/sblat3.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/sblat3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/zblat1.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/zblat2.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/zblat2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/zblat3.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/testing/zblat3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/xerbla.cpp (81%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/zhbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/zhpmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/blas/ztbmv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/EigenConfigureTesting.cmake (64%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/EigenDetermineOSVersion.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/EigenDetermineVSServicePack.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/EigenTesting.cmake (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindAdolc.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindBLAS.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindCholmod.cmake (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindEigen2.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindEigen3.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindFFTW.cmake (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindGLEW.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindGMP.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindGSL.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindGoogleHash.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindLAPACK.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindMPFR.cmake (100%) create mode 100644 deps/eigen-3.2.8/cmake/FindMetis.cmake rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindPastix.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindSPQR.cmake (78%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindScotch.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindStandardMathLibrary.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindSuperLU.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/FindUmfpack.cmake (78%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/RegexUtils.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/cmake/language_support.cmake (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/debug/gdb/__init__.py (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/debug/gdb/printers.py (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/debug/msvc/eigen.natvis (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/debug/msvc/eigen_autoexp_part.dat (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mandelbrot/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mandelbrot/README (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mandelbrot/mandelbrot.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mandelbrot/mandelbrot.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mix_eigen_and_c/README (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mix_eigen_and_c/binary_library.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mix_eigen_and_c/binary_library.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/mix_eigen_and_c/example.c (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/README (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/camera.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/camera.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/gpuhelper.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/gpuhelper.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/icosphere.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/icosphere.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/quaternion_demo.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/quaternion_demo.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/trackball.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/demos/opengl/trackball.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/A05_PortingFrom2To3.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/A10_Eigen2SupportModes.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/AsciiQuickReference.txt (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/B01_Experimental.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/CMakeLists.txt (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/ClassHierarchy.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/CustomizingEigen.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/Doxyfile.in (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/Eigen_Silly_Professor_64x64.png (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/FixedSizeVectorizable.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/FunctionsTakingEigenTypes.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/HiPerformance.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/InsideEigenExample.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/Manual.dox (98%) create mode 100644 deps/eigen-3.2.8/doc/MatrixfreeSolverExample.dox rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/Overview.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/PassingByValue.dox (100%) create mode 100644 deps/eigen-3.2.8/doc/Pitfalls.dox rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/PreprocessorDirectives.dox (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/QuickReference.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/QuickStartGuide.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/SparseLinearSystems.dox (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/SparseQuickReference.dox (74%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/StlContainers.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/StorageOrders.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/StructHavingEigenMembers.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TemplateKeyword.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicAliasing.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicAssertions.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicEigenExpressionTemplates.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicLazyEvaluation.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicLinearAlgebraDecompositions.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicMultithreading.dox (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicResizing.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicScalarTypes.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TopicVectorization.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialAdvancedInitialization.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialArrayClass.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialBlockOperations.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialGeometry.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialLinearAlgebra.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialMapClass.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialMatrixArithmetic.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialMatrixClass.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialReductionsVisitorsBroadcasting.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialSparse.dox (91%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/TutorialSparse_example_details.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/UnalignedArrayAssert.dox (77%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/UsingIntelMKL.dox (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/WrongStackAlignment.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigen_navtree_hacks.js (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigendoxy.css (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigendoxy_footer.html.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigendoxy_header.html.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigendoxy_layout.xml.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/eigendoxy_tabs.css (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/.krazy (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/CMakeLists.txt (80%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/DenseBase_middleCols_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/DenseBase_middleRows_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/DenseBase_template_int_middleCols.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/DenseBase_template_int_middleRows.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/MatrixBase_cwise_const.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/QuickStart_example.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/QuickStart_example2_dynamic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/QuickStart_example2_fixed.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TemplateKeyword_flexible.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TemplateKeyword_simple.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgComputeTwice.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgExComputeSolveError.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgExSolveLDLT.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgInverseDeterminant.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgRankRevealing.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgSVDSolve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/TutorialLinAlgSetThreshold.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_accessors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_addition.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_cwise_other.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_interop.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ArrayClass_mult.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_BlockOperations_block_assignment.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_BlockOperations_colrow.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_BlockOperations_corner.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_BlockOperations_print_block.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_BlockOperations_vector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_PartialLU_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_simple_example_dynamic_size.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/Tutorial_simple_example_fixed_size.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_Block.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_CwiseBinaryOp.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_CwiseUnaryOp.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_CwiseUnaryOp_ptrfun.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_FixedBlock.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_FixedVectorBlock.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/class_VectorBlock.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/function_taking_eigenbase.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/function_taking_ref.cpp (100%) create mode 100644 deps/eigen-3.2.8/doc/examples/matrixfree_cg.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_arithmetic_add_sub.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_arithmetic_dot_cross.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_arithmetic_matrix_mul.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_arithmetic_redux_basic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_arithmetic_scalar_mul_div.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_matrix_coefficient_accessors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_matrix_resize.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/examples/tut_matrix_resize_fixed_size.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/.krazy (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/AngleAxis_mimic_euler.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/CMakeLists.txt (86%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ColPivHouseholderQR_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexEigenSolver_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexEigenSolver_eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexEigenSolver_eigenvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexSchur_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexSchur_matrixT.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/ComplexSchur_matrixU.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_abs.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_abs2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_acos.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_asin.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_boolean_and.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_boolean_or.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_cos.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_cube.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_equal_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_exp.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_greater.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_greater_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_inverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_less.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_less_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_log.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_max.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_min.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_minus.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_minus_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_not_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_plus.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_plus_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_pow.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_quotient.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_sin.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_slash_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_sqrt.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_square.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_tan.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Cwise_times_equal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/DenseBase_LinSpaced.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/DenseBase_LinSpaced_seq.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/DenseBase_setLinSpaced.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/DirectionWise_replicate.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/DirectionWise_replicate_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/EigenSolver_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/EigenSolver_eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/EigenSolver_eigenvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/EigenSolver_pseudoEigenvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/FullPivHouseholderQR_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/FullPivLU_image.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/FullPivLU_kernel.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/FullPivLU_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/GeneralizedEigenSolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HessenbergDecomposition_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HessenbergDecomposition_matrixH.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HessenbergDecomposition_packedMatrix.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HouseholderQR_householderQ.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HouseholderQR_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/HouseholderSequence_HouseholderSequence.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/IOFormat.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/JacobiSVD_basic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Jacobi_makeGivens.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Jacobi_makeJacobi.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/LLT_example.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/LLT_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Map_general_stride.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Map_inner_stride.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Map_outer_stride.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Map_placement_new.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Map_simple.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_adjoint.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_all.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_applyOnTheLeft.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_applyOnTheRight.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_array.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_array_const.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_asDiagonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_block_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_block_int_int_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_bottomRows_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cast.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_col.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_colwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_computeInverseWithCheck.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseAbs.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseAbs2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseEqual.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseInverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseMax.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseMin.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseNotEqual.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseProduct.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseQuotient.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_cwiseSqrt.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_diagonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_diagonal_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_diagonal_template_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_end_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_eval.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_extract.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_fixedBlock_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_identity.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_identity_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_inverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isDiagonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isIdentity.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isOnes.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isOrthogonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isUnitary.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_isZero.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_leftCols_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_marked.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_noalias.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_ones.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_ones_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_ones_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_operatorNorm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_part.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_prod.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_random.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_random_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_random_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_replicate.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_replicate_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_reverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_rightCols_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_row.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_rowwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_segment_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_select.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_set.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_setIdentity.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_setOnes.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_setRandom.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_setZero.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_start_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_bottomRows.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_end.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_leftCols.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_rightCols.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_segment.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_start.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_template_int_topRows.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_topRightCorner_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_topRows_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_transpose.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_zero.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_zero_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/MatrixBase_zero_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_resize_NoChange_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_resize_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_resize_int_NoChange.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_resize_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setConstant_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setConstant_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setIdentity_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setOnes_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setOnes_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setRandom_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setRandom_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setZero_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Matrix_setZero_int_int.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialPivLU_solve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_count.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_maxCoeff.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_minCoeff.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_norm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_prod.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_squaredNorm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/PartialRedux_sum.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/RealQZ_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/RealSchur_RealSchur_MatrixType.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/RealSchur_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointView_eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/SelfAdjointView_operatorNorm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_block.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_block_correct.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_cwise.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_mult1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_mult2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicAliasing_mult3.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/TopicStorageOrders_example.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_compute.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_decomposeInPlace.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_diagonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_householderCoefficients.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tridiagonalization_packedMatrix.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_Map_rowmajor.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_Map_using.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_commainit_01.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_commainit_01b.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_commainit_02.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_matrix_inverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_multiple_rhs.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_reuse_decomposition.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_singular.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_triangular.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Tutorial_solve_triangular_inplace.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/Vectorwise_reverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/class_FullPivLU.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/compile_snippet.cpp.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/tut_arithmetic_redux_minmax.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/tut_arithmetic_transpose_aliasing.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/tut_arithmetic_transpose_conjugate.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/tut_arithmetic_transpose_inplace.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/snippets/tut_matrix_assignment_resizing.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/special_examples/CMakeLists.txt (66%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/special_examples/Tutorial_sparse_example.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/special_examples/Tutorial_sparse_example_details.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/doc/tutorial.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/eigen3.pc.in (50%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/CMakeLists.txt (78%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/block_nonconst_ctor_on_const_xpr_0.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/block_nonconst_ctor_on_const_xpr_1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/block_nonconst_ctor_on_const_xpr_2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/block_on_const_type_actually_const_0.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/block_on_const_type_actually_const_1.cpp (100%) create mode 100644 deps/eigen-3.2.8/failtest/colpivqr_int.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/const_qualified_block_method_retval_0.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/const_qualified_block_method_retval_1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/const_qualified_diagonal_method_retval.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/const_qualified_transpose_method_retval.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/diagonal_nonconst_ctor_on_const_xpr.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/diagonal_on_const_type_actually_const.cpp (100%) create mode 100644 deps/eigen-3.2.8/failtest/eigensolver_cplx.cpp create mode 100644 deps/eigen-3.2.8/failtest/eigensolver_int.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/failtest_sanity_check.cpp (100%) create mode 100644 deps/eigen-3.2.8/failtest/fullpivlu_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/fullpivqr_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/jacobisvd_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/ldlt_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/llt_int.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_nonconst_ctor_on_const_ptr_0.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_nonconst_ctor_on_const_ptr_1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_nonconst_ctor_on_const_ptr_2.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_nonconst_ctor_on_const_ptr_3.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_nonconst_ctor_on_const_ptr_4.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_on_const_type_actually_const_0.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/map_on_const_type_actually_const_1.cpp (100%) create mode 100644 deps/eigen-3.2.8/failtest/partialpivlu_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/qr_int.cpp create mode 100644 deps/eigen-3.2.8/failtest/ref_1.cpp create mode 100644 deps/eigen-3.2.8/failtest/ref_2.cpp create mode 100644 deps/eigen-3.2.8/failtest/ref_3.cpp create mode 100644 deps/eigen-3.2.8/failtest/ref_4.cpp create mode 100644 deps/eigen-3.2.8/failtest/ref_5.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/transpose_nonconst_ctor_on_const_xpr.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/failtest/transpose_on_const_type_actually_const.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/cholesky.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/clacgv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/cladiv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/clarf.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/clarfb.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/clarfg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/clarft.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/complex_double.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/complex_single.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dladiv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlamch.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlapy2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlapy3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlarf.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlarfb.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlarfg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dlarft.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/double.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/dsecnd_NONE.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/eigenvalues.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilaclc.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilaclr.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/iladlc.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/iladlr.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilaslc.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilaslr.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilazlc.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/ilazlr.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/lapack_common.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/lu.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/second_NONE.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/single.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/sladiv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slamch.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slapy2.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slapy3.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slarf.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slarfb.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slarfg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/slarft.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zlacgv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zladiv.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zlarf.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zlarfb.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zlarfg.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/lapack/zlarft.f (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/buildtests.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/cdashtesting.cmake.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/check.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/debug.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/eigen_gen_credits.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/eigen_gen_docs (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/release.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/scripts/relicense.py (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/signature_of_eigen3_matrix_library (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/CMakeLists.txt (96%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/adjoint.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/array.cpp (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/array_for_matrix.cpp (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/array_replicate.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/array_reverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/bandmatrix.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/basicstuff.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/bicgstab.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/block.cpp (89%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/cholesky.cpp (85%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/cholmod_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/commainitializer.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/conjugate_gradient.cpp (79%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/conservative_resize.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/corners.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/cwiseop.cpp (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/denseLM.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/determinant.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/diagonal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/diagonalmatrices.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/dontalign.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/dynalloc.cpp (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/CMakeLists.txt (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_adjoint.cpp (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_alignedbox.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_array.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_basicstuff.cpp (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_bug_132.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_cholesky.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_commainitializer.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_cwiseop.cpp (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_determinant.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_dynalloc.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_eigensolver.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_first_aligned.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_geometry.cpp (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_hyperplane.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_inverse.cpp (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_linearstructure.cpp (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_lu.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_map.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_meta.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_miscmatrices.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_mixingtypes.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_newstdvector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_nomalloc.cpp (72%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_packetmath.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_parametrizedline.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_prec_inverse_4x4.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_product_large.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_product_small.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_qr.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_qtvector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_regression.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sizeof.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_smallvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sparse_basic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sparse_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sparse_solvers.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sparse_vector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_stdvector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_submatrices.cpp (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_sum.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_svd.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_swap.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_triangular.cpp (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_unalignedassert.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/eigen2_visitor.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/gsl_helper.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/main.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/product.h (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/runtest.sh (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/sparse.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2/testsuite.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigen2support.cpp (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigensolver_complex.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigensolver_generalized_real.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigensolver_generic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/eigensolver_selfadjoint.cpp (82%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/exceptions.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/first_aligned.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_alignedbox.cpp (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_eulerangles.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_homogeneous.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_hyperplane.cpp (86%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_orthomethods.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_parametrizedline.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_quaternion.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/geo_transformations.cpp (90%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/hessenberg.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/householder.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/integer_types.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/inverse.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/jacobi.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/jacobisvd.cpp (62%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/linearstructure.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/lu.cpp (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/main.h (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/mapped_matrix.cpp (87%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/mapstaticmethods.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/mapstride.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/meta.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/metis_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/miscmatrices.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/mixingtypes.cpp (100%) create mode 100644 deps/eigen-3.2.8/test/mpl2only.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/nesting_ops.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/nomalloc.cpp (84%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/nullary.cpp (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/packetmath.cpp (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/pardiso_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/pastix_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/permutationmatrices.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/prec_inverse_4x4.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product.h (69%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_extra.cpp (78%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_large.cpp (81%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_mmtr.cpp (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_notemporary.cpp (92%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_selfadjoint.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_small.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_symm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_syrk.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_trmm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_trmv.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/product_trsolve.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/qr.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/qr_colpivoting.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/qr_fullpivoting.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/qtvector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/real_qz.cpp (85%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/redux.cpp (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/ref.cpp (58%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/resize.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/runtest.sh (100%) create mode 100644 deps/eigen-3.2.8/test/rvalue_types.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/schur_complex.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/schur_real.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/selfadjoint.cpp (100%) create mode 100644 deps/eigen-3.2.8/test/simplicial_cholesky.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sizeof.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sizeoverflow.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/smallvectors.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparseLM.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_basic.cpp (84%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_permutations.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_solver.h (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_solvers.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparse_vector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparselu.cpp (84%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/sparseqr.cpp (76%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/special_numbers.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/spqr_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/stable_norm.cpp (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/stddeque.cpp (100%) create mode 100644 deps/eigen-3.2.8/test/stddeque_overload.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/stdlist.cpp (100%) create mode 100644 deps/eigen-3.2.8/test/stdlist_overload.cpp rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/stdvector.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/stdvector_overload.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/superlu_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/swap.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/testsuite.cmake (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/triangular.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/umeyama.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/umfpack_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/unalignedassert.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/unalignedcount.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/upperbidiagonalization.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/vectorization_logic.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/vectorwiseop.cpp (93%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/visitor.cpp (95%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/test/zerosized.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/AdolcForward (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/AlignedVector3 (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/ArpackSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/AutoDiff (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/BVH (100%) create mode 100644 deps/eigen-3.2.8/unsupported/Eigen/CMakeLists.txt rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/FFT (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/IterativeSolvers (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/KroneckerProduct (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/LevenbergMarquardt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/MPRealSupport (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/MatrixFunctions (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/MoreVectorization (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/NonLinearOptimization (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/NumericalDiff (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/OpenGLSupport (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/Polynomials (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/SVD (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/Skyline (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/SparseExtra (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/Splines (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/AutoDiff/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/BVH/BVAlgorithms.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/BVH/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/BVH/KdBVH.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/CMakeLists.txt (85%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h (100%) create mode 100644 deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/CMakeLists.txt rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/FFT/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/FFT/ei_fftw_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/FFT/ei_kissfft_impl.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/DGMRES.h (98%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/GMRES.h (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/IterationController.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/MINRES.h (84%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/IterativeSolvers/Scaling.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/KroneckerProduct/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt (51%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h (99%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MatrixFunctions/StemFunction.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MoreVectorization/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/MoreVectorization/MathFunctions.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/chkder.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/covar.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/dogleg.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/lmpar.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/r1updt.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NumericalDiff/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Polynomials/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Polynomials/Companion.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Polynomials/PolynomialSolver.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Polynomials/PolynomialUtils.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/BDCSVD.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/JacobiSVD.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/SVDBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/TODOBdcsvd.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SVD/doneInBDCSVD.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineProduct.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineStorage.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Skyline/SkylineUtil.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/MarketIO.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/SparseExtra/RandomSetter.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Splines/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Splines/Spline.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Splines/SplineFitting.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/Eigen/src/Splines/SplineFwd.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/README.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/bench/bench_svd.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/CMakeLists.txt (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/Overview.dox (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/eigendoxy_layout.xml.in (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/BVH_Example.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/CMakeLists.txt (83%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/FFT.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixExponential.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixFunction.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixLogarithm.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixPower.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixPower_optimal.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixSine.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixSinh.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/MatrixSquareRoot.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/PolynomialSolver1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/examples/PolynomialUtils1.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/doc/snippets/CMakeLists.txt (88%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/BVH.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/CMakeLists.txt (94%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/FFT.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/FFTW.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/NonLinearOptimization.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/NumericalDiff.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/alignedvector3.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/autodiff.cpp (80%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/bdcsvd.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/dgmres.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/forward_adolc.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/gmres.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/jacobisvd.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/kronecker_product.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/levenberg_marquardt.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/matrix_exponential.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/matrix_function.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/matrix_functions.h (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/matrix_power.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/matrix_square_root.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/minres.cpp (52%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/mpreal/mpreal.h (67%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/mpreal_support.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/openglsupport.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/polynomialsolver.cpp (97%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/polynomialutils.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/sparse_extra.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/splines.cpp (100%) rename deps/{eigen-3.2.1 => eigen-3.2.8}/unsupported/test/svd_common.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dcd657e..4c54f7c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,7 @@ list(APPEND REDREAM_INCLUDE_DIRS deps/dirent-1.21) # eigen list(APPEND REDREAM_DEFS EIGEN_DEFAULT_TO_ROW_MAJOR) -list(APPEND REDREAM_INCLUDE_DIRS deps/eigen-3.2.1) +list(APPEND REDREAM_INCLUDE_DIRS deps/eigen-3.2.8) # gdb_server list(APPEND REDREAM_INCLUDE_DIRS deps/gdb_server) diff --git a/deps/eigen-3.2.1/cmake/FindMetis.cmake b/deps/eigen-3.2.1/cmake/FindMetis.cmake deleted file mode 100644 index 627c3e9a..00000000 --- a/deps/eigen-3.2.1/cmake/FindMetis.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# Pastix requires METIS or METIS (partitioning and reordering tools) - -if (METIS_INCLUDES AND METIS_LIBRARIES) - set(METIS_FIND_QUIETLY TRUE) -endif (METIS_INCLUDES AND METIS_LIBRARIES) - -find_path(METIS_INCLUDES - NAMES - metis.h - PATHS - $ENV{METISDIR} - ${INCLUDE_INSTALL_DIR} - PATH_SUFFIXES - metis - include -) - - -find_library(METIS_LIBRARIES metis PATHS $ENV{METISDIR} ${LIB_INSTALL_DIR} PATH_SUFFIXES lib) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(METIS DEFAULT_MSG - METIS_INCLUDES METIS_LIBRARIES) - -mark_as_advanced(METIS_INCLUDES METIS_LIBRARIES) diff --git a/deps/eigen-3.2.1/test/simplicial_cholesky.cpp b/deps/eigen-3.2.1/test/simplicial_cholesky.cpp deleted file mode 100644 index e93a52e9..00000000 --- a/deps/eigen-3.2.1/test/simplicial_cholesky.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2011 Gael Guennebaud -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#include "sparse_solver.h" - -template void test_simplicial_cholesky_T() -{ - SimplicialCholesky, Lower> chol_colmajor_lower; - SimplicialCholesky, Upper> chol_colmajor_upper; - SimplicialLLT, Lower> llt_colmajor_lower; - SimplicialLDLT, Upper> llt_colmajor_upper; - SimplicialLDLT, Lower> ldlt_colmajor_lower; - SimplicialLDLT, Upper> ldlt_colmajor_upper; - - check_sparse_spd_solving(chol_colmajor_lower); - check_sparse_spd_solving(chol_colmajor_upper); - check_sparse_spd_solving(llt_colmajor_lower); - check_sparse_spd_solving(llt_colmajor_upper); - check_sparse_spd_solving(ldlt_colmajor_lower); - check_sparse_spd_solving(ldlt_colmajor_upper); - - check_sparse_spd_determinant(chol_colmajor_lower); - check_sparse_spd_determinant(chol_colmajor_upper); - check_sparse_spd_determinant(llt_colmajor_lower); - check_sparse_spd_determinant(llt_colmajor_upper); - check_sparse_spd_determinant(ldlt_colmajor_lower); - check_sparse_spd_determinant(ldlt_colmajor_upper); -} - -void test_simplicial_cholesky() -{ - CALL_SUBTEST_1(test_simplicial_cholesky_T()); - CALL_SUBTEST_2(test_simplicial_cholesky_T >()); -} diff --git a/deps/eigen-3.2.1/unsupported/Eigen/CMakeLists.txt b/deps/eigen-3.2.1/unsupported/Eigen/CMakeLists.txt deleted file mode 100644 index e06f1238..00000000 --- a/deps/eigen-3.2.1/unsupported/Eigen/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -set(Eigen_HEADERS AdolcForward BVH IterativeSolvers MatrixFunctions MoreVectorization AutoDiff AlignedVector3 Polynomials - FFT NonLinearOptimization SparseExtra IterativeSolvers - NumericalDiff Skyline MPRealSupport OpenGLSupport KroneckerProduct Splines LevenbergMarquardt - ) - -install(FILES - ${Eigen_HEADERS} - DESTINATION ${INCLUDE_INSTALL_DIR}/unsupported/Eigen COMPONENT Devel - ) - -add_subdirectory(src) diff --git a/deps/eigen-3.2.1/.hg_archival.txt b/deps/eigen-3.2.8/.hg_archival.txt similarity index 50% rename from deps/eigen-3.2.1/.hg_archival.txt rename to deps/eigen-3.2.8/.hg_archival.txt index d2ba1ef0..c4115d7f 100644 --- a/deps/eigen-3.2.1/.hg_archival.txt +++ b/deps/eigen-3.2.8/.hg_archival.txt @@ -1,4 +1,4 @@ repo: 8a21fd850624c931e448cbcfb38168cb2717c790 -node: 6b38706d90a9fe182e66ab88477b3dbde34b9f66 +node: 07105f7124f9aef00a68c85e0fc606e65d3d6c15 branch: 3.2 -tag: 3.2.1 +tag: 3.2.8 diff --git a/deps/eigen-3.2.1/.hgeol b/deps/eigen-3.2.8/.hgeol similarity index 100% rename from deps/eigen-3.2.1/.hgeol rename to deps/eigen-3.2.8/.hgeol diff --git a/deps/eigen-3.2.1/.hgignore b/deps/eigen-3.2.8/.hgignore similarity index 100% rename from deps/eigen-3.2.1/.hgignore rename to deps/eigen-3.2.8/.hgignore diff --git a/deps/eigen-3.2.1/.hgtags b/deps/eigen-3.2.8/.hgtags similarity index 80% rename from deps/eigen-3.2.1/.hgtags rename to deps/eigen-3.2.8/.hgtags index 769debf6..8f0097f2 100644 --- a/deps/eigen-3.2.1/.hgtags +++ b/deps/eigen-3.2.8/.hgtags @@ -24,3 +24,10 @@ da195914abcc1d739027cbee7c52077aab30b336 3.2-beta1 4b687cad1d23066f66863f4f87298447298443df 3.2-rc1 1eeda7b1258bcd306018c0738e2b6a8543661141 3.2-rc2 ffa86ffb557094721ca71dcea6aed2651b9fd610 3.2.0 +6b38706d90a9fe182e66ab88477b3dbde34b9f66 3.2.1 +1306d75b4a21891e59ff9bd96678882cf831e39f 3.2.2 +36fd1ba04c120cfdd90f3e4cede47f43b21d19ad 3.2.3 +10219c95fe653d4962aa9db4946f6fbea96dd740 3.2.4 +bdd17ee3b1b3a166cd5ec36dcad4fc1f3faf774a 3.2.5 +c58038c56923e0fd86de3ded18e03df442e66dfb 3.2.6 +b30b87236a1b1552af32ac34075ee5696a9b5a33 3.2.7 diff --git a/deps/eigen-3.2.1/CMakeLists.txt b/deps/eigen-3.2.8/CMakeLists.txt similarity index 88% rename from deps/eigen-3.2.1/CMakeLists.txt rename to deps/eigen-3.2.8/CMakeLists.txt index 76a11b9d..77e9f2d3 100644 --- a/deps/eigen-3.2.1/CMakeLists.txt +++ b/deps/eigen-3.2.8/CMakeLists.txt @@ -1,6 +1,5 @@ project(Eigen) - -cmake_minimum_required(VERSION 2.8.2) +cmake_minimum_required(VERSION 2.8.5) # guard against in-source builds @@ -55,6 +54,7 @@ endif(EIGEN_HG_CHANGESET) include(CheckCXXCompilerFlag) +include(GNUInstallDirs) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) @@ -288,25 +288,26 @@ option(EIGEN_TEST_C++0x "Enables all C++0x features." OFF) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -# the user modifiable install path for header files -set(EIGEN_INCLUDE_INSTALL_DIR ${EIGEN_INCLUDE_INSTALL_DIR} CACHE PATH "The directory where we install the header files (optional)") - -# set the internal install path for header files which depends on wether the user modifiable -# EIGEN_INCLUDE_INSTALL_DIR has been set by the user or not. -if(EIGEN_INCLUDE_INSTALL_DIR) - set(INCLUDE_INSTALL_DIR - ${EIGEN_INCLUDE_INSTALL_DIR} - CACHE INTERNAL - "The directory where we install the header files (internal)" - ) +# Backward compatibility support for EIGEN_INCLUDE_INSTALL_DIR +if(EIGEN_INCLUDE_INSTALL_DIR AND NOT INCLUDE_INSTALL_DIR) + set(INCLUDE_INSTALL_DIR ${EIGEN_INCLUDE_INSTALL_DIR} + CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen header files are installed") else() set(INCLUDE_INSTALL_DIR - "${CMAKE_INSTALL_PREFIX}/include/eigen3" - CACHE INTERNAL - "The directory where we install the header files (internal)" - ) + "${CMAKE_INSTALL_INCLUDEDIR}/eigen3" + CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen header files are installed" + ) endif() +set(CMAKEPACKAGE_INSTALL_DIR + "${CMAKE_INSTALL_LIBDIR}/cmake/eigen3" + CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen3Config.cmake is installed" + ) +set(PKGCONFIG_INSTALL_DIR + "${CMAKE_INSTALL_DATADIR}/pkgconfig" + CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where eigen3.pc is installed" + ) + # similar to set_target_properties but append the property instead of overwriting it macro(ei_add_target_property target prop value) @@ -324,21 +325,9 @@ install(FILES ) if(EIGEN_BUILD_PKGCONFIG) - SET(path_separator ":") - STRING(REPLACE ${path_separator} ";" pkg_config_libdir_search "$ENV{PKG_CONFIG_LIBDIR}") - message(STATUS "searching for 'pkgconfig' directory in PKG_CONFIG_LIBDIR ( $ENV{PKG_CONFIG_LIBDIR} ), ${CMAKE_INSTALL_PREFIX}/share, and ${CMAKE_INSTALL_PREFIX}/lib") - FIND_PATH(pkg_config_libdir pkgconfig ${pkg_config_libdir_search} ${CMAKE_INSTALL_PREFIX}/share ${CMAKE_INSTALL_PREFIX}/lib ${pkg_config_libdir_search}) - if(pkg_config_libdir) - SET(pkg_config_install_dir ${pkg_config_libdir}) - message(STATUS "found ${pkg_config_libdir}/pkgconfig" ) - else(pkg_config_libdir) - SET(pkg_config_install_dir ${CMAKE_INSTALL_PREFIX}/share) - message(STATUS "pkgconfig not found; installing in ${pkg_config_install_dir}" ) - endif(pkg_config_libdir) - - configure_file(eigen3.pc.in eigen3.pc) + configure_file(eigen3.pc.in eigen3.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eigen3.pc - DESTINATION ${pkg_config_install_dir}/pkgconfig + DESTINATION ${PKGCONFIG_INSTALL_DIR} ) endif(EIGEN_BUILD_PKGCONFIG) @@ -401,12 +390,15 @@ if(cmake_generator_tolower MATCHES "makefile") message(STATUS "--------------+--------------------------------------------------------------") message(STATUS "Command | Description") message(STATUS "--------------+--------------------------------------------------------------") - message(STATUS "make install | Install to ${CMAKE_INSTALL_PREFIX}. To change that:") - message(STATUS " | cmake . -DCMAKE_INSTALL_PREFIX=yourpath") - message(STATUS " | Eigen headers will then be installed to:") - message(STATUS " | ${INCLUDE_INSTALL_DIR}") - message(STATUS " | To install Eigen headers to a separate location, do:") - message(STATUS " | cmake . -DEIGEN_INCLUDE_INSTALL_DIR=yourpath") + message(STATUS "make install | Install Eigen. Headers will be installed to:") + message(STATUS " | /") + message(STATUS " | Using the following values:") + message(STATUS " | CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") + message(STATUS " | INCLUDE_INSTALL_DIR: ${INCLUDE_INSTALL_DIR}") + message(STATUS " | Change the install location of Eigen headers using:") + message(STATUS " | cmake . -DCMAKE_INSTALL_PREFIX=yourprefix") + message(STATUS " | Or:") + message(STATUS " | cmake . -DINCLUDE_INSTALL_DIR=yourdir") message(STATUS "make doc | Generate the API documentation, requires Doxygen & LaTeX") message(STATUS "make check | Build and run the unit-tests. Read this page:") message(STATUS " | http://eigen.tuxfamily.org/index.php?title=Tests") diff --git a/deps/eigen-3.2.1/COPYING.BSD b/deps/eigen-3.2.8/COPYING.BSD similarity index 100% rename from deps/eigen-3.2.1/COPYING.BSD rename to deps/eigen-3.2.8/COPYING.BSD diff --git a/deps/eigen-3.2.1/COPYING.GPL b/deps/eigen-3.2.8/COPYING.GPL similarity index 100% rename from deps/eigen-3.2.1/COPYING.GPL rename to deps/eigen-3.2.8/COPYING.GPL diff --git a/deps/eigen-3.2.1/COPYING.LGPL b/deps/eigen-3.2.8/COPYING.LGPL similarity index 100% rename from deps/eigen-3.2.1/COPYING.LGPL rename to deps/eigen-3.2.8/COPYING.LGPL diff --git a/deps/eigen-3.2.1/COPYING.MINPACK b/deps/eigen-3.2.8/COPYING.MINPACK similarity index 100% rename from deps/eigen-3.2.1/COPYING.MINPACK rename to deps/eigen-3.2.8/COPYING.MINPACK diff --git a/deps/eigen-3.2.1/COPYING.MPL2 b/deps/eigen-3.2.8/COPYING.MPL2 similarity index 100% rename from deps/eigen-3.2.1/COPYING.MPL2 rename to deps/eigen-3.2.8/COPYING.MPL2 diff --git a/deps/eigen-3.2.1/COPYING.README b/deps/eigen-3.2.8/COPYING.README similarity index 100% rename from deps/eigen-3.2.1/COPYING.README rename to deps/eigen-3.2.8/COPYING.README diff --git a/deps/eigen-3.2.1/CTestConfig.cmake b/deps/eigen-3.2.8/CTestConfig.cmake similarity index 75% rename from deps/eigen-3.2.1/CTestConfig.cmake rename to deps/eigen-3.2.8/CTestConfig.cmake index 4c002782..0557c491 100644 --- a/deps/eigen-3.2.1/CTestConfig.cmake +++ b/deps/eigen-3.2.8/CTestConfig.cmake @@ -4,14 +4,10 @@ ## # The following are required to uses Dart and the Cdash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) -set(CTEST_PROJECT_NAME "Eigen") +set(CTEST_PROJECT_NAME "Eigen3.2") set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC") set(CTEST_DROP_METHOD "http") set(CTEST_DROP_SITE "manao.inria.fr") -set(CTEST_DROP_LOCATION "/CDash/submit.php?project=Eigen") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=Eigen3.2") set(CTEST_DROP_SITE_CDASH TRUE) -set(CTEST_PROJECT_SUBPROJECTS -Official -Unsupported -) diff --git a/deps/eigen-3.2.1/CTestCustom.cmake.in b/deps/eigen-3.2.8/CTestCustom.cmake.in similarity index 100% rename from deps/eigen-3.2.1/CTestCustom.cmake.in rename to deps/eigen-3.2.8/CTestCustom.cmake.in diff --git a/deps/eigen-3.2.1/Eigen/Array b/deps/eigen-3.2.8/Eigen/Array similarity index 100% rename from deps/eigen-3.2.1/Eigen/Array rename to deps/eigen-3.2.8/Eigen/Array diff --git a/deps/eigen-3.2.1/Eigen/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/Cholesky b/deps/eigen-3.2.8/Eigen/Cholesky similarity index 100% rename from deps/eigen-3.2.1/Eigen/Cholesky rename to deps/eigen-3.2.8/Eigen/Cholesky diff --git a/deps/eigen-3.2.1/Eigen/CholmodSupport b/deps/eigen-3.2.8/Eigen/CholmodSupport similarity index 93% rename from deps/eigen-3.2.1/Eigen/CholmodSupport rename to deps/eigen-3.2.8/Eigen/CholmodSupport index 745b884e..88c29a64 100644 --- a/deps/eigen-3.2.1/Eigen/CholmodSupport +++ b/deps/eigen-3.2.8/Eigen/CholmodSupport @@ -12,7 +12,7 @@ extern "C" { /** \ingroup Support_modules * \defgroup CholmodSupport_Module CholmodSupport module * - * This module provides an interface to the Cholmod library which is part of the suitesparse package. + * This module provides an interface to the Cholmod library which is part of the suitesparse package. * It provides the two following main factorization classes: * - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization. * - class CholmodDecomposiiton: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of the underlying factorization method (supernodal or simplicial). diff --git a/deps/eigen-3.2.1/Eigen/Core b/deps/eigen-3.2.8/Eigen/Core similarity index 98% rename from deps/eigen-3.2.1/Eigen/Core rename to deps/eigen-3.2.8/Eigen/Core index 9131cc3f..509c529e 100644 --- a/deps/eigen-3.2.1/Eigen/Core +++ b/deps/eigen-3.2.8/Eigen/Core @@ -95,7 +95,7 @@ extern "C" { // In theory we should only include immintrin.h and not the other *mmintrin.h header files directly. // Doing so triggers some issues with ICC. However old gcc versions seems to not have this file, thus: - #ifdef __INTEL_COMPILER + #if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1110 #include #else #include @@ -123,7 +123,7 @@ #undef bool #undef vector #undef pixel - #elif defined __ARM_NEON__ + #elif defined __ARM_NEON #define EIGEN_VECTORIZE #define EIGEN_VECTORIZE_NEON #include @@ -165,7 +165,7 @@ #endif // required for __cpuid, needs to be included after cmath -#if defined(_MSC_VER) && (defined(_M_IX86)||defined(_M_X64)) +#if defined(_MSC_VER) && (defined(_M_IX86)||defined(_M_X64)) && (!defined(_WIN32_WCE)) #include #endif diff --git a/deps/eigen-3.2.1/Eigen/Dense b/deps/eigen-3.2.8/Eigen/Dense similarity index 100% rename from deps/eigen-3.2.1/Eigen/Dense rename to deps/eigen-3.2.8/Eigen/Dense diff --git a/deps/eigen-3.2.1/Eigen/Eigen b/deps/eigen-3.2.8/Eigen/Eigen similarity index 100% rename from deps/eigen-3.2.1/Eigen/Eigen rename to deps/eigen-3.2.8/Eigen/Eigen diff --git a/deps/eigen-3.2.1/Eigen/Eigen2Support b/deps/eigen-3.2.8/Eigen/Eigen2Support similarity index 100% rename from deps/eigen-3.2.1/Eigen/Eigen2Support rename to deps/eigen-3.2.8/Eigen/Eigen2Support diff --git a/deps/eigen-3.2.1/Eigen/Eigenvalues b/deps/eigen-3.2.8/Eigen/Eigenvalues similarity index 100% rename from deps/eigen-3.2.1/Eigen/Eigenvalues rename to deps/eigen-3.2.8/Eigen/Eigenvalues diff --git a/deps/eigen-3.2.1/Eigen/Geometry b/deps/eigen-3.2.8/Eigen/Geometry similarity index 100% rename from deps/eigen-3.2.1/Eigen/Geometry rename to deps/eigen-3.2.8/Eigen/Geometry diff --git a/deps/eigen-3.2.1/Eigen/Householder b/deps/eigen-3.2.8/Eigen/Householder similarity index 100% rename from deps/eigen-3.2.1/Eigen/Householder rename to deps/eigen-3.2.8/Eigen/Householder diff --git a/deps/eigen-3.2.1/Eigen/IterativeLinearSolvers b/deps/eigen-3.2.8/Eigen/IterativeLinearSolvers similarity index 100% rename from deps/eigen-3.2.1/Eigen/IterativeLinearSolvers rename to deps/eigen-3.2.8/Eigen/IterativeLinearSolvers diff --git a/deps/eigen-3.2.1/Eigen/Jacobi b/deps/eigen-3.2.8/Eigen/Jacobi similarity index 100% rename from deps/eigen-3.2.1/Eigen/Jacobi rename to deps/eigen-3.2.8/Eigen/Jacobi diff --git a/deps/eigen-3.2.1/Eigen/LU b/deps/eigen-3.2.8/Eigen/LU similarity index 100% rename from deps/eigen-3.2.1/Eigen/LU rename to deps/eigen-3.2.8/Eigen/LU diff --git a/deps/eigen-3.2.1/Eigen/LeastSquares b/deps/eigen-3.2.8/Eigen/LeastSquares similarity index 100% rename from deps/eigen-3.2.1/Eigen/LeastSquares rename to deps/eigen-3.2.8/Eigen/LeastSquares diff --git a/deps/eigen-3.2.1/Eigen/MetisSupport b/deps/eigen-3.2.8/Eigen/MetisSupport similarity index 100% rename from deps/eigen-3.2.1/Eigen/MetisSupport rename to deps/eigen-3.2.8/Eigen/MetisSupport diff --git a/deps/eigen-3.2.1/Eigen/OrderingMethods b/deps/eigen-3.2.8/Eigen/OrderingMethods similarity index 100% rename from deps/eigen-3.2.1/Eigen/OrderingMethods rename to deps/eigen-3.2.8/Eigen/OrderingMethods diff --git a/deps/eigen-3.2.1/Eigen/PaStiXSupport b/deps/eigen-3.2.8/Eigen/PaStiXSupport similarity index 100% rename from deps/eigen-3.2.1/Eigen/PaStiXSupport rename to deps/eigen-3.2.8/Eigen/PaStiXSupport diff --git a/deps/eigen-3.2.1/Eigen/PardisoSupport b/deps/eigen-3.2.8/Eigen/PardisoSupport similarity index 100% rename from deps/eigen-3.2.1/Eigen/PardisoSupport rename to deps/eigen-3.2.8/Eigen/PardisoSupport diff --git a/deps/eigen-3.2.1/Eigen/QR b/deps/eigen-3.2.8/Eigen/QR similarity index 100% rename from deps/eigen-3.2.1/Eigen/QR rename to deps/eigen-3.2.8/Eigen/QR diff --git a/deps/eigen-3.2.1/Eigen/QtAlignedMalloc b/deps/eigen-3.2.8/Eigen/QtAlignedMalloc similarity index 100% rename from deps/eigen-3.2.1/Eigen/QtAlignedMalloc rename to deps/eigen-3.2.8/Eigen/QtAlignedMalloc diff --git a/deps/eigen-3.2.1/Eigen/SPQRSupport b/deps/eigen-3.2.8/Eigen/SPQRSupport similarity index 89% rename from deps/eigen-3.2.1/Eigen/SPQRSupport rename to deps/eigen-3.2.8/Eigen/SPQRSupport index 77016442..7f1eb477 100644 --- a/deps/eigen-3.2.1/Eigen/SPQRSupport +++ b/deps/eigen-3.2.8/Eigen/SPQRSupport @@ -10,7 +10,7 @@ /** \ingroup Support_modules * \defgroup SPQRSupport_Module SuiteSparseQR module * - * This module provides an interface to the SPQR library, which is part of the suitesparse package. + * This module provides an interface to the SPQR library, which is part of the suitesparse package. * * \code * #include diff --git a/deps/eigen-3.2.1/Eigen/SVD b/deps/eigen-3.2.8/Eigen/SVD similarity index 100% rename from deps/eigen-3.2.1/Eigen/SVD rename to deps/eigen-3.2.8/Eigen/SVD diff --git a/deps/eigen-3.2.1/Eigen/Sparse b/deps/eigen-3.2.8/Eigen/Sparse similarity index 100% rename from deps/eigen-3.2.1/Eigen/Sparse rename to deps/eigen-3.2.8/Eigen/Sparse diff --git a/deps/eigen-3.2.1/Eigen/SparseCholesky b/deps/eigen-3.2.8/Eigen/SparseCholesky similarity index 100% rename from deps/eigen-3.2.1/Eigen/SparseCholesky rename to deps/eigen-3.2.8/Eigen/SparseCholesky diff --git a/deps/eigen-3.2.1/Eigen/SparseCore b/deps/eigen-3.2.8/Eigen/SparseCore similarity index 98% rename from deps/eigen-3.2.1/Eigen/SparseCore rename to deps/eigen-3.2.8/Eigen/SparseCore index 9b5be5e1..24bcf015 100644 --- a/deps/eigen-3.2.1/Eigen/SparseCore +++ b/deps/eigen-3.2.8/Eigen/SparseCore @@ -14,7 +14,7 @@ /** * \defgroup SparseCore_Module SparseCore module * - * This module provides a sparse matrix representation, and basic associatd matrix manipulations + * This module provides a sparse matrix representation, and basic associated matrix manipulations * and operations. * * See the \ref TutorialSparse "Sparse tutorial" diff --git a/deps/eigen-3.2.1/Eigen/SparseLU b/deps/eigen-3.2.8/Eigen/SparseLU similarity index 100% rename from deps/eigen-3.2.1/Eigen/SparseLU rename to deps/eigen-3.2.8/Eigen/SparseLU diff --git a/deps/eigen-3.2.1/Eigen/SparseQR b/deps/eigen-3.2.8/Eigen/SparseQR similarity index 100% rename from deps/eigen-3.2.1/Eigen/SparseQR rename to deps/eigen-3.2.8/Eigen/SparseQR diff --git a/deps/eigen-3.2.1/Eigen/StdDeque b/deps/eigen-3.2.8/Eigen/StdDeque similarity index 100% rename from deps/eigen-3.2.1/Eigen/StdDeque rename to deps/eigen-3.2.8/Eigen/StdDeque diff --git a/deps/eigen-3.2.1/Eigen/StdList b/deps/eigen-3.2.8/Eigen/StdList similarity index 100% rename from deps/eigen-3.2.1/Eigen/StdList rename to deps/eigen-3.2.8/Eigen/StdList diff --git a/deps/eigen-3.2.1/Eigen/StdVector b/deps/eigen-3.2.8/Eigen/StdVector similarity index 100% rename from deps/eigen-3.2.1/Eigen/StdVector rename to deps/eigen-3.2.8/Eigen/StdVector diff --git a/deps/eigen-3.2.1/Eigen/SuperLUSupport b/deps/eigen-3.2.8/Eigen/SuperLUSupport similarity index 100% rename from deps/eigen-3.2.1/Eigen/SuperLUSupport rename to deps/eigen-3.2.8/Eigen/SuperLUSupport diff --git a/deps/eigen-3.2.1/Eigen/UmfPackSupport b/deps/eigen-3.2.8/Eigen/UmfPackSupport similarity index 90% rename from deps/eigen-3.2.1/Eigen/UmfPackSupport rename to deps/eigen-3.2.8/Eigen/UmfPackSupport index 984f64a8..7b1b6606 100644 --- a/deps/eigen-3.2.1/Eigen/UmfPackSupport +++ b/deps/eigen-3.2.8/Eigen/UmfPackSupport @@ -12,7 +12,7 @@ extern "C" { /** \ingroup Support_modules * \defgroup UmfPackSupport_Module UmfPackSupport module * - * This module provides an interface to the UmfPack library which is part of the suitesparse package. + * This module provides an interface to the UmfPack library which is part of the suitesparse package. * It provides the following factorization class: * - class UmfPackLU: a multifrontal sequential LU factorization. * diff --git a/deps/eigen-3.2.1/Eigen/src/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Cholesky/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Cholesky/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Cholesky/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Cholesky/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Cholesky/LDLT.h b/deps/eigen-3.2.8/Eigen/src/Cholesky/LDLT.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/Cholesky/LDLT.h rename to deps/eigen-3.2.8/Eigen/src/Cholesky/LDLT.h index d026418f..abd30bd9 100644 --- a/deps/eigen-3.2.1/Eigen/src/Cholesky/LDLT.h +++ b/deps/eigen-3.2.8/Eigen/src/Cholesky/LDLT.h @@ -235,6 +235,11 @@ template class LDLT } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } /** \internal * Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U. @@ -274,30 +279,13 @@ template<> struct ldlt_inplace return true; } - RealScalar cutoff(0), biggest_in_corner; - for (Index k = 0; k < size; ++k) { // Find largest diagonal element Index index_of_biggest_in_corner; - biggest_in_corner = mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner); + mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner); index_of_biggest_in_corner += k; - if(k == 0) - { - // The biggest overall is the point of reference to which further diagonals - // are compared; if any diagonal is negligible compared - // to the largest overall, the algorithm bails. - cutoff = abs(NumTraits::epsilon() * biggest_in_corner); - } - - // Finish early if the matrix is not full rank. - if(biggest_in_corner < cutoff) - { - for(Index i = k; i < size; i++) transpositions.coeffRef(i) = i; - break; - } - transpositions.coeffRef(k) = index_of_biggest_in_corner; if(k != index_of_biggest_in_corner) { @@ -328,15 +316,20 @@ template<> struct ldlt_inplace if(k>0) { - temp.head(k) = mat.diagonal().head(k).asDiagonal() * A10.adjoint(); + temp.head(k) = mat.diagonal().real().head(k).asDiagonal() * A10.adjoint(); mat.coeffRef(k,k) -= (A10 * temp.head(k)).value(); if(rs>0) A21.noalias() -= A20 * temp.head(k); } - if((rs>0) && (abs(mat.coeffRef(k,k)) > cutoff)) - A21 /= mat.coeffRef(k,k); - + + // In some previous versions of Eigen (e.g., 3.2.1), the scaling was omitted if the pivot + // was smaller than the cutoff value. However, soince LDLT is not rank-revealing + // we should only make sure we do not introduce INF or NaN values. + // LAPACK also uses 0 as the cutoff value. RealScalar realAkk = numext::real(mat.coeffRef(k,k)); + if((rs>0) && (abs(realAkk) > RealScalar(0))) + A21 /= realAkk; + if (sign == PositiveSemiDef) { if (realAkk < 0) sign = Indefinite; } else if (sign == NegativeSemiDef) { @@ -446,6 +439,8 @@ template struct LDLT_Traits template LDLT& LDLT::compute(const MatrixType& a) { + check_template_parameters(); + eigen_assert(a.rows()==a.cols()); const Index size = a.rows(); @@ -454,6 +449,7 @@ LDLT& LDLT::compute(const MatrixType& a) m_transpositions.resize(size); m_isInitialized = false; m_temporary.resize(size); + m_sign = internal::ZeroSign; internal::ldlt_inplace::unblocked(m_matrix, m_transpositions, m_temporary, m_sign); @@ -468,7 +464,7 @@ LDLT& LDLT::compute(const MatrixType& a) */ template template -LDLT& LDLT::rankUpdate(const MatrixBase& w, const typename NumTraits::Real& sigma) +LDLT& LDLT::rankUpdate(const MatrixBase& w, const typename LDLT::RealScalar& sigma) { const Index size = w.rows(); if (m_isInitialized) @@ -514,16 +510,21 @@ struct solve_retval, Rhs> using std::abs; using std::max; typedef typename LDLTType::MatrixType MatrixType; - typedef typename LDLTType::Scalar Scalar; typedef typename LDLTType::RealScalar RealScalar; - const Diagonal vectorD = dec().vectorD(); - RealScalar tolerance = (max)(vectorD.array().abs().maxCoeff() * NumTraits::epsilon(), - RealScalar(1) / NumTraits::highest()); // motivated by LAPACK's xGELSS + const typename Diagonal::RealReturnType vectorD(dec().vectorD()); + // In some previous versions, tolerance was set to the max of 1/highest and the maximal diagonal entry * epsilon + // as motivated by LAPACK's xGELSS: + // RealScalar tolerance = (max)(vectorD.array().abs().maxCoeff() *NumTraits::epsilon(),RealScalar(1) / NumTraits::highest()); + // However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest + // diagonal element is not well justified and to numerical issues in some cases. + // Moreover, Lapack's xSYTRS routines use 0 for the tolerance. + RealScalar tolerance = RealScalar(1) / NumTraits::highest(); + for (Index i = 0; i < vectorD.size(); ++i) { if(abs(vectorD(i)) > tolerance) - dst.row(i) /= vectorD(i); + dst.row(i) /= vectorD(i); else - dst.row(i).setZero(); + dst.row(i).setZero(); } // dst = L^-T (D^-1 L^-1 P b) @@ -576,7 +577,7 @@ MatrixType LDLT::reconstructedMatrix() const // L^* P res = matrixU() * res; // D(L^*P) - res = vectorD().asDiagonal() * res; + res = vectorD().real().asDiagonal() * res; // L(DL^*P) res = matrixL() * res; // P^T (LDL^*P) diff --git a/deps/eigen-3.2.1/Eigen/src/Cholesky/LLT.h b/deps/eigen-3.2.8/Eigen/src/Cholesky/LLT.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Cholesky/LLT.h rename to deps/eigen-3.2.8/Eigen/src/Cholesky/LLT.h index 2e6189f7..7c11a2dc 100644 --- a/deps/eigen-3.2.1/Eigen/src/Cholesky/LLT.h +++ b/deps/eigen-3.2.8/Eigen/src/Cholesky/LLT.h @@ -174,6 +174,12 @@ template class LLT LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1); protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + /** \internal * Used to compute and store L * The strict upper part is not used and even not initialized. @@ -283,7 +289,7 @@ template struct llt_inplace return k; mat.coeffRef(k,k) = x = sqrt(x); if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint(); - if (rs>0) A21 *= RealScalar(1)/x; + if (rs>0) A21 /= x; } return -1; } @@ -384,6 +390,8 @@ template struct LLT_Traits template LLT& LLT::compute(const MatrixType& a) { + check_template_parameters(); + eigen_assert(a.rows()==a.cols()); const Index size = a.rows(); m_matrix.resize(size, size); diff --git a/deps/eigen-3.2.1/Eigen/src/Cholesky/LLT_MKL.h b/deps/eigen-3.2.8/Eigen/src/Cholesky/LLT_MKL.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Cholesky/LLT_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Cholesky/LLT_MKL.h index 64daa445..66675d74 100644 --- a/deps/eigen-3.2.1/Eigen/src/Cholesky/LLT_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/Cholesky/LLT_MKL.h @@ -60,7 +60,7 @@ template<> struct mkl_llt \ lda = m.outerStride(); \ \ info = LAPACKE_##MKLPREFIX##potrf( matrix_order, uplo, size, (MKLTYPE*)a, lda ); \ - info = (info==0) ? Success : NumericalIssue; \ + info = (info==0) ? -1 : info>0 ? info-1 : size; \ return info; \ } \ }; \ diff --git a/deps/eigen-3.2.1/Eigen/src/CholmodSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/CholmodSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/CholmodSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/CholmodSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/CholmodSupport/CholmodSupport.h b/deps/eigen-3.2.8/Eigen/src/CholmodSupport/CholmodSupport.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/CholmodSupport/CholmodSupport.h rename to deps/eigen-3.2.8/Eigen/src/CholmodSupport/CholmodSupport.h index c449960d..99dbe171 100644 --- a/deps/eigen-3.2.1/Eigen/src/CholmodSupport/CholmodSupport.h +++ b/deps/eigen-3.2.8/Eigen/src/CholmodSupport/CholmodSupport.h @@ -78,7 +78,7 @@ cholmod_sparse viewAsCholmod(SparseMatrix<_Scalar,_Options,_Index>& mat) { res.itype = CHOLMOD_INT; } - else if (internal::is_same<_Index,UF_long>::value) + else if (internal::is_same<_Index,SuiteSparse_long>::value) { res.itype = CHOLMOD_LONG; } @@ -395,7 +395,7 @@ class CholmodSimplicialLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimpl CholmodSimplicialLLT(const MatrixType& matrix) : Base() { init(); - compute(matrix); + Base::compute(matrix); } ~CholmodSimplicialLLT() {} @@ -442,7 +442,7 @@ class CholmodSimplicialLDLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimp CholmodSimplicialLDLT(const MatrixType& matrix) : Base() { init(); - compute(matrix); + Base::compute(matrix); } ~CholmodSimplicialLDLT() {} @@ -487,7 +487,7 @@ class CholmodSupernodalLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSuper CholmodSupernodalLLT(const MatrixType& matrix) : Base() { init(); - compute(matrix); + Base::compute(matrix); } ~CholmodSupernodalLLT() {} @@ -534,7 +534,7 @@ class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecom CholmodDecomposition(const MatrixType& matrix) : Base() { init(); - compute(matrix); + Base::compute(matrix); } ~CholmodDecomposition() {} diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Array.h b/deps/eigen-3.2.8/Eigen/src/Core/Array.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/Array.h rename to deps/eigen-3.2.8/Eigen/src/Core/Array.h index 0ab03eff..0b9c38c8 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Array.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Array.h @@ -124,6 +124,21 @@ class Array } #endif +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + Array(Array&& other) + : Base(std::move(other)) + { + Base::_check_template_params(); + if (RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic) + Base::_set_noalias(other); + } + Array& operator=(Array&& other) + { + other.swap(*this); + return *this; + } +#endif + /** Constructs a vector or row-vector with given dimension. \only_for_vectors * * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, diff --git a/deps/eigen-3.2.1/Eigen/src/Core/ArrayBase.h b/deps/eigen-3.2.8/Eigen/src/Core/ArrayBase.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/ArrayBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/ArrayBase.h index 38852600..33ff5537 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/ArrayBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/ArrayBase.h @@ -46,9 +46,6 @@ template class ArrayBase typedef ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl; - using internal::special_scalar_op_base::Scalar, - typename NumTraits::Scalar>::Real>::operator*; - typedef typename internal::traits::StorageKind StorageKind; typedef typename internal::traits::Index Index; typedef typename internal::traits::Scalar Scalar; @@ -56,6 +53,7 @@ template class ArrayBase typedef typename NumTraits::Real RealScalar; typedef DenseBase Base; + using Base::operator*; using Base::RowsAtCompileTime; using Base::ColsAtCompileTime; using Base::SizeAtCompileTime; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/ArrayWrapper.h b/deps/eigen-3.2.8/Eigen/src/Core/ArrayWrapper.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/ArrayWrapper.h rename to deps/eigen-3.2.8/Eigen/src/Core/ArrayWrapper.h index a791bc35..b4641e2a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/ArrayWrapper.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/ArrayWrapper.h @@ -29,6 +29,11 @@ struct traits > : public traits::type > { typedef ArrayXpr XprKind; + // Let's remove NestByRefBit + enum { + Flags0 = traits::type >::Flags, + Flags = Flags0 & ~NestByRefBit + }; }; } @@ -149,6 +154,11 @@ struct traits > : public traits::type > { typedef MatrixXpr XprKind; + // Let's remove NestByRefBit + enum { + Flags0 = traits::type >::Flags, + Flags = Flags0 & ~NestByRefBit + }; }; } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Assign.h b/deps/eigen-3.2.8/Eigen/src/Core/Assign.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/Assign.h rename to deps/eigen-3.2.8/Eigen/src/Core/Assign.h index 1dccc2f4..f4817317 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Assign.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Assign.h @@ -439,19 +439,26 @@ struct assign_impl PacketTraits; + typedef typename Derived1::Scalar Scalar; + typedef packet_traits PacketTraits; enum { packetSize = PacketTraits::size, alignable = PacketTraits::AlignedOnScalar, - dstAlignment = alignable ? Aligned : int(assign_traits::DstIsAligned) , + dstIsAligned = assign_traits::DstIsAligned, + dstAlignment = alignable ? Aligned : int(dstIsAligned), srcAlignment = assign_traits::JointAlignment }; + const Scalar *dst_ptr = &dst.coeffRef(0,0); + if((!bool(dstIsAligned)) && (size_t(dst_ptr) % sizeof(Scalar))>0) + { + // the pointer is not aligend-on scalar, so alignment is not possible + return assign_impl::run(dst, src); + } const Index packetAlignedMask = packetSize - 1; const Index innerSize = dst.innerSize(); const Index outerSize = dst.outerSize(); const Index alignedStep = alignable ? (packetSize - dst.outerStride() % packetSize) & packetAlignedMask : 0; - Index alignedStart = ((!alignable) || assign_traits::DstIsAligned) ? 0 - : internal::first_aligned(&dst.coeffRef(0,0), innerSize); + Index alignedStart = ((!alignable) || bool(dstIsAligned)) ? 0 : internal::first_aligned(dst_ptr, innerSize); for(Index outer = 0; outer < outerSize; ++outer) { diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Assign_MKL.h b/deps/eigen-3.2.8/Eigen/src/Core/Assign_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Assign_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Core/Assign_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/BandMatrix.h b/deps/eigen-3.2.8/Eigen/src/Core/BandMatrix.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/BandMatrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/BandMatrix.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Block.h b/deps/eigen-3.2.8/Eigen/src/Core/Block.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/Block.h rename to deps/eigen-3.2.8/Eigen/src/Core/Block.h index 358b3188..82789444 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Block.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Block.h @@ -66,8 +66,9 @@ struct traits > : traits::MaxColsAtCompileTime), XprTypeIsRowMajor = (int(traits::Flags)&RowMajorBit) != 0, - IsRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1 - : (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0 + IsDense = is_same::value, + IsRowMajor = (IsDense&&MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1 + : (IsDense&&MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0 : XprTypeIsRowMajor, HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor), InnerSize = IsRowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime), @@ -81,7 +82,7 @@ struct traits > : traits::Flags&LinearAccessBit))) ? LinearAccessBit : 0, FlagsLvalueBit = is_lvalue::value ? LvalueBit : 0, FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0, Flags0 = traits::Flags & ( (HereditaryBits & ~RowMajorBit) | diff --git a/deps/eigen-3.2.1/Eigen/src/Core/BooleanRedux.h b/deps/eigen-3.2.8/Eigen/src/Core/BooleanRedux.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/BooleanRedux.h rename to deps/eigen-3.2.8/Eigen/src/Core/BooleanRedux.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CommaInitializer.h b/deps/eigen-3.2.8/Eigen/src/Core/CommaInitializer.h similarity index 88% rename from deps/eigen-3.2.1/Eigen/src/Core/CommaInitializer.h rename to deps/eigen-3.2.8/Eigen/src/Core/CommaInitializer.h index a96867af..a036d8c3 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/CommaInitializer.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/CommaInitializer.h @@ -43,6 +43,17 @@ struct CommaInitializer m_xpr.block(0, 0, other.rows(), other.cols()) = other; } + /* Copy/Move constructor which transfers ownership. This is crucial in + * absence of return value optimization to avoid assertions during destruction. */ + // FIXME in C++11 mode this could be replaced by a proper RValue constructor + inline CommaInitializer(const CommaInitializer& o) + : m_xpr(o.m_xpr), m_row(o.m_row), m_col(o.m_col), m_currentBlockRows(o.m_currentBlockRows) { + // Mark original object as finished. In absence of R-value references we need to const_cast: + const_cast(o).m_row = m_xpr.rows(); + const_cast(o).m_col = m_xpr.cols(); + const_cast(o).m_currentBlockRows = 0; + } + /* inserts a scalar value in the target matrix */ CommaInitializer& operator,(const Scalar& s) { diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CoreIterators.h b/deps/eigen-3.2.8/Eigen/src/Core/CoreIterators.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/CoreIterators.h rename to deps/eigen-3.2.8/Eigen/src/Core/CoreIterators.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CwiseBinaryOp.h b/deps/eigen-3.2.8/Eigen/src/Core/CwiseBinaryOp.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/CwiseBinaryOp.h rename to deps/eigen-3.2.8/Eigen/src/Core/CwiseBinaryOp.h index 586f77aa..519a866e 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/CwiseBinaryOp.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/CwiseBinaryOp.h @@ -81,7 +81,8 @@ struct traits > ) ), Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit), - CoeffReadCost = LhsCoeffReadCost + RhsCoeffReadCost + functor_traits::Cost + Cost0 = EIGEN_ADD_COST(LhsCoeffReadCost,RhsCoeffReadCost), + CoeffReadCost = EIGEN_ADD_COST(Cost0,functor_traits::Cost) }; }; } // end namespace internal diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CwiseNullaryOp.h b/deps/eigen-3.2.8/Eigen/src/Core/CwiseNullaryOp.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/CwiseNullaryOp.h rename to deps/eigen-3.2.8/Eigen/src/Core/CwiseNullaryOp.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryOp.h b/deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryOp.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryOp.h rename to deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryOp.h index f2de749f..f7ee60e9 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryOp.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryOp.h @@ -47,7 +47,7 @@ struct traits > Flags = _XprTypeNested::Flags & ( HereditaryBits | LinearAccessBit | AlignedBit | (functor_traits::PacketAccess ? PacketAccessBit : 0)), - CoeffReadCost = _XprTypeNested::CoeffReadCost + functor_traits::Cost + CoeffReadCost = EIGEN_ADD_COST(_XprTypeNested::CoeffReadCost, functor_traits::Cost) }; }; } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryView.h b/deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryView.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryView.h rename to deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryView.h index b2638d32..f3b2ffeb 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/CwiseUnaryView.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/CwiseUnaryView.h @@ -38,7 +38,7 @@ struct traits > typedef typename remove_all::type _MatrixTypeNested; enum { Flags = (traits<_MatrixTypeNested>::Flags & (HereditaryBits | LvalueBit | LinearAccessBit | DirectAccessBit)), - CoeffReadCost = traits<_MatrixTypeNested>::CoeffReadCost + functor_traits::Cost, + CoeffReadCost = EIGEN_ADD_COST(traits<_MatrixTypeNested>::CoeffReadCost, functor_traits::Cost), MatrixTypeInnerStride = inner_stride_at_compile_time::ret, // need to cast the sizeof's from size_t to int explicitly, otherwise: // "error: no integral type can represent all of the enumerator values diff --git a/deps/eigen-3.2.1/Eigen/src/Core/DenseBase.h b/deps/eigen-3.2.8/Eigen/src/Core/DenseBase.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/DenseBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/DenseBase.h index c5800f6c..4b371b07 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/DenseBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/DenseBase.h @@ -40,15 +40,14 @@ static inline void check_DenseIndex_is_signed() { */ template class DenseBase #ifndef EIGEN_PARSED_BY_DOXYGEN - : public internal::special_scalar_op_base::Scalar, - typename NumTraits::Scalar>::Real> + : public internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real, + DenseCoeffsBase > #else : public DenseCoeffsBase #endif // not EIGEN_PARSED_BY_DOXYGEN { public: - using internal::special_scalar_op_base::Scalar, - typename NumTraits::Scalar>::Real>::operator*; class InnerIterator; @@ -63,8 +62,9 @@ template class DenseBase typedef typename internal::traits::Scalar Scalar; typedef typename internal::packet_traits::type PacketScalar; typedef typename NumTraits::Real RealScalar; + typedef internal::special_scalar_op_base > Base; - typedef DenseCoeffsBase Base; + using Base::operator*; using Base::derived; using Base::const_cast_derived; using Base::rows; @@ -183,10 +183,6 @@ template class DenseBase /** \returns the number of nonzero coefficients which is in practice the number * of stored coefficients. */ inline Index nonZeros() const { return size(); } - /** \returns true if either the number of rows or the number of columns is equal to 1. - * In other words, this function returns - * \code rows()==1 || cols()==1 \endcode - * \sa rows(), cols(), IsVectorAtCompileTime. */ /** \returns the outer size. * @@ -266,11 +262,13 @@ template class DenseBase template Derived& operator=(const ReturnByValue& func); -#ifndef EIGEN_PARSED_BY_DOXYGEN - /** Copies \a other into *this without evaluating other. \returns a reference to *this. */ + /** \internal Copies \a other into *this without evaluating other. \returns a reference to *this. */ template Derived& lazyAssign(const DenseBase& other); -#endif // not EIGEN_PARSED_BY_DOXYGEN + + /** \internal Evaluates \a other into *this. \returns a reference to *this. */ + template + Derived& lazyAssign(const ReturnByValue& other); CommaInitializer operator<< (const Scalar& s); @@ -462,8 +460,10 @@ template class DenseBase template RealScalar lpNorm() const; template - const Replicate replicate() const; - const Replicate replicate(Index rowFacor,Index colFactor) const; + inline const Replicate replicate() const; + + typedef Replicate ReplicateReturnType; + inline const ReplicateReturnType replicate(Index rowFacor,Index colFactor) const; typedef Reverse ReverseReturnType; typedef const Reverse ConstReverseReturnType; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/DenseCoeffsBase.h b/deps/eigen-3.2.8/Eigen/src/Core/DenseCoeffsBase.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/DenseCoeffsBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/DenseCoeffsBase.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/DenseStorage.h b/deps/eigen-3.2.8/Eigen/src/Core/DenseStorage.h similarity index 51% rename from deps/eigen-3.2.1/Eigen/src/Core/DenseStorage.h rename to deps/eigen-3.2.8/Eigen/src/Core/DenseStorage.h index 3e7f9c1b..568493cb 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/DenseStorage.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/DenseStorage.h @@ -24,6 +24,14 @@ namespace internal { struct constructor_without_unaligned_array_assert {}; +template void check_static_allocation_size() +{ + // if EIGEN_STACK_ALLOCATION_LIMIT is defined to 0, then no limit + #if EIGEN_STACK_ALLOCATION_LIMIT + EIGEN_STATIC_ASSERT(Size * sizeof(T) <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + #endif +} + /** \internal * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned: * to 16 bytes boundary if the total size is a multiple of 16 bytes. @@ -38,12 +46,12 @@ struct plain_array plain_array() { - EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + check_static_allocation_size(); } plain_array(constructor_without_unaligned_array_assert) { - EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + check_static_allocation_size(); } }; @@ -76,12 +84,12 @@ struct plain_array plain_array() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf); - EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + check_static_allocation_size(); } plain_array(constructor_without_unaligned_array_assert) { - EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + check_static_allocation_size(); } }; @@ -114,33 +122,41 @@ template class DenseSt { internal::plain_array m_data; public: - inline DenseStorage() {} - inline DenseStorage(internal::constructor_without_unaligned_array_assert) + DenseStorage() {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(internal::constructor_without_unaligned_array_assert()) {} - inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} - inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); } - static inline DenseIndex rows(void) {return _Rows;} - static inline DenseIndex cols(void) {return _Cols;} - inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} - inline void resize(DenseIndex,DenseIndex,DenseIndex) {} - inline const T *data() const { return m_data.array; } - inline T *data() { return m_data.array; } + DenseStorage(const DenseStorage& other) : m_data(other.m_data) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) m_data = other.m_data; + return *this; + } + DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); } + static DenseIndex rows(void) {return _Rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + void resize(DenseIndex,DenseIndex,DenseIndex) {} + const T *data() const { return m_data.array; } + T *data() { return m_data.array; } }; // null matrix template class DenseStorage { public: - inline DenseStorage() {} - inline DenseStorage(internal::constructor_without_unaligned_array_assert) {} - inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} - inline void swap(DenseStorage& ) {} - static inline DenseIndex rows(void) {return _Rows;} - static inline DenseIndex cols(void) {return _Cols;} - inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} - inline void resize(DenseIndex,DenseIndex,DenseIndex) {} - inline const T *data() const { return 0; } - inline T *data() { return 0; } + DenseStorage() {} + DenseStorage(internal::constructor_without_unaligned_array_assert) {} + DenseStorage(const DenseStorage&) {} + DenseStorage& operator=(const DenseStorage&) { return *this; } + DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + void swap(DenseStorage& ) {} + static DenseIndex rows(void) {return _Rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + void resize(DenseIndex,DenseIndex,DenseIndex) {} + const T *data() const { return 0; } + T *data() { return 0; } }; // more specializations for null matrices; these are necessary to resolve ambiguities @@ -160,18 +176,29 @@ template class DenseStorage class DenseStorage m_data; DenseIndex m_rows; public: - inline DenseStorage() : m_rows(0) {} - inline DenseStorage(internal::constructor_without_unaligned_array_assert) + DenseStorage() : m_rows(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {} - inline DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex) : m_rows(nbRows) {} - inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } - inline DenseIndex rows(void) const {return m_rows;} - inline DenseIndex cols(void) const {return _Cols;} - inline void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } - inline void resize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } - inline const T *data() const { return m_data.array; } - inline T *data() { return m_data.array; } + DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) + { + m_data = other.m_data; + m_rows = other.m_rows; + } + return *this; + } + DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex) : m_rows(nbRows) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + DenseIndex rows(void) const {return m_rows;} + DenseIndex cols(void) const {return _Cols;} + void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } + void resize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } + const T *data() const { return m_data.array; } + T *data() { return m_data.array; } }; // dynamic-size matrix with fixed-size storage and fixed height @@ -199,17 +236,27 @@ template class DenseStorage m_data; DenseIndex m_cols; public: - inline DenseStorage() : m_cols(0) {} - inline DenseStorage(internal::constructor_without_unaligned_array_assert) + DenseStorage() : m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {} - inline DenseStorage(DenseIndex, DenseIndex, DenseIndex nbCols) : m_cols(nbCols) {} - inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } - inline DenseIndex rows(void) const {return _Rows;} - inline DenseIndex cols(void) const {return m_cols;} - inline void conservativeResize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } - inline void resize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } - inline const T *data() const { return m_data.array; } - inline T *data() { return m_data.array; } + DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_cols(other.m_cols) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) + { + m_data = other.m_data; + m_cols = other.m_cols; + } + return *this; + } + DenseStorage(DenseIndex, DenseIndex, DenseIndex nbCols) : m_cols(nbCols) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + DenseIndex rows(void) const {return _Rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } + void resize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } + const T *data() const { return m_data.array; } + T *data() { return m_data.array; } }; // purely dynamic matrix. @@ -219,18 +266,35 @@ template class DenseStorage(size)), m_rows(nbRows), m_cols(nbCols) { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } - inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); } - inline void swap(DenseStorage& other) +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_rows(std::move(other.m_rows)) + , m_cols(std::move(other.m_cols)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_rows, other.m_rows); + swap(m_cols, other.m_cols); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); } + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); } - inline DenseIndex rows(void) const {return m_rows;} - inline DenseIndex cols(void) const {return m_cols;} - inline void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols) + DenseIndex rows(void) const {return m_rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols) { m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*m_cols); m_rows = nbRows; @@ -250,8 +314,11 @@ template class DenseStorage class DenseStorage(size)), m_cols(nbCols) + DenseStorage() : m_data(0), m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {} + DenseStorage(DenseIndex size, DenseIndex, DenseIndex nbCols) : m_data(internal::conditional_aligned_new_auto(size)), m_cols(nbCols) { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } - inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); } - inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } - static inline DenseIndex rows(void) {return _Rows;} - inline DenseIndex cols(void) const {return m_cols;} - inline void conservativeResize(DenseIndex size, DenseIndex, DenseIndex nbCols) +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_cols(std::move(other.m_cols)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_cols, other.m_cols); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); } + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + static DenseIndex rows(void) {return _Rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex size, DenseIndex, DenseIndex nbCols) { m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, _Rows*m_cols); m_cols = nbCols; @@ -286,8 +368,11 @@ template class DenseStorage class DenseStorage(size)), m_rows(nbRows) + DenseStorage() : m_data(0), m_rows(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {} + DenseStorage(DenseIndex size, DenseIndex nbRows, DenseIndex) : m_data(internal::conditional_aligned_new_auto(size)), m_rows(nbRows) { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } - inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); } - inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } - inline DenseIndex rows(void) const {return m_rows;} - static inline DenseIndex cols(void) {return _Cols;} - inline void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex) +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_rows(std::move(other.m_rows)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_rows, other.m_rows); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); } + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + DenseIndex rows(void) const {return m_rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex) { m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*_Cols); m_rows = nbRows; @@ -322,8 +422,11 @@ template class DenseStorage::diagonal() const * * \sa MatrixBase::diagonal(), class Diagonal */ template -inline typename MatrixBase::template DiagonalIndexReturnType::Type +inline typename MatrixBase::DiagonalDynamicIndexReturnType MatrixBase::diagonal(Index index) { - return typename DiagonalIndexReturnType::Type(derived(), index); + return DiagonalDynamicIndexReturnType(derived(), index); } /** This is the const version of diagonal(Index). */ template -inline typename MatrixBase::template ConstDiagonalIndexReturnType::Type +inline typename MatrixBase::ConstDiagonalDynamicIndexReturnType MatrixBase::diagonal(Index index) const { - return typename ConstDiagonalIndexReturnType::Type(derived(), index); + return ConstDiagonalDynamicIndexReturnType(derived(), index); } /** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this diff --git a/deps/eigen-3.2.1/Eigen/src/Core/DiagonalMatrix.h b/deps/eigen-3.2.8/Eigen/src/Core/DiagonalMatrix.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/DiagonalMatrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/DiagonalMatrix.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/DiagonalProduct.h b/deps/eigen-3.2.8/Eigen/src/Core/DiagonalProduct.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/Core/DiagonalProduct.h rename to deps/eigen-3.2.8/Eigen/src/Core/DiagonalProduct.h index c03a0c2e..cc6b536e 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/DiagonalProduct.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/DiagonalProduct.h @@ -34,8 +34,9 @@ struct traits > _Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && _SameTypes && (_ScalarAccessOnDiag || (bool(int(DiagonalType::DiagonalVectorType::Flags)&PacketAccessBit))), _LinearAccessMask = (RowsAtCompileTime==1 || ColsAtCompileTime==1) ? LinearAccessBit : 0, - Flags = ((HereditaryBits|_LinearAccessMask) & (unsigned int)(MatrixType::Flags)) | (_Vectorizable ? PacketAccessBit : 0) | AlignedBit,//(int(MatrixType::Flags)&int(DiagonalType::DiagonalVectorType::Flags)&AlignedBit), - CoeffReadCost = NumTraits::MulCost + MatrixType::CoeffReadCost + DiagonalType::DiagonalVectorType::CoeffReadCost + Flags = ((HereditaryBits|_LinearAccessMask|AlignedBit) & (unsigned int)(MatrixType::Flags)) | (_Vectorizable ? PacketAccessBit : 0),//(int(MatrixType::Flags)&int(DiagonalType::DiagonalVectorType::Flags)&AlignedBit), + Cost0 = EIGEN_ADD_COST(NumTraits::MulCost, MatrixType::CoeffReadCost), + CoeffReadCost = EIGEN_ADD_COST(Cost0,DiagonalType::DiagonalVectorType::CoeffReadCost) }; }; } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Dot.h b/deps/eigen-3.2.8/Eigen/src/Core/Dot.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Dot.h rename to deps/eigen-3.2.8/Eigen/src/Core/Dot.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/EigenBase.h b/deps/eigen-3.2.8/Eigen/src/Core/EigenBase.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/EigenBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/EigenBase.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Flagged.h b/deps/eigen-3.2.8/Eigen/src/Core/Flagged.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Flagged.h rename to deps/eigen-3.2.8/Eigen/src/Core/Flagged.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/ForceAlignedAccess.h b/deps/eigen-3.2.8/Eigen/src/Core/ForceAlignedAccess.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/ForceAlignedAccess.h rename to deps/eigen-3.2.8/Eigen/src/Core/ForceAlignedAccess.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Functors.h b/deps/eigen-3.2.8/Eigen/src/Core/Functors.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/Functors.h rename to deps/eigen-3.2.8/Eigen/src/Core/Functors.h index 04fb2173..5f14c658 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Functors.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Functors.h @@ -259,6 +259,47 @@ template<> struct functor_traits { }; }; +/** \internal + * \brief Template functors for comparison of two scalars + * \todo Implement packet-comparisons + */ +template struct scalar_cmp_op; + +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = false + }; +}; + +template +struct result_of(Scalar,Scalar)> { + typedef bool type; +}; + + +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a==b;} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a<=b;} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return !(a<=b || b<=a);} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a!=b;} +}; + // unary functors: /** \internal @@ -589,7 +630,7 @@ struct linspaced_op_impl template EIGEN_STRONG_INLINE const Packet packetOp(Index i) const - { return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1(i),m_interPacket))); } + { return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1(Scalar(i)),m_interPacket))); } const Scalar m_low; const Scalar m_step; @@ -609,7 +650,7 @@ template struct functor_traits< linspaced_o template struct linspaced_op { typedef typename packet_traits::type Packet; - linspaced_op(const Scalar& low, const Scalar& high, DenseIndex num_steps) : impl((num_steps==1 ? high : low), (num_steps==1 ? Scalar() : (high-low)/(num_steps-1))) {} + linspaced_op(const Scalar& low, const Scalar& high, DenseIndex num_steps) : impl((num_steps==1 ? high : low), (num_steps==1 ? Scalar() : (high-low)/Scalar(num_steps-1))) {} template EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return impl(i); } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Fuzzy.h b/deps/eigen-3.2.8/Eigen/src/Core/Fuzzy.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Fuzzy.h rename to deps/eigen-3.2.8/Eigen/src/Core/Fuzzy.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/GeneralProduct.h b/deps/eigen-3.2.8/Eigen/src/Core/GeneralProduct.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/GeneralProduct.h rename to deps/eigen-3.2.8/Eigen/src/Core/GeneralProduct.h index 2a59d946..29ac522d 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/GeneralProduct.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/GeneralProduct.h @@ -232,7 +232,7 @@ EIGEN_DONT_INLINE void outer_product_selector_run(const ProductType& prod, Dest& // FIXME not very good if rhs is real and lhs complex while alpha is real too const Index cols = dest.cols(); for (Index j=0; j @@ -257,7 +257,7 @@ template class GeneralProduct : public ProductBase, Lhs, Rhs> { - template struct IsRowMajor : internal::conditional<(int(T::Flags)&RowMajorBit), internal::true_type, internal::false_type>::type {}; + template struct is_row_major : internal::conditional<(int(T::Flags)&RowMajorBit), internal::true_type, internal::false_type>::type {}; public: EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) @@ -281,22 +281,22 @@ class GeneralProduct template inline void evalTo(Dest& dest) const { - internal::outer_product_selector_run(*this, dest, set(), IsRowMajor()); + internal::outer_product_selector_run(*this, dest, set(), is_row_major()); } template inline void addTo(Dest& dest) const { - internal::outer_product_selector_run(*this, dest, add(), IsRowMajor()); + internal::outer_product_selector_run(*this, dest, add(), is_row_major()); } template inline void subTo(Dest& dest) const { - internal::outer_product_selector_run(*this, dest, sub(), IsRowMajor()); + internal::outer_product_selector_run(*this, dest, sub(), is_row_major()); } template void scaleAndAddTo(Dest& dest, const Scalar& alpha) const { - internal::outer_product_selector_run(*this, dest, adds(alpha), IsRowMajor()); + internal::outer_product_selector_run(*this, dest, adds(alpha), is_row_major()); } }; @@ -425,15 +425,18 @@ template<> struct gemv_selector ResScalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(prod.lhs()) * RhsBlasTraits::extractScalarFactor(prod.rhs()); + // make sure Dest is a compile-time vector type (bug 1166) + typedef typename conditional::type ActualDest; + enum { // FIXME find a way to allow an inner stride on the result if packet_traits::size==1 // on, the other hand it is good for the cache to pack the vector anyways... - EvalToDestAtCompileTime = Dest::InnerStrideAtCompileTime==1, + EvalToDestAtCompileTime = (ActualDest::InnerStrideAtCompileTime==1), ComplexByReal = (NumTraits::IsComplex) && (!NumTraits::IsComplex), - MightCannotUseDest = (Dest::InnerStrideAtCompileTime!=1) || ComplexByReal + MightCannotUseDest = (ActualDest::InnerStrideAtCompileTime!=1) || ComplexByReal }; - gemv_static_vector_if static_dest; + gemv_static_vector_if static_dest; bool alphaIsCompatible = (!ComplexByReal) || (numext::imag(actualAlpha)==RealScalar(0)); bool evalToDest = EvalToDestAtCompileTime && alphaIsCompatible; @@ -522,7 +525,7 @@ template<> struct gemv_selector actualLhs.rows(), actualLhs.cols(), actualLhs.data(), actualLhs.outerStride(), actualRhsPtr, 1, - dest.data(), dest.innerStride(), + dest.data(), dest.col(0).innerStride(), //NOTE if dest is not a vector at compile-time, then dest.innerStride() might be wrong. (bug 1166) actualAlpha); } }; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/GenericPacketMath.h b/deps/eigen-3.2.8/Eigen/src/Core/GenericPacketMath.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/GenericPacketMath.h rename to deps/eigen-3.2.8/Eigen/src/Core/GenericPacketMath.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/GlobalFunctions.h b/deps/eigen-3.2.8/Eigen/src/Core/GlobalFunctions.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/GlobalFunctions.h rename to deps/eigen-3.2.8/Eigen/src/Core/GlobalFunctions.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/IO.h b/deps/eigen-3.2.8/Eigen/src/Core/IO.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/IO.h rename to deps/eigen-3.2.8/Eigen/src/Core/IO.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Map.h b/deps/eigen-3.2.8/Eigen/src/Core/Map.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Map.h rename to deps/eigen-3.2.8/Eigen/src/Core/Map.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/MapBase.h b/deps/eigen-3.2.8/Eigen/src/Core/MapBase.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/Core/MapBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/MapBase.h index 6876de58..81efc4a6 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/MapBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/MapBase.h @@ -123,7 +123,7 @@ template class MapBase return internal::ploadt(m_data + index * innerStride()); } - inline MapBase(PointerType dataPtr) : m_data(dataPtr), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime) + explicit inline MapBase(PointerType dataPtr) : m_data(dataPtr), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime) { EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) checkSanity(); @@ -149,6 +149,10 @@ template class MapBase checkSanity(); } + #ifdef EIGEN_MAPBASE_PLUGIN + #include EIGEN_MAPBASE_PLUGIN + #endif + protected: void checkSanity() const @@ -157,7 +161,7 @@ template class MapBase internal::inner_stride_at_compile_time::ret==1), PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1); eigen_assert(EIGEN_IMPLIES(internal::traits::Flags&AlignedBit, (size_t(m_data) % 16) == 0) - && "data is not aligned"); + && "input pointer is not aligned on a 16 byte boundary"); } PointerType m_data; @@ -168,6 +172,7 @@ template class MapBase template class MapBase : public MapBase { + typedef MapBase ReadOnlyMapBase; public: typedef MapBase Base; @@ -230,13 +235,17 @@ template class MapBase Derived& operator=(const MapBase& other) { - Base::Base::operator=(other); + ReadOnlyMapBase::Base::operator=(other); return derived(); } - using Base::Base::operator=; + // In theory we could simply refer to Base:Base::operator=, but MSVC does not like Base::Base, + // see bugs 821 and 920. + using ReadOnlyMapBase::Base::operator=; }; +#undef EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS + } // end namespace Eigen #endif // EIGEN_MAPBASE_H diff --git a/deps/eigen-3.2.1/Eigen/src/Core/MathFunctions.h b/deps/eigen-3.2.8/Eigen/src/Core/MathFunctions.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/MathFunctions.h rename to deps/eigen-3.2.8/Eigen/src/Core/MathFunctions.h index 2bfc5ebd..4e17ecd4 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/MathFunctions.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/MathFunctions.h @@ -294,7 +294,7 @@ struct hypot_impl RealScalar _x = abs(x); RealScalar _y = abs(y); RealScalar p = (max)(_x, _y); - if(p==RealScalar(0)) return 0; + if(p==RealScalar(0)) return RealScalar(0); RealScalar q = (min)(_x, _y); RealScalar qp = q/p; return p * sqrt(RealScalar(1) + qp*qp); @@ -707,21 +707,21 @@ struct scalar_fuzzy_impl : scalar_fuzzy_default_impl:: template inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, - typename NumTraits::Real precision = NumTraits::dummy_precision()) + const typename NumTraits::Real &precision = NumTraits::dummy_precision()) { return scalar_fuzzy_impl::template isMuchSmallerThan(x, y, precision); } template inline bool isApprox(const Scalar& x, const Scalar& y, - typename NumTraits::Real precision = NumTraits::dummy_precision()) + const typename NumTraits::Real &precision = NumTraits::dummy_precision()) { return scalar_fuzzy_impl::isApprox(x, y, precision); } template inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, - typename NumTraits::Real precision = NumTraits::dummy_precision()) + const typename NumTraits::Real &precision = NumTraits::dummy_precision()) { return scalar_fuzzy_impl::isApproxOrLessThan(x, y, precision); } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Matrix.h b/deps/eigen-3.2.8/Eigen/src/Core/Matrix.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/Matrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/Matrix.h index d7d0b5b9..02be142d 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Matrix.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Matrix.h @@ -211,6 +211,21 @@ class Matrix : Base(internal::constructor_without_unaligned_array_assert()) { Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED } +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + Matrix(Matrix&& other) + : Base(std::move(other)) + { + Base::_check_template_params(); + if (RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic) + Base::_set_noalias(other); + } + Matrix& operator=(Matrix&& other) + { + other.swap(*this); + return *this; + } +#endif + /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors * * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, diff --git a/deps/eigen-3.2.1/Eigen/src/Core/MatrixBase.h b/deps/eigen-3.2.8/Eigen/src/Core/MatrixBase.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Core/MatrixBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/MatrixBase.h index 344b38f2..e83ef4dc 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/MatrixBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/MatrixBase.h @@ -159,13 +159,11 @@ template class MatrixBase template Derived& operator=(const ReturnByValue& other); -#ifndef EIGEN_PARSED_BY_DOXYGEN template Derived& lazyAssign(const ProductBase& other); template Derived& lazyAssign(const MatrixPowerProduct& other); -#endif // not EIGEN_PARSED_BY_DOXYGEN template Derived& operator+=(const MatrixBase& other); @@ -215,7 +213,7 @@ template class MatrixBase typedef Diagonal DiagonalReturnType; DiagonalReturnType diagonal(); - typedef typename internal::add_const >::type ConstDiagonalReturnType; + typedef typename internal::add_const >::type ConstDiagonalReturnType; ConstDiagonalReturnType diagonal() const; template struct DiagonalIndexReturnType { typedef Diagonal Type; }; @@ -223,16 +221,12 @@ template class MatrixBase template typename DiagonalIndexReturnType::Type diagonal(); template typename ConstDiagonalIndexReturnType::Type diagonal() const; + + typedef Diagonal DiagonalDynamicIndexReturnType; + typedef typename internal::add_const >::type ConstDiagonalDynamicIndexReturnType; - // Note: The "MatrixBase::" prefixes are added to help MSVC9 to match these declarations with the later implementations. - // On the other hand they confuse MSVC8... - #if (defined _MSC_VER) && (_MSC_VER >= 1500) // 2008 or later - typename MatrixBase::template DiagonalIndexReturnType::Type diagonal(Index index); - typename MatrixBase::template ConstDiagonalIndexReturnType::Type diagonal(Index index) const; - #else - typename DiagonalIndexReturnType::Type diagonal(Index index); - typename ConstDiagonalIndexReturnType::Type diagonal(Index index) const; - #endif + DiagonalDynamicIndexReturnType diagonal(Index index); + ConstDiagonalDynamicIndexReturnType diagonal(Index index) const; #ifdef EIGEN2_SUPPORT template typename internal::eigen2_part_return_type::type part(); @@ -446,6 +440,15 @@ template class MatrixBase template void applyOnTheRight(Index p, Index q, const JacobiRotation& j); +///////// SparseCore module ///////// + + template + EIGEN_STRONG_INLINE const typename SparseMatrixBase::template CwiseProductDenseReturnType::Type + cwiseProduct(const SparseMatrixBase &other) const + { + return other.cwiseProduct(derived()); + } + ///////// MatrixFunctions module ///////// typedef typename internal::stem_function::type StemFunction; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/NestByValue.h b/deps/eigen-3.2.8/Eigen/src/Core/NestByValue.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/NestByValue.h rename to deps/eigen-3.2.8/Eigen/src/Core/NestByValue.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/NoAlias.h b/deps/eigen-3.2.8/Eigen/src/Core/NoAlias.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/NoAlias.h rename to deps/eigen-3.2.8/Eigen/src/Core/NoAlias.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/NumTraits.h b/deps/eigen-3.2.8/Eigen/src/Core/NumTraits.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/NumTraits.h rename to deps/eigen-3.2.8/Eigen/src/Core/NumTraits.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/PermutationMatrix.h b/deps/eigen-3.2.8/Eigen/src/Core/PermutationMatrix.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/PermutationMatrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/PermutationMatrix.h index 1297b841..85ffae26 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/PermutationMatrix.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/PermutationMatrix.h @@ -250,6 +250,35 @@ class PermutationBase : public EigenBase template friend inline PlainPermutationType operator*(const Transpose >& other, const PermutationBase& perm) { return PlainPermutationType(internal::PermPermProduct, other.eval(), perm); } + + /** \returns the determinant of the permutation matrix, which is either 1 or -1 depending on the parity of the permutation. + * + * This function is O(\c n) procedure allocating a buffer of \c n booleans. + */ + Index determinant() const + { + Index res = 1; + Index n = size(); + Matrix mask(n); + mask.fill(false); + Index r = 0; + while(r < n) + { + // search for the next seed + while(r=n) + break; + // we got one, let's follow it until we are back to the seed + Index k0 = r++; + mask.coeffRef(k0) = true; + for(Index k=indices().coeff(k0); k!=k0; k=indices().coeff(k)) + { + mask.coeffRef(k) = true; + res = -res; + } + } + return res; + } protected: @@ -555,7 +584,10 @@ struct permut_matrix_product_retval const Index n = Side==OnTheLeft ? rows() : cols(); // FIXME we need an is_same for expression that is not sensitive to constness. For instance // is_same_xpr, Block >::value should be true. - if(is_same::value && extract_data(dst) == extract_data(m_matrix)) + if( is_same::value + && blas_traits::HasUsableDirectAccess + && blas_traits::HasUsableDirectAccess + && extract_data(dst) == extract_data(m_matrix)) { // apply the permutation inplace Matrix mask(m_permutation.size()); diff --git a/deps/eigen-3.2.1/Eigen/src/Core/PlainObjectBase.h b/deps/eigen-3.2.8/Eigen/src/Core/PlainObjectBase.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/PlainObjectBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/PlainObjectBase.h index dd34b59e..a4e4af4a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/PlainObjectBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/PlainObjectBase.h @@ -437,6 +437,36 @@ class PlainObjectBase : public internal::dense_xpr_base::type } #endif +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + PlainObjectBase(PlainObjectBase&& other) + : m_storage( std::move(other.m_storage) ) + { + } + + PlainObjectBase& operator=(PlainObjectBase&& other) + { + using std::swap; + swap(m_storage, other.m_storage); + return *this; + } +#endif + + /** Copy constructor */ + EIGEN_STRONG_INLINE PlainObjectBase(const PlainObjectBase& other) + : m_storage() + { + _check_template_params(); + lazyAssign(other); + } + + template + EIGEN_STRONG_INLINE PlainObjectBase(const DenseBase &other) + : m_storage() + { + _check_template_params(); + lazyAssign(other); + } + EIGEN_STRONG_INLINE PlainObjectBase(Index a_size, Index nbRows, Index nbCols) : m_storage(a_size, nbRows, nbCols) { @@ -573,6 +603,8 @@ class PlainObjectBase : public internal::dense_xpr_base::type : (rows() == other.rows() && cols() == other.cols()))) && "Size mismatch. Automatic resizing is disabled because EIGEN_NO_AUTOMATIC_RESIZING is defined"); EIGEN_ONLY_USED_FOR_DEBUG(other); + if(this->size()==0) + resizeLike(other); #else resizeLike(other); #endif diff --git a/deps/eigen-3.2.1/Eigen/src/Core/ProductBase.h b/deps/eigen-3.2.8/Eigen/src/Core/ProductBase.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/Core/ProductBase.h rename to deps/eigen-3.2.8/Eigen/src/Core/ProductBase.h index a494b5f8..cf74470a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/ProductBase.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/ProductBase.h @@ -85,7 +85,14 @@ class ProductBase : public MatrixBase public: +#ifndef EIGEN_NO_MALLOC + typedef typename Base::PlainObject BasePlainObject; + typedef Matrix DynPlainObject; + typedef typename internal::conditional<(BasePlainObject::SizeAtCompileTime==Dynamic) || (BasePlainObject::SizeAtCompileTime*int(sizeof(Scalar)) < int(EIGEN_STACK_ALLOCATION_LIMIT)), + BasePlainObject, DynPlainObject>::type PlainObject; +#else typedef typename Base::PlainObject PlainObject; +#endif ProductBase(const Lhs& a_lhs, const Rhs& a_rhs) : m_lhs(a_lhs), m_rhs(a_rhs) @@ -180,7 +187,12 @@ namespace internal { template struct nested, N, PlainObject> { - typedef PlainObject const& type; + typedef typename GeneralProduct::PlainObject const& type; +}; +template +struct nested, N, PlainObject> +{ + typedef typename GeneralProduct::PlainObject const& type; }; } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Random.h b/deps/eigen-3.2.8/Eigen/src/Core/Random.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Random.h rename to deps/eigen-3.2.8/Eigen/src/Core/Random.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Redux.h b/deps/eigen-3.2.8/Eigen/src/Core/Redux.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/Redux.h rename to deps/eigen-3.2.8/Eigen/src/Core/Redux.h index 50548fa9..9b8662a6 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Redux.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Redux.h @@ -247,8 +247,9 @@ struct redux_impl } }; -template -struct redux_impl +// NOTE: for SliceVectorizedTraversal we simply bypass unrolling +template +struct redux_impl { typedef typename Derived::Scalar Scalar; typedef typename packet_traits::type PacketScalar; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Ref.h b/deps/eigen-3.2.8/Eigen/src/Core/Ref.h similarity index 81% rename from deps/eigen-3.2.1/Eigen/src/Core/Ref.h rename to deps/eigen-3.2.8/Eigen/src/Core/Ref.h index 00d9e6d2..7a3becaf 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Ref.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Ref.h @@ -101,14 +101,15 @@ struct traits > template struct match { enum { HasDirectAccess = internal::has_direct_access::ret, - StorageOrderMatch = PlainObjectType::IsVectorAtCompileTime || ((PlainObjectType::Flags&RowMajorBit)==(Derived::Flags&RowMajorBit)), + StorageOrderMatch = PlainObjectType::IsVectorAtCompileTime || Derived::IsVectorAtCompileTime || ((PlainObjectType::Flags&RowMajorBit)==(Derived::Flags&RowMajorBit)), InnerStrideMatch = int(StrideType::InnerStrideAtCompileTime)==int(Dynamic) || int(StrideType::InnerStrideAtCompileTime)==int(Derived::InnerStrideAtCompileTime) || (int(StrideType::InnerStrideAtCompileTime)==0 && int(Derived::InnerStrideAtCompileTime)==1), OuterStrideMatch = Derived::IsVectorAtCompileTime || int(StrideType::OuterStrideAtCompileTime)==int(Dynamic) || int(StrideType::OuterStrideAtCompileTime)==int(Derived::OuterStrideAtCompileTime), AlignmentMatch = (_Options!=Aligned) || ((PlainObjectType::Flags&AlignedBit)==0) || ((traits::Flags&AlignedBit)==AlignedBit), - MatchAtCompileTime = HasDirectAccess && StorageOrderMatch && InnerStrideMatch && OuterStrideMatch && AlignmentMatch + ScalarTypeMatch = internal::is_same::value, + MatchAtCompileTime = HasDirectAccess && StorageOrderMatch && InnerStrideMatch && OuterStrideMatch && AlignmentMatch && ScalarTypeMatch }; typedef typename internal::conditional::type type; }; @@ -172,8 +173,12 @@ protected: } else ::new (static_cast(this)) Base(expr.data(), expr.rows(), expr.cols()); - ::new (&m_stride) StrideBase(StrideType::OuterStrideAtCompileTime==0?0:expr.outerStride(), - StrideType::InnerStrideAtCompileTime==0?0:expr.innerStride()); + + if(Expression::IsVectorAtCompileTime && (!PlainObjectType::IsVectorAtCompileTime) && ((Expression::Flags&RowMajorBit)!=(PlainObjectType::Flags&RowMajorBit))) + ::new (&m_stride) StrideBase(expr.innerStride(), StrideType::InnerStrideAtCompileTime==0?0:1); + else + ::new (&m_stride) StrideBase(StrideType::OuterStrideAtCompileTime==0?0:expr.outerStride(), + StrideType::InnerStrideAtCompileTime==0?0:expr.innerStride()); } StrideBase m_stride; @@ -183,7 +188,11 @@ protected: template class Ref : public RefBase > { + private: typedef internal::traits Traits; + template + inline Ref(const PlainObjectBase& expr, + typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0); public: typedef RefBase Base; @@ -195,17 +204,20 @@ template class Ref inline Ref(PlainObjectBase& expr, typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0) { - Base::construct(expr); + EIGEN_STATIC_ASSERT(static_cast(Traits::template match::MatchAtCompileTime), STORAGE_LAYOUT_DOES_NOT_MATCH); + Base::construct(expr.derived()); } template inline Ref(const DenseBase& expr, - typename internal::enable_if::value&&bool(Traits::template match::MatchAtCompileTime)),Derived>::type* = 0, - int = Derived::ThisConstantIsPrivateInPlainObjectBase) + typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0) #else template inline Ref(DenseBase& expr) #endif { + EIGEN_STATIC_ASSERT(static_cast(internal::is_lvalue::value), THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY); + EIGEN_STATIC_ASSERT(static_cast(Traits::template match::MatchAtCompileTime), STORAGE_LAYOUT_DOES_NOT_MATCH); + enum { THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY = Derived::ThisConstantIsPrivateInPlainObjectBase}; Base::construct(expr.const_cast_derived()); } @@ -224,13 +236,23 @@ template class Ref< EIGEN_DENSE_PUBLIC_INTERFACE(Ref) template - inline Ref(const DenseBase& expr) + inline Ref(const DenseBase& expr, + typename internal::enable_if::ScalarTypeMatch),Derived>::type* = 0) { // std::cout << match_helper::HasDirectAccess << "," << match_helper::OuterStrideMatch << "," << match_helper::InnerStrideMatch << "\n"; // std::cout << int(StrideType::OuterStrideAtCompileTime) << " - " << int(Derived::OuterStrideAtCompileTime) << "\n"; // std::cout << int(StrideType::InnerStrideAtCompileTime) << " - " << int(Derived::InnerStrideAtCompileTime) << "\n"; construct(expr.derived(), typename Traits::template match::type()); } + + inline Ref(const Ref& other) : Base(other) { + // copy constructor shall not copy the m_object, to avoid unnecessary malloc and copy + } + + template + inline Ref(const RefBase& other) { + construct(other.derived(), typename Traits::template match::type()); + } protected: diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Replicate.h b/deps/eigen-3.2.8/Eigen/src/Core/Replicate.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/Replicate.h rename to deps/eigen-3.2.8/Eigen/src/Core/Replicate.h index dde86a83..ac4537c1 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Replicate.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Replicate.h @@ -135,7 +135,7 @@ template class Replicate */ template template -inline const Replicate +const Replicate DenseBase::replicate() const { return Replicate(derived()); @@ -150,7 +150,7 @@ DenseBase::replicate() const * \sa VectorwiseOp::replicate(), DenseBase::replicate(), class Replicate */ template -inline const Replicate +const typename DenseBase::ReplicateReturnType DenseBase::replicate(Index rowFactor,Index colFactor) const { return Replicate(derived(),rowFactor,colFactor); diff --git a/deps/eigen-3.2.1/Eigen/src/Core/ReturnByValue.h b/deps/eigen-3.2.8/Eigen/src/Core/ReturnByValue.h similarity index 90% rename from deps/eigen-3.2.1/Eigen/src/Core/ReturnByValue.h rename to deps/eigen-3.2.8/Eigen/src/Core/ReturnByValue.h index d66c24ba..f635598d 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/ReturnByValue.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/ReturnByValue.h @@ -72,6 +72,8 @@ template class ReturnByValue const Unusable& coeff(Index,Index) const { return *reinterpret_cast(this); } Unusable& coeffRef(Index) { return *reinterpret_cast(this); } Unusable& coeffRef(Index,Index) { return *reinterpret_cast(this); } + template Unusable& packet(Index) const; + template Unusable& packet(Index, Index) const; #endif }; @@ -83,6 +85,15 @@ Derived& DenseBase::operator=(const ReturnByValue& other) return derived(); } +template +template +Derived& DenseBase::lazyAssign(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + + } // end namespace Eigen #endif // EIGEN_RETURNBYVALUE_H diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Reverse.h b/deps/eigen-3.2.8/Eigen/src/Core/Reverse.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Reverse.h rename to deps/eigen-3.2.8/Eigen/src/Core/Reverse.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Select.h b/deps/eigen-3.2.8/Eigen/src/Core/Select.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Select.h rename to deps/eigen-3.2.8/Eigen/src/Core/Select.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/SelfAdjointView.h b/deps/eigen-3.2.8/Eigen/src/Core/SelfAdjointView.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/SelfAdjointView.h rename to deps/eigen-3.2.8/Eigen/src/Core/SelfAdjointView.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/SelfCwiseBinaryOp.h b/deps/eigen-3.2.8/Eigen/src/Core/SelfCwiseBinaryOp.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/Core/SelfCwiseBinaryOp.h rename to deps/eigen-3.2.8/Eigen/src/Core/SelfCwiseBinaryOp.h index 22f3047b..0956475a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/SelfCwiseBinaryOp.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/SelfCwiseBinaryOp.h @@ -180,15 +180,9 @@ inline Derived& DenseBase::operator*=(const Scalar& other) template inline Derived& DenseBase::operator/=(const Scalar& other) { - typedef typename internal::conditional::IsInteger, - internal::scalar_quotient_op, - internal::scalar_product_op >::type BinOp; typedef typename Derived::PlainObject PlainObject; - SelfCwiseBinaryOp tmp(derived()); - Scalar actual_other; - if(NumTraits::IsInteger) actual_other = other; - else actual_other = Scalar(1)/other; - tmp = PlainObject::Constant(rows(),cols(), actual_other); + SelfCwiseBinaryOp, Derived, typename PlainObject::ConstantReturnType> tmp(derived()); + tmp = PlainObject::Constant(rows(),cols(), other); return derived(); } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/SolveTriangular.h b/deps/eigen-3.2.8/Eigen/src/Core/SolveTriangular.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/SolveTriangular.h rename to deps/eigen-3.2.8/Eigen/src/Core/SolveTriangular.h index ef17f288..83565ddd 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/SolveTriangular.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/SolveTriangular.h @@ -116,17 +116,17 @@ template struct triangular_solver_unroller { enum { IsLower = ((Mode&Lower)==Lower), - I = IsLower ? Index : Size - Index - 1, - S = IsLower ? 0 : I+1 + RowIndex = IsLower ? Index : Size - Index - 1, + S = IsLower ? 0 : RowIndex+1 }; static void run(const Lhs& lhs, Rhs& rhs) { if (Index>0) - rhs.coeffRef(I) -= lhs.row(I).template segment(S).transpose() + rhs.coeffRef(RowIndex) -= lhs.row(RowIndex).template segment(S).transpose() .cwiseProduct(rhs.template segment(S)).sum(); if(!(Mode & UnitDiag)) - rhs.coeffRef(I) /= lhs.coeff(I,I); + rhs.coeffRef(RowIndex) /= lhs.coeff(RowIndex,RowIndex); triangular_solver_unroller::run(lhs,rhs); } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/StableNorm.h b/deps/eigen-3.2.8/Eigen/src/Core/StableNorm.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/StableNorm.h rename to deps/eigen-3.2.8/Eigen/src/Core/StableNorm.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Stride.h b/deps/eigen-3.2.8/Eigen/src/Core/Stride.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Stride.h rename to deps/eigen-3.2.8/Eigen/src/Core/Stride.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Swap.h b/deps/eigen-3.2.8/Eigen/src/Core/Swap.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Swap.h rename to deps/eigen-3.2.8/Eigen/src/Core/Swap.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Transpose.h b/deps/eigen-3.2.8/Eigen/src/Core/Transpose.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Transpose.h rename to deps/eigen-3.2.8/Eigen/src/Core/Transpose.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Transpositions.h b/deps/eigen-3.2.8/Eigen/src/Core/Transpositions.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/Transpositions.h rename to deps/eigen-3.2.8/Eigen/src/Core/Transpositions.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/TriangularMatrix.h b/deps/eigen-3.2.8/Eigen/src/Core/TriangularMatrix.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Core/TriangularMatrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/TriangularMatrix.h index fba07365..4d65392c 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/TriangularMatrix.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/TriangularMatrix.h @@ -278,21 +278,21 @@ template class TriangularView /** Efficient triangular matrix times vector/matrix product */ template - TriangularProduct + TriangularProduct operator*(const MatrixBase& rhs) const { return TriangularProduct - + (m_matrix, rhs.derived()); } /** Efficient vector/matrix times triangular matrix product */ template friend - TriangularProduct + TriangularProduct operator*(const MatrixBase& lhs, const TriangularView& rhs) { return TriangularProduct - + (lhs.derived(),rhs.m_matrix); } @@ -380,19 +380,19 @@ template class TriangularView EIGEN_STRONG_INLINE TriangularView& operator=(const ProductBase& other) { setZero(); - return assignProduct(other,1); + return assignProduct(other.derived(),1); } template EIGEN_STRONG_INLINE TriangularView& operator+=(const ProductBase& other) { - return assignProduct(other,1); + return assignProduct(other.derived(),1); } template EIGEN_STRONG_INLINE TriangularView& operator-=(const ProductBase& other) { - return assignProduct(other,-1); + return assignProduct(other.derived(),-1); } @@ -400,25 +400,34 @@ template class TriangularView EIGEN_STRONG_INLINE TriangularView& operator=(const ScaledProduct& other) { setZero(); - return assignProduct(other,other.alpha()); + return assignProduct(other.derived(),other.alpha()); } template EIGEN_STRONG_INLINE TriangularView& operator+=(const ScaledProduct& other) { - return assignProduct(other,other.alpha()); + return assignProduct(other.derived(),other.alpha()); } template EIGEN_STRONG_INLINE TriangularView& operator-=(const ScaledProduct& other) { - return assignProduct(other,-other.alpha()); + return assignProduct(other.derived(),-other.alpha()); } protected: template EIGEN_STRONG_INLINE TriangularView& assignProduct(const ProductBase& prod, const Scalar& alpha); + + template + EIGEN_STRONG_INLINE TriangularView& assignProduct(const TriangularProduct& prod, const Scalar& alpha) + { + lazyAssign(alpha*prod.eval()); + return *this; + } MatrixTypeNested m_matrix; }; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/VectorBlock.h b/deps/eigen-3.2.8/Eigen/src/Core/VectorBlock.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/VectorBlock.h rename to deps/eigen-3.2.8/Eigen/src/Core/VectorBlock.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/VectorwiseOp.h b/deps/eigen-3.2.8/Eigen/src/Core/VectorwiseOp.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/VectorwiseOp.h rename to deps/eigen-3.2.8/Eigen/src/Core/VectorwiseOp.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/Visitor.h b/deps/eigen-3.2.8/Eigen/src/Core/Visitor.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Core/Visitor.h rename to deps/eigen-3.2.8/Eigen/src/Core/Visitor.h index 64867b7a..dd94eb8f 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/Visitor.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/Visitor.h @@ -76,14 +76,17 @@ template template void DenseBase::visit(Visitor& visitor) const { + typedef typename internal::remove_all::type ThisNested; + typename Derived::Nested thisNested(derived()); + enum { unroll = SizeAtCompileTime != Dynamic && CoeffReadCost != Dynamic && (SizeAtCompileTime == 1 || internal::functor_traits::Cost != Dynamic) && SizeAtCompileTime * CoeffReadCost + (SizeAtCompileTime-1) * internal::functor_traits::Cost <= EIGEN_UNROLLING_LIMIT }; - return internal::visitor_impl::run(derived(), visitor); + >::run(thisNested, visitor); } namespace internal { diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/Complex.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/Complex.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/Complex.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/Complex.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/PacketMath.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/PacketMath.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/AltiVec/PacketMath.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/AltiVec/PacketMath.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/arch/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/arch/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/Default/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/arch/Default/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/Default/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/arch/Default/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/Default/Settings.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/Default/Settings.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/Default/Settings.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/Default/Settings.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/Complex.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/Complex.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/Complex.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/Complex.h index f183d31d..8d9255ee 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/Complex.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/Complex.h @@ -110,7 +110,7 @@ template<> EIGEN_STRONG_INLINE Packet2cf ploaddup(const std::complex< template<> EIGEN_STRONG_INLINE void pstore >(std::complex * to, const Packet2cf& from) { EIGEN_DEBUG_ALIGNED_STORE pstore((float*)to, from.v); } template<> EIGEN_STRONG_INLINE void pstoreu >(std::complex * to, const Packet2cf& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, from.v); } -template<> EIGEN_STRONG_INLINE void prefetch >(const std::complex * addr) { __pld((float *)addr); } +template<> EIGEN_STRONG_INLINE void prefetch >(const std::complex * addr) { EIGEN_ARM_PREFETCH((float *)addr); } template<> EIGEN_STRONG_INLINE std::complex pfirst(const Packet2cf& a) { diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/PacketMath.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/PacketMath.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/PacketMath.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/PacketMath.h index 163bac21..d49670e0 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/arch/NEON/PacketMath.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/arch/NEON/PacketMath.h @@ -48,9 +48,18 @@ typedef uint32x4_t Packet4ui; #define EIGEN_INIT_NEON_PACKET2(X, Y) {X, Y} #define EIGEN_INIT_NEON_PACKET4(X, Y, Z, W) {X, Y, Z, W} #endif - -#ifndef __pld -#define __pld(x) asm volatile ( " pld [%[addr]]\n" :: [addr] "r" (x) : "cc" ); + +// arm64 does have the pld instruction. If available, let's trust the __builtin_prefetch built-in function +// which available on LLVM and GCC (at least) +#if EIGEN_HAS_BUILTIN(__builtin_prefetch) || defined(__GNUC__) + #define EIGEN_ARM_PREFETCH(ADDR) __builtin_prefetch(ADDR); +#elif defined __pld + #define EIGEN_ARM_PREFETCH(ADDR) __pld(ADDR) +#elif !defined(__aarch64__) + #define EIGEN_ARM_PREFETCH(ADDR) __asm__ __volatile__ ( " pld [%[addr]]\n" :: [addr] "r" (ADDR) : "cc" ); +#else + // by default no explicit prefetching + #define EIGEN_ARM_PREFETCH(ADDR) #endif template<> struct packet_traits : default_packet_traits @@ -209,8 +218,8 @@ template<> EIGEN_STRONG_INLINE void pstore(int* to, const Packet4i& f template<> EIGEN_STRONG_INLINE void pstoreu(float* to, const Packet4f& from) { EIGEN_DEBUG_UNALIGNED_STORE vst1q_f32(to, from); } template<> EIGEN_STRONG_INLINE void pstoreu(int* to, const Packet4i& from) { EIGEN_DEBUG_UNALIGNED_STORE vst1q_s32(to, from); } -template<> EIGEN_STRONG_INLINE void prefetch(const float* addr) { __pld(addr); } -template<> EIGEN_STRONG_INLINE void prefetch(const int* addr) { __pld(addr); } +template<> EIGEN_STRONG_INLINE void prefetch(const float* addr) { EIGEN_ARM_PREFETCH(addr); } +template<> EIGEN_STRONG_INLINE void prefetch(const int* addr) { EIGEN_ARM_PREFETCH(addr); } // FIXME only store the 2 first elements ? template<> EIGEN_STRONG_INLINE float pfirst(const Packet4f& a) { float EIGEN_ALIGN16 x[4]; vst1q_f32(x, a); return x[0]; } @@ -375,6 +384,7 @@ template<> EIGEN_STRONG_INLINE int predux_max(const Packet4i& a) a_lo = vget_low_s32(a); a_hi = vget_high_s32(a); max = vpmax_s32(a_lo, a_hi); + max = vpmax_s32(max, max); return vget_lane_s32(max, 0); } diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/Complex.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/Complex.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/Complex.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/Complex.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/MathFunctions.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/MathFunctions.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/MathFunctions.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/MathFunctions.h index 99cbd0d9..2b07168a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/MathFunctions.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/MathFunctions.h @@ -52,7 +52,7 @@ Packet4f plog(const Packet4f& _x) Packet4i emm0; - Packet4f invalid_mask = _mm_cmplt_ps(x, _mm_setzero_ps()); + Packet4f invalid_mask = _mm_cmpnge_ps(x, _mm_setzero_ps()); // not greater equal is true if x is NaN Packet4f iszero_mask = _mm_cmpeq_ps(x, _mm_setzero_ps()); x = pmax(x, p4f_min_norm_pos); /* cut off denormalized stuff */ @@ -126,7 +126,7 @@ Packet4f pexp(const Packet4f& _x) _EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p4, 1.6666665459E-1f); _EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p5, 5.0000001201E-1f); - Packet4f tmp = _mm_setzero_ps(), fx; + Packet4f tmp, fx; Packet4i emm0; // clamp x @@ -166,7 +166,7 @@ Packet4f pexp(const Packet4f& _x) emm0 = _mm_cvttps_epi32(fx); emm0 = _mm_add_epi32(emm0, p4i_0x7f); emm0 = _mm_slli_epi32(emm0, 23); - return pmul(y, _mm_castsi128_ps(emm0)); + return pmax(pmul(y, Packet4f(_mm_castsi128_ps(emm0))), _x); } template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet2d pexp(const Packet2d& _x) @@ -195,7 +195,7 @@ Packet2d pexp(const Packet2d& _x) _EIGEN_DECLARE_CONST_Packet2d(cephes_exp_C2, 1.42860682030941723212e-6); static const __m128i p4i_1023_0 = _mm_setr_epi32(1023, 1023, 0, 0); - Packet2d tmp = _mm_setzero_pd(), fx; + Packet2d tmp, fx; Packet4i emm0; // clamp x @@ -239,7 +239,7 @@ Packet2d pexp(const Packet2d& _x) emm0 = _mm_add_epi32(emm0, p4i_1023_0); emm0 = _mm_slli_epi32(emm0, 20); emm0 = _mm_shuffle_epi32(emm0, _MM_SHUFFLE(1,2,0,3)); - return pmul(x, _mm_castsi128_pd(emm0)); + return pmax(pmul(x, Packet2d(_mm_castsi128_pd(emm0))), _x); } /* evaluation of 4 sines at onces, using SSE2 intrinsics. @@ -279,7 +279,7 @@ Packet4f psin(const Packet4f& _x) _EIGEN_DECLARE_CONST_Packet4f(coscof_p2, 4.166664568298827E-002f); _EIGEN_DECLARE_CONST_Packet4f(cephes_FOPI, 1.27323954473516f); // 4 / M_PI - Packet4f xmm1, xmm2 = _mm_setzero_ps(), xmm3, sign_bit, y; + Packet4f xmm1, xmm2, xmm3, sign_bit, y; Packet4i emm0, emm2; sign_bit = x; @@ -378,7 +378,7 @@ Packet4f pcos(const Packet4f& _x) _EIGEN_DECLARE_CONST_Packet4f(coscof_p2, 4.166664568298827E-002f); _EIGEN_DECLARE_CONST_Packet4f(cephes_FOPI, 1.27323954473516f); // 4 / M_PI - Packet4f xmm1, xmm2 = _mm_setzero_ps(), xmm3, y; + Packet4f xmm1, xmm2, xmm3, y; Packet4i emm0, emm2; x = pabs(x); diff --git a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/PacketMath.h b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/PacketMath.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/PacketMath.h rename to deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/PacketMath.h index fc8ae50f..bef898b1 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/arch/SSE/PacketMath.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/arch/SSE/PacketMath.h @@ -235,63 +235,27 @@ template<> EIGEN_STRONG_INLINE Packet4i pload(const int* from) { E return _mm_loadu_ps(from); #endif } - template<> EIGEN_STRONG_INLINE Packet2d ploadu(const double* from) { EIGEN_DEBUG_UNALIGNED_LOAD return _mm_loadu_pd(from); } - template<> EIGEN_STRONG_INLINE Packet4i ploadu(const int* from) { EIGEN_DEBUG_UNALIGNED_LOAD return _mm_loadu_si128(reinterpret_cast(from)); } #else -// Fast unaligned loads. Note that here we cannot directly use intrinsics: this would -// require pointer casting to incompatible pointer types and leads to invalid code -// because of the strict aliasing rule. The "dummy" stuff are required to enforce -// a correct instruction dependency. -// TODO: do the same for MSVC (ICC is compatible) // NOTE: with the code below, MSVC's compiler crashes! -#if defined(__GNUC__) && defined(__i386__) - // bug 195: gcc/i386 emits weird x87 fldl/fstpl instructions for _mm_load_sd - #define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 1 -#elif defined(__clang__) - // bug 201: Segfaults in __mm_loadh_pd with clang 2.8 - #define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 1 -#else - #define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 0 -#endif - template<> EIGEN_STRONG_INLINE Packet4f ploadu(const float* from) { EIGEN_DEBUG_UNALIGNED_LOAD -#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS return _mm_loadu_ps(from); -#else - __m128d res; - res = _mm_load_sd((const double*)(from)) ; - res = _mm_loadh_pd(res, (const double*)(from+2)) ; - return _mm_castpd_ps(res); -#endif } +#endif + template<> EIGEN_STRONG_INLINE Packet2d ploadu(const double* from) { EIGEN_DEBUG_UNALIGNED_LOAD -#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS return _mm_loadu_pd(from); -#else - __m128d res; - res = _mm_load_sd(from) ; - res = _mm_loadh_pd(res,from+1); - return res; -#endif } template<> EIGEN_STRONG_INLINE Packet4i ploadu(const int* from) { EIGEN_DEBUG_UNALIGNED_LOAD -#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS - return _mm_loadu_si128(reinterpret_cast(from)); -#else - __m128d res; - res = _mm_load_sd((const double*)(from)) ; - res = _mm_loadh_pd(res, (const double*)(from+2)) ; - return _mm_castpd_si128(res); -#endif + return _mm_loadu_si128(reinterpret_cast(from)); } -#endif + template<> EIGEN_STRONG_INLINE Packet4f ploaddup(const float* from) { diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Core/products/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Core/products/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/CoeffBasedProduct.h b/deps/eigen-3.2.8/Eigen/src/Core/products/CoeffBasedProduct.h similarity index 88% rename from deps/eigen-3.2.1/Eigen/src/Core/products/CoeffBasedProduct.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/CoeffBasedProduct.h index c06a0df1..2a9d65b9 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/products/CoeffBasedProduct.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/products/CoeffBasedProduct.h @@ -90,6 +90,7 @@ struct traits > | (SameType && (CanVectorizeLhs || CanVectorizeRhs) ? PacketAccessBit : 0), CoeffReadCost = InnerSize == Dynamic ? Dynamic + : InnerSize == 0 ? 0 : InnerSize * (NumTraits::MulCost + LhsCoeffReadCost + RhsCoeffReadCost) + (InnerSize - 1) * NumTraits::AddCost, @@ -133,7 +134,7 @@ class CoeffBasedProduct }; typedef internal::product_coeff_impl ScalarCoeffImpl; typedef CoeffBasedProduct LazyCoeffBasedProductType; @@ -184,7 +185,7 @@ class CoeffBasedProduct { PacketScalar res; internal::product_packet_impl ::run(row, col, m_lhs, m_rhs, res); return res; @@ -242,12 +243,12 @@ struct product_coeff_impl static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar &res) { product_coeff_impl::run(row, col, lhs, rhs, res); - res += lhs.coeff(row, UnrollingIndex) * rhs.coeff(UnrollingIndex, col); + res += lhs.coeff(row, UnrollingIndex-1) * rhs.coeff(UnrollingIndex-1, col); } }; template -struct product_coeff_impl +struct product_coeff_impl { typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar &res) @@ -256,16 +257,23 @@ struct product_coeff_impl } }; +template +struct product_coeff_impl +{ + typedef typename Lhs::Index Index; + static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, RetScalar &res) + { + res = RetScalar(0); + } +}; + template struct product_coeff_impl { typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar& res) { - eigen_assert(lhs.cols()>0 && "you are using a non initialized matrix"); - res = lhs.coeff(row, 0) * rhs.coeff(0, col); - for(Index i = 1; i < lhs.cols(); ++i) - res += lhs.coeff(row, i) * rhs.coeff(i, col); + res = (lhs.row(row).transpose().cwiseProduct( rhs.col(col) )).sum(); } }; @@ -295,6 +303,16 @@ struct product_coeff_vectorized_unroller<0, Lhs, Rhs, Packet> } }; +template +struct product_coeff_impl +{ + typedef typename Lhs::Index Index; + static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, RetScalar &res) + { + res = 0; + } +}; + template struct product_coeff_impl { @@ -304,8 +322,7 @@ struct product_coeff_impl::run(row, col, lhs, rhs, pres); - product_coeff_impl::run(row, col, lhs, rhs, res); + product_coeff_vectorized_unroller::run(row, col, lhs, rhs, pres); res = predux(pres); } }; @@ -373,7 +390,7 @@ struct product_packet_impl static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res) { product_packet_impl::run(row, col, lhs, rhs, res); - res = pmadd(pset1(lhs.coeff(row, UnrollingIndex)), rhs.template packet(UnrollingIndex, col), res); + res = pmadd(pset1(lhs.coeff(row, UnrollingIndex-1)), rhs.template packet(UnrollingIndex-1, col), res); } }; @@ -384,12 +401,12 @@ struct product_packet_impl static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res) { product_packet_impl::run(row, col, lhs, rhs, res); - res = pmadd(lhs.template packet(row, UnrollingIndex), pset1(rhs.coeff(UnrollingIndex, col)), res); + res = pmadd(lhs.template packet(row, UnrollingIndex-1), pset1(rhs.coeff(UnrollingIndex-1, col)), res); } }; template -struct product_packet_impl +struct product_packet_impl { typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res) @@ -399,7 +416,7 @@ struct product_packet_impl }; template -struct product_packet_impl +struct product_packet_impl { typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res) @@ -408,16 +425,35 @@ struct product_packet_impl } }; +template +struct product_packet_impl +{ + typedef typename Lhs::Index Index; + static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, Packet &res) + { + res = pset1(0); + } +}; + +template +struct product_packet_impl +{ + typedef typename Lhs::Index Index; + static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, Packet &res) + { + res = pset1(0); + } +}; + template struct product_packet_impl { typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet& res) { - eigen_assert(lhs.cols()>0 && "you are using a non initialized matrix"); - res = pmul(pset1(lhs.coeff(row, 0)),rhs.template packet(0, col)); - for(Index i = 1; i < lhs.cols(); ++i) - res = pmadd(pset1(lhs.coeff(row, i)), rhs.template packet(i, col), res); + res = pset1(0); + for(Index i = 0; i < lhs.cols(); ++i) + res = pmadd(pset1(lhs.coeff(row, i)), rhs.template packet(i, col), res); } }; @@ -427,10 +463,9 @@ struct product_packet_impl typedef typename Lhs::Index Index; static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet& res) { - eigen_assert(lhs.cols()>0 && "you are using a non initialized matrix"); - res = pmul(lhs.template packet(row, 0), pset1(rhs.coeff(0, col))); - for(Index i = 1; i < lhs.cols(); ++i) - res = pmadd(lhs.template packet(row, i), pset1(rhs.coeff(i, col)), res); + res = pset1(0); + for(Index i = 0; i < lhs.cols(); ++i) + res = pmadd(lhs.template packet(row, i), pset1(rhs.coeff(i, col)), res); } }; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralBlockPanelKernel.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralBlockPanelKernel.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralBlockPanelKernel.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrix.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrix.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrix.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrix.h index 3f5ffcf5..cfd2f009 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrix.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrix.h @@ -140,8 +140,10 @@ static void run(Index rows, Index cols, Index depth, // Release all the sub blocks B'_j of B' for the current thread, // i.e., we simply decrement the number of users by 1 for(Index j=0; j GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) { +#if !(defined(EIGEN_NO_STATIC_ASSERT) && defined(EIGEN_NO_DEBUG)) typedef internal::scalar_product_op BinOp; EIGEN_CHECK_BINARY_COMPATIBILIY(BinOp,LhsScalar,RhsScalar); +#endif } template void scaleAndAddTo(Dest& dst, const Scalar& alpha) const { eigen_assert(dst.rows()==m_lhs.rows() && dst.cols()==m_rhs.cols()); + if(m_lhs.cols()==0 || m_lhs.rows()==0 || m_rhs.cols()==0) + return; typename internal::add_const_on_value_type::type lhs = LhsBlasTraits::extract(m_lhs); typename internal::add_const_on_value_type::type rhs = RhsBlasTraits::extract(m_rhs); diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixVector.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixVector.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixVector.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixVector.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixVector_MKL.h b/deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixVector_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/products/GeneralMatrixVector_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/GeneralMatrixVector_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/products/Parallelizer.h b/deps/eigen-3.2.8/Eigen/src/Core/products/Parallelizer.h similarity index 88% rename from deps/eigen-3.2.1/Eigen/src/Core/products/Parallelizer.h rename to deps/eigen-3.2.8/Eigen/src/Core/products/Parallelizer.h index 5c3e9b7a..6937ee33 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/products/Parallelizer.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/products/Parallelizer.h @@ -125,19 +125,22 @@ void parallelize_gemm(const Functor& func, Index rows, Index cols, bool transpos if(transpose) std::swap(rows,cols); - Index blockCols = (cols / threads) & ~Index(0x3); - Index blockRows = (rows / threads) & ~Index(0x7); - GemmParallelInfo* info = new GemmParallelInfo[threads]; - #pragma omp parallel for schedule(static,1) num_threads(threads) - for(Index i=0; i class Rotation2D; template class AngleAxis; template class Translation; +// Sparse module: +template class SparseMatrixBase; + #ifdef EIGEN2_SUPPORT template class eigen2_RotationBase; template class eigen2_Cross; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/MKL_support.h b/deps/eigen-3.2.8/Eigen/src/Core/util/MKL_support.h similarity index 72% rename from deps/eigen-3.2.1/Eigen/src/Core/util/MKL_support.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/MKL_support.h index 1e6e355d..1ef3b61d 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/util/MKL_support.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/util/MKL_support.h @@ -54,11 +54,60 @@ #endif #if defined EIGEN_USE_MKL +# include +/*Check IMKL version for compatibility: < 10.3 is not usable with Eigen*/ +# ifndef INTEL_MKL_VERSION +# undef EIGEN_USE_MKL /* INTEL_MKL_VERSION is not even defined on older versions */ +# elif INTEL_MKL_VERSION < 100305 /* the intel-mkl-103-release-notes say this was when the lapacke.h interface was added*/ +# undef EIGEN_USE_MKL +# endif +# ifndef EIGEN_USE_MKL + /*If the MKL version is too old, undef everything*/ +# undef EIGEN_USE_MKL_ALL +# undef EIGEN_USE_BLAS +# undef EIGEN_USE_LAPACKE +# undef EIGEN_USE_MKL_VML +# undef EIGEN_USE_LAPACKE_STRICT +# undef EIGEN_USE_LAPACKE +# endif +#endif -#include +#if defined EIGEN_USE_MKL #include #define EIGEN_MKL_VML_THRESHOLD 128 +/* MKL_DOMAIN_BLAS, etc are defined only in 10.3 update 7 */ +/* MKL_BLAS, etc are not defined in 11.2 */ +#ifdef MKL_DOMAIN_ALL +#define EIGEN_MKL_DOMAIN_ALL MKL_DOMAIN_ALL +#else +#define EIGEN_MKL_DOMAIN_ALL MKL_ALL +#endif + +#ifdef MKL_DOMAIN_BLAS +#define EIGEN_MKL_DOMAIN_BLAS MKL_DOMAIN_BLAS +#else +#define EIGEN_MKL_DOMAIN_BLAS MKL_BLAS +#endif + +#ifdef MKL_DOMAIN_FFT +#define EIGEN_MKL_DOMAIN_FFT MKL_DOMAIN_FFT +#else +#define EIGEN_MKL_DOMAIN_FFT MKL_FFT +#endif + +#ifdef MKL_DOMAIN_VML +#define EIGEN_MKL_DOMAIN_VML MKL_DOMAIN_VML +#else +#define EIGEN_MKL_DOMAIN_VML MKL_VML +#endif + +#ifdef MKL_DOMAIN_PARDISO +#define EIGEN_MKL_DOMAIN_PARDISO MKL_DOMAIN_PARDISO +#else +#define EIGEN_MKL_DOMAIN_PARDISO MKL_PARDISO +#endif + namespace Eigen { typedef std::complex dcomplex; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/Macros.h b/deps/eigen-3.2.8/Eigen/src/Core/util/Macros.h similarity index 67% rename from deps/eigen-3.2.1/Eigen/src/Core/util/Macros.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/Macros.h index 0088621a..e0d90eb8 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/util/Macros.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/util/Macros.h @@ -13,23 +13,292 @@ #define EIGEN_WORLD_VERSION 3 #define EIGEN_MAJOR_VERSION 2 -#define EIGEN_MINOR_VERSION 1 +#define EIGEN_MINOR_VERSION 8 #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \ (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \ EIGEN_MINOR_VERSION>=z)))) + + +// Compiler identification, EIGEN_COMP_* + +/// \internal EIGEN_COMP_GNUC set to 1 for all compilers compatible with GCC #ifdef __GNUC__ + #define EIGEN_COMP_GNUC 1 +#else + #define EIGEN_COMP_GNUC 0 +#endif + +/// \internal EIGEN_COMP_CLANG set to 1 if the compiler is clang (alias for __clang__) +#if defined(__clang__) + #define EIGEN_COMP_CLANG 1 +#else + #define EIGEN_COMP_CLANG 0 +#endif + + +/// \internal EIGEN_COMP_LLVM set to 1 if the compiler backend is llvm +#if defined(__llvm__) + #define EIGEN_COMP_LLVM 1 +#else + #define EIGEN_COMP_LLVM 0 +#endif + +/// \internal EIGEN_COMP_ICC set to __INTEL_COMPILER if the compiler is Intel compiler, 0 otherwise +#if defined(__INTEL_COMPILER) + #define EIGEN_COMP_ICC __INTEL_COMPILER +#else + #define EIGEN_COMP_ICC 0 +#endif + +/// \internal EIGEN_COMP_MINGW set to 1 if the compiler is mingw +#if defined(__MINGW32__) + #define EIGEN_COMP_MINGW 1 +#else + #define EIGEN_COMP_MINGW 0 +#endif + +/// \internal EIGEN_COMP_SUNCC set to 1 if the compiler is Solaris Studio +#if defined(__SUNPRO_CC) + #define EIGEN_COMP_SUNCC 1 +#else + #define EIGEN_COMP_SUNCC 0 +#endif + +/// \internal EIGEN_COMP_MSVC set to _MSC_VER if the compiler is Microsoft Visual C++, 0 otherwise. +#if defined(_MSC_VER) + #define EIGEN_COMP_MSVC _MSC_VER +#else + #define EIGEN_COMP_MSVC 0 +#endif + +/// \internal EIGEN_COMP_MSVC_STRICT set to 1 if the compiler is really Microsoft Visual C++ and not ,e.g., ICC +#if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC) + #define EIGEN_COMP_MSVC_STRICT _MSC_VER +#else + #define EIGEN_COMP_MSVC_STRICT 0 +#endif + +/// \internal EIGEN_COMP_IBM set to 1 if the compiler is IBM XL C++ +#if defined(__IBMCPP__) || defined(__xlc__) + #define EIGEN_COMP_IBM 1 +#else + #define EIGEN_COMP_IBM 0 +#endif + +/// \internal EIGEN_COMP_PGI set to 1 if the compiler is Portland Group Compiler +#if defined(__PGI) + #define EIGEN_COMP_PGI 1 +#else + #define EIGEN_COMP_PGI 0 +#endif + +/// \internal EIGEN_COMP_ARM set to 1 if the compiler is ARM Compiler +#if defined(__CC_ARM) || defined(__ARMCC_VERSION) + #define EIGEN_COMP_ARM 1 +#else + #define EIGEN_COMP_ARM 0 +#endif + + +/// \internal EIGEN_GNUC_STRICT set to 1 if the compiler is really GCC and not a compatible compiler (e.g., ICC, clang, mingw, etc.) +#if EIGEN_COMP_GNUC && !(EIGEN_COMP_CLANG || EIGEN_COMP_ICC || EIGEN_COMP_MINGW || EIGEN_COMP_PGI || EIGEN_COMP_IBM || EIGEN_COMP_ARM ) + #define EIGEN_COMP_GNUC_STRICT 1 +#else + #define EIGEN_COMP_GNUC_STRICT 0 +#endif + + +#if EIGEN_COMP_GNUC #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__==x && __GNUC_MINOR__>=y) || __GNUC__>x) + #define EIGEN_GNUC_AT_MOST(x,y) ((__GNUC__==x && __GNUC_MINOR__<=y) || __GNUC__= 201103L) || \ + (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define EIGEN_HAVE_RVALUE_REFERENCES +#endif + + +// Cross compiler wrapper around LLVM's __has_builtin +#ifdef __has_builtin +# define EIGEN_HAS_BUILTIN(x) __has_builtin(x) +#else +# define EIGEN_HAS_BUILTIN(x) 0 +#endif + /** Allows to disable some optimizations which might affect the accuracy of the result. * Such optimization are enabled by default, and set EIGEN_FAST_MATH to 0 to disable them. * They currently include: @@ -247,7 +531,7 @@ namespace Eigen { #if !defined(EIGEN_ASM_COMMENT) #if (defined __GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) - #define EIGEN_ASM_COMMENT(X) asm("#" X) + #define EIGEN_ASM_COMMENT(X) __asm__("#" X) #else #define EIGEN_ASM_COMMENT(X) #endif @@ -271,6 +555,7 @@ namespace Eigen { #error Please tell me what is the equivalent of __attribute__((aligned(n))) for your compiler #endif +#define EIGEN_ALIGN8 EIGEN_ALIGN_TO_BOUNDARY(8) #define EIGEN_ALIGN16 EIGEN_ALIGN_TO_BOUNDARY(16) #if EIGEN_ALIGN_STATICALLY @@ -289,7 +574,8 @@ namespace Eigen { #endif #ifndef EIGEN_STACK_ALLOCATION_LIMIT -#define EIGEN_STACK_ALLOCATION_LIMIT 20000 +// 131072 == 128 KB +#define EIGEN_STACK_ALLOCATION_LIMIT 131072 #endif #ifndef EIGEN_DEFAULT_IO_FORMAT @@ -305,7 +591,7 @@ namespace Eigen { // just an empty macro ! #define EIGEN_EMPTY -#if defined(_MSC_VER) && (!defined(__INTEL_COMPILER)) +#if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER)) #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ using Base::operator =; #elif defined(__clang__) // workaround clang bug (see http://forum.kde.org/viewtopic.php?f=74&t=102653) @@ -324,8 +610,11 @@ namespace Eigen { } #endif -#define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) \ - EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) +/** \internal + * \brief Macro to manually inherit assignment operators. + * This is necessary, because the implicitly defined assignment operator gets deleted when a custom operator= is defined. + */ +#define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) /** * Just a side note. Commenting within defines works only by documenting @@ -397,6 +686,8 @@ namespace Eigen { #define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ : ((int)a >= (int)b) ? (int)a : (int)b) +#define EIGEN_ADD_COST(a,b) int(a)==Dynamic || int(b)==Dynamic ? Dynamic : int(a)+int(b) + #define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b))) #define EIGEN_IMPLIES(a,b) (!(a) || (b)) diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/Memory.h b/deps/eigen-3.2.8/Eigen/src/Core/util/Memory.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Core/util/Memory.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/Memory.h index cacbd02f..bc1ea69e 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/util/Memory.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/util/Memory.h @@ -63,7 +63,7 @@ // Currently, let's include it only on unix systems: #if defined(__unix__) || defined(__unix) #include - #if ((defined __QNXNTO__) || (defined _GNU_SOURCE) || ((defined _XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600))) && (defined _POSIX_ADVISORY_INFO) && (_POSIX_ADVISORY_INFO > 0) + #if ((defined __QNXNTO__) || (defined _GNU_SOURCE) || (defined __PGI) || ((defined _XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600))) && (defined _POSIX_ADVISORY_INFO) && (_POSIX_ADVISORY_INFO > 0) #define EIGEN_HAS_POSIX_MEMALIGN 1 #endif #endif @@ -272,12 +272,12 @@ inline void* aligned_realloc(void *ptr, size_t new_size, size_t old_size) // The defined(_mm_free) is just here to verify that this MSVC version // implements _mm_malloc/_mm_free based on the corresponding _aligned_ // functions. This may not always be the case and we just try to be safe. - #if defined(_MSC_VER) && defined(_mm_free) + #if defined(_MSC_VER) && (!defined(_WIN32_WCE)) && defined(_mm_free) result = _aligned_realloc(ptr,new_size,16); #else result = generic_aligned_realloc(ptr,new_size,old_size); #endif -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (!defined(_WIN32_WCE)) result = _aligned_realloc(ptr,new_size,16); #else result = handmade_aligned_realloc(ptr,new_size,old_size); @@ -417,6 +417,8 @@ template inline T* conditional_aligned_realloc_new(T* pt template inline T* conditional_aligned_new_auto(size_t size) { + if(size==0) + return 0; // short-cut. Also fixes Bug 884 check_size_for_overflow(size); T *result = reinterpret_cast(conditional_aligned_malloc(sizeof(T)*size)); if(NumTraits::RequireInitialization) @@ -464,9 +466,8 @@ template inline void conditional_aligned_delete_auto(T * template static inline Index first_aligned(const Scalar* array, Index size) { - enum { PacketSize = packet_traits::size, - PacketAlignedMask = PacketSize-1 - }; + static const Index PacketSize = packet_traits::size; + static const Index PacketAlignedMask = PacketSize-1; if(PacketSize==1) { @@ -522,7 +523,7 @@ template struct smart_copy_helper { // you can overwrite Eigen's default behavior regarding alloca by defining EIGEN_ALLOCA // to the appropriate stack allocation function #ifndef EIGEN_ALLOCA - #if (defined __linux__) + #if (defined __linux__) || (defined __APPLE__) || (defined alloca) #define EIGEN_ALLOCA alloca #elif defined(_MSC_VER) #define EIGEN_ALLOCA _alloca @@ -612,7 +613,6 @@ template class aligned_stack_memory_handler void* operator new(size_t size, const std::nothrow_t&) throw() { \ try { return Eigen::internal::conditional_aligned_malloc(size); } \ catch (...) { return 0; } \ - return 0; \ } #else #define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) \ @@ -630,6 +630,8 @@ template class aligned_stack_memory_handler } \ void operator delete(void * ptr) throw() { Eigen::internal::conditional_aligned_free(ptr); } \ void operator delete[](void * ptr) throw() { Eigen::internal::conditional_aligned_free(ptr); } \ + void operator delete(void * ptr, std::size_t /* sz */) throw() { Eigen::internal::conditional_aligned_free(ptr); } \ + void operator delete[](void * ptr, std::size_t /* sz */) throw() { Eigen::internal::conditional_aligned_free(ptr); } \ /* in-place new and delete. since (at least afaik) there is no actual */ \ /* memory allocated we can safely let the default implementation handle */ \ /* this particular case. */ \ @@ -777,9 +779,9 @@ namespace internal { #ifdef EIGEN_CPUID -inline bool cpuid_is_vendor(int abcd[4], const char* vendor) +inline bool cpuid_is_vendor(int abcd[4], const int vendor[3]) { - return abcd[1]==(reinterpret_cast(vendor))[0] && abcd[3]==(reinterpret_cast(vendor))[1] && abcd[2]==(reinterpret_cast(vendor))[2]; + return abcd[1]==vendor[0] && abcd[3]==vendor[1] && abcd[2]==vendor[2]; } inline void queryCacheSizes_intel_direct(int& l1, int& l2, int& l3) @@ -921,13 +923,16 @@ inline void queryCacheSizes(int& l1, int& l2, int& l3) { #ifdef EIGEN_CPUID int abcd[4]; + const int GenuineIntel[] = {0x756e6547, 0x49656e69, 0x6c65746e}; + const int AuthenticAMD[] = {0x68747541, 0x69746e65, 0x444d4163}; + const int AMDisbetter_[] = {0x69444d41, 0x74656273, 0x21726574}; // "AMDisbetter!" // identify the CPU vendor EIGEN_CPUID(abcd,0x0,0); int max_std_funcs = abcd[1]; - if(cpuid_is_vendor(abcd,"GenuineIntel")) + if(cpuid_is_vendor(abcd,GenuineIntel)) queryCacheSizes_intel(l1,l2,l3,max_std_funcs); - else if(cpuid_is_vendor(abcd,"AuthenticAMD") || cpuid_is_vendor(abcd,"AMDisbetter!")) + else if(cpuid_is_vendor(abcd,AuthenticAMD) || cpuid_is_vendor(abcd,AMDisbetter_)) queryCacheSizes_amd(l1,l2,l3); else // by default let's use Intel's API diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/Meta.h b/deps/eigen-3.2.8/Eigen/src/Core/util/Meta.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/util/Meta.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/Meta.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/NonMPL2.h b/deps/eigen-3.2.8/Eigen/src/Core/util/NonMPL2.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/util/NonMPL2.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/NonMPL2.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/ReenableStupidWarnings.h b/deps/eigen-3.2.8/Eigen/src/Core/util/ReenableStupidWarnings.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Core/util/ReenableStupidWarnings.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/ReenableStupidWarnings.h diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/StaticAssert.h b/deps/eigen-3.2.8/Eigen/src/Core/util/StaticAssert.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/util/StaticAssert.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/StaticAssert.h index 8872c5b6..e53d2b87 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/util/StaticAssert.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/util/StaticAssert.h @@ -26,7 +26,7 @@ #ifndef EIGEN_NO_STATIC_ASSERT - #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(_MSC_VER) && (_MSC_VER >= 1600)) + #if __has_feature(cxx_static_assert) || (defined(__cplusplus) && __cplusplus >= 201103L) || (EIGEN_COMP_MSVC >= 1600) // if native static_assert is enabled, let's use it #define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG); @@ -90,7 +90,9 @@ YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED, THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE, THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH, - OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG + OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG, + IMPLICIT_CONVERSION_TO_SCALAR_IS_FOR_INNER_PRODUCT_ONLY, + STORAGE_LAYOUT_DOES_NOT_MATCH }; }; diff --git a/deps/eigen-3.2.1/Eigen/src/Core/util/XprHelper.h b/deps/eigen-3.2.8/Eigen/src/Core/util/XprHelper.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Core/util/XprHelper.h rename to deps/eigen-3.2.8/Eigen/src/Core/util/XprHelper.h index 3c477305..d05f8e5f 100644 --- a/deps/eigen-3.2.1/Eigen/src/Core/util/XprHelper.h +++ b/deps/eigen-3.2.8/Eigen/src/Core/util/XprHelper.h @@ -341,7 +341,7 @@ template::type> str }; template -T* const_cast_ptr(const T* ptr) +inline T* const_cast_ptr(const T* ptr) { return const_cast(ptr); } @@ -366,17 +366,17 @@ struct dense_xpr_base /** \internal Helper base class to add a scalar multiple operator * overloads for complex types */ -template::value > -struct special_scalar_op_base : public DenseCoeffsBase +struct special_scalar_op_base : public BaseType { // dummy operator* so that the // "using special_scalar_op_base::operator*" compiles void operator*() const; }; -template -struct special_scalar_op_base : public DenseCoeffsBase +template +struct special_scalar_op_base : public BaseType { const CwiseUnaryOp, Derived> operator*(const OtherScalar& scalar) const diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Block.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Block.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Block.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Block.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Cwise.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Cwise.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Cwise.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Cwise.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/CwiseOperators.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/CwiseOperators.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/CwiseOperators.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/CwiseOperators.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/AlignedBox.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/AlignedBox.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/AlignedBox.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/AlignedBox.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/All.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/All.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/All.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/All.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/AngleAxis.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/AngleAxis.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/AngleAxis.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/AngleAxis.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Hyperplane.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Hyperplane.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Hyperplane.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Hyperplane.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Quaternion.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Quaternion.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Quaternion.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Quaternion.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Rotation2D.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Rotation2D.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Rotation2D.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Rotation2D.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/RotationBase.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/RotationBase.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/RotationBase.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/RotationBase.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Scaling.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Scaling.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Scaling.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Scaling.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Transform.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Transform.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Transform.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Transform.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Translation.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Translation.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Geometry/Translation.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Geometry/Translation.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/LU.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/LU.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/LU.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/LU.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Lazy.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Lazy.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Lazy.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Lazy.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/LeastSquares.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/LeastSquares.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/LeastSquares.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/LeastSquares.h index 0e6fdb48..7992d494 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/LeastSquares.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/LeastSquares.h @@ -147,7 +147,6 @@ void fitHyperplane(int numPoints, // compute the covariance matrix CovMatrixType covMat = CovMatrixType::Zero(size, size); - VectorType remean = VectorType::Zero(size); for(int i = 0; i < numPoints; ++i) { VectorType diff = (*(points[i]) - mean).conjugate(); diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Macros.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Macros.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Macros.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Macros.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/MathFunctions.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/MathFunctions.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/MathFunctions.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/MathFunctions.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Memory.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Memory.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Memory.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Memory.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Meta.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Meta.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Meta.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Meta.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/Minor.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/Minor.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/Minor.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/Minor.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/QR.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/QR.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/QR.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/QR.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/SVD.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/SVD.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/SVD.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/SVD.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/TriangularSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/TriangularSolver.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/TriangularSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/TriangularSolver.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigen2Support/VectorBlock.h b/deps/eigen-3.2.8/Eigen/src/Eigen2Support/VectorBlock.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigen2Support/VectorBlock.h rename to deps/eigen-3.2.8/Eigen/src/Eigen2Support/VectorBlock.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexEigenSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexEigenSolver.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexEigenSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexEigenSolver.h index af434bc9..417c7294 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexEigenSolver.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexEigenSolver.h @@ -234,6 +234,12 @@ template class ComplexEigenSolver } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + EigenvectorType m_eivec; EigenvalueType m_eivalues; ComplexSchur m_schur; @@ -251,6 +257,8 @@ template ComplexEigenSolver& ComplexEigenSolver::compute(const MatrixType& matrix, bool computeEigenvectors) { + check_template_parameters(); + // this code is inspired from Jampack eigen_assert(matrix.cols() == matrix.rows()); diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexSchur.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexSchur.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexSchur.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexSchur.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexSchur_MKL.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexSchur_MKL.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexSchur_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexSchur_MKL.h index 91496ae5..27aed923 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/ComplexSchur_MKL.h @@ -45,7 +45,6 @@ ComplexSchur >& \ ComplexSchur >::compute(const Matrix& matrix, bool computeU) \ { \ typedef Matrix MatrixType; \ - typedef MatrixType::Scalar Scalar; \ typedef MatrixType::RealScalar RealScalar; \ typedef std::complex ComplexScalar; \ \ diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/EigenSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/EigenSolver.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/EigenSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/EigenSolver.h index 6e715068..20c59a7a 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/EigenSolver.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/EigenSolver.h @@ -298,6 +298,13 @@ template class EigenSolver void doComputeEigenvectors(); protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + EIGEN_STATIC_ASSERT(!NumTraits::IsComplex, NUMERIC_TYPE_MUST_BE_REAL); + } + MatrixType m_eivec; EigenvalueType m_eivalues; bool m_isInitialized; @@ -364,6 +371,8 @@ template EigenSolver& EigenSolver::compute(const MatrixType& matrix, bool computeEigenvectors) { + check_template_parameters(); + using std::sqrt; using std::abs; eigen_assert(matrix.cols() == matrix.rows()); diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h index dc240e13..956e80d9 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h @@ -263,6 +263,13 @@ template class GeneralizedEigenSolver } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + EIGEN_STATIC_ASSERT(!NumTraits::IsComplex, NUMERIC_TYPE_MUST_BE_REAL); + } + MatrixType m_eivec; ComplexVectorType m_alphas; VectorType m_betas; @@ -290,6 +297,8 @@ template GeneralizedEigenSolver& GeneralizedEigenSolver::compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors) { + check_template_parameters(); + using std::sqrt; using std::abs; eigen_assert(A.cols() == A.rows() && B.cols() == A.rows() && B.cols() == B.rows()); diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/HessenbergDecomposition.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/HessenbergDecomposition.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/HessenbergDecomposition.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealQZ.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealQZ.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealQZ.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealQZ.h index 5706eeeb..aa3833eb 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealQZ.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealQZ.h @@ -240,10 +240,10 @@ namespace Eigen { m_S.coeffRef(i,j) = Scalar(0.0); m_S.rightCols(dim-j-1).applyOnTheLeft(i-1,i,G.adjoint()); m_T.rightCols(dim-i+1).applyOnTheLeft(i-1,i,G.adjoint()); + // update Q + if (m_computeQZ) + m_Q.applyOnTheRight(i-1,i,G); } - // update Q - if (m_computeQZ) - m_Q.applyOnTheRight(i-1,i,G); // kill T(i,i-1) if(m_T.coeff(i,i-1)!=Scalar(0)) { @@ -251,10 +251,10 @@ namespace Eigen { m_T.coeffRef(i,i-1) = Scalar(0.0); m_S.applyOnTheRight(i,i-1,G); m_T.topRows(i).applyOnTheRight(i,i-1,G); + // update Z + if (m_computeQZ) + m_Z.applyOnTheLeft(i,i-1,G.adjoint()); } - // update Z - if (m_computeQZ) - m_Z.applyOnTheLeft(i,i-1,G.adjoint()); } } } @@ -313,7 +313,7 @@ namespace Eigen { using std::abs; using std::sqrt; const Index dim=m_S.cols(); - if (abs(m_S.coeff(i+1,i)==Scalar(0))) + if (abs(m_S.coeff(i+1,i))==Scalar(0)) return; Index z = findSmallDiagEntry(i,i+1); if (z==i-1) diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur.h index 64d13634..16d38753 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur.h @@ -234,7 +234,7 @@ template class RealSchur typedef Matrix Vector3s; Scalar computeNormOfT(); - Index findSmallSubdiagEntry(Index iu, const Scalar& norm); + Index findSmallSubdiagEntry(Index iu); void splitOffTwoRows(Index iu, bool computeU, const Scalar& exshift); void computeShift(Index iu, Index iter, Scalar& exshift, Vector3s& shiftInfo); void initFrancisQRStep(Index il, Index iu, const Vector3s& shiftInfo, Index& im, Vector3s& firstHouseholderVector); @@ -286,7 +286,7 @@ RealSchur& RealSchur::computeFromHessenberg(const HessMa { while (iu >= 0) { - Index il = findSmallSubdiagEntry(iu, norm); + Index il = findSmallSubdiagEntry(iu); // Check for convergence if (il == iu) // One root found @@ -343,16 +343,14 @@ inline typename MatrixType::Scalar RealSchur::computeNormOfT() /** \internal Look for single small sub-diagonal element and returns its index */ template -inline typename MatrixType::Index RealSchur::findSmallSubdiagEntry(Index iu, const Scalar& norm) +inline typename MatrixType::Index RealSchur::findSmallSubdiagEntry(Index iu) { using std::abs; Index res = iu; while (res > 0) { Scalar s = abs(m_matT.coeff(res-1,res-1)) + abs(m_matT.coeff(res,res)); - if (s == 0.0) - s = norm; - if (abs(m_matT.coeff(res,res-1)) < NumTraits::epsilon() * s) + if (abs(m_matT.coeff(res,res-1)) <= NumTraits::epsilon() * s) break; res--; } @@ -457,9 +455,7 @@ inline void RealSchur::initFrancisQRStep(Index il, Index iu, const V const Scalar lhs = m_matT.coeff(im,im-1) * (abs(v.coeff(1)) + abs(v.coeff(2))); const Scalar rhs = v.coeff(0) * (abs(m_matT.coeff(im-1,im-1)) + abs(Tmm) + abs(m_matT.coeff(im+1,im+1))); if (abs(lhs) < NumTraits::epsilon() * rhs) - { break; - } } } diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur_MKL.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur_MKL.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur_MKL.h index ad973646..c3089b46 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/RealSchur_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/RealSchur_MKL.h @@ -44,10 +44,6 @@ template<> inline \ RealSchur >& \ RealSchur >::compute(const Matrix& matrix, bool computeU) \ { \ - typedef Matrix MatrixType; \ - typedef MatrixType::Scalar Scalar; \ - typedef MatrixType::RealScalar RealScalar; \ -\ eigen_assert(matrix.cols() == matrix.rows()); \ \ lapack_int n = matrix.cols(), sdim, info; \ diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h similarity index 83% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h index 3993046a..1131c8af 100644 --- a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +++ b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h @@ -80,6 +80,8 @@ template class SelfAdjointEigenSolver /** \brief Scalar type for matrices of type \p _MatrixType. */ typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::Index Index; + + typedef Matrix EigenvectorsType; /** \brief Real scalar type for \p _MatrixType. * @@ -225,7 +227,7 @@ template class SelfAdjointEigenSolver * * \sa eigenvalues() */ - const MatrixType& eigenvectors() const + const EigenvectorsType& eigenvectors() const { eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized."); eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues."); @@ -351,7 +353,12 @@ template class SelfAdjointEigenSolver #endif // EIGEN2_SUPPORT protected: - MatrixType m_eivec; + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + + EigenvectorsType m_eivec; RealVectorType m_eivalues; typename TridiagonalizationType::SubDiagonalType m_subdiag; ComputationInfo m_info; @@ -376,7 +383,7 @@ template class SelfAdjointEigenSolver * "implicit symmetric QR step with Wilkinson shift" */ namespace internal { -template +template static void tridiagonal_qr_step(RealScalar* diag, RealScalar* subdiag, Index start, Index end, Scalar* matrixQ, Index n); } @@ -384,6 +391,8 @@ template SelfAdjointEigenSolver& SelfAdjointEigenSolver ::compute(const MatrixType& matrix, int options) { + check_template_parameters(); + using std::abs; eigen_assert(matrix.cols() == matrix.rows()); eigen_assert((options&~(EigVecMask|GenEigMask))==0 @@ -406,7 +415,7 @@ SelfAdjointEigenSolver& SelfAdjointEigenSolver // declare some aliases RealVectorType& diag = m_eivalues; - MatrixType& mat = m_eivec; + EigenvectorsType& mat = m_eivec; // map the matrix coefficients to [-1:1] to avoid over- and underflow. mat = matrix.template triangularView(); @@ -442,7 +451,7 @@ SelfAdjointEigenSolver& SelfAdjointEigenSolver while (start>0 && m_subdiag[start-1]!=0) start--; - internal::tridiagonal_qr_step(diag.data(), m_subdiag.data(), start, end, computeEigenvectors ? m_eivec.data() : (Scalar*)0, n); + internal::tridiagonal_qr_step(diag.data(), m_subdiag.data(), start, end, computeEigenvectors ? m_eivec.data() : (Scalar*)0, n); } if (iter <= m_maxIterations * n) @@ -490,7 +499,13 @@ template struct direct_selfadjoint_eigenvalues struct direct_selfadjoint_eigenvalues Scalar(0)) + Scalar a_over_3 = (c2*c2_over_3 - c1)*s_inv3; + if(a_over_3 Scalar(0)) + Scalar q = a_over_3*a_over_3*a_over_3 - half_b*half_b; + if(q 0, atan2 is in [0, pi] and theta is in [0, pi/3] Scalar cos_theta = cos(theta); Scalar sin_theta = sin(theta); - roots(0) = c2_over_3 + Scalar(2)*rho*cos_theta; - roots(1) = c2_over_3 - rho*(cos_theta + s_sqrt3*sin_theta); - roots(2) = c2_over_3 - rho*(cos_theta - s_sqrt3*sin_theta); - - // Sort in increasing order. - if (roots(0) >= roots(1)) - std::swap(roots(0),roots(1)); - if (roots(1) >= roots(2)) - { - std::swap(roots(1),roots(2)); - if (roots(0) >= roots(1)) - std::swap(roots(0),roots(1)); - } + // roots are already sorted, since cos is monotonically decreasing on [0, pi] + roots(0) = c2_over_3 - rho*(cos_theta + s_sqrt3*sin_theta); // == 2*rho*cos(theta+2pi/3) + roots(1) = c2_over_3 - rho*(cos_theta - s_sqrt3*sin_theta); // == 2*rho*cos(theta+ pi/3) + roots(2) = c2_over_3 + Scalar(2)*rho*cos_theta; } - + + static inline bool extract_kernel(MatrixType& mat, Ref res, Ref representative) + { + using std::abs; + Index i0; + // Find non-zero column i0 (by construction, there must exist a non zero coefficient on the diagonal): + mat.diagonal().cwiseAbs().maxCoeff(&i0); + // mat.col(i0) is a good candidate for an orthogonal vector to the current eigenvector, + // so let's save it: + representative = mat.col(i0); + Scalar n0, n1; + VectorType c0, c1; + n0 = (c0 = representative.cross(mat.col((i0+1)%3))).squaredNorm(); + n1 = (c1 = representative.cross(mat.col((i0+2)%3))).squaredNorm(); + if(n0>n1) res = c0/std::sqrt(n0); + else res = c1/std::sqrt(n1); + + return true; + } + static inline void run(SolverType& solver, const MatrixType& mat, int options) { - using std::sqrt; eigen_assert(mat.cols() == 3 && mat.cols() == mat.rows()); eigen_assert((options&~(EigVecMask|GenEigMask))==0 && (options&EigVecMask)!=EigVecMask && "invalid option parameter"); bool computeEigenvectors = (options&ComputeEigenvectors)==ComputeEigenvectors; - MatrixType& eivecs = solver.m_eivec; + EigenvectorsType& eivecs = solver.m_eivec; VectorType& eivals = solver.m_eivalues; - // map the matrix coefficients to [-1:1] to avoid over- and underflow. - Scalar scale = mat.cwiseAbs().maxCoeff(); - MatrixType scaledMat = mat / scale; + // Shift the matrix to the mean eigenvalue and map the matrix coefficients to [-1:1] to avoid over- and underflow. + Scalar shift = mat.trace() / Scalar(3); + // TODO Avoid this copy. Currently it is necessary to suppress bogus values when determining maxCoeff and for computing the eigenvectors later + MatrixType scaledMat = mat.template selfadjointView(); + scaledMat.diagonal().array() -= shift; + Scalar scale = scaledMat.cwiseAbs().maxCoeff(); + if(scale > 0) scaledMat /= scale; // TODO for scale==0 we could save the remaining operations // compute the eigenvalues computeRoots(scaledMat,eivals); - // compute the eigen vectors + // compute the eigenvectors if(computeEigenvectors) { - Scalar safeNorm2 = Eigen::NumTraits::epsilon(); - safeNorm2 *= safeNorm2; if((eivals(2)-eivals(0))<=Eigen::NumTraits::epsilon()) { + // All three eigenvalues are numerically the same eivecs.setIdentity(); } else { - scaledMat = scaledMat.template selfadjointView(); MatrixType tmp; tmp = scaledMat; + // Compute the eigenvector of the most distinct eigenvalue Scalar d0 = eivals(2) - eivals(1); Scalar d1 = eivals(1) - eivals(0); - int k = d0 > d1 ? 2 : 0; - d0 = d0 > d1 ? d1 : d0; - - tmp.diagonal().array () -= eivals(k); - VectorType cross; - Scalar n; - n = (cross = tmp.row(0).cross(tmp.row(1))).squaredNorm(); - - if(n>safeNorm2) - eivecs.col(k) = cross / sqrt(n); - else + Index k(0), l(2); + if(d0 > d1) { - n = (cross = tmp.row(0).cross(tmp.row(2))).squaredNorm(); - - if(n>safeNorm2) - eivecs.col(k) = cross / sqrt(n); - else - { - n = (cross = tmp.row(1).cross(tmp.row(2))).squaredNorm(); - - if(n>safeNorm2) - eivecs.col(k) = cross / sqrt(n); - else - { - // the input matrix and/or the eigenvaues probably contains some inf/NaN, - // => exit - // scale back to the original size. - eivals *= scale; - - solver.m_info = NumericalIssue; - solver.m_isInitialized = true; - solver.m_eigenvectorsOk = computeEigenvectors; - return; - } - } + std::swap(k,l); + d0 = d1; } - tmp = scaledMat; - tmp.diagonal().array() -= eivals(1); - - if(d0<=Eigen::NumTraits::epsilon()) - eivecs.col(1) = eivecs.col(k).unitOrthogonal(); - else + // Compute the eigenvector of index k { - n = (cross = eivecs.col(k).cross(tmp.row(0).normalized())).squaredNorm(); - if(n>safeNorm2) - eivecs.col(1) = cross / sqrt(n); - else - { - n = (cross = eivecs.col(k).cross(tmp.row(1))).squaredNorm(); - if(n>safeNorm2) - eivecs.col(1) = cross / sqrt(n); - else - { - n = (cross = eivecs.col(k).cross(tmp.row(2))).squaredNorm(); - if(n>safeNorm2) - eivecs.col(1) = cross / sqrt(n); - else - { - // we should never reach this point, - // if so the last two eigenvalues are likely to ve very closed to each other - eivecs.col(1) = eivecs.col(k).unitOrthogonal(); - } - } - } - - // make sure that eivecs[1] is orthogonal to eivecs[2] - Scalar d = eivecs.col(1).dot(eivecs.col(k)); - eivecs.col(1) = (eivecs.col(1) - d * eivecs.col(k)).normalized(); + tmp.diagonal().array () -= eivals(k); + // By construction, 'tmp' is of rank 2, and its kernel corresponds to the respective eigenvector. + extract_kernel(tmp, eivecs.col(k), eivecs.col(l)); } - eivecs.col(k==2 ? 0 : 2) = eivecs.col(k).cross(eivecs.col(1)).normalized(); + // Compute eigenvector of index l + if(d0<=2*Eigen::NumTraits::epsilon()*d1) + { + // If d0 is too small, then the two other eigenvalues are numerically the same, + // and thus we only have to ortho-normalize the near orthogonal vector we saved above. + eivecs.col(l) -= eivecs.col(k).dot(eivecs.col(l))*eivecs.col(l); + eivecs.col(l).normalize(); + } + else + { + tmp = scaledMat; + tmp.diagonal().array () -= eivals(l); + + VectorType dummy; + extract_kernel(tmp, eivecs.col(l), dummy); + } + + // Compute last eigenvector from the other two + eivecs.col(1) = eivecs.col(2).cross(eivecs.col(0)).normalized(); } } + // Rescale back to the original size. eivals *= scale; + eivals.array() += shift; solver.m_info = Success; solver.m_isInitialized = true; @@ -665,11 +655,12 @@ template struct direct_selfadjoint_eigenvalues struct direct_selfadjoint_eigenvalues struct direct_selfadjoint_eigenvaluesc2) + if((eivals(1)-eivals(0))<=abs(eivals(1))*Eigen::NumTraits::epsilon()) { - eivecs.col(1) << -scaledMat(1,0), scaledMat(0,0); - eivecs.col(1) /= sqrt(a2+b2); + eivecs.setIdentity(); } else { - eivecs.col(1) << -scaledMat(1,1), scaledMat(1,0); - eivecs.col(1) /= sqrt(c2+b2); - } + scaledMat.diagonal().array () -= eivals(1); + Scalar a2 = numext::abs2(scaledMat(0,0)); + Scalar c2 = numext::abs2(scaledMat(1,1)); + Scalar b2 = numext::abs2(scaledMat(1,0)); + if(a2>c2) + { + eivecs.col(1) << -scaledMat(1,0), scaledMat(0,0); + eivecs.col(1) /= sqrt(a2+b2); + } + else + { + eivecs.col(1) << -scaledMat(1,1), scaledMat(1,0); + eivecs.col(1) /= sqrt(c2+b2); + } - eivecs.col(0) << eivecs.col(1).unitOrthogonal(); + eivecs.col(0) << eivecs.col(1).unitOrthogonal(); + } } // Rescale back to the original size. @@ -736,7 +736,7 @@ SelfAdjointEigenSolver& SelfAdjointEigenSolver } namespace internal { -template +template static void tridiagonal_qr_step(RealScalar* diag, RealScalar* subdiag, Index start, Index end, Scalar* matrixQ, Index n) { using std::abs; @@ -788,8 +788,7 @@ static void tridiagonal_qr_step(RealScalar* diag, RealScalar* subdiag, Index sta // apply the givens rotation to the unit matrix Q = Q * G if (matrixQ) { - // FIXME if StorageOrder == RowMajor this operation is not very efficient - Map > q(matrixQ,n,n); + Map > q(matrixQ,n,n); q.applyOnTheRight(k,k+1,rot); } } diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/Eigenvalues/Tridiagonalization.h b/deps/eigen-3.2.8/Eigen/src/Eigenvalues/Tridiagonalization.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Eigenvalues/Tridiagonalization.h rename to deps/eigen-3.2.8/Eigen/src/Eigenvalues/Tridiagonalization.h diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/AlignedBox.h b/deps/eigen-3.2.8/Eigen/src/Geometry/AlignedBox.h similarity index 82% rename from deps/eigen-3.2.1/Eigen/src/Geometry/AlignedBox.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/AlignedBox.h index 8e186d57..7e1cd9eb 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/AlignedBox.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/AlignedBox.h @@ -19,10 +19,12 @@ namespace Eigen { * * \brief An axis aligned box * - * \param _Scalar the type of the scalar coefficients - * \param _AmbientDim the dimension of the ambient space, can be a compile time value or Dynamic. + * \tparam _Scalar the type of the scalar coefficients + * \tparam _AmbientDim the dimension of the ambient space, can be a compile time value or Dynamic. * * This class represents an axis aligned box as a pair of the minimal and maximal corners. + * \warning The result of most methods is undefined when applied to an empty box. You can check for empty boxes using isEmpty(). + * \sa alignedboxtypedefs */ template class AlignedBox @@ -40,18 +42,21 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) /** Define constants to name the corners of a 1D, 2D or 3D axis aligned bounding box */ enum CornerType { - /** 1D names */ + /** 1D names @{ */ Min=0, Max=1, + /** @} */ - /** Added names for 2D */ + /** Identifier for 2D corner @{ */ BottomLeft=0, BottomRight=1, TopLeft=2, TopRight=3, + /** @} */ - /** Added names for 3D */ + /** Identifier for 3D corner @{ */ BottomLeftFloor=0, BottomRightFloor=1, TopLeftFloor=2, TopRightFloor=3, BottomLeftCeil=4, BottomRightCeil=5, TopLeftCeil=6, TopRightCeil=7 + /** @} */ }; @@ -63,34 +68,33 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) inline explicit AlignedBox(Index _dim) : m_min(_dim), m_max(_dim) { setEmpty(); } - /** Constructs a box with extremities \a _min and \a _max. */ + /** Constructs a box with extremities \a _min and \a _max. + * \warning If either component of \a _min is larger than the same component of \a _max, the constructed box is empty. */ template inline AlignedBox(const OtherVectorType1& _min, const OtherVectorType2& _max) : m_min(_min), m_max(_max) {} /** Constructs a box containing a single point \a p. */ template - inline explicit AlignedBox(const MatrixBase& a_p) - { - typename internal::nested::type p(a_p.derived()); - m_min = p; - m_max = p; - } + inline explicit AlignedBox(const MatrixBase& p) : m_min(p), m_max(m_min) + { } ~AlignedBox() {} /** \returns the dimension in which the box holds */ inline Index dim() const { return AmbientDimAtCompileTime==Dynamic ? m_min.size() : Index(AmbientDimAtCompileTime); } - /** \deprecated use isEmpty */ + /** \deprecated use isEmpty() */ inline bool isNull() const { return isEmpty(); } - /** \deprecated use setEmpty */ + /** \deprecated use setEmpty() */ inline void setNull() { setEmpty(); } - /** \returns true if the box is empty. */ + /** \returns true if the box is empty. + * \sa setEmpty */ inline bool isEmpty() const { return (m_min.array() > m_max.array()).any(); } - /** Makes \c *this an empty box. */ + /** Makes \c *this an empty box. + * \sa isEmpty */ inline void setEmpty() { m_min.setConstant( ScalarTraits::highest() ); @@ -159,7 +163,7 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) * a uniform distribution */ inline VectorType sample() const { - VectorType r; + VectorType r(dim()); for(Index d=0; d - inline bool contains(const MatrixBase& a_p) const + inline bool contains(const MatrixBase& p) const { - typename internal::nested::type p(a_p.derived()); - return (m_min.array()<=p.array()).all() && (p.array()<=m_max.array()).all(); + typename internal::nested::type p_n(p.derived()); + return (m_min.array()<=p_n.array()).all() && (p_n.array()<=m_max.array()).all(); } /** \returns true if the box \a b is entirely inside the box \c *this. */ inline bool contains(const AlignedBox& b) const { return (m_min.array()<=(b.min)().array()).all() && ((b.max)().array()<=m_max.array()).all(); } - /** Extends \c *this such that it contains the point \a p and returns a reference to \c *this. */ + /** \returns true if the box \a b is intersecting the box \c *this. + * \sa intersection, clamp */ + inline bool intersects(const AlignedBox& b) const + { return (m_min.array()<=(b.max)().array()).all() && ((b.min)().array()<=m_max.array()).all(); } + + /** Extends \c *this such that it contains the point \a p and returns a reference to \c *this. + * \sa extend(const AlignedBox&) */ template - inline AlignedBox& extend(const MatrixBase& a_p) + inline AlignedBox& extend(const MatrixBase& p) { - typename internal::nested::type p(a_p.derived()); - m_min = m_min.cwiseMin(p); - m_max = m_max.cwiseMax(p); + typename internal::nested::type p_n(p.derived()); + m_min = m_min.cwiseMin(p_n); + m_max = m_max.cwiseMax(p_n); return *this; } - /** Extends \c *this such that it contains the box \a b and returns a reference to \c *this. */ + /** Extends \c *this such that it contains the box \a b and returns a reference to \c *this. + * \sa merged, extend(const MatrixBase&) */ inline AlignedBox& extend(const AlignedBox& b) { m_min = m_min.cwiseMin(b.m_min); @@ -203,7 +214,9 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) return *this; } - /** Clamps \c *this by the box \a b and returns a reference to \c *this. */ + /** Clamps \c *this by the box \a b and returns a reference to \c *this. + * \note If the boxes don't intersect, the resulting box is empty. + * \sa intersection(), intersects() */ inline AlignedBox& clamp(const AlignedBox& b) { m_min = m_min.cwiseMax(b.m_min); @@ -211,11 +224,15 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) return *this; } - /** Returns an AlignedBox that is the intersection of \a b and \c *this */ + /** Returns an AlignedBox that is the intersection of \a b and \c *this + * \note If the boxes don't intersect, the resulting box is empty. + * \sa intersects(), clamp, contains() */ inline AlignedBox intersection(const AlignedBox& b) const {return AlignedBox(m_min.cwiseMax(b.m_min), m_max.cwiseMin(b.m_max)); } - /** Returns an AlignedBox that is the union of \a b and \c *this */ + /** Returns an AlignedBox that is the union of \a b and \c *this. + * \note Merging with an empty box may result in a box bigger than \c *this. + * \sa extend(const AlignedBox&) */ inline AlignedBox merged(const AlignedBox& b) const { return AlignedBox(m_min.cwiseMin(b.m_min), m_max.cwiseMax(b.m_max)); } @@ -231,20 +248,20 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) /** \returns the squared distance between the point \a p and the box \c *this, * and zero if \a p is inside the box. - * \sa exteriorDistance() + * \sa exteriorDistance(const MatrixBase&), squaredExteriorDistance(const AlignedBox&) */ template - inline Scalar squaredExteriorDistance(const MatrixBase& a_p) const; + inline Scalar squaredExteriorDistance(const MatrixBase& p) const; /** \returns the squared distance between the boxes \a b and \c *this, * and zero if the boxes intersect. - * \sa exteriorDistance() + * \sa exteriorDistance(const AlignedBox&), squaredExteriorDistance(const MatrixBase&) */ inline Scalar squaredExteriorDistance(const AlignedBox& b) const; /** \returns the distance between the point \a p and the box \c *this, * and zero if \a p is inside the box. - * \sa squaredExteriorDistance() + * \sa squaredExteriorDistance(const MatrixBase&), exteriorDistance(const AlignedBox&) */ template inline NonInteger exteriorDistance(const MatrixBase& p) const @@ -252,7 +269,7 @@ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim) /** \returns the distance between the boxes \a b and \c *this, * and zero if the boxes intersect. - * \sa squaredExteriorDistance() + * \sa squaredExteriorDistance(const AlignedBox&), exteriorDistance(const MatrixBase&) */ inline NonInteger exteriorDistance(const AlignedBox& b) const { using std::sqrt; return sqrt(NonInteger(squaredExteriorDistance(b))); } diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/AngleAxis.h b/deps/eigen-3.2.8/Eigen/src/Geometry/AngleAxis.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/Geometry/AngleAxis.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/AngleAxis.h index 553d38c7..a8d3cdcf 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/AngleAxis.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/AngleAxis.h @@ -83,10 +83,17 @@ public: template inline explicit AngleAxis(const MatrixBase& m) { *this = m; } + /** \returns the value of the rotation angle in radian */ Scalar angle() const { return m_angle; } + /** \returns a read-write reference to the stored angle in radian */ Scalar& angle() { return m_angle; } + /** \returns the rotation axis */ const Vector3& axis() const { return m_axis; } + /** \returns a read-write reference to the stored rotation axis. + * + * \warning The rotation axis must remain a \b unit vector. + */ Vector3& axis() { return m_axis; } /** Concatenates two rotations */ @@ -131,7 +138,7 @@ public: m_angle = Scalar(other.angle()); } - static inline const AngleAxis Identity() { return AngleAxis(0, Vector3::UnitX()); } + static inline const AngleAxis Identity() { return AngleAxis(Scalar(0), Vector3::UnitX()); } /** \returns \c true if \c *this is approximately equal to \a other, within the precision * determined by \a prec. @@ -165,8 +172,8 @@ AngleAxis& AngleAxis::operator=(const QuaternionBase::dummy_precision()*NumTraits::dummy_precision()) { - m_angle = 0; - m_axis << 1, 0, 0; + m_angle = Scalar(0); + m_axis << Scalar(1), Scalar(0), Scalar(0); } else { diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Geometry/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Geometry/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/EulerAngles.h b/deps/eigen-3.2.8/Eigen/src/Geometry/EulerAngles.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/EulerAngles.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/EulerAngles.h diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Homogeneous.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Homogeneous.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Homogeneous.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Homogeneous.h index 00e71d19..372e422b 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Homogeneous.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Homogeneous.h @@ -79,7 +79,7 @@ template class Homogeneous { if( (int(Direction)==Vertical && row==m_matrix.rows()) || (int(Direction)==Horizontal && col==m_matrix.cols())) - return 1; + return Scalar(1); return m_matrix.coeff(row, col); } diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Hyperplane.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Hyperplane.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Hyperplane.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Hyperplane.h index aeff43fe..00b7c430 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Hyperplane.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Hyperplane.h @@ -100,7 +100,17 @@ public: { EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(VectorType, 3) Hyperplane result(p0.size()); - result.normal() = (p2 - p0).cross(p1 - p0).normalized(); + VectorType v0(p2 - p0), v1(p1 - p0); + result.normal() = v0.cross(v1); + RealScalar norm = result.normal().norm(); + if(norm <= v0.norm() * v1.norm() * NumTraits::epsilon()) + { + Matrix m; m << v0.transpose(), v1.transpose(); + JacobiSVD > svd(m, ComputeFullV); + result.normal() = svd.matrixV().col(2); + } + else + result.normal() /= norm; result.offset() = -p0.dot(result.normal()); return result; } diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/OrthoMethods.h b/deps/eigen-3.2.8/Eigen/src/Geometry/OrthoMethods.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/OrthoMethods.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/OrthoMethods.h diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/ParametrizedLine.h b/deps/eigen-3.2.8/Eigen/src/Geometry/ParametrizedLine.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Geometry/ParametrizedLine.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/ParametrizedLine.h index 77fa228e..cf3252df 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/ParametrizedLine.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/ParametrizedLine.h @@ -129,7 +129,7 @@ public: * determined by \a prec. * * \sa MatrixBase::isApprox() */ - bool isApprox(const ParametrizedLine& other, typename NumTraits::Real prec = NumTraits::dummy_precision()) const + bool isApprox(const ParametrizedLine& other, const typename NumTraits::Real& prec = NumTraits::dummy_precision()) const { return m_origin.isApprox(other.m_origin, prec) && m_direction.isApprox(other.m_direction, prec); } protected: diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Quaternion.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Quaternion.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Quaternion.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Quaternion.h index 9fee0c91..25ed17bb 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Quaternion.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Quaternion.h @@ -102,11 +102,11 @@ public: /** \returns a quaternion representing an identity rotation * \sa MatrixBase::Identity() */ - static inline Quaternion Identity() { return Quaternion(1, 0, 0, 0); } + static inline Quaternion Identity() { return Quaternion(Scalar(1), Scalar(0), Scalar(0), Scalar(0)); } /** \sa QuaternionBase::Identity(), MatrixBase::setIdentity() */ - inline QuaternionBase& setIdentity() { coeffs() << 0, 0, 0, 1; return *this; } + inline QuaternionBase& setIdentity() { coeffs() << Scalar(0), Scalar(0), Scalar(0), Scalar(1); return *this; } /** \returns the squared norm of the quaternion's coefficients * \sa QuaternionBase::norm(), MatrixBase::squaredNorm() @@ -161,7 +161,7 @@ public: { return coeffs().isApprox(other.coeffs(), prec); } /** return the result vector of \a v through the rotation*/ - EIGEN_STRONG_INLINE Vector3 _transformVector(Vector3 v) const; + EIGEN_STRONG_INLINE Vector3 _transformVector(const Vector3& v) const; /** \returns \c *this with scalar type casted to \a NewScalarType * @@ -203,6 +203,8 @@ public: * \li \c Quaternionf for \c float * \li \c Quaterniond for \c double * + * \warning Operations interpreting the quaternion as rotation have undefined behavior if the quaternion is not normalized. + * * \sa class AngleAxis, class Transform */ @@ -229,7 +231,7 @@ class Quaternion : public QuaternionBase > public: typedef _Scalar Scalar; - EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Quaternion) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Quaternion) using Base::operator*=; typedef typename internal::traits::Coefficients Coefficients; @@ -339,12 +341,12 @@ class Map, _Options > public: typedef _Scalar Scalar; typedef typename internal::traits::Coefficients Coefficients; - EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Map) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map) using Base::operator*=; /** Constructs a Mapped Quaternion object from the pointer \a coeffs * - * The pointer \a coeffs must reference the four coeffecients of Quaternion in the following order: + * The pointer \a coeffs must reference the four coefficients of Quaternion in the following order: * \code *coeffs == {x, y, z, w} \endcode * * If the template parameter _Options is set to #Aligned, then the pointer coeffs must be aligned. */ @@ -376,7 +378,7 @@ class Map, _Options > public: typedef _Scalar Scalar; typedef typename internal::traits::Coefficients Coefficients; - EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Map) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map) using Base::operator*=; /** Constructs a Mapped Quaternion object from the pointer \a coeffs @@ -459,12 +461,12 @@ EIGEN_STRONG_INLINE Derived& QuaternionBase::operator*= (const Quaterni */ template EIGEN_STRONG_INLINE typename QuaternionBase::Vector3 -QuaternionBase::_transformVector(Vector3 v) const +QuaternionBase::_transformVector(const Vector3& v) const { // Note that this algorithm comes from the optimization by hand // of the conversion to a Matrix followed by a Matrix/Vector product. // It appears to be much faster than the common algorithm found - // in the litterature (30 versus 39 flops). It also requires two + // in the literature (30 versus 39 flops). It also requires two // Vector3 as temporaries. Vector3 uv = this->vec().cross(v); uv += uv; @@ -584,7 +586,7 @@ inline Derived& QuaternionBase::setFromTwoVectors(const MatrixBase::dummy_precision()) { - c = max(c,-1); + c = (max)(c,Scalar(-1)); Matrix m; m << v0.transpose(), v1.transpose(); JacobiSVD > svd(m, ComputeFullV); Vector3 axis = svd.matrixV().col(2); @@ -635,7 +637,7 @@ inline Quaternion::Scalar> QuaternionBasesquaredNorm(); - if (n2 > 0) + if (n2 > Scalar(0)) return Quaternion(conjugate().coeffs() / n2); else { @@ -665,12 +667,10 @@ template inline typename internal::traits::Scalar QuaternionBase::angularDistance(const QuaternionBase& other) const { - using std::acos; + using std::atan2; using std::abs; - double d = abs(this->dot(other)); - if (d>=1.0) - return Scalar(0); - return static_cast(2 * acos(d)); + Quaternion d = (*this) * other.conjugate(); + return Scalar(2) * atan2( d.vec().norm(), abs(d.w()) ); } @@ -710,7 +710,7 @@ QuaternionBase::slerp(const Scalar& t, const QuaternionBase(scale0 * coeffs() + scale1 * other.coeffs()); } diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Rotation2D.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Rotation2D.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Rotation2D.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Rotation2D.h index 1cac343a..a2d59fce 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Rotation2D.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Rotation2D.h @@ -60,6 +60,9 @@ public: /** Construct a 2D counter clock wise rotation from the angle \a a in radian. */ inline Rotation2D(const Scalar& a) : m_angle(a) {} + + /** Default constructor wihtout initialization. The represented rotation is undefined. */ + Rotation2D() {} /** \returns the rotation angle */ inline Scalar angle() const { return m_angle; } @@ -81,10 +84,10 @@ public: /** Applies the rotation to a 2D vector */ Vector2 operator* (const Vector2& vec) const { return toRotationMatrix() * vec; } - + template Rotation2D& fromRotationMatrix(const MatrixBase& m); - Matrix2 toRotationMatrix(void) const; + Matrix2 toRotationMatrix() const; /** \returns the spherical interpolation between \c *this and \a other using * parameter \a t. It is in fact equivalent to a linear interpolation. diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/RotationBase.h b/deps/eigen-3.2.8/Eigen/src/Geometry/RotationBase.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/RotationBase.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/RotationBase.h diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Scaling.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Scaling.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Scaling.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Scaling.h diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Transform.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Transform.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Transform.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Transform.h index 498fea41..0186f3b8 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Transform.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Transform.h @@ -62,6 +62,8 @@ struct transform_construct_from_matrix; template struct transform_take_affine_part; +template struct transform_make_affine; + } // end namespace internal /** \geometry_module \ingroup Geometry_Module @@ -100,15 +102,15 @@ template struct transform_take_affine_part; * * However, unlike a plain matrix, the Transform class provides many features * simplifying both its assembly and usage. In particular, it can be composed - * with any other transformations (Transform,Translation,RotationBase,Matrix) + * with any other transformations (Transform,Translation,RotationBase,DiagonalMatrix) * and can be directly used to transform implicit homogeneous vectors. All these * operations are handled via the operator*. For the composition of transformations, * its principle consists to first convert the right/left hand sides of the product * to a compatible (Dim+1)^2 matrix and then perform a pure matrix product. * Of course, internally, operator* tries to perform the minimal number of operations * according to the nature of each terms. Likewise, when applying the transform - * to non homogeneous vectors, the latters are automatically promoted to homogeneous - * one before doing the matrix product. The convertions to homogeneous representations + * to points, the latters are automatically promoted to homogeneous vectors + * before doing the matrix product. The conventions to homogeneous representations * are performed as follow: * * \b Translation t (Dim)x(1): @@ -122,7 +124,7 @@ template struct transform_take_affine_part; * R & 0\\ * 0\,...\,0 & 1 * \end{array} \right) \f$ - * + * + * \b Scaling \b DiagonalMatrix S (Dim)x(Dim): + * \f$ \left( \begin{array}{cc} + * S & 0\\ + * 0\,...\,0 & 1 + * \end{array} \right) \f$ * - * \b Column \b vector v (Dim)x(1): + * \b Column \b point v (Dim)x(1): * \f$ \left( \begin{array}{c} * v\\ * 1 * \end{array} \right) \f$ * - * \b Set \b of \b column \b vectors V1...Vn (Dim)x(n): + * \b Set \b of \b column \b points V1...Vn (Dim)x(n): * \f$ \left( \begin{array}{ccc} * v_1 & ... & v_n\\ * 1 & ... & 1 @@ -194,9 +202,9 @@ public: /** type of the matrix used to represent the linear part of the transformation */ typedef Matrix LinearMatrixType; /** type of read/write reference to the linear part of the transformation */ - typedef Block LinearPart; + typedef Block LinearPart; /** type of read reference to the linear part of the transformation */ - typedef const Block ConstLinearPart; + typedef const Block ConstLinearPart; /** type of read/write reference to the affine part of the transformation */ typedef typename internal::conditional::run(m_matrix); } inline Transform(const Transform& other) @@ -383,26 +390,39 @@ public: /** \returns a writable expression of the translation vector of the transformation */ inline TranslationPart translation() { return TranslationPart(m_matrix,0,Dim); } - /** \returns an expression of the product between the transform \c *this and a matrix expression \a other + /** \returns an expression of the product between the transform \c *this and a matrix expression \a other. * - * The right hand side \a other might be either: - * \li a vector of size Dim, + * The right-hand-side \a other can be either: * \li an homogeneous vector of size Dim+1, - * \li a set of vectors of size Dim x Dynamic, - * \li a set of homogeneous vectors of size Dim+1 x Dynamic, - * \li a linear transformation matrix of size Dim x Dim, - * \li an affine transformation matrix of size Dim x Dim+1, + * \li a set of homogeneous vectors of size Dim+1 x N, * \li a transformation matrix of size Dim+1 x Dim+1. + * + * Moreover, if \c *this represents an affine transformation (i.e., Mode!=Projective), then \a other can also be: + * \li a point of size Dim (computes: \code this->linear() * other + this->translation()\endcode), + * \li a set of N points as a Dim x N matrix (computes: \code (this->linear() * other).colwise() + this->translation()\endcode), + * + * In all cases, the return type is a matrix or vector of same sizes as the right-hand-side \a other. + * + * If you want to interpret \a other as a linear or affine transformation, then first convert it to a Transform<> type, + * or do your own cooking. + * + * Finally, if you want to apply Affine transformations to vectors, then explicitly apply the linear part only: + * \code + * Affine3f A; + * Vector3f v1, v2; + * v2 = A.linear() * v1; + * \endcode + * */ // note: this function is defined here because some compilers cannot find the respective declaration template - EIGEN_STRONG_INLINE const typename internal::transform_right_product_impl::ResultType + EIGEN_STRONG_INLINE const typename OtherDerived::PlainObject operator * (const EigenBase &other) const { return internal::transform_right_product_impl::run(*this,other.derived()); } /** \returns the product expression of a transformation matrix \a a times a transform \a b * - * The left hand side \a other might be either: + * The left hand side \a other can be either: * \li a linear transformation matrix of size Dim x Dim, * \li an affine transformation matrix of size Dim x Dim+1, * \li a general transformation matrix of size Dim+1 x Dim+1. @@ -591,11 +611,7 @@ public: */ void makeAffine() { - if(int(Mode)!=int(AffineCompact)) - { - matrix().template block<1,Dim>(Dim,0).setZero(); - matrix().coeffRef(Dim,Dim) = Scalar(1); - } + internal::transform_make_affine::run(m_matrix); } /** \internal @@ -1079,6 +1095,24 @@ Transform::fromPositionOrientationScale(const MatrixBas namespace internal { +template +struct transform_make_affine +{ + template + static void run(MatrixType &mat) + { + static const int Dim = MatrixType::ColsAtCompileTime-1; + mat.template block<1,Dim>(Dim,0).setZero(); + mat.coeffRef(Dim,Dim) = typename MatrixType::Scalar(1); + } +}; + +template<> +struct transform_make_affine +{ + template static void run(MatrixType &) { } +}; + // selector needed to avoid taking the inverse of a 3x4 matrix template struct projective_transform_inverse diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Translation.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Translation.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Translation.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Translation.h index 7fda179c..2e779868 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Translation.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Translation.h @@ -162,7 +162,7 @@ public: * determined by \a prec. * * \sa MatrixBase::isApprox() */ - bool isApprox(const Translation& other, typename NumTraits::Real prec = NumTraits::dummy_precision()) const + bool isApprox(const Translation& other, const typename NumTraits::Real& prec = NumTraits::dummy_precision()) const { return m_coeffs.isApprox(other.m_coeffs, prec); } }; diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/Umeyama.h b/deps/eigen-3.2.8/Eigen/src/Geometry/Umeyama.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/Geometry/Umeyama.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/Umeyama.h index 345b47e0..5e20662f 100644 --- a/deps/eigen-3.2.1/Eigen/src/Geometry/Umeyama.h +++ b/deps/eigen-3.2.8/Eigen/src/Geometry/Umeyama.h @@ -113,7 +113,7 @@ umeyama(const MatrixBase& src, const MatrixBase& dst, boo const Index n = src.cols(); // number of measurements // required for demeaning ... - const RealScalar one_over_n = 1 / static_cast(n); + const RealScalar one_over_n = RealScalar(1) / static_cast(n); // computation of mean const VectorType src_mean = src.rowwise().sum() * one_over_n; @@ -136,16 +136,16 @@ umeyama(const MatrixBase& src, const MatrixBase& dst, boo // Eq. (39) VectorType S = VectorType::Ones(m); - if (sigma.determinant()<0) S(m-1) = -1; + if (sigma.determinant() 0 ) { + if ( svd.matrixU().determinant() * svd.matrixV().determinant() > Scalar(0) ) { Rt.block(0,0,m,m).noalias() = svd.matrixU()*svd.matrixV().transpose(); } else { - const Scalar s = S(m-1); S(m-1) = -1; + const Scalar s = S(m-1); S(m-1) = Scalar(-1); Rt.block(0,0,m,m).noalias() = svd.matrixU() * S.asDiagonal() * svd.matrixV().transpose(); S(m-1) = s; } @@ -156,7 +156,7 @@ umeyama(const MatrixBase& src, const MatrixBase& dst, boo if (with_scaling) { // Eq. (42) - const Scalar c = 1/src_var * svd.singularValues().dot(S); + const Scalar c = Scalar(1)/src_var * svd.singularValues().dot(S); // Eq. (41) Rt.col(m).head(m) = dst_mean; diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/arch/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Geometry/arch/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/arch/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Geometry/arch/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Geometry/arch/Geometry_SSE.h b/deps/eigen-3.2.8/Eigen/src/Geometry/arch/Geometry_SSE.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Geometry/arch/Geometry_SSE.h rename to deps/eigen-3.2.8/Eigen/src/Geometry/arch/Geometry_SSE.h diff --git a/deps/eigen-3.2.1/Eigen/src/Householder/BlockHouseholder.h b/deps/eigen-3.2.8/Eigen/src/Householder/BlockHouseholder.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/Householder/BlockHouseholder.h rename to deps/eigen-3.2.8/Eigen/src/Householder/BlockHouseholder.h index 1991c652..60dbea5f 100644 --- a/deps/eigen-3.2.1/Eigen/src/Householder/BlockHouseholder.h +++ b/deps/eigen-3.2.8/Eigen/src/Householder/BlockHouseholder.h @@ -48,7 +48,7 @@ void apply_block_householder_on_the_left(MatrixType& mat, const VectorsType& vec typedef typename MatrixType::Index Index; enum { TFactorSize = MatrixType::ColsAtCompileTime }; Index nbVecs = vectors.cols(); - Matrix T(nbVecs,nbVecs); + Matrix T(nbVecs,nbVecs); make_block_householder_triangular_factor(T, vectors, hCoeffs); const TriangularView& V(vectors); diff --git a/deps/eigen-3.2.1/Eigen/src/Householder/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Householder/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Householder/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Householder/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Householder/Householder.h b/deps/eigen-3.2.8/Eigen/src/Householder/Householder.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Householder/Householder.h rename to deps/eigen-3.2.8/Eigen/src/Householder/Householder.h diff --git a/deps/eigen-3.2.1/Eigen/src/Householder/HouseholderSequence.h b/deps/eigen-3.2.8/Eigen/src/Householder/HouseholderSequence.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Householder/HouseholderSequence.h rename to deps/eigen-3.2.8/Eigen/src/Householder/HouseholderSequence.h diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h index 73ca9bfd..1f3c060d 100644 --- a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +++ b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h @@ -65,10 +65,10 @@ class DiagonalPreconditioner { typename MatType::InnerIterator it(mat,j); while(it && it.index()!=j) ++it; - if(it && it.index()==j) + if(it && it.index()==j && it.value()!=Scalar(0)) m_invdiag(j) = Scalar(1)/it.value(); else - m_invdiag(j) = 0; + m_invdiag(j) = Scalar(1); } m_isInitialized = true; return *this; diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h index 6fc6ab85..55122190 100644 --- a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +++ b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h @@ -39,7 +39,6 @@ bool bicgstab(const MatrixType& mat, const Rhs& rhs, Dest& x, int maxIters = iters; int n = mat.cols(); - x = precond.solve(x); VectorType r = rhs - mat * x; VectorType r0 = r; @@ -61,6 +60,7 @@ bool bicgstab(const MatrixType& mat, const Rhs& rhs, Dest& x, VectorType s(n), t(n); RealScalar tol2 = tol*tol; + RealScalar eps2 = NumTraits::epsilon()*NumTraits::epsilon(); int i = 0; int restarts = 0; @@ -69,7 +69,7 @@ bool bicgstab(const MatrixType& mat, const Rhs& rhs, Dest& x, Scalar rho_old = rho; rho = r0.dot(r); - if (internal::isMuchSmallerThan(rho,r0_sqnorm)) + if (abs(rho) < eps2*r0_sqnorm) { // The new residual vector became too orthogonal to the arbitrarily choosen direction r0 // Let's restart with a new r0: @@ -142,7 +142,7 @@ struct traits > * SparseMatrix A(n,n); * // fill A and b * BiCGSTAB > solver; - * solver(A); + * solver.compute(A); * x = solver.solve(b); * std::cout << "#iterations: " << solver.iterations() << std::endl; * std::cout << "estimated error: " << solver.error() << std::endl; @@ -151,20 +151,7 @@ struct traits > * \endcode * * By default the iterations start with x=0 as an initial guess of the solution. - * One can control the start using the solveWithGuess() method. Here is a step by - * step execution example starting with a random guess and printing the evolution - * of the estimated error: - * * \code - * x = VectorXd::Random(n); - * solver.setMaxIterations(1); - * int i = 0; - * do { - * x = solver.solveWithGuess(b,x); - * std::cout << i << " : " << solver.error() << std::endl; - * ++i; - * } while (solver.info()!=Success && i<100); - * \endcode - * Note that such a step by step excution is slightly slower. + * One can control the start using the solveWithGuess() method. * * \sa class SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner */ @@ -199,7 +186,8 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - BiCGSTAB(const MatrixType& A) : Base(A) {} + template + explicit BiCGSTAB(const EigenBase& A) : Base(A.derived()) {} ~BiCGSTAB() {} diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h similarity index 89% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h index a74a8155..7dd4010c 100644 --- a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +++ b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h @@ -112,9 +112,9 @@ struct traits > * This class allows to solve for A.x = b sparse linear problems using a conjugate gradient algorithm. * The sparse matrix A must be selfadjoint. The vectors x and b can be either dense or sparse. * - * \tparam _MatrixType the type of the sparse matrix A, can be a dense or a sparse matrix. - * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower - * or Upper. Default is Lower. + * \tparam _MatrixType the type of the matrix A, can be a dense or a sparse matrix. + * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower, + * Upper, or Lower|Upper in which the full matrix entries will be considered. Default is Lower. * \tparam _Preconditioner the type of the preconditioner. Default is DiagonalPreconditioner * * The maximal number of iterations and tolerance value can be controlled via the setMaxIterations() @@ -137,21 +137,10 @@ struct traits > * \endcode * * By default the iterations start with x=0 as an initial guess of the solution. - * One can control the start using the solveWithGuess() method. Here is a step by - * step execution example starting with a random guess and printing the evolution - * of the estimated error: - * * \code - * x = VectorXd::Random(n); - * cg.setMaxIterations(1); - * int i = 0; - * do { - * x = cg.solveWithGuess(b,x); - * std::cout << i << " : " << cg.error() << std::endl; - * ++i; - * } while (cg.info()!=Success && i<100); - * \endcode - * Note that such a step by step excution is slightly slower. + * One can control the start using the solveWithGuess() method. * + * ConjugateGradient can also be used in a matrix-free context, see the following \link MatrixfreeSolverExample example \endlink. + * * \sa class SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner */ template< typename _MatrixType, int _UpLo, typename _Preconditioner> @@ -189,7 +178,8 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - ConjugateGradient(const MatrixType& A) : Base(A) {} + template + explicit ConjugateGradient(const EigenBase& A) : Base(A.derived()) {} ~ConjugateGradient() {} @@ -213,6 +203,10 @@ public: template void _solveWithGuess(const Rhs& b, Dest& x) const { + typedef typename internal::conditional + >::type MatrixWrapperType; m_iterations = Base::maxIterations(); m_error = Base::m_tolerance; @@ -222,8 +216,7 @@ public: m_error = Base::m_tolerance; typename Dest::ColXpr xj(x,j); - internal::conjugate_gradient(mp_matrix->template selfadjointView(), b.col(j), xj, - Base::m_preconditioner, m_iterations, m_error); + internal::conjugate_gradient(MatrixWrapperType(*mp_matrix), b.col(j), xj, Base::m_preconditioner, m_iterations, m_error); } m_isInitialized = true; @@ -234,7 +227,7 @@ public: template void _solve(const Rhs& b, Dest& x) const { - x.setOnes(); + x.setZero(); _solveWithGuess(b,x); } diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h index b55afc13..d3f37fea 100644 --- a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +++ b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h @@ -150,7 +150,6 @@ class IncompleteLUT : internal::noncopyable { analyzePattern(amat); factorize(amat); - m_isInitialized = m_factorizationIsOk; return *this; } @@ -160,7 +159,7 @@ class IncompleteLUT : internal::noncopyable template void _solve(const Rhs& b, Dest& x) const { - x = m_Pinv * b; + x = m_Pinv * b; x = m_lu.template triangularView().solve(x); x = m_lu.template triangularView().solve(x); x = m_P * x; @@ -223,18 +222,29 @@ template void IncompleteLUT::analyzePattern(const _MatrixType& amat) { // Compute the Fill-reducing permutation + // Since ILUT does not perform any numerical pivoting, + // it is highly preferable to keep the diagonal through symmetric permutations. +#ifndef EIGEN_MPL2_ONLY + // To this end, let's symmetrize the pattern and perform AMD on it. SparseMatrix mat1 = amat; SparseMatrix mat2 = amat.transpose(); - // Symmetrize the pattern // FIXME for a matrix with nearly symmetric pattern, mat2+mat1 is the appropriate choice. // on the other hand for a really non-symmetric pattern, mat2*mat1 should be prefered... SparseMatrix AtA = mat2 + mat1; - AtA.prune(keep_diag()); - internal::minimum_degree_ordering(AtA, m_P); // Then compute the AMD ordering... - - m_Pinv = m_P.inverse(); // ... and the inverse permutation + AMDOrdering ordering; + ordering(AtA,m_P); + m_Pinv = m_P.inverse(); // cache the inverse permutation +#else + // If AMD is not available, (MPL2-only), then let's use the slower COLAMD routine. + SparseMatrix mat1 = amat; + COLAMDOrdering ordering; + ordering(mat1,m_Pinv); + m_P = m_Pinv.inverse(); +#endif m_analysisIsOk = true; + m_factorizationIsOk = false; + m_isInitialized = false; } template @@ -442,6 +452,7 @@ void IncompleteLUT::factorize(const _MatrixType& amat) m_lu.makeCompressed(); m_factorizationIsOk = true; + m_isInitialized = m_factorizationIsOk; m_info = Success; } diff --git a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h similarity index 87% rename from deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h rename to deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h index 2036922d..501ef2f8 100644 --- a/deps/eigen-3.2.1/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +++ b/deps/eigen-3.2.8/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h @@ -49,10 +49,11 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - IterativeSolverBase(const MatrixType& A) + template + IterativeSolverBase(const EigenBase& A) { init(); - compute(A); + compute(A.derived()); } ~IterativeSolverBase() {} @@ -62,9 +63,11 @@ public: * Currently, this function mostly call analyzePattern on the preconditioner. In the future * we might, for instance, implement column reodering for faster matrix vector products. */ - Derived& analyzePattern(const MatrixType& A) + template + Derived& analyzePattern(const EigenBase& A) { - m_preconditioner.analyzePattern(A); + grabInput(A.derived()); + m_preconditioner.analyzePattern(*mp_matrix); m_isInitialized = true; m_analysisIsOk = true; m_info = Success; @@ -80,11 +83,12 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - Derived& factorize(const MatrixType& A) + template + Derived& factorize(const EigenBase& A) { + grabInput(A.derived()); eigen_assert(m_analysisIsOk && "You must first call analyzePattern()"); - mp_matrix = &A; - m_preconditioner.factorize(A); + m_preconditioner.factorize(*mp_matrix); m_factorizationIsOk = true; m_info = Success; return derived(); @@ -100,10 +104,11 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - Derived& compute(const MatrixType& A) + template + Derived& compute(const EigenBase& A) { - mp_matrix = &A; - m_preconditioner.compute(A); + grabInput(A.derived()); + m_preconditioner.compute(*mp_matrix); m_isInitialized = true; m_analysisIsOk = true; m_factorizationIsOk = true; @@ -212,6 +217,28 @@ public: } protected: + + template + void grabInput(const EigenBase& A) + { + // we const cast to prevent the creation of a MatrixType temporary by the compiler. + grabInput_impl(A.const_cast_derived()); + } + + template + void grabInput_impl(const EigenBase& A) + { + m_copyMatrix = A; + mp_matrix = &m_copyMatrix; + } + + void grabInput_impl(MatrixType& A) + { + if(MatrixType::RowsAtCompileTime==Dynamic && MatrixType::ColsAtCompileTime==Dynamic) + m_copyMatrix.resize(0,0); + mp_matrix = &A; + } + void init() { m_isInitialized = false; @@ -220,6 +247,7 @@ protected: m_maxIterations = -1; m_tolerance = NumTraits::epsilon(); } + MatrixType m_copyMatrix; const MatrixType* mp_matrix; Preconditioner m_preconditioner; diff --git a/deps/eigen-3.2.1/Eigen/src/Jacobi/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/Jacobi/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Jacobi/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/Jacobi/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/Jacobi/Jacobi.h b/deps/eigen-3.2.8/Eigen/src/Jacobi/Jacobi.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/Jacobi/Jacobi.h rename to deps/eigen-3.2.8/Eigen/src/Jacobi/Jacobi.h diff --git a/deps/eigen-3.2.1/Eigen/src/LU/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/LU/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/LU/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/LU/Determinant.h b/deps/eigen-3.2.8/Eigen/src/LU/Determinant.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/Determinant.h rename to deps/eigen-3.2.8/Eigen/src/LU/Determinant.h diff --git a/deps/eigen-3.2.1/Eigen/src/LU/FullPivLU.h b/deps/eigen-3.2.8/Eigen/src/LU/FullPivLU.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/LU/FullPivLU.h rename to deps/eigen-3.2.8/Eigen/src/LU/FullPivLU.h index dfe25f42..e3847046 100644 --- a/deps/eigen-3.2.1/Eigen/src/LU/FullPivLU.h +++ b/deps/eigen-3.2.8/Eigen/src/LU/FullPivLU.h @@ -20,10 +20,11 @@ namespace Eigen { * * \param MatrixType the type of the matrix of which we are computing the LU decomposition * - * This class represents a LU decomposition of any matrix, with complete pivoting: the matrix A - * is decomposed as A = PLUQ where L is unit-lower-triangular, U is upper-triangular, and P and Q - * are permutation matrices. This is a rank-revealing LU decomposition. The eigenvalues (diagonal - * coefficients) of U are sorted in such a way that any zeros are at the end. + * This class represents a LU decomposition of any matrix, with complete pivoting: the matrix A is + * decomposed as \f$ A = P^{-1} L U Q^{-1} \f$ where L is unit-lower-triangular, U is + * upper-triangular, and P and Q are permutation matrices. This is a rank-revealing LU + * decomposition. The eigenvalues (diagonal coefficients) of U are sorted in such a way that any + * zeros are at the end. * * This decomposition provides the generic approach to solving systems of linear equations, computing * the rank, invertibility, inverse, kernel, and determinant. @@ -373,6 +374,12 @@ template class FullPivLU inline Index cols() const { return m_lu.cols(); } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + MatrixType m_lu; PermutationPType m_p; PermutationQType m_q; @@ -417,6 +424,8 @@ FullPivLU::FullPivLU(const MatrixType& matrix) template FullPivLU& FullPivLU::compute(const MatrixType& matrix) { + check_template_parameters(); + // the permutations are stored as int indices, so just to be sure: eigen_assert(matrix.rows()<=NumTraits::highest() && matrix.cols()<=NumTraits::highest()); @@ -511,8 +520,8 @@ typename internal::traits::Scalar FullPivLU::determinant } /** \returns the matrix represented by the decomposition, - * i.e., it returns the product: P^{-1} L U Q^{-1}. - * This function is provided for debug purpose. */ + * i.e., it returns the product: \f$ P^{-1} L U Q^{-1} \f$. + * This function is provided for debug purposes. */ template MatrixType FullPivLU::reconstructedMatrix() const { @@ -679,7 +688,7 @@ struct solve_retval, Rhs> */ const Index rows = dec().rows(), cols = dec().cols(), - nonzero_pivots = dec().nonzeroPivots(); + nonzero_pivots = dec().rank(); eigen_assert(rhs().rows() == rows); const Index smalldim = (std::min)(rows, cols); diff --git a/deps/eigen-3.2.1/Eigen/src/LU/Inverse.h b/deps/eigen-3.2.8/Eigen/src/LU/Inverse.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/Inverse.h rename to deps/eigen-3.2.8/Eigen/src/LU/Inverse.h diff --git a/deps/eigen-3.2.1/Eigen/src/LU/PartialPivLU.h b/deps/eigen-3.2.8/Eigen/src/LU/PartialPivLU.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/LU/PartialPivLU.h rename to deps/eigen-3.2.8/Eigen/src/LU/PartialPivLU.h index 740ee694..7d1db948 100644 --- a/deps/eigen-3.2.1/Eigen/src/LU/PartialPivLU.h +++ b/deps/eigen-3.2.8/Eigen/src/LU/PartialPivLU.h @@ -171,6 +171,12 @@ template class PartialPivLU inline Index cols() const { return m_lu.cols(); } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + MatrixType m_lu; PermutationType m_p; TranspositionType m_rowsTranspositions; @@ -386,6 +392,8 @@ void partial_lu_inplace(MatrixType& lu, TranspositionType& row_transpositions, t template PartialPivLU& PartialPivLU::compute(const MatrixType& matrix) { + check_template_parameters(); + // the row permutation is stored as int indices, so just to be sure: eigen_assert(matrix.rows()::highest()); diff --git a/deps/eigen-3.2.1/Eigen/src/LU/PartialPivLU_MKL.h b/deps/eigen-3.2.8/Eigen/src/LU/PartialPivLU_MKL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/PartialPivLU_MKL.h rename to deps/eigen-3.2.8/Eigen/src/LU/PartialPivLU_MKL.h diff --git a/deps/eigen-3.2.1/Eigen/src/LU/arch/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/LU/arch/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/arch/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/LU/arch/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/LU/arch/Inverse_SSE.h b/deps/eigen-3.2.8/Eigen/src/LU/arch/Inverse_SSE.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/LU/arch/Inverse_SSE.h rename to deps/eigen-3.2.8/Eigen/src/LU/arch/Inverse_SSE.h diff --git a/deps/eigen-3.2.1/Eigen/src/MetisSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/MetisSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/MetisSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/MetisSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/MetisSupport/MetisSupport.h b/deps/eigen-3.2.8/Eigen/src/MetisSupport/MetisSupport.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/MetisSupport/MetisSupport.h rename to deps/eigen-3.2.8/Eigen/src/MetisSupport/MetisSupport.h diff --git a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Amd.h b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Amd.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/OrderingMethods/Amd.h rename to deps/eigen-3.2.8/Eigen/src/OrderingMethods/Amd.h index 41b4fd7e..658b954c 100644 --- a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Amd.h +++ b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Amd.h @@ -8,7 +8,7 @@ NOTE: this routine has been adapted from the CSparse library: Copyright (c) 2006, Timothy A. Davis. -http://www.cise.ufl.edu/research/sparse/CSparse +http://www.suitesparse.com CSparse is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -137,22 +137,27 @@ void minimum_degree_ordering(SparseMatrix& C, Permutation degree[i] = len[i]; // degree of node i } mark = internal::cs_wclear(0, 0, w, n); /* clear w */ - elen[n] = -2; /* n is a dead element */ - Cp[n] = -1; /* n is a root of assembly tree */ - w[n] = 0; /* n is a dead element */ /* --- Initialize degree lists ------------------------------------------ */ for(i = 0; i < n; i++) { + bool has_diag = false; + for(p = Cp[i]; p dense) /* node i is dense */ + else if(d > dense || !has_diag) /* node i is dense or has no structural diagonal element */ { nv[i] = 0; /* absorb i into element n */ elen[i] = -1; /* node i is dead */ @@ -168,6 +173,10 @@ void minimum_degree_ordering(SparseMatrix& C, Permutation } } + elen[n] = -2; /* n is a dead element */ + Cp[n] = -1; /* n is a root of assembly tree */ + w[n] = 0; /* n is a dead element */ + while (nel < n) /* while (selecting pivots) do */ { /* --- Select node of minimum approximate degree -------------------- */ diff --git a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/OrderingMethods/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/OrderingMethods/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Eigen_Colamd.h b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Eigen_Colamd.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/OrderingMethods/Eigen_Colamd.h rename to deps/eigen-3.2.8/Eigen/src/OrderingMethods/Eigen_Colamd.h index 44548f66..359fd441 100644 --- a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Eigen_Colamd.h +++ b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Eigen_Colamd.h @@ -41,12 +41,8 @@ // // The colamd/symamd library is available at // -// http://www.cise.ufl.edu/research/sparse/colamd/ +// http://www.suitesparse.com -// This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h -// file. It is required by the colamd.c, colamdmex.c, and symamdmex.c -// files, and by any C code that calls the routines whose prototypes are -// listed below, or that uses the colamd/symamd definitions listed below. #ifndef EIGEN_COLAMD_H #define EIGEN_COLAMD_H @@ -102,9 +98,6 @@ namespace internal { /* === Definitions ========================================================== */ /* ========================================================================== */ -#define COLAMD_MAX(a,b) (((a) > (b)) ? (a) : (b)) -#define COLAMD_MIN(a,b) (((a) < (b)) ? (a) : (b)) - #define ONES_COMPLEMENT(r) (-(r)-1) /* -------------------------------------------------------------------------- */ @@ -516,7 +509,7 @@ static Index init_rows_cols /* returns true if OK, or false otherwise */ Col [col].start = p [col] ; Col [col].length = p [col+1] - p [col] ; - if (Col [col].length < 0) + if ((Col [col].length) < 0) // extra parentheses to work-around gcc bug 10200 { /* column pointers must be non-decreasing */ stats [COLAMD_STATUS] = COLAMD_ERROR_col_length_negative ; @@ -739,8 +732,8 @@ static void init_scoring /* === Extract knobs ==================================================== */ - dense_row_count = COLAMD_MAX (0, COLAMD_MIN (knobs [COLAMD_DENSE_ROW] * n_col, n_col)) ; - dense_col_count = COLAMD_MAX (0, COLAMD_MIN (knobs [COLAMD_DENSE_COL] * n_row, n_row)) ; + dense_row_count = std::max(0, (std::min)(Index(knobs [COLAMD_DENSE_ROW] * n_col), n_col)) ; + dense_col_count = std::max(0, (std::min)(Index(knobs [COLAMD_DENSE_COL] * n_row), n_row)) ; COLAMD_DEBUG1 (("colamd: densecount: %d %d\n", dense_row_count, dense_col_count)) ; max_deg = 0 ; n_col2 = n_col ; @@ -804,7 +797,7 @@ static void init_scoring else { /* keep track of max degree of remaining rows */ - max_deg = COLAMD_MAX (max_deg, deg) ; + max_deg = (std::max)(max_deg, deg) ; } } COLAMD_DEBUG1 (("colamd: Dense and null rows killed: %d\n", n_row - n_row2)) ; @@ -842,7 +835,7 @@ static void init_scoring /* add row's external degree */ score += Row [row].shared1.degree - 1 ; /* guard against integer overflow */ - score = COLAMD_MIN (score, n_col) ; + score = (std::min)(score, n_col) ; } /* determine pruned column length */ col_length = (Index) (new_cp - &A [Col [c].start]) ; @@ -914,7 +907,7 @@ static void init_scoring head [score] = c ; /* see if this score is less than current min */ - min_score = COLAMD_MIN (min_score, score) ; + min_score = (std::min)(min_score, score) ; } @@ -1040,7 +1033,7 @@ static Index find_ordering /* return the number of garbage collections */ /* === Garbage_collection, if necessary ============================= */ - needed_memory = COLAMD_MIN (pivot_col_score, n_col - k) ; + needed_memory = (std::min)(pivot_col_score, n_col - k) ; if (pfree + needed_memory >= Alen) { pfree = Eigen::internal::garbage_collection (n_row, n_col, Row, Col, A, &A [pfree]) ; @@ -1099,7 +1092,7 @@ static Index find_ordering /* return the number of garbage collections */ /* clear tag on pivot column */ Col [pivot_col].shared1.thickness = pivot_col_thickness ; - max_deg = COLAMD_MAX (max_deg, pivot_row_degree) ; + max_deg = (std::max)(max_deg, pivot_row_degree) ; /* === Kill all rows used to construct pivot row ==================== */ @@ -1273,7 +1266,7 @@ static Index find_ordering /* return the number of garbage collections */ /* add set difference */ cur_score += row_mark - tag_mark ; /* integer overflow... */ - cur_score = COLAMD_MIN (cur_score, n_col) ; + cur_score = (std::min)(cur_score, n_col) ; } /* recompute the column's length */ @@ -1386,7 +1379,7 @@ static Index find_ordering /* return the number of garbage collections */ cur_score -= Col [col].shared1.thickness ; /* make sure score is less or equal than the max score */ - cur_score = COLAMD_MIN (cur_score, max_score) ; + cur_score = (std::min)(cur_score, max_score) ; COLAMD_ASSERT (cur_score >= 0) ; /* store updated score */ @@ -1409,7 +1402,7 @@ static Index find_ordering /* return the number of garbage collections */ head [cur_score] = col ; /* see if this score is less than current min */ - min_score = COLAMD_MIN (min_score, cur_score) ; + min_score = (std::min)(min_score, cur_score) ; } diff --git a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Ordering.h b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Ordering.h similarity index 87% rename from deps/eigen-3.2.1/Eigen/src/OrderingMethods/Ordering.h rename to deps/eigen-3.2.8/Eigen/src/OrderingMethods/Ordering.h index b4da6531..f3c31f9c 100644 --- a/deps/eigen-3.2.1/Eigen/src/OrderingMethods/Ordering.h +++ b/deps/eigen-3.2.8/Eigen/src/OrderingMethods/Ordering.h @@ -109,7 +109,7 @@ class NaturalOrdering * \class COLAMDOrdering * * Functor computing the \em column \em approximate \em minimum \em degree ordering - * The matrix should be in column-major format + * The matrix should be in column-major and \b compressed format (see SparseMatrix::makeCompressed()). */ template class COLAMDOrdering @@ -118,10 +118,14 @@ class COLAMDOrdering typedef PermutationMatrix PermutationType; typedef Matrix IndexVector; - /** Compute the permutation vector form a sparse matrix */ + /** Compute the permutation vector \a perm form the sparse matrix \a mat + * \warning The input sparse matrix \a mat must be in compressed mode (see SparseMatrix::makeCompressed()). + */ template void operator() (const MatrixType& mat, PermutationType& perm) { + eigen_assert(mat.isCompressed() && "COLAMDOrdering requires a sparse matrix in compressed mode. Call .makeCompressed() before passing it to COLAMDOrdering"); + Index m = mat.rows(); Index n = mat.cols(); Index nnz = mat.nonZeros(); @@ -132,12 +136,12 @@ class COLAMDOrdering Index stats [COLAMD_STATS]; internal::colamd_set_defaults(knobs); - Index info; IndexVector p(n+1), A(Alen); for(Index i=0; i <= n; i++) p(i) = mat.outerIndexPtr()[i]; for(Index i=0; i < nnz; i++) A(i) = mat.innerIndexPtr()[i]; // Call Colamd routine to compute the ordering - info = internal::colamd(m, n, Alen, A.data(), p.data(), knobs, stats); + Index info = internal::colamd(m, n, Alen, A.data(), p.data(), knobs, stats); + EIGEN_UNUSED_VARIABLE(info); eigen_assert( info && "COLAMD failed " ); perm.resize(n); diff --git a/deps/eigen-3.2.1/Eigen/src/PaStiXSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/PaStiXSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/PaStiXSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/PaStiXSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/PaStiXSupport/PaStiXSupport.h b/deps/eigen-3.2.8/Eigen/src/PaStiXSupport/PaStiXSupport.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/PaStiXSupport/PaStiXSupport.h rename to deps/eigen-3.2.8/Eigen/src/PaStiXSupport/PaStiXSupport.h diff --git a/deps/eigen-3.2.1/Eigen/src/PardisoSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/PardisoSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/PardisoSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/PardisoSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/PardisoSupport/PardisoSupport.h b/deps/eigen-3.2.8/Eigen/src/PardisoSupport/PardisoSupport.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/PardisoSupport/PardisoSupport.h rename to deps/eigen-3.2.8/Eigen/src/PardisoSupport/PardisoSupport.h index 1c48f0df..18cd7d88 100644 --- a/deps/eigen-3.2.1/Eigen/src/PardisoSupport/PardisoSupport.h +++ b/deps/eigen-3.2.8/Eigen/src/PardisoSupport/PardisoSupport.h @@ -219,7 +219,7 @@ class PardisoImpl void pardisoInit(int type) { m_type = type; - bool symmetric = abs(m_type) < 10; + bool symmetric = std::abs(m_type) < 10; m_iparm[0] = 1; // No solver default m_iparm[1] = 3; // use Metis for the ordering m_iparm[2] = 1; // Numbers of processors, value of OMP_NUM_THREADS diff --git a/deps/eigen-3.2.1/Eigen/src/QR/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/QR/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/QR/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/QR/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR.h b/deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR.h rename to deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR.h index bec85810..567eab7c 100644 --- a/deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR.h +++ b/deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR.h @@ -76,7 +76,8 @@ template class ColPivHouseholderQR m_colsTranspositions(), m_temp(), m_colSqNorms(), - m_isInitialized(false) {} + m_isInitialized(false), + m_usePrescribedThreshold(false) {} /** \brief Default Constructor with memory preallocation * @@ -383,6 +384,12 @@ template class ColPivHouseholderQR } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + MatrixType m_qr; HCoeffsType m_hCoeffs; PermutationType m_colsPermutation; @@ -421,6 +428,8 @@ typename MatrixType::RealScalar ColPivHouseholderQR::logAbsDetermina template ColPivHouseholderQR& ColPivHouseholderQR::compute(const MatrixType& matrix) { + check_template_parameters(); + using std::abs; Index rows = matrix.rows(); Index cols = matrix.cols(); @@ -462,20 +471,10 @@ ColPivHouseholderQR& ColPivHouseholderQR::compute(const // we store that back into our table: it can't hurt to correct our table. m_colSqNorms.coeffRef(biggest_col_index) = biggest_col_sq_norm; - // if the current biggest column is smaller than epsilon times the initial biggest column, - // terminate to avoid generating nan/inf values. - // Note that here, if we test instead for "biggest == 0", we get a failure every 1000 (or so) - // repetitions of the unit test, with the result of solve() filled with large values of the order - // of 1/(size*epsilon). - if(biggest_col_sq_norm < threshold_helper * RealScalar(rows-k)) - { + // Track the number of meaningful pivots but do not stop the decomposition to make + // sure that the initial matrix is properly reproduced. See bug 941. + if(m_nonzero_pivots==size && biggest_col_sq_norm < threshold_helper * RealScalar(rows-k)) m_nonzero_pivots = k; - m_hCoeffs.tail(size-k).setZero(); - m_qr.bottomRightCorner(rows-k,cols-k) - .template triangularView() - .setZero(); - break; - } // apply the transposition to the columns m_colsTranspositions.coeffRef(k) = biggest_col_index; @@ -504,7 +503,7 @@ ColPivHouseholderQR& ColPivHouseholderQR::compute(const } m_colsPermutation.setIdentity(PermIndexType(cols)); - for(PermIndexType k = 0; k < m_nonzero_pivots; ++k) + for(PermIndexType k = 0; k < size/*m_nonzero_pivots*/; ++k) m_colsPermutation.applyTranspositionOnTheRight(k, PermIndexType(m_colsTranspositions.coeff(k))); m_det_pq = (number_of_transpositions%2) ? -1 : 1; @@ -554,13 +553,15 @@ struct solve_retval, Rhs> } // end namespace internal -/** \returns the matrix Q as a sequence of householder transformations */ +/** \returns the matrix Q as a sequence of householder transformations. + * You can extract the meaningful part only by using: + * \code qr.householderQ().setLength(qr.nonzeroPivots()) \endcode*/ template typename ColPivHouseholderQR::HouseholderSequenceType ColPivHouseholderQR ::householderQ() const { eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized."); - return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate()).setLength(m_nonzero_pivots); + return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate()); } /** \return the column-pivoting Householder QR decomposition of \c *this. diff --git a/deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR_MKL.h b/deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR_MKL.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR_MKL.h rename to deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR_MKL.h index b5b19832..7b6ba0a5 100644 --- a/deps/eigen-3.2.1/Eigen/src/QR/ColPivHouseholderQR_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/QR/ColPivHouseholderQR_MKL.h @@ -49,7 +49,6 @@ ColPivHouseholderQR MatrixType; \ - typedef MatrixType::Scalar Scalar; \ typedef MatrixType::RealScalar RealScalar; \ Index rows = matrix.rows();\ Index cols = matrix.cols();\ diff --git a/deps/eigen-3.2.1/Eigen/src/QR/FullPivHouseholderQR.h b/deps/eigen-3.2.8/Eigen/src/QR/FullPivHouseholderQR.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/QR/FullPivHouseholderQR.h rename to deps/eigen-3.2.8/Eigen/src/QR/FullPivHouseholderQR.h index 6168e7ab..0b39966e 100644 --- a/deps/eigen-3.2.1/Eigen/src/QR/FullPivHouseholderQR.h +++ b/deps/eigen-3.2.8/Eigen/src/QR/FullPivHouseholderQR.h @@ -368,6 +368,12 @@ template class FullPivHouseholderQR RealScalar maxPivot() const { return m_maxpivot; } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + MatrixType m_qr; HCoeffsType m_hCoeffs; IntDiagSizeVectorType m_rows_transpositions; @@ -407,6 +413,8 @@ typename MatrixType::RealScalar FullPivHouseholderQR::logAbsDetermin template FullPivHouseholderQR& FullPivHouseholderQR::compute(const MatrixType& matrix) { + check_template_parameters(); + using std::abs; Index rows = matrix.rows(); Index cols = matrix.cols(); diff --git a/deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR.h b/deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR.h similarity index 83% rename from deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR.h rename to deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR.h index abc61bcb..343a6649 100644 --- a/deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR.h +++ b/deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR.h @@ -189,6 +189,12 @@ template class HouseholderQR const HCoeffsType& hCoeffs() const { return m_hCoeffs; } protected: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + MatrixType m_qr; HCoeffsType m_hCoeffs; RowVectorType m_temp; @@ -251,56 +257,62 @@ void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename } /** \internal */ -template -void householder_qr_inplace_blocked(MatrixQR& mat, HCoeffs& hCoeffs, - typename MatrixQR::Index maxBlockSize=32, - typename MatrixQR::Scalar* tempData = 0) +template +struct householder_qr_inplace_blocked { - typedef typename MatrixQR::Index Index; - typedef typename MatrixQR::Scalar Scalar; - typedef Block BlockType; - - Index rows = mat.rows(); - Index cols = mat.cols(); - Index size = (std::min)(rows, cols); - - typedef Matrix TempType; - TempType tempVector; - if(tempData==0) + // This is specialized for MKL-supported Scalar types in HouseholderQR_MKL.h + static void run(MatrixQR& mat, HCoeffs& hCoeffs, + typename MatrixQR::Index maxBlockSize=32, + typename MatrixQR::Scalar* tempData = 0) { - tempVector.resize(cols); - tempData = tempVector.data(); - } + typedef typename MatrixQR::Index Index; + typedef typename MatrixQR::Scalar Scalar; + typedef Block BlockType; - Index blockSize = (std::min)(maxBlockSize,size); + Index rows = mat.rows(); + Index cols = mat.cols(); + Index size = (std::min)(rows, cols); - Index k = 0; - for (k = 0; k < size; k += blockSize) - { - Index bs = (std::min)(size-k,blockSize); // actual size of the block - Index tcols = cols - k - bs; // trailing columns - Index brows = rows-k; // rows of the block - - // partition the matrix: - // A00 | A01 | A02 - // mat = A10 | A11 | A12 - // A20 | A21 | A22 - // and performs the qr dec of [A11^T A12^T]^T - // and update [A21^T A22^T]^T using level 3 operations. - // Finally, the algorithm continue on A22 - - BlockType A11_21 = mat.block(k,k,brows,bs); - Block hCoeffsSegment = hCoeffs.segment(k,bs); - - householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData); - - if(tcols) + typedef Matrix TempType; + TempType tempVector; + if(tempData==0) { - BlockType A21_22 = mat.block(k,k+bs,brows,tcols); - apply_block_householder_on_the_left(A21_22,A11_21,hCoeffsSegment.adjoint()); + tempVector.resize(cols); + tempData = tempVector.data(); + } + + Index blockSize = (std::min)(maxBlockSize,size); + + Index k = 0; + for (k = 0; k < size; k += blockSize) + { + Index bs = (std::min)(size-k,blockSize); // actual size of the block + Index tcols = cols - k - bs; // trailing columns + Index brows = rows-k; // rows of the block + + // partition the matrix: + // A00 | A01 | A02 + // mat = A10 | A11 | A12 + // A20 | A21 | A22 + // and performs the qr dec of [A11^T A12^T]^T + // and update [A21^T A22^T]^T using level 3 operations. + // Finally, the algorithm continue on A22 + + BlockType A11_21 = mat.block(k,k,brows,bs); + Block hCoeffsSegment = hCoeffs.segment(k,bs); + + householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData); + + if(tcols) + { + BlockType A21_22 = mat.block(k,k+bs,brows,tcols); + apply_block_householder_on_the_left(A21_22,A11_21,hCoeffsSegment.adjoint()); + } } } -} +}; template struct solve_retval, Rhs> @@ -343,6 +355,8 @@ struct solve_retval, Rhs> template HouseholderQR& HouseholderQR::compute(const MatrixType& matrix) { + check_template_parameters(); + Index rows = matrix.rows(); Index cols = matrix.cols(); Index size = (std::min)(rows,cols); @@ -352,7 +366,7 @@ HouseholderQR& HouseholderQR::compute(const MatrixType& m_temp.resize(cols); - internal::householder_qr_inplace_blocked(m_qr, m_hCoeffs, 48, m_temp.data()); + internal::householder_qr_inplace_blocked::run(m_qr, m_hCoeffs, 48, m_temp.data()); m_isInitialized = true; return *this; diff --git a/deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR_MKL.h b/deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR_MKL.h similarity index 75% rename from deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR_MKL.h rename to deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR_MKL.h index 5313de60..b80f1b48 100644 --- a/deps/eigen-3.2.1/Eigen/src/QR/HouseholderQR_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/QR/HouseholderQR_MKL.h @@ -34,28 +34,30 @@ #ifndef EIGEN_QR_MKL_H #define EIGEN_QR_MKL_H -#include "Eigen/src/Core/util/MKL_support.h" +#include "../Core/util/MKL_support.h" namespace Eigen { -namespace internal { + namespace internal { -/** \internal Specialization for the data types supported by MKL */ + /** \internal Specialization for the data types supported by MKL */ #define EIGEN_MKL_QR_NOPIV(EIGTYPE, MKLTYPE, MKLPREFIX) \ template \ -void householder_qr_inplace_blocked(MatrixQR& mat, HCoeffs& hCoeffs, \ - typename MatrixQR::Index maxBlockSize=32, \ - EIGTYPE* tempData = 0) \ +struct householder_qr_inplace_blocked \ { \ - lapack_int m = mat.rows(); \ - lapack_int n = mat.cols(); \ - lapack_int lda = mat.outerStride(); \ - lapack_int matrix_order = (MatrixQR::IsRowMajor) ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \ - LAPACKE_##MKLPREFIX##geqrf( matrix_order, m, n, (MKLTYPE*)mat.data(), lda, (MKLTYPE*)hCoeffs.data()); \ - hCoeffs.adjointInPlace(); \ -\ -} + static void run(MatrixQR& mat, HCoeffs& hCoeffs, \ + typename MatrixQR::Index = 32, \ + typename MatrixQR::Scalar* = 0) \ + { \ + lapack_int m = (lapack_int) mat.rows(); \ + lapack_int n = (lapack_int) mat.cols(); \ + lapack_int lda = (lapack_int) mat.outerStride(); \ + lapack_int matrix_order = (MatrixQR::IsRowMajor) ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \ + LAPACKE_##MKLPREFIX##geqrf( matrix_order, m, n, (MKLTYPE*)mat.data(), lda, (MKLTYPE*)hCoeffs.data()); \ + hCoeffs.adjointInPlace(); \ + } \ +}; EIGEN_MKL_QR_NOPIV(double, double, d) EIGEN_MKL_QR_NOPIV(float, float, s) diff --git a/deps/eigen-3.2.1/Eigen/src/SPQRSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SPQRSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SPQRSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SPQRSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h b/deps/eigen-3.2.8/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h similarity index 83% rename from deps/eigen-3.2.1/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h rename to deps/eigen-3.2.8/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h index a2cc2a9e..36138101 100644 --- a/deps/eigen-3.2.1/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +++ b/deps/eigen-3.2.8/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h @@ -47,7 +47,7 @@ namespace Eigen { * You can then apply it to a vector. * * R is the sparse triangular factor. Use matrixQR() to get it as SparseMatrix. - * NOTE : The Index type of R is always UF_long. You can get it with SPQR::Index + * NOTE : The Index type of R is always SuiteSparse_long. You can get it with SPQR::Index * * \tparam _MatrixType The type of the sparse matrix A, must be a column-major SparseMatrix<> * NOTE @@ -59,24 +59,18 @@ class SPQR public: typedef typename _MatrixType::Scalar Scalar; typedef typename _MatrixType::RealScalar RealScalar; - typedef UF_long Index ; + typedef SuiteSparse_long Index ; typedef SparseMatrix MatrixType; typedef PermutationMatrix PermutationType; public: SPQR() - : m_isInitialized(false), - m_ordering(SPQR_ORDERING_DEFAULT), - m_allow_tol(SPQR_DEFAULT_TOL), - m_tolerance (NumTraits::epsilon()) + : m_isInitialized(false), m_ordering(SPQR_ORDERING_DEFAULT), m_allow_tol(SPQR_DEFAULT_TOL), m_tolerance (NumTraits::epsilon()), m_useDefaultThreshold(true) { cholmod_l_start(&m_cc); } - SPQR(const _MatrixType& matrix) - : m_isInitialized(false), - m_ordering(SPQR_ORDERING_DEFAULT), - m_allow_tol(SPQR_DEFAULT_TOL), - m_tolerance (NumTraits::epsilon()) + SPQR(const _MatrixType& matrix) + : m_isInitialized(false), m_ordering(SPQR_ORDERING_DEFAULT), m_allow_tol(SPQR_DEFAULT_TOL), m_tolerance (NumTraits::epsilon()), m_useDefaultThreshold(true) { cholmod_l_start(&m_cc); compute(matrix); @@ -101,10 +95,26 @@ class SPQR if(m_isInitialized) SPQR_free(); MatrixType mat(matrix); + + /* Compute the default threshold as in MatLab, see: + * Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing + * Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011, Page 8:3 + */ + RealScalar pivotThreshold = m_tolerance; + if(m_useDefaultThreshold) + { + using std::max; + RealScalar max2Norm = 0.0; + for (int j = 0; j < mat.cols(); j++) max2Norm = (max)(max2Norm, mat.col(j).norm()); + if(max2Norm==RealScalar(0)) + max2Norm = RealScalar(1); + pivotThreshold = 20 * (mat.rows() + mat.cols()) * max2Norm * NumTraits::epsilon(); + } + cholmod_sparse A; A = viewAsCholmod(mat); Index col = matrix.cols(); - m_rank = SuiteSparseQR(m_ordering, m_tolerance, col, &A, + m_rank = SuiteSparseQR(m_ordering, pivotThreshold, col, &A, &m_cR, &m_E, &m_H, &m_HPinv, &m_HTau, &m_cc); if (!m_cR) @@ -120,7 +130,7 @@ class SPQR /** * Get the number of rows of the input matrix and the Q matrix */ - inline Index rows() const {return m_H->nrow; } + inline Index rows() const {return m_cR->nrow; } /** * Get the number of columns of the input matrix. @@ -145,16 +155,25 @@ class SPQR { eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()"); eigen_assert(b.cols()==1 && "This method is for vectors only"); - + //Compute Q^T * b - typename Dest::PlainObject y; + typename Dest::PlainObject y, y2; y = matrixQ().transpose() * b; - // Solves with the triangular matrix R + + // Solves with the triangular matrix R Index rk = this->rank(); - y.topRows(rk) = this->matrixR().topLeftCorner(rk, rk).template triangularView().solve(y.topRows(rk)); - y.bottomRows(cols()-rk).setZero(); + y2 = y; + y.resize((std::max)(cols(),Index(y.rows())),y.cols()); + y.topRows(rk) = this->matrixR().topLeftCorner(rk, rk).template triangularView().solve(y2.topRows(rk)); + // Apply the column permutation - dest.topRows(cols()) = colsPermutation() * y.topRows(cols()); + // colsPermutation() performs a copy of the permutation, + // so let's apply it manually: + for(Index i = 0; i < rk; ++i) dest.row(m_E[i]) = y.row(i); + for(Index i = rk; i < cols(); ++i) dest.row(m_E[i]).setZero(); + +// y.bottomRows(y.rows()-rk).setZero(); +// dest = colsPermutation() * y.topRows(cols()); m_info = Success; } @@ -197,7 +216,11 @@ class SPQR /// Set the fill-reducing ordering method to be used void setSPQROrdering(int ord) { m_ordering = ord;} /// Set the tolerance tol to treat columns with 2-norm < =tol as zero - void setPivotThreshold(const RealScalar& tol) { m_tolerance = tol; } + void setPivotThreshold(const RealScalar& tol) + { + m_useDefaultThreshold = false; + m_tolerance = tol; + } /** \returns a pointer to the SPQR workspace */ cholmod_common *cholmodCommon() const { return &m_cc; } @@ -230,6 +253,7 @@ class SPQR mutable cholmod_dense *m_HTau; // The Householder coefficients mutable Index m_rank; // The rank of the matrix mutable cholmod_common m_cc; // Workspace and parameters + bool m_useDefaultThreshold; // Use default threshold template friend struct SPQR_QProduct; }; diff --git a/deps/eigen-3.2.1/Eigen/src/SVD/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SVD/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SVD/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SVD/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD.h b/deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD.h similarity index 88% rename from deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD.h rename to deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD.h index f44995cd..89ace381 100644 --- a/deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD.h +++ b/deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD.h @@ -375,17 +375,19 @@ struct svd_precondition_2x2_block_to_be_real Scalar z; JacobiRotation rot; RealScalar n = sqrt(numext::abs2(work_matrix.coeff(p,p)) + numext::abs2(work_matrix.coeff(q,p))); + if(n==0) { z = abs(work_matrix.coeff(p,q)) / work_matrix.coeff(p,q); work_matrix.row(p) *= z; if(svd.computeU()) svd.m_matrixU.col(p) *= conj(z); if(work_matrix.coeff(q,q)!=Scalar(0)) + { z = abs(work_matrix.coeff(q,q)) / work_matrix.coeff(q,q); - else - z = Scalar(0); - work_matrix.row(q) *= z; - if(svd.computeU()) svd.m_matrixU.col(q) *= conj(z); + work_matrix.row(q) *= z; + if(svd.computeU()) svd.m_matrixU.col(q) *= conj(z); + } + // otherwise the second row is already zero, so we have nothing to do. } else { @@ -415,6 +417,7 @@ void real_2x2_jacobi_svd(const MatrixType& matrix, Index p, Index q, JacobiRotation *j_right) { using std::sqrt; + using std::abs; Matrix m; m << numext::real(matrix.coeff(p,p)), numext::real(matrix.coeff(p,q)), numext::real(matrix.coeff(q,p)), numext::real(matrix.coeff(q,q)); @@ -428,9 +431,11 @@ void real_2x2_jacobi_svd(const MatrixType& matrix, Index p, Index q, } else { - RealScalar u = d / t; - rot1.c() = RealScalar(1) / sqrt(RealScalar(1) + numext::abs2(u)); - rot1.s() = rot1.c() * u; + RealScalar t2d2 = numext::hypot(t,d); + rot1.c() = abs(t)/t2d2; + rot1.s() = d/t2d2; + if(tmakeJacobi(m,0,1); @@ -531,8 +536,9 @@ template class JacobiSVD JacobiSVD() : m_isInitialized(false), m_isAllocated(false), + m_usePrescribedThreshold(false), m_computationOptions(0), - m_rows(-1), m_cols(-1) + m_rows(-1), m_cols(-1), m_diagSize(0) {} @@ -545,6 +551,7 @@ template class JacobiSVD JacobiSVD(Index rows, Index cols, unsigned int computationOptions = 0) : m_isInitialized(false), m_isAllocated(false), + m_usePrescribedThreshold(false), m_computationOptions(0), m_rows(-1), m_cols(-1) { @@ -564,6 +571,7 @@ template class JacobiSVD JacobiSVD(const MatrixType& matrix, unsigned int computationOptions = 0) : m_isInitialized(false), m_isAllocated(false), + m_usePrescribedThreshold(false), m_computationOptions(0), m_rows(-1), m_cols(-1) { @@ -665,23 +673,92 @@ template class JacobiSVD eigen_assert(m_isInitialized && "JacobiSVD is not initialized."); return m_nonzeroSingularValues; } + + /** \returns the rank of the matrix of which \c *this is the SVD. + * + * \note This method has to determine which singular values should be considered nonzero. + * For that, it uses the threshold value that you can control by calling + * setThreshold(const RealScalar&). + */ + inline Index rank() const + { + using std::abs; + eigen_assert(m_isInitialized && "JacobiSVD is not initialized."); + if(m_singularValues.size()==0) return 0; + RealScalar premultiplied_threshold = m_singularValues.coeff(0) * threshold(); + Index i = m_nonzeroSingularValues-1; + while(i>=0 && m_singularValues.coeff(i) < premultiplied_threshold) --i; + return i+1; + } + + /** Allows to prescribe a threshold to be used by certain methods, such as rank() and solve(), + * which need to determine when singular values are to be considered nonzero. + * This is not used for the SVD decomposition itself. + * + * When it needs to get the threshold value, Eigen calls threshold(). + * The default is \c NumTraits::epsilon() + * + * \param threshold The new value to use as the threshold. + * + * A singular value will be considered nonzero if its value is strictly greater than + * \f$ \vert singular value \vert \leqslant threshold \times \vert max singular value \vert \f$. + * + * If you want to come back to the default behavior, call setThreshold(Default_t) + */ + JacobiSVD& setThreshold(const RealScalar& threshold) + { + m_usePrescribedThreshold = true; + m_prescribedThreshold = threshold; + return *this; + } + + /** Allows to come back to the default behavior, letting Eigen use its default formula for + * determining the threshold. + * + * You should pass the special object Eigen::Default as parameter here. + * \code svd.setThreshold(Eigen::Default); \endcode + * + * See the documentation of setThreshold(const RealScalar&). + */ + JacobiSVD& setThreshold(Default_t) + { + m_usePrescribedThreshold = false; + return *this; + } + + /** Returns the threshold that will be used by certain methods such as rank(). + * + * See the documentation of setThreshold(const RealScalar&). + */ + RealScalar threshold() const + { + eigen_assert(m_isInitialized || m_usePrescribedThreshold); + return m_usePrescribedThreshold ? m_prescribedThreshold + : (std::max)(1,m_diagSize)*NumTraits::epsilon(); + } inline Index rows() const { return m_rows; } inline Index cols() const { return m_cols; } private: void allocate(Index rows, Index cols, unsigned int computationOptions); + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } protected: MatrixUType m_matrixU; MatrixVType m_matrixV; SingularValuesType m_singularValues; WorkMatrixType m_workMatrix; - bool m_isInitialized, m_isAllocated; + bool m_isInitialized, m_isAllocated, m_usePrescribedThreshold; bool m_computeFullU, m_computeThinU; bool m_computeFullV, m_computeThinV; unsigned int m_computationOptions; Index m_nonzeroSingularValues, m_rows, m_cols, m_diagSize; + RealScalar m_prescribedThreshold; template friend struct internal::svd_precondition_2x2_block_to_be_real; @@ -690,6 +767,7 @@ template class JacobiSVD internal::qr_preconditioner_impl m_qr_precond_morecols; internal::qr_preconditioner_impl m_qr_precond_morerows; + MatrixType m_scaledMatrix; }; template @@ -736,14 +814,17 @@ void JacobiSVD::allocate(Index rows, Index cols, u : 0); m_workMatrix.resize(m_diagSize, m_diagSize); - if(m_cols>m_rows) m_qr_precond_morecols.allocate(*this); - if(m_rows>m_cols) m_qr_precond_morerows.allocate(*this); + if(m_cols>m_rows) m_qr_precond_morecols.allocate(*this); + if(m_rows>m_cols) m_qr_precond_morerows.allocate(*this); + if(m_rows!=m_cols) m_scaledMatrix.resize(rows,cols); } template JacobiSVD& JacobiSVD::compute(const MatrixType& matrix, unsigned int computationOptions) { + check_template_parameters(); + using std::abs; allocate(matrix.rows(), matrix.cols(), computationOptions); @@ -754,11 +835,21 @@ JacobiSVD::compute(const MatrixType& matrix, unsig // limit for very small denormal numbers to be considered zero in order to avoid infinite loops (see bug 286) const RealScalar considerAsZero = RealScalar(2) * std::numeric_limits::denorm_min(); + // Scaling factor to reduce over/under-flows + RealScalar scale = matrix.cwiseAbs().maxCoeff(); + if(scale==RealScalar(0)) scale = RealScalar(1); + /*** step 1. The R-SVD step: we use a QR decomposition to reduce to the case of a square matrix */ - if(!m_qr_precond_morecols.run(*this, matrix) && !m_qr_precond_morerows.run(*this, matrix)) + if(m_rows!=m_cols) { - m_workMatrix = matrix.block(0,0,m_diagSize,m_diagSize); + m_scaledMatrix = matrix / scale; + m_qr_precond_morecols.run(*this, m_scaledMatrix); + m_qr_precond_morerows.run(*this, m_scaledMatrix); + } + else + { + m_workMatrix = matrix.block(0,0,m_diagSize,m_diagSize) / scale; if(m_computeFullU) m_matrixU.setIdentity(m_rows,m_rows); if(m_computeThinU) m_matrixU.setIdentity(m_rows,m_diagSize); if(m_computeFullV) m_matrixV.setIdentity(m_cols,m_cols); @@ -784,7 +875,8 @@ JacobiSVD::compute(const MatrixType& matrix, unsig using std::max; RealScalar threshold = (max)(considerAsZero, precision * (max)(abs(m_workMatrix.coeff(p,p)), abs(m_workMatrix.coeff(q,q)))); - if((max)(abs(m_workMatrix.coeff(p,q)),abs(m_workMatrix.coeff(q,p))) > threshold) + // We compare both values to threshold instead of calling max to be robust to NaN (See bug 791) + if(abs(m_workMatrix.coeff(p,q))>threshold || abs(m_workMatrix.coeff(q,p)) > threshold) { finished = false; @@ -833,6 +925,8 @@ JacobiSVD::compute(const MatrixType& matrix, unsig if(computeV()) m_matrixV.col(pos).swap(m_matrixV.col(i)); } } + + m_singularValues *= scale; m_isInitialized = true; return *this; @@ -854,11 +948,11 @@ struct solve_retval, Rhs> // So A^{-1} = V S^{-1} U^* Matrix tmp; - Index nonzeroSingVals = dec().nonzeroSingularValues(); + Index rank = dec().rank(); - tmp.noalias() = dec().matrixU().leftCols(nonzeroSingVals).adjoint() * rhs(); - tmp = dec().singularValues().head(nonzeroSingVals).asDiagonal().inverse() * tmp; - dst = dec().matrixV().leftCols(nonzeroSingVals) * tmp; + tmp.noalias() = dec().matrixU().leftCols(rank).adjoint() * rhs(); + tmp = dec().singularValues().head(rank).asDiagonal().inverse() * tmp; + dst = dec().matrixV().leftCols(rank) * tmp; } }; } // end namespace internal diff --git a/deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD_MKL.h b/deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD_MKL.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD_MKL.h rename to deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD_MKL.h index decda754..14e461c4 100644 --- a/deps/eigen-3.2.1/Eigen/src/SVD/JacobiSVD_MKL.h +++ b/deps/eigen-3.2.8/Eigen/src/SVD/JacobiSVD_MKL.h @@ -45,8 +45,8 @@ JacobiSVD, ColPiv JacobiSVD, ColPivHouseholderQRPreconditioner>::compute(const Matrix& matrix, unsigned int computationOptions) \ { \ typedef Matrix MatrixType; \ - typedef MatrixType::Scalar Scalar; \ - typedef MatrixType::RealScalar RealScalar; \ + /*typedef MatrixType::Scalar Scalar;*/ \ + /*typedef MatrixType::RealScalar RealScalar;*/ \ allocate(matrix.rows(), matrix.cols(), computationOptions); \ \ /*const RealScalar precision = RealScalar(2) * NumTraits::epsilon();*/ \ diff --git a/deps/eigen-3.2.1/Eigen/src/SVD/UpperBidiagonalization.h b/deps/eigen-3.2.8/Eigen/src/SVD/UpperBidiagonalization.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SVD/UpperBidiagonalization.h rename to deps/eigen-3.2.8/Eigen/src/SVD/UpperBidiagonalization.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCholesky/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SparseCholesky/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCholesky/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SparseCholesky/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCholesky/SimplicialCholesky.h b/deps/eigen-3.2.8/Eigen/src/SparseCholesky/SimplicialCholesky.h similarity index 92% rename from deps/eigen-3.2.1/Eigen/src/SparseCholesky/SimplicialCholesky.h rename to deps/eigen-3.2.8/Eigen/src/SparseCholesky/SimplicialCholesky.h index f41d7e01..e1f96ba5 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCholesky/SimplicialCholesky.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCholesky/SimplicialCholesky.h @@ -37,6 +37,7 @@ class SimplicialCholeskyBase : internal::noncopyable { public: typedef typename internal::traits::MatrixType MatrixType; + typedef typename internal::traits::OrderingType OrderingType; enum { UpLo = internal::traits::UpLo }; typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::RealScalar RealScalar; @@ -240,15 +241,16 @@ class SimplicialCholeskyBase : internal::noncopyable RealScalar m_shiftScale; }; -template class SimplicialLLT; -template class SimplicialLDLT; -template class SimplicialCholesky; +template > class SimplicialLLT; +template > class SimplicialLDLT; +template > class SimplicialCholesky; namespace internal { -template struct traits > +template struct traits > { typedef _MatrixType MatrixType; + typedef _Ordering OrderingType; enum { UpLo = _UpLo }; typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::Index Index; @@ -259,9 +261,10 @@ template struct traits struct traits > +template struct traits > { typedef _MatrixType MatrixType; + typedef _Ordering OrderingType; enum { UpLo = _UpLo }; typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::Index Index; @@ -272,9 +275,10 @@ template struct traits struct traits > +template struct traits > { typedef _MatrixType MatrixType; + typedef _Ordering OrderingType; enum { UpLo = _UpLo }; }; @@ -294,11 +298,12 @@ template struct traits * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower * or Upper. Default is Lower. + * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<> * - * \sa class SimplicialLDLT + * \sa class SimplicialLDLT, class AMDOrdering, class NaturalOrdering */ -template - class SimplicialLLT : public SimplicialCholeskyBase > +template + class SimplicialLLT : public SimplicialCholeskyBase > { public: typedef _MatrixType MatrixType; @@ -382,11 +387,12 @@ public: * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<> * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower * or Upper. Default is Lower. + * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<> * - * \sa class SimplicialLLT + * \sa class SimplicialLLT, class AMDOrdering, class NaturalOrdering */ -template - class SimplicialLDLT : public SimplicialCholeskyBase > +template + class SimplicialLDLT : public SimplicialCholeskyBase > { public: typedef _MatrixType MatrixType; @@ -467,8 +473,8 @@ public: * * \sa class SimplicialLDLT, class SimplicialLLT */ -template - class SimplicialCholesky : public SimplicialCholeskyBase > +template + class SimplicialCholesky : public SimplicialCholeskyBase > { public: typedef _MatrixType MatrixType; @@ -612,15 +618,13 @@ void SimplicialCholeskyBase::ordering(const MatrixType& a, CholMatrixTy { eigen_assert(a.rows()==a.cols()); const Index size = a.rows(); - // TODO allows to configure the permutation // Note that amd compute the inverse permutation { CholMatrixType C; C = a.template selfadjointView(); - // remove diagonal entries: - // seems not to be needed - // C.prune(keep_diag()); - internal::minimum_degree_ordering(C, m_Pinv); + + OrderingType ordering; + ordering(C,m_Pinv); } if(m_Pinv.size()>0) diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h b/deps/eigen-3.2.8/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h rename to deps/eigen-3.2.8/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/AmbiVector.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/AmbiVector.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/AmbiVector.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/AmbiVector.h index 17fff96a..220c6451 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/AmbiVector.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/AmbiVector.h @@ -69,7 +69,7 @@ class AmbiVector delete[] m_buffer; if (size<1000) { - Index allocSize = (size * sizeof(ListEl))/sizeof(Scalar); + Index allocSize = (size * sizeof(ListEl) + sizeof(Scalar) - 1)/sizeof(Scalar); m_allocatedElements = (allocSize*sizeof(Scalar))/sizeof(ListEl); m_buffer = new Scalar[allocSize]; } @@ -88,7 +88,7 @@ class AmbiVector Index copyElements = m_allocatedElements; m_allocatedElements = (std::min)(Index(m_allocatedElements*1.5),m_size); Index allocSize = m_allocatedElements * sizeof(ListEl); - allocSize = allocSize/sizeof(Scalar) + (allocSize%sizeof(Scalar)>0?1:0); + allocSize = (allocSize + sizeof(Scalar) - 1)/sizeof(Scalar); Scalar* newBuffer = new Scalar[allocSize]; memcpy(newBuffer, m_buffer, copyElements * sizeof(ListEl)); delete[] m_buffer; diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SparseCore/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SparseCore/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/CompressedStorage.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/CompressedStorage.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/CompressedStorage.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/CompressedStorage.h index 3321fab4..a667cb56 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/CompressedStorage.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/CompressedStorage.h @@ -51,8 +51,8 @@ class CompressedStorage CompressedStorage& operator=(const CompressedStorage& other) { resize(other.size()); - memcpy(m_values, other.m_values, m_size * sizeof(Scalar)); - memcpy(m_indices, other.m_indices, m_size * sizeof(Index)); + internal::smart_copy(other.m_values, other.m_values + m_size, m_values); + internal::smart_copy(other.m_indices, other.m_indices + m_size, m_indices); return *this; } @@ -83,10 +83,10 @@ class CompressedStorage reallocate(m_size); } - void resize(size_t size, float reserveSizeFactor = 0) + void resize(size_t size, double reserveSizeFactor = 0) { if (m_allocatedSize m_outerSize; EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) + private: + Index nonZeros() const; }; @@ -82,6 +94,7 @@ class BlockImpl,BlockRows,BlockCols,true typedef SparseMatrix<_Scalar, _Options, _Index> SparseMatrixType; typedef typename internal::remove_all::type _MatrixTypeNested; typedef Block BlockType; + typedef Block ConstBlockType; public: enum { IsRowMajor = internal::traits::IsRowMajor }; EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType) @@ -223,6 +236,21 @@ public: else return Map >(m_matrix.innerNonZeroPtr()+m_outerStart, m_outerSize.value()).sum(); } + + inline Scalar& coeffRef(int row, int col) + { + return m_matrix.const_cast_derived().coeffRef(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart)); + } + + inline const Scalar coeff(int row, int col) const + { + return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart)); + } + + inline const Scalar coeff(int index) const + { + return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart); + } const Scalar& lastCoeff() const { @@ -245,6 +273,104 @@ public: }; + +template +class BlockImpl,BlockRows,BlockCols,true,Sparse> + : public SparseMatrixBase,BlockRows,BlockCols,true> > +{ + typedef SparseMatrix<_Scalar, _Options, _Index> SparseMatrixType; + typedef typename internal::remove_all::type _MatrixTypeNested; + typedef Block BlockType; +public: + enum { IsRowMajor = internal::traits::IsRowMajor }; + EIGEN_SPARSE_PUBLIC_INTERFACE(BlockType) +protected: + enum { OuterSize = IsRowMajor ? BlockRows : BlockCols }; +public: + + class InnerIterator: public SparseMatrixType::InnerIterator + { + public: + inline InnerIterator(const BlockType& xpr, Index outer) + : SparseMatrixType::InnerIterator(xpr.m_matrix, xpr.m_outerStart + outer), m_outer(outer) + {} + inline Index row() const { return IsRowMajor ? m_outer : this->index(); } + inline Index col() const { return IsRowMajor ? this->index() : m_outer; } + protected: + Index m_outer; + }; + class ReverseInnerIterator: public SparseMatrixType::ReverseInnerIterator + { + public: + inline ReverseInnerIterator(const BlockType& xpr, Index outer) + : SparseMatrixType::ReverseInnerIterator(xpr.m_matrix, xpr.m_outerStart + outer), m_outer(outer) + {} + inline Index row() const { return IsRowMajor ? m_outer : this->index(); } + inline Index col() const { return IsRowMajor ? this->index() : m_outer; } + protected: + Index m_outer; + }; + + inline BlockImpl(const SparseMatrixType& xpr, int i) + : m_matrix(xpr), m_outerStart(i), m_outerSize(OuterSize) + {} + + inline BlockImpl(const SparseMatrixType& xpr, int startRow, int startCol, int blockRows, int blockCols) + : m_matrix(xpr), m_outerStart(IsRowMajor ? startRow : startCol), m_outerSize(IsRowMajor ? blockRows : blockCols) + {} + + inline const Scalar* valuePtr() const + { return m_matrix.valuePtr() + m_matrix.outerIndexPtr()[m_outerStart]; } + + inline const Index* innerIndexPtr() const + { return m_matrix.innerIndexPtr() + m_matrix.outerIndexPtr()[m_outerStart]; } + + inline const Index* outerIndexPtr() const + { return m_matrix.outerIndexPtr() + m_outerStart; } + + Index nonZeros() const + { + if(m_matrix.isCompressed()) + return std::size_t(m_matrix.outerIndexPtr()[m_outerStart+m_outerSize.value()]) + - std::size_t(m_matrix.outerIndexPtr()[m_outerStart]); + else if(m_outerSize.value()==0) + return 0; + else + return Map >(m_matrix.innerNonZeroPtr()+m_outerStart, m_outerSize.value()).sum(); + } + + inline const Scalar coeff(int row, int col) const + { + return m_matrix.coeff(row + (IsRowMajor ? m_outerStart : 0), col + (IsRowMajor ? 0 : m_outerStart)); + } + + inline const Scalar coeff(int index) const + { + return m_matrix.coeff(IsRowMajor ? m_outerStart : index, IsRowMajor ? index : m_outerStart); + } + + const Scalar& lastCoeff() const + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(BlockImpl); + eigen_assert(nonZeros()>0); + if(m_matrix.isCompressed()) + return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart+1]-1]; + else + return m_matrix.valuePtr()[m_matrix.outerIndexPtr()[m_outerStart]+m_matrix.innerNonZeroPtr()[m_outerStart]-1]; + } + + EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); } + + protected: + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) + + typename SparseMatrixType::Nested m_matrix; + Index m_outerStart; + const internal::variable_if_dynamic m_outerSize; +}; + //---------- /** \returns the \a outer -th column (resp. row) of the matrix \c *this if \c *this @@ -265,7 +391,8 @@ const typename SparseMatrixBase::ConstInnerVectorReturnType SparseMatri * is col-major (resp. row-major). */ template -Block SparseMatrixBase::innerVectors(Index outerStart, Index outerSize) +typename SparseMatrixBase::InnerVectorsReturnType +SparseMatrixBase::innerVectors(Index outerStart, Index outerSize) { return Block(derived(), IsRowMajor ? outerStart : 0, IsRowMajor ? 0 : outerStart, @@ -277,7 +404,8 @@ Block SparseMatrixBase::innerVectors(Inde * is col-major (resp. row-major). Read-only. */ template -const Block SparseMatrixBase::innerVectors(Index outerStart, Index outerSize) const +const typename SparseMatrixBase::ConstInnerVectorsReturnType +SparseMatrixBase::innerVectors(Index outerStart, Index outerSize) const { return Block(derived(), IsRowMajor ? outerStart : 0, IsRowMajor ? 0 : outerStart, @@ -304,8 +432,8 @@ public: : m_matrix(xpr), m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0), m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0), - m_blockRows(xpr.rows()), - m_blockCols(xpr.cols()) + m_blockRows(BlockRows==1 ? 1 : xpr.rows()), + m_blockCols(BlockCols==1 ? 1 : xpr.cols()) {} /** Dynamic-size constructor @@ -401,9 +529,11 @@ public: const internal::variable_if_dynamic m_startCol; const internal::variable_if_dynamic m_blockRows; const internal::variable_if_dynamic m_blockCols; - + private: + Index nonZeros() const; }; } // end namespace Eigen #endif // EIGEN_SPARSE_BLOCK_H + diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseColEtree.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseColEtree.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseColEtree.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseColEtree.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseCwiseBinaryOp.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseCwiseBinaryOp.h similarity index 95% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseCwiseBinaryOp.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseCwiseBinaryOp.h index ec86ca93..54627375 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseCwiseBinaryOp.h @@ -55,10 +55,9 @@ class CwiseBinaryOpImpl EIGEN_SPARSE_PUBLIC_INTERFACE(Derived) CwiseBinaryOpImpl() { - typedef typename internal::traits::StorageKind LhsStorageKind; - typedef typename internal::traits::StorageKind RhsStorageKind; EIGEN_STATIC_ASSERT(( - (!internal::is_same::value) + (!internal::is_same::StorageKind, + typename internal::traits::StorageKind>::value) || ((Lhs::Flags&RowMajorBit) == (Rhs::Flags&RowMajorBit))), THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH); } @@ -73,7 +72,8 @@ class CwiseBinaryOpImpl::InnerIterator typedef internal::sparse_cwise_binary_op_inner_iterator_selector< BinaryOp,Lhs,Rhs, InnerIterator> Base; - EIGEN_STRONG_INLINE InnerIterator(const CwiseBinaryOpImpl& binOp, Index outer) + // NOTE: we have to prefix Index by "typename Lhs::" to avoid an ICE with VC11 + EIGEN_STRONG_INLINE InnerIterator(const CwiseBinaryOpImpl& binOp, typename Lhs::Index outer) : Base(binOp.derived(),outer) {} }; @@ -313,10 +313,10 @@ SparseMatrixBase::operator+=(const SparseMatrixBase& othe template template -EIGEN_STRONG_INLINE const EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE +EIGEN_STRONG_INLINE const typename SparseMatrixBase::template CwiseProductDenseReturnType::Type SparseMatrixBase::cwiseProduct(const MatrixBase &other) const { - return EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE(derived(), other.derived()); + return typename CwiseProductDenseReturnType::Type(derived(), other.derived()); } } // end namespace Eigen diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseCwiseUnaryOp.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseCwiseUnaryOp.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseCwiseUnaryOp.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseCwiseUnaryOp.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDenseProduct.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDenseProduct.h similarity index 90% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDenseProduct.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDenseProduct.h index 54fd633a..ccb6ae7b 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDenseProduct.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDenseProduct.h @@ -19,7 +19,10 @@ template struct SparseDenseProductRet template struct SparseDenseProductReturnType { - typedef SparseDenseOuterProduct Type; + typedef typename internal::conditional< + Lhs::IsRowMajor, + SparseDenseOuterProduct, + SparseDenseOuterProduct >::type Type; }; template struct DenseSparseProductReturnType @@ -29,7 +32,10 @@ template struct DenseSparseProductRet template struct DenseSparseProductReturnType { - typedef SparseDenseOuterProduct Type; + typedef typename internal::conditional< + Rhs::IsRowMajor, + SparseDenseOuterProduct, + SparseDenseOuterProduct >::type Type; }; namespace internal { @@ -114,17 +120,30 @@ class SparseDenseOuterProduct::InnerIterator : public _LhsNes typedef typename SparseDenseOuterProduct::Index Index; public: EIGEN_STRONG_INLINE InnerIterator(const SparseDenseOuterProduct& prod, Index outer) - : Base(prod.lhs(), 0), m_outer(outer), m_factor(prod.rhs().coeff(outer)) - { - } + : Base(prod.lhs(), 0), m_outer(outer), m_factor(get(prod.rhs(), outer, typename internal::traits::StorageKind() )) + { } inline Index outer() const { return m_outer; } - inline Index row() const { return Transpose ? Base::row() : m_outer; } - inline Index col() const { return Transpose ? m_outer : Base::row(); } + inline Index row() const { return Transpose ? m_outer : Base::index(); } + inline Index col() const { return Transpose ? Base::index() : m_outer; } inline Scalar value() const { return Base::value() * m_factor; } protected: + static Scalar get(const _RhsNested &rhs, Index outer, Dense = Dense()) + { + return rhs.coeff(outer); + } + + static Scalar get(const _RhsNested &rhs, Index outer, Sparse = Sparse()) + { + typename Traits::_RhsNested::InnerIterator it(rhs, outer); + if (it && it.index()==0) + return it.value(); + + return Scalar(0); + } + Index m_outer; Scalar m_factor; }; @@ -161,7 +180,7 @@ struct sparse_time_dense_product_impl -template -inline const typename SparseDenseProductReturnType::Type -SparseMatrixBase::operator*(const MatrixBase &other) const -{ - return typename SparseDenseProductReturnType::Type(derived(), other.derived()); -} - } // end namespace Eigen #endif // EIGEN_SPARSEDENSEPRODUCT_H diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDiagonalProduct.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDiagonalProduct.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDiagonalProduct.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDiagonalProduct.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDot.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDot.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseDot.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseDot.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseFuzzy.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseFuzzy.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseFuzzy.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseFuzzy.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrix.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrix.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrix.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrix.h index 01ce0dcf..2ff20155 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrix.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrix.h @@ -691,7 +691,8 @@ class SparseMatrix m_data.swap(other.m_data); } - /** Sets *this to the identity matrix */ + /** Sets *this to the identity matrix. + * This function also turns the matrix into compressed mode, and drop any reserved memory. */ inline void setIdentity() { eigen_assert(rows() == cols() && "ONLY FOR SQUARED MATRICES"); @@ -699,6 +700,8 @@ class SparseMatrix Eigen::Map >(&this->m_data.index(0), rows()).setLinSpaced(0, rows()-1); Eigen::Map >(&this->m_data.value(0), rows()).setOnes(); Eigen::Map >(this->m_outerIndex, rows()+1).setLinSpaced(0, rows()); + std::free(m_innerNonZeros); + m_innerNonZeros = 0; } inline SparseMatrix& operator=(const SparseMatrix& other) { @@ -940,7 +943,7 @@ void set_from_triplets(const InputIterator& begin, const InputIterator& end, Spa enum { IsRowMajor = SparseMatrixType::IsRowMajor }; typedef typename SparseMatrixType::Scalar Scalar; typedef typename SparseMatrixType::Index Index; - SparseMatrix trMat(mat.rows(),mat.cols()); + SparseMatrix trMat(mat.rows(),mat.cols()); if(begin!=end) { @@ -1178,7 +1181,7 @@ EIGEN_DONT_INLINE typename SparseMatrix<_Scalar,_Options,_Index>::Scalar& Sparse size_t p = m_outerIndex[outer+1]; ++m_outerIndex[outer+1]; - float reallocRatio = 1; + double reallocRatio = 1; if (m_data.allocatedSize()<=m_data.size()) { // if there is no preallocated memory, let's reserve a minimum of 32 elements @@ -1190,13 +1193,13 @@ EIGEN_DONT_INLINE typename SparseMatrix<_Scalar,_Options,_Index>::Scalar& Sparse { // we need to reallocate the data, to reduce multiple reallocations // we use a smart resize algorithm based on the current filling ratio - // in addition, we use float to avoid integers overflows - float nnzEstimate = float(m_outerIndex[outer])*float(m_outerSize)/float(outer+1); - reallocRatio = (nnzEstimate-float(m_data.size()))/float(m_data.size()); + // in addition, we use double to avoid integers overflows + double nnzEstimate = double(m_outerIndex[outer])*double(m_outerSize)/double(outer+1); + reallocRatio = (nnzEstimate-double(m_data.size()))/double(m_data.size()); // furthermore we bound the realloc ratio to: // 1) reduce multiple minor realloc when the matrix is almost filled // 2) avoid to allocate too much memory when the matrix is almost empty - reallocRatio = (std::min)((std::max)(reallocRatio,1.5f),8.f); + reallocRatio = (std::min)((std::max)(reallocRatio,1.5),8.); } } m_data.resize(m_data.size()+1,reallocRatio); diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrixBase.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrixBase.h similarity index 90% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrixBase.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrixBase.h index bbcf7fb1..9341d9ad 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseMatrixBase.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseMatrixBase.h @@ -23,7 +23,14 @@ namespace Eigen { * This class can be extended with the help of the plugin mechanism described on the page * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_SPARSEMATRIXBASE_PLUGIN. */ -template class SparseMatrixBase : public EigenBase +template class SparseMatrixBase +#ifndef EIGEN_PARSED_BY_DOXYGEN + : public internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real, + EigenBase > +#else + : public EigenBase +#endif // not EIGEN_PARSED_BY_DOXYGEN { public: @@ -36,7 +43,6 @@ template class SparseMatrixBase : public EigenBase >::type PacketReturnType; typedef SparseMatrixBase StorageBaseType; - typedef EigenBase Base; template Derived& operator=(const EigenBase &other) @@ -132,6 +138,9 @@ template class SparseMatrixBase : public EigenBase inline Derived& derived() { return *static_cast(this); } inline Derived& const_cast_derived() const { return *static_cast(const_cast(this)); } + + typedef internal::special_scalar_op_base > Base; + using Base::operator*; #endif // not EIGEN_PARSED_BY_DOXYGEN #define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::SparseMatrixBase @@ -317,20 +326,18 @@ template class SparseMatrixBase : public EigenBase Derived& operator*=(const Scalar& other); Derived& operator/=(const Scalar& other); - #define EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE \ - CwiseBinaryOp< \ - internal::scalar_product_op< \ - typename internal::scalar_product_traits< \ - typename internal::traits::Scalar, \ - typename internal::traits::Scalar \ - >::ReturnType \ - >, \ - const Derived, \ - const OtherDerived \ - > + template struct CwiseProductDenseReturnType { + typedef CwiseBinaryOp::Scalar, + typename internal::traits::Scalar + >::ReturnType>, + const Derived, + const OtherDerived + > Type; + }; template - EIGEN_STRONG_INLINE const EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE + EIGEN_STRONG_INLINE const typename CwiseProductDenseReturnType::Type cwiseProduct(const MatrixBase &other) const; // sparse * sparse @@ -358,7 +365,8 @@ template class SparseMatrixBase : public EigenBase /** sparse * dense (returns a dense object unless it is an outer product) */ template const typename SparseDenseProductReturnType::Type - operator*(const MatrixBase &other) const; + operator*(const MatrixBase &other) const + { return typename SparseDenseProductReturnType::Type(derived(), other.derived()); } /** \returns an expression of P H P^-1 where H is the matrix represented by \c *this */ SparseSymmetricPermutationProduct twistedBy(const PermutationMatrix& perm) const @@ -403,8 +411,10 @@ template class SparseMatrixBase : public EigenBase const ConstInnerVectorReturnType innerVector(Index outer) const; // set of inner-vectors - Block innerVectors(Index outerStart, Index outerSize); - const Block innerVectors(Index outerStart, Index outerSize) const; + typedef Block InnerVectorsReturnType; + typedef Block ConstInnerVectorsReturnType; + InnerVectorsReturnType innerVectors(Index outerStart, Index outerSize); + const ConstInnerVectorsReturnType innerVectors(Index outerStart, Index outerSize) const; /** \internal use operator= */ template diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparsePermutation.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparsePermutation.h similarity index 98% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparsePermutation.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparsePermutation.h index b85be93f..75e21000 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparsePermutation.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparsePermutation.h @@ -61,7 +61,7 @@ struct permut_sparsematrix_product_retval for(Index j=0; j class TransposeImpl inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); } }; -// NOTE: VC10 trigger an ICE if don't put typename TransposeImpl:: in front of Index, +// NOTE: VC10 and VC11 trigger an ICE if don't put typename TransposeImpl:: in front of Index, // a typedef typename TransposeImpl::Index Index; // does not fix the issue. // An alternative is to define the nested class in the parent class itself. @@ -40,8 +40,8 @@ template class TransposeImpl::InnerItera EIGEN_STRONG_INLINE InnerIterator(const TransposeImpl& trans, typename TransposeImpl::Index outer) : Base(trans.derived().nestedExpression(), outer) {} - Index row() const { return Base::col(); } - Index col() const { return Base::row(); } + typename TransposeImpl::Index row() const { return Base::col(); } + typename TransposeImpl::Index col() const { return Base::row(); } }; template class TransposeImpl::ReverseInnerIterator @@ -54,8 +54,8 @@ template class TransposeImpl::ReverseInn EIGEN_STRONG_INLINE ReverseInnerIterator(const TransposeImpl& xpr, typename TransposeImpl::Index outer) : Base(xpr.derived().nestedExpression(), outer) {} - Index row() const { return Base::col(); } - Index col() const { return Base::row(); } + typename TransposeImpl::Index row() const { return Base::col(); } + typename TransposeImpl::Index col() const { return Base::row(); } }; } // end namespace Eigen diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseTriangularView.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseTriangularView.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseTriangularView.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseTriangularView.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseUtil.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseUtil.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseUtil.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseUtil.h index 05023858..d627546d 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseUtil.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseUtil.h @@ -67,7 +67,6 @@ const int InnerRandomAccessPattern = 0x2 | CoherentAccessPattern; const int OuterRandomAccessPattern = 0x4 | CoherentAccessPattern; const int RandomAccessPattern = 0x8 | OuterRandomAccessPattern | InnerRandomAccessPattern; -template class SparseMatrixBase; template class SparseMatrix; template class DynamicSparseMatrix; template class SparseVector; @@ -84,8 +83,10 @@ template class DenseTimeSparseProduct; template class SparseDenseOuterProduct; template struct SparseSparseProductReturnType; -template::ColsAtCompileTime> struct DenseSparseProductReturnType; -template::ColsAtCompileTime> struct SparseDenseProductReturnType; +template::ColsAtCompileTime,internal::traits::RowsAtCompileTime)> struct DenseSparseProductReturnType; +template::ColsAtCompileTime,internal::traits::RowsAtCompileTime)> struct SparseDenseProductReturnType; template class SparseSymmetricPermutationProduct; namespace internal { diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseVector.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseVector.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseVector.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseVector.h index 7e15c814..49865d0e 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseVector.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseVector.h @@ -158,6 +158,7 @@ class SparseVector Index inner = IsColVector ? row : col; Index outer = IsColVector ? col : row; + EIGEN_ONLY_USED_FOR_DEBUG(outer); eigen_assert(outer==0); return insert(inner); } diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseView.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseView.h similarity index 91% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/SparseView.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/SparseView.h index fd845046..2820b39b 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/SparseView.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/SparseView.h @@ -35,9 +35,9 @@ class SparseView : public SparseMatrixBase > public: EIGEN_SPARSE_PUBLIC_INTERFACE(SparseView) - SparseView(const MatrixType& mat, const Scalar& m_reference = Scalar(0), - typename NumTraits::Real m_epsilon = NumTraits::dummy_precision()) : - m_matrix(mat), m_reference(m_reference), m_epsilon(m_epsilon) {} + explicit SparseView(const MatrixType& mat, const Scalar& reference = Scalar(0), + const RealScalar &epsilon = NumTraits::dummy_precision()) + : m_matrix(mat), m_reference(reference), m_epsilon(epsilon) {} class InnerIterator; diff --git a/deps/eigen-3.2.1/Eigen/src/SparseCore/TriangularSolver.h b/deps/eigen-3.2.8/Eigen/src/SparseCore/TriangularSolver.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/SparseCore/TriangularSolver.h rename to deps/eigen-3.2.8/Eigen/src/SparseCore/TriangularSolver.h index cb8ad82b..ccc12af7 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseCore/TriangularSolver.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseCore/TriangularSolver.h @@ -69,7 +69,7 @@ struct sparse_solve_triangular_selector for(int i=lhs.rows()-1 ; i>=0 ; --i) { Scalar tmp = other.coeff(i,col); - Scalar l_ii = 0; + Scalar l_ii(0); typename Lhs::InnerIterator it(lhs, i); while(it && it.index()cols(); ++j) { for (typename SCMatrix::InnerIterator it(m_Lstore, j); it; ++it) { - if(it.row() < j) continue; - if(it.row() == j) + if(it.index() == j) { - det *= (std::abs)(it.value()); + using std::abs; + det *= abs(it.value()); break; } } @@ -296,7 +296,8 @@ class SparseLU : public internal::SparseLUImplcols(); ++j) + { + for (typename SCMatrix::InnerIterator it(m_Lstore, j); it; ++it) + { + if(it.index() == j) + { + if(it.value()<0) + det = -det; + else if(it.value()==0) + return 0; + break; + } + } + } + return det * m_detPermR * m_detPermC; + } + + /** \returns The determinant of the matrix. + * + * \sa absDeterminant(), logAbsDeterminant() + */ + Scalar determinant() + { + eigen_assert(m_factorizationIsOk && "The matrix should be factorized first."); + // Initialize with the determinant of the row matrix + Scalar det = Scalar(1.); + // Note that the diagonal blocks of U are stored in supernodes, + // which are available in the L part :) + for (Index j = 0; j < this->cols(); ++j) + { + for (typename SCMatrix::InnerIterator it(m_Lstore, j); it; ++it) + { + if(it.index() == j) + { + det *= it.value(); + break; + } + } + } + return det * Scalar(m_detPermR * m_detPermC); + } protected: // Functions void initperfvalues() { - m_perfv.panel_size = 1; + m_perfv.panel_size = 16; m_perfv.relax = 1; m_perfv.maxsuper = 128; m_perfv.rowblk = 16; @@ -346,8 +390,8 @@ class SparseLU : public internal::SparseLUImpl m_perfv; RealScalar m_diagpivotthresh; // Specifies the threshold used for a diagonal entry to be an acceptable pivot - Index m_nnzL, m_nnzU; // Nonzeros in L and U factors - Index m_detPermR; // Determinant of the coefficient matrix + Index m_nnzL, m_nnzU; // Nonzeros in L and U factors + Index m_detPermR, m_detPermC; // Determinants of the permutation matrices private: // Disable copy constructor SparseLU (const SparseLU& ); @@ -623,7 +667,8 @@ void SparseLU::factorize(const MatrixType& matrix) } // Update the determinant of the row permutation matrix - if (pivrow != jj) m_detPermR *= -1; + // FIXME: the following test is not correct, we should probably take iperm_c into account and pivrow is not directly the row pivot. + if (pivrow != jj) m_detPermR = -m_detPermR; // Prune columns (0:jj-1) using column jj Base::pruneL(jj, m_perm_r.indices(), pivrow, nseg, segrep, repfnz_k, xprune, m_glu); @@ -638,10 +683,13 @@ void SparseLU::factorize(const MatrixType& matrix) jcol += panel_size; // Move to the next panel } // end for -- end elimination + m_detPermR = m_perm_r.determinant(); + m_detPermC = m_perm_c.determinant(); + // Count the number of nonzeros in factors Base::countnz(n, m_nnzL, m_nnzU, m_glu); // Apply permutation to the L subscripts - Base::fixupL(n, m_perm_r.indices(), m_glu); + Base::fixupL(n, m_perm_r.indices(), m_glu); // Create supernode matrix L m_Lstore.setInfos(m, n, m_glu.lusup, m_glu.xlusup, m_glu.lsub, m_glu.xlsub, m_glu.supno, m_glu.xsup); @@ -701,8 +749,8 @@ struct SparseLUMatrixUReturnType : internal::no_assignment_operator } else { - Map, 0, OuterStride<> > A( &(m_mapL.valuePtr()[luptr]), nsupc, nsupc, OuterStride<>(lda) ); - Map< Matrix, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) ); + Map, 0, OuterStride<> > A( &(m_mapL.valuePtr()[luptr]), nsupc, nsupc, OuterStride<>(lda) ); + Map< Matrix, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) ); U = A.template triangularView().solve(U); } diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLUImpl.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLUImpl.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLUImpl.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLUImpl.h index 14d70897..99d651e4 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLUImpl.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLUImpl.h @@ -21,6 +21,8 @@ class SparseLUImpl { public: typedef Matrix ScalarVector; + typedef Matrix ScalarMatrix; + typedef Map > MappedMatrixBlock; typedef Matrix IndexVector; typedef typename ScalarVector::RealScalar RealScalar; typedef Ref > BlockScalarVector; diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Memory.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Memory.h similarity index 97% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Memory.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Memory.h index 1ffa7d54..45f96d16 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Memory.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Memory.h @@ -153,8 +153,8 @@ Index SparseLUImpl::memInit(Index m, Index n, Index annz, Index lw { Index& num_expansions = glu.num_expansions; //No memory expansions so far num_expansions = 0; - glu.nzumax = glu.nzlumax = (std::min)(fillratio * annz / n, m) * n; // estimated number of nonzeros in U - glu.nzlmax = (std::max)(Index(4), fillratio) * annz / 4; // estimated nnz in L factor + glu.nzumax = glu.nzlumax = (std::min)(fillratio * (annz+1) / n, m) * n; // estimated number of nonzeros in U + glu.nzlmax = (std::max)(Index(4), fillratio) * (annz+1) / 4; // estimated nnz in L factor // Return the estimated size to the user if necessary Index tempSpace; tempSpace = (2*panel_size + 4 + LUNoMarker) * m * sizeof(Index) + (panel_size + 1) * m * sizeof(Scalar); diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Structs.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Structs.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Structs.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Structs.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h index ad6f2183..54a56940 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h @@ -189,8 +189,8 @@ class MappedSuperNodalMatrix::InnerIterator m_idval(mat.colIndexPtr()[outer]), m_startidval(m_idval), m_endidval(mat.colIndexPtr()[outer+1]), - m_idrow(mat.rowIndexPtr()[outer]), - m_endidrow(mat.rowIndexPtr()[outer+1]) + m_idrow(mat.rowIndexPtr()[mat.supToCol()[mat.colToSup()[outer]]]), + m_endidrow(mat.rowIndexPtr()[mat.supToCol()[mat.colToSup()[outer]]+1]) {} inline InnerIterator& operator++() { @@ -236,7 +236,7 @@ void MappedSuperNodalMatrix::solveInPlace( MatrixBase&X) con Index n = X.rows(); Index nrhs = X.cols(); const Scalar * Lval = valuePtr(); // Nonzero values - Matrix work(n, nrhs); // working vector + Matrix work(n, nrhs); // working vector work.setZero(); for (Index k = 0; k <= nsuper(); k ++) { @@ -267,12 +267,12 @@ void MappedSuperNodalMatrix::solveInPlace( MatrixBase&X) con Index lda = colIndexPtr()[fsupc+1] - luptr; // Triangular solve - Map, 0, OuterStride<> > A( &(Lval[luptr]), nsupc, nsupc, OuterStride<>(lda) ); - Map< Matrix, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) ); + Map, 0, OuterStride<> > A( &(Lval[luptr]), nsupc, nsupc, OuterStride<>(lda) ); + Map< Matrix, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) ); U = A.template triangularView().solve(U); // Matrix-vector product - new (&A) Map, 0, OuterStride<> > ( &(Lval[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) ); + new (&A) Map, 0, OuterStride<> > ( &(Lval[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) ); work.block(0, 0, nrow, nrhs) = A * U; //Begin Scatter diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Utils.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Utils.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_Utils.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_Utils.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_column_bmod.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_column_bmod.h similarity index 96% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_column_bmod.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_column_bmod.h index f24bd87d..cacc7e98 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_column_bmod.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_column_bmod.h @@ -162,11 +162,11 @@ Index SparseLUImpl::column_bmod(const Index jcol, const Index nseg // points to the beginning of jcol in snode L\U(jsupno) ufirst = glu.xlusup(jcol) + d_fsupc; Index lda = glu.xlusup(jcol+1) - glu.xlusup(jcol); - Map, 0, OuterStride<> > A( &(glu.lusup.data()[luptr]), nsupc, nsupc, OuterStride<>(lda) ); + MappedMatrixBlock A( &(glu.lusup.data()[luptr]), nsupc, nsupc, OuterStride<>(lda) ); VectorBlock u(glu.lusup, ufirst, nsupc); u = A.template triangularView().solve(u); - new (&A) Map, 0, OuterStride<> > ( &(glu.lusup.data()[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) ); + new (&A) MappedMatrixBlock ( &(glu.lusup.data()[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) ); VectorBlock l(glu.lusup, ufirst+nsupc, nrow); l.noalias() -= A * u; diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_column_dfs.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_column_dfs.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_column_dfs.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_column_dfs.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_gemm_kernel.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_gemm_kernel.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_gemm_kernel.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_gemm_kernel.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_kernel_bmod.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_kernel_bmod.h similarity index 94% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_kernel_bmod.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_kernel_bmod.h index 0d0283b1..6af02675 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_kernel_bmod.h @@ -56,7 +56,7 @@ EIGEN_DONT_INLINE void LU_kernel_bmod::run(const int segsi // Dense triangular solve -- start effective triangle luptr += lda * no_zeros + no_zeros; // Form Eigen matrix and vector - Map, 0, OuterStride<> > A( &(lusup.data()[luptr]), segsize, segsize, OuterStride<>(lda) ); + Map, 0, OuterStride<> > A( &(lusup.data()[luptr]), segsize, segsize, OuterStride<>(lda) ); Map > u(tempv.data(), segsize); u = A.template triangularView().solve(u); @@ -65,7 +65,7 @@ EIGEN_DONT_INLINE void LU_kernel_bmod::run(const int segsi luptr += segsize; const Index PacketSize = internal::packet_traits::size; Index ldl = internal::first_multiple(nrow, PacketSize); - Map, 0, OuterStride<> > B( &(lusup.data()[luptr]), nrow, segsize, OuterStride<>(lda) ); + Map, 0, OuterStride<> > B( &(lusup.data()[luptr]), nrow, segsize, OuterStride<>(lda) ); Index aligned_offset = internal::first_aligned(tempv.data()+segsize, PacketSize); Index aligned_with_B_offset = (PacketSize-internal::first_aligned(B.data(), PacketSize))%PacketSize; Map, 0, OuterStride<> > l(tempv.data()+segsize+aligned_offset+aligned_with_B_offset, nrow, OuterStride<>(ldl) ); diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_panel_bmod.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_panel_bmod.h similarity index 94% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_panel_bmod.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_panel_bmod.h index da0e0fc3..9d2ff290 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_panel_bmod.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_panel_bmod.h @@ -102,7 +102,7 @@ void SparseLUImpl::panel_bmod(const Index m, const Index w, const if(nsupc >= 2) { Index ldu = internal::first_multiple(u_rows, PacketSize); - Map, Aligned, OuterStride<> > U(tempv.data(), u_rows, u_cols, OuterStride<>(ldu)); + Map > U(tempv.data(), u_rows, u_cols, OuterStride<>(ldu)); // gather U Index u_col = 0; @@ -136,17 +136,17 @@ void SparseLUImpl::panel_bmod(const Index m, const Index w, const Index lda = glu.xlusup(fsupc+1) - glu.xlusup(fsupc); no_zeros = (krep - u_rows + 1) - fsupc; luptr += lda * no_zeros + no_zeros; - Map, 0, OuterStride<> > A(glu.lusup.data()+luptr, u_rows, u_rows, OuterStride<>(lda) ); + MappedMatrixBlock A(glu.lusup.data()+luptr, u_rows, u_rows, OuterStride<>(lda) ); U = A.template triangularView().solve(U); // update luptr += u_rows; - Map, 0, OuterStride<> > B(glu.lusup.data()+luptr, nrow, u_rows, OuterStride<>(lda) ); + MappedMatrixBlock B(glu.lusup.data()+luptr, nrow, u_rows, OuterStride<>(lda) ); eigen_assert(tempv.size()>w*ldu + nrow*w + 1); Index ldl = internal::first_multiple(nrow, PacketSize); Index offset = (PacketSize-internal::first_aligned(B.data(), PacketSize)) % PacketSize; - Map, 0, OuterStride<> > L(tempv.data()+w*ldu+offset, nrow, u_cols, OuterStride<>(ldl)); + MappedMatrixBlock L(tempv.data()+w*ldu+offset, nrow, u_cols, OuterStride<>(ldl)); L.setZero(); internal::sparselu_gemm(L.rows(), L.cols(), B.cols(), B.data(), B.outerStride(), U.data(), U.outerStride(), L.data(), L.outerStride()); diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_panel_dfs.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_panel_dfs.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_panel_dfs.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_panel_dfs.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_pivotL.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_pivotL.h similarity index 93% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_pivotL.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_pivotL.h index ddcd4ec9..2e49ef66 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_pivotL.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_pivotL.h @@ -71,13 +71,14 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScalar& dia // Determine the largest abs numerical value for partial pivoting Index diagind = iperm_c(jcol); // diagonal index - RealScalar pivmax = 0.0; + RealScalar pivmax(-1.0); Index pivptr = nsupc; Index diag = emptyIdxLU; RealScalar rtemp; Index isub, icol, itemp, k; for (isub = nsupc; isub < nsupr; ++isub) { - rtemp = std::abs(lu_col_ptr[isub]); + using std::abs; + rtemp = abs(lu_col_ptr[isub]); if (rtemp > pivmax) { pivmax = rtemp; pivptr = isub; @@ -86,8 +87,9 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScalar& dia } // Test for singularity - if ( pivmax == 0.0 ) { - pivrow = lsub_ptr[pivptr]; + if ( pivmax <= RealScalar(0.0) ) { + // if pivmax == -1, the column is structurally empty, otherwise it is only numerically zero + pivrow = pivmax < RealScalar(0.0) ? diagind : lsub_ptr[pivptr]; perm_r(pivrow) = jcol; return (jcol+1); } @@ -101,7 +103,8 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScalar& dia if (diag >= 0 ) { // Diagonal element exists - rtemp = std::abs(lu_col_ptr[diag]); + using std::abs; + rtemp = abs(lu_col_ptr[diag]); if (rtemp != 0.0 && rtemp >= thresh) pivptr = diag; } pivrow = lsub_ptr[pivptr]; diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_pruneL.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_pruneL.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_pruneL.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_pruneL.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_relax_snode.h b/deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_relax_snode.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseLU/SparseLU_relax_snode.h rename to deps/eigen-3.2.8/Eigen/src/SparseLU/SparseLU_relax_snode.h diff --git a/deps/eigen-3.2.1/Eigen/src/SparseQR/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SparseQR/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SparseQR/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SparseQR/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SparseQR/SparseQR.h b/deps/eigen-3.2.8/Eigen/src/SparseQR/SparseQR.h similarity index 80% rename from deps/eigen-3.2.1/Eigen/src/SparseQR/SparseQR.h rename to deps/eigen-3.2.8/Eigen/src/SparseQR/SparseQR.h index afda43bf..a00bd5db 100644 --- a/deps/eigen-3.2.1/Eigen/src/SparseQR/SparseQR.h +++ b/deps/eigen-3.2.8/Eigen/src/SparseQR/SparseQR.h @@ -2,7 +2,7 @@ // for linear algebra. // // Copyright (C) 2012-2013 Desire Nuentsa -// Copyright (C) 2012-2013 Gael Guennebaud +// Copyright (C) 2012-2014 Gael Guennebaud // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed @@ -58,6 +58,7 @@ namespace internal { * \tparam _OrderingType The fill-reducing ordering method. See the \link OrderingMethods_Module * OrderingMethods \endlink module for the list of built-in and external ordering methods. * + * \warning The input sparse matrix A must be in compressed mode (see SparseMatrix::makeCompressed()). * */ template @@ -74,13 +75,26 @@ class SparseQR typedef Matrix ScalarVector; typedef PermutationMatrix PermutationType; public: - SparseQR () : m_isInitialized(false), m_analysisIsok(false), m_lastError(""), m_useDefaultThreshold(true),m_isQSorted(false) + SparseQR () : m_isInitialized(false), m_analysisIsok(false), m_lastError(""), m_useDefaultThreshold(true),m_isQSorted(false),m_isEtreeOk(false) { } - SparseQR(const MatrixType& mat) : m_isInitialized(false), m_analysisIsok(false), m_lastError(""), m_useDefaultThreshold(true),m_isQSorted(false) + /** Construct a QR factorization of the matrix \a mat. + * + * \warning The matrix \a mat must be in compressed mode (see SparseMatrix::makeCompressed()). + * + * \sa compute() + */ + SparseQR(const MatrixType& mat) : m_isInitialized(false), m_analysisIsok(false), m_lastError(""), m_useDefaultThreshold(true),m_isQSorted(false),m_isEtreeOk(false) { compute(mat); } + + /** Computes the QR factorization of the sparse matrix \a mat. + * + * \warning The matrix \a mat must be in compressed mode (see SparseMatrix::makeCompressed()). + * + * \sa analyzePattern(), factorize() + */ void compute(const MatrixType& mat) { analyzePattern(mat); @@ -166,7 +180,7 @@ class SparseQR y.bottomRows(y.rows()-rank).setZero(); // Apply the column permutation - if (m_perm_c.size()) dest.topRows(cols()) = colsPermutation() * y.topRows(cols()); + if (m_perm_c.size()) dest = colsPermutation() * y.topRows(cols()); else dest = y.topRows(cols()); m_info = Success; @@ -206,7 +220,7 @@ class SparseQR /** \brief Reports whether previous computation was successful. * - * \returns \c Success if computation was succesful, + * \returns \c Success if computation was successful, * \c NumericalIssue if the QR factorization reports a numerical problem * \c InvalidInput if the input matrix is invalid * @@ -248,6 +262,7 @@ class SparseQR IndexVector m_etree; // Column elimination tree IndexVector m_firstRowElt; // First element in each row bool m_isQSorted; // whether Q is sorted or not + bool m_isEtreeOk; // whether the elimination tree match the initial input matrix template friend struct SparseQR_QProduct; template friend struct SparseQRMatrixQReturnType; @@ -255,20 +270,26 @@ class SparseQR }; /** \brief Preprocessing step of a QR factorization + * + * \warning The matrix \a mat must be in compressed mode (see SparseMatrix::makeCompressed()). * * In this step, the fill-reducing permutation is computed and applied to the columns of A - * and the column elimination tree is computed as well. Only the sparcity pattern of \a mat is exploited. + * and the column elimination tree is computed as well. Only the sparsity pattern of \a mat is exploited. * * \note In this step it is assumed that there is no empty row in the matrix \a mat. */ template void SparseQR::analyzePattern(const MatrixType& mat) { + eigen_assert(mat.isCompressed() && "SparseQR requires a sparse matrix in compressed mode. Call .makeCompressed() before passing it to SparseQR"); + // Copy to a column major matrix if the input is rowmajor + typename internal::conditional::type matCpy(mat); // Compute the column fill reducing ordering OrderingType ord; - ord(mat, m_perm_c); + ord(matCpy, m_perm_c); Index n = mat.cols(); Index m = mat.rows(); + Index diagSize = (std::min)(m,n); if (!m_perm_c.size()) { @@ -278,22 +299,23 @@ void SparseQR::analyzePattern(const MatrixType& mat) // Compute the column elimination tree of the permuted matrix m_outputPerm_c = m_perm_c.inverse(); - internal::coletree(mat, m_etree, m_firstRowElt, m_outputPerm_c.indices().data()); + internal::coletree(matCpy, m_etree, m_firstRowElt, m_outputPerm_c.indices().data()); + m_isEtreeOk = true; - m_R.resize(n, n); - m_Q.resize(m, n); + m_R.resize(m, n); + m_Q.resize(m, diagSize); // Allocate space for nonzero elements : rough estimation m_R.reserve(2*mat.nonZeros()); //FIXME Get a more accurate estimation through symbolic factorization with the etree m_Q.reserve(2*mat.nonZeros()); - m_hcoeffs.resize(n); + m_hcoeffs.resize(diagSize); m_analysisIsok = true; } /** \brief Performs the numerical QR factorization of the input matrix * * The function SparseQR::analyzePattern(const MatrixType&) must have been called beforehand with - * a matrix having the same sparcity pattern than \a mat. + * a matrix having the same sparsity pattern than \a mat. * * \param mat The sparse column-major matrix */ @@ -306,23 +328,47 @@ void SparseQR::factorize(const MatrixType& mat) eigen_assert(m_analysisIsok && "analyzePattern() should be called before this step"); Index m = mat.rows(); Index n = mat.cols(); - IndexVector mark(m); mark.setConstant(-1); // Record the visited nodes - IndexVector Ridx(n), Qidx(m); // Store temporarily the row indexes for the current column of R and Q - Index nzcolR, nzcolQ; // Number of nonzero for the current column of R and Q - ScalarVector tval(m); // The dense vector used to compute the current column - bool found_diag; - + Index diagSize = (std::min)(m,n); + IndexVector mark((std::max)(m,n)); mark.setConstant(-1); // Record the visited nodes + IndexVector Ridx(n), Qidx(m); // Store temporarily the row indexes for the current column of R and Q + Index nzcolR, nzcolQ; // Number of nonzero for the current column of R and Q + ScalarVector tval(m); // The dense vector used to compute the current column + RealScalar pivotThreshold = m_threshold; + + m_R.setZero(); + m_Q.setZero(); m_pmat = mat; - m_pmat.uncompress(); // To have the innerNonZeroPtr allocated - // Apply the fill-in reducing permutation lazily: - for (int i = 0; i < n; i++) + if(!m_isEtreeOk) { - Index p = m_perm_c.size() ? m_perm_c.indices()(i) : i; - m_pmat.outerIndexPtr()[p] = mat.outerIndexPtr()[i]; - m_pmat.innerNonZeroPtr()[p] = mat.outerIndexPtr()[i+1] - mat.outerIndexPtr()[i]; + m_outputPerm_c = m_perm_c.inverse(); + internal::coletree(m_pmat, m_etree, m_firstRowElt, m_outputPerm_c.indices().data()); + m_isEtreeOk = true; + } + + m_pmat.uncompress(); // To have the innerNonZeroPtr allocated + + // Apply the fill-in reducing permutation lazily: + { + // If the input is row major, copy the original column indices, + // otherwise directly use the input matrix + // + IndexVector originalOuterIndicesCpy; + const Index *originalOuterIndices = mat.outerIndexPtr(); + if(MatrixType::IsRowMajor) + { + originalOuterIndicesCpy = IndexVector::Map(m_pmat.outerIndexPtr(),n+1); + originalOuterIndices = originalOuterIndicesCpy.data(); + } + + for (int i = 0; i < n; i++) + { + Index p = m_perm_c.size() ? m_perm_c.indices()(i) : i; + m_pmat.outerIndexPtr()[p] = originalOuterIndices[i]; + m_pmat.innerNonZeroPtr()[p] = originalOuterIndices[i+1] - originalOuterIndices[i]; + } } - /* Compute the default threshold, see : + /* Compute the default threshold as in MatLab, see: * Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing * Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011, Page 8:3 */ @@ -330,33 +376,35 @@ void SparseQR::factorize(const MatrixType& mat) { RealScalar max2Norm = 0.0; for (int j = 0; j < n; j++) max2Norm = (max)(max2Norm, m_pmat.col(j).norm()); - m_threshold = 20 * (m + n) * max2Norm * NumTraits::epsilon(); + if(max2Norm==RealScalar(0)) + max2Norm = RealScalar(1); + pivotThreshold = 20 * (m + n) * max2Norm * NumTraits::epsilon(); } // Initialize the numerical permutation m_pivotperm.setIdentity(n); Index nonzeroCol = 0; // Record the number of valid pivots - + m_Q.startVec(0); + // Left looking rank-revealing QR factorization: compute a column of R and Q at a time - for (Index col = 0; col < (std::min)(n,m); ++col) + for (Index col = 0; col < n; ++col) { mark.setConstant(-1); m_R.startVec(col); - m_Q.startVec(col); mark(nonzeroCol) = col; Qidx(0) = nonzeroCol; nzcolR = 0; nzcolQ = 1; - found_diag = col>=m; + bool found_diag = nonzeroCol>=m; tval.setZero(); // Symbolic factorization: find the nonzero locations of the column k of the factors R and Q, i.e., // all the nodes (with indexes lower than rank) reachable through the column elimination tree (etree) rooted at node k. // Note: if the diagonal entry does not exist, then its contribution must be explicitly added, // thus the trick with found_diag that permits to do one more iteration on the diagonal element if this one has not been found. - for (typename MatrixType::InnerIterator itp(m_pmat, col); itp || !found_diag; ++itp) + for (typename QRMatrixType::InnerIterator itp(m_pmat, col); itp || !found_diag; ++itp) { - Index curIdx = nonzeroCol ; + Index curIdx = nonzeroCol; if(itp) curIdx = itp.row(); if(curIdx == nonzeroCol) found_diag = true; @@ -398,7 +446,7 @@ void SparseQR::factorize(const MatrixType& mat) // Browse all the indexes of R(:,col) in reverse order for (Index i = nzcolR-1; i >= 0; i--) { - Index curIdx = m_pivotperm.indices()(Ridx(i)); + Index curIdx = Ridx(i); // Apply the curIdx-th householder vector to the current column (temporarily stored into tval) Scalar tdot(0); @@ -427,33 +475,36 @@ void SparseQR::factorize(const MatrixType& mat) } } } // End update current column - - // Compute the Householder reflection that eliminate the current column - // FIXME this step should call the Householder module. - Scalar tau; - RealScalar beta; - Scalar c0 = nzcolQ ? tval(Qidx(0)) : Scalar(0); - // First, the squared norm of Q((col+1):m, col) - RealScalar sqrNorm = 0.; - for (Index itq = 1; itq < nzcolQ; ++itq) sqrNorm += numext::abs2(tval(Qidx(itq))); + Scalar tau = 0; + RealScalar beta = 0; - if(sqrNorm == RealScalar(0) && numext::imag(c0) == RealScalar(0)) + if(nonzeroCol < diagSize) { - tau = RealScalar(0); - beta = numext::real(c0); - tval(Qidx(0)) = 1; - } - else - { - beta = std::sqrt(numext::abs2(c0) + sqrNorm); - if(numext::real(c0) >= RealScalar(0)) - beta = -beta; - tval(Qidx(0)) = 1; - for (Index itq = 1; itq < nzcolQ; ++itq) - tval(Qidx(itq)) /= (c0 - beta); - tau = numext::conj((beta-c0) / beta); - + // Compute the Householder reflection that eliminate the current column + // FIXME this step should call the Householder module. + Scalar c0 = nzcolQ ? tval(Qidx(0)) : Scalar(0); + + // First, the squared norm of Q((col+1):m, col) + RealScalar sqrNorm = 0.; + for (Index itq = 1; itq < nzcolQ; ++itq) sqrNorm += numext::abs2(tval(Qidx(itq))); + if(sqrNorm == RealScalar(0) && numext::imag(c0) == RealScalar(0)) + { + beta = numext::real(c0); + tval(Qidx(0)) = 1; + } + else + { + using std::sqrt; + beta = sqrt(numext::abs2(c0) + sqrNorm); + if(numext::real(c0) >= RealScalar(0)) + beta = -beta; + tval(Qidx(0)) = 1; + for (Index itq = 1; itq < nzcolQ; ++itq) + tval(Qidx(itq)) /= (c0 - beta); + tau = numext::conj((beta-c0) / beta); + + } } // Insert values in R @@ -467,45 +518,49 @@ void SparseQR::factorize(const MatrixType& mat) } } - if(abs(beta) >= m_threshold) + if(nonzeroCol < diagSize && abs(beta) >= pivotThreshold) { m_R.insertBackByOuterInner(col, nonzeroCol) = beta; - nonzeroCol++; // The householder coefficient - m_hcoeffs(col) = tau; + m_hcoeffs(nonzeroCol) = tau; // Record the householder reflections for (Index itq = 0; itq < nzcolQ; ++itq) { Index iQ = Qidx(itq); - m_Q.insertBackByOuterInnerUnordered(col,iQ) = tval(iQ); + m_Q.insertBackByOuterInnerUnordered(nonzeroCol,iQ) = tval(iQ); tval(iQ) = Scalar(0.); - } + } + nonzeroCol++; + if(nonzeroCol void evalTo(DesType& res) const { + Index m = m_qr.rows(); Index n = m_qr.cols(); + Index diagSize = (std::min)(m,n); res = m_other; if (m_transpose) { eigen_assert(m_qr.m_Q.rows() == m_other.rows() && "Non conforming object sizes"); //Compute res = Q' * other column by column for(Index j = 0; j < res.cols(); j++){ - for (Index k = 0; k < n; k++) + for (Index k = 0; k < diagSize; k++) { Scalar tau = Scalar(0); tau = m_qr.m_Q.col(k).dot(res.col(j)); @@ -581,10 +638,10 @@ struct SparseQR_QProduct : ReturnByValue=0; k--) + for (Index k = diagSize-1; k >=0; k--) { Scalar tau = Scalar(0); tau = m_qr.m_Q.col(k).dot(res.col(j)); @@ -618,7 +675,7 @@ struct SparseQRMatrixQReturnType : public EigenBase(m_qr); } inline Index rows() const { return m_qr.rows(); } - inline Index cols() const { return m_qr.cols(); } + inline Index cols() const { return (std::min)(m_qr.rows(),m_qr.cols()); } // To use for operations with the transpose of Q SparseQRMatrixQTransposeReturnType transpose() const { diff --git a/deps/eigen-3.2.1/Eigen/src/StlSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/StlSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/StlSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/StlSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdDeque.h b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdDeque.h similarity index 87% rename from deps/eigen-3.2.1/Eigen/src/StlSupport/StdDeque.h rename to deps/eigen-3.2.8/Eigen/src/StlSupport/StdDeque.h index 4ee8e5c1..69a46b2b 100644 --- a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdDeque.h +++ b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdDeque.h @@ -11,14 +11,7 @@ #ifndef EIGEN_STDDEQUE_H #define EIGEN_STDDEQUE_H -#include "Eigen/src/StlSupport/details.h" - -// Define the explicit instantiation (e.g. necessary for the Intel compiler) -#if defined(__INTEL_COMPILER) || defined(__GNUC__) - #define EIGEN_EXPLICIT_STL_DEQUE_INSTANTIATION(...) template class std::deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> >; -#else - #define EIGEN_EXPLICIT_STL_DEQUE_INSTANTIATION(...) -#endif +#include "details.h" /** * This section contains a convenience MACRO which allows an easy specialization of @@ -26,19 +19,18 @@ * is used automatically. */ #define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) \ -EIGEN_EXPLICIT_STL_DEQUE_INSTANTIATION(__VA_ARGS__) \ namespace std \ { \ - template \ - class deque<__VA_ARGS__, _Ay> \ + template<> \ + class deque<__VA_ARGS__, std::allocator<__VA_ARGS__> > \ : public deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > \ { \ typedef deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > deque_base; \ public: \ typedef __VA_ARGS__ value_type; \ - typedef typename deque_base::allocator_type allocator_type; \ - typedef typename deque_base::size_type size_type; \ - typedef typename deque_base::iterator iterator; \ + typedef deque_base::allocator_type allocator_type; \ + typedef deque_base::size_type size_type; \ + typedef deque_base::iterator iterator; \ explicit deque(const allocator_type& a = allocator_type()) : deque_base(a) {} \ template \ deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : deque_base(first, last, a) {} \ diff --git a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdList.h b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdList.h similarity index 85% rename from deps/eigen-3.2.1/Eigen/src/StlSupport/StdList.h rename to deps/eigen-3.2.8/Eigen/src/StlSupport/StdList.h index 627381ec..050c2373 100644 --- a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdList.h +++ b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdList.h @@ -10,14 +10,7 @@ #ifndef EIGEN_STDLIST_H #define EIGEN_STDLIST_H -#include "Eigen/src/StlSupport/details.h" - -// Define the explicit instantiation (e.g. necessary for the Intel compiler) -#if defined(__INTEL_COMPILER) || defined(__GNUC__) - #define EIGEN_EXPLICIT_STL_LIST_INSTANTIATION(...) template class std::list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> >; -#else - #define EIGEN_EXPLICIT_STL_LIST_INSTANTIATION(...) -#endif +#include "details.h" /** * This section contains a convenience MACRO which allows an easy specialization of @@ -25,19 +18,18 @@ * is used automatically. */ #define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) \ -EIGEN_EXPLICIT_STL_LIST_INSTANTIATION(__VA_ARGS__) \ namespace std \ { \ - template \ - class list<__VA_ARGS__, _Ay> \ + template<> \ + class list<__VA_ARGS__, std::allocator<__VA_ARGS__> > \ : public list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > \ { \ typedef list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > list_base; \ public: \ typedef __VA_ARGS__ value_type; \ - typedef typename list_base::allocator_type allocator_type; \ - typedef typename list_base::size_type size_type; \ - typedef typename list_base::iterator iterator; \ + typedef list_base::allocator_type allocator_type; \ + typedef list_base::size_type size_type; \ + typedef list_base::iterator iterator; \ explicit list(const allocator_type& a = allocator_type()) : list_base(a) {} \ template \ list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : list_base(first, last, a) {} \ diff --git a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdVector.h b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdVector.h similarity index 99% rename from deps/eigen-3.2.1/Eigen/src/StlSupport/StdVector.h rename to deps/eigen-3.2.8/Eigen/src/StlSupport/StdVector.h index 40a9abef..611664a2 100644 --- a/deps/eigen-3.2.1/Eigen/src/StlSupport/StdVector.h +++ b/deps/eigen-3.2.8/Eigen/src/StlSupport/StdVector.h @@ -11,7 +11,7 @@ #ifndef EIGEN_STDVECTOR_H #define EIGEN_STDVECTOR_H -#include "Eigen/src/StlSupport/details.h" +#include "details.h" /** * This section contains a convenience MACRO which allows an easy specialization of diff --git a/deps/eigen-3.2.1/Eigen/src/StlSupport/details.h b/deps/eigen-3.2.8/Eigen/src/StlSupport/details.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/StlSupport/details.h rename to deps/eigen-3.2.8/Eigen/src/StlSupport/details.h diff --git a/deps/eigen-3.2.1/Eigen/src/SuperLUSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/SuperLUSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SuperLUSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/SuperLUSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/SuperLUSupport/SuperLUSupport.h b/deps/eigen-3.2.8/Eigen/src/SuperLUSupport/SuperLUSupport.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/SuperLUSupport/SuperLUSupport.h rename to deps/eigen-3.2.8/Eigen/src/SuperLUSupport/SuperLUSupport.h diff --git a/deps/eigen-3.2.1/Eigen/src/UmfPackSupport/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/UmfPackSupport/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/UmfPackSupport/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/UmfPackSupport/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/UmfPackSupport/UmfPackSupport.h b/deps/eigen-3.2.8/Eigen/src/UmfPackSupport/UmfPackSupport.h similarity index 85% rename from deps/eigen-3.2.1/Eigen/src/UmfPackSupport/UmfPackSupport.h rename to deps/eigen-3.2.8/Eigen/src/UmfPackSupport/UmfPackSupport.h index 3a48cecf..29c60c37 100644 --- a/deps/eigen-3.2.1/Eigen/src/UmfPackSupport/UmfPackSupport.h +++ b/deps/eigen-3.2.8/Eigen/src/UmfPackSupport/UmfPackSupport.h @@ -107,6 +107,16 @@ inline int umfpack_get_determinant(std::complex *Mx, double *Ex, void *N return umfpack_zi_get_determinant(&mx_real,0,Ex,NumericHandle,User_Info); } +namespace internal { + template struct umfpack_helper_is_sparse_plain : false_type {}; + template + struct umfpack_helper_is_sparse_plain > + : true_type {}; + template + struct umfpack_helper_is_sparse_plain > + : true_type {}; +} + /** \ingroup UmfPackSupport_Module * \brief A sparse LU factorization and solver based on UmfPack * @@ -192,10 +202,14 @@ class UmfPackLU : internal::noncopyable * Note that the matrix should be column-major, and in compressed format for best performance. * \sa SparseMatrix::makeCompressed(). */ - void compute(const MatrixType& matrix) + template + void compute(const InputMatrixType& matrix) { - analyzePattern(matrix); - factorize(matrix); + if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar()); + if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar()); + grapInput(matrix.derived()); + analyzePattern_impl(); + factorize_impl(); } /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A. @@ -230,23 +244,15 @@ class UmfPackLU : internal::noncopyable * * \sa factorize(), compute() */ - void analyzePattern(const MatrixType& matrix) + template + void analyzePattern(const InputMatrixType& matrix) { - if(m_symbolic) - umfpack_free_symbolic(&m_symbolic,Scalar()); - if(m_numeric) - umfpack_free_numeric(&m_numeric,Scalar()); + if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar()); + if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar()); - grapInput(matrix); + grapInput(matrix.derived()); - int errorCode = 0; - errorCode = umfpack_symbolic(matrix.rows(), matrix.cols(), m_outerIndexPtr, m_innerIndexPtr, m_valuePtr, - &m_symbolic, 0, 0); - - m_isInitialized = true; - m_info = errorCode ? InvalidInput : Success; - m_analysisIsOk = true; - m_factorizationIsOk = false; + analyzePattern_impl(); } /** Performs a numeric decomposition of \a matrix @@ -255,20 +261,16 @@ class UmfPackLU : internal::noncopyable * * \sa analyzePattern(), compute() */ - void factorize(const MatrixType& matrix) + template + void factorize(const InputMatrixType& matrix) { eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()"); if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar()); - grapInput(matrix); - - int errorCode; - errorCode = umfpack_numeric(m_outerIndexPtr, m_innerIndexPtr, m_valuePtr, - m_symbolic, &m_numeric, 0, 0); - - m_info = errorCode ? NumericalIssue : Success; - m_factorizationIsOk = true; + grapInput(matrix.derived()); + + factorize_impl(); } #ifndef EIGEN_PARSED_BY_DOXYGEN @@ -283,19 +285,20 @@ class UmfPackLU : internal::noncopyable protected: - void init() { - m_info = InvalidInput; - m_isInitialized = false; - m_numeric = 0; - m_symbolic = 0; - m_outerIndexPtr = 0; - m_innerIndexPtr = 0; - m_valuePtr = 0; + m_info = InvalidInput; + m_isInitialized = false; + m_numeric = 0; + m_symbolic = 0; + m_outerIndexPtr = 0; + m_innerIndexPtr = 0; + m_valuePtr = 0; + m_extractedDataAreDirty = true; } - void grapInput(const MatrixType& mat) + template + void grapInput_impl(const InputMatrixType& mat, internal::true_type) { m_copyMatrix.resize(mat.rows(), mat.cols()); if( ((MatrixType::Flags&RowMajorBit)==RowMajorBit) || sizeof(typename MatrixType::Index)!=sizeof(int) || !mat.isCompressed() ) @@ -313,6 +316,45 @@ class UmfPackLU : internal::noncopyable m_valuePtr = mat.valuePtr(); } } + + template + void grapInput_impl(const InputMatrixType& mat, internal::false_type) + { + m_copyMatrix = mat; + m_outerIndexPtr = m_copyMatrix.outerIndexPtr(); + m_innerIndexPtr = m_copyMatrix.innerIndexPtr(); + m_valuePtr = m_copyMatrix.valuePtr(); + } + + template + void grapInput(const InputMatrixType& mat) + { + grapInput_impl(mat, internal::umfpack_helper_is_sparse_plain()); + } + + void analyzePattern_impl() + { + int errorCode = 0; + errorCode = umfpack_symbolic(m_copyMatrix.rows(), m_copyMatrix.cols(), m_outerIndexPtr, m_innerIndexPtr, m_valuePtr, + &m_symbolic, 0, 0); + + m_isInitialized = true; + m_info = errorCode ? InvalidInput : Success; + m_analysisIsOk = true; + m_factorizationIsOk = false; + m_extractedDataAreDirty = true; + } + + void factorize_impl() + { + int errorCode; + errorCode = umfpack_numeric(m_outerIndexPtr, m_innerIndexPtr, m_valuePtr, + m_symbolic, &m_numeric, 0, 0); + + m_info = errorCode ? NumericalIssue : Success; + m_factorizationIsOk = true; + m_extractedDataAreDirty = true; + } // cached data to reduce reallocation, etc. mutable LUMatrixType m_l; diff --git a/deps/eigen-3.2.1/Eigen/src/misc/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/misc/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/misc/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/misc/Image.h b/deps/eigen-3.2.8/Eigen/src/misc/Image.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/Image.h rename to deps/eigen-3.2.8/Eigen/src/misc/Image.h diff --git a/deps/eigen-3.2.1/Eigen/src/misc/Kernel.h b/deps/eigen-3.2.8/Eigen/src/misc/Kernel.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/Kernel.h rename to deps/eigen-3.2.8/Eigen/src/misc/Kernel.h diff --git a/deps/eigen-3.2.1/Eigen/src/misc/Solve.h b/deps/eigen-3.2.8/Eigen/src/misc/Solve.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/Solve.h rename to deps/eigen-3.2.8/Eigen/src/misc/Solve.h diff --git a/deps/eigen-3.2.1/Eigen/src/misc/SparseSolve.h b/deps/eigen-3.2.8/Eigen/src/misc/SparseSolve.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/SparseSolve.h rename to deps/eigen-3.2.8/Eigen/src/misc/SparseSolve.h diff --git a/deps/eigen-3.2.1/Eigen/src/misc/blas.h b/deps/eigen-3.2.8/Eigen/src/misc/blas.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/misc/blas.h rename to deps/eigen-3.2.8/Eigen/src/misc/blas.h diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseBinaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseBinaryOps.h similarity index 75% rename from deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseBinaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseBinaryOps.h index 5c8c476e..1951286f 100644 --- a/deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseBinaryOps.h +++ b/deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseBinaryOps.h @@ -70,6 +70,43 @@ max return (max)(Derived::PlainObject::Constant(rows(), cols(), other)); } + +#define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \ +template \ +EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const OtherDerived> \ +OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS &other) const \ +{ \ + return CwiseBinaryOp, const Derived, const OtherDerived>(derived(), other.derived()); \ +}\ +typedef CwiseBinaryOp, const Derived, const CwiseNullaryOp, PlainObject> > Cmp ## COMPARATOR ## ReturnType; \ +typedef CwiseBinaryOp, const CwiseNullaryOp, PlainObject>, const Derived > RCmp ## COMPARATOR ## ReturnType; \ +EIGEN_STRONG_INLINE const Cmp ## COMPARATOR ## ReturnType \ +OP(const Scalar& s) const { \ + return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \ +} \ +friend EIGEN_STRONG_INLINE const RCmp ## COMPARATOR ## ReturnType \ +OP(const Scalar& s, const Derived& d) { \ + return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \ +} + +#define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \ +template \ +EIGEN_STRONG_INLINE const CwiseBinaryOp, const OtherDerived, const Derived> \ +OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS &other) const \ +{ \ + return CwiseBinaryOp, const OtherDerived, const Derived>(other.derived(), derived()); \ +} \ +\ +inline const RCmp ## RCOMPARATOR ## ReturnType \ +OP(const Scalar& s) const { \ + return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \ +} \ +friend inline const Cmp ## RCOMPARATOR ## ReturnType \ +OP(const Scalar& s, const Derived& d) { \ + return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \ +} + + /** \returns an expression of the coefficient-wise \< operator of *this and \a other * * Example: \include Cwise_less.cpp @@ -77,7 +114,7 @@ max * * \sa all(), any(), operator>(), operator<=() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator<,std::less) +EIGEN_MAKE_CWISE_COMP_OP(operator<, LT) /** \returns an expression of the coefficient-wise \<= operator of *this and \a other * @@ -86,7 +123,7 @@ EIGEN_MAKE_CWISE_BINARY_OP(operator<,std::less) * * \sa all(), any(), operator>=(), operator<() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator<=,std::less_equal) +EIGEN_MAKE_CWISE_COMP_OP(operator<=, LE) /** \returns an expression of the coefficient-wise \> operator of *this and \a other * @@ -95,7 +132,7 @@ EIGEN_MAKE_CWISE_BINARY_OP(operator<=,std::less_equal) * * \sa all(), any(), operator>=(), operator<() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator>,std::greater) +EIGEN_MAKE_CWISE_COMP_R_OP(operator>, operator<, LT) /** \returns an expression of the coefficient-wise \>= operator of *this and \a other * @@ -104,7 +141,7 @@ EIGEN_MAKE_CWISE_BINARY_OP(operator>,std::greater) * * \sa all(), any(), operator>(), operator<=() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator>=,std::greater_equal) +EIGEN_MAKE_CWISE_COMP_R_OP(operator>=, operator<=, LE) /** \returns an expression of the coefficient-wise == operator of *this and \a other * @@ -118,7 +155,7 @@ EIGEN_MAKE_CWISE_BINARY_OP(operator>=,std::greater_equal) * * \sa all(), any(), isApprox(), isMuchSmallerThan() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator==,std::equal_to) +EIGEN_MAKE_CWISE_COMP_OP(operator==, EQ) /** \returns an expression of the coefficient-wise != operator of *this and \a other * @@ -132,7 +169,10 @@ EIGEN_MAKE_CWISE_BINARY_OP(operator==,std::equal_to) * * \sa all(), any(), isApprox(), isMuchSmallerThan() */ -EIGEN_MAKE_CWISE_BINARY_OP(operator!=,std::not_equal_to) +EIGEN_MAKE_CWISE_COMP_OP(operator!=, NEQ) + +#undef EIGEN_MAKE_CWISE_COMP_OP +#undef EIGEN_MAKE_CWISE_COMP_R_OP // scalar addition @@ -209,3 +249,5 @@ operator||(const EIGEN_CURRENT_STORAGE_BASE_CLASS &other) const THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL); return CwiseBinaryOp(derived(),other.derived()); } + + diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseUnaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseUnaryOps.h similarity index 86% rename from deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseUnaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseUnaryOps.h index a5963679..1c3ed3fc 100644 --- a/deps/eigen-3.2.1/Eigen/src/plugins/ArrayCwiseUnaryOps.h +++ b/deps/eigen-3.2.8/Eigen/src/plugins/ArrayCwiseUnaryOps.h @@ -185,19 +185,3 @@ cube() const { return derived(); } - -#define EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(METHOD_NAME,FUNCTOR) \ - inline const CwiseUnaryOp >, const Derived> \ - METHOD_NAME(const Scalar& s) const { \ - return CwiseUnaryOp >, const Derived> \ - (derived(), std::bind2nd(FUNCTOR(), s)); \ - } - -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator==, std::equal_to) -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator!=, std::not_equal_to) -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator<, std::less) -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator<=, std::less_equal) -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator>, std::greater) -EIGEN_MAKE_SCALAR_CWISE_UNARY_OP(operator>=, std::greater_equal) - - diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/BlockMethods.h b/deps/eigen-3.2.8/Eigen/src/plugins/BlockMethods.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/plugins/BlockMethods.h rename to deps/eigen-3.2.8/Eigen/src/plugins/BlockMethods.h diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/CMakeLists.txt b/deps/eigen-3.2.8/Eigen/src/plugins/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/plugins/CMakeLists.txt rename to deps/eigen-3.2.8/Eigen/src/plugins/CMakeLists.txt diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/CommonCwiseBinaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/CommonCwiseBinaryOps.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/plugins/CommonCwiseBinaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/CommonCwiseBinaryOps.h diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/CommonCwiseUnaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/CommonCwiseUnaryOps.h similarity index 100% rename from deps/eigen-3.2.1/Eigen/src/plugins/CommonCwiseUnaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/CommonCwiseUnaryOps.h diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseBinaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseBinaryOps.h similarity index 86% rename from deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseBinaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseBinaryOps.h index 7f62149e..c4a042b7 100644 --- a/deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseBinaryOps.h +++ b/deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseBinaryOps.h @@ -124,3 +124,20 @@ cwiseQuotient(const EIGEN_CURRENT_STORAGE_BASE_CLASS &other) const { return CwiseBinaryOp, const Derived, const OtherDerived>(derived(), other.derived()); } + +typedef CwiseBinaryOp, const Derived, const ConstantReturnType> CwiseScalarEqualReturnType; + +/** \returns an expression of the coefficient-wise == operator of \c *this and a scalar \a s + * + * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. + * In order to check for equality between two vectors or matrices with floating-point coefficients, it is + * generally a far better idea to use a fuzzy comparison as provided by isApprox() and + * isMuchSmallerThan(). + * + * \sa cwiseEqual(const MatrixBase &) const + */ +inline const CwiseScalarEqualReturnType +cwiseEqual(const Scalar& s) const +{ + return CwiseScalarEqualReturnType(derived(), Derived::Constant(rows(), cols(), s), internal::scalar_cmp_op()); +} diff --git a/deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseUnaryOps.h b/deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseUnaryOps.h similarity index 71% rename from deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseUnaryOps.h rename to deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseUnaryOps.h index 0cf0640b..8de10935 100644 --- a/deps/eigen-3.2.1/Eigen/src/plugins/MatrixCwiseUnaryOps.h +++ b/deps/eigen-3.2.8/Eigen/src/plugins/MatrixCwiseUnaryOps.h @@ -50,18 +50,3 @@ cwiseSqrt() const { return derived(); } inline const CwiseUnaryOp, const Derived> cwiseInverse() const { return derived(); } -/** \returns an expression of the coefficient-wise == operator of \c *this and a scalar \a s - * - * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. - * In order to check for equality between two vectors or matrices with floating-point coefficients, it is - * generally a far better idea to use a fuzzy comparison as provided by isApprox() and - * isMuchSmallerThan(). - * - * \sa cwiseEqual(const MatrixBase &) const - */ -inline const CwiseUnaryOp >, const Derived> -cwiseEqual(const Scalar& s) const -{ - return CwiseUnaryOp >,const Derived> - (derived(), std::bind1st(std::equal_to(), s)); -} diff --git a/deps/eigen-3.2.1/INSTALL b/deps/eigen-3.2.8/INSTALL similarity index 100% rename from deps/eigen-3.2.1/INSTALL rename to deps/eigen-3.2.8/INSTALL diff --git a/deps/eigen-3.2.1/bench/BenchSparseUtil.h b/deps/eigen-3.2.8/bench/BenchSparseUtil.h similarity index 100% rename from deps/eigen-3.2.1/bench/BenchSparseUtil.h rename to deps/eigen-3.2.8/bench/BenchSparseUtil.h diff --git a/deps/eigen-3.2.1/bench/BenchTimer.h b/deps/eigen-3.2.8/bench/BenchTimer.h similarity index 100% rename from deps/eigen-3.2.1/bench/BenchTimer.h rename to deps/eigen-3.2.8/bench/BenchTimer.h diff --git a/deps/eigen-3.2.1/bench/BenchUtil.h b/deps/eigen-3.2.8/bench/BenchUtil.h similarity index 100% rename from deps/eigen-3.2.1/bench/BenchUtil.h rename to deps/eigen-3.2.8/bench/BenchUtil.h diff --git a/deps/eigen-3.2.1/bench/README.txt b/deps/eigen-3.2.8/bench/README.txt similarity index 100% rename from deps/eigen-3.2.1/bench/README.txt rename to deps/eigen-3.2.8/bench/README.txt diff --git a/deps/eigen-3.2.1/bench/basicbench.cxxlist b/deps/eigen-3.2.8/bench/basicbench.cxxlist similarity index 100% rename from deps/eigen-3.2.1/bench/basicbench.cxxlist rename to deps/eigen-3.2.8/bench/basicbench.cxxlist diff --git a/deps/eigen-3.2.1/bench/basicbenchmark.cpp b/deps/eigen-3.2.8/bench/basicbenchmark.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/basicbenchmark.cpp rename to deps/eigen-3.2.8/bench/basicbenchmark.cpp diff --git a/deps/eigen-3.2.1/bench/basicbenchmark.h b/deps/eigen-3.2.8/bench/basicbenchmark.h similarity index 100% rename from deps/eigen-3.2.1/bench/basicbenchmark.h rename to deps/eigen-3.2.8/bench/basicbenchmark.h diff --git a/deps/eigen-3.2.1/bench/benchBlasGemm.cpp b/deps/eigen-3.2.8/bench/benchBlasGemm.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchBlasGemm.cpp rename to deps/eigen-3.2.8/bench/benchBlasGemm.cpp diff --git a/deps/eigen-3.2.1/bench/benchCholesky.cpp b/deps/eigen-3.2.8/bench/benchCholesky.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchCholesky.cpp rename to deps/eigen-3.2.8/bench/benchCholesky.cpp diff --git a/deps/eigen-3.2.1/bench/benchEigenSolver.cpp b/deps/eigen-3.2.8/bench/benchEigenSolver.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchEigenSolver.cpp rename to deps/eigen-3.2.8/bench/benchEigenSolver.cpp diff --git a/deps/eigen-3.2.1/bench/benchFFT.cpp b/deps/eigen-3.2.8/bench/benchFFT.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchFFT.cpp rename to deps/eigen-3.2.8/bench/benchFFT.cpp diff --git a/deps/eigen-3.2.1/bench/benchGeometry.cpp b/deps/eigen-3.2.8/bench/benchGeometry.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchGeometry.cpp rename to deps/eigen-3.2.8/bench/benchGeometry.cpp diff --git a/deps/eigen-3.2.1/bench/benchVecAdd.cpp b/deps/eigen-3.2.8/bench/benchVecAdd.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchVecAdd.cpp rename to deps/eigen-3.2.8/bench/benchVecAdd.cpp diff --git a/deps/eigen-3.2.1/bench/bench_gemm.cpp b/deps/eigen-3.2.8/bench/bench_gemm.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/bench_gemm.cpp rename to deps/eigen-3.2.8/bench/bench_gemm.cpp diff --git a/deps/eigen-3.2.1/bench/bench_multi_compilers.sh b/deps/eigen-3.2.8/bench/bench_multi_compilers.sh similarity index 100% rename from deps/eigen-3.2.1/bench/bench_multi_compilers.sh rename to deps/eigen-3.2.8/bench/bench_multi_compilers.sh diff --git a/deps/eigen-3.2.1/bench/bench_norm.cpp b/deps/eigen-3.2.8/bench/bench_norm.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/bench_norm.cpp rename to deps/eigen-3.2.8/bench/bench_norm.cpp diff --git a/deps/eigen-3.2.1/bench/bench_reverse.cpp b/deps/eigen-3.2.8/bench/bench_reverse.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/bench_reverse.cpp rename to deps/eigen-3.2.8/bench/bench_reverse.cpp diff --git a/deps/eigen-3.2.1/bench/bench_sum.cpp b/deps/eigen-3.2.8/bench/bench_sum.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/bench_sum.cpp rename to deps/eigen-3.2.8/bench/bench_sum.cpp diff --git a/deps/eigen-3.2.1/bench/bench_unrolling b/deps/eigen-3.2.8/bench/bench_unrolling similarity index 100% rename from deps/eigen-3.2.1/bench/bench_unrolling rename to deps/eigen-3.2.8/bench/bench_unrolling diff --git a/deps/eigen-3.2.1/bench/benchmark.cpp b/deps/eigen-3.2.8/bench/benchmark.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchmark.cpp rename to deps/eigen-3.2.8/bench/benchmark.cpp diff --git a/deps/eigen-3.2.1/bench/benchmarkSlice.cpp b/deps/eigen-3.2.8/bench/benchmarkSlice.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchmarkSlice.cpp rename to deps/eigen-3.2.8/bench/benchmarkSlice.cpp diff --git a/deps/eigen-3.2.1/bench/benchmarkX.cpp b/deps/eigen-3.2.8/bench/benchmarkX.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchmarkX.cpp rename to deps/eigen-3.2.8/bench/benchmarkX.cpp diff --git a/deps/eigen-3.2.1/bench/benchmarkXcwise.cpp b/deps/eigen-3.2.8/bench/benchmarkXcwise.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/benchmarkXcwise.cpp rename to deps/eigen-3.2.8/bench/benchmarkXcwise.cpp diff --git a/deps/eigen-3.2.1/bench/benchmark_suite b/deps/eigen-3.2.8/bench/benchmark_suite similarity index 100% rename from deps/eigen-3.2.1/bench/benchmark_suite rename to deps/eigen-3.2.8/bench/benchmark_suite diff --git a/deps/eigen-3.2.1/bench/btl/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/COPYING b/deps/eigen-3.2.8/bench/btl/COPYING similarity index 100% rename from deps/eigen-3.2.1/bench/btl/COPYING rename to deps/eigen-3.2.8/bench/btl/COPYING diff --git a/deps/eigen-3.2.1/bench/btl/README b/deps/eigen-3.2.8/bench/btl/README similarity index 100% rename from deps/eigen-3.2.1/bench/btl/README rename to deps/eigen-3.2.8/bench/btl/README diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_aat_product.hh b/deps/eigen-3.2.8/bench/btl/actions/action_aat_product.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_aat_product.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_aat_product.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_ata_product.hh b/deps/eigen-3.2.8/bench/btl/actions/action_ata_product.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_ata_product.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_ata_product.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_atv_product.hh b/deps/eigen-3.2.8/bench/btl/actions/action_atv_product.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_atv_product.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_atv_product.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_axpby.hh b/deps/eigen-3.2.8/bench/btl/actions/action_axpby.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_axpby.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_axpby.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_axpy.hh b/deps/eigen-3.2.8/bench/btl/actions/action_axpy.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_axpy.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_axpy.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_cholesky.hh b/deps/eigen-3.2.8/bench/btl/actions/action_cholesky.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_cholesky.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_cholesky.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_ger.hh b/deps/eigen-3.2.8/bench/btl/actions/action_ger.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_ger.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_ger.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_hessenberg.hh b/deps/eigen-3.2.8/bench/btl/actions/action_hessenberg.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_hessenberg.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_hessenberg.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_lu_decomp.hh b/deps/eigen-3.2.8/bench/btl/actions/action_lu_decomp.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_lu_decomp.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_lu_decomp.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_lu_solve.hh b/deps/eigen-3.2.8/bench/btl/actions/action_lu_solve.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_lu_solve.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_lu_solve.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_matrix_matrix_product.hh b/deps/eigen-3.2.8/bench/btl/actions/action_matrix_matrix_product.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_matrix_matrix_product.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_matrix_matrix_product.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_matrix_matrix_product_bis.hh b/deps/eigen-3.2.8/bench/btl/actions/action_matrix_matrix_product_bis.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_matrix_matrix_product_bis.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_matrix_matrix_product_bis.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_matrix_vector_product.hh b/deps/eigen-3.2.8/bench/btl/actions/action_matrix_vector_product.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_matrix_vector_product.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_matrix_vector_product.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_partial_lu.hh b/deps/eigen-3.2.8/bench/btl/actions/action_partial_lu.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_partial_lu.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_partial_lu.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_rot.hh b/deps/eigen-3.2.8/bench/btl/actions/action_rot.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_rot.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_rot.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_symv.hh b/deps/eigen-3.2.8/bench/btl/actions/action_symv.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_symv.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_symv.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_syr2.hh b/deps/eigen-3.2.8/bench/btl/actions/action_syr2.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_syr2.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_syr2.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_trisolve.hh b/deps/eigen-3.2.8/bench/btl/actions/action_trisolve.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_trisolve.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_trisolve.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_trisolve_matrix.hh b/deps/eigen-3.2.8/bench/btl/actions/action_trisolve_matrix.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_trisolve_matrix.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_trisolve_matrix.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/action_trmm.hh b/deps/eigen-3.2.8/bench/btl/actions/action_trmm.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/action_trmm.hh rename to deps/eigen-3.2.8/bench/btl/actions/action_trmm.hh diff --git a/deps/eigen-3.2.1/bench/btl/actions/basic_actions.hh b/deps/eigen-3.2.8/bench/btl/actions/basic_actions.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/actions/basic_actions.hh rename to deps/eigen-3.2.8/bench/btl/actions/basic_actions.hh diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindACML.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindACML.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindACML.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindACML.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindATLAS.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindATLAS.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindATLAS.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindATLAS.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindBlitz.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindBlitz.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindBlitz.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindBlitz.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindCBLAS.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindCBLAS.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindCBLAS.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindCBLAS.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindGMM.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindGMM.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindGMM.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindGMM.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindGOTO.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindGOTO.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindGOTO.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindGOTO.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindGOTO2.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindGOTO2.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindGOTO2.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindGOTO2.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindMKL.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindMKL.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindMKL.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindMKL.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindMTL4.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindMTL4.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindMTL4.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindMTL4.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindPackageHandleStandardArgs.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindPackageHandleStandardArgs.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindPackageHandleStandardArgs.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindPackageHandleStandardArgs.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/FindTvmet.cmake b/deps/eigen-3.2.8/bench/btl/cmake/FindTvmet.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/FindTvmet.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/FindTvmet.cmake diff --git a/deps/eigen-3.2.1/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake b/deps/eigen-3.2.8/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake similarity index 100% rename from deps/eigen-3.2.1/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake rename to deps/eigen-3.2.8/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake diff --git a/deps/eigen-3.2.1/bench/btl/data/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/data/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/data/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/data/action_settings.txt b/deps/eigen-3.2.8/bench/btl/data/action_settings.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/action_settings.txt rename to deps/eigen-3.2.8/bench/btl/data/action_settings.txt diff --git a/deps/eigen-3.2.1/bench/btl/data/gnuplot_common_settings.hh b/deps/eigen-3.2.8/bench/btl/data/gnuplot_common_settings.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/gnuplot_common_settings.hh rename to deps/eigen-3.2.8/bench/btl/data/gnuplot_common_settings.hh diff --git a/deps/eigen-3.2.1/bench/btl/data/go_mean b/deps/eigen-3.2.8/bench/btl/data/go_mean similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/go_mean rename to deps/eigen-3.2.8/bench/btl/data/go_mean diff --git a/deps/eigen-3.2.1/bench/btl/data/mean.cxx b/deps/eigen-3.2.8/bench/btl/data/mean.cxx similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/mean.cxx rename to deps/eigen-3.2.8/bench/btl/data/mean.cxx diff --git a/deps/eigen-3.2.1/bench/btl/data/mk_gnuplot_script.sh b/deps/eigen-3.2.8/bench/btl/data/mk_gnuplot_script.sh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/mk_gnuplot_script.sh rename to deps/eigen-3.2.8/bench/btl/data/mk_gnuplot_script.sh diff --git a/deps/eigen-3.2.1/bench/btl/data/mk_mean_script.sh b/deps/eigen-3.2.8/bench/btl/data/mk_mean_script.sh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/mk_mean_script.sh rename to deps/eigen-3.2.8/bench/btl/data/mk_mean_script.sh diff --git a/deps/eigen-3.2.1/bench/btl/data/mk_new_gnuplot.sh b/deps/eigen-3.2.8/bench/btl/data/mk_new_gnuplot.sh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/mk_new_gnuplot.sh rename to deps/eigen-3.2.8/bench/btl/data/mk_new_gnuplot.sh diff --git a/deps/eigen-3.2.1/bench/btl/data/perlib_plot_settings.txt b/deps/eigen-3.2.8/bench/btl/data/perlib_plot_settings.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/perlib_plot_settings.txt rename to deps/eigen-3.2.8/bench/btl/data/perlib_plot_settings.txt diff --git a/deps/eigen-3.2.1/bench/btl/data/regularize.cxx b/deps/eigen-3.2.8/bench/btl/data/regularize.cxx similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/regularize.cxx rename to deps/eigen-3.2.8/bench/btl/data/regularize.cxx diff --git a/deps/eigen-3.2.1/bench/btl/data/smooth.cxx b/deps/eigen-3.2.8/bench/btl/data/smooth.cxx similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/smooth.cxx rename to deps/eigen-3.2.8/bench/btl/data/smooth.cxx diff --git a/deps/eigen-3.2.1/bench/btl/data/smooth_all.sh b/deps/eigen-3.2.8/bench/btl/data/smooth_all.sh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/data/smooth_all.sh rename to deps/eigen-3.2.8/bench/btl/data/smooth_all.sh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/bench.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/bench.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/bench.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/bench.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/bench_parameter.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/bench_parameter.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/bench_parameter.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/bench_parameter.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/btl.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/btl.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/btl.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/btl.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/init/init_function.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/init/init_function.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/init/init_function.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/init/init_function.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/init/init_matrix.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/init/init_matrix.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/init/init_matrix.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/init/init_matrix.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/init/init_vector.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/init/init_vector.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/init/init_vector.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/init/init_vector.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/static/bench_static.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/static/bench_static.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/static/bench_static.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/static/bench_static.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/static/intel_bench_fixed_size.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/static/intel_bench_fixed_size.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/static/intel_bench_fixed_size.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/static/intel_bench_fixed_size.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/static/static_size_generator.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/static/static_size_generator.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/static/static_size_generator.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/static/static_size_generator.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/STL_perf_analyzer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/STL_perf_analyzer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/STL_perf_analyzer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/STL_perf_analyzer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/STL_timer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/STL_timer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/STL_timer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/STL_timer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_perf_analyzer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_perf_analyzer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_perf_analyzer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_perf_analyzer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_timer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_timer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/portable_timer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/portable_timer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/x86_perf_analyzer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/x86_perf_analyzer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/x86_perf_analyzer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/x86_perf_analyzer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/timers/x86_timer.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/timers/x86_timer.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/timers/x86_timer.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/timers/x86_timer.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/utils/size_lin_log.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/utils/size_lin_log.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/utils/size_lin_log.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/utils/size_lin_log.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/utils/size_log.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/utils/size_log.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/utils/size_log.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/utils/size_log.hh diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/utils/utilities.h b/deps/eigen-3.2.8/bench/btl/generic_bench/utils/utilities.h similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/utils/utilities.h rename to deps/eigen-3.2.8/bench/btl/generic_bench/utils/utilities.h diff --git a/deps/eigen-3.2.1/bench/btl/generic_bench/utils/xy_file.hh b/deps/eigen-3.2.8/bench/btl/generic_bench/utils/xy_file.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/generic_bench/utils/xy_file.hh rename to deps/eigen-3.2.8/bench/btl/generic_bench/utils/xy_file.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/BLAS/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/blas.h b/deps/eigen-3.2.8/bench/btl/libs/BLAS/blas.h similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/blas.h rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/blas.h diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/blas_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/BLAS/blas_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/blas_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/blas_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/blas_interface_impl.hh b/deps/eigen-3.2.8/bench/btl/libs/BLAS/blas_interface_impl.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/blas_interface_impl.hh rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/blas_interface_impl.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/c_interface_base.h b/deps/eigen-3.2.8/bench/btl/libs/BLAS/c_interface_base.h similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/c_interface_base.h rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/c_interface_base.h diff --git a/deps/eigen-3.2.1/bench/btl/libs/BLAS/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/BLAS/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/BLAS/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/BLAS/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/STL/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/STL/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/STL/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/STL/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/STL/STL_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/STL/STL_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/STL/STL_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/STL/STL_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/STL/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/STL/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/STL/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/STL/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/blitz/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/blitz/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/blitz_LU_solve_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/blitz/blitz_LU_solve_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/blitz_LU_solve_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/blitz/blitz_LU_solve_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/blitz_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/blitz/blitz_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/blitz_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/blitz/blitz_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/btl_blitz.cpp b/deps/eigen-3.2.8/bench/btl/libs/blitz/btl_blitz.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/btl_blitz.cpp rename to deps/eigen-3.2.8/bench/btl/libs/blitz/btl_blitz.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/btl_tiny_blitz.cpp b/deps/eigen-3.2.8/bench/btl/libs/blitz/btl_tiny_blitz.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/btl_tiny_blitz.cpp rename to deps/eigen-3.2.8/bench/btl/libs/blitz/btl_tiny_blitz.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/blitz/tiny_blitz_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/blitz/tiny_blitz_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/blitz/tiny_blitz_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/blitz/tiny_blitz_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/eigen2/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/eigen2_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/eigen2/eigen2_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/eigen2_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/eigen2_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/main_adv.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen2/main_adv.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/main_adv.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/main_adv.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/main_linear.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen2/main_linear.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/main_linear.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/main_linear.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/main_matmat.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen2/main_matmat.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/main_matmat.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/main_matmat.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen2/main_vecmat.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen2/main_vecmat.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen2/main_vecmat.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen2/main_vecmat.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/eigen3/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/eigen3_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/eigen3/eigen3_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/eigen3_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/eigen3_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/main_adv.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen3/main_adv.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/main_adv.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/main_adv.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/main_linear.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen3/main_linear.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/main_linear.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/main_linear.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/main_matmat.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen3/main_matmat.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/main_matmat.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/main_matmat.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/eigen3/main_vecmat.cpp b/deps/eigen-3.2.8/bench/btl/libs/eigen3/main_vecmat.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/eigen3/main_vecmat.cpp rename to deps/eigen-3.2.8/bench/btl/libs/eigen3/main_vecmat.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/gmm/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/gmm/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/gmm/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/gmm/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/gmm/gmm_LU_solve_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/gmm/gmm_LU_solve_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/gmm/gmm_LU_solve_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/gmm/gmm_LU_solve_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/gmm/gmm_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/gmm/gmm_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/gmm/gmm_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/gmm/gmm_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/gmm/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/gmm/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/gmm/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/gmm/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/mtl4/.kdbgrc.main b/deps/eigen-3.2.8/bench/btl/libs/mtl4/.kdbgrc.main similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/mtl4/.kdbgrc.main rename to deps/eigen-3.2.8/bench/btl/libs/mtl4/.kdbgrc.main diff --git a/deps/eigen-3.2.1/bench/btl/libs/mtl4/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/mtl4/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/mtl4/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/mtl4/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/mtl4/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/mtl4/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/mtl4/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/mtl4/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/mtl4/mtl4_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/mtl4/mtl4_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/mtl4/mtl4_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/mtl4/mtl4_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/tvmet/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/tvmet/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/tvmet/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/tvmet/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/tvmet/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/tvmet/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/tvmet/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/tvmet/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/tvmet/tvmet_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/tvmet/tvmet_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/tvmet/tvmet_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/tvmet/tvmet_interface.hh diff --git a/deps/eigen-3.2.1/bench/btl/libs/ublas/CMakeLists.txt b/deps/eigen-3.2.8/bench/btl/libs/ublas/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/ublas/CMakeLists.txt rename to deps/eigen-3.2.8/bench/btl/libs/ublas/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/btl/libs/ublas/main.cpp b/deps/eigen-3.2.8/bench/btl/libs/ublas/main.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/ublas/main.cpp rename to deps/eigen-3.2.8/bench/btl/libs/ublas/main.cpp diff --git a/deps/eigen-3.2.1/bench/btl/libs/ublas/ublas_interface.hh b/deps/eigen-3.2.8/bench/btl/libs/ublas/ublas_interface.hh similarity index 100% rename from deps/eigen-3.2.1/bench/btl/libs/ublas/ublas_interface.hh rename to deps/eigen-3.2.8/bench/btl/libs/ublas/ublas_interface.hh diff --git a/deps/eigen-3.2.1/bench/check_cache_queries.cpp b/deps/eigen-3.2.8/bench/check_cache_queries.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/check_cache_queries.cpp rename to deps/eigen-3.2.8/bench/check_cache_queries.cpp diff --git a/deps/eigen-3.2.1/bench/eig33.cpp b/deps/eigen-3.2.8/bench/eig33.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/eig33.cpp rename to deps/eigen-3.2.8/bench/eig33.cpp diff --git a/deps/eigen-3.2.1/bench/geometry.cpp b/deps/eigen-3.2.8/bench/geometry.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/geometry.cpp rename to deps/eigen-3.2.8/bench/geometry.cpp diff --git a/deps/eigen-3.2.1/bench/product_threshold.cpp b/deps/eigen-3.2.8/bench/product_threshold.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/product_threshold.cpp rename to deps/eigen-3.2.8/bench/product_threshold.cpp diff --git a/deps/eigen-3.2.1/bench/quat_slerp.cpp b/deps/eigen-3.2.8/bench/quat_slerp.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/quat_slerp.cpp rename to deps/eigen-3.2.8/bench/quat_slerp.cpp diff --git a/deps/eigen-3.2.1/bench/quatmul.cpp b/deps/eigen-3.2.8/bench/quatmul.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/quatmul.cpp rename to deps/eigen-3.2.8/bench/quatmul.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_cholesky.cpp b/deps/eigen-3.2.8/bench/sparse_cholesky.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_cholesky.cpp rename to deps/eigen-3.2.8/bench/sparse_cholesky.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_dense_product.cpp b/deps/eigen-3.2.8/bench/sparse_dense_product.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_dense_product.cpp rename to deps/eigen-3.2.8/bench/sparse_dense_product.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_lu.cpp b/deps/eigen-3.2.8/bench/sparse_lu.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_lu.cpp rename to deps/eigen-3.2.8/bench/sparse_lu.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_product.cpp b/deps/eigen-3.2.8/bench/sparse_product.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_product.cpp rename to deps/eigen-3.2.8/bench/sparse_product.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_randomsetter.cpp b/deps/eigen-3.2.8/bench/sparse_randomsetter.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_randomsetter.cpp rename to deps/eigen-3.2.8/bench/sparse_randomsetter.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_setter.cpp b/deps/eigen-3.2.8/bench/sparse_setter.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_setter.cpp rename to deps/eigen-3.2.8/bench/sparse_setter.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_transpose.cpp b/deps/eigen-3.2.8/bench/sparse_transpose.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_transpose.cpp rename to deps/eigen-3.2.8/bench/sparse_transpose.cpp diff --git a/deps/eigen-3.2.1/bench/sparse_trisolver.cpp b/deps/eigen-3.2.8/bench/sparse_trisolver.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/sparse_trisolver.cpp rename to deps/eigen-3.2.8/bench/sparse_trisolver.cpp diff --git a/deps/eigen-3.2.1/bench/spbench/CMakeLists.txt b/deps/eigen-3.2.8/bench/spbench/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/CMakeLists.txt rename to deps/eigen-3.2.8/bench/spbench/CMakeLists.txt diff --git a/deps/eigen-3.2.1/bench/spbench/sp_solver.cpp b/deps/eigen-3.2.8/bench/spbench/sp_solver.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/sp_solver.cpp rename to deps/eigen-3.2.8/bench/spbench/sp_solver.cpp diff --git a/deps/eigen-3.2.1/bench/spbench/spbench.dtd b/deps/eigen-3.2.8/bench/spbench/spbench.dtd similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/spbench.dtd rename to deps/eigen-3.2.8/bench/spbench/spbench.dtd diff --git a/deps/eigen-3.2.1/bench/spbench/spbenchsolver.cpp b/deps/eigen-3.2.8/bench/spbench/spbenchsolver.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/spbenchsolver.cpp rename to deps/eigen-3.2.8/bench/spbench/spbenchsolver.cpp diff --git a/deps/eigen-3.2.1/bench/spbench/spbenchsolver.h b/deps/eigen-3.2.8/bench/spbench/spbenchsolver.h similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/spbenchsolver.h rename to deps/eigen-3.2.8/bench/spbench/spbenchsolver.h diff --git a/deps/eigen-3.2.1/bench/spbench/spbenchstyle.h b/deps/eigen-3.2.8/bench/spbench/spbenchstyle.h similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/spbenchstyle.h rename to deps/eigen-3.2.8/bench/spbench/spbenchstyle.h diff --git a/deps/eigen-3.2.1/bench/spbench/test_sparseLU.cpp b/deps/eigen-3.2.8/bench/spbench/test_sparseLU.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/spbench/test_sparseLU.cpp rename to deps/eigen-3.2.8/bench/spbench/test_sparseLU.cpp diff --git a/deps/eigen-3.2.1/bench/spmv.cpp b/deps/eigen-3.2.8/bench/spmv.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/spmv.cpp rename to deps/eigen-3.2.8/bench/spmv.cpp diff --git a/deps/eigen-3.2.1/bench/vdw_new.cpp b/deps/eigen-3.2.8/bench/vdw_new.cpp similarity index 100% rename from deps/eigen-3.2.1/bench/vdw_new.cpp rename to deps/eigen-3.2.8/bench/vdw_new.cpp diff --git a/deps/eigen-3.2.1/blas/BandTriangularSolver.h b/deps/eigen-3.2.8/blas/BandTriangularSolver.h similarity index 100% rename from deps/eigen-3.2.1/blas/BandTriangularSolver.h rename to deps/eigen-3.2.8/blas/BandTriangularSolver.h diff --git a/deps/eigen-3.2.1/blas/CMakeLists.txt b/deps/eigen-3.2.8/blas/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/blas/CMakeLists.txt rename to deps/eigen-3.2.8/blas/CMakeLists.txt diff --git a/deps/eigen-3.2.1/blas/GeneralRank1Update.h b/deps/eigen-3.2.8/blas/GeneralRank1Update.h similarity index 100% rename from deps/eigen-3.2.1/blas/GeneralRank1Update.h rename to deps/eigen-3.2.8/blas/GeneralRank1Update.h diff --git a/deps/eigen-3.2.1/blas/PackedSelfadjointProduct.h b/deps/eigen-3.2.8/blas/PackedSelfadjointProduct.h similarity index 100% rename from deps/eigen-3.2.1/blas/PackedSelfadjointProduct.h rename to deps/eigen-3.2.8/blas/PackedSelfadjointProduct.h diff --git a/deps/eigen-3.2.1/blas/PackedTriangularMatrixVector.h b/deps/eigen-3.2.8/blas/PackedTriangularMatrixVector.h similarity index 100% rename from deps/eigen-3.2.1/blas/PackedTriangularMatrixVector.h rename to deps/eigen-3.2.8/blas/PackedTriangularMatrixVector.h diff --git a/deps/eigen-3.2.1/blas/PackedTriangularSolverVector.h b/deps/eigen-3.2.8/blas/PackedTriangularSolverVector.h similarity index 100% rename from deps/eigen-3.2.1/blas/PackedTriangularSolverVector.h rename to deps/eigen-3.2.8/blas/PackedTriangularSolverVector.h diff --git a/deps/eigen-3.2.1/blas/README.txt b/deps/eigen-3.2.8/blas/README.txt similarity index 60% rename from deps/eigen-3.2.1/blas/README.txt rename to deps/eigen-3.2.8/blas/README.txt index 07a8bd92..63a5203b 100644 --- a/deps/eigen-3.2.1/blas/README.txt +++ b/deps/eigen-3.2.8/blas/README.txt @@ -1,9 +1,6 @@ This directory contains a BLAS library built on top of Eigen. -This is currently a work in progress which is far to be ready for use, -but feel free to contribute to it if you wish. - This module is not built by default. In order to compile it, you need to type 'make blas' from within your build dir. diff --git a/deps/eigen-3.2.1/blas/Rank2Update.h b/deps/eigen-3.2.8/blas/Rank2Update.h similarity index 100% rename from deps/eigen-3.2.1/blas/Rank2Update.h rename to deps/eigen-3.2.8/blas/Rank2Update.h diff --git a/deps/eigen-3.2.1/blas/chbmv.f b/deps/eigen-3.2.8/blas/chbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/chbmv.f rename to deps/eigen-3.2.8/blas/chbmv.f diff --git a/deps/eigen-3.2.1/blas/chpmv.f b/deps/eigen-3.2.8/blas/chpmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/chpmv.f rename to deps/eigen-3.2.8/blas/chpmv.f diff --git a/deps/eigen-3.2.1/blas/common.h b/deps/eigen-3.2.8/blas/common.h similarity index 100% rename from deps/eigen-3.2.1/blas/common.h rename to deps/eigen-3.2.8/blas/common.h diff --git a/deps/eigen-3.2.1/blas/complex_double.cpp b/deps/eigen-3.2.8/blas/complex_double.cpp similarity index 100% rename from deps/eigen-3.2.1/blas/complex_double.cpp rename to deps/eigen-3.2.8/blas/complex_double.cpp diff --git a/deps/eigen-3.2.1/blas/complex_single.cpp b/deps/eigen-3.2.8/blas/complex_single.cpp similarity index 100% rename from deps/eigen-3.2.1/blas/complex_single.cpp rename to deps/eigen-3.2.8/blas/complex_single.cpp diff --git a/deps/eigen-3.2.1/blas/complexdots.f b/deps/eigen-3.2.8/blas/complexdots.f similarity index 100% rename from deps/eigen-3.2.1/blas/complexdots.f rename to deps/eigen-3.2.8/blas/complexdots.f diff --git a/deps/eigen-3.2.1/blas/ctbmv.f b/deps/eigen-3.2.8/blas/ctbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/ctbmv.f rename to deps/eigen-3.2.8/blas/ctbmv.f diff --git a/deps/eigen-3.2.1/blas/double.cpp b/deps/eigen-3.2.8/blas/double.cpp similarity index 100% rename from deps/eigen-3.2.1/blas/double.cpp rename to deps/eigen-3.2.8/blas/double.cpp diff --git a/deps/eigen-3.2.1/blas/drotm.f b/deps/eigen-3.2.8/blas/drotm.f similarity index 100% rename from deps/eigen-3.2.1/blas/drotm.f rename to deps/eigen-3.2.8/blas/drotm.f diff --git a/deps/eigen-3.2.1/blas/drotmg.f b/deps/eigen-3.2.8/blas/drotmg.f similarity index 100% rename from deps/eigen-3.2.1/blas/drotmg.f rename to deps/eigen-3.2.8/blas/drotmg.f diff --git a/deps/eigen-3.2.1/blas/dsbmv.f b/deps/eigen-3.2.8/blas/dsbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/dsbmv.f rename to deps/eigen-3.2.8/blas/dsbmv.f diff --git a/deps/eigen-3.2.1/blas/dspmv.f b/deps/eigen-3.2.8/blas/dspmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/dspmv.f rename to deps/eigen-3.2.8/blas/dspmv.f diff --git a/deps/eigen-3.2.1/blas/dtbmv.f b/deps/eigen-3.2.8/blas/dtbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/dtbmv.f rename to deps/eigen-3.2.8/blas/dtbmv.f diff --git a/deps/eigen-3.2.1/blas/level1_cplx_impl.h b/deps/eigen-3.2.8/blas/level1_cplx_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level1_cplx_impl.h rename to deps/eigen-3.2.8/blas/level1_cplx_impl.h diff --git a/deps/eigen-3.2.1/blas/level1_impl.h b/deps/eigen-3.2.8/blas/level1_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level1_impl.h rename to deps/eigen-3.2.8/blas/level1_impl.h diff --git a/deps/eigen-3.2.1/blas/level1_real_impl.h b/deps/eigen-3.2.8/blas/level1_real_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level1_real_impl.h rename to deps/eigen-3.2.8/blas/level1_real_impl.h diff --git a/deps/eigen-3.2.1/blas/level2_cplx_impl.h b/deps/eigen-3.2.8/blas/level2_cplx_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level2_cplx_impl.h rename to deps/eigen-3.2.8/blas/level2_cplx_impl.h diff --git a/deps/eigen-3.2.1/blas/level2_impl.h b/deps/eigen-3.2.8/blas/level2_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level2_impl.h rename to deps/eigen-3.2.8/blas/level2_impl.h diff --git a/deps/eigen-3.2.1/blas/level2_real_impl.h b/deps/eigen-3.2.8/blas/level2_real_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level2_real_impl.h rename to deps/eigen-3.2.8/blas/level2_real_impl.h diff --git a/deps/eigen-3.2.1/blas/level3_impl.h b/deps/eigen-3.2.8/blas/level3_impl.h similarity index 100% rename from deps/eigen-3.2.1/blas/level3_impl.h rename to deps/eigen-3.2.8/blas/level3_impl.h diff --git a/deps/eigen-3.2.1/blas/lsame.f b/deps/eigen-3.2.8/blas/lsame.f similarity index 100% rename from deps/eigen-3.2.1/blas/lsame.f rename to deps/eigen-3.2.8/blas/lsame.f diff --git a/deps/eigen-3.2.1/blas/single.cpp b/deps/eigen-3.2.8/blas/single.cpp similarity index 100% rename from deps/eigen-3.2.1/blas/single.cpp rename to deps/eigen-3.2.8/blas/single.cpp diff --git a/deps/eigen-3.2.1/blas/srotm.f b/deps/eigen-3.2.8/blas/srotm.f similarity index 100% rename from deps/eigen-3.2.1/blas/srotm.f rename to deps/eigen-3.2.8/blas/srotm.f diff --git a/deps/eigen-3.2.1/blas/srotmg.f b/deps/eigen-3.2.8/blas/srotmg.f similarity index 100% rename from deps/eigen-3.2.1/blas/srotmg.f rename to deps/eigen-3.2.8/blas/srotmg.f diff --git a/deps/eigen-3.2.1/blas/ssbmv.f b/deps/eigen-3.2.8/blas/ssbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/ssbmv.f rename to deps/eigen-3.2.8/blas/ssbmv.f diff --git a/deps/eigen-3.2.1/blas/sspmv.f b/deps/eigen-3.2.8/blas/sspmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/sspmv.f rename to deps/eigen-3.2.8/blas/sspmv.f diff --git a/deps/eigen-3.2.1/blas/stbmv.f b/deps/eigen-3.2.8/blas/stbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/stbmv.f rename to deps/eigen-3.2.8/blas/stbmv.f diff --git a/deps/eigen-3.2.1/blas/testing/CMakeLists.txt b/deps/eigen-3.2.8/blas/testing/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/blas/testing/CMakeLists.txt rename to deps/eigen-3.2.8/blas/testing/CMakeLists.txt diff --git a/deps/eigen-3.2.1/blas/testing/cblat1.f b/deps/eigen-3.2.8/blas/testing/cblat1.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/cblat1.f rename to deps/eigen-3.2.8/blas/testing/cblat1.f diff --git a/deps/eigen-3.2.1/blas/testing/cblat2.dat b/deps/eigen-3.2.8/blas/testing/cblat2.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/cblat2.dat rename to deps/eigen-3.2.8/blas/testing/cblat2.dat diff --git a/deps/eigen-3.2.1/blas/testing/cblat2.f b/deps/eigen-3.2.8/blas/testing/cblat2.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/cblat2.f rename to deps/eigen-3.2.8/blas/testing/cblat2.f diff --git a/deps/eigen-3.2.1/blas/testing/cblat3.dat b/deps/eigen-3.2.8/blas/testing/cblat3.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/cblat3.dat rename to deps/eigen-3.2.8/blas/testing/cblat3.dat diff --git a/deps/eigen-3.2.1/blas/testing/cblat3.f b/deps/eigen-3.2.8/blas/testing/cblat3.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/cblat3.f rename to deps/eigen-3.2.8/blas/testing/cblat3.f diff --git a/deps/eigen-3.2.1/blas/testing/dblat1.f b/deps/eigen-3.2.8/blas/testing/dblat1.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/dblat1.f rename to deps/eigen-3.2.8/blas/testing/dblat1.f diff --git a/deps/eigen-3.2.1/blas/testing/dblat2.dat b/deps/eigen-3.2.8/blas/testing/dblat2.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/dblat2.dat rename to deps/eigen-3.2.8/blas/testing/dblat2.dat diff --git a/deps/eigen-3.2.1/blas/testing/dblat2.f b/deps/eigen-3.2.8/blas/testing/dblat2.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/dblat2.f rename to deps/eigen-3.2.8/blas/testing/dblat2.f diff --git a/deps/eigen-3.2.1/blas/testing/dblat3.dat b/deps/eigen-3.2.8/blas/testing/dblat3.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/dblat3.dat rename to deps/eigen-3.2.8/blas/testing/dblat3.dat diff --git a/deps/eigen-3.2.1/blas/testing/dblat3.f b/deps/eigen-3.2.8/blas/testing/dblat3.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/dblat3.f rename to deps/eigen-3.2.8/blas/testing/dblat3.f diff --git a/deps/eigen-3.2.1/blas/testing/runblastest.sh b/deps/eigen-3.2.8/blas/testing/runblastest.sh similarity index 100% rename from deps/eigen-3.2.1/blas/testing/runblastest.sh rename to deps/eigen-3.2.8/blas/testing/runblastest.sh diff --git a/deps/eigen-3.2.1/blas/testing/sblat1.f b/deps/eigen-3.2.8/blas/testing/sblat1.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/sblat1.f rename to deps/eigen-3.2.8/blas/testing/sblat1.f diff --git a/deps/eigen-3.2.1/blas/testing/sblat2.dat b/deps/eigen-3.2.8/blas/testing/sblat2.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/sblat2.dat rename to deps/eigen-3.2.8/blas/testing/sblat2.dat diff --git a/deps/eigen-3.2.1/blas/testing/sblat2.f b/deps/eigen-3.2.8/blas/testing/sblat2.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/sblat2.f rename to deps/eigen-3.2.8/blas/testing/sblat2.f diff --git a/deps/eigen-3.2.1/blas/testing/sblat3.dat b/deps/eigen-3.2.8/blas/testing/sblat3.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/sblat3.dat rename to deps/eigen-3.2.8/blas/testing/sblat3.dat diff --git a/deps/eigen-3.2.1/blas/testing/sblat3.f b/deps/eigen-3.2.8/blas/testing/sblat3.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/sblat3.f rename to deps/eigen-3.2.8/blas/testing/sblat3.f diff --git a/deps/eigen-3.2.1/blas/testing/zblat1.f b/deps/eigen-3.2.8/blas/testing/zblat1.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/zblat1.f rename to deps/eigen-3.2.8/blas/testing/zblat1.f diff --git a/deps/eigen-3.2.1/blas/testing/zblat2.dat b/deps/eigen-3.2.8/blas/testing/zblat2.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/zblat2.dat rename to deps/eigen-3.2.8/blas/testing/zblat2.dat diff --git a/deps/eigen-3.2.1/blas/testing/zblat2.f b/deps/eigen-3.2.8/blas/testing/zblat2.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/zblat2.f rename to deps/eigen-3.2.8/blas/testing/zblat2.f diff --git a/deps/eigen-3.2.1/blas/testing/zblat3.dat b/deps/eigen-3.2.8/blas/testing/zblat3.dat similarity index 100% rename from deps/eigen-3.2.1/blas/testing/zblat3.dat rename to deps/eigen-3.2.8/blas/testing/zblat3.dat diff --git a/deps/eigen-3.2.1/blas/testing/zblat3.f b/deps/eigen-3.2.8/blas/testing/zblat3.f similarity index 100% rename from deps/eigen-3.2.1/blas/testing/zblat3.f rename to deps/eigen-3.2.8/blas/testing/zblat3.f diff --git a/deps/eigen-3.2.1/blas/xerbla.cpp b/deps/eigen-3.2.8/blas/xerbla.cpp similarity index 81% rename from deps/eigen-3.2.1/blas/xerbla.cpp rename to deps/eigen-3.2.8/blas/xerbla.cpp index 0d57710f..dd39a524 100644 --- a/deps/eigen-3.2.1/blas/xerbla.cpp +++ b/deps/eigen-3.2.8/blas/xerbla.cpp @@ -1,7 +1,7 @@ #include -#if (defined __GNUC__) +#if (defined __GNUC__) && (!defined __MINGW32__) && (!defined __CYGWIN__) #define EIGEN_WEAK_LINKING __attribute__ ((weak)) #else #define EIGEN_WEAK_LINKING diff --git a/deps/eigen-3.2.1/blas/zhbmv.f b/deps/eigen-3.2.8/blas/zhbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/zhbmv.f rename to deps/eigen-3.2.8/blas/zhbmv.f diff --git a/deps/eigen-3.2.1/blas/zhpmv.f b/deps/eigen-3.2.8/blas/zhpmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/zhpmv.f rename to deps/eigen-3.2.8/blas/zhpmv.f diff --git a/deps/eigen-3.2.1/blas/ztbmv.f b/deps/eigen-3.2.8/blas/ztbmv.f similarity index 100% rename from deps/eigen-3.2.1/blas/ztbmv.f rename to deps/eigen-3.2.8/blas/ztbmv.f diff --git a/deps/eigen-3.2.1/cmake/EigenConfigureTesting.cmake b/deps/eigen-3.2.8/cmake/EigenConfigureTesting.cmake similarity index 64% rename from deps/eigen-3.2.1/cmake/EigenConfigureTesting.cmake rename to deps/eigen-3.2.8/cmake/EigenConfigureTesting.cmake index 228d29e9..2b11d836 100644 --- a/deps/eigen-3.2.1/cmake/EigenConfigureTesting.cmake +++ b/deps/eigen-3.2.8/cmake/EigenConfigureTesting.cmake @@ -26,31 +26,20 @@ include(CTest) set(EIGEN_TEST_BUILD_FLAGS " " CACHE STRING "Options passed to the build command of unit tests") -# overwrite default DartConfiguration.tcl -# The worarounds are different for each version of the MSVC IDE -if(MSVC_IDE) - if(CMAKE_MAKE_PROGRAM_SAVE MATCHES "devenv") # devenv - set(EIGEN_MAKECOMMAND_PLACEHOLDER "${CMAKE_MAKE_PROGRAM_SAVE} Eigen.sln /build \"Release\" /project buildtests ${EIGEN_TEST_BUILD_FLAGS} \n# ") - else() # msbuild - set(EIGEN_MAKECOMMAND_PLACEHOLDER "${CMAKE_MAKE_PROGRAM_SAVE} buildtests.vcxproj /p:Configuration=\${CTEST_CONFIGURATION_TYPE} ${EIGEN_TEST_BUILD_FLAGS}\n# ") - endif() -else() - # for make and nmake - set(EIGEN_MAKECOMMAND_PLACEHOLDER "${CMAKE_MAKE_PROGRAM_SAVE} buildtests ${EIGEN_TEST_BUILD_FLAGS}") +# Overwrite default DartConfiguration.tcl such that ctest can build our unit tests. +# Recall that our unit tests are not in the "all" target, so we have to explicitely ask ctest to build our custom 'buildtests' target. +# At this stage, we can also add custom flags to the build tool through the user defined EIGEN_TEST_BUILD_FLAGS variable. +file(READ "${CMAKE_CURRENT_BINARY_DIR}/DartConfiguration.tcl" EIGEN_DART_CONFIG_FILE) +# try to grab the default flags +string(REGEX MATCH "MakeCommand:.*-- (.*)\nDefaultCTestConfigurationType" EIGEN_DUMMY ${EIGEN_DART_CONFIG_FILE}) +if(NOT CMAKE_MATCH_1) +string(REGEX MATCH "MakeCommand:.*[^c]make (.*)\nDefaultCTestConfigurationType" EIGEN_DUMMY ${EIGEN_DART_CONFIG_FILE}) endif() +string(REGEX REPLACE "MakeCommand:.*DefaultCTestConfigurationType" "MakeCommand: ${CMAKE_COMMAND} --build . --target buildtests --config \"\${CTEST_CONFIGURATION_TYPE}\" -- ${CMAKE_MATCH_1} ${EIGEN_TEST_BUILD_FLAGS}\nDefaultCTestConfigurationType" + EIGEN_DART_CONFIG_FILE2 ${EIGEN_DART_CONFIG_FILE}) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/DartConfiguration.tcl" ${EIGEN_DART_CONFIG_FILE2}) -# copy ctest properties, which currently -# o raise the warning levels -configure_file(${CMAKE_BINARY_DIR}/DartConfiguration.tcl ${CMAKE_BINARY_DIR}/DartConfiguration.tcl) - -# restore default CMAKE_MAKE_PROGRAM -set(CMAKE_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM_SAVE}) -# un-set temporary variables so that it is like they never existed. -# CMake 2.6.3 introduces the more logical unset() syntax for this. -set(CMAKE_MAKE_PROGRAM_SAVE) -set(EIGEN_MAKECOMMAND_PLACEHOLDER) - -configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake.in ${CMAKE_BINARY_DIR}/CTestCustom.cmake) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake.in ${CMAKE_BINARY_DIR}/CTestCustom.cmake) # some documentation of this function would be nice ei_init_testing() diff --git a/deps/eigen-3.2.1/cmake/EigenDetermineOSVersion.cmake b/deps/eigen-3.2.8/cmake/EigenDetermineOSVersion.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/EigenDetermineOSVersion.cmake rename to deps/eigen-3.2.8/cmake/EigenDetermineOSVersion.cmake diff --git a/deps/eigen-3.2.1/cmake/EigenDetermineVSServicePack.cmake b/deps/eigen-3.2.8/cmake/EigenDetermineVSServicePack.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/EigenDetermineVSServicePack.cmake rename to deps/eigen-3.2.8/cmake/EigenDetermineVSServicePack.cmake diff --git a/deps/eigen-3.2.1/cmake/EigenTesting.cmake b/deps/eigen-3.2.8/cmake/EigenTesting.cmake similarity index 94% rename from deps/eigen-3.2.1/cmake/EigenTesting.cmake rename to deps/eigen-3.2.8/cmake/EigenTesting.cmake index d9e22ab1..cbe12d51 100644 --- a/deps/eigen-3.2.1/cmake/EigenTesting.cmake +++ b/deps/eigen-3.2.8/cmake/EigenTesting.cmake @@ -322,22 +322,21 @@ macro(ei_get_compilerver VAR) endif() else() # on all other system we rely on ${CMAKE_CXX_COMPILER} - # supporting a "--version" flag + # supporting a "--version" or "/version" flag - # check whether the head command exists - find_program(HEAD_EXE head NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_PATH NO_CMAKE_SYSTEM_PATH) - if(HEAD_EXE) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version - COMMAND head -n 1 - OUTPUT_VARIABLE eigen_cxx_compiler_version_string OUTPUT_STRIP_TRAILING_WHITESPACE) + if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} EQUAL "Intel") + set(EIGEN_CXX_FLAG_VERSION "/version") else() - execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version - OUTPUT_VARIABLE eigen_cxx_compiler_version_string OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REGEX REPLACE "[\n\r].*" "" eigen_cxx_compiler_version_string ${eigen_cxx_compiler_version_string}) + set(EIGEN_CXX_FLAG_VERSION "--version") endif() + execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${EIGEN_CXX_FLAG_VERSION} + OUTPUT_VARIABLE eigen_cxx_compiler_version_string OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "[\n\r].*" "" eigen_cxx_compiler_version_string ${eigen_cxx_compiler_version_string}) + ei_get_compilerver_from_cxx_version_string("${eigen_cxx_compiler_version_string}" CNAME CVER) set(${VAR} "${CNAME}-${CVER}") + endif() endmacro(ei_get_compilerver) @@ -452,20 +451,12 @@ macro(ei_set_build_string) endmacro(ei_set_build_string) macro(ei_is_64bit_env VAR) - - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/is64.cpp" - "int main() { return (sizeof(int*) == 8 ? 1 : 0); } - ") - try_run(run_res compile_res - ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/is64.cpp" - RUN_OUTPUT_VARIABLE run_output) - - if(compile_res AND run_res) - set(${VAR} ${run_res}) - elseif(CMAKE_CL_64) - set(${VAR} 1) - elseif("$ENV{Platform}" STREQUAL "X64") # nmake 64 bit + if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(${VAR} 1) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(${VAR} 0) + else() + message(WARNING "Unsupported pointer size. Please contact the authors.") endif() endmacro(ei_is_64bit_env) diff --git a/deps/eigen-3.2.1/cmake/FindAdolc.cmake b/deps/eigen-3.2.8/cmake/FindAdolc.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindAdolc.cmake rename to deps/eigen-3.2.8/cmake/FindAdolc.cmake diff --git a/deps/eigen-3.2.1/cmake/FindBLAS.cmake b/deps/eigen-3.2.8/cmake/FindBLAS.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindBLAS.cmake rename to deps/eigen-3.2.8/cmake/FindBLAS.cmake diff --git a/deps/eigen-3.2.1/cmake/FindCholmod.cmake b/deps/eigen-3.2.8/cmake/FindCholmod.cmake similarity index 96% rename from deps/eigen-3.2.1/cmake/FindCholmod.cmake rename to deps/eigen-3.2.8/cmake/FindCholmod.cmake index 7b3046d4..23239c30 100644 --- a/deps/eigen-3.2.1/cmake/FindCholmod.cmake +++ b/deps/eigen-3.2.8/cmake/FindCholmod.cmake @@ -86,4 +86,4 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CHOLMOD DEFAULT_MSG CHOLMOD_INCLUDES CHOLMOD_LIBRARIES) -mark_as_advanced(CHOLMOD_INCLUDES CHOLMOD_LIBRARIES AMD_LIBRARY COLAMD_LIBRARY SUITESPARSE_LIBRARY) +mark_as_advanced(CHOLMOD_INCLUDES CHOLMOD_LIBRARIES AMD_LIBRARY COLAMD_LIBRARY SUITESPARSE_LIBRARY CAMD_LIBRARY CCOLAMD_LIBRARY CHOLMOD_METIS_LIBRARY) diff --git a/deps/eigen-3.2.1/cmake/FindEigen2.cmake b/deps/eigen-3.2.8/cmake/FindEigen2.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindEigen2.cmake rename to deps/eigen-3.2.8/cmake/FindEigen2.cmake diff --git a/deps/eigen-3.2.1/cmake/FindEigen3.cmake b/deps/eigen-3.2.8/cmake/FindEigen3.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindEigen3.cmake rename to deps/eigen-3.2.8/cmake/FindEigen3.cmake diff --git a/deps/eigen-3.2.1/cmake/FindFFTW.cmake b/deps/eigen-3.2.8/cmake/FindFFTW.cmake similarity index 97% rename from deps/eigen-3.2.1/cmake/FindFFTW.cmake rename to deps/eigen-3.2.8/cmake/FindFFTW.cmake index a9e9925e..6c4dc9ab 100644 --- a/deps/eigen-3.2.1/cmake/FindFFTW.cmake +++ b/deps/eigen-3.2.8/cmake/FindFFTW.cmake @@ -115,5 +115,5 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDES FFTW_LIBRARIES) -mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES) +mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB) diff --git a/deps/eigen-3.2.1/cmake/FindGLEW.cmake b/deps/eigen-3.2.8/cmake/FindGLEW.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindGLEW.cmake rename to deps/eigen-3.2.8/cmake/FindGLEW.cmake diff --git a/deps/eigen-3.2.1/cmake/FindGMP.cmake b/deps/eigen-3.2.8/cmake/FindGMP.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindGMP.cmake rename to deps/eigen-3.2.8/cmake/FindGMP.cmake diff --git a/deps/eigen-3.2.1/cmake/FindGSL.cmake b/deps/eigen-3.2.8/cmake/FindGSL.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindGSL.cmake rename to deps/eigen-3.2.8/cmake/FindGSL.cmake diff --git a/deps/eigen-3.2.1/cmake/FindGoogleHash.cmake b/deps/eigen-3.2.8/cmake/FindGoogleHash.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindGoogleHash.cmake rename to deps/eigen-3.2.8/cmake/FindGoogleHash.cmake diff --git a/deps/eigen-3.2.1/cmake/FindLAPACK.cmake b/deps/eigen-3.2.8/cmake/FindLAPACK.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindLAPACK.cmake rename to deps/eigen-3.2.8/cmake/FindLAPACK.cmake diff --git a/deps/eigen-3.2.1/cmake/FindMPFR.cmake b/deps/eigen-3.2.8/cmake/FindMPFR.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindMPFR.cmake rename to deps/eigen-3.2.8/cmake/FindMPFR.cmake diff --git a/deps/eigen-3.2.8/cmake/FindMetis.cmake b/deps/eigen-3.2.8/cmake/FindMetis.cmake new file mode 100644 index 00000000..6a0ce790 --- /dev/null +++ b/deps/eigen-3.2.8/cmake/FindMetis.cmake @@ -0,0 +1,59 @@ +# Pastix requires METIS or METIS (partitioning and reordering tools) + +if (METIS_INCLUDES AND METIS_LIBRARIES) + set(METIS_FIND_QUIETLY TRUE) +endif (METIS_INCLUDES AND METIS_LIBRARIES) + +find_path(METIS_INCLUDES + NAMES + metis.h + PATHS + $ENV{METISDIR} + ${INCLUDE_INSTALL_DIR} + PATH_SUFFIXES + . + metis + include +) + +macro(_metis_check_version) + file(READ "${METIS_INCLUDES}/metis.h" _metis_version_header) + + string(REGEX MATCH "define[ \t]+METIS_VER_MAJOR[ \t]+([0-9]+)" _metis_major_version_match "${_metis_version_header}") + set(METIS_MAJOR_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+METIS_VER_MINOR[ \t]+([0-9]+)" _metis_minor_version_match "${_metis_version_header}") + set(METIS_MINOR_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+METIS_VER_SUBMINOR[ \t]+([0-9]+)" _metis_subminor_version_match "${_metis_version_header}") + set(METIS_SUBMINOR_VERSION "${CMAKE_MATCH_1}") + if(NOT METIS_MAJOR_VERSION) + message(STATUS "Could not determine Metis version. Assuming version 4.0.0") + set(METIS_VERSION 4.0.0) + else() + set(METIS_VERSION ${METIS_MAJOR_VERSION}.${METIS_MINOR_VERSION}.${METIS_SUBMINOR_VERSION}) + endif() + if(${METIS_VERSION} VERSION_LESS ${Metis_FIND_VERSION}) + set(METIS_VERSION_OK FALSE) + else() + set(METIS_VERSION_OK TRUE) + endif() + + if(NOT METIS_VERSION_OK) + message(STATUS "Metis version ${METIS_VERSION} found in ${METIS_INCLUDES}, " + "but at least version ${Metis_FIND_VERSION} is required") + endif(NOT METIS_VERSION_OK) +endmacro(_metis_check_version) + + if(METIS_INCLUDES AND Metis_FIND_VERSION) + _metis_check_version() + else() + set(METIS_VERSION_OK TRUE) + endif() + + +find_library(METIS_LIBRARIES metis PATHS $ENV{METISDIR} ${LIB_INSTALL_DIR} PATH_SUFFIXES lib) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(METIS DEFAULT_MSG + METIS_INCLUDES METIS_LIBRARIES METIS_VERSION_OK) + +mark_as_advanced(METIS_INCLUDES METIS_LIBRARIES) diff --git a/deps/eigen-3.2.1/cmake/FindPastix.cmake b/deps/eigen-3.2.8/cmake/FindPastix.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindPastix.cmake rename to deps/eigen-3.2.8/cmake/FindPastix.cmake diff --git a/deps/eigen-3.2.1/cmake/FindSPQR.cmake b/deps/eigen-3.2.8/cmake/FindSPQR.cmake similarity index 78% rename from deps/eigen-3.2.1/cmake/FindSPQR.cmake rename to deps/eigen-3.2.8/cmake/FindSPQR.cmake index 794c212a..1e958c3c 100644 --- a/deps/eigen-3.2.1/cmake/FindSPQR.cmake +++ b/deps/eigen-3.2.8/cmake/FindSPQR.cmake @@ -26,7 +26,12 @@ if(SPQR_LIBRARIES) find_library(SUITESPARSE_LIBRARY SuiteSparse PATHS $ENV{SPQRDIR} ${LIB_INSTALL_DIR}) if (SUITESPARSE_LIBRARY) set(SPQR_LIBRARIES ${SPQR_LIBRARIES} ${SUITESPARSE_LIBRARY}) - endif (SUITESPARSE_LIBRARY) + endif() + + find_library(CHOLMOD_LIBRARY cholmod PATHS $ENV{UMFPACK_LIBDIR} $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR}) + if(CHOLMOD_LIBRARY) + set(SPQR_LIBRARIES ${SPQR_LIBRARIES} ${CHOLMOD_LIBRARY}) + endif() endif(SPQR_LIBRARIES) diff --git a/deps/eigen-3.2.1/cmake/FindScotch.cmake b/deps/eigen-3.2.8/cmake/FindScotch.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindScotch.cmake rename to deps/eigen-3.2.8/cmake/FindScotch.cmake diff --git a/deps/eigen-3.2.1/cmake/FindStandardMathLibrary.cmake b/deps/eigen-3.2.8/cmake/FindStandardMathLibrary.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindStandardMathLibrary.cmake rename to deps/eigen-3.2.8/cmake/FindStandardMathLibrary.cmake diff --git a/deps/eigen-3.2.1/cmake/FindSuperLU.cmake b/deps/eigen-3.2.8/cmake/FindSuperLU.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/FindSuperLU.cmake rename to deps/eigen-3.2.8/cmake/FindSuperLU.cmake diff --git a/deps/eigen-3.2.1/cmake/FindUmfpack.cmake b/deps/eigen-3.2.8/cmake/FindUmfpack.cmake similarity index 78% rename from deps/eigen-3.2.1/cmake/FindUmfpack.cmake rename to deps/eigen-3.2.8/cmake/FindUmfpack.cmake index 16b046cd..53cf0b49 100644 --- a/deps/eigen-3.2.1/cmake/FindUmfpack.cmake +++ b/deps/eigen-3.2.8/cmake/FindUmfpack.cmake @@ -20,24 +20,29 @@ find_library(UMFPACK_LIBRARIES umfpack PATHS $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR} if(UMFPACK_LIBRARIES) - if (NOT UMFPACK_LIBDIR) + if(NOT UMFPACK_LIBDIR) get_filename_component(UMFPACK_LIBDIR ${UMFPACK_LIBRARIES} PATH) endif(NOT UMFPACK_LIBDIR) find_library(COLAMD_LIBRARY colamd PATHS ${UMFPACK_LIBDIR} $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR}) - if (COLAMD_LIBRARY) + if(COLAMD_LIBRARY) set(UMFPACK_LIBRARIES ${UMFPACK_LIBRARIES} ${COLAMD_LIBRARY}) - endif (COLAMD_LIBRARY) + endif () find_library(AMD_LIBRARY amd PATHS ${UMFPACK_LIBDIR} $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR}) - if (AMD_LIBRARY) + if(AMD_LIBRARY) set(UMFPACK_LIBRARIES ${UMFPACK_LIBRARIES} ${AMD_LIBRARY}) - endif (AMD_LIBRARY) + endif () find_library(SUITESPARSE_LIBRARY SuiteSparse PATHS ${UMFPACK_LIBDIR} $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR}) - if (SUITESPARSE_LIBRARY) + if(SUITESPARSE_LIBRARY) set(UMFPACK_LIBRARIES ${UMFPACK_LIBRARIES} ${SUITESPARSE_LIBRARY}) - endif (SUITESPARSE_LIBRARY) + endif () + + find_library(CHOLMOD_LIBRARY cholmod PATHS $ENV{UMFPACK_LIBDIR} $ENV{UMFPACKDIR} ${LIB_INSTALL_DIR}) + if(CHOLMOD_LIBRARY) + set(UMFPACK_LIBRARIES ${UMFPACK_LIBRARIES} ${CHOLMOD_LIBRARY}) + endif() endif(UMFPACK_LIBRARIES) @@ -45,4 +50,4 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(UMFPACK DEFAULT_MSG UMFPACK_INCLUDES UMFPACK_LIBRARIES) -mark_as_advanced(UMFPACK_INCLUDES UMFPACK_LIBRARIES AMD_LIBRARY COLAMD_LIBRARY SUITESPARSE_LIBRARY) +mark_as_advanced(UMFPACK_INCLUDES UMFPACK_LIBRARIES AMD_LIBRARY COLAMD_LIBRARY CHOLMOD_LIBRARY SUITESPARSE_LIBRARY) diff --git a/deps/eigen-3.2.1/cmake/RegexUtils.cmake b/deps/eigen-3.2.8/cmake/RegexUtils.cmake similarity index 100% rename from deps/eigen-3.2.1/cmake/RegexUtils.cmake rename to deps/eigen-3.2.8/cmake/RegexUtils.cmake diff --git a/deps/eigen-3.2.1/cmake/language_support.cmake b/deps/eigen-3.2.8/cmake/language_support.cmake similarity index 97% rename from deps/eigen-3.2.1/cmake/language_support.cmake rename to deps/eigen-3.2.8/cmake/language_support.cmake index d687b71f..231f7ff7 100644 --- a/deps/eigen-3.2.1/cmake/language_support.cmake +++ b/deps/eigen-3.2.8/cmake/language_support.cmake @@ -33,7 +33,7 @@ function(workaround_9220 language language_works) file(WRITE ${CMAKE_BINARY_DIR}/language_tests/${language}/CMakeLists.txt ${text}) execute_process( - COMMAND ${CMAKE_COMMAND} . + COMMAND ${CMAKE_COMMAND} . -G "${CMAKE_GENERATOR}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language} RESULT_VARIABLE return_code OUTPUT_QUIET diff --git a/deps/eigen-3.2.1/debug/gdb/__init__.py b/deps/eigen-3.2.8/debug/gdb/__init__.py similarity index 100% rename from deps/eigen-3.2.1/debug/gdb/__init__.py rename to deps/eigen-3.2.8/debug/gdb/__init__.py diff --git a/deps/eigen-3.2.1/debug/gdb/printers.py b/deps/eigen-3.2.8/debug/gdb/printers.py similarity index 100% rename from deps/eigen-3.2.1/debug/gdb/printers.py rename to deps/eigen-3.2.8/debug/gdb/printers.py diff --git a/deps/eigen-3.2.1/debug/msvc/eigen.natvis b/deps/eigen-3.2.8/debug/msvc/eigen.natvis similarity index 100% rename from deps/eigen-3.2.1/debug/msvc/eigen.natvis rename to deps/eigen-3.2.8/debug/msvc/eigen.natvis diff --git a/deps/eigen-3.2.1/debug/msvc/eigen_autoexp_part.dat b/deps/eigen-3.2.8/debug/msvc/eigen_autoexp_part.dat similarity index 100% rename from deps/eigen-3.2.1/debug/msvc/eigen_autoexp_part.dat rename to deps/eigen-3.2.8/debug/msvc/eigen_autoexp_part.dat diff --git a/deps/eigen-3.2.1/demos/CMakeLists.txt b/deps/eigen-3.2.8/demos/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/demos/CMakeLists.txt rename to deps/eigen-3.2.8/demos/CMakeLists.txt diff --git a/deps/eigen-3.2.1/demos/mandelbrot/CMakeLists.txt b/deps/eigen-3.2.8/demos/mandelbrot/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/demos/mandelbrot/CMakeLists.txt rename to deps/eigen-3.2.8/demos/mandelbrot/CMakeLists.txt diff --git a/deps/eigen-3.2.1/demos/mandelbrot/README b/deps/eigen-3.2.8/demos/mandelbrot/README similarity index 100% rename from deps/eigen-3.2.1/demos/mandelbrot/README rename to deps/eigen-3.2.8/demos/mandelbrot/README diff --git a/deps/eigen-3.2.1/demos/mandelbrot/mandelbrot.cpp b/deps/eigen-3.2.8/demos/mandelbrot/mandelbrot.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/mandelbrot/mandelbrot.cpp rename to deps/eigen-3.2.8/demos/mandelbrot/mandelbrot.cpp diff --git a/deps/eigen-3.2.1/demos/mandelbrot/mandelbrot.h b/deps/eigen-3.2.8/demos/mandelbrot/mandelbrot.h similarity index 100% rename from deps/eigen-3.2.1/demos/mandelbrot/mandelbrot.h rename to deps/eigen-3.2.8/demos/mandelbrot/mandelbrot.h diff --git a/deps/eigen-3.2.1/demos/mix_eigen_and_c/README b/deps/eigen-3.2.8/demos/mix_eigen_and_c/README similarity index 100% rename from deps/eigen-3.2.1/demos/mix_eigen_and_c/README rename to deps/eigen-3.2.8/demos/mix_eigen_and_c/README diff --git a/deps/eigen-3.2.1/demos/mix_eigen_and_c/binary_library.cpp b/deps/eigen-3.2.8/demos/mix_eigen_and_c/binary_library.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/mix_eigen_and_c/binary_library.cpp rename to deps/eigen-3.2.8/demos/mix_eigen_and_c/binary_library.cpp diff --git a/deps/eigen-3.2.1/demos/mix_eigen_and_c/binary_library.h b/deps/eigen-3.2.8/demos/mix_eigen_and_c/binary_library.h similarity index 100% rename from deps/eigen-3.2.1/demos/mix_eigen_and_c/binary_library.h rename to deps/eigen-3.2.8/demos/mix_eigen_and_c/binary_library.h diff --git a/deps/eigen-3.2.1/demos/mix_eigen_and_c/example.c b/deps/eigen-3.2.8/demos/mix_eigen_and_c/example.c similarity index 100% rename from deps/eigen-3.2.1/demos/mix_eigen_and_c/example.c rename to deps/eigen-3.2.8/demos/mix_eigen_and_c/example.c diff --git a/deps/eigen-3.2.1/demos/opengl/CMakeLists.txt b/deps/eigen-3.2.8/demos/opengl/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/CMakeLists.txt rename to deps/eigen-3.2.8/demos/opengl/CMakeLists.txt diff --git a/deps/eigen-3.2.1/demos/opengl/README b/deps/eigen-3.2.8/demos/opengl/README similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/README rename to deps/eigen-3.2.8/demos/opengl/README diff --git a/deps/eigen-3.2.1/demos/opengl/camera.cpp b/deps/eigen-3.2.8/demos/opengl/camera.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/camera.cpp rename to deps/eigen-3.2.8/demos/opengl/camera.cpp diff --git a/deps/eigen-3.2.1/demos/opengl/camera.h b/deps/eigen-3.2.8/demos/opengl/camera.h similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/camera.h rename to deps/eigen-3.2.8/demos/opengl/camera.h diff --git a/deps/eigen-3.2.1/demos/opengl/gpuhelper.cpp b/deps/eigen-3.2.8/demos/opengl/gpuhelper.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/gpuhelper.cpp rename to deps/eigen-3.2.8/demos/opengl/gpuhelper.cpp diff --git a/deps/eigen-3.2.1/demos/opengl/gpuhelper.h b/deps/eigen-3.2.8/demos/opengl/gpuhelper.h similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/gpuhelper.h rename to deps/eigen-3.2.8/demos/opengl/gpuhelper.h diff --git a/deps/eigen-3.2.1/demos/opengl/icosphere.cpp b/deps/eigen-3.2.8/demos/opengl/icosphere.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/icosphere.cpp rename to deps/eigen-3.2.8/demos/opengl/icosphere.cpp diff --git a/deps/eigen-3.2.1/demos/opengl/icosphere.h b/deps/eigen-3.2.8/demos/opengl/icosphere.h similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/icosphere.h rename to deps/eigen-3.2.8/demos/opengl/icosphere.h diff --git a/deps/eigen-3.2.1/demos/opengl/quaternion_demo.cpp b/deps/eigen-3.2.8/demos/opengl/quaternion_demo.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/quaternion_demo.cpp rename to deps/eigen-3.2.8/demos/opengl/quaternion_demo.cpp diff --git a/deps/eigen-3.2.1/demos/opengl/quaternion_demo.h b/deps/eigen-3.2.8/demos/opengl/quaternion_demo.h similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/quaternion_demo.h rename to deps/eigen-3.2.8/demos/opengl/quaternion_demo.h diff --git a/deps/eigen-3.2.1/demos/opengl/trackball.cpp b/deps/eigen-3.2.8/demos/opengl/trackball.cpp similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/trackball.cpp rename to deps/eigen-3.2.8/demos/opengl/trackball.cpp diff --git a/deps/eigen-3.2.1/demos/opengl/trackball.h b/deps/eigen-3.2.8/demos/opengl/trackball.h similarity index 100% rename from deps/eigen-3.2.1/demos/opengl/trackball.h rename to deps/eigen-3.2.8/demos/opengl/trackball.h diff --git a/deps/eigen-3.2.1/doc/A05_PortingFrom2To3.dox b/deps/eigen-3.2.8/doc/A05_PortingFrom2To3.dox similarity index 100% rename from deps/eigen-3.2.1/doc/A05_PortingFrom2To3.dox rename to deps/eigen-3.2.8/doc/A05_PortingFrom2To3.dox diff --git a/deps/eigen-3.2.1/doc/A10_Eigen2SupportModes.dox b/deps/eigen-3.2.8/doc/A10_Eigen2SupportModes.dox similarity index 100% rename from deps/eigen-3.2.1/doc/A10_Eigen2SupportModes.dox rename to deps/eigen-3.2.8/doc/A10_Eigen2SupportModes.dox diff --git a/deps/eigen-3.2.1/doc/AsciiQuickReference.txt b/deps/eigen-3.2.8/doc/AsciiQuickReference.txt similarity index 94% rename from deps/eigen-3.2.1/doc/AsciiQuickReference.txt rename to deps/eigen-3.2.8/doc/AsciiQuickReference.txt index 694d3248..b9f497f8 100644 --- a/deps/eigen-3.2.1/doc/AsciiQuickReference.txt +++ b/deps/eigen-3.2.8/doc/AsciiQuickReference.txt @@ -41,8 +41,8 @@ MatrixXd::Ones(rows,cols) // ones(rows,cols) C.setOnes(rows,cols) // C = ones(rows,cols) MatrixXd::Random(rows,cols) // rand(rows,cols)*2-1 // MatrixXd::Random returns uniform random numbers in (-1, 1). C.setRandom(rows,cols) // C = rand(rows,cols)*2-1 -VectorXd::LinSpace(size,low,high) // linspace(low,high,size)' -v.setLinSpace(size,low,high) // v = linspace(low,high,size)' +VectorXd::LinSpaced(size,low,high) // linspace(low,high,size)' +v.setLinSpaced(size,low,high) // v = linspace(low,high,size)' // Matrix slicing and blocks. All expressions listed here are read/write. @@ -67,10 +67,10 @@ P.rightCols() // P(:, end-cols+1:end) P.rightCols(cols) // P(:, end-cols+1:end) P.topRows() // P(1:rows, :) P.topRows(rows) // P(1:rows, :) -P.middleRows(i) // P(:, i+1:i+rows) -P.middleRows(i, rows) // P(:, i+1:i+rows) -P.bottomRows() // P(:, end-rows+1:end) -P.bottomRows(rows) // P(:, end-rows+1:end) +P.middleRows(i) // P(i+1:i+rows, :) +P.middleRows(i, rows) // P(i+1:i+rows, :) +P.bottomRows() // P(end-rows+1:end, :) +P.bottomRows(rows) // P(end-rows+1:end, :) P.topLeftCorner(rows, cols) // P(1:rows, 1:cols) P.topRightCorner(rows, cols) // P(1:rows, end-cols+1:end) P.bottomLeftCorner(rows, cols) // P(end-rows+1:end, 1:cols) @@ -91,6 +91,8 @@ R.adjoint() // R' R.transpose() // R.' or conj(R') R.diagonal() // diag(R) x.asDiagonal() // diag(x) +R.transpose().colwise().reverse(); // rot90(R) +R.conjugate() // conj(R) // All the same as Matlab, but matlab doesn't have *= style operators. // Matrix-vector. Matrix-matrix. Matrix-scalar. @@ -167,6 +169,8 @@ x.cross(y) // cross(x, y) Requires #include A.cast(); // double(A) A.cast(); // single(A) A.cast(); // int32(A) +A.real(); // real(A) +A.imag(); // imag(A) // if the original type equals destination type, no work is done // Note that for most operations Eigen requires all operands to have the same type: diff --git a/deps/eigen-3.2.1/doc/B01_Experimental.dox b/deps/eigen-3.2.8/doc/B01_Experimental.dox similarity index 100% rename from deps/eigen-3.2.1/doc/B01_Experimental.dox rename to deps/eigen-3.2.8/doc/B01_Experimental.dox diff --git a/deps/eigen-3.2.1/doc/CMakeLists.txt b/deps/eigen-3.2.8/doc/CMakeLists.txt similarity index 92% rename from deps/eigen-3.2.1/doc/CMakeLists.txt rename to deps/eigen-3.2.8/doc/CMakeLists.txt index 8a493031..02790ee4 100644 --- a/deps/eigen-3.2.1/doc/CMakeLists.txt +++ b/deps/eigen-3.2.8/doc/CMakeLists.txt @@ -89,9 +89,11 @@ add_dependencies(doc-unsupported-prerequisites unsupported_snippets unsupported_ add_custom_target(doc ALL COMMAND doxygen COMMAND doxygen Doxyfile-unsupported + COMMAND ${CMAKE_COMMAND} -E copy ${Eigen_BINARY_DIR}/doc/html/group__TopicUnalignedArrayAssert.html ${Eigen_BINARY_DIR}/doc/html/TopicUnalignedArrayAssert.html COMMAND ${CMAKE_COMMAND} -E rename html eigen-doc COMMAND ${CMAKE_COMMAND} -E remove eigen-doc/eigen-doc.tgz - COMMAND ${CMAKE_COMMAND} -E tar cfz eigen-doc/eigen-doc.tgz eigen-doc + COMMAND ${CMAKE_COMMAND} -E tar cfz eigen-doc.tgz eigen-doc + COMMAND ${CMAKE_COMMAND} -E rename eigen-doc.tgz eigen-doc/eigen-doc.tgz COMMAND ${CMAKE_COMMAND} -E rename eigen-doc html WORKING_DIRECTORY ${Eigen_BINARY_DIR}/doc) diff --git a/deps/eigen-3.2.1/doc/ClassHierarchy.dox b/deps/eigen-3.2.8/doc/ClassHierarchy.dox similarity index 100% rename from deps/eigen-3.2.1/doc/ClassHierarchy.dox rename to deps/eigen-3.2.8/doc/ClassHierarchy.dox diff --git a/deps/eigen-3.2.1/doc/CustomizingEigen.dox b/deps/eigen-3.2.8/doc/CustomizingEigen.dox similarity index 100% rename from deps/eigen-3.2.1/doc/CustomizingEigen.dox rename to deps/eigen-3.2.8/doc/CustomizingEigen.dox diff --git a/deps/eigen-3.2.1/doc/Doxyfile.in b/deps/eigen-3.2.8/doc/Doxyfile.in similarity index 99% rename from deps/eigen-3.2.1/doc/Doxyfile.in rename to deps/eigen-3.2.8/doc/Doxyfile.in index 1a2603b0..696dd2af 100644 --- a/deps/eigen-3.2.1/doc/Doxyfile.in +++ b/deps/eigen-3.2.8/doc/Doxyfile.in @@ -222,7 +222,7 @@ ALIASES = "only_for_vectors=This is only for vectors (either row- "note_about_using_kernel_to_study_multiple_solutions=If you need a complete analysis of the space of solutions, take the one solution obtained by this method and add to it elements of the kernel, as determined by kernel()." \ "note_about_checking_solutions=This method just tries to find as good a solution as possible. If you want to check whether a solution exists or if it is accurate, just call this function to get a result and then compute the error of this result, or use MatrixBase::isApprox() directly, for instance like this: \code bool a_solution_exists = (A*result).isApprox(b, precision); \endcode This method avoids dividing by zero, so that the non-existence of a solution doesn't by itself mean that you'll get \c inf or \c nan values." \ "note_try_to_help_rvo=This function returns the result by value. In order to make that efficient, it is implemented as just a return statement using a special constructor, hopefully allowing the compiler to perform a RVO (return value optimization)." \ - "nonstableyet=\warning This is not considered to be part of the stable public API yet. Changes may happen in future releases. See \ref Experimental \"Experimental parts of Eigen\" + "nonstableyet=\warning This is not considered to be part of the stable public API yet. Changes may happen in future releases. See \ref Experimental \"Experimental parts of Eigen\"" ALIASES += "eigenAutoToc= " ALIASES += "eigenManualPage=\defgroup" @@ -315,7 +315,7 @@ IDL_PROPERTY_SUPPORT = YES # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. -DISTRIBUTE_GROUP_DOC = NO +DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a @@ -365,7 +365,7 @@ TYPEDEF_HIDES_STRUCT = NO # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. -SYMBOL_CACHE_SIZE = 0 +# SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given @@ -562,7 +562,7 @@ GENERATE_BUGLIST = NO # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. -GENERATE_DEPRECATEDLIST= NO +GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. @@ -1465,13 +1465,13 @@ XML_OUTPUT = xml # which can be used by a validating XML parser to check the # syntax of the XML files. -XML_SCHEMA = +# XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. -XML_DTD = +# XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting @@ -1699,7 +1699,7 @@ DOT_NUM_THREADS = 0 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. -DOT_FONTNAME = FreeSans +DOT_FONTNAME = # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. diff --git a/deps/eigen-3.2.1/doc/Eigen_Silly_Professor_64x64.png b/deps/eigen-3.2.8/doc/Eigen_Silly_Professor_64x64.png similarity index 100% rename from deps/eigen-3.2.1/doc/Eigen_Silly_Professor_64x64.png rename to deps/eigen-3.2.8/doc/Eigen_Silly_Professor_64x64.png diff --git a/deps/eigen-3.2.1/doc/FixedSizeVectorizable.dox b/deps/eigen-3.2.8/doc/FixedSizeVectorizable.dox similarity index 100% rename from deps/eigen-3.2.1/doc/FixedSizeVectorizable.dox rename to deps/eigen-3.2.8/doc/FixedSizeVectorizable.dox diff --git a/deps/eigen-3.2.1/doc/FunctionsTakingEigenTypes.dox b/deps/eigen-3.2.8/doc/FunctionsTakingEigenTypes.dox similarity index 100% rename from deps/eigen-3.2.1/doc/FunctionsTakingEigenTypes.dox rename to deps/eigen-3.2.8/doc/FunctionsTakingEigenTypes.dox diff --git a/deps/eigen-3.2.1/doc/HiPerformance.dox b/deps/eigen-3.2.8/doc/HiPerformance.dox similarity index 100% rename from deps/eigen-3.2.1/doc/HiPerformance.dox rename to deps/eigen-3.2.8/doc/HiPerformance.dox diff --git a/deps/eigen-3.2.1/doc/InsideEigenExample.dox b/deps/eigen-3.2.8/doc/InsideEigenExample.dox similarity index 100% rename from deps/eigen-3.2.1/doc/InsideEigenExample.dox rename to deps/eigen-3.2.8/doc/InsideEigenExample.dox diff --git a/deps/eigen-3.2.1/doc/Manual.dox b/deps/eigen-3.2.8/doc/Manual.dox similarity index 98% rename from deps/eigen-3.2.1/doc/Manual.dox rename to deps/eigen-3.2.8/doc/Manual.dox index 3367982c..52427f06 100644 --- a/deps/eigen-3.2.1/doc/Manual.dox +++ b/deps/eigen-3.2.8/doc/Manual.dox @@ -11,6 +11,7 @@ namespace Eigen { - \subpage TopicCustomizingEigen - \subpage TopicMultiThreading - \subpage TopicUsingIntelMKL + - \subpage TopicPitfalls - \subpage TopicTemplateKeyword - \subpage UserManual_UnderstandingEigen */ @@ -120,6 +121,8 @@ namespace Eigen { \ingroup Sparse_chapter */ /** \addtogroup TopicSparseSystems \ingroup Sparse_chapter */ +/** \addtogroup MatrixfreeSolverExample + \ingroup Sparse_chapter */ /** \addtogroup Sparse_Reference \ingroup Sparse_chapter */ diff --git a/deps/eigen-3.2.8/doc/MatrixfreeSolverExample.dox b/deps/eigen-3.2.8/doc/MatrixfreeSolverExample.dox new file mode 100644 index 00000000..9921c726 --- /dev/null +++ b/deps/eigen-3.2.8/doc/MatrixfreeSolverExample.dox @@ -0,0 +1,21 @@ + +namespace Eigen { + +/** + +\eigenManualPage MatrixfreeSolverExample Matrix-free solvers + +Iterative solvers such as ConjugateGradient and BiCGSTAB can be used in a matrix free context. To this end, user must provide a wrapper class inheriting EigenBase<> and implementing the following methods: + - Index rows() and Index cols(): returns number of rows and columns respectively + - operator* with and Eigen dense column vector + - resize(rows,cols): needed for source compatibility (can stay empty) + +Eigen::internal::traits<> must also be specialized for the wrapper type. + +For efficiency purpose, one might also want to provide a custom preconditioner. Here is an example using ConjugateGradient and implementing also a custom Jacobi preconditioner: +\include matrixfree_cg.cpp +Output: \verbinclude matrixfree_cg.out + +*/ + +} \ No newline at end of file diff --git a/deps/eigen-3.2.1/doc/Overview.dox b/deps/eigen-3.2.8/doc/Overview.dox similarity index 100% rename from deps/eigen-3.2.1/doc/Overview.dox rename to deps/eigen-3.2.8/doc/Overview.dox diff --git a/deps/eigen-3.2.1/doc/PassingByValue.dox b/deps/eigen-3.2.8/doc/PassingByValue.dox similarity index 100% rename from deps/eigen-3.2.1/doc/PassingByValue.dox rename to deps/eigen-3.2.8/doc/PassingByValue.dox diff --git a/deps/eigen-3.2.8/doc/Pitfalls.dox b/deps/eigen-3.2.8/doc/Pitfalls.dox new file mode 100644 index 00000000..cf42effe --- /dev/null +++ b/deps/eigen-3.2.8/doc/Pitfalls.dox @@ -0,0 +1,38 @@ +namespace Eigen { + +/** \page TopicPitfalls Common pitfalls + +\section TopicPitfalls_template_keyword Compilation error with template methods + +See this \link TopicTemplateKeyword page \endlink. + +\section TopicPitfalls_auto_keyword C++11 and the auto keyword + +In short: do not use the auto keywords with Eigen's expressions, unless you are 100% sure about what you are doing. In particular, do not use the auto keyword as a replacement for a Matrix<> type. Here is an example: + +\code +MatrixXd A, B; +auto C = A*B; +for(...) { ... w = C * v; ...} +\endcode + +In this example, the type of C is not a MatrixXd but an abstract expression representing a matrix product and storing references to A and B. Therefore, the product of A*B will be carried out multiple times, once per iteration of the for loop. Moreover, if the coefficients of A or B change during the iteration, then C will evaluate to different values. + +Here is another example leading to a segfault: +\code +auto C = ((A+B).eval()).transpose(); +// do something with C +\endcode +The problem is that eval() returns a temporary object (in this case a MatrixXd) which is then referenced by the Transpose<> expression. However, this temporary is deleted right after the first line, and there the C expression reference a dead object. The same issue might occur when sub expressions are automatically evaluated by Eigen as in the following example: +\code +VectorXd u, v; +auto C = u + (A*v).normalized(); +// do something with C +\endcode +where the normalized() method has to evaluate the expensive product A*v to avoid evaluating it twice. On the other hand, the following example is perfectly fine: +\code +auto C = (u + (A*v).normalized()).eval(); +\endcode +In this case, C will be a regular VectorXd object. +*/ +} diff --git a/deps/eigen-3.2.1/doc/PreprocessorDirectives.dox b/deps/eigen-3.2.8/doc/PreprocessorDirectives.dox similarity index 92% rename from deps/eigen-3.2.1/doc/PreprocessorDirectives.dox rename to deps/eigen-3.2.8/doc/PreprocessorDirectives.dox index 981083e9..cfaba35d 100644 --- a/deps/eigen-3.2.1/doc/PreprocessorDirectives.dox +++ b/deps/eigen-3.2.8/doc/PreprocessorDirectives.dox @@ -62,6 +62,8 @@ run time. However, these assertions do cost time and can thus be turned off. expect that any objects passed to it are aligned. This will turn off vectorization. Not defined by default. - \b EIGEN_DONT_ALIGN_STATICALLY - disables alignment of arrays on the stack. Not defined by default, unless \c EIGEN_DONT_ALIGN is defined. + - \b EIGEN_DONT_PARALLELIZE - if defined, this disables multi-threading. This is only relevant if you enabled OpenMP. + See \ref TopicMultiThreading for details. - \b EIGEN_DONT_VECTORIZE - disables explicit vectorization when defined. Not defined by default, unless alignment is disabled by %Eigen's platform test or the user defining \c EIGEN_DONT_ALIGN. - \b EIGEN_FAST_MATH - enables some optimizations which might affect the accuracy of the result. This currently @@ -69,7 +71,10 @@ run time. However, these assertions do cost time and can thus be turned off. Define it to 0 to disable. - \b EIGEN_UNROLLING_LIMIT - defines the size of a loop to enable meta unrolling. Set it to zero to disable unrolling. The size of a loop here is expressed in %Eigen's own notion of "number of FLOPS", it does not - correspond to the number of iterations or the number of instructions. The default is value 100. + correspond to the number of iterations or the number of instructions. The default is value 100. + - \b EIGEN_STACK_ALLOCATION_LIMIT - defines the maximum bytes for a buffer to be allocated on the stack. For internal + temporary buffers, dynamic memory allocation is employed as a fall back. For fixed-size matrices or arrays, exceeding + this threshold raises a compile time assertion. Use 0 to set no limit. Default is 128 KB. \section TopicPreprocessorDirectivesPlugins Plugins @@ -86,6 +91,7 @@ following macros are supported; none of them are defined by default. - \b EIGEN_MATRIX_PLUGIN - filename of plugin for extending the Matrix class. - \b EIGEN_MATRIXBASE_PLUGIN - filename of plugin for extending the MatrixBase class. - \b EIGEN_PLAINOBJECTBASE_PLUGIN - filename of plugin for extending the PlainObjectBase class. + - \b EIGEN_MAPBASE_PLUGIN - filename of plugin for extending the MapBase class. - \b EIGEN_QUATERNIONBASE_PLUGIN - filename of plugin for extending the QuaternionBase class. - \b EIGEN_SPARSEMATRIX_PLUGIN - filename of plugin for extending the SparseMatrix class. - \b EIGEN_SPARSEMATRIXBASE_PLUGIN - filename of plugin for extending the SparseMatrixBase class. diff --git a/deps/eigen-3.2.1/doc/QuickReference.dox b/deps/eigen-3.2.8/doc/QuickReference.dox similarity index 100% rename from deps/eigen-3.2.1/doc/QuickReference.dox rename to deps/eigen-3.2.8/doc/QuickReference.dox diff --git a/deps/eigen-3.2.1/doc/QuickStartGuide.dox b/deps/eigen-3.2.8/doc/QuickStartGuide.dox similarity index 100% rename from deps/eigen-3.2.1/doc/QuickStartGuide.dox rename to deps/eigen-3.2.8/doc/QuickStartGuide.dox diff --git a/deps/eigen-3.2.1/doc/SparseLinearSystems.dox b/deps/eigen-3.2.8/doc/SparseLinearSystems.dox similarity index 97% rename from deps/eigen-3.2.1/doc/SparseLinearSystems.dox rename to deps/eigen-3.2.8/doc/SparseLinearSystems.dox index c00be10d..051a02ed 100644 --- a/deps/eigen-3.2.1/doc/SparseLinearSystems.dox +++ b/deps/eigen-3.2.8/doc/SparseLinearSystems.dox @@ -35,17 +35,17 @@ They are summarized in the following table: Requires the PaStiX package, \b CeCILL-C optimized for tough problems and symmetric patterns CholmodSupernodalLLT\link CholmodSupport_Module CholmodSupport \endlinkDirect LLt factorizationSPDFill-in reducing, Leverage fast dense algebra - Requires the SuiteSparse package, \b GPL + Requires the SuiteSparse package, \b GPL UmfPackLU\link UmfPackSupport_Module UmfPackSupport \endlinkDirect LU factorizationSquareFill-in reducing, Leverage fast dense algebra - Requires the SuiteSparse package, \b GPL + Requires the SuiteSparse package, \b GPL SuperLU\link SuperLUSupport_Module SuperLUSupport \endlinkDirect LU factorizationSquareFill-in reducing, Leverage fast dense algebra Requires the SuperLU library, (BSD-like) SPQR\link SPQRSupport_Module SPQRSupport \endlink QR factorization Any, rectangularfill-in reducing, multithreaded, fast dense algebra - requires the SuiteSparse package, \b GPL recommended for linear least-squares problems, has a rank-revealing feature + requires the SuiteSparse package, \b GPL recommended for linear least-squares problems, has a rank-revealing feature Here \c SPD means symmetric positive definite. diff --git a/deps/eigen-3.2.1/doc/SparseQuickReference.dox b/deps/eigen-3.2.8/doc/SparseQuickReference.dox similarity index 74% rename from deps/eigen-3.2.1/doc/SparseQuickReference.dox rename to deps/eigen-3.2.8/doc/SparseQuickReference.dox index 4a33d0cc..e0a30edc 100644 --- a/deps/eigen-3.2.1/doc/SparseQuickReference.dox +++ b/deps/eigen-3.2.8/doc/SparseQuickReference.dox @@ -21,7 +21,7 @@ i.e either row major or column major. The default is column major. Most arithmet Resize/Reserve \code - sm1.resize(m,n); //Change sm1 to a m x n matrix. + sm1.resize(m,n); // Change sm1 to a m x n matrix. sm1.reserve(nnz); // Allocate room for nnz nonzeros elements. \endcode @@ -71,11 +71,10 @@ i.e either row major or column major. The default is column major. Most arithmet Constant or Random Insertion \code -sm1.setZero(); // Set the matrix with zero elements -sm1.setConstant(val); //Replace all the nonzero values with val +sm1.setZero(); \endcode - The matrix sm1 should have been created before ??? +Remove all non-zero coefficients @@ -152,10 +151,10 @@ It is easy to perform arithmetic operations on sparse matrices provided that the Permutation \code -perm.indices(); // Reference to the vector of indices +perm.indices(); // Reference to the vector of indices sm1.twistedBy(perm); // Permute rows and columns -sm2 = sm1 * perm; //Permute the columns -sm2 = perm * sm1; // Permute the columns +sm2 = sm1 * perm; // Permute the columns +sm2 = perm * sm1; // Permute the columns \endcode @@ -182,9 +181,9 @@ sm2 = perm * sm1; // Permute the columns \section sparseotherops Other supported operations - + + - + - - + + - + + - - - + + + - - +
Operations Code Notes
Code Notes
Sub-matrices
Sub-matrices \code sm1.block(startRow, startCol, rows, cols); @@ -194,25 +193,31 @@ sm2 = perm * sm1; // Permute the columns sm1.bottomLeftCorner( rows, cols); sm1.bottomRightCorner( rows, cols); \endcode - +Contrary to dense matrices, here all these methods are read-only.\n +See \ref TutorialSparse_SubMatrices and below for read-write sub-matrices. +
Range
Range
\code - sm1.innerVector(outer); - sm1.innerVectors(start, size); - sm1.leftCols(size); - sm2.rightCols(size); - sm1.middleRows(start, numRows); - sm1.middleCols(start, numCols); - sm1.col(j); + sm1.innerVector(outer); // RW + sm1.innerVectors(start, size); // RW + sm1.leftCols(size); // RW + sm2.rightCols(size); // RO because sm2 is row-major + sm1.middleRows(start, numRows); // RO becasue sm1 is column-major + sm1.middleCols(start, numCols); // RW + sm1.col(j); // RW \endcode A inner vector is either a row (for row-major) or a column (for column-major). As stated earlier, the evaluation can be done in a matrix with different storage order +A inner vector is either a row (for row-major) or a column (for column-major).\n +As stated earlier, for a read-write sub-matrix (RW), the evaluation can be done in a matrix with different storage order. +
Triangular and selfadjoint views
Triangular and selfadjoint views \code sm2 = sm1.triangularview(); @@ -223,26 +228,30 @@ sm2 = perm * sm1; // Permute the columns \code \endcode
Triangular solve
Triangular solve
\code dv2 = sm1.triangularView().solve(dv1); - dv2 = sm1.topLeftCorner(size, size).triangularView().solve(dv1); + dv2 = sm1.topLeftCorner(size, size) + .triangularView().solve(dv1); \endcode For general sparse solve, Use any suitable module described at \ref TopicSparseSystems
Low-level API
Low-level API \code -sm1.valuePtr(); // Pointer to the values -sm1.innerIndextr(); // Pointer to the indices. -sm1.outerIndexPtr(); //Pointer to the beginning of each inner vector +sm1.valuePtr(); // Pointer to the values +sm1.innerIndextr(); // Pointer to the indices. +sm1.outerIndexPtr(); // Pointer to the beginning of each inner vector \endcode If the matrix is not in compressed form, makeCompressed() should be called before. Note that these functions are mostly provided for interoperability purposes with external libraries. A better access to the values of the matrix is done by using the InnerIterator class as described in \link TutorialSparse the Tutorial Sparse \endlink section +If the matrix is not in compressed form, makeCompressed() should be called before.\n +Note that these functions are mostly provided for interoperability purposes with external libraries.\n +A better access to the values of the matrix is done by using the InnerIterator class as described in \link TutorialSparse the Tutorial Sparse \endlink section
*/ diff --git a/deps/eigen-3.2.1/doc/StlContainers.dox b/deps/eigen-3.2.8/doc/StlContainers.dox similarity index 100% rename from deps/eigen-3.2.1/doc/StlContainers.dox rename to deps/eigen-3.2.8/doc/StlContainers.dox diff --git a/deps/eigen-3.2.1/doc/StorageOrders.dox b/deps/eigen-3.2.8/doc/StorageOrders.dox similarity index 100% rename from deps/eigen-3.2.1/doc/StorageOrders.dox rename to deps/eigen-3.2.8/doc/StorageOrders.dox diff --git a/deps/eigen-3.2.1/doc/StructHavingEigenMembers.dox b/deps/eigen-3.2.8/doc/StructHavingEigenMembers.dox similarity index 100% rename from deps/eigen-3.2.1/doc/StructHavingEigenMembers.dox rename to deps/eigen-3.2.8/doc/StructHavingEigenMembers.dox diff --git a/deps/eigen-3.2.1/doc/TemplateKeyword.dox b/deps/eigen-3.2.8/doc/TemplateKeyword.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TemplateKeyword.dox rename to deps/eigen-3.2.8/doc/TemplateKeyword.dox diff --git a/deps/eigen-3.2.1/doc/TopicAliasing.dox b/deps/eigen-3.2.8/doc/TopicAliasing.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicAliasing.dox rename to deps/eigen-3.2.8/doc/TopicAliasing.dox diff --git a/deps/eigen-3.2.1/doc/TopicAssertions.dox b/deps/eigen-3.2.8/doc/TopicAssertions.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicAssertions.dox rename to deps/eigen-3.2.8/doc/TopicAssertions.dox diff --git a/deps/eigen-3.2.1/doc/TopicEigenExpressionTemplates.dox b/deps/eigen-3.2.8/doc/TopicEigenExpressionTemplates.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicEigenExpressionTemplates.dox rename to deps/eigen-3.2.8/doc/TopicEigenExpressionTemplates.dox diff --git a/deps/eigen-3.2.1/doc/TopicLazyEvaluation.dox b/deps/eigen-3.2.8/doc/TopicLazyEvaluation.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicLazyEvaluation.dox rename to deps/eigen-3.2.8/doc/TopicLazyEvaluation.dox diff --git a/deps/eigen-3.2.1/doc/TopicLinearAlgebraDecompositions.dox b/deps/eigen-3.2.8/doc/TopicLinearAlgebraDecompositions.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicLinearAlgebraDecompositions.dox rename to deps/eigen-3.2.8/doc/TopicLinearAlgebraDecompositions.dox diff --git a/deps/eigen-3.2.1/doc/TopicMultithreading.dox b/deps/eigen-3.2.8/doc/TopicMultithreading.dox similarity index 98% rename from deps/eigen-3.2.1/doc/TopicMultithreading.dox rename to deps/eigen-3.2.8/doc/TopicMultithreading.dox index f7d08266..7db2b0e0 100644 --- a/deps/eigen-3.2.1/doc/TopicMultithreading.dox +++ b/deps/eigen-3.2.8/doc/TopicMultithreading.dox @@ -17,7 +17,7 @@ You can control the number of thread that will be used using either the OpenMP A Unless setNbThreads has been called, Eigen uses the number of threads specified by OpenMP. You can restore this bahavior by calling \code setNbThreads(0); \endcode You can query the number of threads that will be used with: \code -n = Eigen::nbThreads(n); +n = Eigen::nbThreads( ); \endcode You can disable Eigen's multi threading at compile time by defining the EIGEN_DONT_PARALLELIZE preprocessor token. diff --git a/deps/eigen-3.2.1/doc/TopicResizing.dox b/deps/eigen-3.2.8/doc/TopicResizing.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicResizing.dox rename to deps/eigen-3.2.8/doc/TopicResizing.dox diff --git a/deps/eigen-3.2.1/doc/TopicScalarTypes.dox b/deps/eigen-3.2.8/doc/TopicScalarTypes.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicScalarTypes.dox rename to deps/eigen-3.2.8/doc/TopicScalarTypes.dox diff --git a/deps/eigen-3.2.1/doc/TopicVectorization.dox b/deps/eigen-3.2.8/doc/TopicVectorization.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TopicVectorization.dox rename to deps/eigen-3.2.8/doc/TopicVectorization.dox diff --git a/deps/eigen-3.2.1/doc/TutorialAdvancedInitialization.dox b/deps/eigen-3.2.8/doc/TutorialAdvancedInitialization.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialAdvancedInitialization.dox rename to deps/eigen-3.2.8/doc/TutorialAdvancedInitialization.dox diff --git a/deps/eigen-3.2.1/doc/TutorialArrayClass.dox b/deps/eigen-3.2.8/doc/TutorialArrayClass.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialArrayClass.dox rename to deps/eigen-3.2.8/doc/TutorialArrayClass.dox diff --git a/deps/eigen-3.2.1/doc/TutorialBlockOperations.dox b/deps/eigen-3.2.8/doc/TutorialBlockOperations.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialBlockOperations.dox rename to deps/eigen-3.2.8/doc/TutorialBlockOperations.dox diff --git a/deps/eigen-3.2.1/doc/TutorialGeometry.dox b/deps/eigen-3.2.8/doc/TutorialGeometry.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialGeometry.dox rename to deps/eigen-3.2.8/doc/TutorialGeometry.dox diff --git a/deps/eigen-3.2.1/doc/TutorialLinearAlgebra.dox b/deps/eigen-3.2.8/doc/TutorialLinearAlgebra.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialLinearAlgebra.dox rename to deps/eigen-3.2.8/doc/TutorialLinearAlgebra.dox diff --git a/deps/eigen-3.2.1/doc/TutorialMapClass.dox b/deps/eigen-3.2.8/doc/TutorialMapClass.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialMapClass.dox rename to deps/eigen-3.2.8/doc/TutorialMapClass.dox diff --git a/deps/eigen-3.2.1/doc/TutorialMatrixArithmetic.dox b/deps/eigen-3.2.8/doc/TutorialMatrixArithmetic.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialMatrixArithmetic.dox rename to deps/eigen-3.2.8/doc/TutorialMatrixArithmetic.dox diff --git a/deps/eigen-3.2.1/doc/TutorialMatrixClass.dox b/deps/eigen-3.2.8/doc/TutorialMatrixClass.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialMatrixClass.dox rename to deps/eigen-3.2.8/doc/TutorialMatrixClass.dox diff --git a/deps/eigen-3.2.1/doc/TutorialReductionsVisitorsBroadcasting.dox b/deps/eigen-3.2.8/doc/TutorialReductionsVisitorsBroadcasting.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialReductionsVisitorsBroadcasting.dox rename to deps/eigen-3.2.8/doc/TutorialReductionsVisitorsBroadcasting.dox diff --git a/deps/eigen-3.2.1/doc/TutorialSparse.dox b/deps/eigen-3.2.8/doc/TutorialSparse.dox similarity index 91% rename from deps/eigen-3.2.1/doc/TutorialSparse.dox rename to deps/eigen-3.2.8/doc/TutorialSparse.dox index 835c5935..ee206cc4 100644 --- a/deps/eigen-3.2.1/doc/TutorialSparse.dox +++ b/deps/eigen-3.2.8/doc/TutorialSparse.dox @@ -241,11 +241,11 @@ In the following \em sm denotes a sparse matrix, \em sv a sparse vector, \em dm sm1.real() sm1.imag() -sm1 0.5*sm1 sm1+sm2 sm1-sm2 sm1.cwiseProduct(sm2) \endcode -However, a strong restriction is that the storage orders must match. For instance, in the following example: +However, a strong restriction is that the storage orders must match. For instance, in the following example: \code sm4 = sm1 + sm2 + sm3; \endcode -sm1, sm2, and sm3 must all be row-major or all column major. +sm1, sm2, and sm3 must all be row-major or all column-major. On the other hand, there is no restriction on the target matrix sm4. For instance, this means that for computing \f$ A^T + A \f$, the matrix \f$ A^T \f$ must be evaluated into a temporary matrix of compatible storage order: \code @@ -253,12 +253,15 @@ SparseMatrix A, B; B = SparseMatrix(A.transpose()) + A; \endcode -Binary coefficient wise operators can also mix sparse and dense expressions: +Some binary coefficient-wise operators can also mix sparse and dense expressions: \code sm2 = sm1.cwiseProduct(dm1); -dm2 = sm1 + dm1; +dm1 += sm1; \endcode +However, it is not yet possible to add a sparse and a dense matrix as in dm2 = sm1 + dm1. +Please write this as the equivalent dm2 = dm1; dm2 += sm1 (we plan to lift this restriction +in the next release of %Eigen). %Sparse expressions also support transposition: \code @@ -304,6 +307,26 @@ sm2 = sm1.transpose() * P; \endcode +\subsection TutorialSparse_SubMatrices Block operations + +Regarding read-access, sparse matrices expose the same API than for dense matrices to access to sub-matrices such as blocks, columns, and rows. See \ref TutorialBlockOperations for a detailed introduction. +However, for performance reasons, writing to a sub-sparse-matrix is much more limited, and currently only contiguous sets of columns (resp. rows) of a column-major (resp. row-major) SparseMatrix are writable. Moreover, this information has to be known at compile-time, leaving out methods such as block(...) and corner*(...). The available API for write-access to a SparseMatrix are summarized below: +\code +SparseMatrix sm1; +sm1.col(j) = ...; +sm1.leftCols(ncols) = ...; +sm1.middleCols(j,ncols) = ...; +sm1.rightCols(ncols) = ...; + +SparseMatrix sm2; +sm2.row(i) = ...; +sm2.topRows(nrows) = ...; +sm2.middleRows(i,nrows) = ...; +sm2.bottomRows(nrows) = ...; +\endcode + +In addition, sparse matrices expose the SparseMatrixBase::innerVector() and SparseMatrixBase::innerVectors() methods, which are aliases to the col/middleCols methods for a column-major storage, and to the row/middleRows methods for a row-major storage. + \subsection TutorialSparse_TriangularSelfadjoint Triangular and selfadjoint views Just as with dense matrices, the triangularView() function can be used to address a triangular part of the matrix, and perform triangular solves with a dense right hand side: diff --git a/deps/eigen-3.2.1/doc/TutorialSparse_example_details.dox b/deps/eigen-3.2.8/doc/TutorialSparse_example_details.dox similarity index 100% rename from deps/eigen-3.2.1/doc/TutorialSparse_example_details.dox rename to deps/eigen-3.2.8/doc/TutorialSparse_example_details.dox diff --git a/deps/eigen-3.2.1/doc/UnalignedArrayAssert.dox b/deps/eigen-3.2.8/doc/UnalignedArrayAssert.dox similarity index 77% rename from deps/eigen-3.2.1/doc/UnalignedArrayAssert.dox rename to deps/eigen-3.2.8/doc/UnalignedArrayAssert.dox index 8c97d787..b0d6e18f 100644 --- a/deps/eigen-3.2.1/doc/UnalignedArrayAssert.dox +++ b/deps/eigen-3.2.8/doc/UnalignedArrayAssert.dox @@ -7,8 +7,8 @@ Hello! You are seeing this webpage because your program terminated on an asserti my_program: path/to/eigen/Eigen/src/Core/DenseStorage.h:44: Eigen::internal::matrix_array::internal::matrix_array() [with T = double, int Size = 2, int MatrixOptions = 2, bool Align = true]: -Assertion `(reinterpret_cast(array) & 0xf) == 0 && "this assertion -is explained here: http://eigen.tuxfamily.org/dox/UnalignedArrayAssert.html +Assertion `(reinterpret_cast(array) & (sizemask)) == 0 && "this assertion +is explained here: http://eigen.tuxfamily.org/dox/group__TopicUnalignedArrayAssert.html **** READ THIS WEB PAGE !!! ****"' failed. @@ -46,9 +46,9 @@ then you need to read this separate page: \ref TopicStructHavingEigenMembers "St Note that here, Eigen::Vector2d is only used as an example, more generally the issue arises for all \ref TopicFixedSizeVectorizable "fixed-size vectorizable Eigen types". -\section c2 Cause 2: STL Containers +\section c2 Cause 2: STL Containers or manual memory allocation -If you use STL Containers such as std::vector, std::map, ..., with Eigen objects, or with classes containing Eigen objects, like this, +If you use STL Containers such as std::vector, std::map, ..., with %Eigen objects, or with classes containing %Eigen objects, like this, \code std::vector my_vector; @@ -60,6 +60,8 @@ then you need to read this separate page: \ref TopicStlContainers "Using STL Con Note that here, Eigen::Matrix2f is only used as an example, more generally the issue arises for all \ref TopicFixedSizeVectorizable "fixed-size vectorizable Eigen types" and \ref TopicStructHavingEigenMembers "structures having such Eigen objects as member". +The same issue will be exhibited by any classes/functions by-passing operator new to allocate memory, that is, by performing custom memory allocation followed by calls to the placement new operator. This is for instance typically the case of \c std::make_shared or \c std::allocate_shared for which is the solution is to use an \ref aligned_allocator "aligned allocator" as detailed in the \ref TopicStlContainers "solution for STL containers". + \section c3 Cause 3: Passing Eigen objects by value If some function in your code is getting an Eigen object passed by value, like this, @@ -107,7 +109,10 @@ Two possibilities: 128-bit alignment code and thus preserves ABI compatibility, but completely disables vectorization. -For more information, see this FAQ. +If you want to know why defining EIGEN_DONT_VECTORIZE does not by itself disable 128-bit alignment and the assertion, here's the explanation: + +It doesn't disable the assertion, because otherwise code that runs fine without vectorization would suddenly crash when enabling vectorization. +It doesn't disable 128bit alignment, because that would mean that vectorized and non-vectorized code are not mutually ABI-compatible. This ABI compatibility is very important, even for people who develop only an in-house application, as for instance one may want to have in the same application a vectorized path and a non-vectorized path. */ diff --git a/deps/eigen-3.2.1/doc/UsingIntelMKL.dox b/deps/eigen-3.2.8/doc/UsingIntelMKL.dox similarity index 96% rename from deps/eigen-3.2.1/doc/UsingIntelMKL.dox rename to deps/eigen-3.2.8/doc/UsingIntelMKL.dox index 4b624a15..84db992b 100644 --- a/deps/eigen-3.2.1/doc/UsingIntelMKL.dox +++ b/deps/eigen-3.2.8/doc/UsingIntelMKL.dox @@ -40,7 +40,8 @@ Since Eigen version 3.1 and later, users can benefit from built-in Intel MKL opt Intel MKL provides highly optimized multi-threaded mathematical routines for x86-compatible architectures. Intel MKL is available on Linux, Mac and Windows for both Intel64 and IA32 architectures. -\warning Be aware that Intel® MKL is a proprietary software. It is the responsibility of the users to buy MKL licenses for their products. Moreover, the license of the user product has to allow linking to proprietary software that excludes any unmodified versions of the GPL. +\note +Intel® MKL is a proprietary software and it is the responsibility of users to buy or register for community (free) Intel MKL licenses for their products. Moreover, the license of the user product has to allow linking to proprietary software that excludes any unmodified versions of the GPL. Using Intel MKL through Eigen is easy: -# define the \c EIGEN_USE_MKL_ALL macro before including any Eigen's header diff --git a/deps/eigen-3.2.1/doc/WrongStackAlignment.dox b/deps/eigen-3.2.8/doc/WrongStackAlignment.dox similarity index 100% rename from deps/eigen-3.2.1/doc/WrongStackAlignment.dox rename to deps/eigen-3.2.8/doc/WrongStackAlignment.dox diff --git a/deps/eigen-3.2.1/doc/eigen_navtree_hacks.js b/deps/eigen-3.2.8/doc/eigen_navtree_hacks.js similarity index 100% rename from deps/eigen-3.2.1/doc/eigen_navtree_hacks.js rename to deps/eigen-3.2.8/doc/eigen_navtree_hacks.js diff --git a/deps/eigen-3.2.1/doc/eigendoxy.css b/deps/eigen-3.2.8/doc/eigendoxy.css similarity index 100% rename from deps/eigen-3.2.1/doc/eigendoxy.css rename to deps/eigen-3.2.8/doc/eigendoxy.css diff --git a/deps/eigen-3.2.1/doc/eigendoxy_footer.html.in b/deps/eigen-3.2.8/doc/eigendoxy_footer.html.in similarity index 100% rename from deps/eigen-3.2.1/doc/eigendoxy_footer.html.in rename to deps/eigen-3.2.8/doc/eigendoxy_footer.html.in diff --git a/deps/eigen-3.2.1/doc/eigendoxy_header.html.in b/deps/eigen-3.2.8/doc/eigendoxy_header.html.in similarity index 100% rename from deps/eigen-3.2.1/doc/eigendoxy_header.html.in rename to deps/eigen-3.2.8/doc/eigendoxy_header.html.in diff --git a/deps/eigen-3.2.1/doc/eigendoxy_layout.xml.in b/deps/eigen-3.2.8/doc/eigendoxy_layout.xml.in similarity index 100% rename from deps/eigen-3.2.1/doc/eigendoxy_layout.xml.in rename to deps/eigen-3.2.8/doc/eigendoxy_layout.xml.in diff --git a/deps/eigen-3.2.1/doc/eigendoxy_tabs.css b/deps/eigen-3.2.8/doc/eigendoxy_tabs.css similarity index 100% rename from deps/eigen-3.2.1/doc/eigendoxy_tabs.css rename to deps/eigen-3.2.8/doc/eigendoxy_tabs.css diff --git a/deps/eigen-3.2.1/doc/examples/.krazy b/deps/eigen-3.2.8/doc/examples/.krazy similarity index 100% rename from deps/eigen-3.2.1/doc/examples/.krazy rename to deps/eigen-3.2.8/doc/examples/.krazy diff --git a/deps/eigen-3.2.1/doc/examples/CMakeLists.txt b/deps/eigen-3.2.8/doc/examples/CMakeLists.txt similarity index 80% rename from deps/eigen-3.2.1/doc/examples/CMakeLists.txt rename to deps/eigen-3.2.8/doc/examples/CMakeLists.txt index 71b272a1..08cf8efd 100644 --- a/deps/eigen-3.2.1/doc/examples/CMakeLists.txt +++ b/deps/eigen-3.2.8/doc/examples/CMakeLists.txt @@ -6,12 +6,10 @@ foreach(example_src ${examples_SRCS}) if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) target_link_libraries(${example} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) endif() - get_target_property(example_executable - ${example} LOCATION) add_custom_command( TARGET ${example} POST_BUILD - COMMAND ${example_executable} + COMMAND ${example} ARGS >${CMAKE_CURRENT_BINARY_DIR}/${example}.out ) add_dependencies(all_examples ${example}) diff --git a/deps/eigen-3.2.1/doc/examples/DenseBase_middleCols_int.cpp b/deps/eigen-3.2.8/doc/examples/DenseBase_middleCols_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/DenseBase_middleCols_int.cpp rename to deps/eigen-3.2.8/doc/examples/DenseBase_middleCols_int.cpp diff --git a/deps/eigen-3.2.1/doc/examples/DenseBase_middleRows_int.cpp b/deps/eigen-3.2.8/doc/examples/DenseBase_middleRows_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/DenseBase_middleRows_int.cpp rename to deps/eigen-3.2.8/doc/examples/DenseBase_middleRows_int.cpp diff --git a/deps/eigen-3.2.1/doc/examples/DenseBase_template_int_middleCols.cpp b/deps/eigen-3.2.8/doc/examples/DenseBase_template_int_middleCols.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/DenseBase_template_int_middleCols.cpp rename to deps/eigen-3.2.8/doc/examples/DenseBase_template_int_middleCols.cpp diff --git a/deps/eigen-3.2.1/doc/examples/DenseBase_template_int_middleRows.cpp b/deps/eigen-3.2.8/doc/examples/DenseBase_template_int_middleRows.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/DenseBase_template_int_middleRows.cpp rename to deps/eigen-3.2.8/doc/examples/DenseBase_template_int_middleRows.cpp diff --git a/deps/eigen-3.2.1/doc/examples/MatrixBase_cwise_const.cpp b/deps/eigen-3.2.8/doc/examples/MatrixBase_cwise_const.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/MatrixBase_cwise_const.cpp rename to deps/eigen-3.2.8/doc/examples/MatrixBase_cwise_const.cpp diff --git a/deps/eigen-3.2.1/doc/examples/QuickStart_example.cpp b/deps/eigen-3.2.8/doc/examples/QuickStart_example.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/QuickStart_example.cpp rename to deps/eigen-3.2.8/doc/examples/QuickStart_example.cpp diff --git a/deps/eigen-3.2.1/doc/examples/QuickStart_example2_dynamic.cpp b/deps/eigen-3.2.8/doc/examples/QuickStart_example2_dynamic.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/QuickStart_example2_dynamic.cpp rename to deps/eigen-3.2.8/doc/examples/QuickStart_example2_dynamic.cpp diff --git a/deps/eigen-3.2.1/doc/examples/QuickStart_example2_fixed.cpp b/deps/eigen-3.2.8/doc/examples/QuickStart_example2_fixed.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/QuickStart_example2_fixed.cpp rename to deps/eigen-3.2.8/doc/examples/QuickStart_example2_fixed.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TemplateKeyword_flexible.cpp b/deps/eigen-3.2.8/doc/examples/TemplateKeyword_flexible.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TemplateKeyword_flexible.cpp rename to deps/eigen-3.2.8/doc/examples/TemplateKeyword_flexible.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TemplateKeyword_simple.cpp b/deps/eigen-3.2.8/doc/examples/TemplateKeyword_simple.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TemplateKeyword_simple.cpp rename to deps/eigen-3.2.8/doc/examples/TemplateKeyword_simple.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgComputeTwice.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgComputeTwice.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgComputeTwice.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgComputeTwice.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgExComputeSolveError.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgExComputeSolveError.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgExComputeSolveError.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgExComputeSolveError.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgExSolveLDLT.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgExSolveLDLT.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgExSolveLDLT.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgExSolveLDLT.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgInverseDeterminant.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgInverseDeterminant.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgInverseDeterminant.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgInverseDeterminant.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgRankRevealing.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgRankRevealing.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgRankRevealing.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgRankRevealing.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgSVDSolve.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgSVDSolve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgSVDSolve.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgSVDSolve.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp diff --git a/deps/eigen-3.2.1/doc/examples/TutorialLinAlgSetThreshold.cpp b/deps/eigen-3.2.8/doc/examples/TutorialLinAlgSetThreshold.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/TutorialLinAlgSetThreshold.cpp rename to deps/eigen-3.2.8/doc/examples/TutorialLinAlgSetThreshold.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_accessors.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_accessors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_accessors.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_accessors.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_addition.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_addition.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_addition.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_addition.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_cwise_other.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_cwise_other.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_cwise_other.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_cwise_other.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_interop.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_interop.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_interop.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_interop.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_mult.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_mult.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ArrayClass_mult.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ArrayClass_mult.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_block_assignment.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_block_assignment.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_block_assignment.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_block_assignment.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_colrow.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_colrow.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_colrow.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_colrow.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_corner.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_corner.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_corner.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_corner.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_print_block.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_print_block.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_print_block.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_print_block.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_vector.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_vector.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_BlockOperations_vector.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_BlockOperations_vector.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_PartialLU_solve.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_PartialLU_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_PartialLU_solve.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_PartialLU_solve.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_simple_example_dynamic_size.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_simple_example_dynamic_size.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_simple_example_dynamic_size.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_simple_example_dynamic_size.cpp diff --git a/deps/eigen-3.2.1/doc/examples/Tutorial_simple_example_fixed_size.cpp b/deps/eigen-3.2.8/doc/examples/Tutorial_simple_example_fixed_size.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/Tutorial_simple_example_fixed_size.cpp rename to deps/eigen-3.2.8/doc/examples/Tutorial_simple_example_fixed_size.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_Block.cpp b/deps/eigen-3.2.8/doc/examples/class_Block.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_Block.cpp rename to deps/eigen-3.2.8/doc/examples/class_Block.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_CwiseBinaryOp.cpp b/deps/eigen-3.2.8/doc/examples/class_CwiseBinaryOp.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_CwiseBinaryOp.cpp rename to deps/eigen-3.2.8/doc/examples/class_CwiseBinaryOp.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_CwiseUnaryOp.cpp b/deps/eigen-3.2.8/doc/examples/class_CwiseUnaryOp.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_CwiseUnaryOp.cpp rename to deps/eigen-3.2.8/doc/examples/class_CwiseUnaryOp.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_CwiseUnaryOp_ptrfun.cpp b/deps/eigen-3.2.8/doc/examples/class_CwiseUnaryOp_ptrfun.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_CwiseUnaryOp_ptrfun.cpp rename to deps/eigen-3.2.8/doc/examples/class_CwiseUnaryOp_ptrfun.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_FixedBlock.cpp b/deps/eigen-3.2.8/doc/examples/class_FixedBlock.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_FixedBlock.cpp rename to deps/eigen-3.2.8/doc/examples/class_FixedBlock.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_FixedVectorBlock.cpp b/deps/eigen-3.2.8/doc/examples/class_FixedVectorBlock.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_FixedVectorBlock.cpp rename to deps/eigen-3.2.8/doc/examples/class_FixedVectorBlock.cpp diff --git a/deps/eigen-3.2.1/doc/examples/class_VectorBlock.cpp b/deps/eigen-3.2.8/doc/examples/class_VectorBlock.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/class_VectorBlock.cpp rename to deps/eigen-3.2.8/doc/examples/class_VectorBlock.cpp diff --git a/deps/eigen-3.2.1/doc/examples/function_taking_eigenbase.cpp b/deps/eigen-3.2.8/doc/examples/function_taking_eigenbase.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/function_taking_eigenbase.cpp rename to deps/eigen-3.2.8/doc/examples/function_taking_eigenbase.cpp diff --git a/deps/eigen-3.2.1/doc/examples/function_taking_ref.cpp b/deps/eigen-3.2.8/doc/examples/function_taking_ref.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/function_taking_ref.cpp rename to deps/eigen-3.2.8/doc/examples/function_taking_ref.cpp diff --git a/deps/eigen-3.2.8/doc/examples/matrixfree_cg.cpp b/deps/eigen-3.2.8/doc/examples/matrixfree_cg.cpp new file mode 100644 index 00000000..f0631c3a --- /dev/null +++ b/deps/eigen-3.2.8/doc/examples/matrixfree_cg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include + +class MatrixReplacement; +template class MatrixReplacement_ProductReturnType; + +namespace Eigen { +namespace internal { + template<> + struct traits : Eigen::internal::traits > + {}; + + template + struct traits > { + // The equivalent plain objet type of the product. This type is used if the product needs to be evaluated into a temporary. + typedef Eigen::Matrix ReturnType; + }; +} +} + +// Inheriting EigenBase should not be needed in the future. +class MatrixReplacement : public Eigen::EigenBase { +public: + // Expose some compile-time information to Eigen: + typedef double Scalar; + typedef double RealScalar; + enum { + ColsAtCompileTime = Eigen::Dynamic, + RowsAtCompileTime = Eigen::Dynamic, + MaxColsAtCompileTime = Eigen::Dynamic, + MaxRowsAtCompileTime = Eigen::Dynamic + }; + + Index rows() const { return 4; } + Index cols() const { return 4; } + + void resize(Index a_rows, Index a_cols) + { + // This method should not be needed in the future. + assert(a_rows==0 && a_cols==0 || a_rows==rows() && a_cols==cols()); + } + + // In the future, the return type should be Eigen::Product + template + MatrixReplacement_ProductReturnType operator*(const Eigen::MatrixBase& x) const { + return MatrixReplacement_ProductReturnType(*this, x.derived()); + } + +}; + +// The proxy class representing the product of a MatrixReplacement with a MatrixBase<> +template +class MatrixReplacement_ProductReturnType : public Eigen::ReturnByValue > { +public: + typedef MatrixReplacement::Index Index; + + // The ctor store references to the matrix and right-hand-side object (usually a vector). + MatrixReplacement_ProductReturnType(const MatrixReplacement& matrix, const Rhs& rhs) + : m_matrix(matrix), m_rhs(rhs) + {} + + Index rows() const { return m_matrix.rows(); } + Index cols() const { return m_rhs.cols(); } + + // This function is automatically called by Eigen. It must evaluate the product of matrix * rhs into y. + template + void evalTo(Dest& y) const + { + y.setZero(4); + + y(0) += 2 * m_rhs(0); y(1) += 1 * m_rhs(0); + y(0) += 1 * m_rhs(1); y(1) += 2 * m_rhs(1); y(2) += 1 * m_rhs(1); + y(1) += 1 * m_rhs(2); y(2) += 2 * m_rhs(2); y(3) += 1 * m_rhs(2); + y(2) += 1 * m_rhs(3); y(3) += 2 * m_rhs(3); + } + +protected: + const MatrixReplacement& m_matrix; + typename Rhs::Nested m_rhs; +}; + + +/*****/ + +// This class simply warp a diagonal matrix as a Jacobi preconditioner. +// In the future such simple and generic wrapper should be shipped within Eigen itsel. +template +class MyJacobiPreconditioner +{ + typedef _Scalar Scalar; + typedef Eigen::Matrix Vector; + typedef typename Vector::Index Index; + + public: + // this typedef is only to export the scalar type and compile-time dimensions to solve_retval + typedef Eigen::Matrix MatrixType; + + MyJacobiPreconditioner() : m_isInitialized(false) {} + + void setInvDiag(const Eigen::VectorXd &invdiag) { + m_invdiag=invdiag; + m_isInitialized=true; + } + + Index rows() const { return m_invdiag.size(); } + Index cols() const { return m_invdiag.size(); } + + template + MyJacobiPreconditioner& analyzePattern(const MatType& ) { return *this; } + + template + MyJacobiPreconditioner& factorize(const MatType& mat) { return *this; } + + template + MyJacobiPreconditioner& compute(const MatType& mat) { return *this; } + + template + void _solve(const Rhs& b, Dest& x) const + { + x = m_invdiag.array() * b.array() ; + } + + template inline const Eigen::internal::solve_retval + solve(const Eigen::MatrixBase& b) const + { + eigen_assert(m_isInitialized && "MyJacobiPreconditioner is not initialized."); + eigen_assert(m_invdiag.size()==b.rows() + && "MyJacobiPreconditioner::solve(): invalid number of rows of the right hand side matrix b"); + return Eigen::internal::solve_retval(*this, b.derived()); + } + + protected: + Vector m_invdiag; + bool m_isInitialized; +}; + +namespace Eigen { +namespace internal { + +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef MyJacobiPreconditioner<_MatrixType> Dec; + EIGEN_MAKE_SOLVE_HELPERS(Dec,Rhs) + + template void evalTo(Dest& dst) const + { + dec()._solve(rhs(),dst); + } +}; + +} +} + + +/*****/ + + +int main() +{ + MatrixReplacement A; + Eigen::VectorXd b(4), x; + b << 1, 1, 1, 1; + + // solve Ax = b using CG with matrix-free version: + Eigen::ConjugateGradient < MatrixReplacement, Eigen::Lower|Eigen::Upper, MyJacobiPreconditioner > cg; + + Eigen::VectorXd invdiag(4); + invdiag << 1./3., 1./4., 1./4., 1./3.; + + cg.preconditioner().setInvDiag(invdiag); + cg.compute(A); + x = cg.solve(b); + + std::cout << "#iterations: " << cg.iterations() << std::endl; + std::cout << "estimated error: " << cg.error() << std::endl; +} diff --git a/deps/eigen-3.2.1/doc/examples/tut_arithmetic_add_sub.cpp b/deps/eigen-3.2.8/doc/examples/tut_arithmetic_add_sub.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_arithmetic_add_sub.cpp rename to deps/eigen-3.2.8/doc/examples/tut_arithmetic_add_sub.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_arithmetic_dot_cross.cpp b/deps/eigen-3.2.8/doc/examples/tut_arithmetic_dot_cross.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_arithmetic_dot_cross.cpp rename to deps/eigen-3.2.8/doc/examples/tut_arithmetic_dot_cross.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_arithmetic_matrix_mul.cpp b/deps/eigen-3.2.8/doc/examples/tut_arithmetic_matrix_mul.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_arithmetic_matrix_mul.cpp rename to deps/eigen-3.2.8/doc/examples/tut_arithmetic_matrix_mul.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_arithmetic_redux_basic.cpp b/deps/eigen-3.2.8/doc/examples/tut_arithmetic_redux_basic.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_arithmetic_redux_basic.cpp rename to deps/eigen-3.2.8/doc/examples/tut_arithmetic_redux_basic.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_arithmetic_scalar_mul_div.cpp b/deps/eigen-3.2.8/doc/examples/tut_arithmetic_scalar_mul_div.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_arithmetic_scalar_mul_div.cpp rename to deps/eigen-3.2.8/doc/examples/tut_arithmetic_scalar_mul_div.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_matrix_coefficient_accessors.cpp b/deps/eigen-3.2.8/doc/examples/tut_matrix_coefficient_accessors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_matrix_coefficient_accessors.cpp rename to deps/eigen-3.2.8/doc/examples/tut_matrix_coefficient_accessors.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_matrix_resize.cpp b/deps/eigen-3.2.8/doc/examples/tut_matrix_resize.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_matrix_resize.cpp rename to deps/eigen-3.2.8/doc/examples/tut_matrix_resize.cpp diff --git a/deps/eigen-3.2.1/doc/examples/tut_matrix_resize_fixed_size.cpp b/deps/eigen-3.2.8/doc/examples/tut_matrix_resize_fixed_size.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/examples/tut_matrix_resize_fixed_size.cpp rename to deps/eigen-3.2.8/doc/examples/tut_matrix_resize_fixed_size.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/.krazy b/deps/eigen-3.2.8/doc/snippets/.krazy similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/.krazy rename to deps/eigen-3.2.8/doc/snippets/.krazy diff --git a/deps/eigen-3.2.1/doc/snippets/AngleAxis_mimic_euler.cpp b/deps/eigen-3.2.8/doc/snippets/AngleAxis_mimic_euler.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/AngleAxis_mimic_euler.cpp rename to deps/eigen-3.2.8/doc/snippets/AngleAxis_mimic_euler.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/CMakeLists.txt b/deps/eigen-3.2.8/doc/snippets/CMakeLists.txt similarity index 86% rename from deps/eigen-3.2.1/doc/snippets/CMakeLists.txt rename to deps/eigen-3.2.8/doc/snippets/CMakeLists.txt index 92a22ea6..1135900c 100644 --- a/deps/eigen-3.2.1/doc/snippets/CMakeLists.txt +++ b/deps/eigen-3.2.8/doc/snippets/CMakeLists.txt @@ -14,12 +14,10 @@ foreach(snippet_src ${snippets_SRCS}) if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) endif() - get_target_property(compile_snippet_executable - ${compile_snippet_target} LOCATION) add_custom_command( TARGET ${compile_snippet_target} POST_BUILD - COMMAND ${compile_snippet_executable} + COMMAND ${compile_snippet_target} ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out ) add_dependencies(all_snippets ${compile_snippet_target}) @@ -27,4 +25,4 @@ foreach(snippet_src ${snippets_SRCS}) PROPERTIES OBJECT_DEPENDS ${snippet_src}) endforeach(snippet_src) -ei_add_target_property(compile_tut_arithmetic_transpose_aliasing COMPILE_FLAGS -DEIGEN_NO_DEBUG) \ No newline at end of file +ei_add_target_property(compile_tut_arithmetic_transpose_aliasing COMPILE_FLAGS -DEIGEN_NO_DEBUG) diff --git a/deps/eigen-3.2.1/doc/snippets/ColPivHouseholderQR_solve.cpp b/deps/eigen-3.2.8/doc/snippets/ColPivHouseholderQR_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ColPivHouseholderQR_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/ColPivHouseholderQR_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_compute.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_eigenvalues.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_eigenvalues.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_eigenvalues.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_eigenvectors.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_eigenvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexEigenSolver_eigenvectors.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexEigenSolver_eigenvectors.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexSchur_compute.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexSchur_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexSchur_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexSchur_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexSchur_matrixT.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexSchur_matrixT.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexSchur_matrixT.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexSchur_matrixT.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/ComplexSchur_matrixU.cpp b/deps/eigen-3.2.8/doc/snippets/ComplexSchur_matrixU.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/ComplexSchur_matrixU.cpp rename to deps/eigen-3.2.8/doc/snippets/ComplexSchur_matrixU.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_abs.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_abs.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_abs.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_abs.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_abs2.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_abs2.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_abs2.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_abs2.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_acos.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_acos.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_acos.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_acos.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_asin.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_asin.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_asin.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_asin.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_boolean_and.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_boolean_and.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_boolean_and.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_boolean_and.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_boolean_or.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_boolean_or.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_boolean_or.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_boolean_or.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_cos.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_cos.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_cos.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_cos.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_cube.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_cube.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_cube.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_cube.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_equal_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_equal_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_equal_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_equal_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_exp.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_exp.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_exp.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_exp.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_greater.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_greater.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_greater.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_greater.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_greater_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_greater_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_greater_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_greater_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_inverse.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_inverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_inverse.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_inverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_less.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_less.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_less.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_less.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_less_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_less_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_less_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_less_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_log.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_log.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_log.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_log.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_max.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_max.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_max.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_max.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_min.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_min.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_min.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_min.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_minus.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_minus.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_minus.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_minus.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_minus_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_minus_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_minus_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_minus_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_not_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_not_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_not_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_not_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_plus.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_plus.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_plus.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_plus.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_plus_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_plus_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_plus_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_plus_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_pow.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_pow.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_pow.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_pow.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_product.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_product.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_product.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_product.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_quotient.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_quotient.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_quotient.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_quotient.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_sin.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_sin.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_sin.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_sin.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_slash_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_slash_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_slash_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_slash_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_sqrt.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_sqrt.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_sqrt.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_sqrt.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_square.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_square.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_square.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_square.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_tan.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_tan.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_tan.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_tan.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Cwise_times_equal.cpp b/deps/eigen-3.2.8/doc/snippets/Cwise_times_equal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Cwise_times_equal.cpp rename to deps/eigen-3.2.8/doc/snippets/Cwise_times_equal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/DenseBase_LinSpaced.cpp b/deps/eigen-3.2.8/doc/snippets/DenseBase_LinSpaced.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/DenseBase_LinSpaced.cpp rename to deps/eigen-3.2.8/doc/snippets/DenseBase_LinSpaced.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/DenseBase_LinSpaced_seq.cpp b/deps/eigen-3.2.8/doc/snippets/DenseBase_LinSpaced_seq.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/DenseBase_LinSpaced_seq.cpp rename to deps/eigen-3.2.8/doc/snippets/DenseBase_LinSpaced_seq.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/DenseBase_setLinSpaced.cpp b/deps/eigen-3.2.8/doc/snippets/DenseBase_setLinSpaced.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/DenseBase_setLinSpaced.cpp rename to deps/eigen-3.2.8/doc/snippets/DenseBase_setLinSpaced.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/DirectionWise_replicate.cpp b/deps/eigen-3.2.8/doc/snippets/DirectionWise_replicate.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/DirectionWise_replicate.cpp rename to deps/eigen-3.2.8/doc/snippets/DirectionWise_replicate.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/DirectionWise_replicate_int.cpp b/deps/eigen-3.2.8/doc/snippets/DirectionWise_replicate_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/DirectionWise_replicate_int.cpp rename to deps/eigen-3.2.8/doc/snippets/DirectionWise_replicate_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp b/deps/eigen-3.2.8/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp rename to deps/eigen-3.2.8/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/EigenSolver_compute.cpp b/deps/eigen-3.2.8/doc/snippets/EigenSolver_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/EigenSolver_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/EigenSolver_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/EigenSolver_eigenvalues.cpp b/deps/eigen-3.2.8/doc/snippets/EigenSolver_eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/EigenSolver_eigenvalues.cpp rename to deps/eigen-3.2.8/doc/snippets/EigenSolver_eigenvalues.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/EigenSolver_eigenvectors.cpp b/deps/eigen-3.2.8/doc/snippets/EigenSolver_eigenvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/EigenSolver_eigenvectors.cpp rename to deps/eigen-3.2.8/doc/snippets/EigenSolver_eigenvectors.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/EigenSolver_pseudoEigenvectors.cpp b/deps/eigen-3.2.8/doc/snippets/EigenSolver_pseudoEigenvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/EigenSolver_pseudoEigenvectors.cpp rename to deps/eigen-3.2.8/doc/snippets/EigenSolver_pseudoEigenvectors.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/FullPivHouseholderQR_solve.cpp b/deps/eigen-3.2.8/doc/snippets/FullPivHouseholderQR_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/FullPivHouseholderQR_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/FullPivHouseholderQR_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/FullPivLU_image.cpp b/deps/eigen-3.2.8/doc/snippets/FullPivLU_image.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/FullPivLU_image.cpp rename to deps/eigen-3.2.8/doc/snippets/FullPivLU_image.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/FullPivLU_kernel.cpp b/deps/eigen-3.2.8/doc/snippets/FullPivLU_kernel.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/FullPivLU_kernel.cpp rename to deps/eigen-3.2.8/doc/snippets/FullPivLU_kernel.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/FullPivLU_solve.cpp b/deps/eigen-3.2.8/doc/snippets/FullPivLU_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/FullPivLU_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/FullPivLU_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/GeneralizedEigenSolver.cpp b/deps/eigen-3.2.8/doc/snippets/GeneralizedEigenSolver.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/GeneralizedEigenSolver.cpp rename to deps/eigen-3.2.8/doc/snippets/GeneralizedEigenSolver.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_compute.cpp b/deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_matrixH.cpp b/deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_matrixH.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_matrixH.cpp rename to deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_matrixH.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_packedMatrix.cpp b/deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_packedMatrix.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HessenbergDecomposition_packedMatrix.cpp rename to deps/eigen-3.2.8/doc/snippets/HessenbergDecomposition_packedMatrix.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HouseholderQR_householderQ.cpp b/deps/eigen-3.2.8/doc/snippets/HouseholderQR_householderQ.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HouseholderQR_householderQ.cpp rename to deps/eigen-3.2.8/doc/snippets/HouseholderQR_householderQ.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HouseholderQR_solve.cpp b/deps/eigen-3.2.8/doc/snippets/HouseholderQR_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HouseholderQR_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/HouseholderQR_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/HouseholderSequence_HouseholderSequence.cpp b/deps/eigen-3.2.8/doc/snippets/HouseholderSequence_HouseholderSequence.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/HouseholderSequence_HouseholderSequence.cpp rename to deps/eigen-3.2.8/doc/snippets/HouseholderSequence_HouseholderSequence.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/IOFormat.cpp b/deps/eigen-3.2.8/doc/snippets/IOFormat.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/IOFormat.cpp rename to deps/eigen-3.2.8/doc/snippets/IOFormat.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/JacobiSVD_basic.cpp b/deps/eigen-3.2.8/doc/snippets/JacobiSVD_basic.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/JacobiSVD_basic.cpp rename to deps/eigen-3.2.8/doc/snippets/JacobiSVD_basic.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Jacobi_makeGivens.cpp b/deps/eigen-3.2.8/doc/snippets/Jacobi_makeGivens.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Jacobi_makeGivens.cpp rename to deps/eigen-3.2.8/doc/snippets/Jacobi_makeGivens.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Jacobi_makeJacobi.cpp b/deps/eigen-3.2.8/doc/snippets/Jacobi_makeJacobi.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Jacobi_makeJacobi.cpp rename to deps/eigen-3.2.8/doc/snippets/Jacobi_makeJacobi.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/LLT_example.cpp b/deps/eigen-3.2.8/doc/snippets/LLT_example.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/LLT_example.cpp rename to deps/eigen-3.2.8/doc/snippets/LLT_example.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/LLT_solve.cpp b/deps/eigen-3.2.8/doc/snippets/LLT_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/LLT_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/LLT_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Map_general_stride.cpp b/deps/eigen-3.2.8/doc/snippets/Map_general_stride.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Map_general_stride.cpp rename to deps/eigen-3.2.8/doc/snippets/Map_general_stride.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Map_inner_stride.cpp b/deps/eigen-3.2.8/doc/snippets/Map_inner_stride.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Map_inner_stride.cpp rename to deps/eigen-3.2.8/doc/snippets/Map_inner_stride.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Map_outer_stride.cpp b/deps/eigen-3.2.8/doc/snippets/Map_outer_stride.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Map_outer_stride.cpp rename to deps/eigen-3.2.8/doc/snippets/Map_outer_stride.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Map_placement_new.cpp b/deps/eigen-3.2.8/doc/snippets/Map_placement_new.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Map_placement_new.cpp rename to deps/eigen-3.2.8/doc/snippets/Map_placement_new.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Map_simple.cpp b/deps/eigen-3.2.8/doc/snippets/Map_simple.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Map_simple.cpp rename to deps/eigen-3.2.8/doc/snippets/Map_simple.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_adjoint.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_adjoint.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_adjoint.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_adjoint.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_all.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_all.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_all.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_all.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_applyOnTheLeft.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_applyOnTheLeft.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_applyOnTheLeft.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_applyOnTheLeft.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_applyOnTheRight.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_applyOnTheRight.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_applyOnTheRight.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_applyOnTheRight.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_array.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_array.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_array.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_array.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_array_const.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_array_const.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_array_const.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_array_const.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_asDiagonal.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_asDiagonal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_asDiagonal.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_asDiagonal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_block_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_block_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_block_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_block_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_block_int_int_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_block_int_int_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_block_int_int_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_block_int_int_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomRows_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomRows_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_bottomRows_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_bottomRows_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cast.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cast.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cast.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cast.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_col.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_col.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_col.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_col.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_colwise.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_colwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_colwise.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_colwise.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_computeInverseWithCheck.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_computeInverseWithCheck.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_computeInverseWithCheck.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_computeInverseWithCheck.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseAbs.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseAbs.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseAbs.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseAbs.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseAbs2.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseAbs2.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseAbs2.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseAbs2.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseEqual.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseEqual.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseEqual.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseEqual.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseInverse.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseInverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseInverse.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseInverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseMax.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseMax.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseMax.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseMax.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseMin.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseMin.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseMin.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseMin.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseNotEqual.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseNotEqual.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseNotEqual.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseNotEqual.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseProduct.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseProduct.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseProduct.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseProduct.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseQuotient.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseQuotient.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseQuotient.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseQuotient.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseSqrt.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseSqrt.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_cwiseSqrt.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_cwiseSqrt.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal_template_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal_template_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_diagonal_template_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_diagonal_template_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_eigenvalues.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_eigenvalues.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_eigenvalues.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_end_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_end_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_end_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_end_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_eval.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_eval.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_eval.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_eval.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_extract.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_extract.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_extract.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_extract.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_fixedBlock_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_fixedBlock_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_fixedBlock_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_fixedBlock_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_identity.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_identity.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_identity.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_identity.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_identity_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_identity_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_identity_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_identity_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_inverse.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_inverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_inverse.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_inverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isDiagonal.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isDiagonal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isDiagonal.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isDiagonal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isIdentity.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isIdentity.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isIdentity.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isIdentity.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isOnes.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isOnes.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isOnes.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isOnes.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isOrthogonal.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isOrthogonal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isOrthogonal.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isOrthogonal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isUnitary.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isUnitary.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isUnitary.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isUnitary.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_isZero.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_isZero.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_isZero.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_isZero.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_leftCols_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_leftCols_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_leftCols_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_leftCols_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_marked.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_marked.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_marked.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_marked.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_noalias.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_noalias.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_noalias.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_noalias.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_ones.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_ones.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_ones.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_ones.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_ones_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_ones_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_ones_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_ones_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_ones_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_ones_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_ones_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_ones_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_operatorNorm.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_operatorNorm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_operatorNorm.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_operatorNorm.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_part.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_part.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_part.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_part.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_prod.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_prod.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_prod.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_prod.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_random.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_random.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_random.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_random.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_random_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_random_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_random_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_random_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_random_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_random_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_random_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_random_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_replicate.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_replicate.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_replicate.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_replicate.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_replicate_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_replicate_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_replicate_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_replicate_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_reverse.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_reverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_reverse.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_reverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_rightCols_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_rightCols_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_rightCols_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_rightCols_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_row.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_row.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_row.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_row.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_rowwise.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_rowwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_rowwise.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_rowwise.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_segment_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_segment_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_segment_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_segment_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_select.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_select.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_select.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_select.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_set.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_set.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_set.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_set.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_setIdentity.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_setIdentity.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_setIdentity.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_setIdentity.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_setOnes.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_setOnes.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_setOnes.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_setOnes.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_setRandom.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_setRandom.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_setRandom.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_setRandom.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_setZero.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_setZero.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_setZero.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_setZero.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_start_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_start_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_start_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_start_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_bottomRows.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_bottomRows.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_bottomRows.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_bottomRows.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_end.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_end.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_end.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_end.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_leftCols.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_leftCols.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_leftCols.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_leftCols.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_rightCols.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_rightCols.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_rightCols.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_rightCols.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_segment.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_segment.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_segment.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_segment.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_start.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_start.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_start.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_start.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_topRows.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_topRows.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_template_int_topRows.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_template_int_topRows.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_topRightCorner_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_topRightCorner_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_topRightCorner_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_topRightCorner_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_topRows_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_topRows_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_topRows_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_topRows_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_transpose.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_transpose.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_transpose.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_transpose.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_zero.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_zero.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_zero.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_zero.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_zero_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_zero_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_zero_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_zero_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/MatrixBase_zero_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/MatrixBase_zero_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/MatrixBase_zero_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/MatrixBase_zero_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_resize_NoChange_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_resize_NoChange_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_resize_NoChange_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_resize_NoChange_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_resize_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_resize_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_resize_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_resize_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_resize_int_NoChange.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_resize_int_NoChange.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_resize_int_NoChange.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_resize_int_NoChange.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_resize_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_resize_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_resize_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_resize_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setConstant_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setConstant_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setConstant_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setConstant_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setConstant_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setConstant_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setConstant_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setConstant_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setIdentity_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setIdentity_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setIdentity_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setIdentity_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setOnes_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setOnes_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setOnes_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setOnes_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setOnes_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setOnes_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setOnes_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setOnes_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setRandom_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setRandom_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setRandom_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setRandom_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setRandom_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setRandom_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setRandom_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setRandom_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setZero_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setZero_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setZero_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setZero_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Matrix_setZero_int_int.cpp b/deps/eigen-3.2.8/doc/snippets/Matrix_setZero_int_int.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Matrix_setZero_int_int.cpp rename to deps/eigen-3.2.8/doc/snippets/Matrix_setZero_int_int.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialPivLU_solve.cpp b/deps/eigen-3.2.8/doc/snippets/PartialPivLU_solve.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialPivLU_solve.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialPivLU_solve.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_count.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_count.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_count.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_count.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_maxCoeff.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_maxCoeff.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_maxCoeff.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_maxCoeff.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_minCoeff.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_minCoeff.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_minCoeff.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_minCoeff.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_norm.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_norm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_norm.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_norm.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_prod.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_prod.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_prod.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_prod.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_squaredNorm.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_squaredNorm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_squaredNorm.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_squaredNorm.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/PartialRedux_sum.cpp b/deps/eigen-3.2.8/doc/snippets/PartialRedux_sum.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/PartialRedux_sum.cpp rename to deps/eigen-3.2.8/doc/snippets/PartialRedux_sum.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/RealQZ_compute.cpp b/deps/eigen-3.2.8/doc/snippets/RealQZ_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/RealQZ_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/RealQZ_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/RealSchur_RealSchur_MatrixType.cpp b/deps/eigen-3.2.8/doc/snippets/RealSchur_RealSchur_MatrixType.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/RealSchur_RealSchur_MatrixType.cpp rename to deps/eigen-3.2.8/doc/snippets/RealSchur_RealSchur_MatrixType.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/RealSchur_compute.cpp b/deps/eigen-3.2.8/doc/snippets/RealSchur_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/RealSchur_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/RealSchur_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointView_eigenvalues.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointView_eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointView_eigenvalues.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointView_eigenvalues.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/SelfAdjointView_operatorNorm.cpp b/deps/eigen-3.2.8/doc/snippets/SelfAdjointView_operatorNorm.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/SelfAdjointView_operatorNorm.cpp rename to deps/eigen-3.2.8/doc/snippets/SelfAdjointView_operatorNorm.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_block.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_block.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_block.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_block.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_block_correct.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_block_correct.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_block_correct.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_block_correct.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_cwise.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_cwise.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_cwise.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_cwise.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult1.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult1.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult1.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult1.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult2.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult2.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult2.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult2.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult3.cpp b/deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult3.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicAliasing_mult3.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicAliasing_mult3.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/TopicStorageOrders_example.cpp b/deps/eigen-3.2.8/doc/snippets/TopicStorageOrders_example.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/TopicStorageOrders_example.cpp rename to deps/eigen-3.2.8/doc/snippets/TopicStorageOrders_example.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_compute.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_compute.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_compute.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_compute.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_decomposeInPlace.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_decomposeInPlace.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_decomposeInPlace.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_decomposeInPlace.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_diagonal.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_diagonal.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_diagonal.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_diagonal.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_householderCoefficients.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_householderCoefficients.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_householderCoefficients.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_householderCoefficients.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tridiagonalization_packedMatrix.cpp b/deps/eigen-3.2.8/doc/snippets/Tridiagonalization_packedMatrix.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tridiagonalization_packedMatrix.cpp rename to deps/eigen-3.2.8/doc/snippets/Tridiagonalization_packedMatrix.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_Map_rowmajor.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_Map_rowmajor.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_Map_rowmajor.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_Map_rowmajor.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_Map_using.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_Map_using.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_Map_using.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_Map_using.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_01.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_01.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_01.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_01.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_01b.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_01b.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_01b.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_01b.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_02.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_02.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_commainit_02.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_commainit_02.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_matrix_inverse.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_matrix_inverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_matrix_inverse.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_matrix_inverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_multiple_rhs.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_multiple_rhs.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_multiple_rhs.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_multiple_rhs.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_reuse_decomposition.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_reuse_decomposition.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_reuse_decomposition.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_reuse_decomposition.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_singular.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_singular.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_singular.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_singular.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_triangular.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_triangular.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_triangular.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_triangular.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Tutorial_solve_triangular_inplace.cpp b/deps/eigen-3.2.8/doc/snippets/Tutorial_solve_triangular_inplace.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Tutorial_solve_triangular_inplace.cpp rename to deps/eigen-3.2.8/doc/snippets/Tutorial_solve_triangular_inplace.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/Vectorwise_reverse.cpp b/deps/eigen-3.2.8/doc/snippets/Vectorwise_reverse.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/Vectorwise_reverse.cpp rename to deps/eigen-3.2.8/doc/snippets/Vectorwise_reverse.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/class_FullPivLU.cpp b/deps/eigen-3.2.8/doc/snippets/class_FullPivLU.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/class_FullPivLU.cpp rename to deps/eigen-3.2.8/doc/snippets/class_FullPivLU.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/compile_snippet.cpp.in b/deps/eigen-3.2.8/doc/snippets/compile_snippet.cpp.in similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/compile_snippet.cpp.in rename to deps/eigen-3.2.8/doc/snippets/compile_snippet.cpp.in diff --git a/deps/eigen-3.2.1/doc/snippets/tut_arithmetic_redux_minmax.cpp b/deps/eigen-3.2.8/doc/snippets/tut_arithmetic_redux_minmax.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/tut_arithmetic_redux_minmax.cpp rename to deps/eigen-3.2.8/doc/snippets/tut_arithmetic_redux_minmax.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_aliasing.cpp b/deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_aliasing.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_aliasing.cpp rename to deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_aliasing.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_conjugate.cpp b/deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_conjugate.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_conjugate.cpp rename to deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_conjugate.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_inplace.cpp b/deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_inplace.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/tut_arithmetic_transpose_inplace.cpp rename to deps/eigen-3.2.8/doc/snippets/tut_arithmetic_transpose_inplace.cpp diff --git a/deps/eigen-3.2.1/doc/snippets/tut_matrix_assignment_resizing.cpp b/deps/eigen-3.2.8/doc/snippets/tut_matrix_assignment_resizing.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/snippets/tut_matrix_assignment_resizing.cpp rename to deps/eigen-3.2.8/doc/snippets/tut_matrix_assignment_resizing.cpp diff --git a/deps/eigen-3.2.1/doc/special_examples/CMakeLists.txt b/deps/eigen-3.2.8/doc/special_examples/CMakeLists.txt similarity index 66% rename from deps/eigen-3.2.1/doc/special_examples/CMakeLists.txt rename to deps/eigen-3.2.8/doc/special_examples/CMakeLists.txt index 0c9b3c3b..3ab75dbf 100644 --- a/deps/eigen-3.2.1/doc/special_examples/CMakeLists.txt +++ b/deps/eigen-3.2.8/doc/special_examples/CMakeLists.txt @@ -1,4 +1,3 @@ - if(NOT EIGEN_TEST_NOQT) find_package(Qt4) if(QT4_FOUND) @@ -6,16 +5,17 @@ if(NOT EIGEN_TEST_NOQT) endif() endif(NOT EIGEN_TEST_NOQT) - if(QT4_FOUND) add_executable(Tutorial_sparse_example Tutorial_sparse_example.cpp Tutorial_sparse_example_details.cpp) target_link_libraries(Tutorial_sparse_example ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) - + add_custom_command( - TARGET Tutorial_sparse_example - POST_BUILD - COMMAND Tutorial_sparse_example ARGS ${CMAKE_CURRENT_BINARY_DIR}/../html/Tutorial_sparse_example.jpeg + TARGET Tutorial_sparse_example + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/../html/ + COMMAND Tutorial_sparse_example ARGS ${CMAKE_CURRENT_BINARY_DIR}/../html/Tutorial_sparse_example.jpeg ) - + add_dependencies(all_examples Tutorial_sparse_example) endif(QT4_FOUND) + diff --git a/deps/eigen-3.2.1/doc/special_examples/Tutorial_sparse_example.cpp b/deps/eigen-3.2.8/doc/special_examples/Tutorial_sparse_example.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/special_examples/Tutorial_sparse_example.cpp rename to deps/eigen-3.2.8/doc/special_examples/Tutorial_sparse_example.cpp diff --git a/deps/eigen-3.2.1/doc/special_examples/Tutorial_sparse_example_details.cpp b/deps/eigen-3.2.8/doc/special_examples/Tutorial_sparse_example_details.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/special_examples/Tutorial_sparse_example_details.cpp rename to deps/eigen-3.2.8/doc/special_examples/Tutorial_sparse_example_details.cpp diff --git a/deps/eigen-3.2.1/doc/tutorial.cpp b/deps/eigen-3.2.8/doc/tutorial.cpp similarity index 100% rename from deps/eigen-3.2.1/doc/tutorial.cpp rename to deps/eigen-3.2.8/doc/tutorial.cpp diff --git a/deps/eigen-3.2.1/eigen3.pc.in b/deps/eigen-3.2.8/eigen3.pc.in similarity index 50% rename from deps/eigen-3.2.1/eigen3.pc.in rename to deps/eigen-3.2.8/eigen3.pc.in index c5855de3..3368a3aa 100644 --- a/deps/eigen-3.2.1/eigen3.pc.in +++ b/deps/eigen-3.2.8/eigen3.pc.in @@ -1,6 +1,9 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} + Name: Eigen3 Description: A C++ template library for linear algebra: vectors, matrices, and related algorithms Requires: -Version: ${EIGEN_VERSION_NUMBER} +Version: @EIGEN_VERSION_NUMBER@ Libs: -Cflags: -I${INCLUDE_INSTALL_DIR} +Cflags: -I${prefix}/@INCLUDE_INSTALL_DIR@ diff --git a/deps/eigen-3.2.1/failtest/CMakeLists.txt b/deps/eigen-3.2.8/failtest/CMakeLists.txt similarity index 78% rename from deps/eigen-3.2.1/failtest/CMakeLists.txt rename to deps/eigen-3.2.8/failtest/CMakeLists.txt index 5afa2ac8..cadc6a25 100644 --- a/deps/eigen-3.2.1/failtest/CMakeLists.txt +++ b/deps/eigen-3.2.8/failtest/CMakeLists.txt @@ -26,6 +26,23 @@ ei_add_failtest("block_on_const_type_actually_const_1") ei_add_failtest("transpose_on_const_type_actually_const") ei_add_failtest("diagonal_on_const_type_actually_const") +ei_add_failtest("ref_1") +ei_add_failtest("ref_2") +ei_add_failtest("ref_3") +ei_add_failtest("ref_4") +ei_add_failtest("ref_5") + +ei_add_failtest("partialpivlu_int") +ei_add_failtest("fullpivlu_int") +ei_add_failtest("llt_int") +ei_add_failtest("ldlt_int") +ei_add_failtest("qr_int") +ei_add_failtest("colpivqr_int") +ei_add_failtest("fullpivqr_int") +ei_add_failtest("jacobisvd_int") +ei_add_failtest("eigensolver_int") +ei_add_failtest("eigensolver_cplx") + if (EIGEN_FAILTEST_FAILURE_COUNT) message(FATAL_ERROR "${EIGEN_FAILTEST_FAILURE_COUNT} out of ${EIGEN_FAILTEST_COUNT} failtests FAILED. " diff --git a/deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_0.cpp b/deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_0.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_0.cpp rename to deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_0.cpp diff --git a/deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_1.cpp b/deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_1.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_1.cpp rename to deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_1.cpp diff --git a/deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_2.cpp b/deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_2.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/block_nonconst_ctor_on_const_xpr_2.cpp rename to deps/eigen-3.2.8/failtest/block_nonconst_ctor_on_const_xpr_2.cpp diff --git a/deps/eigen-3.2.1/failtest/block_on_const_type_actually_const_0.cpp b/deps/eigen-3.2.8/failtest/block_on_const_type_actually_const_0.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/block_on_const_type_actually_const_0.cpp rename to deps/eigen-3.2.8/failtest/block_on_const_type_actually_const_0.cpp diff --git a/deps/eigen-3.2.1/failtest/block_on_const_type_actually_const_1.cpp b/deps/eigen-3.2.8/failtest/block_on_const_type_actually_const_1.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/block_on_const_type_actually_const_1.cpp rename to deps/eigen-3.2.8/failtest/block_on_const_type_actually_const_1.cpp diff --git a/deps/eigen-3.2.8/failtest/colpivqr_int.cpp b/deps/eigen-3.2.8/failtest/colpivqr_int.cpp new file mode 100644 index 00000000..db11910d --- /dev/null +++ b/deps/eigen-3.2.8/failtest/colpivqr_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/QR" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + ColPivHouseholderQR > qr(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.1/failtest/const_qualified_block_method_retval_0.cpp b/deps/eigen-3.2.8/failtest/const_qualified_block_method_retval_0.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/const_qualified_block_method_retval_0.cpp rename to deps/eigen-3.2.8/failtest/const_qualified_block_method_retval_0.cpp diff --git a/deps/eigen-3.2.1/failtest/const_qualified_block_method_retval_1.cpp b/deps/eigen-3.2.8/failtest/const_qualified_block_method_retval_1.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/const_qualified_block_method_retval_1.cpp rename to deps/eigen-3.2.8/failtest/const_qualified_block_method_retval_1.cpp diff --git a/deps/eigen-3.2.1/failtest/const_qualified_diagonal_method_retval.cpp b/deps/eigen-3.2.8/failtest/const_qualified_diagonal_method_retval.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/const_qualified_diagonal_method_retval.cpp rename to deps/eigen-3.2.8/failtest/const_qualified_diagonal_method_retval.cpp diff --git a/deps/eigen-3.2.1/failtest/const_qualified_transpose_method_retval.cpp b/deps/eigen-3.2.8/failtest/const_qualified_transpose_method_retval.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/const_qualified_transpose_method_retval.cpp rename to deps/eigen-3.2.8/failtest/const_qualified_transpose_method_retval.cpp diff --git a/deps/eigen-3.2.1/failtest/diagonal_nonconst_ctor_on_const_xpr.cpp b/deps/eigen-3.2.8/failtest/diagonal_nonconst_ctor_on_const_xpr.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/diagonal_nonconst_ctor_on_const_xpr.cpp rename to deps/eigen-3.2.8/failtest/diagonal_nonconst_ctor_on_const_xpr.cpp diff --git a/deps/eigen-3.2.1/failtest/diagonal_on_const_type_actually_const.cpp b/deps/eigen-3.2.8/failtest/diagonal_on_const_type_actually_const.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/diagonal_on_const_type_actually_const.cpp rename to deps/eigen-3.2.8/failtest/diagonal_on_const_type_actually_const.cpp diff --git a/deps/eigen-3.2.8/failtest/eigensolver_cplx.cpp b/deps/eigen-3.2.8/failtest/eigensolver_cplx.cpp new file mode 100644 index 00000000..c2e21e18 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/eigensolver_cplx.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/Eigenvalues" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR std::complex +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + EigenSolver > eig(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/eigensolver_int.cpp b/deps/eigen-3.2.8/failtest/eigensolver_int.cpp new file mode 100644 index 00000000..eda8dc20 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/eigensolver_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/Eigenvalues" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + EigenSolver > eig(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.1/failtest/failtest_sanity_check.cpp b/deps/eigen-3.2.8/failtest/failtest_sanity_check.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/failtest_sanity_check.cpp rename to deps/eigen-3.2.8/failtest/failtest_sanity_check.cpp diff --git a/deps/eigen-3.2.8/failtest/fullpivlu_int.cpp b/deps/eigen-3.2.8/failtest/fullpivlu_int.cpp new file mode 100644 index 00000000..e9d2c6eb --- /dev/null +++ b/deps/eigen-3.2.8/failtest/fullpivlu_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/LU" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + FullPivLU > lu(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/fullpivqr_int.cpp b/deps/eigen-3.2.8/failtest/fullpivqr_int.cpp new file mode 100644 index 00000000..d182a7b6 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/fullpivqr_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/QR" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + FullPivHouseholderQR > qr(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/jacobisvd_int.cpp b/deps/eigen-3.2.8/failtest/jacobisvd_int.cpp new file mode 100644 index 00000000..12790aef --- /dev/null +++ b/deps/eigen-3.2.8/failtest/jacobisvd_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/SVD" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + JacobiSVD > qr(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/ldlt_int.cpp b/deps/eigen-3.2.8/failtest/ldlt_int.cpp new file mode 100644 index 00000000..243e4574 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ldlt_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/Cholesky" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + LDLT > ldlt(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/llt_int.cpp b/deps/eigen-3.2.8/failtest/llt_int.cpp new file mode 100644 index 00000000..cb020650 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/llt_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/Cholesky" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + LLT > llt(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_0.cpp b/deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_0.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_0.cpp rename to deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_0.cpp diff --git a/deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_1.cpp b/deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_1.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_1.cpp rename to deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_1.cpp diff --git a/deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_2.cpp b/deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_2.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_2.cpp rename to deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_2.cpp diff --git a/deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_3.cpp b/deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_3.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_3.cpp rename to deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_3.cpp diff --git a/deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_4.cpp b/deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_4.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_nonconst_ctor_on_const_ptr_4.cpp rename to deps/eigen-3.2.8/failtest/map_nonconst_ctor_on_const_ptr_4.cpp diff --git a/deps/eigen-3.2.1/failtest/map_on_const_type_actually_const_0.cpp b/deps/eigen-3.2.8/failtest/map_on_const_type_actually_const_0.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_on_const_type_actually_const_0.cpp rename to deps/eigen-3.2.8/failtest/map_on_const_type_actually_const_0.cpp diff --git a/deps/eigen-3.2.1/failtest/map_on_const_type_actually_const_1.cpp b/deps/eigen-3.2.8/failtest/map_on_const_type_actually_const_1.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/map_on_const_type_actually_const_1.cpp rename to deps/eigen-3.2.8/failtest/map_on_const_type_actually_const_1.cpp diff --git a/deps/eigen-3.2.8/failtest/partialpivlu_int.cpp b/deps/eigen-3.2.8/failtest/partialpivlu_int.cpp new file mode 100644 index 00000000..98ef282e --- /dev/null +++ b/deps/eigen-3.2.8/failtest/partialpivlu_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/LU" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + PartialPivLU > lu(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/qr_int.cpp b/deps/eigen-3.2.8/failtest/qr_int.cpp new file mode 100644 index 00000000..ce200e81 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/qr_int.cpp @@ -0,0 +1,14 @@ +#include "../Eigen/QR" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define SCALAR int +#else +#define SCALAR float +#endif + +using namespace Eigen; + +int main() +{ + HouseholderQR > qr(Matrix::Random(10,10)); +} diff --git a/deps/eigen-3.2.8/failtest/ref_1.cpp b/deps/eigen-3.2.8/failtest/ref_1.cpp new file mode 100644 index 00000000..8b798d53 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ref_1.cpp @@ -0,0 +1,18 @@ +#include "../Eigen/Core" + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +#define CV_QUALIFIER const +#else +#define CV_QUALIFIER +#endif + +using namespace Eigen; + +void call_ref(Ref a) { } + +int main() +{ + VectorXf a(10); + CV_QUALIFIER VectorXf& ac(a); + call_ref(ac); +} diff --git a/deps/eigen-3.2.8/failtest/ref_2.cpp b/deps/eigen-3.2.8/failtest/ref_2.cpp new file mode 100644 index 00000000..0b779ccf --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ref_2.cpp @@ -0,0 +1,15 @@ +#include "../Eigen/Core" + +using namespace Eigen; + +void call_ref(Ref a) { } + +int main() +{ + MatrixXf A(10,10); +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD + call_ref(A.row(3)); +#else + call_ref(A.col(3)); +#endif +} diff --git a/deps/eigen-3.2.8/failtest/ref_3.cpp b/deps/eigen-3.2.8/failtest/ref_3.cpp new file mode 100644 index 00000000..f46027d4 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ref_3.cpp @@ -0,0 +1,15 @@ +#include "../Eigen/Core" + +using namespace Eigen; + +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD +void call_ref(Ref a) { } +#else +void call_ref(const Ref &a) { } +#endif + +int main() +{ + VectorXf a(10); + call_ref(a+a); +} diff --git a/deps/eigen-3.2.8/failtest/ref_4.cpp b/deps/eigen-3.2.8/failtest/ref_4.cpp new file mode 100644 index 00000000..6c11fa4c --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ref_4.cpp @@ -0,0 +1,15 @@ +#include "../Eigen/Core" + +using namespace Eigen; + +void call_ref(Ref > a) {} + +int main() +{ + MatrixXf A(10,10); +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD + call_ref(A.transpose()); +#else + call_ref(A); +#endif +} diff --git a/deps/eigen-3.2.8/failtest/ref_5.cpp b/deps/eigen-3.2.8/failtest/ref_5.cpp new file mode 100644 index 00000000..846d5279 --- /dev/null +++ b/deps/eigen-3.2.8/failtest/ref_5.cpp @@ -0,0 +1,16 @@ +#include "../Eigen/Core" + +using namespace Eigen; + +void call_ref(Ref a) { } + +int main() +{ + VectorXf a(10); + DenseBase &ac(a); +#ifdef EIGEN_SHOULD_FAIL_TO_BUILD + call_ref(ac); +#else + call_ref(ac.derived()); +#endif +} diff --git a/deps/eigen-3.2.1/failtest/transpose_nonconst_ctor_on_const_xpr.cpp b/deps/eigen-3.2.8/failtest/transpose_nonconst_ctor_on_const_xpr.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/transpose_nonconst_ctor_on_const_xpr.cpp rename to deps/eigen-3.2.8/failtest/transpose_nonconst_ctor_on_const_xpr.cpp diff --git a/deps/eigen-3.2.1/failtest/transpose_on_const_type_actually_const.cpp b/deps/eigen-3.2.8/failtest/transpose_on_const_type_actually_const.cpp similarity index 100% rename from deps/eigen-3.2.1/failtest/transpose_on_const_type_actually_const.cpp rename to deps/eigen-3.2.8/failtest/transpose_on_const_type_actually_const.cpp diff --git a/deps/eigen-3.2.1/lapack/CMakeLists.txt b/deps/eigen-3.2.8/lapack/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/lapack/CMakeLists.txt rename to deps/eigen-3.2.8/lapack/CMakeLists.txt diff --git a/deps/eigen-3.2.1/lapack/cholesky.cpp b/deps/eigen-3.2.8/lapack/cholesky.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/cholesky.cpp rename to deps/eigen-3.2.8/lapack/cholesky.cpp diff --git a/deps/eigen-3.2.1/lapack/clacgv.f b/deps/eigen-3.2.8/lapack/clacgv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/clacgv.f rename to deps/eigen-3.2.8/lapack/clacgv.f diff --git a/deps/eigen-3.2.1/lapack/cladiv.f b/deps/eigen-3.2.8/lapack/cladiv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/cladiv.f rename to deps/eigen-3.2.8/lapack/cladiv.f diff --git a/deps/eigen-3.2.1/lapack/clarf.f b/deps/eigen-3.2.8/lapack/clarf.f similarity index 100% rename from deps/eigen-3.2.1/lapack/clarf.f rename to deps/eigen-3.2.8/lapack/clarf.f diff --git a/deps/eigen-3.2.1/lapack/clarfb.f b/deps/eigen-3.2.8/lapack/clarfb.f similarity index 100% rename from deps/eigen-3.2.1/lapack/clarfb.f rename to deps/eigen-3.2.8/lapack/clarfb.f diff --git a/deps/eigen-3.2.1/lapack/clarfg.f b/deps/eigen-3.2.8/lapack/clarfg.f similarity index 100% rename from deps/eigen-3.2.1/lapack/clarfg.f rename to deps/eigen-3.2.8/lapack/clarfg.f diff --git a/deps/eigen-3.2.1/lapack/clarft.f b/deps/eigen-3.2.8/lapack/clarft.f similarity index 100% rename from deps/eigen-3.2.1/lapack/clarft.f rename to deps/eigen-3.2.8/lapack/clarft.f diff --git a/deps/eigen-3.2.1/lapack/complex_double.cpp b/deps/eigen-3.2.8/lapack/complex_double.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/complex_double.cpp rename to deps/eigen-3.2.8/lapack/complex_double.cpp diff --git a/deps/eigen-3.2.1/lapack/complex_single.cpp b/deps/eigen-3.2.8/lapack/complex_single.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/complex_single.cpp rename to deps/eigen-3.2.8/lapack/complex_single.cpp diff --git a/deps/eigen-3.2.1/lapack/dladiv.f b/deps/eigen-3.2.8/lapack/dladiv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dladiv.f rename to deps/eigen-3.2.8/lapack/dladiv.f diff --git a/deps/eigen-3.2.1/lapack/dlamch.f b/deps/eigen-3.2.8/lapack/dlamch.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlamch.f rename to deps/eigen-3.2.8/lapack/dlamch.f diff --git a/deps/eigen-3.2.1/lapack/dlapy2.f b/deps/eigen-3.2.8/lapack/dlapy2.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlapy2.f rename to deps/eigen-3.2.8/lapack/dlapy2.f diff --git a/deps/eigen-3.2.1/lapack/dlapy3.f b/deps/eigen-3.2.8/lapack/dlapy3.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlapy3.f rename to deps/eigen-3.2.8/lapack/dlapy3.f diff --git a/deps/eigen-3.2.1/lapack/dlarf.f b/deps/eigen-3.2.8/lapack/dlarf.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlarf.f rename to deps/eigen-3.2.8/lapack/dlarf.f diff --git a/deps/eigen-3.2.1/lapack/dlarfb.f b/deps/eigen-3.2.8/lapack/dlarfb.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlarfb.f rename to deps/eigen-3.2.8/lapack/dlarfb.f diff --git a/deps/eigen-3.2.1/lapack/dlarfg.f b/deps/eigen-3.2.8/lapack/dlarfg.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlarfg.f rename to deps/eigen-3.2.8/lapack/dlarfg.f diff --git a/deps/eigen-3.2.1/lapack/dlarft.f b/deps/eigen-3.2.8/lapack/dlarft.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dlarft.f rename to deps/eigen-3.2.8/lapack/dlarft.f diff --git a/deps/eigen-3.2.1/lapack/double.cpp b/deps/eigen-3.2.8/lapack/double.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/double.cpp rename to deps/eigen-3.2.8/lapack/double.cpp diff --git a/deps/eigen-3.2.1/lapack/dsecnd_NONE.f b/deps/eigen-3.2.8/lapack/dsecnd_NONE.f similarity index 100% rename from deps/eigen-3.2.1/lapack/dsecnd_NONE.f rename to deps/eigen-3.2.8/lapack/dsecnd_NONE.f diff --git a/deps/eigen-3.2.1/lapack/eigenvalues.cpp b/deps/eigen-3.2.8/lapack/eigenvalues.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/eigenvalues.cpp rename to deps/eigen-3.2.8/lapack/eigenvalues.cpp diff --git a/deps/eigen-3.2.1/lapack/ilaclc.f b/deps/eigen-3.2.8/lapack/ilaclc.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilaclc.f rename to deps/eigen-3.2.8/lapack/ilaclc.f diff --git a/deps/eigen-3.2.1/lapack/ilaclr.f b/deps/eigen-3.2.8/lapack/ilaclr.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilaclr.f rename to deps/eigen-3.2.8/lapack/ilaclr.f diff --git a/deps/eigen-3.2.1/lapack/iladlc.f b/deps/eigen-3.2.8/lapack/iladlc.f similarity index 100% rename from deps/eigen-3.2.1/lapack/iladlc.f rename to deps/eigen-3.2.8/lapack/iladlc.f diff --git a/deps/eigen-3.2.1/lapack/iladlr.f b/deps/eigen-3.2.8/lapack/iladlr.f similarity index 100% rename from deps/eigen-3.2.1/lapack/iladlr.f rename to deps/eigen-3.2.8/lapack/iladlr.f diff --git a/deps/eigen-3.2.1/lapack/ilaslc.f b/deps/eigen-3.2.8/lapack/ilaslc.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilaslc.f rename to deps/eigen-3.2.8/lapack/ilaslc.f diff --git a/deps/eigen-3.2.1/lapack/ilaslr.f b/deps/eigen-3.2.8/lapack/ilaslr.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilaslr.f rename to deps/eigen-3.2.8/lapack/ilaslr.f diff --git a/deps/eigen-3.2.1/lapack/ilazlc.f b/deps/eigen-3.2.8/lapack/ilazlc.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilazlc.f rename to deps/eigen-3.2.8/lapack/ilazlc.f diff --git a/deps/eigen-3.2.1/lapack/ilazlr.f b/deps/eigen-3.2.8/lapack/ilazlr.f similarity index 100% rename from deps/eigen-3.2.1/lapack/ilazlr.f rename to deps/eigen-3.2.8/lapack/ilazlr.f diff --git a/deps/eigen-3.2.1/lapack/lapack_common.h b/deps/eigen-3.2.8/lapack/lapack_common.h similarity index 100% rename from deps/eigen-3.2.1/lapack/lapack_common.h rename to deps/eigen-3.2.8/lapack/lapack_common.h diff --git a/deps/eigen-3.2.1/lapack/lu.cpp b/deps/eigen-3.2.8/lapack/lu.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/lu.cpp rename to deps/eigen-3.2.8/lapack/lu.cpp diff --git a/deps/eigen-3.2.1/lapack/second_NONE.f b/deps/eigen-3.2.8/lapack/second_NONE.f similarity index 100% rename from deps/eigen-3.2.1/lapack/second_NONE.f rename to deps/eigen-3.2.8/lapack/second_NONE.f diff --git a/deps/eigen-3.2.1/lapack/single.cpp b/deps/eigen-3.2.8/lapack/single.cpp similarity index 100% rename from deps/eigen-3.2.1/lapack/single.cpp rename to deps/eigen-3.2.8/lapack/single.cpp diff --git a/deps/eigen-3.2.1/lapack/sladiv.f b/deps/eigen-3.2.8/lapack/sladiv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/sladiv.f rename to deps/eigen-3.2.8/lapack/sladiv.f diff --git a/deps/eigen-3.2.1/lapack/slamch.f b/deps/eigen-3.2.8/lapack/slamch.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slamch.f rename to deps/eigen-3.2.8/lapack/slamch.f diff --git a/deps/eigen-3.2.1/lapack/slapy2.f b/deps/eigen-3.2.8/lapack/slapy2.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slapy2.f rename to deps/eigen-3.2.8/lapack/slapy2.f diff --git a/deps/eigen-3.2.1/lapack/slapy3.f b/deps/eigen-3.2.8/lapack/slapy3.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slapy3.f rename to deps/eigen-3.2.8/lapack/slapy3.f diff --git a/deps/eigen-3.2.1/lapack/slarf.f b/deps/eigen-3.2.8/lapack/slarf.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slarf.f rename to deps/eigen-3.2.8/lapack/slarf.f diff --git a/deps/eigen-3.2.1/lapack/slarfb.f b/deps/eigen-3.2.8/lapack/slarfb.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slarfb.f rename to deps/eigen-3.2.8/lapack/slarfb.f diff --git a/deps/eigen-3.2.1/lapack/slarfg.f b/deps/eigen-3.2.8/lapack/slarfg.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slarfg.f rename to deps/eigen-3.2.8/lapack/slarfg.f diff --git a/deps/eigen-3.2.1/lapack/slarft.f b/deps/eigen-3.2.8/lapack/slarft.f similarity index 100% rename from deps/eigen-3.2.1/lapack/slarft.f rename to deps/eigen-3.2.8/lapack/slarft.f diff --git a/deps/eigen-3.2.1/lapack/zlacgv.f b/deps/eigen-3.2.8/lapack/zlacgv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zlacgv.f rename to deps/eigen-3.2.8/lapack/zlacgv.f diff --git a/deps/eigen-3.2.1/lapack/zladiv.f b/deps/eigen-3.2.8/lapack/zladiv.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zladiv.f rename to deps/eigen-3.2.8/lapack/zladiv.f diff --git a/deps/eigen-3.2.1/lapack/zlarf.f b/deps/eigen-3.2.8/lapack/zlarf.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zlarf.f rename to deps/eigen-3.2.8/lapack/zlarf.f diff --git a/deps/eigen-3.2.1/lapack/zlarfb.f b/deps/eigen-3.2.8/lapack/zlarfb.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zlarfb.f rename to deps/eigen-3.2.8/lapack/zlarfb.f diff --git a/deps/eigen-3.2.1/lapack/zlarfg.f b/deps/eigen-3.2.8/lapack/zlarfg.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zlarfg.f rename to deps/eigen-3.2.8/lapack/zlarfg.f diff --git a/deps/eigen-3.2.1/lapack/zlarft.f b/deps/eigen-3.2.8/lapack/zlarft.f similarity index 100% rename from deps/eigen-3.2.1/lapack/zlarft.f rename to deps/eigen-3.2.8/lapack/zlarft.f diff --git a/deps/eigen-3.2.1/scripts/CMakeLists.txt b/deps/eigen-3.2.8/scripts/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/scripts/CMakeLists.txt rename to deps/eigen-3.2.8/scripts/CMakeLists.txt diff --git a/deps/eigen-3.2.1/scripts/buildtests.in b/deps/eigen-3.2.8/scripts/buildtests.in similarity index 100% rename from deps/eigen-3.2.1/scripts/buildtests.in rename to deps/eigen-3.2.8/scripts/buildtests.in diff --git a/deps/eigen-3.2.1/scripts/cdashtesting.cmake.in b/deps/eigen-3.2.8/scripts/cdashtesting.cmake.in similarity index 100% rename from deps/eigen-3.2.1/scripts/cdashtesting.cmake.in rename to deps/eigen-3.2.8/scripts/cdashtesting.cmake.in diff --git a/deps/eigen-3.2.1/scripts/check.in b/deps/eigen-3.2.8/scripts/check.in similarity index 100% rename from deps/eigen-3.2.1/scripts/check.in rename to deps/eigen-3.2.8/scripts/check.in diff --git a/deps/eigen-3.2.1/scripts/debug.in b/deps/eigen-3.2.8/scripts/debug.in similarity index 100% rename from deps/eigen-3.2.1/scripts/debug.in rename to deps/eigen-3.2.8/scripts/debug.in diff --git a/deps/eigen-3.2.1/scripts/eigen_gen_credits.cpp b/deps/eigen-3.2.8/scripts/eigen_gen_credits.cpp similarity index 100% rename from deps/eigen-3.2.1/scripts/eigen_gen_credits.cpp rename to deps/eigen-3.2.8/scripts/eigen_gen_credits.cpp diff --git a/deps/eigen-3.2.1/scripts/eigen_gen_docs b/deps/eigen-3.2.8/scripts/eigen_gen_docs similarity index 100% rename from deps/eigen-3.2.1/scripts/eigen_gen_docs rename to deps/eigen-3.2.8/scripts/eigen_gen_docs diff --git a/deps/eigen-3.2.1/scripts/release.in b/deps/eigen-3.2.8/scripts/release.in similarity index 100% rename from deps/eigen-3.2.1/scripts/release.in rename to deps/eigen-3.2.8/scripts/release.in diff --git a/deps/eigen-3.2.1/scripts/relicense.py b/deps/eigen-3.2.8/scripts/relicense.py similarity index 100% rename from deps/eigen-3.2.1/scripts/relicense.py rename to deps/eigen-3.2.8/scripts/relicense.py diff --git a/deps/eigen-3.2.1/signature_of_eigen3_matrix_library b/deps/eigen-3.2.8/signature_of_eigen3_matrix_library similarity index 100% rename from deps/eigen-3.2.1/signature_of_eigen3_matrix_library rename to deps/eigen-3.2.8/signature_of_eigen3_matrix_library diff --git a/deps/eigen-3.2.1/test/CMakeLists.txt b/deps/eigen-3.2.8/test/CMakeLists.txt similarity index 96% rename from deps/eigen-3.2.1/test/CMakeLists.txt rename to deps/eigen-3.2.8/test/CMakeLists.txt index ccb0fc79..c0d8a4e2 100644 --- a/deps/eigen-3.2.1/test/CMakeLists.txt +++ b/deps/eigen-3.2.8/test/CMakeLists.txt @@ -66,7 +66,7 @@ endif() find_package(Pastix) find_package(Scotch) -find_package(Metis) +find_package(Metis 5.0 REQUIRED) if(PASTIX_FOUND AND BLAS_FOUND) add_definitions("-DEIGEN_PASTIX_SUPPORT") include_directories(${PASTIX_INCLUDES}) @@ -202,7 +202,9 @@ ei_add_test(geo_alignedbox) ei_add_test(stdvector) ei_add_test(stdvector_overload) ei_add_test(stdlist) +ei_add_test(stdlist_overload) ei_add_test(stddeque) +ei_add_test(stddeque_overload) ei_add_test(resize) ei_add_test(sparse_vector) ei_add_test(sparse_basic) @@ -222,6 +224,8 @@ ei_add_test(sizeoverflow) ei_add_test(prec_inverse_4x4) ei_add_test(vectorwiseop) ei_add_test(special_numbers) +ei_add_test(rvalue_types) +ei_add_test(mpl2only) ei_add_test(simplicial_cholesky) ei_add_test(conjugate_gradient) @@ -279,6 +283,13 @@ ei_add_property(EIGEN_TESTING_SUMMARY "CXX_FLAGS: ${CMAKE_CXX_FLAGS}\n") ei_add_property(EIGEN_TESTING_SUMMARY "Sparse lib flags: ${SPARSE_LIBS}\n") option(EIGEN_TEST_EIGEN2 "Run whole Eigen2 test suite against EIGEN2_SUPPORT" OFF) +mark_as_advanced(EIGEN_TEST_EIGEN2) if(EIGEN_TEST_EIGEN2) add_subdirectory(eigen2) endif() + + +option(EIGEN_TEST_BUILD_DOCUMENTATION "Test building the doxygen documentation" OFF) +IF(EIGEN_TEST_BUILD_DOCUMENTATION) + add_dependencies(buildtests doc) +ENDIF() diff --git a/deps/eigen-3.2.1/test/adjoint.cpp b/deps/eigen-3.2.8/test/adjoint.cpp similarity index 100% rename from deps/eigen-3.2.1/test/adjoint.cpp rename to deps/eigen-3.2.8/test/adjoint.cpp diff --git a/deps/eigen-3.2.1/test/array.cpp b/deps/eigen-3.2.8/test/array.cpp similarity index 99% rename from deps/eigen-3.2.1/test/array.cpp rename to deps/eigen-3.2.8/test/array.cpp index c607da63..68f6b3d7 100644 --- a/deps/eigen-3.2.1/test/array.cpp +++ b/deps/eigen-3.2.8/test/array.cpp @@ -109,6 +109,8 @@ template void comparisons(const ArrayType& m) VERIFY(! (m1 < m3).all() ); VERIFY(! (m1 > m3).all() ); } + VERIFY(!(m1 > m2 && m1 < m2).any()); + VERIFY((m1 <= m2 || m1 >= m2).all()); // comparisons to scalar VERIFY( (m1 != (m1(r,c)+1) ).any() ); diff --git a/deps/eigen-3.2.1/test/array_for_matrix.cpp b/deps/eigen-3.2.8/test/array_for_matrix.cpp similarity index 99% rename from deps/eigen-3.2.1/test/array_for_matrix.cpp rename to deps/eigen-3.2.8/test/array_for_matrix.cpp index 9a50f99a..9667e1f1 100644 --- a/deps/eigen-3.2.1/test/array_for_matrix.cpp +++ b/deps/eigen-3.2.8/test/array_for_matrix.cpp @@ -102,6 +102,7 @@ template void comparisons(const MatrixType& m) VERIFY( (m1.array() > (m1(r,c)-1) ).any() ); VERIFY( (m1.array() < (m1(r,c)+1) ).any() ); VERIFY( (m1.array() == m1(r,c) ).any() ); + VERIFY( m1.cwiseEqual(m1(r,c)).any() ); // test Select VERIFY_IS_APPROX( (m1.array() +typename Eigen::internal::enable_if::IsComplex,typename MatrixType::Scalar>::type +block_real_only(const MatrixType &m1, Index r1, Index r2, Index c1, Index c2, const Scalar& s1) { + // check cwise-Functions: + VERIFY_IS_APPROX(m1.row(r1).cwiseMax(s1), m1.cwiseMax(s1).row(r1)); + VERIFY_IS_APPROX(m1.col(c1).cwiseMin(s1), m1.cwiseMin(s1).col(c1)); + + VERIFY_IS_APPROX(m1.block(r1,c1,r2-r1+1,c2-c1+1).cwiseMin(s1), m1.cwiseMin(s1).block(r1,c1,r2-r1+1,c2-c1+1)); + VERIFY_IS_APPROX(m1.block(r1,c1,r2-r1+1,c2-c1+1).cwiseMax(s1), m1.cwiseMax(s1).block(r1,c1,r2-r1+1,c2-c1+1)); + + return Scalar(0); +} + +template +typename Eigen::internal::enable_if::IsComplex,typename MatrixType::Scalar>::type +block_real_only(const MatrixType &, Index, Index, Index, Index, const Scalar&) { + return Scalar(0); +} + + template void block(const MatrixType& m) { typedef typename MatrixType::Index Index; @@ -37,6 +57,8 @@ template void block(const MatrixType& m) Index c1 = internal::random(0,cols-1); Index c2 = internal::random(c1,cols-1); + block_real_only(m1, r1, r2, c1, c1, s1); + //check row() and col() VERIFY_IS_EQUAL(m1.col(c1).transpose(), m1.transpose().row(c1)); //check operator(), both constant and non-constant, on row() and col() @@ -51,7 +73,8 @@ template void block(const MatrixType& m) VERIFY_IS_APPROX(m1.col(c1), m1_copy.col(c1) + s1 * m1_copy.col(c2)); m1.col(c1).col(0) += s1 * m1_copy.col(c2); VERIFY_IS_APPROX(m1.col(c1), m1_copy.col(c1) + Scalar(2) * s1 * m1_copy.col(c2)); - + + //check block() Matrix b1(1,1); b1(0,0) = m1(r1,c1); diff --git a/deps/eigen-3.2.1/test/cholesky.cpp b/deps/eigen-3.2.8/test/cholesky.cpp similarity index 85% rename from deps/eigen-3.2.1/test/cholesky.cpp rename to deps/eigen-3.2.8/test/cholesky.cpp index b980dc57..56885deb 100644 --- a/deps/eigen-3.2.1/test/cholesky.cpp +++ b/deps/eigen-3.2.8/test/cholesky.cpp @@ -68,6 +68,7 @@ template void cholesky(const MatrixType& m) Index cols = m.cols(); typedef typename MatrixType::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; typedef Matrix SquareMatrixType; typedef Matrix VectorType; @@ -179,6 +180,57 @@ template void cholesky(const MatrixType& m) // restore if(sign == -1) symm = -symm; + + // check matrices coming from linear constraints with Lagrange multipliers + if(rows>=3) + { + SquareMatrixType A = symm; + int c = internal::random(0,rows-2); + A.bottomRightCorner(c,c).setZero(); + // Make sure a solution exists: + vecX.setRandom(); + vecB = A * vecX; + vecX.setZero(); + ldltlo.compute(A); + VERIFY_IS_APPROX(A, ldltlo.reconstructedMatrix()); + vecX = ldltlo.solve(vecB); + VERIFY_IS_APPROX(A * vecX, vecB); + } + + // check non-full rank matrices + if(rows>=3) + { + int r = internal::random(1,rows-1); + Matrix a = Matrix::Random(rows,r); + SquareMatrixType A = a * a.adjoint(); + // Make sure a solution exists: + vecX.setRandom(); + vecB = A * vecX; + vecX.setZero(); + ldltlo.compute(A); + VERIFY_IS_APPROX(A, ldltlo.reconstructedMatrix()); + vecX = ldltlo.solve(vecB); + VERIFY_IS_APPROX(A * vecX, vecB); + } + + // check matrices with a wide spectrum + if(rows>=3) + { + RealScalar s = (std::min)(16,std::numeric_limits::max_exponent10/8); + Matrix a = Matrix::Random(rows,rows); + Matrix d = Matrix::Random(rows); + for(int k=0; k(-s,s)); + SquareMatrixType A = a * d.asDiagonal() * a.adjoint(); + // Make sure a solution exists: + vecX.setRandom(); + vecB = A * vecX; + vecX.setZero(); + ldltlo.compute(A); + VERIFY_IS_APPROX(A, ldltlo.reconstructedMatrix()); + vecX = ldltlo.solve(vecB); + VERIFY_IS_APPROX(A * vecX, vecB); + } } // update/downdate @@ -268,33 +320,35 @@ template void cholesky_definiteness(const MatrixType& m) { eigen_assert(m.rows() == 2 && m.cols() == 2); MatrixType mat; + LDLT ldlt(2); + { mat << 1, 0, 0, -1; - LDLT ldlt(mat); + ldlt.compute(mat); VERIFY(!ldlt.isNegative()); VERIFY(!ldlt.isPositive()); } { mat << 1, 2, 2, 1; - LDLT ldlt(mat); + ldlt.compute(mat); VERIFY(!ldlt.isNegative()); VERIFY(!ldlt.isPositive()); } { mat << 0, 0, 0, 0; - LDLT ldlt(mat); + ldlt.compute(mat); VERIFY(ldlt.isNegative()); VERIFY(ldlt.isPositive()); } { mat << 0, 0, 0, 1; - LDLT ldlt(mat); + ldlt.compute(mat); VERIFY(!ldlt.isNegative()); VERIFY(ldlt.isPositive()); } { mat << -1, 0, 0, 0; - LDLT ldlt(mat); + ldlt.compute(mat); VERIFY(ldlt.isNegative()); VERIFY(!ldlt.isPositive()); } diff --git a/deps/eigen-3.2.1/test/cholmod_support.cpp b/deps/eigen-3.2.8/test/cholmod_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/cholmod_support.cpp rename to deps/eigen-3.2.8/test/cholmod_support.cpp diff --git a/deps/eigen-3.2.1/test/commainitializer.cpp b/deps/eigen-3.2.8/test/commainitializer.cpp similarity index 100% rename from deps/eigen-3.2.1/test/commainitializer.cpp rename to deps/eigen-3.2.8/test/commainitializer.cpp diff --git a/deps/eigen-3.2.1/test/conjugate_gradient.cpp b/deps/eigen-3.2.8/test/conjugate_gradient.cpp similarity index 79% rename from deps/eigen-3.2.1/test/conjugate_gradient.cpp rename to deps/eigen-3.2.8/test/conjugate_gradient.cpp index 869051b3..019cc4d6 100644 --- a/deps/eigen-3.2.1/test/conjugate_gradient.cpp +++ b/deps/eigen-3.2.8/test/conjugate_gradient.cpp @@ -12,13 +12,15 @@ template void test_conjugate_gradient_T() { - ConjugateGradient, Lower> cg_colmajor_lower_diag; - ConjugateGradient, Upper> cg_colmajor_upper_diag; + ConjugateGradient, Lower > cg_colmajor_lower_diag; + ConjugateGradient, Upper > cg_colmajor_upper_diag; + ConjugateGradient, Lower|Upper> cg_colmajor_loup_diag; ConjugateGradient, Lower, IdentityPreconditioner> cg_colmajor_lower_I; ConjugateGradient, Upper, IdentityPreconditioner> cg_colmajor_upper_I; CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_lower_diag) ); CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_upper_diag) ); + CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_loup_diag) ); CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_lower_I) ); CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_upper_I) ); } diff --git a/deps/eigen-3.2.1/test/conservative_resize.cpp b/deps/eigen-3.2.8/test/conservative_resize.cpp similarity index 100% rename from deps/eigen-3.2.1/test/conservative_resize.cpp rename to deps/eigen-3.2.8/test/conservative_resize.cpp diff --git a/deps/eigen-3.2.1/test/corners.cpp b/deps/eigen-3.2.8/test/corners.cpp similarity index 100% rename from deps/eigen-3.2.1/test/corners.cpp rename to deps/eigen-3.2.8/test/corners.cpp diff --git a/deps/eigen-3.2.1/test/cwiseop.cpp b/deps/eigen-3.2.8/test/cwiseop.cpp similarity index 99% rename from deps/eigen-3.2.1/test/cwiseop.cpp rename to deps/eigen-3.2.8/test/cwiseop.cpp index 247fa2a0..e3361da1 100644 --- a/deps/eigen-3.2.1/test/cwiseop.cpp +++ b/deps/eigen-3.2.8/test/cwiseop.cpp @@ -9,6 +9,8 @@ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #define EIGEN2_SUPPORT +#define EIGEN_NO_EIGEN2_DEPRECATED_WARNING + #define EIGEN_NO_STATIC_ASSERT #include "main.h" #include diff --git a/deps/eigen-3.2.1/test/denseLM.cpp b/deps/eigen-3.2.8/test/denseLM.cpp similarity index 100% rename from deps/eigen-3.2.1/test/denseLM.cpp rename to deps/eigen-3.2.8/test/denseLM.cpp diff --git a/deps/eigen-3.2.1/test/determinant.cpp b/deps/eigen-3.2.8/test/determinant.cpp similarity index 100% rename from deps/eigen-3.2.1/test/determinant.cpp rename to deps/eigen-3.2.8/test/determinant.cpp diff --git a/deps/eigen-3.2.1/test/diagonal.cpp b/deps/eigen-3.2.8/test/diagonal.cpp similarity index 100% rename from deps/eigen-3.2.1/test/diagonal.cpp rename to deps/eigen-3.2.8/test/diagonal.cpp diff --git a/deps/eigen-3.2.1/test/diagonalmatrices.cpp b/deps/eigen-3.2.8/test/diagonalmatrices.cpp similarity index 100% rename from deps/eigen-3.2.1/test/diagonalmatrices.cpp rename to deps/eigen-3.2.8/test/diagonalmatrices.cpp diff --git a/deps/eigen-3.2.1/test/dontalign.cpp b/deps/eigen-3.2.8/test/dontalign.cpp similarity index 100% rename from deps/eigen-3.2.1/test/dontalign.cpp rename to deps/eigen-3.2.8/test/dontalign.cpp diff --git a/deps/eigen-3.2.1/test/dynalloc.cpp b/deps/eigen-3.2.8/test/dynalloc.cpp similarity index 83% rename from deps/eigen-3.2.1/test/dynalloc.cpp rename to deps/eigen-3.2.8/test/dynalloc.cpp index 8bbda1c9..ef92c050 100644 --- a/deps/eigen-3.2.1/test/dynalloc.cpp +++ b/deps/eigen-3.2.8/test/dynalloc.cpp @@ -53,7 +53,7 @@ void check_aligned_new() void check_aligned_stack_alloc() { - for(int i = 1; i < 1000; i++) + for(int i = 1; i < 400; i++) { ei_declare_aligned_stack_constructed_variable(float,p,i,0); VERIFY(size_t(p)%ALIGNMENT==0); @@ -87,6 +87,32 @@ template void check_dynaligned() delete obj; } +template void check_custom_new_delete() +{ + { + T* t = new T; + delete t; + } + + { + std::size_t N = internal::random(1,10); + T* t = new T[N]; + delete[] t; + } + +#ifdef EIGEN_ALIGN + { + T* t = static_cast((T::operator new)(sizeof(T))); + (T::operator delete)(t, sizeof(T)); + } + + { + T* t = static_cast((T::operator new)(sizeof(T))); + (T::operator delete)(t); + } +#endif +} + void test_dynalloc() { // low level dynamic memory allocation @@ -94,7 +120,9 @@ void test_dynalloc() CALL_SUBTEST(check_aligned_malloc()); CALL_SUBTEST(check_aligned_new()); CALL_SUBTEST(check_aligned_stack_alloc()); - + + // check static allocation, who knows ? + #if EIGEN_ALIGN_STATICALLY for (int i=0; i() ); @@ -102,10 +130,13 @@ void test_dynalloc() CALL_SUBTEST(check_dynaligned() ); CALL_SUBTEST(check_dynaligned() ); CALL_SUBTEST(check_dynaligned() ); + + CALL_SUBTEST( check_custom_new_delete() ); + CALL_SUBTEST( check_custom_new_delete() ); + CALL_SUBTEST( check_custom_new_delete() ); + CALL_SUBTEST( check_custom_new_delete() ); } - - // check static allocation, who knows ? - #if EIGEN_ALIGN_STATICALLY + { MyStruct foo0; VERIFY(size_t(foo0.avec.data())%ALIGNMENT==0); MyClassA fooA; VERIFY(size_t(fooA.avec.data())%ALIGNMENT==0); diff --git a/deps/eigen-3.2.1/test/eigen2/CMakeLists.txt b/deps/eigen-3.2.8/test/eigen2/CMakeLists.txt similarity index 97% rename from deps/eigen-3.2.1/test/eigen2/CMakeLists.txt rename to deps/eigen-3.2.8/test/eigen2/CMakeLists.txt index 84931e03..9615a602 100644 --- a/deps/eigen-3.2.1/test/eigen2/CMakeLists.txt +++ b/deps/eigen-3.2.8/test/eigen2/CMakeLists.txt @@ -4,6 +4,7 @@ add_dependencies(eigen2_check eigen2_buildtests) add_dependencies(buildtests eigen2_buildtests) add_definitions("-DEIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API") +add_definitions("-DEIGEN_NO_EIGEN2_DEPRECATED_WARNING") ei_add_test(eigen2_meta) ei_add_test(eigen2_sizeof) diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_adjoint.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_adjoint.cpp similarity index 97% rename from deps/eigen-3.2.1/test/eigen2/eigen2_adjoint.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_adjoint.cpp index 8ec9c920..c0f81145 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_adjoint.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_adjoint.cpp @@ -29,8 +29,6 @@ template void adjoint(const MatrixType& m) MatrixType m1 = MatrixType::Random(rows, cols), m2 = MatrixType::Random(rows, cols), m3(rows, cols), - mzero = MatrixType::Zero(rows, cols), - identity = SquareMatrixType::Identity(rows, rows), square = SquareMatrixType::Random(rows, rows); VectorType v1 = VectorType::Random(rows), v2 = VectorType::Random(rows), diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_alignedbox.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_alignedbox.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_alignedbox.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_alignedbox.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_array.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_array.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_array.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_array.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_basicstuff.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_basicstuff.cpp similarity index 94% rename from deps/eigen-3.2.1/test/eigen2/eigen2_basicstuff.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_basicstuff.cpp index 4fa16d5a..dd2dec1e 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_basicstuff.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_basicstuff.cpp @@ -23,11 +23,8 @@ template void basicStuff(const MatrixType& m) m2 = MatrixType::Random(rows, cols), m3(rows, cols), mzero = MatrixType::Zero(rows, cols), - identity = Matrix - ::Identity(rows, rows), square = Matrix::Random(rows, rows); VectorType v1 = VectorType::Random(rows), - v2 = VectorType::Random(rows), vzero = VectorType::Zero(rows); Scalar x = ei_random(); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_bug_132.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_bug_132.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_bug_132.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_bug_132.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_cholesky.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_cholesky.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_cholesky.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_cholesky.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_commainitializer.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_commainitializer.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_commainitializer.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_commainitializer.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_cwiseop.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_cwiseop.cpp similarity index 94% rename from deps/eigen-3.2.1/test/eigen2/eigen2_cwiseop.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_cwiseop.cpp index 4391d19b..22e1cc34 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_cwiseop.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_cwiseop.cpp @@ -35,11 +35,8 @@ template void cwiseops(const MatrixType& m) mzero = MatrixType::Zero(rows, cols), mones = MatrixType::Ones(rows, cols), identity = Matrix - ::Identity(rows, rows), - square = Matrix::Random(rows, rows); - VectorType v1 = VectorType::Random(rows), - v2 = VectorType::Random(rows), - vzero = VectorType::Zero(rows), + ::Identity(rows, rows); + VectorType vzero = VectorType::Zero(rows), vones = VectorType::Ones(rows), v3(rows); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_determinant.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_determinant.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_determinant.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_determinant.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_dynalloc.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_dynalloc.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_dynalloc.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_dynalloc.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_eigensolver.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_eigensolver.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_eigensolver.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_eigensolver.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_first_aligned.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_first_aligned.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_first_aligned.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_first_aligned.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_geometry.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_geometry.cpp similarity index 99% rename from deps/eigen-3.2.1/test/eigen2/eigen2_geometry.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_geometry.cpp index 70b4ab5f..51404077 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_geometry.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_geometry.cpp @@ -392,6 +392,7 @@ template void geometry(void) #define VERIFY_EULER(I,J,K, X,Y,Z) { \ Vector3 ea = m.eulerAngles(I,J,K); \ Matrix3 m1 = Matrix3(AngleAxisx(ea[0], Vector3::Unit##X()) * AngleAxisx(ea[1], Vector3::Unit##Y()) * AngleAxisx(ea[2], Vector3::Unit##Z())); \ + VERIFY_IS_APPROX(m, m1); \ VERIFY_IS_APPROX(m, Matrix3(AngleAxisx(ea[0], Vector3::Unit##X()) * AngleAxisx(ea[1], Vector3::Unit##Y()) * AngleAxisx(ea[2], Vector3::Unit##Z()))); \ } VERIFY_EULER(0,1,2, X,Y,Z); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp similarity index 99% rename from deps/eigen-3.2.1/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp index f83b5724..12d4a71c 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp @@ -394,6 +394,7 @@ template void geometry(void) #define VERIFY_EULER(I,J,K, X,Y,Z) { \ Vector3 ea = m.eulerAngles(I,J,K); \ Matrix3 m1 = Matrix3(AngleAxisx(ea[0], Vector3::Unit##X()) * AngleAxisx(ea[1], Vector3::Unit##Y()) * AngleAxisx(ea[2], Vector3::Unit##Z())); \ + VERIFY_IS_APPROX(m, m1); \ VERIFY_IS_APPROX(m, Matrix3(AngleAxisx(ea[0], Vector3::Unit##X()) * AngleAxisx(ea[1], Vector3::Unit##Y()) * AngleAxisx(ea[2], Vector3::Unit##Z()))); \ } VERIFY_EULER(0,1,2, X,Y,Z); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_hyperplane.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_hyperplane.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_hyperplane.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_hyperplane.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_inverse.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_inverse.cpp similarity index 97% rename from deps/eigen-3.2.1/test/eigen2/eigen2_inverse.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_inverse.cpp index 5de1dfef..ccd24a19 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_inverse.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_inverse.cpp @@ -25,7 +25,6 @@ template void inverse(const MatrixType& m) MatrixType m1 = MatrixType::Random(rows, cols), m2(rows, cols), - mzero = MatrixType::Zero(rows, cols), identity = MatrixType::Identity(rows, rows); while(ei_abs(m1.determinant()) < RealScalar(0.1) && rows <= 8) diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_linearstructure.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_linearstructure.cpp similarity index 97% rename from deps/eigen-3.2.1/test/eigen2/eigen2_linearstructure.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_linearstructure.cpp index 22f02c39..488f4c48 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_linearstructure.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_linearstructure.cpp @@ -25,8 +25,7 @@ template void linearStructure(const MatrixType& m) // to test it, hence I consider that we will have tested Random.h MatrixType m1 = MatrixType::Random(rows, cols), m2 = MatrixType::Random(rows, cols), - m3(rows, cols), - mzero = MatrixType::Zero(rows, cols); + m3(rows, cols); Scalar s1 = ei_random(); while (ei_abs(s1)<1e-3) s1 = ei_random(); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_lu.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_lu.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_lu.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_lu.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_map.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_map.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_map.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_map.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_meta.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_meta.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_meta.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_meta.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_miscmatrices.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_miscmatrices.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_miscmatrices.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_miscmatrices.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_mixingtypes.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_mixingtypes.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_mixingtypes.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_mixingtypes.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_newstdvector.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_newstdvector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_newstdvector.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_newstdvector.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_nomalloc.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_nomalloc.cpp similarity index 72% rename from deps/eigen-3.2.1/test/eigen2/eigen2_nomalloc.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_nomalloc.cpp index e234abe4..d34a6999 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_nomalloc.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_nomalloc.cpp @@ -25,22 +25,12 @@ template void nomalloc(const MatrixType& m) */ typedef typename MatrixType::Scalar Scalar; - typedef Matrix VectorType; int rows = m.rows(); int cols = m.cols(); MatrixType m1 = MatrixType::Random(rows, cols), - m2 = MatrixType::Random(rows, cols), - m3(rows, cols), - mzero = MatrixType::Zero(rows, cols), - identity = Matrix - ::Identity(rows, rows), - square = Matrix - ::Random(rows, rows); - VectorType v1 = VectorType::Random(rows), - v2 = VectorType::Random(rows), - vzero = VectorType::Zero(rows); + m2 = MatrixType::Random(rows, cols); Scalar s1 = ei_random(); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_packetmath.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_packetmath.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_packetmath.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_packetmath.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_parametrizedline.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_parametrizedline.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_parametrizedline.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_parametrizedline.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_prec_inverse_4x4.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_prec_inverse_4x4.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_prec_inverse_4x4.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_prec_inverse_4x4.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_product_large.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_product_large.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_product_large.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_product_large.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_product_small.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_product_small.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_product_small.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_product_small.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_qr.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_qr.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_qr.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_qr.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_qtvector.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_qtvector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_qtvector.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_qtvector.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_regression.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_regression.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_regression.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_regression.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sizeof.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sizeof.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sizeof.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sizeof.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_smallvectors.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_smallvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_smallvectors.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_smallvectors.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sparse_basic.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sparse_basic.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sparse_basic.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sparse_basic.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sparse_product.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sparse_product.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sparse_product.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sparse_product.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sparse_solvers.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sparse_solvers.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sparse_solvers.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sparse_solvers.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sparse_vector.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sparse_vector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sparse_vector.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sparse_vector.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_stdvector.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_stdvector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_stdvector.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_stdvector.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_submatrices.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_submatrices.cpp similarity index 93% rename from deps/eigen-3.2.1/test/eigen2/eigen2_submatrices.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_submatrices.cpp index c5d3f243..dee970b6 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_submatrices.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_submatrices.cpp @@ -51,16 +51,10 @@ template void submatrices(const MatrixType& m) MatrixType m1 = MatrixType::Random(rows, cols), m2 = MatrixType::Random(rows, cols), m3(rows, cols), - mzero = MatrixType::Zero(rows, cols), ones = MatrixType::Ones(rows, cols), - identity = Matrix - ::Identity(rows, rows), square = Matrix ::Random(rows, rows); - VectorType v1 = VectorType::Random(rows), - v2 = VectorType::Random(rows), - v3 = VectorType::Random(rows), - vzero = VectorType::Zero(rows); + VectorType v1 = VectorType::Random(rows); Scalar s1 = ei_random(); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_sum.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_sum.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_sum.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_sum.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_svd.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_svd.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_svd.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_svd.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_swap.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_swap.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_swap.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_swap.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_triangular.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_triangular.cpp similarity index 88% rename from deps/eigen-3.2.1/test/eigen2/eigen2_triangular.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_triangular.cpp index 3748c7d7..6f17b7df 100644 --- a/deps/eigen-3.2.1/test/eigen2/eigen2_triangular.cpp +++ b/deps/eigen-3.2.8/test/eigen2/eigen2_triangular.cpp @@ -13,7 +13,6 @@ template void triangular(const MatrixType& m) { typedef typename MatrixType::Scalar Scalar; typedef typename NumTraits::Real RealScalar; - typedef Matrix VectorType; RealScalar largerEps = 10*test_precision(); @@ -25,16 +24,7 @@ template void triangular(const MatrixType& m) m3(rows, cols), m4(rows, cols), r1(rows, cols), - r2(rows, cols), - mzero = MatrixType::Zero(rows, cols), - mones = MatrixType::Ones(rows, cols), - identity = Matrix - ::Identity(rows, rows), - square = Matrix - ::Random(rows, rows); - VectorType v1 = VectorType::Random(rows), - v2 = VectorType::Random(rows), - vzero = VectorType::Zero(rows); + r2(rows, cols); MatrixType m1up = m1.template part(); MatrixType m2up = m2.template part(); diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_unalignedassert.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_unalignedassert.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_unalignedassert.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_unalignedassert.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/eigen2_visitor.cpp b/deps/eigen-3.2.8/test/eigen2/eigen2_visitor.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/eigen2_visitor.cpp rename to deps/eigen-3.2.8/test/eigen2/eigen2_visitor.cpp diff --git a/deps/eigen-3.2.1/test/eigen2/gsl_helper.h b/deps/eigen-3.2.8/test/eigen2/gsl_helper.h similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/gsl_helper.h rename to deps/eigen-3.2.8/test/eigen2/gsl_helper.h diff --git a/deps/eigen-3.2.1/test/eigen2/main.h b/deps/eigen-3.2.8/test/eigen2/main.h similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/main.h rename to deps/eigen-3.2.8/test/eigen2/main.h diff --git a/deps/eigen-3.2.1/test/eigen2/product.h b/deps/eigen-3.2.8/test/eigen2/product.h similarity index 95% rename from deps/eigen-3.2.1/test/eigen2/product.h rename to deps/eigen-3.2.8/test/eigen2/product.h index 2c9604d9..ae1b4bae 100644 --- a/deps/eigen-3.2.1/test/eigen2/product.h +++ b/deps/eigen-3.2.8/test/eigen2/product.h @@ -40,8 +40,7 @@ template void product(const MatrixType& m) // to test it, hence I consider that we will have tested Random.h MatrixType m1 = MatrixType::Random(rows, cols), m2 = MatrixType::Random(rows, cols), - m3(rows, cols), - mzero = MatrixType::Zero(rows, cols); + m3(rows, cols); RowSquareMatrixType identity = RowSquareMatrixType::Identity(rows, rows), square = RowSquareMatrixType::Random(rows, rows), @@ -49,9 +48,7 @@ template void product(const MatrixType& m) ColSquareMatrixType square2 = ColSquareMatrixType::Random(cols, cols), res2 = ColSquareMatrixType::Random(cols, cols); - RowVectorType v1 = RowVectorType::Random(rows), - v2 = RowVectorType::Random(rows), - vzero = RowVectorType::Zero(rows); + RowVectorType v1 = RowVectorType::Random(rows); ColVectorType vc2 = ColVectorType::Random(cols), vcres(cols); OtherMajorMatrixType tm1 = m1; diff --git a/deps/eigen-3.2.1/test/eigen2/runtest.sh b/deps/eigen-3.2.8/test/eigen2/runtest.sh similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/runtest.sh rename to deps/eigen-3.2.8/test/eigen2/runtest.sh diff --git a/deps/eigen-3.2.1/test/eigen2/sparse.h b/deps/eigen-3.2.8/test/eigen2/sparse.h similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/sparse.h rename to deps/eigen-3.2.8/test/eigen2/sparse.h diff --git a/deps/eigen-3.2.1/test/eigen2/testsuite.cmake b/deps/eigen-3.2.8/test/eigen2/testsuite.cmake similarity index 100% rename from deps/eigen-3.2.1/test/eigen2/testsuite.cmake rename to deps/eigen-3.2.8/test/eigen2/testsuite.cmake diff --git a/deps/eigen-3.2.1/test/eigen2support.cpp b/deps/eigen-3.2.8/test/eigen2support.cpp similarity index 98% rename from deps/eigen-3.2.1/test/eigen2support.cpp rename to deps/eigen-3.2.8/test/eigen2support.cpp index ad1d9809..1fa49a8c 100644 --- a/deps/eigen-3.2.1/test/eigen2support.cpp +++ b/deps/eigen-3.2.8/test/eigen2support.cpp @@ -8,6 +8,7 @@ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #define EIGEN2_SUPPORT +#define EIGEN_NO_EIGEN2_DEPRECATED_WARNING #include "main.h" diff --git a/deps/eigen-3.2.1/test/eigensolver_complex.cpp b/deps/eigen-3.2.8/test/eigensolver_complex.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigensolver_complex.cpp rename to deps/eigen-3.2.8/test/eigensolver_complex.cpp diff --git a/deps/eigen-3.2.1/test/eigensolver_generalized_real.cpp b/deps/eigen-3.2.8/test/eigensolver_generalized_real.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigensolver_generalized_real.cpp rename to deps/eigen-3.2.8/test/eigensolver_generalized_real.cpp diff --git a/deps/eigen-3.2.1/test/eigensolver_generic.cpp b/deps/eigen-3.2.8/test/eigensolver_generic.cpp similarity index 100% rename from deps/eigen-3.2.1/test/eigensolver_generic.cpp rename to deps/eigen-3.2.8/test/eigensolver_generic.cpp diff --git a/deps/eigen-3.2.1/test/eigensolver_selfadjoint.cpp b/deps/eigen-3.2.8/test/eigensolver_selfadjoint.cpp similarity index 82% rename from deps/eigen-3.2.1/test/eigensolver_selfadjoint.cpp rename to deps/eigen-3.2.8/test/eigensolver_selfadjoint.cpp index 5c6ecd87..38689cfb 100644 --- a/deps/eigen-3.2.1/test/eigensolver_selfadjoint.cpp +++ b/deps/eigen-3.2.8/test/eigensolver_selfadjoint.cpp @@ -29,7 +29,21 @@ template void selfadjointeigensolver(const MatrixType& m) MatrixType a = MatrixType::Random(rows,cols); MatrixType a1 = MatrixType::Random(rows,cols); MatrixType symmA = a.adjoint() * a + a1.adjoint() * a1; + MatrixType symmC = symmA; + + // randomly nullify some rows/columns + { + Index count = 1;//internal::random(-cols,cols); + for(Index k=0; k(0,cols-1); + symmA.row(i).setZero(); + symmA.col(i).setZero(); + } + } + symmA.template triangularView().setZero(); + symmC.template triangularView().setZero(); MatrixType b = MatrixType::Random(rows,cols); MatrixType b1 = MatrixType::Random(rows,cols); @@ -40,7 +54,7 @@ template void selfadjointeigensolver(const MatrixType& m) SelfAdjointEigenSolver eiDirect; eiDirect.computeDirect(symmA); // generalized eigen pb - GeneralizedSelfAdjointEigenSolver eiSymmGen(symmA, symmB); + GeneralizedSelfAdjointEigenSolver eiSymmGen(symmC, symmB); VERIFY_IS_EQUAL(eiSymm.info(), Success); VERIFY((symmA.template selfadjointView() * eiSymm.eigenvectors()).isApprox( @@ -57,27 +71,28 @@ template void selfadjointeigensolver(const MatrixType& m) VERIFY_IS_APPROX(eiSymm.eigenvalues(), eiSymmNoEivecs.eigenvalues()); // generalized eigen problem Ax = lBx - eiSymmGen.compute(symmA, symmB,Ax_lBx); + eiSymmGen.compute(symmC, symmB,Ax_lBx); VERIFY_IS_EQUAL(eiSymmGen.info(), Success); - VERIFY((symmA.template selfadjointView() * eiSymmGen.eigenvectors()).isApprox( + VERIFY((symmC.template selfadjointView() * eiSymmGen.eigenvectors()).isApprox( symmB.template selfadjointView() * (eiSymmGen.eigenvectors() * eiSymmGen.eigenvalues().asDiagonal()), largerEps)); // generalized eigen problem BAx = lx - eiSymmGen.compute(symmA, symmB,BAx_lx); + eiSymmGen.compute(symmC, symmB,BAx_lx); VERIFY_IS_EQUAL(eiSymmGen.info(), Success); - VERIFY((symmB.template selfadjointView() * (symmA.template selfadjointView() * eiSymmGen.eigenvectors())).isApprox( + VERIFY((symmB.template selfadjointView() * (symmC.template selfadjointView() * eiSymmGen.eigenvectors())).isApprox( (eiSymmGen.eigenvectors() * eiSymmGen.eigenvalues().asDiagonal()), largerEps)); // generalized eigen problem ABx = lx - eiSymmGen.compute(symmA, symmB,ABx_lx); + eiSymmGen.compute(symmC, symmB,ABx_lx); VERIFY_IS_EQUAL(eiSymmGen.info(), Success); - VERIFY((symmA.template selfadjointView() * (symmB.template selfadjointView() * eiSymmGen.eigenvectors())).isApprox( + VERIFY((symmC.template selfadjointView() * (symmB.template selfadjointView() * eiSymmGen.eigenvectors())).isApprox( (eiSymmGen.eigenvectors() * eiSymmGen.eigenvalues().asDiagonal()), largerEps)); + eiSymm.compute(symmC); MatrixType sqrtSymmA = eiSymm.operatorSqrt(); - VERIFY_IS_APPROX(MatrixType(symmA.template selfadjointView()), sqrtSymmA*sqrtSymmA); - VERIFY_IS_APPROX(sqrtSymmA, symmA.template selfadjointView()*eiSymm.operatorInverseSqrt()); + VERIFY_IS_APPROX(MatrixType(symmC.template selfadjointView()), sqrtSymmA*sqrtSymmA); + VERIFY_IS_APPROX(sqrtSymmA, symmC.template selfadjointView()*eiSymm.operatorInverseSqrt()); MatrixType id = MatrixType::Identity(rows, cols); VERIFY_IS_APPROX(id.template selfadjointView().operatorNorm(), RealScalar(1)); @@ -95,15 +110,15 @@ template void selfadjointeigensolver(const MatrixType& m) VERIFY_RAISES_ASSERT(eiSymmUninitialized.operatorInverseSqrt()); // test Tridiagonalization's methods - Tridiagonalization tridiag(symmA); + Tridiagonalization tridiag(symmC); // FIXME tridiag.matrixQ().adjoint() does not work - VERIFY_IS_APPROX(MatrixType(symmA.template selfadjointView()), tridiag.matrixQ() * tridiag.matrixT().eval() * MatrixType(tridiag.matrixQ()).adjoint()); + VERIFY_IS_APPROX(MatrixType(symmC.template selfadjointView()), tridiag.matrixQ() * tridiag.matrixT().eval() * MatrixType(tridiag.matrixQ()).adjoint()); if (rows > 1) { // Test matrix with NaN - symmA(0,0) = std::numeric_limits::quiet_NaN(); - SelfAdjointEigenSolver eiSymmNaN(symmA); + symmC(0,0) = std::numeric_limits::quiet_NaN(); + SelfAdjointEigenSolver eiSymmNaN(symmC); VERIFY_IS_EQUAL(eiSymmNaN.info(), NoConvergence); } } @@ -113,8 +128,10 @@ void test_eigensolver_selfadjoint() int s = 0; for(int i = 0; i < g_repeat; i++) { // very important to test 3x3 and 2x2 matrices since we provide special paths for them + CALL_SUBTEST_1( selfadjointeigensolver(Matrix2f()) ); CALL_SUBTEST_1( selfadjointeigensolver(Matrix2d()) ); CALL_SUBTEST_1( selfadjointeigensolver(Matrix3f()) ); + CALL_SUBTEST_1( selfadjointeigensolver(Matrix3d()) ); CALL_SUBTEST_2( selfadjointeigensolver(Matrix4d()) ); s = internal::random(1,EIGEN_TEST_MAX_SIZE/4); CALL_SUBTEST_3( selfadjointeigensolver(MatrixXf(s,s)) ); diff --git a/deps/eigen-3.2.1/test/exceptions.cpp b/deps/eigen-3.2.8/test/exceptions.cpp similarity index 100% rename from deps/eigen-3.2.1/test/exceptions.cpp rename to deps/eigen-3.2.8/test/exceptions.cpp diff --git a/deps/eigen-3.2.1/test/first_aligned.cpp b/deps/eigen-3.2.8/test/first_aligned.cpp similarity index 100% rename from deps/eigen-3.2.1/test/first_aligned.cpp rename to deps/eigen-3.2.8/test/first_aligned.cpp diff --git a/deps/eigen-3.2.1/test/geo_alignedbox.cpp b/deps/eigen-3.2.8/test/geo_alignedbox.cpp similarity index 98% rename from deps/eigen-3.2.1/test/geo_alignedbox.cpp rename to deps/eigen-3.2.8/test/geo_alignedbox.cpp index 8e36adbe..84663ad1 100644 --- a/deps/eigen-3.2.1/test/geo_alignedbox.cpp +++ b/deps/eigen-3.2.8/test/geo_alignedbox.cpp @@ -172,6 +172,8 @@ void test_geo_alignedbox() CALL_SUBTEST_9( alignedbox(AlignedBox1i()) ); CALL_SUBTEST_10( alignedbox(AlignedBox2i()) ); CALL_SUBTEST_11( alignedbox(AlignedBox3i()) ); + + CALL_SUBTEST_14( alignedbox(AlignedBox(4)) ); } CALL_SUBTEST_12( specificTest1() ); CALL_SUBTEST_13( specificTest2() ); diff --git a/deps/eigen-3.2.1/test/geo_eulerangles.cpp b/deps/eigen-3.2.8/test/geo_eulerangles.cpp similarity index 100% rename from deps/eigen-3.2.1/test/geo_eulerangles.cpp rename to deps/eigen-3.2.8/test/geo_eulerangles.cpp diff --git a/deps/eigen-3.2.1/test/geo_homogeneous.cpp b/deps/eigen-3.2.8/test/geo_homogeneous.cpp similarity index 100% rename from deps/eigen-3.2.1/test/geo_homogeneous.cpp rename to deps/eigen-3.2.8/test/geo_homogeneous.cpp diff --git a/deps/eigen-3.2.1/test/geo_hyperplane.cpp b/deps/eigen-3.2.8/test/geo_hyperplane.cpp similarity index 86% rename from deps/eigen-3.2.1/test/geo_hyperplane.cpp rename to deps/eigen-3.2.8/test/geo_hyperplane.cpp index f26fc132..32753780 100644 --- a/deps/eigen-3.2.1/test/geo_hyperplane.cpp +++ b/deps/eigen-3.2.8/test/geo_hyperplane.cpp @@ -114,6 +114,32 @@ template void lines() } } +template void planes() +{ + using std::abs; + typedef Hyperplane Plane; + typedef Matrix Vector; + + for(int i = 0; i < 10; i++) + { + Vector v0 = Vector::Random(); + Vector v1(v0), v2(v0); + if(internal::random(0,1)>0.25) + v1 += Vector::Random(); + if(internal::random(0,1)>0.25) + v2 += v1 * std::pow(internal::random(0,1),internal::random(1,16)); + if(internal::random(0,1)>0.25) + v2 += Vector::Random() * std::pow(internal::random(0,1),internal::random(1,16)); + + Plane p0 = Plane::Through(v0, v1, v2); + + VERIFY_IS_APPROX(p0.normal().norm(), Scalar(1)); + VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v0), Scalar(1)); + VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v1), Scalar(1)); + VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v2), Scalar(1)); + } +} + template void hyperplane_alignment() { typedef Hyperplane Plane3a; @@ -153,5 +179,7 @@ void test_geo_hyperplane() CALL_SUBTEST_4( hyperplane(Hyperplane,5>()) ); CALL_SUBTEST_1( lines() ); CALL_SUBTEST_3( lines() ); + CALL_SUBTEST_2( planes() ); + CALL_SUBTEST_5( planes() ); } } diff --git a/deps/eigen-3.2.1/test/geo_orthomethods.cpp b/deps/eigen-3.2.8/test/geo_orthomethods.cpp similarity index 100% rename from deps/eigen-3.2.1/test/geo_orthomethods.cpp rename to deps/eigen-3.2.8/test/geo_orthomethods.cpp diff --git a/deps/eigen-3.2.1/test/geo_parametrizedline.cpp b/deps/eigen-3.2.8/test/geo_parametrizedline.cpp similarity index 100% rename from deps/eigen-3.2.1/test/geo_parametrizedline.cpp rename to deps/eigen-3.2.8/test/geo_parametrizedline.cpp diff --git a/deps/eigen-3.2.1/test/geo_quaternion.cpp b/deps/eigen-3.2.8/test/geo_quaternion.cpp similarity index 100% rename from deps/eigen-3.2.1/test/geo_quaternion.cpp rename to deps/eigen-3.2.8/test/geo_quaternion.cpp diff --git a/deps/eigen-3.2.1/test/geo_transformations.cpp b/deps/eigen-3.2.8/test/geo_transformations.cpp similarity index 90% rename from deps/eigen-3.2.1/test/geo_transformations.cpp rename to deps/eigen-3.2.8/test/geo_transformations.cpp index ee3030b5..54776571 100644 --- a/deps/eigen-3.2.1/test/geo_transformations.cpp +++ b/deps/eigen-3.2.8/test/geo_transformations.cpp @@ -98,11 +98,19 @@ template void transformations() Matrix3 matrot1, m; Scalar a = internal::random(-Scalar(M_PI), Scalar(M_PI)); - Scalar s0 = internal::random(); + Scalar s0 = internal::random(), + s1 = internal::random(); + + while(v0.norm() < test_precision()) v0 = Vector3::Random(); + while(v1.norm() < test_precision()) v1 = Vector3::Random(); + VERIFY_IS_APPROX(v0, AngleAxisx(a, v0.normalized()) * v0); VERIFY_IS_APPROX(-v0, AngleAxisx(Scalar(M_PI), v0.unitOrthogonal()) * v0); - VERIFY_IS_APPROX(cos(a)*v0.squaredNorm(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0)); + if(abs(cos(a)) > test_precision()) + { + VERIFY_IS_APPROX(cos(a)*v0.squaredNorm(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0)); + } m = AngleAxisx(a, v0.normalized()).toRotationMatrix().adjoint(); VERIFY_IS_APPROX(Matrix3::Identity(), m * AngleAxisx(a, v0.normalized())); VERIFY_IS_APPROX(Matrix3::Identity(), AngleAxisx(a, v0.normalized()) * m); @@ -123,11 +131,18 @@ template void transformations() // angle-axis conversion AngleAxisx aa = AngleAxisx(q1); VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1); - VERIFY_IS_NOT_APPROX(q1 * v1, Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1); + + if(abs(aa.angle()) > NumTraits::dummy_precision()) + { + VERIFY( !(q1 * v1).isApprox(Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1) ); + } aa.fromRotationMatrix(aa.toRotationMatrix()); VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1); - VERIFY_IS_NOT_APPROX(q1 * v1, Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1); + if(abs(aa.angle()) > NumTraits::dummy_precision()) + { + VERIFY( !(q1 * v1).isApprox(Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1) ); + } // AngleAxis VERIFY_IS_APPROX(AngleAxisx(a,v1.normalized()).toRotationMatrix(), @@ -347,7 +362,9 @@ template void transformations() // test transform inversion t0.setIdentity(); t0.translate(v0); - t0.linear().setRandom(); + do { + t0.linear().setRandom(); + } while(t0.linear().jacobiSvd().singularValues()(2)()); Matrix4 t044 = Matrix4::Zero(); t044(3,3) = 1; t044.block(0,0,t0.matrix().rows(),4) = t0.matrix(); @@ -397,6 +414,29 @@ template void transformations() t20 = Translation2(v20) * (Rotation2D(s0) * Eigen::Scaling(s0)); t21 = Translation2(v20) * Rotation2D(s0) * Eigen::Scaling(s0); VERIFY_IS_APPROX(t20,t21); + + Rotation2D R0(s0), R1(s1); + t20 = Translation2(v20) * (R0 * Eigen::Scaling(s0)); + t21 = Translation2(v20) * R0 * Eigen::Scaling(s0); + VERIFY_IS_APPROX(t20,t21); + + t20 = Translation2(v20) * (R0 * R0.inverse() * Eigen::Scaling(s0)); + t21 = Translation2(v20) * Eigen::Scaling(s0); + VERIFY_IS_APPROX(t20,t21); + + VERIFY_IS_APPROX(s0, (R0.slerp(0, R1)).angle()); + VERIFY_IS_APPROX(s1, (R0.slerp(1, R1)).angle()); + VERIFY_IS_APPROX(s0, (R0.slerp(0.5, R0)).angle()); + VERIFY_IS_APPROX(Scalar(0), (R0.slerp(0.5, R0.inverse())).angle()); + + // check basic features + { + Rotation2D r1; // default ctor + r1 = Rotation2D(s0); // copy assignment + VERIFY_IS_APPROX(r1.angle(),s0); + Rotation2D r2(r1); // copy ctor + VERIFY_IS_APPROX(r2.angle(),s0); + } } template void transform_alignment() diff --git a/deps/eigen-3.2.1/test/hessenberg.cpp b/deps/eigen-3.2.8/test/hessenberg.cpp similarity index 100% rename from deps/eigen-3.2.1/test/hessenberg.cpp rename to deps/eigen-3.2.8/test/hessenberg.cpp diff --git a/deps/eigen-3.2.1/test/householder.cpp b/deps/eigen-3.2.8/test/householder.cpp similarity index 100% rename from deps/eigen-3.2.1/test/householder.cpp rename to deps/eigen-3.2.8/test/householder.cpp diff --git a/deps/eigen-3.2.1/test/integer_types.cpp b/deps/eigen-3.2.8/test/integer_types.cpp similarity index 100% rename from deps/eigen-3.2.1/test/integer_types.cpp rename to deps/eigen-3.2.8/test/integer_types.cpp diff --git a/deps/eigen-3.2.1/test/inverse.cpp b/deps/eigen-3.2.8/test/inverse.cpp similarity index 100% rename from deps/eigen-3.2.1/test/inverse.cpp rename to deps/eigen-3.2.8/test/inverse.cpp diff --git a/deps/eigen-3.2.1/test/jacobi.cpp b/deps/eigen-3.2.8/test/jacobi.cpp similarity index 100% rename from deps/eigen-3.2.1/test/jacobi.cpp rename to deps/eigen-3.2.8/test/jacobi.cpp diff --git a/deps/eigen-3.2.1/test/jacobisvd.cpp b/deps/eigen-3.2.8/test/jacobisvd.cpp similarity index 62% rename from deps/eigen-3.2.1/test/jacobisvd.cpp rename to deps/eigen-3.2.8/test/jacobisvd.cpp index 76157c30..12c556e5 100644 --- a/deps/eigen-3.2.1/test/jacobisvd.cpp +++ b/deps/eigen-3.2.8/test/jacobisvd.cpp @@ -67,6 +67,7 @@ template void jacobisvd_solve(const MatrixType& m, unsigned int computationOptions) { typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; typedef typename MatrixType::Index Index; Index rows = m.rows(); Index cols = m.cols(); @@ -81,9 +82,90 @@ void jacobisvd_solve(const MatrixType& m, unsigned int computationOptions) RhsType rhs = RhsType::Random(rows, internal::random(1, cols)); JacobiSVD svd(m, computationOptions); + + if(internal::is_same::value) svd.setThreshold(1e-8); + else if(internal::is_same::value) svd.setThreshold(1e-4); + SolutionType x = svd.solve(rhs); + + RealScalar residual = (m*x-rhs).norm(); + // Check that there is no significantly better solution in the neighborhood of x + if(!test_isMuchSmallerThan(residual,rhs.norm())) + { + // If the residual is very small, then we have an exact solution, so we are already good. + for(int k=0;k::epsilon(); + RealScalar residual_y = (m*y-rhs).norm(); + VERIFY( test_isApprox(residual_y,residual) || residual < residual_y ); + + y.row(k) = x.row(k).array() - 2*NumTraits::epsilon(); + residual_y = (m*y-rhs).norm(); + VERIFY( test_isApprox(residual_y,residual) || residual < residual_y ); + } + } + // evaluate normal equation which works also for least-squares solutions - VERIFY_IS_APPROX(m.adjoint()*m*x,m.adjoint()*rhs); + if(internal::is_same::value) + { + // This test is not stable with single precision. + // This is probably because squaring m signicantly affects the precision. + VERIFY_IS_APPROX(m.adjoint()*m*x,m.adjoint()*rhs); + } + + // check minimal norm solutions + { + // generate a full-rank m x n problem with m MatrixType2; + typedef Matrix RhsType2; + typedef Matrix MatrixType2T; + Index rank = RankAtCompileTime2==Dynamic ? internal::random(1,cols) : Index(RankAtCompileTime2); + MatrixType2 m2(rank,cols); + int guard = 0; + do { + m2.setRandom(); + } while(m2.jacobiSvd().setThreshold(test_precision()).rank()!=rank && (++guard)<10); + VERIFY(guard<10); + RhsType2 rhs2 = RhsType2::Random(rank); + // use QR to find a reference minimal norm solution + HouseholderQR qr(m2.adjoint()); + Matrix tmp = qr.matrixQR().topLeftCorner(rank,rank).template triangularView().adjoint().solve(rhs2); + tmp.conservativeResize(cols); + tmp.tail(cols-rank).setZero(); + SolutionType x21 = qr.householderQ() * tmp; + // now check with SVD + JacobiSVD svd2(m2, computationOptions); + SolutionType x22 = svd2.solve(rhs2); + VERIFY_IS_APPROX(m2*x21, rhs2); + VERIFY_IS_APPROX(m2*x22, rhs2); + VERIFY_IS_APPROX(x21, x22); + + // Now check with a rank deficient matrix + typedef Matrix MatrixType3; + typedef Matrix RhsType3; + Index rows3 = RowsAtCompileTime3==Dynamic ? internal::random(rank+1,2*cols) : Index(RowsAtCompileTime3); + Matrix C = Matrix::Random(rows3,rank); + MatrixType3 m3 = C * m2; + RhsType3 rhs3 = C * rhs2; + JacobiSVD svd3(m3, computationOptions); + SolutionType x3 = svd3.solve(rhs3); + if(svd3.rank()!=rank) { + std::cout << m3 << "\n\n"; + std::cout << svd3.singularValues().transpose() << "\n"; + std::cout << svd3.rank() << " == " << rank << "\n"; + std::cout << x21.norm() << " == " << x3.norm() << "\n"; + } +// VERIFY_IS_APPROX(m3*x3, rhs3); + VERIFY_IS_APPROX(m3*x21, rhs3); + VERIFY_IS_APPROX(m2*x3, rhs2); + + VERIFY_IS_APPROX(x21, x3); + } } template @@ -92,10 +174,9 @@ void jacobisvd_test_all_computation_options(const MatrixType& m) if (QRPreconditioner == NoQRPreconditioner && m.rows() != m.cols()) return; JacobiSVD fullSvd(m, ComputeFullU|ComputeFullV); - - jacobisvd_check_full(m, fullSvd); - jacobisvd_solve(m, ComputeFullU | ComputeFullV); - + CALL_SUBTEST(( jacobisvd_check_full(m, fullSvd) )); + CALL_SUBTEST(( jacobisvd_solve(m, ComputeFullU | ComputeFullV) )); + #if defined __INTEL_COMPILER // remark #111: statement is unreachable #pragma warning disable 111 @@ -103,20 +184,20 @@ void jacobisvd_test_all_computation_options(const MatrixType& m) if(QRPreconditioner == FullPivHouseholderQRPreconditioner) return; - jacobisvd_compare_to_full(m, ComputeFullU, fullSvd); - jacobisvd_compare_to_full(m, ComputeFullV, fullSvd); - jacobisvd_compare_to_full(m, 0, fullSvd); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeFullU, fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeFullV, fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, 0, fullSvd) )); if (MatrixType::ColsAtCompileTime == Dynamic) { // thin U/V are only available with dynamic number of columns - jacobisvd_compare_to_full(m, ComputeFullU|ComputeThinV, fullSvd); - jacobisvd_compare_to_full(m, ComputeThinV, fullSvd); - jacobisvd_compare_to_full(m, ComputeThinU|ComputeFullV, fullSvd); - jacobisvd_compare_to_full(m, ComputeThinU , fullSvd); - jacobisvd_compare_to_full(m, ComputeThinU|ComputeThinV, fullSvd); - jacobisvd_solve(m, ComputeFullU | ComputeThinV); - jacobisvd_solve(m, ComputeThinU | ComputeFullV); - jacobisvd_solve(m, ComputeThinU | ComputeThinV); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeFullU|ComputeThinV, fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeThinV, fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeThinU|ComputeFullV, fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeThinU , fullSvd) )); + CALL_SUBTEST(( jacobisvd_compare_to_full(m, ComputeThinU|ComputeThinV, fullSvd) )); + CALL_SUBTEST(( jacobisvd_solve(m, ComputeFullU | ComputeThinV) )); + CALL_SUBTEST(( jacobisvd_solve(m, ComputeThinU | ComputeFullV) )); + CALL_SUBTEST(( jacobisvd_solve(m, ComputeThinU | ComputeThinV) )); // test reconstruction typedef typename MatrixType::Index Index; @@ -129,12 +210,29 @@ void jacobisvd_test_all_computation_options(const MatrixType& m) template void jacobisvd(const MatrixType& a = MatrixType(), bool pickrandom = true) { - MatrixType m = pickrandom ? MatrixType::Random(a.rows(), a.cols()) : a; + MatrixType m = a; + if(pickrandom) + { + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef typename MatrixType::Index Index; + Index diagSize = (std::min)(a.rows(), a.cols()); + RealScalar s = std::numeric_limits::max_exponent10/4; + s = internal::random(1,s); + Matrix d = Matrix::Random(diagSize); + for(Index k=0; k(-s,s)); + m = Matrix::Random(a.rows(),diagSize) * d.asDiagonal() * Matrix::Random(diagSize,a.cols()); + // cancel some coeffs + Index n = internal::random(0,m.size()-1); + for(Index i=0; i(0,m.rows()-1), internal::random(0,m.cols()-1)) = Scalar(0); + } - jacobisvd_test_all_computation_options(m); - jacobisvd_test_all_computation_options(m); - jacobisvd_test_all_computation_options(m); - jacobisvd_test_all_computation_options(m); + CALL_SUBTEST(( jacobisvd_test_all_computation_options(m) )); + CALL_SUBTEST(( jacobisvd_test_all_computation_options(m) )); + CALL_SUBTEST(( jacobisvd_test_all_computation_options(m) )); + CALL_SUBTEST(( jacobisvd_test_all_computation_options(m) )); } template void jacobisvd_verify_assert(const MatrixType& m) @@ -223,16 +321,23 @@ void jacobisvd_inf_nan() VERIFY(sub(some_inf, some_inf) != sub(some_inf, some_inf)); svd.compute(MatrixType::Constant(10,10,some_inf), ComputeFullU | ComputeFullV); - Scalar some_nan = zero() / zero(); - VERIFY(some_nan != some_nan); - svd.compute(MatrixType::Constant(10,10,some_nan), ComputeFullU | ComputeFullV); + Scalar nan = std::numeric_limits::quiet_NaN(); + VERIFY(nan != nan); + svd.compute(MatrixType::Constant(10,10,nan), ComputeFullU | ComputeFullV); MatrixType m = MatrixType::Zero(10,10); m(internal::random(0,9), internal::random(0,9)) = some_inf; svd.compute(m, ComputeFullU | ComputeFullV); m = MatrixType::Zero(10,10); - m(internal::random(0,9), internal::random(0,9)) = some_nan; + m(internal::random(0,9), internal::random(0,9)) = nan; + svd.compute(m, ComputeFullU | ComputeFullV); + + // regression test for bug 791 + m.resize(3,3); + m << 0, 2*NumTraits::epsilon(), 0.5, + 0, -0.5, 0, + nan, 0, 0; svd.compute(m, ComputeFullU | ComputeFullV); } @@ -328,6 +433,7 @@ void test_jacobisvd() TEST_SET_BUT_UNUSED_VARIABLE(r) TEST_SET_BUT_UNUSED_VARIABLE(c) + CALL_SUBTEST_10(( jacobisvd(MatrixXd(r,c)) )); CALL_SUBTEST_7(( jacobisvd(MatrixXf(r,c)) )); CALL_SUBTEST_8(( jacobisvd(MatrixXcd(r,c)) )); (void) r; @@ -335,6 +441,7 @@ void test_jacobisvd() // Test on inf/nan matrix CALL_SUBTEST_7( jacobisvd_inf_nan() ); + CALL_SUBTEST_10( jacobisvd_inf_nan() ); } CALL_SUBTEST_7(( jacobisvd(MatrixXf(internal::random(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/2), internal::random(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/2))) )); diff --git a/deps/eigen-3.2.1/test/linearstructure.cpp b/deps/eigen-3.2.8/test/linearstructure.cpp similarity index 100% rename from deps/eigen-3.2.1/test/linearstructure.cpp rename to deps/eigen-3.2.8/test/linearstructure.cpp diff --git a/deps/eigen-3.2.1/test/lu.cpp b/deps/eigen-3.2.8/test/lu.cpp similarity index 95% rename from deps/eigen-3.2.1/test/lu.cpp rename to deps/eigen-3.2.8/test/lu.cpp index 25f86755..37465269 100644 --- a/deps/eigen-3.2.1/test/lu.cpp +++ b/deps/eigen-3.2.8/test/lu.cpp @@ -100,7 +100,9 @@ template void lu_invertible() LU.h */ typedef typename NumTraits::Real RealScalar; - int size = internal::random(1,EIGEN_TEST_MAX_SIZE); + DenseIndex size = MatrixType::RowsAtCompileTime; + if( size==Dynamic) + size = internal::random(1,EIGEN_TEST_MAX_SIZE); MatrixType m1(size, size), m2(size, size), m3(size, size); FullPivLU lu; @@ -122,6 +124,10 @@ template void lu_invertible() m2 = lu.solve(m3); VERIFY_IS_APPROX(m3, m1*m2); VERIFY_IS_APPROX(m2, lu.inverse()*m3); + + // Regression test for Bug 302 + MatrixType m4 = MatrixType::Random(size,size); + VERIFY_IS_APPROX(lu.solve(m3*m4), lu.solve(m3)*m4); } template void lu_partial_piv() @@ -171,6 +177,7 @@ void test_lu() { for(int i = 0; i < g_repeat; i++) { CALL_SUBTEST_1( lu_non_invertible() ); + CALL_SUBTEST_1( lu_invertible() ); CALL_SUBTEST_1( lu_verify_assert() ); CALL_SUBTEST_2( (lu_non_invertible >()) ); diff --git a/deps/eigen-3.2.1/test/main.h b/deps/eigen-3.2.8/test/main.h similarity index 92% rename from deps/eigen-3.2.1/test/main.h rename to deps/eigen-3.2.8/test/main.h index 14f0d2f7..66420486 100644 --- a/deps/eigen-3.2.1/test/main.h +++ b/deps/eigen-3.2.8/test/main.h @@ -17,13 +17,36 @@ #include #include #include + +// The following includes of STL headers have to be done _before_ the +// definition of macros min() and max(). The reason is that many STL +// implementations will not work properly as the min and max symbols collide +// with the STL functions std:min() and std::max(). The STL headers may check +// for the macro definition of min/max and issue a warning or undefine the +// macros. +// +// Still, Windows defines min() and max() in windef.h as part of the regular +// Windows system interfaces and many other Windows APIs depend on these +// macros being available. To prevent the macro expansion of min/max and to +// make Eigen compatible with the Windows environment all function calls of +// std::min() and std::max() have to be written with parenthesis around the +// function name. +// +// All STL headers used by Eigen should be included here. Because main.h is +// included before any Eigen header and because the STL headers are guarded +// against multiple inclusions, no STL header will see our own min/max macro +// definitions. #include #include -#include #include #include #include +#include +// To test that all calls from Eigen code to std::min() and std::max() are +// protected by parenthesis against macro expansion, the min()/max() macros +// are defined here and any not-parenthesized min/max call will cause a +// compiler error. #define min(A,B) please_protect_your_min_with_parentheses #define max(A,B) please_protect_your_max_with_parentheses @@ -383,6 +406,26 @@ void randomPermutationVector(PermutationVectorType& v, typename PermutationVecto } } +template bool isNotNaN(const T& x) +{ + return x==x; +} + +template bool isNaN(const T& x) +{ + return x!=x; +} + +template bool isInf(const T& x) +{ + return x > NumTraits::highest(); +} + +template bool isMinusInf(const T& x) +{ + return x < NumTraits::lowest(); +} + } // end namespace Eigen template struct GetDifferentType; diff --git a/deps/eigen-3.2.1/test/mapped_matrix.cpp b/deps/eigen-3.2.8/test/mapped_matrix.cpp similarity index 87% rename from deps/eigen-3.2.1/test/mapped_matrix.cpp rename to deps/eigen-3.2.8/test/mapped_matrix.cpp index de9dbbde..58904fa3 100644 --- a/deps/eigen-3.2.1/test/mapped_matrix.cpp +++ b/deps/eigen-3.2.8/test/mapped_matrix.cpp @@ -114,6 +114,28 @@ template void check_const_correctness(const PlainObjec VERIFY( !(Map::Flags & LvalueBit) ); } +template +void map_not_aligned_on_scalar() +{ + typedef Matrix MatrixType; + typedef typename MatrixType::Index Index; + Index size = 11; + Scalar* array1 = internal::aligned_new((size+1)*(size+1)+1); + Scalar* array2 = reinterpret_cast(sizeof(Scalar)/2+std::size_t(array1)); + Map > map2(array2, size, size, OuterStride<>(size+1)); + MatrixType m2 = MatrixType::Random(size,size); + map2 = m2; + VERIFY_IS_EQUAL(m2, map2); + + typedef Matrix VectorType; + Map map3(array2, size); + MatrixType v3 = VectorType::Random(size); + map3 = v3; + VERIFY_IS_EQUAL(v3, map3); + + internal::aligned_delete(array1, (size+1)*(size+1)+1); +} + void test_mapped_matrix() { for(int i = 0; i < g_repeat; i++) { @@ -137,5 +159,7 @@ void test_mapped_matrix() CALL_SUBTEST_8( map_static_methods(RowVector3d()) ); CALL_SUBTEST_9( map_static_methods(VectorXcd(8)) ); CALL_SUBTEST_10( map_static_methods(VectorXf(12)) ); + + CALL_SUBTEST_11( map_not_aligned_on_scalar() ); } } diff --git a/deps/eigen-3.2.1/test/mapstaticmethods.cpp b/deps/eigen-3.2.8/test/mapstaticmethods.cpp similarity index 100% rename from deps/eigen-3.2.1/test/mapstaticmethods.cpp rename to deps/eigen-3.2.8/test/mapstaticmethods.cpp diff --git a/deps/eigen-3.2.1/test/mapstride.cpp b/deps/eigen-3.2.8/test/mapstride.cpp similarity index 100% rename from deps/eigen-3.2.1/test/mapstride.cpp rename to deps/eigen-3.2.8/test/mapstride.cpp diff --git a/deps/eigen-3.2.1/test/meta.cpp b/deps/eigen-3.2.8/test/meta.cpp similarity index 100% rename from deps/eigen-3.2.1/test/meta.cpp rename to deps/eigen-3.2.8/test/meta.cpp diff --git a/deps/eigen-3.2.1/test/metis_support.cpp b/deps/eigen-3.2.8/test/metis_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/metis_support.cpp rename to deps/eigen-3.2.8/test/metis_support.cpp diff --git a/deps/eigen-3.2.1/test/miscmatrices.cpp b/deps/eigen-3.2.8/test/miscmatrices.cpp similarity index 100% rename from deps/eigen-3.2.1/test/miscmatrices.cpp rename to deps/eigen-3.2.8/test/miscmatrices.cpp diff --git a/deps/eigen-3.2.1/test/mixingtypes.cpp b/deps/eigen-3.2.8/test/mixingtypes.cpp similarity index 100% rename from deps/eigen-3.2.1/test/mixingtypes.cpp rename to deps/eigen-3.2.8/test/mixingtypes.cpp diff --git a/deps/eigen-3.2.8/test/mpl2only.cpp b/deps/eigen-3.2.8/test/mpl2only.cpp new file mode 100644 index 00000000..5ef0d2b2 --- /dev/null +++ b/deps/eigen-3.2.8/test/mpl2only.cpp @@ -0,0 +1,20 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2015 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#define EIGEN_MPL2_ONLY +#include +#include +#include +#include +#include + +int main() +{ + return 0; +} diff --git a/deps/eigen-3.2.1/test/nesting_ops.cpp b/deps/eigen-3.2.8/test/nesting_ops.cpp similarity index 100% rename from deps/eigen-3.2.1/test/nesting_ops.cpp rename to deps/eigen-3.2.8/test/nesting_ops.cpp diff --git a/deps/eigen-3.2.1/test/nomalloc.cpp b/deps/eigen-3.2.8/test/nomalloc.cpp similarity index 84% rename from deps/eigen-3.2.1/test/nomalloc.cpp rename to deps/eigen-3.2.8/test/nomalloc.cpp index cbd02dd2..8e040235 100644 --- a/deps/eigen-3.2.1/test/nomalloc.cpp +++ b/deps/eigen-3.2.8/test/nomalloc.cpp @@ -165,6 +165,38 @@ void ctms_decompositions() Eigen::JacobiSVD jSVD; jSVD.compute(A, ComputeFullU | ComputeFullV); } +void test_zerosized() { + // default constructors: + Eigen::MatrixXd A; + Eigen::VectorXd v; + // explicit zero-sized: + Eigen::ArrayXXd A0(0,0); + Eigen::ArrayXd v0(std::ptrdiff_t(0)); // FIXME ArrayXd(0) is ambiguous + + // assigning empty objects to each other: + A=A0; + v=v0; +} + +template void test_reference(const MatrixType& m) { + typedef typename MatrixType::Scalar Scalar; + enum { Flag = MatrixType::IsRowMajor ? Eigen::RowMajor : Eigen::ColMajor}; + enum { TransposeFlag = !MatrixType::IsRowMajor ? Eigen::RowMajor : Eigen::ColMajor}; + typename MatrixType::Index rows = m.rows(), cols=m.cols(); + // Dynamic reference: + typedef Eigen::Ref > Ref; + typedef Eigen::Ref > RefT; + + Ref r1(m); + Ref r2(m.block(rows/3, cols/4, rows/2, cols/2)); + RefT r3(m.transpose()); + RefT r4(m.topLeftCorner(rows/2, cols/2).transpose()); + + VERIFY_RAISES_ASSERT(RefT r5(m)); + VERIFY_RAISES_ASSERT(Ref r6(m.transpose())); + VERIFY_RAISES_ASSERT(Ref r7(Scalar(2) * m)); +} + void test_nomalloc() { // check that our operator new is indeed called: @@ -175,5 +207,6 @@ void test_nomalloc() // Check decomposition modules with dynamic matrices that have a known compile-time max size (ctms) CALL_SUBTEST_4(ctms_decompositions()); - + CALL_SUBTEST_5(test_zerosized()); + CALL_SUBTEST_6(test_reference(Matrix())); } diff --git a/deps/eigen-3.2.1/test/nullary.cpp b/deps/eigen-3.2.8/test/nullary.cpp similarity index 94% rename from deps/eigen-3.2.1/test/nullary.cpp rename to deps/eigen-3.2.8/test/nullary.cpp index 5408d88b..fbc721a1 100644 --- a/deps/eigen-3.2.1/test/nullary.cpp +++ b/deps/eigen-3.2.8/test/nullary.cpp @@ -80,7 +80,9 @@ void testVectorType(const VectorType& base) Matrix col_vector(size); row_vector.setLinSpaced(size,low,high); col_vector.setLinSpaced(size,low,high); - VERIFY( row_vector.isApprox(col_vector.transpose(), NumTraits::epsilon())); + // when using the extended precision (e.g., FPU) the relative error might exceed 1 bit + // when computing the squared sum in isApprox, thus the 2x factor. + VERIFY( row_vector.isApprox(col_vector.transpose(), Scalar(2)*NumTraits::epsilon())); Matrix size_changer(size+50); size_changer.setLinSpaced(size,low,high); diff --git a/deps/eigen-3.2.1/test/packetmath.cpp b/deps/eigen-3.2.8/test/packetmath.cpp similarity index 95% rename from deps/eigen-3.2.1/test/packetmath.cpp rename to deps/eigen-3.2.8/test/packetmath.cpp index 2c0519c4..38aa256c 100644 --- a/deps/eigen-3.2.1/test/packetmath.cpp +++ b/deps/eigen-3.2.8/test/packetmath.cpp @@ -239,6 +239,12 @@ template void packetmath_real() data2[i] = internal::random(-87,88); } CHECK_CWISE1_IF(internal::packet_traits::HasExp, std::exp, internal::pexp); + { + data1[0] = std::numeric_limits::quiet_NaN(); + packet_helper::HasExp,Packet> h; + h.store(data2, internal::pexp(h.load(data1))); + VERIFY(isNaN(data2[0])); + } for (int i=0; i void packetmath_real() } if(internal::random(0,1)<0.1) data1[internal::random(0, PacketSize)] = 0; - CHECK_CWISE1_IF(internal::packet_traits::HasLog, std::log, internal::plog); CHECK_CWISE1_IF(internal::packet_traits::HasSqrt, std::sqrt, internal::psqrt); + CHECK_CWISE1_IF(internal::packet_traits::HasLog, std::log, internal::plog); + { + data1[0] = std::numeric_limits::quiet_NaN(); + packet_helper::HasLog,Packet> h; + h.store(data2, internal::plog(h.load(data1))); + VERIFY(isNaN(data2[0])); + data1[0] = -1.0f; + h.store(data2, internal::plog(h.load(data1))); + VERIFY(isNaN(data2[0])); +#if !EIGEN_FAST_MATH + h.store(data2, internal::psqrt(h.load(data1))); + VERIFY(isNaN(data2[0])); + VERIFY(isNaN(data2[1])); +#endif + } } template void packetmath_notcomplex() diff --git a/deps/eigen-3.2.1/test/pardiso_support.cpp b/deps/eigen-3.2.8/test/pardiso_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/pardiso_support.cpp rename to deps/eigen-3.2.8/test/pardiso_support.cpp diff --git a/deps/eigen-3.2.1/test/pastix_support.cpp b/deps/eigen-3.2.8/test/pastix_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/pastix_support.cpp rename to deps/eigen-3.2.8/test/pastix_support.cpp diff --git a/deps/eigen-3.2.1/test/permutationmatrices.cpp b/deps/eigen-3.2.8/test/permutationmatrices.cpp similarity index 100% rename from deps/eigen-3.2.1/test/permutationmatrices.cpp rename to deps/eigen-3.2.8/test/permutationmatrices.cpp diff --git a/deps/eigen-3.2.1/test/prec_inverse_4x4.cpp b/deps/eigen-3.2.8/test/prec_inverse_4x4.cpp similarity index 100% rename from deps/eigen-3.2.1/test/prec_inverse_4x4.cpp rename to deps/eigen-3.2.8/test/prec_inverse_4x4.cpp diff --git a/deps/eigen-3.2.1/test/product.h b/deps/eigen-3.2.8/test/product.h similarity index 69% rename from deps/eigen-3.2.1/test/product.h rename to deps/eigen-3.2.8/test/product.h index 856b234a..0d054ff4 100644 --- a/deps/eigen-3.2.1/test/product.h +++ b/deps/eigen-3.2.8/test/product.h @@ -136,7 +136,46 @@ template void product(const MatrixType& m) VERIFY_IS_APPROX(res.col(r).noalias() = square.adjoint() * square.col(r), (square.adjoint() * square.col(r)).eval()); VERIFY_IS_APPROX(res.col(r).noalias() = square * square.col(r), (square * square.col(r)).eval()); + // vector at runtime (see bug 1166) + { + RowSquareMatrixType ref(square); + ColSquareMatrixType ref2(square2); + ref = res = square; + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.col(0).transpose() * square.transpose(), (ref.row(0) = m1.col(0).transpose() * square.transpose())); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.block(0,0,rows,1).transpose() * square.transpose(), (ref.row(0) = m1.col(0).transpose() * square.transpose())); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.col(0).transpose() * square, (ref.row(0) = m1.col(0).transpose() * square)); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.block(0,0,rows,1).transpose() * square, (ref.row(0) = m1.col(0).transpose() * square)); + ref2 = res2 = square2; + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.row(0) * square2.transpose(), (ref2.row(0) = m1.row(0) * square2.transpose())); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.block(0,0,1,cols) * square2.transpose(), (ref2.row(0) = m1.row(0) * square2.transpose())); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.row(0) * square2, (ref2.row(0) = m1.row(0) * square2)); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.block(0,0,1,cols) * square2, (ref2.row(0) = m1.row(0) * square2)); + } + // inner product - Scalar x = square2.row(c) * square2.col(c2); - VERIFY_IS_APPROX(x, square2.row(c).transpose().cwiseProduct(square2.col(c2)).sum()); + { + Scalar x = square2.row(c) * square2.col(c2); + VERIFY_IS_APPROX(x, square2.row(c).transpose().cwiseProduct(square2.col(c2)).sum()); + } + + // outer product + VERIFY_IS_APPROX(m1.col(c) * m1.row(r), m1.block(0,c,rows,1) * m1.block(r,0,1,cols)); + VERIFY_IS_APPROX(m1.row(r).transpose() * m1.col(c).transpose(), m1.block(r,0,1,cols).transpose() * m1.block(0,c,rows,1).transpose()); + VERIFY_IS_APPROX(m1.block(0,c,rows,1) * m1.row(r), m1.block(0,c,rows,1) * m1.block(r,0,1,cols)); + VERIFY_IS_APPROX(m1.col(c) * m1.block(r,0,1,cols), m1.block(0,c,rows,1) * m1.block(r,0,1,cols)); + VERIFY_IS_APPROX(m1.leftCols(1) * m1.row(r), m1.block(0,0,rows,1) * m1.block(r,0,1,cols)); + VERIFY_IS_APPROX(m1.col(c) * m1.topRows(1), m1.block(0,c,rows,1) * m1.block(0,0,1,cols)); + + // Aliasing + { + ColVectorType x(cols); x.setRandom(); + ColVectorType z(x); + ColVectorType y(cols); y.setZero(); + ColSquareMatrixType A(cols,cols); A.setRandom(); + // CwiseBinaryOp + VERIFY_IS_APPROX(x = y + A*x, A*z); + x = z; + // CwiseUnaryOp + VERIFY_IS_APPROX(x = Scalar(1.)*(A*x), A*z); + } } diff --git a/deps/eigen-3.2.1/test/product_extra.cpp b/deps/eigen-3.2.8/test/product_extra.cpp similarity index 78% rename from deps/eigen-3.2.1/test/product_extra.cpp rename to deps/eigen-3.2.8/test/product_extra.cpp index 744a1ef7..ea248693 100644 --- a/deps/eigen-3.2.1/test/product_extra.cpp +++ b/deps/eigen-3.2.8/test/product_extra.cpp @@ -109,8 +109,67 @@ void mat_mat_scalar_scalar_product() double det = 6.0, wt = 0.5; VERIFY_IS_APPROX(dNdxy.transpose()*dNdxy*det*wt, det*wt*dNdxy.transpose()*dNdxy); } + +template +void zero_sized_objects(const MatrixType& m) +{ + typedef typename MatrixType::Scalar Scalar; + const int PacketSize = internal::packet_traits::size; + const int PacketSize1 = PacketSize>1 ? PacketSize-1 : 1; + DenseIndex rows = m.rows(); + DenseIndex cols = m.cols(); -void zero_sized_objects() + { + MatrixType res, a(rows,0), b(0,cols); + VERIFY_IS_APPROX( (res=a*b), MatrixType::Zero(rows,cols) ); + VERIFY_IS_APPROX( (res=a*a.transpose()), MatrixType::Zero(rows,rows) ); + VERIFY_IS_APPROX( (res=b.transpose()*b), MatrixType::Zero(cols,cols) ); + VERIFY_IS_APPROX( (res=b.transpose()*a.transpose()), MatrixType::Zero(cols,rows) ); + } + + { + MatrixType res, a(rows,cols), b(cols,0); + res = a*b; + VERIFY(res.rows()==rows && res.cols()==0); + b.resize(0,rows); + res = b*a; + VERIFY(res.rows()==0 && res.cols()==cols); + } + + { + Matrix a; + Matrix b; + Matrix res; + VERIFY_IS_APPROX( (res=a*b), MatrixType::Zero(PacketSize,1) ); + VERIFY_IS_APPROX( (res=a.lazyProduct(b)), MatrixType::Zero(PacketSize,1) ); + } + + { + Matrix a; + Matrix b; + Matrix res; + VERIFY_IS_APPROX( (res=a*b), MatrixType::Zero(PacketSize1,1) ); + VERIFY_IS_APPROX( (res=a.lazyProduct(b)), MatrixType::Zero(PacketSize1,1) ); + } + + { + Matrix a(PacketSize,0); + Matrix b(0,1); + Matrix res; + VERIFY_IS_APPROX( (res=a*b), MatrixType::Zero(PacketSize,1) ); + VERIFY_IS_APPROX( (res=a.lazyProduct(b)), MatrixType::Zero(PacketSize,1) ); + } + + { + Matrix a(PacketSize1,0); + Matrix b(0,1); + Matrix res; + VERIFY_IS_APPROX( (res=a*b), MatrixType::Zero(PacketSize1,1) ); + VERIFY_IS_APPROX( (res=a.lazyProduct(b)), MatrixType::Zero(PacketSize1,1) ); + } +} + +void bug_127() { // Bug 127 // @@ -171,7 +230,8 @@ void test_product_extra() CALL_SUBTEST_2( mat_mat_scalar_scalar_product() ); CALL_SUBTEST_3( product_extra(MatrixXcf(internal::random(1,EIGEN_TEST_MAX_SIZE/2), internal::random(1,EIGEN_TEST_MAX_SIZE/2))) ); CALL_SUBTEST_4( product_extra(MatrixXcd(internal::random(1,EIGEN_TEST_MAX_SIZE/2), internal::random(1,EIGEN_TEST_MAX_SIZE/2))) ); + CALL_SUBTEST_1( zero_sized_objects(MatrixXf(internal::random(1,EIGEN_TEST_MAX_SIZE), internal::random(1,EIGEN_TEST_MAX_SIZE))) ); } - CALL_SUBTEST_5( zero_sized_objects() ); + CALL_SUBTEST_5( bug_127() ); CALL_SUBTEST_6( unaligned_objects() ); } diff --git a/deps/eigen-3.2.1/test/product_large.cpp b/deps/eigen-3.2.8/test/product_large.cpp similarity index 81% rename from deps/eigen-3.2.1/test/product_large.cpp rename to deps/eigen-3.2.8/test/product_large.cpp index 03d7bd8e..6bb4d1ad 100644 --- a/deps/eigen-3.2.1/test/product_large.cpp +++ b/deps/eigen-3.2.8/test/product_large.cpp @@ -9,6 +9,27 @@ #include "product.h" +template +void test_aliasing() +{ + int rows = internal::random(1,12); + int cols = internal::random(1,12); + typedef Matrix MatrixType; + typedef Matrix VectorType; + VectorType x(cols); x.setRandom(); + VectorType z(x); + VectorType y(rows); y.setZero(); + MatrixType A(rows,cols); A.setRandom(); + // CwiseBinaryOp + VERIFY_IS_APPROX(x = y + A*x, A*z); + x = z; + // CwiseUnaryOp + VERIFY_IS_APPROX(x = T(1.)*(A*x), A*z); + x = z; + VERIFY_IS_APPROX(x = y+(-(A*x)), -A*z); + x = z; +} + void test_product_large() { for(int i = 0; i < g_repeat; i++) { @@ -17,6 +38,8 @@ void test_product_large() CALL_SUBTEST_3( product(MatrixXi(internal::random(1,EIGEN_TEST_MAX_SIZE), internal::random(1,EIGEN_TEST_MAX_SIZE))) ); CALL_SUBTEST_4( product(MatrixXcf(internal::random(1,EIGEN_TEST_MAX_SIZE/2), internal::random(1,EIGEN_TEST_MAX_SIZE/2))) ); CALL_SUBTEST_5( product(Matrix(internal::random(1,EIGEN_TEST_MAX_SIZE), internal::random(1,EIGEN_TEST_MAX_SIZE))) ); + + CALL_SUBTEST_1( test_aliasing() ); } #if defined EIGEN_TEST_PART_6 diff --git a/deps/eigen-3.2.1/test/product_mmtr.cpp b/deps/eigen-3.2.8/test/product_mmtr.cpp similarity index 95% rename from deps/eigen-3.2.1/test/product_mmtr.cpp rename to deps/eigen-3.2.8/test/product_mmtr.cpp index 7d674680..aeba009f 100644 --- a/deps/eigen-3.2.1/test/product_mmtr.cpp +++ b/deps/eigen-3.2.8/test/product_mmtr.cpp @@ -24,8 +24,8 @@ template void mmtr(int size) DenseIndex othersize = internal::random(1,200); - MatrixColMaj matc(size, size); - MatrixRowMaj matr(size, size); + MatrixColMaj matc = MatrixColMaj::Zero(size, size); + MatrixRowMaj matr = MatrixRowMaj::Zero(size, size); MatrixColMaj ref1(size, size), ref2(size, size); MatrixColMaj soc(size,othersize); soc.setRandom(); diff --git a/deps/eigen-3.2.1/test/product_notemporary.cpp b/deps/eigen-3.2.8/test/product_notemporary.cpp similarity index 92% rename from deps/eigen-3.2.1/test/product_notemporary.cpp rename to deps/eigen-3.2.8/test/product_notemporary.cpp index 258d238e..5599d268 100644 --- a/deps/eigen-3.2.1/test/product_notemporary.cpp +++ b/deps/eigen-3.2.8/test/product_notemporary.cpp @@ -58,10 +58,19 @@ template void product_notemporary(const MatrixType& m) r1 = internal::random(8,rows-r0); VERIFY_EVALUATION_COUNT( m3 = (m1 * m2.adjoint()), 1); + VERIFY_EVALUATION_COUNT( m3 = (m1 * m2.adjoint()).transpose(), 1); VERIFY_EVALUATION_COUNT( m3.noalias() = m1 * m2.adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3 = s1 * (m1 * m2.transpose()), 1); + VERIFY_EVALUATION_COUNT( m3 = m3 + s1 * (m1 * m2.transpose()), 1); VERIFY_EVALUATION_COUNT( m3.noalias() = s1 * (m1 * m2.transpose()), 0); + VERIFY_EVALUATION_COUNT( m3 = m3 + (m1 * m2.adjoint()), 1); + VERIFY_EVALUATION_COUNT( m3 = m3 + (m1 * m2.adjoint()).transpose(), 1); + VERIFY_EVALUATION_COUNT( m3.noalias() = m3 + m1 * m2.transpose(), 1); // 0 in 3.3 + VERIFY_EVALUATION_COUNT( m3.noalias() += m3 + m1 * m2.transpose(), 1); // 0 in 3.3 + VERIFY_EVALUATION_COUNT( m3.noalias() -= m3 + m1 * m2.transpose(), 1); // 0 in 3.3 + VERIFY_EVALUATION_COUNT( m3.noalias() = s1 * m1 * s2 * m2.adjoint(), 0); VERIFY_EVALUATION_COUNT( m3.noalias() = s1 * m1 * s2 * (m1*s3+m2*s2).adjoint(), 1); VERIFY_EVALUATION_COUNT( m3.noalias() = (s1 * m1).adjoint() * s2 * m2, 0); diff --git a/deps/eigen-3.2.1/test/product_selfadjoint.cpp b/deps/eigen-3.2.8/test/product_selfadjoint.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_selfadjoint.cpp rename to deps/eigen-3.2.8/test/product_selfadjoint.cpp diff --git a/deps/eigen-3.2.1/test/product_small.cpp b/deps/eigen-3.2.8/test/product_small.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_small.cpp rename to deps/eigen-3.2.8/test/product_small.cpp diff --git a/deps/eigen-3.2.1/test/product_symm.cpp b/deps/eigen-3.2.8/test/product_symm.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_symm.cpp rename to deps/eigen-3.2.8/test/product_symm.cpp diff --git a/deps/eigen-3.2.1/test/product_syrk.cpp b/deps/eigen-3.2.8/test/product_syrk.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_syrk.cpp rename to deps/eigen-3.2.8/test/product_syrk.cpp diff --git a/deps/eigen-3.2.1/test/product_trmm.cpp b/deps/eigen-3.2.8/test/product_trmm.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_trmm.cpp rename to deps/eigen-3.2.8/test/product_trmm.cpp diff --git a/deps/eigen-3.2.1/test/product_trmv.cpp b/deps/eigen-3.2.8/test/product_trmv.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_trmv.cpp rename to deps/eigen-3.2.8/test/product_trmv.cpp diff --git a/deps/eigen-3.2.1/test/product_trsolve.cpp b/deps/eigen-3.2.8/test/product_trsolve.cpp similarity index 100% rename from deps/eigen-3.2.1/test/product_trsolve.cpp rename to deps/eigen-3.2.8/test/product_trsolve.cpp diff --git a/deps/eigen-3.2.1/test/qr.cpp b/deps/eigen-3.2.8/test/qr.cpp similarity index 100% rename from deps/eigen-3.2.1/test/qr.cpp rename to deps/eigen-3.2.8/test/qr.cpp diff --git a/deps/eigen-3.2.1/test/qr_colpivoting.cpp b/deps/eigen-3.2.8/test/qr_colpivoting.cpp similarity index 100% rename from deps/eigen-3.2.1/test/qr_colpivoting.cpp rename to deps/eigen-3.2.8/test/qr_colpivoting.cpp diff --git a/deps/eigen-3.2.1/test/qr_fullpivoting.cpp b/deps/eigen-3.2.8/test/qr_fullpivoting.cpp similarity index 100% rename from deps/eigen-3.2.1/test/qr_fullpivoting.cpp rename to deps/eigen-3.2.8/test/qr_fullpivoting.cpp diff --git a/deps/eigen-3.2.1/test/qtvector.cpp b/deps/eigen-3.2.8/test/qtvector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/qtvector.cpp rename to deps/eigen-3.2.8/test/qtvector.cpp diff --git a/deps/eigen-3.2.1/test/real_qz.cpp b/deps/eigen-3.2.8/test/real_qz.cpp similarity index 85% rename from deps/eigen-3.2.1/test/real_qz.cpp rename to deps/eigen-3.2.8/test/real_qz.cpp index 7d743a73..a1766c6d 100644 --- a/deps/eigen-3.2.1/test/real_qz.cpp +++ b/deps/eigen-3.2.8/test/real_qz.cpp @@ -25,6 +25,22 @@ template void real_qz(const MatrixType& m) MatrixType A = MatrixType::Random(dim,dim), B = MatrixType::Random(dim,dim); + + // Regression test for bug 985: Randomly set rows or columns to zero + Index k=internal::random(0, dim-1); + switch(internal::random(0,10)) { + case 0: + A.row(k).setZero(); break; + case 1: + A.col(k).setZero(); break; + case 2: + B.row(k).setZero(); break; + case 3: + B.col(k).setZero(); break; + default: + break; + } + RealQZ qz(A,B); VERIFY_IS_EQUAL(qz.info(), Success); diff --git a/deps/eigen-3.2.1/test/redux.cpp b/deps/eigen-3.2.8/test/redux.cpp similarity index 95% rename from deps/eigen-3.2.1/test/redux.cpp rename to deps/eigen-3.2.8/test/redux.cpp index 0d176e50..50b47383 100644 --- a/deps/eigen-3.2.1/test/redux.cpp +++ b/deps/eigen-3.2.8/test/redux.cpp @@ -53,6 +53,14 @@ template void matrixRedux(const MatrixType& m) VERIFY_IS_APPROX(m1_for_prod.block(r0,c0,r1,c1).prod(), m1_for_prod.block(r0,c0,r1,c1).eval().prod()); VERIFY_IS_APPROX(m1.block(r0,c0,r1,c1).real().minCoeff(), m1.block(r0,c0,r1,c1).real().eval().minCoeff()); VERIFY_IS_APPROX(m1.block(r0,c0,r1,c1).real().maxCoeff(), m1.block(r0,c0,r1,c1).real().eval().maxCoeff()); + + // regression for bug 1090 + const int R1 = MatrixType::RowsAtCompileTime>=2 ? MatrixType::RowsAtCompileTime/2 : 6; + const int C1 = MatrixType::ColsAtCompileTime>=2 ? MatrixType::ColsAtCompileTime/2 : 6; + if(R1<=rows-r0 && C1<=cols-c0) + { + VERIFY_IS_APPROX( (m1.template block(r0,c0).sum()), m1.block(r0,c0,R1,C1).sum() ); + } // test empty objects VERIFY_IS_APPROX(m1.block(r0,c0,0,0).sum(), Scalar(0)); diff --git a/deps/eigen-3.2.1/test/ref.cpp b/deps/eigen-3.2.8/test/ref.cpp similarity index 58% rename from deps/eigen-3.2.1/test/ref.cpp rename to deps/eigen-3.2.8/test/ref.cpp index f639d900..8297e263 100644 --- a/deps/eigen-3.2.1/test/ref.cpp +++ b/deps/eigen-3.2.8/test/ref.cpp @@ -34,6 +34,18 @@ inline void on_temporary_creation(int) { // test Ref.h +// Deal with i387 extended precision +#if EIGEN_ARCH_i386 && !(EIGEN_ARCH_x86_64) + +#if EIGEN_COMP_GNUC_STRICT && EIGEN_GNUC_AT_LEAST(4,4) +#pragma GCC optimize ("-ffloat-store") +#else +#undef VERIFY_IS_EQUAL +#define VERIFY_IS_EQUAL(X,Y) VERIFY_IS_APPROX(X,Y) +#endif + +#endif + template void ref_matrix(const MatrixType& m) { typedef typename MatrixType::Index Index; @@ -71,7 +83,6 @@ template void ref_matrix(const MatrixType& m) rm2 = m2.block(i,j,brows,bcols); VERIFY_IS_EQUAL(m1, m2); - ConstRefDynMat rm3 = m1.block(i,j,brows,bcols); m1.block(i,j,brows,bcols) *= 2; m2.block(i,j,brows,bcols) *= 2; @@ -154,59 +165,101 @@ template void check_const_correctness(const PlainObjec VERIFY( !(Ref::Flags & LvalueBit) ); } -EIGEN_DONT_INLINE void call_ref_1(Ref ) { } -EIGEN_DONT_INLINE void call_ref_2(const Ref& ) { } -EIGEN_DONT_INLINE void call_ref_3(Ref > ) { } -EIGEN_DONT_INLINE void call_ref_4(const Ref >& ) { } -EIGEN_DONT_INLINE void call_ref_5(Ref > ) { } -EIGEN_DONT_INLINE void call_ref_6(const Ref >& ) { } +template +EIGEN_DONT_INLINE void call_ref_1(Ref a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_2(const Ref& a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_3(Ref > a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_4(const Ref >& a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_5(Ref > a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_6(const Ref >& a, const B &b) { VERIFY_IS_EQUAL(a,b); } +template +EIGEN_DONT_INLINE void call_ref_7(Ref > a, const B &b) { VERIFY_IS_EQUAL(a,b); } void call_ref() { - VectorXcf ca(10); - VectorXf a(10); + VectorXcf ca = VectorXcf::Random(10); + VectorXf a = VectorXf::Random(10); + RowVectorXf b = RowVectorXf::Random(10); + MatrixXf A = MatrixXf::Random(10,10); + RowVector3f c = RowVector3f::Random(); const VectorXf& ac(a); VectorBlock ab(a,0,3); - MatrixXf A(10,10); const VectorBlock abc(a,0,3); + - VERIFY_EVALUATION_COUNT( call_ref_1(a), 0); - //call_ref_1(ac); // does not compile because ac is const - VERIFY_EVALUATION_COUNT( call_ref_1(ab), 0); - VERIFY_EVALUATION_COUNT( call_ref_1(a.head(4)), 0); - VERIFY_EVALUATION_COUNT( call_ref_1(abc), 0); - VERIFY_EVALUATION_COUNT( call_ref_1(A.col(3)), 0); - // call_ref_1(A.row(3)); // does not compile because innerstride!=1 - VERIFY_EVALUATION_COUNT( call_ref_3(A.row(3)), 0); - VERIFY_EVALUATION_COUNT( call_ref_4(A.row(3)), 0); - //call_ref_1(a+a); // does not compile for obvious reason + VERIFY_EVALUATION_COUNT( call_ref_1(a,a), 0); + VERIFY_EVALUATION_COUNT( call_ref_1(b,b.transpose()), 0); +// call_ref_1(ac,a RowMatrixXd; +int test_ref_overload_fun1(Ref ) { return 1; } +int test_ref_overload_fun1(Ref ) { return 2; } +int test_ref_overload_fun1(Ref ) { return 3; } + +int test_ref_overload_fun2(Ref ) { return 4; } +int test_ref_overload_fun2(Ref ) { return 5; } + +// See also bug 969 +void test_ref_overloads() +{ + MatrixXd Ad, Bd; + RowMatrixXd rAd, rBd; + VERIFY( test_ref_overload_fun1(Ad)==1 ); + VERIFY( test_ref_overload_fun1(rAd)==2 ); + + MatrixXf Af, Bf; + VERIFY( test_ref_overload_fun2(Ad)==4 ); + VERIFY( test_ref_overload_fun2(Ad+Bd)==4 ); + VERIFY( test_ref_overload_fun2(Af+Bf)==5 ); } void test_ref() @@ -229,4 +282,6 @@ void test_ref() CALL_SUBTEST_5( ref_matrix(MatrixXi(internal::random(1,10),internal::random(1,10))) ); CALL_SUBTEST_6( call_ref() ); } + + CALL_SUBTEST_7( test_ref_overloads() ); } diff --git a/deps/eigen-3.2.1/test/resize.cpp b/deps/eigen-3.2.8/test/resize.cpp similarity index 100% rename from deps/eigen-3.2.1/test/resize.cpp rename to deps/eigen-3.2.8/test/resize.cpp diff --git a/deps/eigen-3.2.1/test/runtest.sh b/deps/eigen-3.2.8/test/runtest.sh similarity index 100% rename from deps/eigen-3.2.1/test/runtest.sh rename to deps/eigen-3.2.8/test/runtest.sh diff --git a/deps/eigen-3.2.8/test/rvalue_types.cpp b/deps/eigen-3.2.8/test/rvalue_types.cpp new file mode 100644 index 00000000..b3c85652 --- /dev/null +++ b/deps/eigen-3.2.8/test/rvalue_types.cpp @@ -0,0 +1,62 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2013 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "main.h" + +#include + +#ifdef EIGEN_HAVE_RVALUE_REFERENCES +template +void rvalue_copyassign(const MatrixType& m) +{ + + typedef typename internal::traits::Scalar Scalar; + + // create a temporary which we are about to destroy by moving + MatrixType tmp = m; + long src_address = reinterpret_cast(tmp.data()); + + // move the temporary to n + MatrixType n = std::move(tmp); + long dst_address = reinterpret_cast(n.data()); + + if (MatrixType::RowsAtCompileTime==Dynamic|| MatrixType::ColsAtCompileTime==Dynamic) + { + // verify that we actually moved the guts + VERIFY_IS_EQUAL(src_address, dst_address); + } + + // verify that the content did not change + Scalar abs_diff = (m-n).array().abs().sum(); + VERIFY_IS_EQUAL(abs_diff, Scalar(0)); +} +#else +template +void rvalue_copyassign(const MatrixType&) {} +#endif + +void test_rvalue_types() +{ + CALL_SUBTEST_1(rvalue_copyassign( MatrixXf::Random(50,50).eval() )); + CALL_SUBTEST_1(rvalue_copyassign( ArrayXXf::Random(50,50).eval() )); + + CALL_SUBTEST_1(rvalue_copyassign( Matrix::Random(50).eval() )); + CALL_SUBTEST_1(rvalue_copyassign( Array::Random(50).eval() )); + + CALL_SUBTEST_1(rvalue_copyassign( Matrix::Random(50).eval() )); + CALL_SUBTEST_1(rvalue_copyassign( Array::Random(50).eval() )); + + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); + + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); + CALL_SUBTEST_2(rvalue_copyassign( Array::Random().eval() )); +} diff --git a/deps/eigen-3.2.1/test/schur_complex.cpp b/deps/eigen-3.2.8/test/schur_complex.cpp similarity index 100% rename from deps/eigen-3.2.1/test/schur_complex.cpp rename to deps/eigen-3.2.8/test/schur_complex.cpp diff --git a/deps/eigen-3.2.1/test/schur_real.cpp b/deps/eigen-3.2.8/test/schur_real.cpp similarity index 100% rename from deps/eigen-3.2.1/test/schur_real.cpp rename to deps/eigen-3.2.8/test/schur_real.cpp diff --git a/deps/eigen-3.2.1/test/selfadjoint.cpp b/deps/eigen-3.2.8/test/selfadjoint.cpp similarity index 100% rename from deps/eigen-3.2.1/test/selfadjoint.cpp rename to deps/eigen-3.2.8/test/selfadjoint.cpp diff --git a/deps/eigen-3.2.8/test/simplicial_cholesky.cpp b/deps/eigen-3.2.8/test/simplicial_cholesky.cpp new file mode 100644 index 00000000..78646842 --- /dev/null +++ b/deps/eigen-3.2.8/test/simplicial_cholesky.cpp @@ -0,0 +1,45 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2011 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "sparse_solver.h" + +template void test_simplicial_cholesky_T() +{ + SimplicialCholesky, Lower> chol_colmajor_lower_amd; + SimplicialCholesky, Upper> chol_colmajor_upper_amd; + SimplicialLLT, Lower> llt_colmajor_lower_amd; + SimplicialLLT, Upper> llt_colmajor_upper_amd; + SimplicialLDLT, Lower> ldlt_colmajor_lower_amd; + SimplicialLDLT, Upper> ldlt_colmajor_upper_amd; + SimplicialLDLT, Lower, NaturalOrdering > ldlt_colmajor_lower_nat; + SimplicialLDLT, Upper, NaturalOrdering > ldlt_colmajor_upper_nat; + + check_sparse_spd_solving(chol_colmajor_lower_amd); + check_sparse_spd_solving(chol_colmajor_upper_amd); + check_sparse_spd_solving(llt_colmajor_lower_amd); + check_sparse_spd_solving(llt_colmajor_upper_amd); + check_sparse_spd_solving(ldlt_colmajor_lower_amd); + check_sparse_spd_solving(ldlt_colmajor_upper_amd); + + check_sparse_spd_determinant(chol_colmajor_lower_amd); + check_sparse_spd_determinant(chol_colmajor_upper_amd); + check_sparse_spd_determinant(llt_colmajor_lower_amd); + check_sparse_spd_determinant(llt_colmajor_upper_amd); + check_sparse_spd_determinant(ldlt_colmajor_lower_amd); + check_sparse_spd_determinant(ldlt_colmajor_upper_amd); + + check_sparse_spd_solving(ldlt_colmajor_lower_nat); + check_sparse_spd_solving(ldlt_colmajor_upper_nat); +} + +void test_simplicial_cholesky() +{ + CALL_SUBTEST_1(test_simplicial_cholesky_T()); + CALL_SUBTEST_2(test_simplicial_cholesky_T >()); +} diff --git a/deps/eigen-3.2.1/test/sizeof.cpp b/deps/eigen-3.2.8/test/sizeof.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sizeof.cpp rename to deps/eigen-3.2.8/test/sizeof.cpp diff --git a/deps/eigen-3.2.1/test/sizeoverflow.cpp b/deps/eigen-3.2.8/test/sizeoverflow.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sizeoverflow.cpp rename to deps/eigen-3.2.8/test/sizeoverflow.cpp diff --git a/deps/eigen-3.2.1/test/smallvectors.cpp b/deps/eigen-3.2.8/test/smallvectors.cpp similarity index 100% rename from deps/eigen-3.2.1/test/smallvectors.cpp rename to deps/eigen-3.2.8/test/smallvectors.cpp diff --git a/deps/eigen-3.2.1/test/sparse.h b/deps/eigen-3.2.8/test/sparse.h similarity index 100% rename from deps/eigen-3.2.1/test/sparse.h rename to deps/eigen-3.2.8/test/sparse.h diff --git a/deps/eigen-3.2.1/test/sparseLM.cpp b/deps/eigen-3.2.8/test/sparseLM.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sparseLM.cpp rename to deps/eigen-3.2.8/test/sparseLM.cpp diff --git a/deps/eigen-3.2.1/test/sparse_basic.cpp b/deps/eigen-3.2.8/test/sparse_basic.cpp similarity index 84% rename from deps/eigen-3.2.1/test/sparse_basic.cpp rename to deps/eigen-3.2.8/test/sparse_basic.cpp index 498ecfe2..abe6a9d1 100644 --- a/deps/eigen-3.2.1/test/sparse_basic.cpp +++ b/deps/eigen-3.2.8/test/sparse_basic.cpp @@ -24,6 +24,7 @@ template void sparse_basic(const SparseMatrixType& re double density = (std::max)(8./(rows*cols), 0.01); typedef Matrix DenseMatrix; typedef Matrix DenseVector; + typedef Matrix RowDenseVector; Scalar eps = 1e-6; Scalar s1 = internal::random(); @@ -52,7 +53,7 @@ template void sparse_basic(const SparseMatrixType& re refMat.coeffRef(nonzeroCoords[0].x(), nonzeroCoords[0].y()) = Scalar(5); VERIFY_IS_APPROX(m, refMat); - /* + // test InnerIterators and Block expressions for (int t=0; t<10; ++t) { @@ -61,23 +62,54 @@ template void sparse_basic(const SparseMatrixType& re int w = internal::random(1,cols-j-1); int h = internal::random(1,rows-i-1); - // VERIFY_IS_APPROX(m.block(i,j,h,w), refMat.block(i,j,h,w)); + VERIFY_IS_APPROX(m.block(i,j,h,w), refMat.block(i,j,h,w)); for(int c=0; c void sparse_basic(const SparseMatrixType& re VERIFY_IS_APPROX(m.row(r) + m.row(r), (m + m).row(r)); VERIFY_IS_APPROX(m.row(r) + m.row(r), refMat.row(r) + refMat.row(r)); } - */ + // test assertion VERIFY_RAISES_ASSERT( m.coeffRef(-1,1) = 0 ); @@ -274,6 +306,8 @@ template void sparse_basic(const SparseMatrixType& re refM4.setRandom(); // sparse cwise* dense VERIFY_IS_APPROX(m3.cwiseProduct(refM4), refM3.cwiseProduct(refM4)); + // dense cwise* sparse + VERIFY_IS_APPROX(refM4.cwiseProduct(m3), refM4.cwiseProduct(refM3)); // VERIFY_IS_APPROX(m3.cwise()/refM4, refM3.cwise()/refM4); // test aliasing @@ -326,6 +360,15 @@ template void sparse_basic(const SparseMatrixType& re refMat2.col(i) = refMat2.col(i) * s1; VERIFY_IS_APPROX(m2,refMat2); } + + VERIFY_IS_APPROX(DenseVector(m2.col(j0)), refMat2.col(j0)); + VERIFY_IS_APPROX(m2.col(j0), refMat2.col(j0)); + + VERIFY_IS_APPROX(RowDenseVector(m2.row(j0)), refMat2.row(j0)); + VERIFY_IS_APPROX(m2.row(j0), refMat2.row(j0)); + + VERIFY_IS_APPROX(m2.block(j0,j1,n0,n0), refMat2.block(j0,j1,n0,n0)); + VERIFY_IS_APPROX((2*m2).block(j0,j1,n0,n0), (2*refMat2).block(j0,j1,n0,n0)); } // test prune @@ -488,6 +531,20 @@ template void sparse_basic(const SparseMatrixType& re SparseMatrixType m1(rows, rows); m1.setIdentity(); VERIFY_IS_APPROX(m1, refMat1); + for(int k=0; k(0,rows-1); + Index j = internal::random(0,rows-1); + Scalar v = internal::random(); + m1.coeffRef(i,j) = v; + refMat1.coeffRef(i,j) = v; + VERIFY_IS_APPROX(m1, refMat1); + if(internal::random(0,10)<2) + m1.makeCompressed(); + } + m1.setIdentity(); + refMat1.setIdentity(); + VERIFY_IS_APPROX(m1, refMat1); } } diff --git a/deps/eigen-3.2.1/test/sparse_permutations.cpp b/deps/eigen-3.2.8/test/sparse_permutations.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sparse_permutations.cpp rename to deps/eigen-3.2.8/test/sparse_permutations.cpp diff --git a/deps/eigen-3.2.1/test/sparse_product.cpp b/deps/eigen-3.2.8/test/sparse_product.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sparse_product.cpp rename to deps/eigen-3.2.8/test/sparse_product.cpp diff --git a/deps/eigen-3.2.1/test/sparse_solver.h b/deps/eigen-3.2.8/test/sparse_solver.h similarity index 83% rename from deps/eigen-3.2.1/test/sparse_solver.h rename to deps/eigen-3.2.8/test/sparse_solver.h index d84aff07..e1619d62 100644 --- a/deps/eigen-3.2.1/test/sparse_solver.h +++ b/deps/eigen-3.2.8/test/sparse_solver.h @@ -67,6 +67,22 @@ void check_sparse_solving(Solver& solver, const typename Solver::MatrixType& A, VERIFY(oldb.isApprox(db) && "sparse solver testing: the rhs should not be modified!"); VERIFY(x.isApprox(refX,test_precision())); } + + // if not too large, do some extra check: + if(A.rows()<2000) + { + + // test expression as input + { + solver.compute(0.5*(A+A)); + Rhs x = solver.solve(b); + VERIFY(x.isApprox(refX,test_precision())); + + Solver solver2(0.5*(A+A)); + Rhs x2 = solver2.solve(b); + VERIFY(x2.isApprox(refX,test_precision())); + } + } } template @@ -124,7 +140,23 @@ void check_sparse_determinant(Solver& solver, const typename Solver::MatrixType& Scalar refDet = dA.determinant(); VERIFY_IS_APPROX(refDet,solver.determinant()); } +template +void check_sparse_abs_determinant(Solver& solver, const typename Solver::MatrixType& A, const DenseMat& dA) +{ + using std::abs; + typedef typename Solver::MatrixType Mat; + typedef typename Mat::Scalar Scalar; + + solver.compute(A); + if (solver.info() != Success) + { + std::cerr << "sparse solver testing: factorization failed (check_sparse_abs_determinant)\n"; + return; + } + Scalar refDet = abs(dA.determinant()); + VERIFY_IS_APPROX(refDet,solver.absDeterminant()); +} template int generate_sparse_spd_problem(Solver& , typename Solver::MatrixType& A, typename Solver::MatrixType& halfA, DenseMat& dA, int maxSize = 300) @@ -145,7 +177,10 @@ int generate_sparse_spd_problem(Solver& , typename Solver::MatrixType& A, typena dA = dM * dM.adjoint(); halfA.resize(size,size); - halfA.template selfadjointView().rankUpdate(M); + if(Solver::UpLo==(Lower|Upper)) + halfA = A; + else + halfA.template selfadjointView().rankUpdate(M); return size; } @@ -258,7 +293,17 @@ int generate_sparse_square_problem(Solver&, typename Solver::MatrixType& A, Dens return size; } -template void check_sparse_square_solving(Solver& solver) + +struct prune_column { + int m_col; + prune_column(int col) : m_col(col) {} + template + bool operator()(int, int col, const Scalar&) const { + return col != m_col; + } +}; + +template void check_sparse_square_solving(Solver& solver, bool checkDeficient = false) { typedef typename Solver::MatrixType Mat; typedef typename Mat::Scalar Scalar; @@ -290,6 +335,13 @@ template void check_sparse_square_solving(Solver& solver) b = DenseVector::Zero(size); check_sparse_solving(solver, A, b, dA, b); } + // regression test for Bug 792 (structurally rank deficient matrices): + if(checkDeficient && size>1) { + int col = internal::random(0,size-1); + A.prune(prune_column(col)); + solver.compute(A); + VERIFY_IS_EQUAL(solver.info(), NumericalIssue); + } } // First, get the folder @@ -324,3 +376,20 @@ template void check_sparse_square_determinant(Solver& solver) check_sparse_determinant(solver, A, dA); } } + +template void check_sparse_square_abs_determinant(Solver& solver) +{ + typedef typename Solver::MatrixType Mat; + typedef typename Mat::Scalar Scalar; + typedef Matrix DenseMatrix; + + // generate the problem + Mat A; + DenseMatrix dA; + generate_sparse_square_problem(solver, A, dA, 30); + A.makeCompressed(); + for (int i = 0; i < g_repeat; i++) { + check_sparse_abs_determinant(solver, A, dA); + } +} + diff --git a/deps/eigen-3.2.1/test/sparse_solvers.cpp b/deps/eigen-3.2.8/test/sparse_solvers.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sparse_solvers.cpp rename to deps/eigen-3.2.8/test/sparse_solvers.cpp diff --git a/deps/eigen-3.2.1/test/sparse_vector.cpp b/deps/eigen-3.2.8/test/sparse_vector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/sparse_vector.cpp rename to deps/eigen-3.2.8/test/sparse_vector.cpp diff --git a/deps/eigen-3.2.1/test/sparselu.cpp b/deps/eigen-3.2.8/test/sparselu.cpp similarity index 84% rename from deps/eigen-3.2.1/test/sparselu.cpp rename to deps/eigen-3.2.8/test/sparselu.cpp index 37980def..b3d67aea 100644 --- a/deps/eigen-3.2.1/test/sparselu.cpp +++ b/deps/eigen-3.2.8/test/sparselu.cpp @@ -41,9 +41,15 @@ template void test_sparselu_T() SparseLU, AMDOrdering > sparselu_amd; SparseLU, NaturalOrdering > sparselu_natural; - check_sparse_square_solving(sparselu_colamd); - check_sparse_square_solving(sparselu_amd); - check_sparse_square_solving(sparselu_natural); + check_sparse_square_solving(sparselu_colamd, true); + check_sparse_square_solving(sparselu_amd, true); + check_sparse_square_solving(sparselu_natural,true); + + check_sparse_square_abs_determinant(sparselu_colamd); + check_sparse_square_abs_determinant(sparselu_amd); + + check_sparse_square_determinant(sparselu_colamd); + check_sparse_square_determinant(sparselu_amd); } void test_sparselu() diff --git a/deps/eigen-3.2.1/test/sparseqr.cpp b/deps/eigen-3.2.8/test/sparseqr.cpp similarity index 76% rename from deps/eigen-3.2.1/test/sparseqr.cpp rename to deps/eigen-3.2.8/test/sparseqr.cpp index 6edba30b..451c0e7f 100644 --- a/deps/eigen-3.2.1/test/sparseqr.cpp +++ b/deps/eigen-3.2.8/test/sparseqr.cpp @@ -2,24 +2,23 @@ // for linear algebra. // // Copyright (C) 2012 Desire Nuentsa Wakam +// Copyright (C) 2014 Gael Guennebaud // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed #include "sparse.h" #include - template -int generate_sparse_rectangular_problem(MatrixType& A, DenseMat& dA, int maxRows = 300, int maxCols = 300) +int generate_sparse_rectangular_problem(MatrixType& A, DenseMat& dA, int maxRows = 300) { - eigen_assert(maxRows >= maxCols); typedef typename MatrixType::Scalar Scalar; int rows = internal::random(1,maxRows); int cols = internal::random(1,rows); double density = (std::max)(8./(rows*cols), 0.01); - A.resize(rows,rows); - dA.resize(rows,rows); + A.resize(rows,cols); + dA.resize(rows,cols); initSparse(density, dA, A,ForceNonZeroDiag); A.makeCompressed(); int nop = internal::random(0, internal::random(0,1) > 0.5 ? cols/2 : 0); @@ -31,6 +30,13 @@ int generate_sparse_rectangular_problem(MatrixType& A, DenseMat& dA, int maxRows A.col(j0) = s * A.col(j1); dA.col(j0) = s * dA.col(j1); } + +// if(rows void test_sparseqr_scalar() MatrixType A; DenseMat dA; DenseVector refX,x,b; - SparseQR > solver; + SparseQR > solver; generate_sparse_rectangular_problem(A,dA); - int n = A.cols(); - b = DenseVector::Random(n); + b = dA * DenseVector::Random(A.cols()); solver.compute(A); + if(internal::random(0,1)>0.5) + solver.factorize(A); // this checks that calling analyzePattern is not needed if the pattern do not change. if (solver.info() != Success) { std::cerr << "sparse QR factorization failed\n"; @@ -60,17 +67,19 @@ template void test_sparseqr_scalar() std::cerr << "sparse QR factorization failed\n"; exit(0); return; - } + } + + VERIFY_IS_APPROX(A * x, b); + //Compare with a dense QR solver ColPivHouseholderQR dqr(dA); refX = dqr.solve(b); VERIFY_IS_EQUAL(dqr.rank(), solver.rank()); - - if(solver.rank() (A * x - b).norm() ); - else + if(solver.rank()==A.cols()) // full rank VERIFY_IS_APPROX(x, refX); +// else +// VERIFY((dA * refX - b).norm() * 2 > (A * x - b).norm() ); // Compute explicitly the matrix Q MatrixType Q, QtQ, idM; @@ -88,3 +97,4 @@ void test_sparseqr() CALL_SUBTEST_2(test_sparseqr_scalar >()); } } + diff --git a/deps/eigen-3.2.1/test/special_numbers.cpp b/deps/eigen-3.2.8/test/special_numbers.cpp similarity index 100% rename from deps/eigen-3.2.1/test/special_numbers.cpp rename to deps/eigen-3.2.8/test/special_numbers.cpp diff --git a/deps/eigen-3.2.1/test/spqr_support.cpp b/deps/eigen-3.2.8/test/spqr_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/spqr_support.cpp rename to deps/eigen-3.2.8/test/spqr_support.cpp diff --git a/deps/eigen-3.2.1/test/stable_norm.cpp b/deps/eigen-3.2.8/test/stable_norm.cpp similarity index 98% rename from deps/eigen-3.2.1/test/stable_norm.cpp rename to deps/eigen-3.2.8/test/stable_norm.cpp index 549f91fb..231dd918 100644 --- a/deps/eigen-3.2.1/test/stable_norm.cpp +++ b/deps/eigen-3.2.8/test/stable_norm.cpp @@ -9,11 +9,6 @@ #include "main.h" -template bool isNotNaN(const T& x) -{ - return x==x; -} - // workaround aggressive optimization in ICC template EIGEN_DONT_INLINE T sub(T a, T b) { return a - b; } diff --git a/deps/eigen-3.2.1/test/stddeque.cpp b/deps/eigen-3.2.8/test/stddeque.cpp similarity index 100% rename from deps/eigen-3.2.1/test/stddeque.cpp rename to deps/eigen-3.2.8/test/stddeque.cpp diff --git a/deps/eigen-3.2.8/test/stddeque_overload.cpp b/deps/eigen-3.2.8/test/stddeque_overload.cpp new file mode 100644 index 00000000..4da618bb --- /dev/null +++ b/deps/eigen-3.2.8/test/stddeque_overload.cpp @@ -0,0 +1,158 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Benoit Jacob +// Copyright (C) 2010 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "main.h" + +#include +#include + +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Vector4f) + +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Matrix2f) +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Matrix4f) +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Matrix4d) + +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Affine3f) +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Affine3d) + +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Quaternionf) +EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(Quaterniond) + +template +void check_stddeque_matrix(const MatrixType& m) +{ + typename MatrixType::Index rows = m.rows(); + typename MatrixType::Index cols = m.cols(); + MatrixType x = MatrixType::Random(rows,cols), y = MatrixType::Random(rows,cols); + std::deque v(10, MatrixType(rows,cols)), w(20, y); + v[5] = x; + w[6] = v[5]; + VERIFY_IS_APPROX(w[6], v[5]); + v = w; + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(w[i], v[i]); + } + + v.resize(21); + v[20] = x; + VERIFY_IS_APPROX(v[20], x); + v.resize(22,y); + VERIFY_IS_APPROX(v[21], y); + v.push_back(x); + VERIFY_IS_APPROX(v[22], x); + + // do a lot of push_back such that the deque gets internally resized + // (with memory reallocation) + MatrixType* ref = &w[0]; + for(int i=0; i<30 || ((ref==&w[0]) && i<300); ++i) + v.push_back(w[i%w.size()]); + for(unsigned int i=23; i +void check_stddeque_transform(const TransformType&) +{ + typedef typename TransformType::MatrixType MatrixType; + TransformType x(MatrixType::Random()), y(MatrixType::Random()); + std::deque v(10), w(20, y); + v[5] = x; + w[6] = v[5]; + VERIFY_IS_APPROX(w[6], v[5]); + v = w; + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(w[i], v[i]); + } + + v.resize(21); + v[20] = x; + VERIFY_IS_APPROX(v[20], x); + v.resize(22,y); + VERIFY_IS_APPROX(v[21], y); + v.push_back(x); + VERIFY_IS_APPROX(v[22], x); + + // do a lot of push_back such that the deque gets internally resized + // (with memory reallocation) + TransformType* ref = &w[0]; + for(int i=0; i<30 || ((ref==&w[0]) && i<300); ++i) + v.push_back(w[i%w.size()]); + for(unsigned int i=23; i +void check_stddeque_quaternion(const QuaternionType&) +{ + typedef typename QuaternionType::Coefficients Coefficients; + QuaternionType x(Coefficients::Random()), y(Coefficients::Random()); + std::deque v(10), w(20, y); + v[5] = x; + w[6] = v[5]; + VERIFY_IS_APPROX(w[6], v[5]); + v = w; + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(w[i], v[i]); + } + + v.resize(21); + v[20] = x; + VERIFY_IS_APPROX(v[20], x); + v.resize(22,y); + VERIFY_IS_APPROX(v[21], y); + v.push_back(x); + VERIFY_IS_APPROX(v[22], x); + + // do a lot of push_back such that the deque gets internally resized + // (with memory reallocation) + QuaternionType* ref = &w[0]; + for(int i=0; i<30 || ((ref==&w[0]) && i<300); ++i) + v.push_back(w[i%w.size()]); + for(unsigned int i=23; i +// Copyright (C) 2010 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "main.h" + +#include +#include + +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Vector4f) + +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Matrix2f) +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Matrix4f) +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Matrix4d) + +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Affine3f) +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Affine3d) + +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Quaternionf) +EIGEN_DEFINE_STL_LIST_SPECIALIZATION(Quaterniond) + +template +typename Container::iterator get(Container & c, Position position) +{ + typename Container::iterator it = c.begin(); + std::advance(it, position); + return it; +} + +template +void set(Container & c, Position position, const Value & value) +{ + typename Container::iterator it = c.begin(); + std::advance(it, position); + *it = value; +} + +template +void check_stdlist_matrix(const MatrixType& m) +{ + typename MatrixType::Index rows = m.rows(); + typename MatrixType::Index cols = m.cols(); + MatrixType x = MatrixType::Random(rows,cols), y = MatrixType::Random(rows,cols); + std::list v(10, MatrixType(rows,cols)), w(20, y); + typename std::list::iterator itv = get(v, 5); + typename std::list::iterator itw = get(w, 6); + *itv = x; + *itw = *itv; + VERIFY_IS_APPROX(*itw, *itv); + v = w; + itv = v.begin(); + itw = w.begin(); + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(*itw, *itv); + ++itv; + ++itw; + } + + v.resize(21); + set(v, 20, x); + VERIFY_IS_APPROX(*get(v, 20), x); + v.resize(22,y); + VERIFY_IS_APPROX(*get(v, 21), y); + v.push_back(x); + VERIFY_IS_APPROX(*get(v, 22), x); + + // do a lot of push_back such that the list gets internally resized + // (with memory reallocation) + MatrixType* ref = &(*get(w, 0)); + for(int i=0; i<30 || ((ref==&(*get(w, 0))) && i<300); ++i) + v.push_back(*get(w, i%w.size())); + for(unsigned int i=23; i +void check_stdlist_transform(const TransformType&) +{ + typedef typename TransformType::MatrixType MatrixType; + TransformType x(MatrixType::Random()), y(MatrixType::Random()); + std::list v(10), w(20, y); + typename std::list::iterator itv = get(v, 5); + typename std::list::iterator itw = get(w, 6); + *itv = x; + *itw = *itv; + VERIFY_IS_APPROX(*itw, *itv); + v = w; + itv = v.begin(); + itw = w.begin(); + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(*itw, *itv); + ++itv; + ++itw; + } + + v.resize(21); + set(v, 20, x); + VERIFY_IS_APPROX(*get(v, 20), x); + v.resize(22,y); + VERIFY_IS_APPROX(*get(v, 21), y); + v.push_back(x); + VERIFY_IS_APPROX(*get(v, 22), x); + + // do a lot of push_back such that the list gets internally resized + // (with memory reallocation) + TransformType* ref = &(*get(w, 0)); + for(int i=0; i<30 || ((ref==&(*get(w, 0))) && i<300); ++i) + v.push_back(*get(w, i%w.size())); + for(unsigned int i=23; imatrix()==get(w, (i-23)%w.size())->matrix()); + } +} + +template +void check_stdlist_quaternion(const QuaternionType&) +{ + typedef typename QuaternionType::Coefficients Coefficients; + QuaternionType x(Coefficients::Random()), y(Coefficients::Random()); + std::list v(10), w(20, y); + typename std::list::iterator itv = get(v, 5); + typename std::list::iterator itw = get(w, 6); + *itv = x; + *itw = *itv; + VERIFY_IS_APPROX(*itw, *itv); + v = w; + itv = v.begin(); + itw = w.begin(); + for(int i = 0; i < 20; i++) + { + VERIFY_IS_APPROX(*itw, *itv); + ++itv; + ++itw; + } + + v.resize(21); + set(v, 20, x); + VERIFY_IS_APPROX(*get(v, 20), x); + v.resize(22,y); + VERIFY_IS_APPROX(*get(v, 21), y); + v.push_back(x); + VERIFY_IS_APPROX(*get(v, 22), x); + + // do a lot of push_back such that the list gets internally resized + // (with memory reallocation) + QuaternionType* ref = &(*get(w, 0)); + for(int i=0; i<30 || ((ref==&(*get(w, 0))) && i<300); ++i) + v.push_back(*get(w, i%w.size())); + for(unsigned int i=23; icoeffs()==get(w, (i-23)%w.size())->coeffs()); + } +} + +void test_stdlist_overload() +{ + // some non vectorizable fixed sizes + CALL_SUBTEST_1(check_stdlist_matrix(Vector2f())); + CALL_SUBTEST_1(check_stdlist_matrix(Matrix3f())); + CALL_SUBTEST_2(check_stdlist_matrix(Matrix3d())); + + // some vectorizable fixed sizes + CALL_SUBTEST_1(check_stdlist_matrix(Matrix2f())); + CALL_SUBTEST_1(check_stdlist_matrix(Vector4f())); + CALL_SUBTEST_1(check_stdlist_matrix(Matrix4f())); + CALL_SUBTEST_2(check_stdlist_matrix(Matrix4d())); + + // some dynamic sizes + CALL_SUBTEST_3(check_stdlist_matrix(MatrixXd(1,1))); + CALL_SUBTEST_3(check_stdlist_matrix(VectorXd(20))); + CALL_SUBTEST_3(check_stdlist_matrix(RowVectorXf(20))); + CALL_SUBTEST_3(check_stdlist_matrix(MatrixXcf(10,10))); + + // some Transform + CALL_SUBTEST_4(check_stdlist_transform(Affine2f())); // does not need the specialization (2+1)^2 = 9 + CALL_SUBTEST_4(check_stdlist_transform(Affine3f())); + CALL_SUBTEST_4(check_stdlist_transform(Affine3d())); + + // some Quaternion + CALL_SUBTEST_5(check_stdlist_quaternion(Quaternionf())); + CALL_SUBTEST_5(check_stdlist_quaternion(Quaterniond())); +} diff --git a/deps/eigen-3.2.1/test/stdvector.cpp b/deps/eigen-3.2.8/test/stdvector.cpp similarity index 100% rename from deps/eigen-3.2.1/test/stdvector.cpp rename to deps/eigen-3.2.8/test/stdvector.cpp diff --git a/deps/eigen-3.2.1/test/stdvector_overload.cpp b/deps/eigen-3.2.8/test/stdvector_overload.cpp similarity index 100% rename from deps/eigen-3.2.1/test/stdvector_overload.cpp rename to deps/eigen-3.2.8/test/stdvector_overload.cpp diff --git a/deps/eigen-3.2.1/test/superlu_support.cpp b/deps/eigen-3.2.8/test/superlu_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/superlu_support.cpp rename to deps/eigen-3.2.8/test/superlu_support.cpp diff --git a/deps/eigen-3.2.1/test/swap.cpp b/deps/eigen-3.2.8/test/swap.cpp similarity index 100% rename from deps/eigen-3.2.1/test/swap.cpp rename to deps/eigen-3.2.8/test/swap.cpp diff --git a/deps/eigen-3.2.1/test/testsuite.cmake b/deps/eigen-3.2.8/test/testsuite.cmake similarity index 100% rename from deps/eigen-3.2.1/test/testsuite.cmake rename to deps/eigen-3.2.8/test/testsuite.cmake diff --git a/deps/eigen-3.2.1/test/triangular.cpp b/deps/eigen-3.2.8/test/triangular.cpp similarity index 100% rename from deps/eigen-3.2.1/test/triangular.cpp rename to deps/eigen-3.2.8/test/triangular.cpp diff --git a/deps/eigen-3.2.1/test/umeyama.cpp b/deps/eigen-3.2.8/test/umeyama.cpp similarity index 100% rename from deps/eigen-3.2.1/test/umeyama.cpp rename to deps/eigen-3.2.8/test/umeyama.cpp diff --git a/deps/eigen-3.2.1/test/umfpack_support.cpp b/deps/eigen-3.2.8/test/umfpack_support.cpp similarity index 100% rename from deps/eigen-3.2.1/test/umfpack_support.cpp rename to deps/eigen-3.2.8/test/umfpack_support.cpp diff --git a/deps/eigen-3.2.1/test/unalignedassert.cpp b/deps/eigen-3.2.8/test/unalignedassert.cpp similarity index 100% rename from deps/eigen-3.2.1/test/unalignedassert.cpp rename to deps/eigen-3.2.8/test/unalignedassert.cpp diff --git a/deps/eigen-3.2.1/test/unalignedcount.cpp b/deps/eigen-3.2.8/test/unalignedcount.cpp similarity index 100% rename from deps/eigen-3.2.1/test/unalignedcount.cpp rename to deps/eigen-3.2.8/test/unalignedcount.cpp diff --git a/deps/eigen-3.2.1/test/upperbidiagonalization.cpp b/deps/eigen-3.2.8/test/upperbidiagonalization.cpp similarity index 100% rename from deps/eigen-3.2.1/test/upperbidiagonalization.cpp rename to deps/eigen-3.2.8/test/upperbidiagonalization.cpp diff --git a/deps/eigen-3.2.1/test/vectorization_logic.cpp b/deps/eigen-3.2.8/test/vectorization_logic.cpp similarity index 100% rename from deps/eigen-3.2.1/test/vectorization_logic.cpp rename to deps/eigen-3.2.8/test/vectorization_logic.cpp diff --git a/deps/eigen-3.2.1/test/vectorwiseop.cpp b/deps/eigen-3.2.8/test/vectorwiseop.cpp similarity index 93% rename from deps/eigen-3.2.1/test/vectorwiseop.cpp rename to deps/eigen-3.2.8/test/vectorwiseop.cpp index 6cd1acdd..d32fd10c 100644 --- a/deps/eigen-3.2.1/test/vectorwiseop.cpp +++ b/deps/eigen-3.2.8/test/vectorwiseop.cpp @@ -111,6 +111,18 @@ template void vectorwiseop_array(const ArrayType& m) m2.rowwise() /= m2.colwise().sum(); VERIFY_IS_APPROX(m2, m1.rowwise() / m1.colwise().sum()); } + + // all/any + Array mb(rows,cols); + mb = (m1.real()<=0.7).colwise().all(); + VERIFY( (mb.col(c) == (m1.real().col(c)<=0.7).all()).all() ); + mb = (m1.real()<=0.7).rowwise().all(); + VERIFY( (mb.row(r) == (m1.real().row(r)<=0.7).all()).all() ); + + mb = (m1.real()>=0.7).colwise().any(); + VERIFY( (mb.col(c) == (m1.real().col(c)>=0.7).any()).all() ); + mb = (m1.real()>=0.7).rowwise().any(); + VERIFY( (mb.row(r) == (m1.real().row(r)>=0.7).any()).all() ); } template void vectorwiseop_matrix(const MatrixType& m) diff --git a/deps/eigen-3.2.1/test/visitor.cpp b/deps/eigen-3.2.8/test/visitor.cpp similarity index 95% rename from deps/eigen-3.2.1/test/visitor.cpp rename to deps/eigen-3.2.8/test/visitor.cpp index 39a5d6b5..844170ec 100644 --- a/deps/eigen-3.2.1/test/visitor.cpp +++ b/deps/eigen-3.2.8/test/visitor.cpp @@ -55,6 +55,11 @@ template void matrixVisitor(const MatrixType& p) VERIFY_IS_APPROX(maxc, eigen_maxc); VERIFY_IS_APPROX(minc, m.minCoeff()); VERIFY_IS_APPROX(maxc, m.maxCoeff()); + + eigen_maxc = (m.adjoint()*m).maxCoeff(&eigen_maxrow,&eigen_maxcol); + eigen_maxc = (m.adjoint()*m).eval().maxCoeff(&maxrow,&maxcol); + VERIFY(maxrow == eigen_maxrow); + VERIFY(maxcol == eigen_maxcol); } template void vectorVisitor(const VectorType& w) diff --git a/deps/eigen-3.2.1/test/zerosized.cpp b/deps/eigen-3.2.8/test/zerosized.cpp similarity index 100% rename from deps/eigen-3.2.1/test/zerosized.cpp rename to deps/eigen-3.2.8/test/zerosized.cpp diff --git a/deps/eigen-3.2.1/unsupported/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/AdolcForward b/deps/eigen-3.2.8/unsupported/Eigen/AdolcForward similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/AdolcForward rename to deps/eigen-3.2.8/unsupported/Eigen/AdolcForward diff --git a/deps/eigen-3.2.1/unsupported/Eigen/AlignedVector3 b/deps/eigen-3.2.8/unsupported/Eigen/AlignedVector3 similarity index 97% rename from deps/eigen-3.2.1/unsupported/Eigen/AlignedVector3 rename to deps/eigen-3.2.8/unsupported/Eigen/AlignedVector3 index 7b45e6cc..29d5c90f 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/AlignedVector3 +++ b/deps/eigen-3.2.8/unsupported/Eigen/AlignedVector3 @@ -177,7 +177,7 @@ template class AlignedVector3 } template - inline bool isApprox(const MatrixBase& other, RealScalar eps=NumTraits::dummy_precision()) const + inline bool isApprox(const MatrixBase& other, const RealScalar& eps=NumTraits::dummy_precision()) const { return m_coeffs.template head<3>().isApprox(other,eps); } diff --git a/deps/eigen-3.2.1/unsupported/Eigen/ArpackSupport b/deps/eigen-3.2.8/unsupported/Eigen/ArpackSupport similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/ArpackSupport rename to deps/eigen-3.2.8/unsupported/Eigen/ArpackSupport diff --git a/deps/eigen-3.2.1/unsupported/Eigen/AutoDiff b/deps/eigen-3.2.8/unsupported/Eigen/AutoDiff similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/AutoDiff rename to deps/eigen-3.2.8/unsupported/Eigen/AutoDiff diff --git a/deps/eigen-3.2.1/unsupported/Eigen/BVH b/deps/eigen-3.2.8/unsupported/Eigen/BVH similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/BVH rename to deps/eigen-3.2.8/unsupported/Eigen/BVH diff --git a/deps/eigen-3.2.8/unsupported/Eigen/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/CMakeLists.txt new file mode 100644 index 00000000..e1fbf97e --- /dev/null +++ b/deps/eigen-3.2.8/unsupported/Eigen/CMakeLists.txt @@ -0,0 +1,11 @@ +set(Eigen_HEADERS AdolcForward AlignedVector3 ArpackSupport AutoDiff BVH FFT IterativeSolvers KroneckerProduct LevenbergMarquardt + MatrixFunctions MoreVectorization MPRealSupport NonLinearOptimization NumericalDiff OpenGLSupport Polynomials + Skyline SparseExtra Splines + ) + +install(FILES + ${Eigen_HEADERS} + DESTINATION ${INCLUDE_INSTALL_DIR}/unsupported/Eigen COMPONENT Devel + ) + +add_subdirectory(src) diff --git a/deps/eigen-3.2.1/unsupported/Eigen/FFT b/deps/eigen-3.2.8/unsupported/Eigen/FFT similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/FFT rename to deps/eigen-3.2.8/unsupported/Eigen/FFT diff --git a/deps/eigen-3.2.1/unsupported/Eigen/IterativeSolvers b/deps/eigen-3.2.8/unsupported/Eigen/IterativeSolvers similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/IterativeSolvers rename to deps/eigen-3.2.8/unsupported/Eigen/IterativeSolvers diff --git a/deps/eigen-3.2.1/unsupported/Eigen/KroneckerProduct b/deps/eigen-3.2.8/unsupported/Eigen/KroneckerProduct similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/KroneckerProduct rename to deps/eigen-3.2.8/unsupported/Eigen/KroneckerProduct diff --git a/deps/eigen-3.2.1/unsupported/Eigen/LevenbergMarquardt b/deps/eigen-3.2.8/unsupported/Eigen/LevenbergMarquardt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/LevenbergMarquardt rename to deps/eigen-3.2.8/unsupported/Eigen/LevenbergMarquardt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/MPRealSupport b/deps/eigen-3.2.8/unsupported/Eigen/MPRealSupport similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/MPRealSupport rename to deps/eigen-3.2.8/unsupported/Eigen/MPRealSupport diff --git a/deps/eigen-3.2.1/unsupported/Eigen/MatrixFunctions b/deps/eigen-3.2.8/unsupported/Eigen/MatrixFunctions similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/MatrixFunctions rename to deps/eigen-3.2.8/unsupported/Eigen/MatrixFunctions diff --git a/deps/eigen-3.2.1/unsupported/Eigen/MoreVectorization b/deps/eigen-3.2.8/unsupported/Eigen/MoreVectorization similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/MoreVectorization rename to deps/eigen-3.2.8/unsupported/Eigen/MoreVectorization diff --git a/deps/eigen-3.2.1/unsupported/Eigen/NonLinearOptimization b/deps/eigen-3.2.8/unsupported/Eigen/NonLinearOptimization similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/NonLinearOptimization rename to deps/eigen-3.2.8/unsupported/Eigen/NonLinearOptimization diff --git a/deps/eigen-3.2.1/unsupported/Eigen/NumericalDiff b/deps/eigen-3.2.8/unsupported/Eigen/NumericalDiff similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/NumericalDiff rename to deps/eigen-3.2.8/unsupported/Eigen/NumericalDiff diff --git a/deps/eigen-3.2.1/unsupported/Eigen/OpenGLSupport b/deps/eigen-3.2.8/unsupported/Eigen/OpenGLSupport similarity index 94% rename from deps/eigen-3.2.1/unsupported/Eigen/OpenGLSupport rename to deps/eigen-3.2.8/unsupported/Eigen/OpenGLSupport index c4090ab1..e2769449 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/OpenGLSupport +++ b/deps/eigen-3.2.8/unsupported/Eigen/OpenGLSupport @@ -178,11 +178,11 @@ template void glLoadMatrix(const Transform& t) template void glLoadMatrix(const Transform& t) { glLoadMatrix(t.matrix()); } template void glLoadMatrix(const Transform& t) { glLoadMatrix(Transform(t).matrix()); } -static void glRotate(const Rotation2D& rot) +inline void glRotate(const Rotation2D& rot) { glRotatef(rot.angle()*180.f/float(M_PI), 0.f, 0.f, 1.f); } -static void glRotate(const Rotation2D& rot) +inline void glRotate(const Rotation2D& rot) { glRotated(rot.angle()*180.0/M_PI, 0.0, 0.0, 1.0); } @@ -246,18 +246,18 @@ EIGEN_GL_FUNC1_SPECIALIZATION_MAT(glGet,GLenum,_,double, 4,4,Doublev) #ifdef GL_VERSION_2_0 -static void glUniform2fv_ei (GLint loc, const float* v) { glUniform2fv(loc,1,v); } -static void glUniform2iv_ei (GLint loc, const int* v) { glUniform2iv(loc,1,v); } +inline void glUniform2fv_ei (GLint loc, const float* v) { glUniform2fv(loc,1,v); } +inline void glUniform2iv_ei (GLint loc, const int* v) { glUniform2iv(loc,1,v); } -static void glUniform3fv_ei (GLint loc, const float* v) { glUniform3fv(loc,1,v); } -static void glUniform3iv_ei (GLint loc, const int* v) { glUniform3iv(loc,1,v); } +inline void glUniform3fv_ei (GLint loc, const float* v) { glUniform3fv(loc,1,v); } +inline void glUniform3iv_ei (GLint loc, const int* v) { glUniform3iv(loc,1,v); } -static void glUniform4fv_ei (GLint loc, const float* v) { glUniform4fv(loc,1,v); } -static void glUniform4iv_ei (GLint loc, const int* v) { glUniform4iv(loc,1,v); } +inline void glUniform4fv_ei (GLint loc, const float* v) { glUniform4fv(loc,1,v); } +inline void glUniform4iv_ei (GLint loc, const int* v) { glUniform4iv(loc,1,v); } -static void glUniformMatrix2fv_ei (GLint loc, const float* v) { glUniformMatrix2fv(loc,1,false,v); } -static void glUniformMatrix3fv_ei (GLint loc, const float* v) { glUniformMatrix3fv(loc,1,false,v); } -static void glUniformMatrix4fv_ei (GLint loc, const float* v) { glUniformMatrix4fv(loc,1,false,v); } +inline void glUniformMatrix2fv_ei (GLint loc, const float* v) { glUniformMatrix2fv(loc,1,false,v); } +inline void glUniformMatrix3fv_ei (GLint loc, const float* v) { glUniformMatrix3fv(loc,1,false,v); } +inline void glUniformMatrix4fv_ei (GLint loc, const float* v) { glUniformMatrix4fv(loc,1,false,v); } EIGEN_GL_FUNC1_DECLARATION (glUniform,GLint,const) @@ -294,9 +294,9 @@ EIGEN_GL_FUNC1_SPECIALIZATION_MAT(glUniform,GLint,const,float, 4,3,Matrix #ifdef GL_VERSION_3_0 -static void glUniform2uiv_ei (GLint loc, const unsigned int* v) { glUniform2uiv(loc,1,v); } -static void glUniform3uiv_ei (GLint loc, const unsigned int* v) { glUniform3uiv(loc,1,v); } -static void glUniform4uiv_ei (GLint loc, const unsigned int* v) { glUniform4uiv(loc,1,v); } +inline void glUniform2uiv_ei (GLint loc, const unsigned int* v) { glUniform2uiv(loc,1,v); } +inline void glUniform3uiv_ei (GLint loc, const unsigned int* v) { glUniform3uiv(loc,1,v); } +inline void glUniform4uiv_ei (GLint loc, const unsigned int* v) { glUniform4uiv(loc,1,v); } EIGEN_GL_FUNC1_SPECIALIZATION_VEC(glUniform,GLint,const,unsigned int, 2,2uiv_ei) EIGEN_GL_FUNC1_SPECIALIZATION_VEC(glUniform,GLint,const,unsigned int, 3,3uiv_ei) @@ -305,9 +305,9 @@ EIGEN_GL_FUNC1_SPECIALIZATION_VEC(glUniform,GLint,const,unsigned int, 4,4uiv_ei) #endif #ifdef GL_ARB_gpu_shader_fp64 -static void glUniform2dv_ei (GLint loc, const double* v) { glUniform2dv(loc,1,v); } -static void glUniform3dv_ei (GLint loc, const double* v) { glUniform3dv(loc,1,v); } -static void glUniform4dv_ei (GLint loc, const double* v) { glUniform4dv(loc,1,v); } +inline void glUniform2dv_ei (GLint loc, const double* v) { glUniform2dv(loc,1,v); } +inline void glUniform3dv_ei (GLint loc, const double* v) { glUniform3dv(loc,1,v); } +inline void glUniform4dv_ei (GLint loc, const double* v) { glUniform4dv(loc,1,v); } EIGEN_GL_FUNC1_SPECIALIZATION_VEC(glUniform,GLint,const,double, 2,2dv_ei) EIGEN_GL_FUNC1_SPECIALIZATION_VEC(glUniform,GLint,const,double, 3,3dv_ei) diff --git a/deps/eigen-3.2.1/unsupported/Eigen/Polynomials b/deps/eigen-3.2.8/unsupported/Eigen/Polynomials similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/Polynomials rename to deps/eigen-3.2.8/unsupported/Eigen/Polynomials diff --git a/deps/eigen-3.2.1/unsupported/Eigen/SVD b/deps/eigen-3.2.8/unsupported/Eigen/SVD similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/SVD rename to deps/eigen-3.2.8/unsupported/Eigen/SVD diff --git a/deps/eigen-3.2.1/unsupported/Eigen/Skyline b/deps/eigen-3.2.8/unsupported/Eigen/Skyline similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/Skyline rename to deps/eigen-3.2.8/unsupported/Eigen/Skyline diff --git a/deps/eigen-3.2.1/unsupported/Eigen/SparseExtra b/deps/eigen-3.2.8/unsupported/Eigen/SparseExtra similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/SparseExtra rename to deps/eigen-3.2.8/unsupported/Eigen/SparseExtra diff --git a/deps/eigen-3.2.1/unsupported/Eigen/Splines b/deps/eigen-3.2.8/unsupported/Eigen/Splines similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/Splines rename to deps/eigen-3.2.8/unsupported/Eigen/Splines diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h b/deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h similarity index 99% rename from deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h index 8d42e69b..fde3ff61 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h @@ -631,7 +631,7 @@ template struct NumTraits > { typedef AutoDiffScalar::Real,DerType::RowsAtCompileTime,DerType::ColsAtCompileTime> > Real; typedef AutoDiffScalar NonInteger; - typedef AutoDiffScalar& Nested; + typedef AutoDiffScalar Nested; enum{ RequireInitialization = 1 }; diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h b/deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/AutoDiff/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/AutoDiff/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/BVH/BVAlgorithms.h b/deps/eigen-3.2.8/unsupported/Eigen/src/BVH/BVAlgorithms.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/BVH/BVAlgorithms.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/BVH/BVAlgorithms.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/BVH/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/BVH/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/BVH/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/BVH/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/BVH/KdBVH.h b/deps/eigen-3.2.8/unsupported/Eigen/src/BVH/KdBVH.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/BVH/KdBVH.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/BVH/KdBVH.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/CMakeLists.txt similarity index 85% rename from deps/eigen-3.2.1/unsupported/Eigen/src/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/CMakeLists.txt index f3180b52..d8b9f406 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/CMakeLists.txt +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/CMakeLists.txt @@ -1,7 +1,10 @@ ADD_SUBDIRECTORY(AutoDiff) ADD_SUBDIRECTORY(BVH) +ADD_SUBDIRECTORY(Eigenvalues) ADD_SUBDIRECTORY(FFT) ADD_SUBDIRECTORY(IterativeSolvers) +ADD_SUBDIRECTORY(KroneckerProduct) +ADD_SUBDIRECTORY(LevenbergMarquardt) ADD_SUBDIRECTORY(MatrixFunctions) ADD_SUBDIRECTORY(MoreVectorization) ADD_SUBDIRECTORY(NonLinearOptimization) @@ -9,5 +12,4 @@ ADD_SUBDIRECTORY(NumericalDiff) ADD_SUBDIRECTORY(Polynomials) ADD_SUBDIRECTORY(Skyline) ADD_SUBDIRECTORY(SparseExtra) -ADD_SUBDIRECTORY(KroneckerProduct) ADD_SUBDIRECTORY(Splines) diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h diff --git a/deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/CMakeLists.txt new file mode 100644 index 00000000..1d4387c8 --- /dev/null +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/Eigenvalues/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB Eigen_Eigenvalues_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Eigenvalues_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/unsupported/Eigen/src/Eigenvalues COMPONENT Devel + ) diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/FFT/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/FFT/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/FFT/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/FFT/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/FFT/ei_fftw_impl.h b/deps/eigen-3.2.8/unsupported/Eigen/src/FFT/ei_fftw_impl.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/FFT/ei_fftw_impl.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/FFT/ei_fftw_impl.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/FFT/ei_kissfft_impl.h b/deps/eigen-3.2.8/unsupported/Eigen/src/FFT/ei_kissfft_impl.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/FFT/ei_kissfft_impl.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/FFT/ei_kissfft_impl.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/DGMRES.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/DGMRES.h similarity index 98% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/DGMRES.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/DGMRES.h index 9fcc8a8d..68fc997f 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/DGMRES.h @@ -133,8 +133,8 @@ class DGMRES : public IterativeSolverBase > * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - DGMRES(const MatrixType& A) : Base(A),m_restart(30),m_neig(0),m_r(0),m_maxNeig(5),m_isDeflAllocated(false),m_isDeflInitialized(false) - {} + template + explicit DGMRES(const EigenBase& A) : Base(A.derived()), m_restart(30),m_neig(0),m_r(0),m_maxNeig(5),m_isDeflAllocated(false),m_isDeflInitialized(false) {} ~DGMRES() {} diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/GMRES.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/GMRES.h similarity index 94% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/GMRES.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/GMRES.h index 07336750..ea5deb26 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/GMRES.h +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/GMRES.h @@ -2,7 +2,7 @@ // for linear algebra. // // Copyright (C) 2011 Gael Guennebaud -// Copyright (C) 2012 Kolja Brix +// Copyright (C) 2012, 2014 Kolja Brix // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed @@ -72,16 +72,20 @@ bool gmres(const MatrixType & mat, const Rhs & rhs, Dest & x, const Precondition VectorType p0 = rhs - mat*x; VectorType r0 = precond.solve(p0); -// RealScalar r0_sqnorm = r0.squaredNorm(); + + // is initial guess already good enough? + if(abs(r0.norm()) < tol) { + return true; + } VectorType w = VectorType::Zero(restart + 1); - FMatrixType H = FMatrixType::Zero(m, restart + 1); + FMatrixType H = FMatrixType::Zero(m, restart + 1); // Hessenberg matrix VectorType tau = VectorType::Zero(restart + 1); std::vector < JacobiRotation < Scalar > > G(restart); // generate first Householder vector - VectorType e; + VectorType e(m-1); RealScalar beta; r0.makeHouseholder(e, tau.coeffRef(0), beta); w(0)=(Scalar) beta; @@ -242,20 +246,7 @@ struct traits > * \endcode * * By default the iterations start with x=0 as an initial guess of the solution. - * One can control the start using the solveWithGuess() method. Here is a step by - * step execution example starting with a random guess and printing the evolution - * of the estimated error: - * * \code - * x = VectorXd::Random(n); - * solver.setMaxIterations(1); - * int i = 0; - * do { - * x = solver.solveWithGuess(b,x); - * std::cout << i << " : " << solver.error() << std::endl; - * ++i; - * } while (solver.info()!=Success && i<100); - * \endcode - * Note that such a step by step excution is slightly slower. + * One can control the start using the solveWithGuess() method. * * \sa class SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner */ @@ -294,7 +285,8 @@ public: * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - GMRES(const MatrixType& A) : Base(A), m_restart(30) {} + template + explicit GMRES(const EigenBase& A) : Base(A.derived()), m_restart(30) {} ~GMRES() {} diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IterationController.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IterationController.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/IterationController.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/IterationController.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/MINRES.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/MINRES.h similarity index 84% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/MINRES.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/MINRES.h index 0e56342a..670f274b 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/MINRES.h +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/MINRES.h @@ -37,22 +37,31 @@ namespace Eigen { typedef typename Dest::Scalar Scalar; typedef Matrix VectorType; + // Check for zero rhs + const RealScalar rhsNorm2(rhs.squaredNorm()); + if(rhsNorm2 == 0) + { + x.setZero(); + iters = 0; + tol_error = 0; + return; + } + // initialize const int maxIters(iters); // initialize maxIters to iters const int N(mat.cols()); // the size of the matrix - const RealScalar rhsNorm2(rhs.squaredNorm()); const RealScalar threshold2(tol_error*tol_error*rhsNorm2); // convergence threshold (compared to residualNorm2) // Initialize preconditioned Lanczos -// VectorType v_old(N); // will be initialized inside loop + VectorType v_old(N); // will be initialized inside loop VectorType v( VectorType::Zero(N) ); //initialize v VectorType v_new(rhs-mat*x); //initialize v_new RealScalar residualNorm2(v_new.squaredNorm()); -// VectorType w(N); // will be initialized inside loop + VectorType w(N); // will be initialized inside loop VectorType w_new(precond.solve(v_new)); // initialize w_new // RealScalar beta; // will be initialized inside loop RealScalar beta_new2(v_new.dot(w_new)); - eigen_assert(beta_new2 >= 0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE"); + eigen_assert(beta_new2 >= 0.0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE"); RealScalar beta_new(sqrt(beta_new2)); const RealScalar beta_one(beta_new); v_new /= beta_new; @@ -62,14 +71,14 @@ namespace Eigen { RealScalar c_old(1.0); RealScalar s(0.0); // the sine of the Givens rotation RealScalar s_old(0.0); // the sine of the Givens rotation -// VectorType p_oold(N); // will be initialized in loop + VectorType p_oold(N); // will be initialized in loop VectorType p_old(VectorType::Zero(N)); // initialize p_old=0 VectorType p(p_old); // initialize p=0 RealScalar eta(1.0); iters = 0; // reset iters - while ( iters < maxIters ){ - + while ( iters < maxIters ) + { // Preconditioned Lanczos /* Note that there are 4 variants on the Lanczos algorithm. These are * described in Paige, C. C. (1972). Computational variants of @@ -81,17 +90,17 @@ namespace Eigen { * A. Greenbaum, Iterative Methods for Solving Linear Systems, SIAM (1987). */ const RealScalar beta(beta_new); -// v_old = v; // update: at first time step, this makes v_old = 0 so value of beta doesn't matter - const VectorType v_old(v); // NOT SURE IF CREATING v_old EVERY ITERATION IS EFFICIENT + v_old = v; // update: at first time step, this makes v_old = 0 so value of beta doesn't matter +// const VectorType v_old(v); // NOT SURE IF CREATING v_old EVERY ITERATION IS EFFICIENT v = v_new; // update -// w = w_new; // update - const VectorType w(w_new); // NOT SURE IF CREATING w EVERY ITERATION IS EFFICIENT + w = w_new; // update +// const VectorType w(w_new); // NOT SURE IF CREATING w EVERY ITERATION IS EFFICIENT v_new.noalias() = mat*w - beta*v_old; // compute v_new const RealScalar alpha = v_new.dot(w); v_new -= alpha*v; // overwrite v_new w_new = precond.solve(v_new); // overwrite w_new beta_new2 = v_new.dot(w_new); // compute beta_new - eigen_assert(beta_new2 >= 0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE"); + eigen_assert(beta_new2 >= 0.0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE"); beta_new = sqrt(beta_new2); // compute beta_new v_new /= beta_new; // overwrite v_new for next iteration w_new /= beta_new; // overwrite w_new for next iteration @@ -107,21 +116,28 @@ namespace Eigen { s=beta_new/r1; // new sine // Update solution -// p_oold = p_old; - const VectorType p_oold(p_old); // NOT SURE IF CREATING p_oold EVERY ITERATION IS EFFICIENT + p_oold = p_old; +// const VectorType p_oold(p_old); // NOT SURE IF CREATING p_oold EVERY ITERATION IS EFFICIENT p_old = p; p.noalias()=(w-r2*p_old-r3*p_oold) /r1; // IS NOALIAS REQUIRED? x += beta_one*c*eta*p; + + /* Update the squared residual. Note that this is the estimated residual. + The real residual |Ax-b|^2 may be slightly larger */ residualNorm2 *= s*s; - if ( residualNorm2 < threshold2){ + if ( residualNorm2 < threshold2) + { break; } eta=-s*eta; // update eta iters++; // increment iteration number (for output purposes) } - tol_error = std::sqrt(residualNorm2 / rhsNorm2); // return error. Note that this is the estimated error. The real error |Ax-b|/|b| may be slightly larger + + /* Compute error. Note that this is the estimated error. The real + error |Ax-b|/|b| may be slightly larger */ + tol_error = std::sqrt(residualNorm2 / rhsNorm2); } } @@ -174,20 +190,7 @@ namespace Eigen { * \endcode * * By default the iterations start with x=0 as an initial guess of the solution. - * One can control the start using the solveWithGuess() method. Here is a step by - * step execution example starting with a random guess and printing the evolution - * of the estimated error: - * * \code - * x = VectorXd::Random(n); - * mr.setMaxIterations(1); - * int i = 0; - * do { - * x = mr.solveWithGuess(b,x); - * std::cout << i << " : " << mr.error() << std::endl; - * ++i; - * } while (mr.info()!=Success && i<100); - * \endcode - * Note that such a step by step excution is slightly slower. + * One can control the start using the solveWithGuess() method. * * \sa class ConjugateGradient, BiCGSTAB, SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner */ @@ -225,7 +228,8 @@ namespace Eigen { * this class becomes invalid. Call compute() to update it with the new * matrix A, or modify a copy of A. */ - MINRES(const MatrixType& A) : Base(A) {} + template + explicit MINRES(const EigenBase& A) : Base(A.derived()) {} /** Destructor. */ ~MINRES(){} @@ -250,6 +254,11 @@ namespace Eigen { template void _solveWithGuess(const Rhs& b, Dest& x) const { + typedef typename internal::conditional + >::type MatrixWrapperType; + m_iterations = Base::maxIterations(); m_error = Base::m_tolerance; @@ -259,7 +268,7 @@ namespace Eigen { m_error = Base::m_tolerance; typename Dest::ColXpr xj(x,j); - internal::minres(mp_matrix->template selfadjointView(), b.col(j), xj, + internal::minres(MatrixWrapperType(*mp_matrix), b.col(j), xj, Base::m_preconditioner, m_iterations, m_error); } diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/Scaling.h b/deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/Scaling.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/IterativeSolvers/Scaling.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/IterativeSolvers/Scaling.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/KroneckerProduct/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/KroneckerProduct/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/KroneckerProduct/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/KroneckerProduct/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h b/deps/eigen-3.2.8/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt similarity index 51% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt index 8513803c..d9690854 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/CMakeLists.txt @@ -2,5 +2,5 @@ FILE(GLOB Eigen_LevenbergMarquardt_SRCS "*.h") INSTALL(FILES ${Eigen_LevenbergMarquardt_SRCS} - DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/LevenbergMarquardt COMPONENT Devel + DESTINATION ${INCLUDE_INSTALL_DIR}/unsupported/Eigen/src/LevenbergMarquardt COMPONENT Devel ) diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h b/deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h similarity index 99% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h index c3243728..78a307e9 100644 --- a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +++ b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h @@ -110,7 +110,6 @@ void MatrixPowerAtomic::compute2x2(MatrixType& res, RealScalar p) co using std::abs; using std::pow; - ArrayType logTdiag = m_A.diagonal().array().log(); res.coeffRef(0,0) = pow(m_A.coeff(0,0), p); for (Index i=1; i < m_A.cols(); ++i) { diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/StemFunction.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/StemFunction.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MatrixFunctions/StemFunction.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MatrixFunctions/StemFunction.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MoreVectorization/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/MoreVectorization/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MoreVectorization/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/MoreVectorization/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/MoreVectorization/MathFunctions.h b/deps/eigen-3.2.8/unsupported/Eigen/src/MoreVectorization/MathFunctions.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/MoreVectorization/MathFunctions.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/MoreVectorization/MathFunctions.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/chkder.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/chkder.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/chkder.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/chkder.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/covar.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/covar.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/covar.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/covar.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/dogleg.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/dogleg.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/dogleg.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/dogleg.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/lmpar.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/lmpar.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/lmpar.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/lmpar.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/r1updt.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/r1updt.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/r1updt.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/r1updt.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NumericalDiff/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/NumericalDiff/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NumericalDiff/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/NumericalDiff/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h b/deps/eigen-3.2.8/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/Companion.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/Companion.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/Companion.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/Companion.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/PolynomialSolver.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/PolynomialSolver.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/PolynomialSolver.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/PolynomialSolver.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/PolynomialUtils.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/PolynomialUtils.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Polynomials/PolynomialUtils.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Polynomials/PolynomialUtils.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/BDCSVD.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/BDCSVD.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/BDCSVD.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/BDCSVD.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/JacobiSVD.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/JacobiSVD.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/JacobiSVD.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/JacobiSVD.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/SVDBase.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/SVDBase.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/SVDBase.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/SVDBase.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/TODOBdcsvd.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/TODOBdcsvd.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/TODOBdcsvd.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/TODOBdcsvd.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SVD/doneInBDCSVD.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/SVD/doneInBDCSVD.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SVD/doneInBDCSVD.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/SVD/doneInBDCSVD.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineMatrix.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineMatrix.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineMatrix.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineMatrix.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineProduct.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineProduct.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineProduct.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineProduct.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineStorage.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineStorage.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineStorage.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineStorage.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineUtil.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineUtil.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Skyline/SkylineUtil.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Skyline/SkylineUtil.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/MarketIO.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/MarketIO.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/MarketIO.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/MarketIO.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/RandomSetter.h b/deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/RandomSetter.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/SparseExtra/RandomSetter.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/SparseExtra/RandomSetter.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Splines/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/Eigen/src/Splines/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Splines/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/Eigen/src/Splines/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Splines/Spline.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Splines/Spline.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Splines/Spline.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Splines/Spline.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Splines/SplineFitting.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Splines/SplineFitting.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Splines/SplineFitting.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Splines/SplineFitting.h diff --git a/deps/eigen-3.2.1/unsupported/Eigen/src/Splines/SplineFwd.h b/deps/eigen-3.2.8/unsupported/Eigen/src/Splines/SplineFwd.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/Eigen/src/Splines/SplineFwd.h rename to deps/eigen-3.2.8/unsupported/Eigen/src/Splines/SplineFwd.h diff --git a/deps/eigen-3.2.1/unsupported/README.txt b/deps/eigen-3.2.8/unsupported/README.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/README.txt rename to deps/eigen-3.2.8/unsupported/README.txt diff --git a/deps/eigen-3.2.1/unsupported/bench/bench_svd.cpp b/deps/eigen-3.2.8/unsupported/bench/bench_svd.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/bench/bench_svd.cpp rename to deps/eigen-3.2.8/unsupported/bench/bench_svd.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/doc/CMakeLists.txt similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/doc/CMakeLists.txt diff --git a/deps/eigen-3.2.1/unsupported/doc/Overview.dox b/deps/eigen-3.2.8/unsupported/doc/Overview.dox similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/Overview.dox rename to deps/eigen-3.2.8/unsupported/doc/Overview.dox diff --git a/deps/eigen-3.2.1/unsupported/doc/eigendoxy_layout.xml.in b/deps/eigen-3.2.8/unsupported/doc/eigendoxy_layout.xml.in similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/eigendoxy_layout.xml.in rename to deps/eigen-3.2.8/unsupported/doc/eigendoxy_layout.xml.in diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/BVH_Example.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/BVH_Example.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/BVH_Example.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/BVH_Example.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/doc/examples/CMakeLists.txt similarity index 83% rename from deps/eigen-3.2.1/unsupported/doc/examples/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/doc/examples/CMakeLists.txt index 978f9afd..c47646df 100644 --- a/deps/eigen-3.2.1/unsupported/doc/examples/CMakeLists.txt +++ b/deps/eigen-3.2.8/unsupported/doc/examples/CMakeLists.txt @@ -10,12 +10,10 @@ FOREACH(example_src ${examples_SRCS}) if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) target_link_libraries(example_${example} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) endif() - GET_TARGET_PROPERTY(example_executable - example_${example} LOCATION) ADD_CUSTOM_COMMAND( TARGET example_${example} POST_BUILD - COMMAND ${example_executable} + COMMAND example_${example} ARGS >${CMAKE_CURRENT_BINARY_DIR}/${example}.out ) ADD_DEPENDENCIES(unsupported_examples example_${example}) diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/FFT.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/FFT.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/FFT.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/FFT.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixExponential.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixExponential.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixExponential.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixExponential.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixFunction.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixFunction.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixFunction.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixFunction.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixLogarithm.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixLogarithm.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixLogarithm.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixLogarithm.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixPower.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixPower.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixPower.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixPower.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixPower_optimal.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixPower_optimal.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixPower_optimal.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixPower_optimal.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixSine.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixSine.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixSine.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixSine.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixSinh.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixSinh.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixSinh.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixSinh.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/MatrixSquareRoot.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/MatrixSquareRoot.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/MatrixSquareRoot.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/MatrixSquareRoot.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/PolynomialSolver1.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/PolynomialSolver1.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/PolynomialSolver1.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/PolynomialSolver1.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/examples/PolynomialUtils1.cpp b/deps/eigen-3.2.8/unsupported/doc/examples/PolynomialUtils1.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/doc/examples/PolynomialUtils1.cpp rename to deps/eigen-3.2.8/unsupported/doc/examples/PolynomialUtils1.cpp diff --git a/deps/eigen-3.2.1/unsupported/doc/snippets/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/doc/snippets/CMakeLists.txt similarity index 88% rename from deps/eigen-3.2.1/unsupported/doc/snippets/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/doc/snippets/CMakeLists.txt index 4a415793..f0c5cc2a 100644 --- a/deps/eigen-3.2.1/unsupported/doc/snippets/CMakeLists.txt +++ b/deps/eigen-3.2.8/unsupported/doc/snippets/CMakeLists.txt @@ -14,12 +14,10 @@ FOREACH(snippet_src ${snippets_SRCS}) if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) endif() - GET_TARGET_PROPERTY(compile_snippet_executable - ${compile_snippet_target} LOCATION) ADD_CUSTOM_COMMAND( TARGET ${compile_snippet_target} POST_BUILD - COMMAND ${compile_snippet_executable} + COMMAND ${compile_snippet_target} ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out ) ADD_DEPENDENCIES(unsupported_snippets ${compile_snippet_target}) diff --git a/deps/eigen-3.2.1/unsupported/test/BVH.cpp b/deps/eigen-3.2.8/unsupported/test/BVH.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/BVH.cpp rename to deps/eigen-3.2.8/unsupported/test/BVH.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/CMakeLists.txt b/deps/eigen-3.2.8/unsupported/test/CMakeLists.txt similarity index 94% rename from deps/eigen-3.2.1/unsupported/test/CMakeLists.txt rename to deps/eigen-3.2.8/unsupported/test/CMakeLists.txt index a94a3b5e..2e4cfdb2 100644 --- a/deps/eigen-3.2.1/unsupported/test/CMakeLists.txt +++ b/deps/eigen-3.2.8/unsupported/test/CMakeLists.txt @@ -29,11 +29,7 @@ ei_add_test(NonLinearOptimization) ei_add_test(NumericalDiff) ei_add_test(autodiff) - -if (NOT CMAKE_CXX_COMPILER MATCHES "clang\\+\\+$") ei_add_test(BVH) -endif() - ei_add_test(matrix_exponential) ei_add_test(matrix_function) ei_add_test(matrix_power) @@ -73,8 +69,9 @@ if(NOT EIGEN_TEST_NO_OPENGL) find_package(GLUT) find_package(GLEW) if(OPENGL_FOUND AND GLUT_FOUND AND GLEW_FOUND) + include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS}) ei_add_property(EIGEN_TESTED_BACKENDS "OpenGL, ") - set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES}) + set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES}) ei_add_test(openglsupport "" "${EIGEN_GL_LIB}" ) else() ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") diff --git a/deps/eigen-3.2.1/unsupported/test/FFT.cpp b/deps/eigen-3.2.8/unsupported/test/FFT.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/FFT.cpp rename to deps/eigen-3.2.8/unsupported/test/FFT.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/FFTW.cpp b/deps/eigen-3.2.8/unsupported/test/FFTW.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/FFTW.cpp rename to deps/eigen-3.2.8/unsupported/test/FFTW.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/NonLinearOptimization.cpp b/deps/eigen-3.2.8/unsupported/test/NonLinearOptimization.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/NonLinearOptimization.cpp rename to deps/eigen-3.2.8/unsupported/test/NonLinearOptimization.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/NumericalDiff.cpp b/deps/eigen-3.2.8/unsupported/test/NumericalDiff.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/NumericalDiff.cpp rename to deps/eigen-3.2.8/unsupported/test/NumericalDiff.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/alignedvector3.cpp b/deps/eigen-3.2.8/unsupported/test/alignedvector3.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/alignedvector3.cpp rename to deps/eigen-3.2.8/unsupported/test/alignedvector3.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/autodiff.cpp b/deps/eigen-3.2.8/unsupported/test/autodiff.cpp similarity index 80% rename from deps/eigen-3.2.1/unsupported/test/autodiff.cpp rename to deps/eigen-3.2.8/unsupported/test/autodiff.cpp index 6eb417e8..087e7c54 100644 --- a/deps/eigen-3.2.1/unsupported/test/autodiff.cpp +++ b/deps/eigen-3.2.8/unsupported/test/autodiff.cpp @@ -127,46 +127,47 @@ template void forward_jacobian(const Func& f) VERIFY_IS_APPROX(j, jref); } + +// TODO also check actual derivatives! void test_autodiff_scalar() { - std::cerr << foo(1,2) << "\n"; + Vector2f p = Vector2f::Random(); typedef AutoDiffScalar AD; - AD ax(1,Vector2f::UnitX()); - AD ay(2,Vector2f::UnitY()); + AD ax(p.x(),Vector2f::UnitX()); + AD ay(p.y(),Vector2f::UnitY()); AD res = foo(ax,ay); - std::cerr << res.value() << " <> " - << res.derivatives().transpose() << "\n\n"; + VERIFY_IS_APPROX(res.value(), foo(p.x(),p.y())); } +// TODO also check actual derivatives! void test_autodiff_vector() { - std::cerr << foo(Vector2f(1,2)) << "\n"; + Vector2f p = Vector2f::Random(); typedef AutoDiffScalar AD; typedef Matrix VectorAD; - VectorAD p(AD(1),AD(-1)); - p.x().derivatives() = Vector2f::UnitX(); - p.y().derivatives() = Vector2f::UnitY(); + VectorAD ap = p.cast(); + ap.x().derivatives() = Vector2f::UnitX(); + ap.y().derivatives() = Vector2f::UnitY(); - AD res = foo(p); - std::cerr << res.value() << " <> " - << res.derivatives().transpose() << "\n\n"; + AD res = foo(ap); + VERIFY_IS_APPROX(res.value(), foo(p)); } void test_autodiff_jacobian() { - for(int i = 0; i < g_repeat; i++) { - CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); - CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); - CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); - CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); - CALL_SUBTEST(( forward_jacobian(TestFunc1(3,3)) )); - } + CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); + CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); + CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); + CALL_SUBTEST(( forward_jacobian(TestFunc1()) )); + CALL_SUBTEST(( forward_jacobian(TestFunc1(3,3)) )); } void test_autodiff() { - test_autodiff_scalar(); - test_autodiff_vector(); -// test_autodiff_jacobian(); + for(int i = 0; i < g_repeat; i++) { + CALL_SUBTEST_1( test_autodiff_scalar() ); + CALL_SUBTEST_2( test_autodiff_vector() ); + CALL_SUBTEST_3( test_autodiff_jacobian() ); + } } diff --git a/deps/eigen-3.2.1/unsupported/test/bdcsvd.cpp b/deps/eigen-3.2.8/unsupported/test/bdcsvd.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/bdcsvd.cpp rename to deps/eigen-3.2.8/unsupported/test/bdcsvd.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/dgmres.cpp b/deps/eigen-3.2.8/unsupported/test/dgmres.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/dgmres.cpp rename to deps/eigen-3.2.8/unsupported/test/dgmres.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/forward_adolc.cpp b/deps/eigen-3.2.8/unsupported/test/forward_adolc.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/forward_adolc.cpp rename to deps/eigen-3.2.8/unsupported/test/forward_adolc.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/gmres.cpp b/deps/eigen-3.2.8/unsupported/test/gmres.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/gmres.cpp rename to deps/eigen-3.2.8/unsupported/test/gmres.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/jacobisvd.cpp b/deps/eigen-3.2.8/unsupported/test/jacobisvd.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/jacobisvd.cpp rename to deps/eigen-3.2.8/unsupported/test/jacobisvd.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/kronecker_product.cpp b/deps/eigen-3.2.8/unsupported/test/kronecker_product.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/kronecker_product.cpp rename to deps/eigen-3.2.8/unsupported/test/kronecker_product.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/levenberg_marquardt.cpp b/deps/eigen-3.2.8/unsupported/test/levenberg_marquardt.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/levenberg_marquardt.cpp rename to deps/eigen-3.2.8/unsupported/test/levenberg_marquardt.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/matrix_exponential.cpp b/deps/eigen-3.2.8/unsupported/test/matrix_exponential.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/matrix_exponential.cpp rename to deps/eigen-3.2.8/unsupported/test/matrix_exponential.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/matrix_function.cpp b/deps/eigen-3.2.8/unsupported/test/matrix_function.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/matrix_function.cpp rename to deps/eigen-3.2.8/unsupported/test/matrix_function.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/matrix_functions.h b/deps/eigen-3.2.8/unsupported/test/matrix_functions.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/matrix_functions.h rename to deps/eigen-3.2.8/unsupported/test/matrix_functions.h diff --git a/deps/eigen-3.2.1/unsupported/test/matrix_power.cpp b/deps/eigen-3.2.8/unsupported/test/matrix_power.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/matrix_power.cpp rename to deps/eigen-3.2.8/unsupported/test/matrix_power.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/matrix_square_root.cpp b/deps/eigen-3.2.8/unsupported/test/matrix_square_root.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/matrix_square_root.cpp rename to deps/eigen-3.2.8/unsupported/test/matrix_square_root.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/minres.cpp b/deps/eigen-3.2.8/unsupported/test/minres.cpp similarity index 52% rename from deps/eigen-3.2.1/unsupported/test/minres.cpp rename to deps/eigen-3.2.8/unsupported/test/minres.cpp index fd12da54..509ebe09 100644 --- a/deps/eigen-3.2.1/unsupported/test/minres.cpp +++ b/deps/eigen-3.2.8/unsupported/test/minres.cpp @@ -14,15 +14,32 @@ template void test_minres_T() { - MINRES, Lower, DiagonalPreconditioner > minres_colmajor_diag; - MINRES, Lower, IdentityPreconditioner > minres_colmajor_I; + MINRES, Lower|Upper, DiagonalPreconditioner > minres_colmajor_diag; + MINRES, Lower, IdentityPreconditioner > minres_colmajor_lower_I; + MINRES, Upper, IdentityPreconditioner > minres_colmajor_upper_I; // MINRES, Lower, IncompleteLUT > minres_colmajor_ilut; //minres, SSORPreconditioner > minres_colmajor_ssor; - CALL_SUBTEST( check_sparse_square_solving(minres_colmajor_diag) ); - CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_I) ); + +// CALL_SUBTEST( check_sparse_square_solving(minres_colmajor_diag) ); // CALL_SUBTEST( check_sparse_square_solving(minres_colmajor_ilut) ); //CALL_SUBTEST( check_sparse_square_solving(minres_colmajor_ssor) ); + + // Diagonal preconditioner + MINRES, Lower, DiagonalPreconditioner > minres_colmajor_lower_diag; + MINRES, Upper, DiagonalPreconditioner > minres_colmajor_upper_diag; + MINRES, Upper|Lower, DiagonalPreconditioner > minres_colmajor_uplo_diag; + + // call tests for SPD matrix + CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_lower_I) ); + CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_upper_I) ); + + CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_lower_diag) ); + CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_upper_diag) ); +// CALL_SUBTEST( check_sparse_spd_solving(minres_colmajor_uplo_diag) ); + + // TO DO: symmetric semi-definite matrix + // TO DO: symmetric indefinite matrix } void test_minres() diff --git a/deps/eigen-3.2.1/unsupported/test/mpreal/mpreal.h b/deps/eigen-3.2.8/unsupported/test/mpreal/mpreal.h similarity index 67% rename from deps/eigen-3.2.1/unsupported/test/mpreal/mpreal.h rename to deps/eigen-3.2.8/unsupported/test/mpreal/mpreal.h index ef0a6a9f..7d6f4e79 100644 --- a/deps/eigen-3.2.1/unsupported/test/mpreal/mpreal.h +++ b/deps/eigen-3.2.8/unsupported/test/mpreal/mpreal.h @@ -1,59 +1,47 @@ /* - Multi-precision floating point number class for C++. + MPFR C++: Multi-precision floating point number class for C++. Based on MPFR library: http://mpfr.org Project homepage: http://www.holoborodko.com/pavel/mpfr Contact e-mail: pavel@holoborodko.com - Copyright (c) 2008-2012 Pavel Holoborodko + Copyright (c) 2008-2014 Pavel Holoborodko Contributors: Dmitriy Gubanov, Konstantin Holoborodko, Brian Gladman, Helmut Jarausch, Fokko Beekhof, Ulrich Mutze, Heinz van Saanen, Pere Constans, Peter van Hoof, Gael Guennebaud, Tsai Chia Cheng, - Alexei Zubanov, Jauhien Piatlicki, Victor Berger, John Westwood. + Alexei Zubanov, Jauhien Piatlicki, Victor Berger, John Westwood, + Petr Aleksandrov, Orion Poplawski, Charles Karney. - **************************************************************************** - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + Licensing: + (A) MPFR C++ is under GNU General Public License ("GPL"). + + (B) Non-free licenses may also be purchased from the author, for users who + do not want their programs protected by the GPL. - This library is distributed in the hope that it will be useful, + The non-free licenses are for users that wish to use MPFR C++ in + their products but are unwilling to release their software + under the GPL (which would require them to release source code + and allow free redistribution). + + Such users can purchase an unlimited-use license from the author. + Contact us for more details. + + GNU General Public License ("GPL") copyright permissions statement: + ************************************************************************** + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - **************************************************************************** - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifndef __MPREAL_H__ @@ -65,11 +53,22 @@ #include #include #include +#include #include // Options -#define MPREAL_HAVE_INT64_SUPPORT // Enable int64_t support if possible. Available only for MSVC 2010 & GCC. +// FIXME HAVE_INT64_SUPPORT leads to clashes with long int and int64_t on some systems. +//#define MPREAL_HAVE_INT64_SUPPORT // Enable int64_t support if possible. Available only for MSVC 2010 & GCC. #define MPREAL_HAVE_MSVC_DEBUGVIEW // Enable Debugger Visualizer for "Debug" builds in MSVC. +#define MPREAL_HAVE_DYNAMIC_STD_NUMERIC_LIMITS // Enable extended std::numeric_limits specialization. + // Meaning that "digits", "round_style" and similar members are defined as functions, not constants. + // See std::numeric_limits at the end of the file for more information. + +// Library version +#define MPREAL_VERSION_MAJOR 3 +#define MPREAL_VERSION_MINOR 5 +#define MPREAL_VERSION_PATCHLEVEL 9 +#define MPREAL_VERSION_STRING "3.5.9" // Detect compiler using signatures from http://predef.sourceforge.net/ #if defined(__GNUC__) && defined(__INTEL_COMPILER) @@ -82,6 +81,32 @@ #define IsInf(x) std::isinf(x) // GNU C/C++ (and/or other compilers), just hope for C99 conformance #endif +// A Clang feature extension to determine compiler features. +#ifndef __has_feature + #define __has_feature(x) 0 +#endif + +// Detect support for r-value references (move semantic). Borrowed from Eigen. +#if (__has_feature(cxx_rvalue_references) || \ + defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \ + (defined(_MSC_VER) && _MSC_VER >= 1600)) + + #define MPREAL_HAVE_MOVE_SUPPORT + + // Use fields in mpfr_t structure to check if it was initialized / set dummy initialization + #define mpfr_is_initialized(x) (0 != (x)->_mpfr_d) + #define mpfr_set_uninitialized(x) ((x)->_mpfr_d = 0 ) +#endif + +// Detect support for explicit converters. +#if (__has_feature(cxx_explicit_conversions) || \ + defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \ + (defined(_MSC_VER) && _MSC_VER >= 1800)) + + #define MPREAL_HAVE_EXPLICIT_CONVERTERS +#endif + +// Detect available 64-bit capabilities #if defined(MPREAL_HAVE_INT64_SUPPORT) #define MPFR_USE_INTMAX_T // Should be defined before mpfr.h @@ -97,7 +122,7 @@ #endif #elif defined (__GNUC__) && defined(__linux__) - #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(__ia64) || defined(__itanium__) || defined(_M_IA64) + #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(__ia64) || defined(__itanium__) || defined(_M_IA64) || defined (__PPC64__) #undef MPREAL_HAVE_INT64_SUPPORT // Remove all shaman dances for x64 builds since #undef MPFR_USE_INTMAX_T // GCC already supports x64 as of "long int" is 64-bit integer, nothing left to do #else @@ -111,7 +136,7 @@ #endif #if defined(MPREAL_HAVE_MSVC_DEBUGVIEW) && defined(_MSC_VER) && defined(_DEBUG) -#define MPREAL_MSVC_DEBUGVIEW_CODE DebugView = toString(); + #define MPREAL_MSVC_DEBUGVIEW_CODE DebugView = toString(); #define MPREAL_MSVC_DEBUGVIEW_DATA std::string DebugView; #else #define MPREAL_MSVC_DEBUGVIEW_CODE @@ -149,7 +174,6 @@ public: // Constructors && type conversions mpreal(); mpreal(const mpreal& u); - mpreal(const mpfr_t u); mpreal(const mpf_t u); mpreal(const mpz_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); mpreal(const mpq_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); @@ -159,6 +183,10 @@ public: mpreal(const unsigned int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); mpreal(const long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); mpreal(const int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + + // Construct mpreal from mpfr_t structure. + // shared = true allows to avoid deep copy, so that mpreal and 'u' share the same data & pointers. + mpreal(const mpfr_t u, bool shared = false); #if defined (MPREAL_HAVE_INT64_SUPPORT) mpreal(const uint64_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); @@ -170,6 +198,11 @@ public: ~mpreal(); +#ifdef MPREAL_HAVE_MOVE_SUPPORT + mpreal& operator=(mpreal&& v); + mpreal(mpreal&& u); +#endif + // Operations // = // +, -, *, /, ++, --, <<, >> @@ -292,14 +325,34 @@ public: friend bool operator == (const mpreal& a, const double b); // Type Conversion operators + bool toBool (mp_rnd_t mode = GMP_RNDZ) const; long toLong (mp_rnd_t mode = GMP_RNDZ) const; unsigned long toULong (mp_rnd_t mode = GMP_RNDZ) const; + float toFloat (mp_rnd_t mode = GMP_RNDN) const; double toDouble (mp_rnd_t mode = GMP_RNDN) const; long double toLDouble (mp_rnd_t mode = GMP_RNDN) const; +#if defined (MPREAL_HAVE_EXPLICIT_CONVERTERS) + explicit operator bool () const { return toBool(); } + explicit operator int () const { return toLong(); } + explicit operator long () const { return toLong(); } + explicit operator long long () const { return toLong(); } + explicit operator unsigned () const { return toULong(); } + explicit operator unsigned long () const { return toULong(); } + explicit operator unsigned long long () const { return toULong(); } + explicit operator float () const { return toFloat(); } + explicit operator double () const { return toDouble(); } + explicit operator long double () const { return toLDouble(); } +#endif + #if defined (MPREAL_HAVE_INT64_SUPPORT) int64_t toInt64 (mp_rnd_t mode = GMP_RNDZ) const; uint64_t toUInt64 (mp_rnd_t mode = GMP_RNDZ) const; + + #if defined (MPREAL_HAVE_EXPLICIT_CONVERTERS) + explicit operator int64_t () const { return toInt64(); } + explicit operator uint64_t () const { return toUInt64(); } + #endif #endif // Get raw pointers so that mpreal can be directly used in raw mpfr_* functions @@ -308,121 +361,125 @@ public: ::mpfr_srcptr mpfr_srcptr() const; // Convert mpreal to string with n significant digits in base b - // n = 0 -> convert with the maximum available digits - std::string toString(int n = 0, int b = 10, mp_rnd_t mode = mpreal::get_default_rnd()) const; + // n = -1 -> convert with the maximum available digits + std::string toString(int n = -1, int b = 10, mp_rnd_t mode = mpreal::get_default_rnd()) const; #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - std::string toString(const std::string& format) const; + std::string toString(const std::string& format) const; #endif - // Math Functions - friend const mpreal sqr (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const mpreal& a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal pow (const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + std::ostream& output(std::ostream& os) const; - friend const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + // Math Functions + friend const mpreal sqr (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode); + friend const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const long int b, mp_rnd_t rnd_mode); + friend const mpreal pow (const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode); + friend const mpreal pow (const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode); + friend const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode); + friend inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode); + friend inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode); friend int cmpabs(const mpreal& a,const mpreal& b); - friend const mpreal log (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal log2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal exp (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal exp2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal log1p(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal expm1(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal log (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal log2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal log1p(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal expm1(const mpreal& v, mp_rnd_t rnd_mode); - friend const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode); + friend int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode); - friend const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode); + friend const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode); - friend const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode); - friend const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); - friend const mpreal fac_ui (unsigned long int v, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal fac_ui (unsigned long int v, mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode); - friend const mpreal gamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal lgamma (const mpreal& v, int *signp = 0, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal gamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal lgamma (const mpreal& v, int *signp, mp_rnd_t rnd_mode); + friend const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode); + friend const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode); + friend const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode); + friend const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode); friend int sgn(const mpreal& v); // returns -1 or +1 // MPFR 2.4.0 Specifics #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - friend int sinh_cosh (mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal li2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal rec_sqrt (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend int sinh_cosh (mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal li2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal rec_sqrt (const mpreal& v, mp_rnd_t rnd_mode); // MATLAB's semantic equivalents - friend const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // Remainder after division - friend const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // Modulus after division + friend const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); // Remainder after division + friend const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); // Modulus after division #endif // MPFR 3.0.0 Specifics #if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) - friend const mpreal digamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal ai (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // use gmp_randinit_default() to init state, gmp_randclear() to clear + friend const mpreal digamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal ai (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode); // use gmp_randinit_default() to init state, gmp_randclear() to clear + friend const mpreal grandom (gmp_randstate_t& state, mp_rnd_t rnd_mode); // use gmp_randinit_default() to init state, gmp_randclear() to clear + friend const mpreal grandom (unsigned int seed); #endif // Uniformly distributed random number generation in [0,1] using // Mersenne-Twister algorithm by default. // Use parameter to setup seed, e.g.: random((unsigned)time(NULL)) // Check urandom() for more precise control. - friend const mpreal random(unsigned int seed = 0); - + friend const mpreal random(unsigned int seed); + // Exponent and mantissa manipulation friend const mpreal frexp(const mpreal& v, mp_exp_t* exp); friend const mpreal ldexp(const mpreal& v, mp_exp_t exp); @@ -433,31 +490,31 @@ public: // Constants // don't forget to call mpfr_free_cache() for every thread where you are using const-functions - friend const mpreal const_log2 (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal const_pi (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal const_euler (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal const_catalan (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal const_log2 (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_pi (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_euler (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_catalan (mp_prec_t prec, mp_rnd_t rnd_mode); // returns +inf iff sign>=0 otherwise -inf - friend const mpreal const_infinity(int sign = 1, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal const_infinity(int sign, mp_prec_t prec); // Output/ Input friend std::ostream& operator<<(std::ostream& os, const mpreal& v); friend std::istream& operator>>(std::istream& is, mpreal& v); // Integer Related Functions - friend const mpreal rint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal rint (const mpreal& v, mp_rnd_t rnd_mode); friend const mpreal ceil (const mpreal& v); friend const mpreal floor(const mpreal& v); friend const mpreal round(const mpreal& v); friend const mpreal trunc(const mpreal& v); - friend const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal rint_floor (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal rint_round (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal rint_trunc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal remainder ( const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_floor (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_round (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_trunc (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal remainder ( const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); // Miscellaneous Functions friend const mpreal nexttoward (const mpreal& x, const mpreal& y); @@ -524,19 +581,22 @@ public: // Efficient swapping of two mpreal values - needed for std algorithms friend void swap(mpreal& x, mpreal& y); - friend const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); - friend const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + friend const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); private: // Human friendly Debug Preview in Visual Studio. // Put one of these lines: // - // mpfr::mpreal= ; Show value only + // mpfr::mpreal= ; Show value only // mpfr::mpreal=, bits ; Show value & precision // // at the beginning of // [Visual Studio Installation Folder]\Common7\Packages\Debugger\autoexp.dat MPREAL_MSVC_DEBUGVIEW_DATA + + // "Smart" resources deallocation. Checks if instance initialized before deletion. + void clear(::mpfr_ptr); }; ////////////////////////////////////////////////////////////////////////// @@ -551,64 +611,89 @@ public: // Default constructor: creates mp number and initializes it to 0. inline mpreal::mpreal() { - mpfr_init2(mp,mpreal::get_default_prec()); - mpfr_set_ui(mp,0,mpreal::get_default_rnd()); + mpfr_init2 (mpfr_ptr(), mpreal::get_default_prec()); + mpfr_set_ui(mpfr_ptr(), 0, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const mpreal& u) { - mpfr_init2(mp,mpfr_get_prec(u.mp)); - mpfr_set(mp,u.mp,mpreal::get_default_rnd()); + mpfr_init2(mpfr_ptr(),mpfr_get_prec(u.mpfr_srcptr())); + mpfr_set (mpfr_ptr(),u.mpfr_srcptr(),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } -inline mpreal::mpreal(const mpfr_t u) +#ifdef MPREAL_HAVE_MOVE_SUPPORT +inline mpreal::mpreal(mpreal&& other) { - mpfr_init2(mp,mpfr_get_prec(u)); - mpfr_set(mp,u,mpreal::get_default_rnd()); + mpfr_set_uninitialized(mpfr_ptr()); // make sure "other" holds no pinter to actual data + mpfr_swap(mpfr_ptr(), other.mpfr_ptr()); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal& mpreal::operator=(mpreal&& other) +{ + mpfr_swap(mpfr_ptr(), other.mpfr_ptr()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} +#endif + +inline mpreal::mpreal(const mpfr_t u, bool shared) +{ + if(shared) + { + std::memcpy(mpfr_ptr(), u, sizeof(mpfr_t)); + } + else + { + mpfr_init2(mpfr_ptr(), mpfr_get_prec(u)); + mpfr_set (mpfr_ptr(), u, mpreal::get_default_rnd()); + } MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const mpf_t u) { - mpfr_init2(mp,(mp_prec_t) mpf_get_prec(u)); // (gmp: mp_bitcnt_t) unsigned long -> long (mpfr: mp_prec_t) - mpfr_set_f(mp,u,mpreal::get_default_rnd()); + mpfr_init2(mpfr_ptr(),(mp_prec_t) mpf_get_prec(u)); // (gmp: mp_bitcnt_t) unsigned long -> long (mpfr: mp_prec_t) + mpfr_set_f(mpfr_ptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const mpz_t u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_z(mp,u,mode); + mpfr_init2(mpfr_ptr(), prec); + mpfr_set_z(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const mpq_t u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_q(mp,u,mode); + mpfr_init2(mpfr_ptr(), prec); + mpfr_set_q(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const double u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp, prec); + mpfr_init2(mpfr_ptr(), prec); #if (MPREAL_DOUBLE_BITS_OVERFLOW > -1) - if(fits_in_bits(u, MPREAL_DOUBLE_BITS_OVERFLOW)) - { - mpfr_set_d(mp, u, mode); - }else - throw conversion_overflow(); + if(fits_in_bits(u, MPREAL_DOUBLE_BITS_OVERFLOW)) + { + mpfr_set_d(mpfr_ptr(), u, mode); + }else + throw conversion_overflow(); #else - mpfr_set_d(mp, u, mode); + mpfr_set_d(mpfr_ptr(), u, mode); #endif MPREAL_MSVC_DEBUGVIEW_CODE; @@ -616,40 +701,40 @@ inline mpreal::mpreal(const double u, mp_prec_t prec, mp_rnd_t mode) inline mpreal::mpreal(const long double u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_ld(mp,u,mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ld(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const unsigned long int u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_ui(mp,u,mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ui(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const unsigned int u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_ui(mp,u,mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ui(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const long int u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_si(mp,u,mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_si(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const int u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_si(mp,u,mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_si(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } @@ -657,16 +742,16 @@ inline mpreal::mpreal(const int u, mp_prec_t prec, mp_rnd_t mode) #if defined (MPREAL_HAVE_INT64_SUPPORT) inline mpreal::mpreal(const uint64_t u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_uj(mp, u, mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_uj(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const int64_t u, mp_prec_t prec, mp_rnd_t mode) { - mpfr_init2(mp,prec); - mpfr_set_sj(mp, u, mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_sj(mpfr_ptr(), u, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } @@ -674,23 +759,31 @@ inline mpreal::mpreal(const int64_t u, mp_prec_t prec, mp_rnd_t mode) inline mpreal::mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode) { - mpfr_init2(mp, prec); - mpfr_set_str(mp, s, base, mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_str(mpfr_ptr(), s, base, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mpreal::mpreal(const std::string& s, mp_prec_t prec, int base, mp_rnd_t mode) { - mpfr_init2(mp, prec); - mpfr_set_str(mp, s.c_str(), base, mode); + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_str(mpfr_ptr(), s.c_str(), base, mode); MPREAL_MSVC_DEBUGVIEW_CODE; } +inline void mpreal::clear(::mpfr_ptr x) +{ +#ifdef MPREAL_HAVE_MOVE_SUPPORT + if(mpfr_is_initialized(x)) +#endif + mpfr_clear(x); +} + inline mpreal::~mpreal() { - mpfr_clear(mp); + clear(mpfr_ptr()); } // internal namespace needed for template magic @@ -761,6 +854,9 @@ const mpreal sqrt(const int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); const mpreal sqrt(const long double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); const mpreal sqrt(const double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +// abs +inline const mpreal abs(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()); + ////////////////////////////////////////////////////////////////////////// // pow const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); @@ -813,6 +909,11 @@ const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode = mprea const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + ////////////////////////////////////////////////////////////////////////// // Estimate machine epsilon for the given precision // Returns smallest eps such that 1.0 + eps != 1.0 @@ -860,15 +961,15 @@ inline mpreal& mpreal::operator=(const mpreal& v) { if (this != &v) { - mp_prec_t tp = mpfr_get_prec(mp); - mp_prec_t vp = mpfr_get_prec(v.mp); + mp_prec_t tp = mpfr_get_prec( mpfr_srcptr()); + mp_prec_t vp = mpfr_get_prec(v.mpfr_srcptr()); - if(tp != vp){ - mpfr_clear(mp); - mpfr_init2(mp, vp); - } + if(tp != vp){ + clear(mpfr_ptr()); + mpfr_init2(mpfr_ptr(), vp); + } - mpfr_set(mp, v.mp, mpreal::get_default_rnd()); + mpfr_set(mpfr_ptr(), v.mpfr_srcptr(), mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } @@ -877,7 +978,7 @@ inline mpreal& mpreal::operator=(const mpreal& v) inline mpreal& mpreal::operator=(const mpf_t v) { - mpfr_set_f(mp, v, mpreal::get_default_rnd()); + mpfr_set_f(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -885,7 +986,7 @@ inline mpreal& mpreal::operator=(const mpf_t v) inline mpreal& mpreal::operator=(const mpz_t v) { - mpfr_set_z(mp, v, mpreal::get_default_rnd()); + mpfr_set_z(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -893,7 +994,7 @@ inline mpreal& mpreal::operator=(const mpz_t v) inline mpreal& mpreal::operator=(const mpq_t v) { - mpfr_set_q(mp, v, mpreal::get_default_rnd()); + mpfr_set_q(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -901,7 +1002,7 @@ inline mpreal& mpreal::operator=(const mpq_t v) inline mpreal& mpreal::operator=(const long double v) { - mpfr_set_ld(mp, v, mpreal::get_default_rnd()); + mpfr_set_ld(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -910,22 +1011,22 @@ inline mpreal& mpreal::operator=(const long double v) inline mpreal& mpreal::operator=(const double v) { #if (MPREAL_DOUBLE_BITS_OVERFLOW > -1) - if(fits_in_bits(v, MPREAL_DOUBLE_BITS_OVERFLOW)) - { - mpfr_set_d(mp,v,mpreal::get_default_rnd()); - }else - throw conversion_overflow(); + if(fits_in_bits(v, MPREAL_DOUBLE_BITS_OVERFLOW)) + { + mpfr_set_d(mpfr_ptr(),v,mpreal::get_default_rnd()); + }else + throw conversion_overflow(); #else - mpfr_set_d(mp,v,mpreal::get_default_rnd()); + mpfr_set_d(mpfr_ptr(),v,mpreal::get_default_rnd()); #endif - MPREAL_MSVC_DEBUGVIEW_CODE; + MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator=(const unsigned long int v) { - mpfr_set_ui(mp, v, mpreal::get_default_rnd()); + mpfr_set_ui(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -933,7 +1034,7 @@ inline mpreal& mpreal::operator=(const unsigned long int v) inline mpreal& mpreal::operator=(const unsigned int v) { - mpfr_set_ui(mp, v, mpreal::get_default_rnd()); + mpfr_set_ui(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -941,7 +1042,7 @@ inline mpreal& mpreal::operator=(const unsigned int v) inline mpreal& mpreal::operator=(const long int v) { - mpfr_set_si(mp, v, mpreal::get_default_rnd()); + mpfr_set_si(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -949,7 +1050,7 @@ inline mpreal& mpreal::operator=(const long int v) inline mpreal& mpreal::operator=(const int v) { - mpfr_set_si(mp, v, mpreal::get_default_rnd()); + mpfr_set_si(mpfr_ptr(), v, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; @@ -966,15 +1067,15 @@ inline mpreal& mpreal::operator=(const char* s) mpfr_t t; - mpfr_init2(t, mpfr_get_prec(mp)); + mpfr_init2(t, mpfr_get_prec(mpfr_srcptr())); if(0 == mpfr_set_str(t, s, 10, mpreal::get_default_rnd())) { - mpfr_set(mp, t, mpreal::get_default_rnd()); + mpfr_set(mpfr_ptr(), t, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } - mpfr_clear(t); + clear(t); return *this; } @@ -989,15 +1090,15 @@ inline mpreal& mpreal::operator=(const std::string& s) mpfr_t t; - mpfr_init2(t, mpfr_get_prec(mp)); + mpfr_init2(t, mpfr_get_prec(mpfr_srcptr())); if(0 == mpfr_set_str(t, s.c_str(), 10, mpreal::get_default_rnd())) { - mpfr_set(mp, t, mpreal::get_default_rnd()); + mpfr_set(mpfr_ptr(), t, mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; } - mpfr_clear(t); + clear(t); return *this; } @@ -1006,7 +1107,7 @@ inline mpreal& mpreal::operator=(const std::string& s) // + Addition inline mpreal& mpreal::operator+=(const mpreal& v) { - mpfr_add(mp,mp,v.mp,mpreal::get_default_rnd()); + mpfr_add(mpfr_ptr(), mpfr_srcptr(), v.mpfr_srcptr(), mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1020,14 +1121,14 @@ inline mpreal& mpreal::operator+=(const mpf_t u) inline mpreal& mpreal::operator+=(const mpz_t u) { - mpfr_add_z(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_z(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator+=(const mpq_t u) { - mpfr_add_q(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_q(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1042,7 +1143,7 @@ inline mpreal& mpreal::operator+= (const long double u) inline mpreal& mpreal::operator+= (const double u) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - mpfr_add_d(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_d(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); #else *this += mpreal(u); #endif @@ -1053,28 +1154,28 @@ inline mpreal& mpreal::operator+= (const double u) inline mpreal& mpreal::operator+=(const unsigned long int u) { - mpfr_add_ui(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator+=(const unsigned int u) { - mpfr_add_ui(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator+=(const long int u) { - mpfr_add_si(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator+=(const int u) { - mpfr_add_si(mp,mp,u,mpreal::get_default_rnd()); + mpfr_add_si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1094,9 +1195,9 @@ inline const mpreal mpreal::operator+()const { return mpreal(*this); } inline const mpreal operator+(const mpreal& a, const mpreal& b) { - mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); - mpfr_add(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); - return c; + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_add(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; } inline mpreal& mpreal::operator++() @@ -1127,21 +1228,21 @@ inline const mpreal mpreal::operator-- (int) // - Subtraction inline mpreal& mpreal::operator-=(const mpreal& v) { - mpfr_sub(mp,mp,v.mp,mpreal::get_default_rnd()); + mpfr_sub(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator-=(const mpz_t v) { - mpfr_sub_z(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator-=(const mpq_t v) { - mpfr_sub_q(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1156,7 +1257,7 @@ inline mpreal& mpreal::operator-=(const long double v) inline mpreal& mpreal::operator-=(const double v) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - mpfr_sub_d(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); #else *this -= mpreal(v); #endif @@ -1167,28 +1268,28 @@ inline mpreal& mpreal::operator-=(const double v) inline mpreal& mpreal::operator-=(const unsigned long int v) { - mpfr_sub_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator-=(const unsigned int v) { - mpfr_sub_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator-=(const long int v) { - mpfr_sub_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator-=(const int v) { - mpfr_sub_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_sub_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1196,15 +1297,15 @@ inline mpreal& mpreal::operator-=(const int v) inline const mpreal mpreal::operator-()const { mpreal u(*this); - mpfr_neg(u.mp,u.mp,mpreal::get_default_rnd()); + mpfr_neg(u.mpfr_ptr(),u.mpfr_srcptr(),mpreal::get_default_rnd()); return u; } inline const mpreal operator-(const mpreal& a, const mpreal& b) { - mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); - mpfr_sub(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); - return c; + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_sub(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; } inline const mpreal operator-(const double b, const mpreal& a) @@ -1252,21 +1353,21 @@ inline const mpreal operator-(const int b, const mpreal& a) // * Multiplication inline mpreal& mpreal::operator*= (const mpreal& v) { - mpfr_mul(mp,mp,v.mp,mpreal::get_default_rnd()); + mpfr_mul(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator*=(const mpz_t v) { - mpfr_mul_z(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator*=(const mpq_t v) { - mpfr_mul_q(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1281,7 +1382,7 @@ inline mpreal& mpreal::operator*=(const long double v) inline mpreal& mpreal::operator*=(const double v) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - mpfr_mul_d(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); #else *this *= mpreal(v); #endif @@ -1291,58 +1392,58 @@ inline mpreal& mpreal::operator*=(const double v) inline mpreal& mpreal::operator*=(const unsigned long int v) { - mpfr_mul_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator*=(const unsigned int v) { - mpfr_mul_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator*=(const long int v) { - mpfr_mul_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator*=(const int v) { - mpfr_mul_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_mul_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline const mpreal operator*(const mpreal& a, const mpreal& b) { - mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); - mpfr_mul(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); - return c; + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_mul(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; } ////////////////////////////////////////////////////////////////////////// // / Division inline mpreal& mpreal::operator/=(const mpreal& v) { - mpfr_div(mp,mp,v.mp,mpreal::get_default_rnd()); + mpfr_div(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator/=(const mpz_t v) { - mpfr_div_z(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator/=(const mpq_t v) { - mpfr_div_q(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1357,7 +1458,7 @@ inline mpreal& mpreal::operator/=(const long double v) inline mpreal& mpreal::operator/=(const double v) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - mpfr_div_d(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); #else *this /= mpreal(v); #endif @@ -1367,72 +1468,72 @@ inline mpreal& mpreal::operator/=(const double v) inline mpreal& mpreal::operator/=(const unsigned long int v) { - mpfr_div_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator/=(const unsigned int v) { - mpfr_div_ui(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator/=(const long int v) { - mpfr_div_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator/=(const int v) { - mpfr_div_si(mp,mp,v,mpreal::get_default_rnd()); + mpfr_div_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline const mpreal operator/(const mpreal& a, const mpreal& b) { - mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); - mpfr_div(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); - return c; + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_srcptr()), mpfr_get_prec(b.mpfr_srcptr()))); + mpfr_div(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; } inline const mpreal operator/(const unsigned long int b, const mpreal& a) { - mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); return x; } inline const mpreal operator/(const unsigned int b, const mpreal& a) { - mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); return x; } inline const mpreal operator/(const long int b, const mpreal& a) { - mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); - mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd()); + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); return x; } inline const mpreal operator/(const int b, const mpreal& a) { - mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); - mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd()); + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); return x; } inline const mpreal operator/(const double b, const mpreal& a) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); - mpfr_d_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd()); + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_d_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); return x; #else mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); @@ -1445,56 +1546,56 @@ inline const mpreal operator/(const double b, const mpreal& a) // Shifts operators - Multiplication/Division by power of 2 inline mpreal& mpreal::operator<<=(const unsigned long int u) { - mpfr_mul_2ui(mp,mp,u,mpreal::get_default_rnd()); + mpfr_mul_2ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator<<=(const unsigned int u) { - mpfr_mul_2ui(mp,mp,static_cast(u),mpreal::get_default_rnd()); + mpfr_mul_2ui(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator<<=(const long int u) { - mpfr_mul_2si(mp,mp,u,mpreal::get_default_rnd()); + mpfr_mul_2si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator<<=(const int u) { - mpfr_mul_2si(mp,mp,static_cast(u),mpreal::get_default_rnd()); + mpfr_mul_2si(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator>>=(const unsigned long int u) { - mpfr_div_2ui(mp,mp,u,mpreal::get_default_rnd()); + mpfr_div_2ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator>>=(const unsigned int u) { - mpfr_div_2ui(mp,mp,static_cast(u),mpreal::get_default_rnd()); + mpfr_div_2ui(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator>>=(const long int u) { - mpfr_div_2si(mp,mp,u,mpreal::get_default_rnd()); + mpfr_div_2si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::operator>>=(const int u) { - mpfr_div_2si(mp,mp,static_cast(u),mpreal::get_default_rnd()); + mpfr_div_2si(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1543,7 +1644,7 @@ inline const mpreal operator>>(const mpreal& v, const int k) inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) { mpreal x(v); - mpfr_mul_2ui(x.mp,v.mp,k,rnd_mode); + mpfr_mul_2ui(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); return x; } @@ -1551,61 +1652,63 @@ inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_m inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) { mpreal x(v); - mpfr_mul_2si(x.mp,v.mp,k,rnd_mode); + mpfr_mul_2si(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); return x; } inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) { mpreal x(v); - mpfr_div_2ui(x.mp,v.mp,k,rnd_mode); + mpfr_div_2ui(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); return x; } inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) { mpreal x(v); - mpfr_div_2si(x.mp,v.mp,k,rnd_mode); + mpfr_div_2si(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); return x; } ////////////////////////////////////////////////////////////////////////// //Boolean operators -inline bool operator > (const mpreal& a, const mpreal& b){ return (mpfr_greater_p(a.mp,b.mp) !=0); } -inline bool operator >= (const mpreal& a, const mpreal& b){ return (mpfr_greaterequal_p(a.mp,b.mp) !=0); } -inline bool operator < (const mpreal& a, const mpreal& b){ return (mpfr_less_p(a.mp,b.mp) !=0); } -inline bool operator <= (const mpreal& a, const mpreal& b){ return (mpfr_lessequal_p(a.mp,b.mp) !=0); } -inline bool operator == (const mpreal& a, const mpreal& b){ return (mpfr_equal_p(a.mp,b.mp) !=0); } -inline bool operator != (const mpreal& a, const mpreal& b){ return (mpfr_lessgreater_p(a.mp,b.mp) !=0); } +inline bool operator > (const mpreal& a, const mpreal& b){ return (mpfr_greater_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } +inline bool operator >= (const mpreal& a, const mpreal& b){ return (mpfr_greaterequal_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } +inline bool operator < (const mpreal& a, const mpreal& b){ return (mpfr_less_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } +inline bool operator <= (const mpreal& a, const mpreal& b){ return (mpfr_lessequal_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } +inline bool operator == (const mpreal& a, const mpreal& b){ return (mpfr_equal_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } +inline bool operator != (const mpreal& a, const mpreal& b){ return (mpfr_lessgreater_p (a.mpfr_srcptr(),b.mpfr_srcptr()) !=0 ); } -inline bool operator == (const mpreal& a, const unsigned long int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); } -inline bool operator == (const mpreal& a, const unsigned int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); } -inline bool operator == (const mpreal& a, const long int b ){ return (mpfr_cmp_si(a.mp,b) == 0); } -inline bool operator == (const mpreal& a, const int b ){ return (mpfr_cmp_si(a.mp,b) == 0); } -inline bool operator == (const mpreal& a, const long double b ){ return (mpfr_cmp_ld(a.mp,b) == 0); } -inline bool operator == (const mpreal& a, const double b ){ return (mpfr_cmp_d(a.mp,b) == 0); } +inline bool operator == (const mpreal& a, const unsigned long int b ){ return (mpfr_cmp_ui(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const unsigned int b ){ return (mpfr_cmp_ui(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const long int b ){ return (mpfr_cmp_si(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const int b ){ return (mpfr_cmp_si(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const long double b ){ return (mpfr_cmp_ld(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const double b ){ return (mpfr_cmp_d (a.mpfr_srcptr(),b) == 0 ); } -inline bool isnan (const mpreal& v){ return (mpfr_nan_p(v.mp) != 0); } -inline bool isinf (const mpreal& v){ return (mpfr_inf_p(v.mp) != 0); } -inline bool isfinite (const mpreal& v){ return (mpfr_number_p(v.mp) != 0); } -inline bool iszero (const mpreal& v){ return (mpfr_zero_p(v.mp) != 0); } -inline bool isint (const mpreal& v){ return (mpfr_integer_p(v.mp) != 0); } +inline bool isnan (const mpreal& op){ return (mpfr_nan_p (op.mpfr_srcptr()) != 0 ); } +inline bool isinf (const mpreal& op){ return (mpfr_inf_p (op.mpfr_srcptr()) != 0 ); } +inline bool isfinite (const mpreal& op){ return (mpfr_number_p (op.mpfr_srcptr()) != 0 ); } +inline bool iszero (const mpreal& op){ return (mpfr_zero_p (op.mpfr_srcptr()) != 0 ); } +inline bool isint (const mpreal& op){ return (mpfr_integer_p(op.mpfr_srcptr()) != 0 ); } #if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) -inline bool isregular(const mpreal& v){ return (mpfr_regular_p(v.mp));} +inline bool isregular(const mpreal& op){ return (mpfr_regular_p(op.mpfr_srcptr()));} #endif ////////////////////////////////////////////////////////////////////////// // Type Converters -inline long mpreal::toLong (mp_rnd_t mode) const { return mpfr_get_si(mp, mode); } -inline unsigned long mpreal::toULong (mp_rnd_t mode) const { return mpfr_get_ui(mp, mode); } -inline double mpreal::toDouble (mp_rnd_t mode) const { return mpfr_get_d (mp, mode); } -inline long double mpreal::toLDouble(mp_rnd_t mode) const { return mpfr_get_ld(mp, mode); } +inline bool mpreal::toBool (mp_rnd_t /*mode*/) const { return mpfr_zero_p (mpfr_srcptr()) == 0; } +inline long mpreal::toLong (mp_rnd_t mode) const { return mpfr_get_si (mpfr_srcptr(), mode); } +inline unsigned long mpreal::toULong (mp_rnd_t mode) const { return mpfr_get_ui (mpfr_srcptr(), mode); } +inline float mpreal::toFloat (mp_rnd_t mode) const { return mpfr_get_flt(mpfr_srcptr(), mode); } +inline double mpreal::toDouble (mp_rnd_t mode) const { return mpfr_get_d (mpfr_srcptr(), mode); } +inline long double mpreal::toLDouble(mp_rnd_t mode) const { return mpfr_get_ld (mpfr_srcptr(), mode); } #if defined (MPREAL_HAVE_INT64_SUPPORT) -inline int64_t mpreal::toInt64 (mp_rnd_t mode) const{ return mpfr_get_sj(mp, mode); } -inline uint64_t mpreal::toUInt64(mp_rnd_t mode) const{ return mpfr_get_uj(mp, mode); } +inline int64_t mpreal::toInt64 (mp_rnd_t mode) const{ return mpfr_get_sj(mpfr_srcptr(), mode); } +inline uint64_t mpreal::toUInt64(mp_rnd_t mode) const{ return mpfr_get_uj(mpfr_srcptr(), mode); } #endif inline ::mpfr_ptr mpreal::mpfr_ptr() { return mp; } @@ -1629,7 +1732,7 @@ inline std::string mpreal::toString(const std::string& format) const if( !format.empty() ) { - if(!(mpfr_asprintf(&s,format.c_str(),mp) < 0)) + if(!(mpfr_asprintf(&s, format.c_str(), mpfr_srcptr()) < 0)) { out = std::string(s); @@ -1644,20 +1747,19 @@ inline std::string mpreal::toString(const std::string& format) const inline std::string mpreal::toString(int n, int b, mp_rnd_t mode) const { + // TODO: Add extended format specification (f, e, rounding mode) as it done in output operator (void)b; (void)mode; #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) - // Use MPFR native function for output - char format[128]; - int digits; + std::ostringstream format; - digits = n > 0 ? n : bits2digits(mpfr_get_prec(mp)); + int digits = (n >= 0) ? n : bits2digits(mpfr_get_prec(mpfr_srcptr())); + + format << "%." << digits << "RNg"; - sprintf(format,"%%.%dRNg",digits); // Default format - - return toString(std::string(format)); + return toString(format.str()); #else @@ -1675,8 +1777,8 @@ inline std::string mpreal::toString(int n, int b, mp_rnd_t mode) const if(mpfr_zero_p(mp)) return "0"; if(mpfr_nan_p(mp)) return "NaN"; - s = mpfr_get_str(NULL,&exp,b,0,mp,mode); - ns = mpfr_get_str(NULL,&exp,b,n,mp,mode); + s = mpfr_get_str(NULL, &exp, b, 0, mp, mode); + ns = mpfr_get_str(NULL, &exp, b, (std::max)(0,n), mp, mode); if(s!=NULL && ns!=NULL) { @@ -1761,17 +1863,43 @@ inline std::string mpreal::toString(int n, int b, mp_rnd_t mode) const ////////////////////////////////////////////////////////////////////////// // I/O +inline std::ostream& mpreal::output(std::ostream& os) const +{ + std::ostringstream format; + const std::ios::fmtflags flags = os.flags(); + + format << ((flags & std::ios::showpos) ? "%+" : "%"); + if (os.precision() >= 0) + format << '.' << os.precision() << "R*" + << ((flags & std::ios::floatfield) == std::ios::fixed ? 'f' : + (flags & std::ios::floatfield) == std::ios::scientific ? 'e' : + 'g'); + else + format << "R*e"; + + char *s = NULL; + if(!(mpfr_asprintf(&s, format.str().c_str(), + mpfr::mpreal::get_default_rnd(), + mpfr_srcptr()) + < 0)) + { + os << std::string(s); + mpfr_free_str(s); + } + return os; +} + inline std::ostream& operator<<(std::ostream& os, const mpreal& v) { - return os<(os.precision())); + return v.output(os); } inline std::istream& operator>>(std::istream &is, mpreal& v) { - // ToDo, use cout::hexfloat and other flags to setup base + // TODO: use cout::hexfloat and other flags to setup base std::string tmp; is >> tmp; - mpfr_set_str(v.mp, tmp.c_str(), 10, mpreal::get_default_rnd()); + mpfr_set_str(v.mpfr_ptr(), tmp.c_str(), 10, mpreal::get_default_rnd()); return is; } @@ -1784,53 +1912,53 @@ inline mp_prec_t digits2bits(int d) { const double LOG2_10 = 3.3219280948873624; - return (mp_prec_t) std::ceil( d * LOG2_10 ); + return mp_prec_t(std::ceil( d * LOG2_10 )); } inline int bits2digits(mp_prec_t b) { const double LOG10_2 = 0.30102999566398119; - return (int) std::floor( b * LOG10_2 ); + return int(std::floor( b * LOG10_2 )); } ////////////////////////////////////////////////////////////////////////// // Set/Get number properties -inline int sgn(const mpreal& v) +inline int sgn(const mpreal& op) { - int r = mpfr_signbit(v.mp); - return (r>0?-1:1); + int r = mpfr_signbit(op.mpfr_srcptr()); + return (r > 0? -1 : 1); } inline mpreal& mpreal::setSign(int sign, mp_rnd_t RoundingMode) { - mpfr_setsign(mp,mp,(sign < 0 ? 1 : 0),RoundingMode); + mpfr_setsign(mpfr_ptr(), mpfr_srcptr(), (sign < 0 ? 1 : 0), RoundingMode); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline int mpreal::getPrecision() const { - return mpfr_get_prec(mp); + return int(mpfr_get_prec(mpfr_srcptr())); } inline mpreal& mpreal::setPrecision(int Precision, mp_rnd_t RoundingMode) { - mpfr_prec_round(mp, Precision, RoundingMode); + mpfr_prec_round(mpfr_ptr(), Precision, RoundingMode); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::setInf(int sign) { - mpfr_set_inf(mp,sign); + mpfr_set_inf(mpfr_ptr(), sign); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } inline mpreal& mpreal::setNan() { - mpfr_set_nan(mp); + mpfr_set_nan(mpfr_ptr()); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } @@ -1839,9 +1967,9 @@ inline mpreal& mpreal::setZero(int sign) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) - mpfr_set_zero(mp, sign); + mpfr_set_zero(mpfr_ptr(), sign); #else - mpfr_set_si(mp, 0, (mpfr_get_default_rounding_mode)()); + mpfr_set_si(mpfr_ptr(), 0, (mpfr_get_default_rounding_mode)()); setSign(sign); #endif @@ -1851,23 +1979,23 @@ inline mpreal& mpreal::setZero(int sign) inline mp_prec_t mpreal::get_prec() const { - return mpfr_get_prec(mp); + return mpfr_get_prec(mpfr_srcptr()); } inline void mpreal::set_prec(mp_prec_t prec, mp_rnd_t rnd_mode) { - mpfr_prec_round(mp,prec,rnd_mode); + mpfr_prec_round(mpfr_ptr(),prec,rnd_mode); MPREAL_MSVC_DEBUGVIEW_CODE; } inline mp_exp_t mpreal::get_exp () { - return mpfr_get_exp(mp); + return mpfr_get_exp(mpfr_srcptr()); } inline int mpreal::set_exp (mp_exp_t e) { - int x = mpfr_set_exp(mp, e); + int x = mpfr_set_exp(mpfr_ptr(), e); MPREAL_MSVC_DEBUGVIEW_CODE; return x; } @@ -1885,7 +2013,7 @@ inline const mpreal ldexp(const mpreal& v, mp_exp_t exp) mpreal x(v); // rounding is not important since we just increasing the exponent - mpfr_mul_2si(x.mp,x.mp,exp,mpreal::get_default_rnd()); + mpfr_mul_2si(x.mpfr_ptr(), x.mpfr_srcptr(), exp, mpreal::get_default_rnd()); return x; } @@ -1900,9 +2028,9 @@ inline mpreal machine_epsilon(const mpreal& x) /* the smallest eps such that x + eps != x */ if( x < 0) { - return nextabove(-x)+x; + return nextabove(-x) + x; }else{ - return nextabove(x)-x; + return nextabove( x) - x; } } @@ -1922,37 +2050,37 @@ inline mpreal maxval(mp_prec_t prec) inline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps) { - return abs(a - b) <= machine_epsilon((max)(abs(a), abs(b))) * maxUlps; + return abs(a - b) <= machine_epsilon((max)(abs(a), abs(b))) * maxUlps; } inline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps) { - return abs(a - b) <= (min)(abs(a), abs(b)) * eps; + return abs(a - b) <= eps; } inline bool isEqualFuzzy(const mpreal& a, const mpreal& b) { - return isEqualFuzzy(a, b, machine_epsilon((min)(abs(a), abs(b)))); + return isEqualFuzzy(a, b, machine_epsilon((max)(1, (min)(abs(a), abs(b))))); } inline const mpreal modf(const mpreal& v, mpreal& n) { - mpreal frac(v); + mpreal f(v); // rounding is not important since we are using the same number - mpfr_frac(frac.mp,frac.mp,mpreal::get_default_rnd()); - mpfr_trunc(n.mp,v.mp); - return frac; + mpfr_frac (f.mpfr_ptr(),f.mpfr_srcptr(),mpreal::get_default_rnd()); + mpfr_trunc(n.mpfr_ptr(),v.mpfr_srcptr()); + return f; } inline int mpreal::check_range (int t, mp_rnd_t rnd_mode) { - return mpfr_check_range(mp,t,rnd_mode); + return mpfr_check_range(mpfr_ptr(),t,rnd_mode); } inline int mpreal::subnormalize (int t,mp_rnd_t rnd_mode) { - int r = mpfr_subnormalize(mp,t,rnd_mode); + int r = mpfr_subnormalize(mpfr_ptr(),t,rnd_mode); MPREAL_MSVC_DEBUGVIEW_CODE; return r; } @@ -2005,8 +2133,11 @@ inline mp_exp_t mpreal::get_emax_max (void) mpfr_##f(y.mpfr_ptr(), x.mpfr_srcptr(), r); \ return y; -inline const mpreal sqr (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sqr ); } -inline const mpreal sqrt (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sqrt); } +inline const mpreal sqr (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ MPREAL_UNARY_MATH_FUNCTION_BODY(sqr ); } + +inline const mpreal sqrt (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ MPREAL_UNARY_MATH_FUNCTION_BODY(sqrt); } inline const mpreal sqrt(const unsigned long int x, mp_rnd_t r) { @@ -2032,14 +2163,14 @@ inline const mpreal sqrt(const int v, mp_rnd_t rnd_mode) else return mpreal().setNan(); // NaN } -inline const mpreal root(const mpreal& x, unsigned long int k, mp_rnd_t r) +inline const mpreal root(const mpreal& x, unsigned long int k, mp_rnd_t r = mpreal::get_default_rnd()) { mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); mpfr_root(y.mpfr_ptr(), x.mpfr_srcptr(), k, r); return y; } -inline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t r) +inline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t r = mpreal::get_default_rnd()) { mpreal y(0, mpfr_get_prec(a.mpfr_srcptr())); mpfr_dim(y.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), r); @@ -2048,161 +2179,130 @@ inline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t r) inline int cmpabs(const mpreal& a,const mpreal& b) { - return mpfr_cmpabs(a.mp,b.mp); + return mpfr_cmpabs(a.mpfr_ptr(), b.mpfr_srcptr()); } -inline int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode) +inline int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { - return mpfr_sin_cos(s.mp,c.mp,v.mp,rnd_mode); + return mpfr_sin_cos(s.mpfr_ptr(), c.mpfr_ptr(), v.mpfr_srcptr(), rnd_mode); } inline const mpreal sqrt (const long double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); } inline const mpreal sqrt (const double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); } -inline const mpreal cbrt (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cbrt ); } -inline const mpreal fabs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } -inline const mpreal abs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } -inline const mpreal log (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log ); } -inline const mpreal log2 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log2 ); } -inline const mpreal log10 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log10); } -inline const mpreal exp (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp ); } -inline const mpreal exp2 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp2 ); } -inline const mpreal exp10 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp10); } -inline const mpreal cos (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cos ); } -inline const mpreal sin (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sin ); } -inline const mpreal tan (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(tan ); } -inline const mpreal sec (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sec ); } -inline const mpreal csc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(csc ); } -inline const mpreal cot (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cot ); } -inline const mpreal acos (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(acos); } -inline const mpreal asin (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(asin); } -inline const mpreal atan (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(atan); } +inline const mpreal cbrt (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cbrt ); } +inline const mpreal fabs (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } +inline const mpreal abs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } +inline const mpreal log (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log ); } +inline const mpreal log2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log2 ); } +inline const mpreal log10 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log10); } +inline const mpreal exp (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp ); } +inline const mpreal exp2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp2 ); } +inline const mpreal exp10 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp10); } +inline const mpreal cos (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cos ); } +inline const mpreal sin (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sin ); } +inline const mpreal tan (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(tan ); } +inline const mpreal sec (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sec ); } +inline const mpreal csc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(csc ); } +inline const mpreal cot (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cot ); } +inline const mpreal acos (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(acos ); } +inline const mpreal asin (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(asin ); } +inline const mpreal atan (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(atan ); } -inline const mpreal acot (const mpreal& v, mp_rnd_t r) { return atan (1/v, r); } -inline const mpreal asec (const mpreal& v, mp_rnd_t r) { return acos (1/v, r); } -inline const mpreal acsc (const mpreal& v, mp_rnd_t r) { return asin (1/v, r); } -inline const mpreal acoth (const mpreal& v, mp_rnd_t r) { return atanh(1/v, r); } -inline const mpreal asech (const mpreal& v, mp_rnd_t r) { return acosh(1/v, r); } -inline const mpreal acsch (const mpreal& v, mp_rnd_t r) { return asinh(1/v, r); } +inline const mpreal acot (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return atan (1/v, r); } +inline const mpreal asec (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return acos (1/v, r); } +inline const mpreal acsc (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return asin (1/v, r); } +inline const mpreal acoth (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return atanh(1/v, r); } +inline const mpreal asech (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return acosh(1/v, r); } +inline const mpreal acsch (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return asinh(1/v, r); } -inline const mpreal cosh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cosh ); } -inline const mpreal sinh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sinh ); } -inline const mpreal tanh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(tanh ); } -inline const mpreal sech (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sech ); } -inline const mpreal csch (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(csch ); } -inline const mpreal coth (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(coth ); } -inline const mpreal acosh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(acosh); } -inline const mpreal asinh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(asinh); } -inline const mpreal atanh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(atanh); } +inline const mpreal cosh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cosh ); } +inline const mpreal sinh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sinh ); } +inline const mpreal tanh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(tanh ); } +inline const mpreal sech (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sech ); } +inline const mpreal csch (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(csch ); } +inline const mpreal coth (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(coth ); } +inline const mpreal acosh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(acosh); } +inline const mpreal asinh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(asinh); } +inline const mpreal atanh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(atanh); } -inline const mpreal log1p (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log1p ); } -inline const mpreal expm1 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(expm1 ); } -inline const mpreal eint (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(eint ); } -inline const mpreal gamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(gamma ); } -inline const mpreal lngamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(lngamma); } -inline const mpreal zeta (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(zeta ); } -inline const mpreal erf (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(erf ); } -inline const mpreal erfc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(erfc ); } -inline const mpreal besselj0(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(j0 ); } -inline const mpreal besselj1(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(j1 ); } -inline const mpreal bessely0(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(y0 ); } -inline const mpreal bessely1(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(y1 ); } +inline const mpreal log1p (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log1p ); } +inline const mpreal expm1 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(expm1 ); } +inline const mpreal eint (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(eint ); } +inline const mpreal gamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(gamma ); } +inline const mpreal lngamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(lngamma); } +inline const mpreal zeta (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(zeta ); } +inline const mpreal erf (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(erf ); } +inline const mpreal erfc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(erfc ); } +inline const mpreal besselj0(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(j0 ); } +inline const mpreal besselj1(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(j1 ); } +inline const mpreal bessely0(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(y0 ); } +inline const mpreal bessely1(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(y1 ); } -inline const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode) +inline const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { - mpreal a; - mp_prec_t yp, xp; - - yp = y.get_prec(); - xp = x.get_prec(); - - a.set_prec(yp>xp?yp:xp); - - mpfr_atan2(a.mp, y.mp, x.mp, rnd_mode); - + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_atan2(a.mpfr_ptr(), y.mpfr_srcptr(), x.mpfr_srcptr(), rnd_mode); return a; } -inline const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { - mpreal a; - mp_prec_t yp, xp; - - yp = y.get_prec(); - xp = x.get_prec(); - - a.set_prec(yp>xp?yp:xp); - - mpfr_hypot(a.mp, x.mp, y.mp, rnd_mode); - + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_hypot(a.mpfr_ptr(), x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); return a; } -inline const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { - mpreal a; - mp_prec_t yp, xp; - - yp = y.get_prec(); - xp = x.get_prec(); - - a.set_prec(yp>xp?yp:xp); - - mpfr_remainder(a.mp, x.mp, y.mp, rnd_mode); - + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_remainder(a.mpfr_ptr(), x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); return a; } -inline const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { - mpreal a; - mp_prec_t yp, xp; - - yp = y.get_prec(); - xp = x.get_prec(); - - a.set_prec(yp>xp?yp:xp); - - mpfr_remquo(a.mp,q, x.mp, y.mp, rnd_mode); - + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_remquo(a.mpfr_ptr(),q, x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); return a; } -inline const mpreal fac_ui (unsigned long int v, mp_prec_t prec, mp_rnd_t rnd_mode) +inline const mpreal fac_ui (unsigned long int v, mp_prec_t prec = mpreal::get_default_prec(), + mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(0, prec); - mpfr_fac_ui(x.mp,v,rnd_mode); + mpfr_fac_ui(x.mpfr_ptr(),v,rnd_mode); return x; } -inline const mpreal lgamma (const mpreal& v, int *signp, mp_rnd_t rnd_mode) +inline const mpreal lgamma (const mpreal& v, int *signp = 0, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(v); int tsignp; - if(signp) mpfr_lgamma(x.mp,signp,v.mp,rnd_mode); - else mpfr_lgamma(x.mp,&tsignp,v.mp,rnd_mode); + if(signp) mpfr_lgamma(x.mpfr_ptr(), signp,v.mpfr_srcptr(),rnd_mode); + else mpfr_lgamma(x.mpfr_ptr(),&tsignp,v.mpfr_srcptr(),rnd_mode); return x; } -inline const mpreal besseljn (long n, const mpreal& x, mp_rnd_t r) +inline const mpreal besseljn (long n, const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { - mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); + mpreal y(0, x.getPrecision()); mpfr_jn(y.mpfr_ptr(), n, x.mpfr_srcptr(), r); return y; } -inline const mpreal besselyn (long n, const mpreal& x, mp_rnd_t r) +inline const mpreal besselyn (long n, const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { - mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); + mpreal y(0, x.getPrecision()); mpfr_yn(y.mpfr_ptr(), n, x.mpfr_srcptr(), r); return y; } -inline const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode) +inline const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal a; mp_prec_t p1, p2, p3; @@ -2217,7 +2317,7 @@ inline const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, m return a; } -inline const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode) +inline const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal a; mp_prec_t p1, p2, p3; @@ -2232,7 +2332,7 @@ inline const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, m return a; } -inline const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode) +inline const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal a; mp_prec_t p1, p2; @@ -2247,7 +2347,7 @@ inline const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode) return a; } -inline const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode) +inline const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x; mpfr_ptr* t; @@ -2264,23 +2364,23 @@ inline const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_m // MPFR 2.4.0 Specifics #if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) -inline int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode) +inline int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { return mpfr_sinh_cosh(s.mp,c.mp,v.mp,rnd_mode); } -inline const mpreal li2 (const mpreal& x, mp_rnd_t r) +inline const mpreal li2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(li2); } -inline const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { /* R = rem(X,Y) if Y != 0, returns X - n * Y where n = trunc(X/Y). */ return fmod(x, y, rnd_mode); } -inline const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { (void)rnd_mode; @@ -2305,7 +2405,7 @@ inline const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) return m; } -inline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) +inline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal a; mp_prec_t yp, xp; @@ -2320,7 +2420,7 @@ inline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) return a; } -inline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode) +inline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(v); mpfr_rec_sqrt(x.mp,v.mp,rnd_mode); @@ -2331,41 +2431,41 @@ inline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode) ////////////////////////////////////////////////////////////////////////// // MPFR 3.0.0 Specifics #if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) -inline const mpreal digamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(digamma); } -inline const mpreal ai (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(ai); } +inline const mpreal digamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(digamma); } +inline const mpreal ai (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(ai); } #endif // MPFR 3.0.0 Specifics ////////////////////////////////////////////////////////////////////////// // Constants -inline const mpreal const_log2 (mp_prec_t p, mp_rnd_t r) +inline const mpreal const_log2 (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) { mpreal x(0, p); mpfr_const_log2(x.mpfr_ptr(), r); return x; } -inline const mpreal const_pi (mp_prec_t p, mp_rnd_t r) +inline const mpreal const_pi (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) { mpreal x(0, p); mpfr_const_pi(x.mpfr_ptr(), r); return x; } -inline const mpreal const_euler (mp_prec_t p, mp_rnd_t r) +inline const mpreal const_euler (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) { mpreal x(0, p); mpfr_const_euler(x.mpfr_ptr(), r); return x; } -inline const mpreal const_catalan (mp_prec_t p, mp_rnd_t r) +inline const mpreal const_catalan (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) { mpreal x(0, p); mpfr_const_catalan(x.mpfr_ptr(), r); return x; } -inline const mpreal const_infinity (int sign, mp_prec_t p, mp_rnd_t /*r*/) +inline const mpreal const_infinity (int sign = 1, mp_prec_t p = mpreal::get_default_prec()) { mpreal x(0, p); mpfr_set_inf(x.mpfr_ptr(), sign); @@ -2402,12 +2502,12 @@ inline const mpreal trunc(const mpreal& v) return x; } -inline const mpreal rint (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint ); } -inline const mpreal rint_ceil (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_ceil ); } -inline const mpreal rint_floor (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_floor); } -inline const mpreal rint_round (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_round); } -inline const mpreal rint_trunc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_trunc); } -inline const mpreal frac (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(frac ); } +inline const mpreal rint (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint ); } +inline const mpreal rint_ceil (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_ceil ); } +inline const mpreal rint_floor (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_floor); } +inline const mpreal rint_round (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_round); } +inline const mpreal rint_trunc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_trunc); } +inline const mpreal frac (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(frac ); } ////////////////////////////////////////////////////////////////////////// // Miscellaneous Functions @@ -2415,14 +2515,14 @@ inline void swap (mpreal& a, mpreal& b) { mpfr_swap(a.mp,b inline const mpreal (max)(const mpreal& x, const mpreal& y){ return (x>y?x:y); } inline const mpreal (min)(const mpreal& x, const mpreal& y){ return (x= MPFR_VERSION_NUM(3,0,0)) +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,1,0)) // use gmp_randinit_default() to init state, gmp_randclear() to clear -inline const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode) +inline const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x; mpfr_urandom(x.mp,state,rnd_mode); return x; } + +inline const mpreal grandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x; + mpfr_grandom(x.mp, NULL, state, rnd_mode); + return x; +} + #endif #if (MPFR_VERSION <= MPFR_VERSION_NUM(2,4,2)) @@ -2480,7 +2588,7 @@ inline const mpreal random2 (mp_size_t size, mp_exp_t exp) // a = random(seed); <- initialization & first random number generation // a = random(); <- next random numbers generation // seed != 0 -inline const mpreal random(unsigned int seed) +inline const mpreal random(unsigned int seed = 0) { #if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) @@ -2504,6 +2612,25 @@ inline const mpreal random(unsigned int seed) } +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) +inline const mpreal grandom(unsigned int seed = 0) +{ + static gmp_randstate_t state; + static bool isFirstTime = true; + + if(isFirstTime) + { + gmp_randinit_default(state); + gmp_randseed_ui(state,0); + isFirstTime = false; + } + + if(seed != 0) gmp_randseed_ui(state,seed); + + return mpfr::grandom(state); +} +#endif + ////////////////////////////////////////////////////////////////////////// // Set/Get global properties inline void mpreal::set_default_prec(mp_prec_t prec) @@ -2523,21 +2650,21 @@ inline bool mpreal::fits_in_bits(double x, int n) return IsInf(x) || (std::modf ( std::ldexp ( std::frexp ( x, &i ), n ), &t ) == 0.0); } -inline const mpreal pow(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode) +inline const mpreal pow(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(a); mpfr_pow(x.mp,x.mp,b.mp,rnd_mode); return x; } -inline const mpreal pow(const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode) +inline const mpreal pow(const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(a); mpfr_pow_z(x.mp,x.mp,b,rnd_mode); return x; } -inline const mpreal pow(const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode) +inline const mpreal pow(const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(a); mpfr_pow_ui(x.mp,x.mp,b,rnd_mode); @@ -2549,7 +2676,7 @@ inline const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode return pow(a,static_cast(b),rnd_mode); } -inline const mpreal pow(const mpreal& a, const long int b, mp_rnd_t rnd_mode) +inline const mpreal pow(const mpreal& a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(a); mpfr_pow_si(x.mp,x.mp,b,rnd_mode); @@ -2571,7 +2698,7 @@ inline const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode) return pow(a,mpreal(b),rnd_mode); } -inline const mpreal pow(const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode) +inline const mpreal pow(const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) { mpreal x(a); mpfr_ui_pow(x.mp,a,b.mp,rnd_mode); @@ -2586,13 +2713,13 @@ inline const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode inline const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode) { if (a>=0) return pow(static_cast(a),b,rnd_mode); - else return pow(mpreal(a),b,rnd_mode); + else return pow(mpreal(a),b,rnd_mode); } inline const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode) { if (a>=0) return pow(static_cast(a),b,rnd_mode); - else return pow(mpreal(a),b,rnd_mode); + else return pow(mpreal(a),b,rnd_mode); } inline const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode) @@ -2621,13 +2748,13 @@ inline const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_ inline const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode) { if(b>0) return pow(a,static_cast(b),rnd_mode); //mpfr_ui_pow_ui - else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow } inline const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode) { if(b>0) return pow(a,static_cast(b),rnd_mode); //mpfr_ui_pow_ui - else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow } inline const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode) @@ -2824,7 +2951,7 @@ inline const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode) // Non-throwing swap C++ idiom: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-throwing_swap namespace std { - // only allowed to extend namespace std with specializations + // we are allowed to extend namespace std with specializations only template <> inline void swap(mpfr::mpreal& x, mpfr::mpreal& y) { @@ -2852,20 +2979,6 @@ namespace std static const bool tinyness_before = true; static const float_denorm_style has_denorm = denorm_absent; - - inline static float_round_style round_style() - { - mp_rnd_t r = mpfr::mpreal::get_default_rnd(); - - switch (r) - { - case MPFR_RNDN: return round_to_nearest; - case MPFR_RNDZ: return round_toward_zero; - case MPFR_RNDU: return round_toward_infinity; - case MPFR_RNDD: return round_toward_neg_infinity; - default: return round_indeterminate; - } - } inline static mpfr::mpreal (min) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::minval(precision); } inline static mpfr::mpreal (max) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::maxval(precision); } @@ -2873,7 +2986,7 @@ namespace std // Returns smallest eps such that 1 + eps != 1 (classic machine epsilon) inline static mpfr::mpreal epsilon(mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::machine_epsilon(precision); } - + // Returns smallest eps such that x + eps != x (relative machine epsilon) inline static mpfr::mpreal epsilon(const mpfr::mpreal& x) { return mpfr::machine_epsilon(x); } @@ -2881,7 +2994,7 @@ namespace std { mp_rnd_t r = mpfr::mpreal::get_default_rnd(); - if(r == MPFR_RNDN) return mpfr::mpreal(0.5, precision); + if(r == GMP_RNDN) return mpfr::mpreal(0.5, precision); else return mpfr::mpreal(1.0, precision); } @@ -2896,10 +3009,30 @@ namespace std MPREAL_PERMISSIVE_EXPR static const int min_exponent10 = (int) (MPFR_EMIN_DEFAULT * 0.3010299956639811); MPREAL_PERMISSIVE_EXPR static const int max_exponent10 = (int) (MPFR_EMAX_DEFAULT * 0.3010299956639811); - // Should be constant according to standard, but 'digits' depends on precision in MPFR +#ifdef MPREAL_HAVE_DYNAMIC_STD_NUMERIC_LIMITS - inline static int digits() { return mpfr::mpreal::get_default_prec(); } - inline static int digits(const mpfr::mpreal& x) { return x.getPrecision(); } + // Following members should be constant according to standard, but they can be variable in MPFR + // So we define them as functions here. + // + // This is preferable way for std::numeric_limits specialization. + // But it is incompatible with standard std::numeric_limits and might not work with other libraries, e.g. boost. + // See below for compatible implementation. + inline static float_round_style round_style() + { + mp_rnd_t r = mpfr::mpreal::get_default_rnd(); + + switch (r) + { + case GMP_RNDN: return round_to_nearest; + case GMP_RNDZ: return round_toward_zero; + case GMP_RNDU: return round_toward_infinity; + case GMP_RNDD: return round_toward_neg_infinity; + default: return round_indeterminate; + } + } + + inline static int digits() { return int(mpfr::mpreal::get_default_prec()); } + inline static int digits(const mpfr::mpreal& x) { return x.getPrecision(); } inline static int digits10(mp_prec_t precision = mpfr::mpreal::get_default_prec()) { @@ -2915,6 +3048,25 @@ namespace std { return digits10(precision); } +#else + // Digits and round_style are NOT constants when it comes to mpreal. + // If possible, please use functions digits() and round_style() defined above. + // + // These (default) values are preserved for compatibility with existing libraries, e.g. boost. + // Change them accordingly to your application. + // + // For example, if you use 256 bits of precision uniformly in your program, then: + // digits = 256 + // digits10 = 77 + // max_digits10 = 78 + // + // Approximate formula for decimal digits is: digits10 = floor(log10(2) * digits). See bits2digits() for more details. + + static const std::float_round_style round_style = round_to_nearest; + static const int digits = 53; + static const int digits10 = 15; + static const int max_digits10 = 16; +#endif }; } diff --git a/deps/eigen-3.2.1/unsupported/test/mpreal_support.cpp b/deps/eigen-3.2.8/unsupported/test/mpreal_support.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/mpreal_support.cpp rename to deps/eigen-3.2.8/unsupported/test/mpreal_support.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/openglsupport.cpp b/deps/eigen-3.2.8/unsupported/test/openglsupport.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/openglsupport.cpp rename to deps/eigen-3.2.8/unsupported/test/openglsupport.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/polynomialsolver.cpp b/deps/eigen-3.2.8/unsupported/test/polynomialsolver.cpp similarity index 97% rename from deps/eigen-3.2.1/unsupported/test/polynomialsolver.cpp rename to deps/eigen-3.2.8/unsupported/test/polynomialsolver.cpp index 13f92169..de79f153 100644 --- a/deps/eigen-3.2.1/unsupported/test/polynomialsolver.cpp +++ b/deps/eigen-3.2.8/unsupported/test/polynomialsolver.cpp @@ -104,9 +104,7 @@ void evalSolverSugarFunction( const POLYNOMIAL& pols, const ROOTS& roots, const // 1) the roots found are correct // 2) the roots have distinct moduli - typedef typename POLYNOMIAL::Scalar Scalar; typedef typename REAL_ROOTS::Scalar Real; - typedef PolynomialSolver PolynomialSolverType; //Test realRoots std::vector< Real > calc_realRoots; diff --git a/deps/eigen-3.2.1/unsupported/test/polynomialutils.cpp b/deps/eigen-3.2.8/unsupported/test/polynomialutils.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/polynomialutils.cpp rename to deps/eigen-3.2.8/unsupported/test/polynomialutils.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/sparse_extra.cpp b/deps/eigen-3.2.8/unsupported/test/sparse_extra.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/sparse_extra.cpp rename to deps/eigen-3.2.8/unsupported/test/sparse_extra.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/splines.cpp b/deps/eigen-3.2.8/unsupported/test/splines.cpp similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/splines.cpp rename to deps/eigen-3.2.8/unsupported/test/splines.cpp diff --git a/deps/eigen-3.2.1/unsupported/test/svd_common.h b/deps/eigen-3.2.8/unsupported/test/svd_common.h similarity index 100% rename from deps/eigen-3.2.1/unsupported/test/svd_common.h rename to deps/eigen-3.2.8/unsupported/test/svd_common.h