mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-24 11:39:46 -05:00
gnu: eigen: Update to 3.3.7.
* gnu/packages/algebra.scm (eigen): Update to 3.3.7. [source]: Add a patch to fix a test failure. * gnu/packages/patches/eigen-stabilise-sparseqr-test.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it.
This commit is contained in:
parent
aa0bcb6c53
commit
5144e31492
3 changed files with 79 additions and 3 deletions
|
@ -826,6 +826,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch \
|
||||
%D%/packages/patches/dstat-skip-devices-without-io.patch \
|
||||
%D%/packages/patches/dvd+rw-tools-add-include.patch \
|
||||
%D%/packages/patches/eigen-stabilise-sparseqr-test.patch \
|
||||
%D%/packages/patches/einstein-build.patch \
|
||||
%D%/packages/patches/elfutils-tests-ptrace.patch \
|
||||
%D%/packages/patches/elixir-path-length.patch \
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
|
||||
;;; Copyright © 2017, 2019 Eric Bavier <bavier@member.fsf.org>
|
||||
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
|
||||
|
@ -910,15 +910,16 @@ (define-public java-jtransforms
|
|||
(define-public eigen
|
||||
(package
|
||||
(name "eigen")
|
||||
(version "3.3.5")
|
||||
(version "3.3.7")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://bitbucket.org/eigen/eigen/get/"
|
||||
version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"1qh3yrwn78ms5yhwbpl5wvblk4gbz02cacdygxylr7i9xbrvylkk"))
|
||||
"1km3fyfzyqfdvmnl79drps3fjwnz3zbh0c7l34mfbqyvvs8cy4wz"))
|
||||
(file-name (string-append name "-" version ".tar.bz2"))
|
||||
(patches (search-patches "eigen-stabilise-sparseqr-test.patch"))
|
||||
(modules '((guix build utils)))
|
||||
(snippet
|
||||
;; There are 3 test failures in the "unsupported" directory,
|
||||
|
|
74
gnu/packages/patches/eigen-stabilise-sparseqr-test.patch
Normal file
74
gnu/packages/patches/eigen-stabilise-sparseqr-test.patch
Normal file
|
@ -0,0 +1,74 @@
|
|||
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
|
||||
|
Loading…
Reference in a new issue