diff options
Diffstat (limited to 'gnu/packages/patches/eigen-stabilise-sparseqr-test.patch')
-rw-r--r-- | gnu/packages/patches/eigen-stabilise-sparseqr-test.patch | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/gnu/packages/patches/eigen-stabilise-sparseqr-test.patch b/gnu/packages/patches/eigen-stabilise-sparseqr-test.patch deleted file mode 100644 index b95b46077a..0000000000 --- a/gnu/packages/patches/eigen-stabilise-sparseqr-test.patch +++ /dev/null @@ -1,74 +0,0 @@ -From: Tobias Geerinckx-Rice <me@tobias.gr> -Date: Mon, 16 Mar 2020 22:51:37 +0000 -Subject: gnu: eigen: Stabilise sparseqr test. - -Taken verbatim from this[0] upstream commit. - -[0]: https://gitlab.com/libeigen/eigen/-/commit/3b5deeb546d4017b24846f5b0dc3296a50a039fe - -From 3b5deeb546d4017b24846f5b0dc3296a50a039fe Mon Sep 17 00:00:00 2001 -From: Gael Guennebaud <g.gael@free.fr> -Date: Tue, 19 Feb 2019 22:57:51 +0100 -Subject: [PATCH] bug #899: make sparseqr unit test more stable by 1) trying - with larger threshold and 2) relax rank computation for rank-deficient - problems. - ---- - test/sparseqr.cpp | 31 ++++++++++++++++++++++++++----- - 1 file changed, 26 insertions(+), 5 deletions(-) - -diff --git a/test/sparseqr.cpp b/test/sparseqr.cpp -index 3ffe62314..3576cc626 100644 ---- a/test/sparseqr.cpp -+++ b/test/sparseqr.cpp -@@ -43,6 +43,7 @@ int generate_sparse_rectangular_problem(MatrixType& A, DenseMat& dA, int maxRows - - template<typename Scalar> void test_sparseqr_scalar() - { -+ typedef typename NumTraits<Scalar>::Real RealScalar; - typedef SparseMatrix<Scalar,ColMajor> MatrixType; - typedef Matrix<Scalar,Dynamic,Dynamic> DenseMat; - typedef Matrix<Scalar,Dynamic,1> DenseVector; -@@ -91,14 +92,34 @@ template<typename Scalar> void test_sparseqr_scalar() - exit(0); - return; - } -- -- VERIFY_IS_APPROX(A * x, b); -- -- //Compare with a dense QR solver -+ -+ // Compare with a dense QR solver - ColPivHouseholderQR<DenseMat> dqr(dA); - refX = dqr.solve(b); - -- VERIFY_IS_EQUAL(dqr.rank(), solver.rank()); -+ bool rank_deficient = A.cols()>A.rows() || dqr.rank()<A.cols(); -+ if(rank_deficient) -+ { -+ // rank deficient problem -> we might have to increase the threshold -+ // to get a correct solution. -+ RealScalar th = RealScalar(20)*dA.colwise().norm().maxCoeff()*(A.rows()+A.cols()) * NumTraits<RealScalar>::epsilon(); -+ for(Index k=0; (k<16) && !test_isApprox(A*x,b); ++k) -+ { -+ th *= RealScalar(10); -+ solver.setPivotThreshold(th); -+ solver.compute(A); -+ x = solver.solve(b); -+ } -+ } -+ -+ VERIFY_IS_APPROX(A * x, b); -+ -+ // For rank deficient problem, the estimated rank might -+ // be slightly off, so let's only raise a warning in such cases. -+ if(rank_deficient) ++g_test_level; -+ VERIFY_IS_EQUAL(solver.rank(), dqr.rank()); -+ if(rank_deficient) --g_test_level; -+ - if(solver.rank()==A.cols()) // full rank - VERIFY_IS_APPROX(x, refX); - // else --- -2.24.1 - |