From 461cd819c276a3f20bf60930c68fe5b72168b927 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 13 Jul 2016 18:46:01 +0200 Subject: [PATCH 1/2] Workaround VS2015 bug --- Eigen/src/Eigenvalues/GeneralizedEigenSolver.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h index 19730f9e4..6eeeb174e 100644 --- a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +++ b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h @@ -333,8 +333,9 @@ GeneralizedEigenSolver::compute(const MatrixType& A, const MatrixTyp // T = [a 0] // [0 b] - RealScalar a = matT.coeff(i, i), - b = matT(i+1, i+1); // NOTE: using operator() instead of coeff() workarounds a MSVC bug. + RealScalar a = matT.diagonal().coeff(i), + b = matT.diagonal().coeff(i+1); + // ^^ NOTE: using diagonal()(i) instead of coeff(i,i) workarounds a MSVC bug. Matrix S2 = m_matS.template block<2,2>(i,i) * Matrix(b,a).asDiagonal(); Scalar p = Scalar(0.5) * (S2.coeff(0,0) - S2.coeff(1,1)); From db9b1541935bf92dfa06a0f00cd81b593ea438a9 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 16 Jul 2016 15:19:28 +0200 Subject: [PATCH 2/2] Add missing non-const reverse method in VectorwiseOp. --- Eigen/src/Core/VectorwiseOp.h | 11 ++++++++++- test/array_reverse.cpp | 2 -- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Eigen/src/Core/VectorwiseOp.h b/Eigen/src/Core/VectorwiseOp.h index 00a4a8c39..dd382e990 100644 --- a/Eigen/src/Core/VectorwiseOp.h +++ b/Eigen/src/Core/VectorwiseOp.h @@ -284,6 +284,7 @@ template class VectorwiseOp typedef typename ReturnType::Type AnyReturnType; typedef PartialReduxExpr, Direction> CountReturnType; typedef typename ReturnType::Type ProdReturnType; + typedef Reverse ConstReverseReturnType; typedef Reverse ReverseReturnType; template struct LpNormReturnType { @@ -456,7 +457,15 @@ template class VectorwiseOp * * \sa DenseBase::reverse() */ EIGEN_DEVICE_FUNC - const ReverseReturnType reverse() const + const ConstReverseReturnType reverse() const + { return ConstReverseReturnType( _expression() ); } + + /** \returns a writable matrix expression + * where each column (or row) are reversed. + * + * \sa reverse() const */ + EIGEN_DEVICE_FUNC + ReverseReturnType reverse() { return ReverseReturnType( _expression() ); } typedef Replicate ReplicateReturnType; diff --git a/test/array_reverse.cpp b/test/array_reverse.cpp index a5c0d37f9..c9d9f90c3 100644 --- a/test/array_reverse.cpp +++ b/test/array_reverse.cpp @@ -117,13 +117,11 @@ template void reverse(const MatrixType& m) m2.colwise().reverseInPlace(); VERIFY_IS_APPROX(m2,m1.colwise().reverse().eval()); - /* m1.colwise().reverse()(r, c) = x; VERIFY_IS_APPROX(x, m1(rows - 1 - r, c)); m1.rowwise().reverse()(r, c) = x; VERIFY_IS_APPROX(x, m1(r, cols - 1 - c)); - */ } void test_array_reverse()