summaryrefslogtreecommitdiff
path: root/gnu/packages/maths.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/maths.scm')
-rw-r--r--gnu/packages/maths.scm273
1 files changed, 158 insertions, 115 deletions
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 5152fe6942..c7a3b67721 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -26,7 +26,7 @@
;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
-;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2018 Eric Brown <brown@fastmail.com>
;;; Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
@@ -48,6 +48,7 @@
;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -72,6 +73,7 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix gexp)
#:use-module (guix utils)
#:use-module ((guix build utils) #:select (alist-replace))
#:use-module (guix build-system cmake)
@@ -84,6 +86,7 @@
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
#:use-module (gnu packages check)
@@ -144,6 +147,7 @@
#:use-module (gnu packages scheme)
#:use-module (gnu packages serialization)
#:use-module (gnu packages shells)
+ #:use-module (gnu packages sphinx)
#:use-module (gnu packages tcl)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages tex)
@@ -167,6 +171,8 @@
(inputs `(("gtk+" ,gtk+)
("libxml2" ,libxml2)))
(native-inputs `(("pkg-config" ,pkg-config)))
+ (arguments
+ `(#:configure-flags '("CFLAGS=-fcommon")))
(synopsis "Natural deduction first-order logic interface")
(description "Aris is a program for performing logical proofs. It supports
propositional and predicate logic, as well as Boolean algebra and
@@ -376,8 +382,8 @@ programming language.")
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin")))
(wrap-program (string-append bin "/units_cur")
- `("PYTHONPATH" ":" prefix
- ,(search-path-as-string->list (getenv "PYTHONPATH"))))
+ `("GUIX_PYTHONPATH" ":" prefix
+ ,(search-path-as-string->list (getenv "GUIX_PYTHONPATH"))))
#t))))))
(synopsis "Conversion between thousands of scales")
(description
@@ -515,46 +521,56 @@ precision floating point numbers.")
(define-public gsl
(package
(name "gsl")
- (version "2.6")
+ (version "2.7")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/gsl/gsl-"
version ".tar.gz"))
(sha256
(base32
- "1a460zj9xmbgvcymkdhqh313c4l29mn9cffbi5vf33x3qygk70mp"))))
+ "0av04cpblphvvs3kl5rwphniarml503501vrpqw31rd0bmwg7fzg"))))
(build-system gnu-build-system)
(arguments
(let ((system (%current-system)))
- (cond
- ((or (string-prefix? "aarch64" system)
- (string-prefix? "powerpc" system))
- ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
- ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
- '(#:phases (modify-phases %standard-phases
- (add-before 'check 'disable-failing-tests
- (lambda _
- (substitute* "spmatrix/test.c"
- ((".*test_complex.*") "\n"))
- #t)))))
- ((string-prefix? "i686" system)
- ;; There are rounding issues with these tests on i686:
- ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
- ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
- '(#:phases (modify-phases %standard-phases
- (add-before 'check 'disable-failing-tests
- (lambda _
- (substitute* "linalg/test.c"
- ((".*gsl_test\\(test_LU_decomp.*") "\n")
- ((".*gsl_test\\(test_LUc_decomp.*") "\n")
- ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
- ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
- (substitute* "spmatrix/test.c"
- ((".*test_all.*") "\n")
- ((".*test_float.*") "\n")
- ((".*test_complex.*") "\n"))
- #t)))))
- (else '()))))
+ `(#:configure-flags (list "--disable-static") ;halves package size
+ #:phases
+ (modify-phases %standard-phases
+ ,@(cond
+ ((or (string-prefix? "aarch64" system)
+ (string-prefix? "powerpc" system))
+ ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
+ ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
+ '((add-before 'check 'disable-failing-tests
+ (lambda _
+ (substitute* "spmatrix/test.c"
+ ((".*test_complex.*") "\n"))))))
+
+ ((string-prefix? "i686" system)
+ ;; There are rounding issues with these tests on i686:
+ ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
+ ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
+ '((add-before 'check 'disable-failing-tests
+ (lambda _
+ (substitute* "linalg/test.c"
+ ((".*gsl_test\\(test_LU_decomp.*") "\n")
+ ((".*gsl_test\\(test_LUc_decomp.*") "\n")
+ ((".*gsl_test\\(test_QR_decomp_r.*") "\n")
+ ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
+ ((".*gsl_test\\(test_pcholesky_solve.*") "\n")
+ ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
+ (substitute* "spmatrix/test.c"
+ ((".*test_all.*") "\n")
+ ((".*test_float.*") "\n")
+ ((".*test_complex.*") "\n"))
+
+ ;; XXX: These tests abort with:
+ ;; gsl: cholesky.c:645: ERROR: matrix is not positive definite
+ (substitute* '("multifit_nlinear/test.c"
+ "multilarge_nlinear/test.c")
+ (("gsl_ieee_env_setup.*" all)
+ (string-append "exit (77);\n" all)))))))
+
+ (else '()))))))
(home-page "https://www.gnu.org/software/gsl/")
(synopsis "Numerical library for C and C++")
(description
@@ -1081,6 +1097,8 @@ computations.")
(arguments
`(#:parallel-tests? #f
#:configure-flags (list "--enable-shared"
+ "FCFLAGS=-fallow-argument-mismatch"
+ "FFLAGS=-fallow-argument-mismatch"
(string-append "CPPFLAGS=-I"
(assoc-ref %build-inputs "libtirpc")
"/include/tirpc"))
@@ -1114,7 +1132,7 @@ computations.")
;; .so-files. We truncate the hashes to avoid
;; unnecessary store references to those compilers:
(substitute* "libhdf4.settings"
- (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+ (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
(string-append prefix (string-take hash 10) "...")))
#t))
(add-after 'install 'provide-absolute-libjpeg-reference
@@ -1363,9 +1381,9 @@ extremely large and complex data collections.")
#:make-flags
(list (string-append "HDFLIB=" (assoc-ref %build-inputs "hdf4") "/lib")
(string-append "HDF5LIB=" (assoc-ref %build-inputs "hdf5") "/lib")
- (string-append "ZLIB=" (assoc-ref %build-inputs "zlib") "/lib/libz.so")
+ (string-append "ZLIB=" (search-input-file %build-inputs "/lib/libz.so"))
(string-append "JPEGLIB="
- (assoc-ref %build-inputs "libjpeg") "/lib/libjpeg.so")
+ (search-input-file %build-inputs "/lib/libjpeg.so"))
"LLEXT=so")
#:phases
@@ -1382,16 +1400,20 @@ extremely large and complex data collections.")
"hdf/hdf5lib/exceptions/Makefile.in"
"hdf/hdflib/Makefile.in")
(("\\$\\(TOP\\)/lib/slf4j-api-1\\.7\\.5\\.jar")
- (string-append (assoc-ref inputs "slf4j-api")
- "/share/java/slf4j-api.jar")))
+ ;; 'slf4j-api-X.Y.Z.jar' is installed in a Maven-style
+ ;; directory, so use 'find-files' to find it.
+ (car (find-files (assoc-ref inputs "slf4j-api")
+ "^slf4j-api.*\\.jar$"))))
;; Replace outdated config.sub and config.guess:
(with-directory-excursion "config"
(for-each (lambda (file)
(install-file
- (string-append (assoc-ref inputs "automake")
- "/share/automake-"
- ,(version-major+minor (package-version automake))
- "/" file) "."))
+ (search-input-file inputs
+ (string-append
+ "/share/automake-"
+ ,(version-major+minor (package-version automake))
+ "/" file))
+ "."))
'("config.sub" "config.guess")))
;; Fix embedded version number
@@ -1409,8 +1431,9 @@ extremely large and complex data collections.")
(testjars
(append
(map (lambda (i)
- (string-append (assoc-ref inputs i)
- "/share/java/" i ".jar"))
+ (car (find-files (assoc-ref inputs i)
+ (string-append "^" i
+ ".*\\.jar$"))))
'("slf4j-api" "slf4j-simple"))
(list
(car (find-files (assoc-ref inputs "junit") "jar$"))
@@ -1423,11 +1446,9 @@ extremely large and complex data collections.")
"test/hdf5lib/junit.sh.in"
"examples/runExample.sh.in")
(("/usr/bin/test")
- (string-append (assoc-ref inputs "coreutils")
- "/bin/test"))
+ (search-input-file inputs "/bin/test"))
(("/usr/bin/uname")
- (string-append (assoc-ref inputs "coreutils")
- "/bin/uname"))
+ (search-input-file inputs "/bin/uname"))
(("CLASSPATH=[^\n]*")
(string-append "CLASSPATH=" class-path)))
(setenv "CLASSPATH" class-path))
@@ -1661,6 +1682,13 @@ similar to MATLAB, GNU Octave or SciPy.")
(sha256
(base32
"1a2fpp15a2rl1m50gcvvzd9y6bavl6vjf9zzf63sz5gdmq06yiqf"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; Make sure this variable is defined only once. Failing to do so
+ ;; would break builds of 'netcdf-parallel-openmpi' with a
+ ;; multiple-definition link error with GCC 10.
+ '(substitute* "ncdump/ocprint.c"
+ (("^int ocdebug") "static int ocdebug")))
(patches (search-patches "netcdf-date-time.patch"))))
(build-system gnu-build-system)
(native-inputs
@@ -1694,7 +1722,7 @@ similar to MATLAB, GNU Octave or SciPy.")
;; filenames to avoid unnecessary references to the corresponding
;; store items.
(substitute* "libnetcdf.settings"
- (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+ (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
(string-append prefix (string-take hash 10) "...")))
#t)))
@@ -1743,7 +1771,9 @@ sharing of scientific data.")
"0x4acvfhbsx1q79dkkwrwbgfhm0w5ngnp4zj5kk92s1khihmqfhj"))))
(build-system gnu-build-system)
(arguments
- `(#:parallel-tests? #f))
+ `(#:configure-flags '("FCFLAGS=-fallow-argument-mismatch"
+ "FFLAGS=-fallow-argument-mismatch")
+ #:parallel-tests? #f))
(inputs
`(("netcdf" ,netcdf)))
(native-inputs
@@ -2504,7 +2534,7 @@ script files.")
,@(package-inputs octave-cli)))
(native-inputs
`(("qttools" , qttools) ;for lrelease
- ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi
+ ("texlive" ,(texlive-updmap.cfg (list texlive-epsf))) ; for texi2dvi
,@(package-native-inputs octave-cli)))
(arguments
(substitute-keyword-arguments (package-arguments octave-cli)
@@ -4143,8 +4173,9 @@ to BMP, JPEG or PNG image formats.")
(patches (search-patches "maxima-defsystem-mkdir.patch"))))
(build-system gnu-build-system)
(inputs
- `(("gcl" ,gcl)
+ `(("bash" ,bash-minimal)
("gnuplot" ,gnuplot) ;for plots
+ ("sbcl" ,sbcl)
("sed" ,sed)
("tk" ,tk))) ;Tcl/Tk is used by 'xmaxima'
(native-inputs
@@ -4153,15 +4184,11 @@ to BMP, JPEG or PNG image formats.")
("python" ,python)))
(arguments
`(#:configure-flags
- (list "--enable-gcl"
- (string-append "--with-posix-shell="
- (assoc-ref %build-inputs "bash")
- "/bin/sh")
- (string-append "--with-wish="
- (assoc-ref %build-inputs "tk")
- "/bin/wish"
- (let ((v ,(package-version tk)))
- (string-take v (string-index-right v #\.)))))
+ ,#~(list "--enable-sbcl"
+ (string-append "--with-sbcl=" #$sbcl "/bin/sbcl")
+ (string-append "--with-posix-shell=" #$bash-minimal "/bin/sh")
+ (string-append "--with-wish=" #$tk "/bin/wish"
+ #$(version-major+minor (package-version tk))))
;; By default Maxima attempts to write temporary files to
;; '/tmp/nix-build-maxima-*', which won't exist at run time.
;; Work around that.
@@ -4170,13 +4197,12 @@ to BMP, JPEG or PNG image formats.")
(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda* (#:key inputs #:allow-other-keys)
- (let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
+ (let* ((sed (search-input-file inputs "/bin/sed"))
(coreutils (assoc-ref inputs "coreutils"))
(dirname (string-append coreutils "/bin/dirname"))
(head (string-append coreutils "/bin/head"))
- (perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
- (python (string-append (assoc-ref inputs "python")
- "/bin/python3")))
+ (perl (search-input-file inputs "/bin/perl"))
+ (python (search-input-file inputs "/bin/python3")))
(substitute* "src/maxima.in"
(("sed ") (string-append sed " "))
(("dirname") dirname)
@@ -4199,7 +4225,7 @@ to BMP, JPEG or PNG image formats.")
(invoke "sh" "-c"
(string-append
"./maxima-local "
- "--lisp=gcl "
+ "--lisp=sbcl "
"--batch-string=\"run_testsuite();\" "
"| grep -q \"No unexpected errors found\""))))
;; Make sure the doc and emacs files are found in the
@@ -4210,8 +4236,7 @@ to BMP, JPEG or PNG image formats.")
(let* ((gnuplot (assoc-ref inputs "gnuplot"))
(out (assoc-ref outputs "out"))
(datadir (string-append out "/share/maxima/" ,version))
- (binutils (string-append (assoc-ref inputs "binutils")
- "/bin")))
+ (binutils (dirname (search-input-file inputs "/bin/as"))))
(with-directory-excursion out
(mkdir-p "share/emacs")
(mkdir-p "share/doc")
@@ -4377,16 +4402,17 @@ parts of it.")
(define-public openblas
(package
(name "openblas")
- (version "0.3.9")
+ (version "0.3.13")
(source
(origin
- (method url-fetch)
- (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20"
- version "%20version.tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/xianyi/OpenBLAS")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
(sha256
(base32
- "14iz9xnrb9xiwgj84j94mc74gg0zn2vsy9fmsijxxma1n7dck4w3"))))
+ "14jxh0v3jfbw4mfjx4mcz4dd51lyq7pqvh9k8dg94539ypzjr2lj"))))
(build-system gnu-build-system)
(arguments
`(#:test-target "test"
@@ -4421,7 +4447,8 @@ parts of it.")
(string-prefix? "i686" system))
'("DYNAMIC_ARCH=1"))
;; On some of these architectures the CPU can't be detected.
- ((string-prefix? "powerpc64le" system)
+ ((or (string-prefix? "powerpc64le" system)
+ (string-prefix? "aarch64" system))
'("DYNAMIC_ARCH=1"
"TARGET=GENERIC"))
;; On MIPS we force the "SICORTEX" TARGET, as for the other
@@ -4429,9 +4456,6 @@ parts of it.")
;; for Loongson cores are used.
((string-prefix? "mips" system)
'("TARGET=SICORTEX"))
- ;; On aarch64 force the generic 'armv8-a' target
- ((string-prefix? "aarch64" system)
- '("TARGET=ARMV8"))
;; Failed to detect CPU.
((string-prefix? "armhf" system)
'("TARGET=ARMV7"))
@@ -4736,6 +4760,7 @@ packages.")
(method url-fetch)
(uri (string-append "mirror://sourceforge/math-atlas/Stable/"
version "/atlas" version ".tar.bz2"))
+ (patches (search-patches "atlas-gfortran-compat.patch"))
(sha256
(base32
"1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
@@ -5411,7 +5436,7 @@ set.")
(define-public hypre
(package
(name "hypre")
- (version "2.15.1")
+ (version "2.20.0")
(source
(origin
(method git-fetch)
@@ -5420,28 +5445,55 @@ set.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1lvh4ybqkriyqfg2zmic6mrg1981qv1i9vry1fdgsabn81hb71g4"))
- (modules '((guix build utils)))
- (snippet
- '(begin
- ;; Remove use of __DATE__ and __TIME__ for reproducibility;
- ;; substitute the release date.
- (substitute* "src/utilities/HYPRE_utilities.h"
- (("Date Compiled: .*$")
- "Date Compiled: Oct 19 2018 15:23:00 +0000\"\n"))
- #t))))
+ (base32 "14iqjwg5sv1qjn7c2cfv0xxmn9rwamjrhh9hgs8fjbywcbvrkjdi"))))
(build-system gnu-build-system)
- (outputs '("out" ; 6.1 MiB of headers and libraries
- "doc")) ; 4.8 MiB of documentation
+ (outputs '("out" ;5.3 MiB of headers and libraries
+ "doc")) ;12 MiB of documentation
(native-inputs
`(("doc++" ,doc++)
- ("netpbm" ,netpbm)
- ("perl" ,perl) ; needed to run 'ppmquant' during tests
- ("texlive" ,(texlive-union (list texlive-xypic
- texlive-cm
- texlive-latex-hyperref
- texlive-bibtex)))
- ("ghostscript" ,ghostscript)))
+ ("doxygen" ,doxygen)
+ ("python" ,python)
+ ("python-breathe" ,python-breathe)
+ ("python-sphinx" ,python-sphinx)
+ ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+ texlive-amsfonts
+ texlive-bibtex
+ texlive-caption
+ texlive-cm
+ texlive-etoolbox
+ texlive-jknappen
+ texlive-sectsty
+ texlive-tex-gyre
+ texlive-wasy
+ texlive-xcolor
+ texlive-xypic
+ texlive-generic-listofitems
+ texlive-generic-ulem
+ texlive-latex-capt-of
+ texlive-latex-cmap
+ texlive-latex-colortbl
+ texlive-latex-etoc
+ texlive-latex-fancyhdr
+ texlive-latex-fancyvrb
+ texlive-latex-float
+ texlive-latex-fncychap
+ texlive-latex-framed
+ texlive-latex-geometry
+ texlive-latex-hanging
+ texlive-hyperref
+ texlive-latex-multirow
+ texlive-latex-natbib
+ texlive-latex-needspace
+ texlive-latex-newunicodechar
+ texlive-latex-parskip
+ texlive-latex-stackengine
+ texlive-latex-tabulary
+ texlive-latex-titlesec
+ texlive-latex-tocloft
+ texlive-latex-upquote
+ texlive-latex-varwidth
+ texlive-wasysym
+ texlive-latex-wrapfig)))))
(inputs
`(("blas" ,openblas)
("lapack" ,lapack)))
@@ -5457,12 +5509,6 @@ set.")
"--with-blas")
#:phases
(modify-phases %standard-phases
- (add-before 'build 'set-HOME
- (lambda _
- ;; FIXME: texlive-union does not find the built
- ;; metafonts, so it tries to generate them in HOME.
- (setenv "HOME" "/tmp")
- #t))
(add-before 'configure 'chdir-src
(lambda _ (chdir "src")))
(replace 'configure
@@ -5477,7 +5523,7 @@ set.")
configure-flags)))))))
(add-after 'build 'build-docs
(lambda _
- (invoke "make" "-Cdocs" "pdf" "html")))
+ (invoke "make" "-C" "docs")))
(replace 'check
(lambda _
(setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib"))
@@ -5488,8 +5534,7 @@ set.")
(when (positive? size)
(error (format #f "~a size ~d; error indication~%"
filename size)))))
- (find-files "test" ".*\\.err$"))
- #t))
+ (find-files "test" ".*\\.err$"))))
(add-after 'install 'install-docs
(lambda* (#:key outputs #:allow-other-keys)
;; Custom install because docs/Makefile doesn't honor ${docdir}.
@@ -5498,10 +5543,9 @@ set.")
(with-directory-excursion "docs"
(for-each (lambda (base)
(install-file (string-append base ".pdf") docdir)
- (copy-recursively base docdir)) ; html docs
- '("HYPRE_usr_manual"
- "HYPRE_ref_manual")))
- #t))))))
+ (copy-recursively (string-append base "-html")
+ (string-append docdir "/" base)))
+ '("usr-manual" "ref-manual")))))))))
(home-page "https://computing.llnl.gov/projects\
/hypre-scalable-linear-solvers-multigrid-methods")
(synopsis "Library of solvers and preconditioners for linear equations")
@@ -7201,9 +7245,8 @@ of C, Java, or Ada programs.")
(modify-phases %standard-phases
(add-before 'configure 'export-shell
(lambda* (#:key inputs #:allow-other-keys)
- (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
- "/bin/sh"))
- #t)))))
+ (setenv "CONFIG_SHELL"
+ (search-input-file inputs "/bin/sh")))))))
(inputs
`(("gmp" ,gmp)))
(propagated-inputs