summaryrefslogtreecommitdiff
path: root/gnu/packages/maths.scm
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-10-01 17:10:49 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-10-01 17:10:49 -0400
commit2e65e4834a226c570866f2e8976ed7f252b45cd1 (patch)
tree21d625bce8d03627680214df4a6622bf8eb79dc9 /gnu/packages/maths.scm
parent9c68ecb24dd1660ce736cdcdea0422a73ec318a2 (diff)
parentf1a3c11407b52004e523ec5de20d326c5661681f (diff)
Merge remote-tracking branch 'origin/master' into staging
With resolved conflicts in: gnu/packages/bittorrent.scm gnu/packages/databases.scm gnu/packages/geo.scm gnu/packages/gnupg.scm gnu/packages/gstreamer.scm gnu/packages/gtk.scm gnu/packages/linux.scm gnu/packages/python-xyz.scm gnu/packages/xorg.scm guix/build/qt-utils.scm
Diffstat (limited to 'gnu/packages/maths.scm')
-rw-r--r--gnu/packages/maths.scm1341
1 files changed, 1197 insertions, 144 deletions
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 758f0a5c32..164924b6af 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -11,24 +11,24 @@
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2015 Fabian Harfert <fhmgufs@web.de>
;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2016, 2018, 2020 Kei Kebreau <kkebreau@posteo.net>
+;;; Copyright © 2016, 2018, 2020, 2021 Kei Kebreau <kkebreau@posteo.net>
;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017, 2018, 2019, 2020 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
;;; Copyright © 2017 Nikita <nikita@n0.is>
;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
;;; Copyright © 2017, 2019 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Dave Love <me@fx@gnu.org>
-;;; Copyright © 2018, 2019, 2020 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2018, 2019, 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; 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 Eric Brown <brown@fastmail.com>
-;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
;;; Copyright © 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
@@ -39,12 +39,15 @@
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
-;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
;;; Copyright © 2021 Gerd Heber <gerd.heber@gmail.com>
;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -74,6 +77,7 @@
#:use-module (guix build-system cmake)
#:use-module (guix build-system glib-or-gtk)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system ocaml)
#:use-module (guix build-system python)
#:use-module (guix build-system ruby)
#:use-module (gnu packages algebra)
@@ -85,11 +89,13 @@
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages coq)
#:use-module (gnu packages curl)
#:use-module (gnu packages cyrus-sasl)
#:use-module (gnu packages dbm)
#:use-module (gnu packages documentation)
#:use-module (gnu packages elf)
+ #:use-module (gnu packages emacs)
#:use-module (gnu packages file)
#:use-module (gnu packages flex)
#:use-module (gnu packages fltk)
@@ -118,8 +124,11 @@
#:use-module (gnu packages m4)
#:use-module (gnu packages mpi)
#:use-module (gnu packages multiprecision)
+ #:use-module (gnu packages ncurses)
#:use-module (gnu packages netpbm)
+ #:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages parallel)
#:use-module (gnu packages pcre)
#:use-module (gnu packages popt)
#:use-module (gnu packages perl)
@@ -133,6 +142,7 @@
#:use-module (gnu packages ruby)
#:use-module (gnu packages tbb)
#:use-module (gnu packages scheme)
+ #:use-module (gnu packages serialization)
#:use-module (gnu packages shells)
#:use-module (gnu packages tcl)
#:use-module (gnu packages texinfo)
@@ -167,6 +177,39 @@ beginners.")
(license license:gpl3+)
(home-page "https://www.gnu.org/software/aris/")))
+(define-public bitwise
+ (package
+ (name "bitwise")
+ (version "0.42")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/mellowcandle/bitwise"
+ "/releases/download/v" version
+ "/bitwise-v" version ".tar.gz"))
+ (sha256
+ (base32 "1lniw4bsb5qs5ybf018qllf95pzixb1q3lvybzl4k3xz8zpkrm6k"))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("ncurses" ,ncurses)
+ ("readline" ,readline)))
+ (native-inputs
+ `(("cunit" ,cunit)
+ ("pkg-config" ,pkg-config)))
+ (synopsis "Terminal based bit manipulator in ncurses")
+ (description "Bitwise is a multi base interactive calculator supporting
+dynamic base conversion and bit manipulation. It's a handy tool for low level
+hackers, kernel developers and device drivers developers.
+
+Some of the features include:
+@itemize
+@item Interactive ncurses interface.
+@item Command line calculator supporting all bitwise operations.
+@item Individual bit manipulator.
+@item Bitwise operations such as NOT, OR, AND, XOR, and shifts.
+@end itemize")
+ (license license:gpl3+)
+ (home-page "https://github.com/mellowcandle/bitwise/")))
+
(define-public c-graph
(package
(name "c-graph")
@@ -236,16 +279,19 @@ programming languages.")
(define-public qhull
(package
(name "qhull")
- (version "2019.1")
+ (version "2020.2")
(source (origin
(method url-fetch)
(uri (string-append "http://www.qhull.org/download/qhull-"
(car (string-split version #\.))
- "-src-7.3.2.tgz"))
+ "-src-8.0.2.tgz"))
(sha256
(base32
- "1ys3vh3qq0v9lh452xb932vp63advds1pxk42lk7cc1niiar0y9b"))))
+ "0zlbhg0lb6j60188c2xhcrvviskr079552icjldqhy1jhgmxghmm"))))
(build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags '("-DLINK_APPS_SHARED=ON"
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON")))
(synopsis "Calculate convex hulls and related structures")
(description
"@code{Qhull} computes the convex hull, Delaunay triangulation, Voronoi
@@ -698,6 +744,30 @@ in memory, so even problems with very large output sizes can sometimes
be solved.")
(license license:gpl2+)))
+(define-public libcerf
+ (package
+ (name "libcerf")
+ (version "1.14")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://jugit.fz-juelich.de/mlz/libcerf")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1ic2q7kvxpqmgxlishygvx8d00i4wn51vkq4fyac44ahhf6c3kwd"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("perl" ,perl)))
+ (home-page "https://jugit.fz-juelich.de/mlz/libcerf")
+ (synopsis "Library for complex error functions")
+ (description
+ "@code{libcerf} is a self-contained numeric library that provides an
+efficient and accurate implementation of complex error functions, along with
+Dawson, Faddeeva, and Voigt functions.")
+ (license license:expat)))
+
(define-public vinci
(package
(name "vinci")
@@ -746,7 +816,7 @@ halfspaces) or by their double description with both representations.")
(define-public arpack-ng
(package
(name "arpack-ng")
- (version "3.6.3")
+ (version "3.8.0")
(home-page "https://github.com/opencollab/arpack-ng")
(source (origin
(method git-fetch)
@@ -754,14 +824,16 @@ halfspaces) or by their double description with both representations.")
(file-name (git-file-name name version))
(sha256
(base32
- "1wljl96yqxc9v8r49c37lscwkdp58kaacfb9p6s6nvpm31haax4y"))))
+ "0l7as5z6xvbxly8alam9s4kws70952qq35a6vkljzayi4b9gbklx"))))
(build-system gnu-build-system)
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
- ("libtool" ,libtool)))
+ ("libtool" ,libtool)
+ ("pkg-config" ,pkg-config)))
(inputs
- `(("lapack" ,lapack)
+ `(("eigen" ,eigen)
+ ("lapack" ,lapack)
("fortran" ,gfortran)))
(synopsis "Fortran subroutines for solving eigenvalue problems")
(description
@@ -774,16 +846,15 @@ large scale eigenvalue problems.")
(package
(inherit arpack-ng)
(version "3.3.0")
- (name (package-name arpack-ng))
- (home-page (package-home-page arpack-ng))
(source
(origin
- (method url-fetch)
- (uri (string-append home-page "/archive/" version ".tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
+ (method git-fetch)
+ (uri (git-reference (url (package-home-page arpack-ng))
+ (commit version)))
+ (file-name (git-file-name (package-name arpack-ng) version))
(sha256
(base32
- "1cz53wqzcf6czmcpfb3vb61xi0rn5bwhinczl65hpmbrglg82ndd"))))))
+ "00h6bjvxjq7bv0b8pwnc0gw33ns6brlqv00xx2rh3w9b5n205918"))))))
(define-public arpack-ng-openmpi
(package (inherit arpack-ng)
@@ -923,14 +994,14 @@ singular value problems.")
(define-public gnuplot
(package
(name "gnuplot")
- (version "5.4.1")
+ (version "5.4.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/gnuplot/gnuplot/"
version "/gnuplot-"
version ".tar.gz"))
(sha256
- (base32 "03jrqs5lvxmbbz2c4g17dn2hrxqwd3hfadk9q8wbkbkyas2h8sbb"))))
+ (base32 "1fp7rbhjmz2w63r72kicf8lfszzimz2csfx868fracw167hpaz75"))))
(build-system gnu-build-system)
(inputs `(("readline" ,readline)
("cairo" ,cairo)
@@ -1145,7 +1216,7 @@ incompatible with HDF5.")
;; libhdf5.so. We truncate the hashes to avoid
;; unnecessary store references to those compilers:
(substitute* "src/libhdf5.settings"
- (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+ (("(/gnu/store/)([a-zA-Z0-9]*)" all prefix hash)
(string-append prefix (string-take hash 10) "..."))
;; Don't record the build-time kernel version to make the
;; settings file reproducible.
@@ -1204,7 +1275,8 @@ extremely large and complex data collections.")
"https://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/COPYING"))))
(define-public hdf5-1.10
- (package/inherit hdf5-1.8
+ (package
+ (inherit hdf5-1.8)
(version "1.10.7")
(source
(origin
@@ -1223,7 +1295,8 @@ extremely large and complex data collections.")
(patches (search-patches "hdf5-config-date.patch"))))))
(define-public hdf5-1.12
- (package/inherit hdf5-1.8
+ (package
+ (inherit hdf5-1.8)
(version "1.12.0")
(source
(origin
@@ -1721,21 +1794,16 @@ online as well as original implementations of various other algorithms.")
(define-public ipopt
(package
(name "ipopt")
- (version "3.12.12")
+ (version "3.13.4")
(source (origin
- (method url-fetch)
- (uri (string-append
- "https://www.coin-or.org/download/source/Ipopt/Ipopt-"
- version".tgz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/coin-or/Ipopt")
+ (commit (string-append "releases/" version))))
+ (file-name (git-file-name name version))
(sha256
(base32
- "07yn9rzdswjk8n246qq6ci9ssf2bcplkifcpsfz9j6cdxw9vgbkv"))
- (modules '((guix build utils)))
- (snippet
- ;; Make sure we don't use the bundled software.
- '(begin
- (delete-file-recursively "ThirdParty")
- #t))))
+ "08gznhwhqv1x4baksz350ih8q16r5rd0k8vals6078m3h94khr4b"))))
(build-system gnu-build-system)
(arguments
'(#:phases (modify-phases %standard-phases
@@ -1755,7 +1823,8 @@ online as well as original implementations of various other algorithms.")
after "\n")))
#t))))))
(native-inputs
- `(("gfortran" ,gfortran)))
+ `(("gfortran" ,gfortran)
+ ("pkg-config" ,pkg-config)))
(inputs
;; TODO: Maybe add dependency on COIN-MUMPS, ASL, and HSL.
`(("lapack" ,lapack))) ;for both libblas and liblapack
@@ -1765,6 +1834,183 @@ online as well as original implementations of various other algorithms.")
"The Interior Point Optimizer (IPOPT) is a software package for
large-scale nonlinear optimization. It provides C++, C, and Fortran
interfaces.")
+ (license license:epl2.0)))
+
+(define-public nomad-optimizer
+ (package
+ (name "nomad-optimizer")
+ (version "4.1.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/bbopt/nomad/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0w386d8r5ldbvnv0c0g7vz95pfpvwdxis26vaalk2amsa5akl775"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("python" ,python-wrapper)
+ ("python-cython" ,python-cython)))
+ (arguments
+ `(#:imported-modules ((guix build python-build-system)
+ ,@%cmake-build-system-modules)
+ #:modules (((guix build python-build-system)
+ #:select (python-version site-packages))
+ (guix build cmake-build-system)
+ (guix build utils))
+ #:configure-flags
+ '("-DBUILD_INTERFACES=ON"
+ "-DBUILD_TESTS=ON")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-sources-for-build
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "CMakeLists.txt"
+ ;; CMAKE_INSTALL_PREFIX is accidentally hardcoded.
+ (("set\\(CMAKE_INSTALL_PREFIX .* FORCE\\)") "")
+ ;; Requiring GCC version 8 or later is unwarranted.
+ (("message\\(FATAL_ERROR \"GCC version < 8")
+ "message(STATUS \"GCC version < 8"))
+
+ (let ((out (assoc-ref outputs "out")))
+ (substitute* "interfaces/PyNomad/CMakeLists.txt"
+ ;; We don't want to build in-place, and anyway the install
+ ;; command further below runs build_ext as a prerequisite.
+ (("COMMAND python setup_PyNomad\\.py .* build_ext --inplace\n")
+ "")
+ ;; Don't install locally.
+ (("COMMAND python (setup_PyNomad\\.py .* install) --user\n"
+ _ args)
+ (string-append "COMMAND ${CMAKE_COMMAND} -E env"
+ " CC=" ,(cc-for-target)
+ " CXX=" ,(cxx-for-target)
+ " " (which "python")
+ " " args
+ " --prefix=" out
+ "\n")))
+ ;; Fix erroneous assumptions about the paths of the include and
+ ;; library directories.
+ (substitute* "interfaces/PyNomad/setup_PyNomad.py"
+ (("^( +os_include_dirs = ).*" _ prefix)
+ (string-append prefix "[\"../../src\"]\n"))
+ (("^(installed_lib_dir = ).*" _ prefix)
+ (string-append prefix "\"" out "/lib\"\n"))))
+ #t))
+
+ ;; Fix the tests so they run in out-of-source builds.
+ (add-after 'fix-sources-for-build 'fix-sources-for-tests
+ (lambda _
+ (substitute*
+ (map (lambda (d) (string-append "examples/" d "/CMakeLists.txt"))
+ (append
+ (map (lambda (d) (string-append "basic/library/" d))
+ '("example1" "example2" "example3"
+ "single_obj_parallel"))
+ (map (lambda (d) (string-append "advanced/library/" d))
+ '("FixedVariable" "NMonly" "PSDMads" "Restart"
+ "c_api/example1" "c_api/example2"
+ "exampleSuggestAndObserve"))))
+ ;; The built examples are assumed to be in the source tree
+ ;; (which isn't the case here).
+ (("(COMMAND \\$\\{CMAKE_BINARY_DIR\\}/examples/runExampleTest\\.sh )\\.(/.*)"
+ _ command test)
+ (string-append command "${CMAKE_CURRENT_BINARY_DIR}" test)))
+ ;; (Unrelated to support for out-of-source testing.)
+ (make-file-writable
+ "examples/advanced/library/exampleSuggestAndObserve/cache0.txt")
+
+ (let* ((builddir (string-append (getcwd) "/../build"))
+ ;; The BB_EXE and SURROGATE_EXE paths are interpreted
+ ;; relative to the configuration file provided to NOMAD.
+ ;; However, the configuration files are all in the source
+ ;; tree rather than in the build tree (unlike the compiled
+ ;; executables).
+ (fix-exe-path (lambda* (dir #:optional
+ (file "param.txt")
+ (exe-opt "BB_EXE"))
+ (substitute* (string-append dir "/" file)
+ (((string-append "^" exe-opt " +"))
+ ;; The $ prevents NOMAD from prefixing
+ ;; the executable with the path of the
+ ;; parent directory of the configuration
+ ;; file NOMAD was provided with as
+ ;; argument (param.txt or some such).
+ (string-append exe-opt " $"
+ builddir "/" dir "/"))))))
+ (for-each
+ (lambda (dir)
+ (let ((dir (string-append "examples/" dir)))
+ (substitute* (string-append dir "/CMakeLists.txt")
+ ;; The install phase has not yet run.
+ (("COMMAND \\$\\{CMAKE_INSTALL_PREFIX\\}/bin/nomad ")
+ "COMMAND ${CMAKE_BINARY_DIR}/src/nomad "))
+ (fix-exe-path dir)
+ (when (equal? dir "examples/basic/batch/surrogate_sort")
+ (fix-exe-path dir "param.txt" "SURROGATE_EXE"))))
+ (append (map (lambda (d) (string-append "basic/batch/" d))
+ '("example1" "example2"
+ "single_obj" "single_obj_parallel"
+ "surrogate_sort"))
+ '("advanced/batch/LHonly")))
+
+ (let ((dir "examples/advanced/batch/FixedVariable"))
+ (substitute* (string-append dir "/runFixed.sh")
+ ;; Hardcoded path to NOMAD executable.
+ (("^\\.\\./\\.\\./\\.\\./\\.\\./bin/nomad ")
+ (string-append builddir "/src/nomad ")))
+ (for-each
+ (lambda (f) (fix-exe-path dir f))
+ '("param1.txt" "param2.txt" "param3.txt" "param10.txt"))))
+ #t))
+
+ ;; The information in the .egg-info file is not kept up to date.
+ (add-after 'install 'delete-superfluous-egg-info
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (delete-file (string-append
+ (site-packages inputs outputs)
+ "PyNomad-0.0.0-py"
+ (python-version (assoc-ref inputs "python"))
+ ".egg-info"))
+ #t)))))
+ (home-page "https://www.gerad.ca/nomad/")
+ (synopsis "Nonlinear optimization by mesh-adaptive direct search")
+ (description
+ "NOMAD is a C++ implementation of the mesh-adaptive direct search (MADS)
+algorithm, designed for difficult blackbox optimization problems. These
+problems occur when the functions defining the objective and constraints are
+the result of costly computer simulations.")
+ (license license:lgpl3+)))
+
+(define-public cbc
+ (package
+ (name "cbc")
+ (version "2.10.5")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://www.coin-or.org/download/source/"
+ "Cbc/Cbc-" version ".tgz"))
+ (sha256
+ (base32
+ "0wk9vr6zc62gw71v7gnra5wxqlcljcgbhm5lasx236v791b986ns"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; Make sure we don't use the bundled software.
+ '(delete-file-recursively "ThirdParty"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("gfortran" ,gfortran)
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("openblas" ,openblas)))
+ (home-page "https://www.coin-or.org")
+ (synopsis "Branch-and-cut solver")
+ (description
+ "Cbc (Coin-or branch and cut) is a mixed integer linear programming
+solver written in C++. It can be used as a library or as a standalone
+executable.")
(license license:epl1.0)))
(define-public clp
@@ -1799,6 +2045,77 @@ linear and quadratic objectives. There are limited facilities for nonlinear
and quadratic objectives using the Simplex algorithm.")
(license license:epl1.0)))
+(define-public gecode
+ (package
+ (name "gecode")
+ (version "6.2.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Gecode/gecode")
+ (commit (string-append "release-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0b1cq0c810j1xr2x9y9996p894571sdxng5h74py17c6nr8c6dmk"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; delete generated sources
+ (for-each delete-file
+ '("gecode/kernel/var-imp.hpp"
+ "gecode/kernel/var-type.hpp"))))))
+ (outputs '("out" "examples"))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "GLDFLAGS=-Wl,-rpath="
+ (assoc-ref %outputs "out")
+ "/lib")
+ "--enable-examples=no")
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 rdelim)
+ (ice-9 popen))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'build-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "compileexamples")))
+ ;; The Makefile disrespects GLDFLAGS for some reason, so we have to
+ ;; patch it ourselves... *sigh*
+ (add-after 'install 'fix-rpath
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((libdir (string-append (assoc-ref outputs "out") "/lib")))
+ (for-each
+ (lambda (file)
+ (let* ((pipe (open-pipe* OPEN_READ "patchelf"
+ "--print-rpath" file))
+ (line (read-line pipe)))
+ (and (zero? (close-pipe pipe))
+ (invoke "patchelf" "--set-rpath"
+ (string-append libdir ":" line)
+ file))))
+ (find-files libdir ".*\\.so$")))))
+ (add-after 'install 'install-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "installexamples"
+ (string-append "bindir=" (assoc-ref outputs "examples")
+ "/bin"))))
+ ;; Tests depend on installed libraries.
+ (delete 'check)
+ (add-after 'fix-rpath 'check
+ (assoc-ref %standard-phases 'check)))))
+ (native-inputs
+ `(("patchelf" ,patchelf)
+ ("perl" ,perl)
+ ("sed" ,sed)))
+ (home-page "https://www.gecode.org")
+ (synopsis "Toolkit for developing constraint-based systems")
+ (description "Gecode is a C++ toolkit for developing constraint-based
+systems and applications. It provides a modular and extensible solver.")
+ (license license:expat)))
+
(define-public libflame
(package
(name "libflame")
@@ -2013,7 +2330,7 @@ can solve two kinds of problems:
"\"" (assoc-ref inputs "texinfo") "/bin/makeinfo\"")))
#t)))))
(home-page "https://www.gnu.org/software/octave/")
- (synopsis "High-level language for numerical computation")
+ (synopsis "High-level language for numerical computation (no GUI)")
(description "GNU Octave is a high-level interpreted language that is
specialized for numerical computations. It can be used for both linear and
non-linear applications and it provides great support for visualizing results.
@@ -2026,7 +2343,7 @@ script files.")
(name "octave")
(inputs
`(("qscintilla" ,qscintilla)
- ("qt" ,qtbase)
+ ("qt" ,qtbase-5)
,@(package-inputs octave-cli)))
(native-inputs
`(("qttools" , qttools) ;for lrelease
@@ -2045,7 +2362,8 @@ script files.")
(substitute* "configure"
(("qscintilla2-qt5")
"qscintilla2_qt5"))
- #t))))))))
+ #t))))))
+ (synopsis "High-level language for numerical computation (with GUI)")))
(define-public opencascade-oce
(package
@@ -2197,7 +2515,7 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
(define-public gmsh
(package
(name "gmsh")
- (version "4.6.0")
+ (version "4.8.4")
(source
(origin
(method git-fetch)
@@ -2205,11 +2523,10 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
(url "https://gitlab.onelab.info/gmsh/gmsh.git")
(commit
(string-append "gmsh_"
- (string-map (lambda (x) (if (eq? x #\.) #\_ x))
- version)))))
+ (string-replace-substring version "." "_")))))
(file-name (git-file-name name version))
(sha256
- (base32 "0m0pjxcy1bnr7a20i11lh0ih159pphq9wsvfjr3sfx4y3lginz5y"))
+ (base32 "07mi6ja3b9libgcdp2b4dwnkap1b9ha2wi2zdn9mhmwvp3g1pxhp"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -2219,22 +2536,48 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
(propagated-inputs
`(("fltk" ,fltk)
("gfortran" ,gfortran)
+ ("glu" ,glu)
("gmp" ,gmp)
("hdf5" ,hdf5)
("lapack" ,lapack)
+ ("libx11" ,libx11)
+ ("libxext" ,libxext)
("mesa" ,mesa)
- ("glu" ,glu)
("metis" ,metis)
- ("opencascade-occt" ,opencascade-occt)
- ("libx11" ,libx11)
- ("libxext" ,libxext)))
+ ("opencascade-occt" ,opencascade-occt)))
(inputs
`(("fontconfig" ,fontconfig)
- ("libxft" ,libxft)))
+ ("libxft" ,libxft)
+ ("python" ,python)))
(arguments
`(#:configure-flags `("-DENABLE_SYSTEM_CONTRIB:BOOL=ON"
"-DENABLE_BUILD_SHARED:BOOL=ON"
- "-DENABLE_BUILD_DYNAMIC:BOOL=ON")))
+ "-DENABLE_BUILD_DYNAMIC:BOOL=ON")
+ #:imported-modules (,@%cmake-build-system-modules
+ (guix build python-build-system))
+ #:modules (((guix build python-build-system) #:select (site-packages))
+ (guix build cmake-build-system)
+ (guix build utils))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Use the standard Guix site-package path for
+ ;; installation of the Python API.
+ (substitute* "CMakeLists.txt"
+ (("include\\(GNUInstallDirs\\)\n")
+ (string-append "include(GNUInstallDirs)\n"
+ " set(GMSH_PY_LIB "
+ (site-packages inputs outputs) ")\n"))
+ (("\\$\\{GMSH\\_PY\\} DESTINATION \\$\\{GMSH\\_LIB\\}")
+ "${GMSH_PY} DESTINATION ${GMSH_PY_LIB}"))
+ ;; Find the shared library.
+ (let ((libgmsh (string-append (assoc-ref outputs "out")
+ "/lib/libgmsh.so")))
+ (substitute* "api/gmsh.py"
+ (("find_library\\(\"gmsh\"\\)")
+ (simple-format #f "\"~a\"" libgmsh))))
+ #t)))))
(home-page "http://gmsh.info/")
(synopsis "3D finite element grid generator")
(description "Gmsh is a 3D finite element grid generator with a built-in
@@ -2298,7 +2641,7 @@ ASCII text files using Gmsh's own scripting language.")
("python-dbus" ,python-dbus)
("python-h5py" ,python-h5py) ;optional, for HDF5 data
("python-pyqt" ,python-pyqt)
- ("qtbase" ,qtbase)
+ ("qtbase" ,qtbase-5)
("qtsvg" ,qtsvg)))
(propagated-inputs
`(("python-numpy" ,python-numpy)))
@@ -2356,7 +2699,7 @@ September 2004}")
`(("python" ,python-2)))
(inputs
`(("gfortran" ,gfortran)
- ("lapack" ,lapack)
+ ("openblas" ,openblas)
("superlu" ,superlu)
;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
;; leaving out opengl, as configuration seems to only be for mac
@@ -2367,6 +2710,7 @@ September 2004}")
#:configure-flags
`("--with-mpi=0"
"--with-openmp=1"
+ "--with-openblas=1"
"--with-superlu=1")
#:make-flags
;; Honor (parallel-job-count) for build. Do not use --with-make-np,
@@ -2750,6 +3094,136 @@ the Cauchy-Schwarz inequality, Stirling's formula, etc. See the Metamath
book.")
(license license:gpl2+)))
+(define-public minizinc
+ (package
+ (name "minizinc")
+ (version "2.5.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MiniZinc/libminizinc")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "10b2hsl1fx9psh0iagmp8ki3f60f3qg5hmvra5aczjlfmbl88ggp"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-1)))
+ (snippet
+ '(begin
+ ;; Do not advertise proprietary solvers
+ (with-directory-excursion "cmake/targets"
+ (let ((targets '("libminizinc_fzn.cmake"
+ "libminizinc_gecode.cmake"
+ "libminizinc_mip.cmake"
+ "libminizinc_nl.cmake"
+ "libminizinc_osicbc.cmake"
+ "libminizinc_parser.cmake"
+ "libmzn.cmake"
+ "minizinc.cmake"
+ "mzn2doc.cmake")))
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file (cons* "." ".." targets)))
+ (scandir ".")))
+ (substitute* "libmzn.cmake"
+ (("include\\(cmake/targets/(.*)\\)" all target)
+ (if (member target targets) all "")))))
+ (with-directory-excursion "include/minizinc/solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.hh"
+ "MIP_osicbc_wrap.hh"
+ "MIP_solverinstance.hh"
+ "MIP_solverinstance.hpp"
+ "MIP_wrap.hh")))
+ (scandir "."))))
+ (with-directory-excursion "solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.cpp"
+ "MIP_osicbc_wrap.cpp"
+ "MIP_solverinstance.cpp"
+ "MIP_wrap.cpp")))
+ (scandir "."))))
+ (substitute* "CMakeLists.txt"
+ (("find_package\\(([^ ]*).*\\)" all pkg)
+ (if (member pkg '("Gecode" "OsiCBC" "Threads"))
+ all
+ "")))
+ ;; TODO: swap out miniz for zlib
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no ‘check’ target
+ #:modules ((guix build cmake-build-system)
+ (guix build utils)
+ (srfi srfi-1))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-solver-configs
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((gecode (assoc-ref inputs "gecode"))
+ (pkgdatadir (string-append (assoc-ref outputs "out")
+ "/share/minizinc")))
+ (call-with-output-file (string-append pkgdatadir
+ "/Preferences.json")
+ (lambda (port)
+ (display "\
+{
+ \"tagDefaults\": [
+ [\"\", \"org.gecode.gecode\"],
+ [\"gecode\", \"org.gecode.gecode\"]
+ ],
+ \"solverDefaults\": []
+}"
+ port)
+ (newline port)))
+
+ (mkdir-p (string-append pkgdatadir "/solvers"))
+ (call-with-output-file (string-append pkgdatadir
+ "/solvers/gecode.msc")
+ (lambda (port)
+ (format port
+ "\
+{
+ \"id\": \"org.gecode.gecode\",
+ \"name\": \"Gecode\",
+ \"description\": \"Gecode FlatZinc executable\",
+ \"version\": ~s,
+ \"mznlib\": ~s,
+ \"executable\": ~s,
+ \"supportsMzn\": false,
+ \"supportsFzn\": true,
+ \"needsSolns2Out\": true,
+ \"needsMznExecutable\": false,
+ \"needsStdlibDir\": false,
+ \"isGUIApplication\": false
+}"
+ (last (string-split gecode #\-))
+ (string-append gecode "/share/gecode/mznlib")
+ (string-append gecode "/bin/fzn-gecode"))
+ (newline port)))))))))
+ (native-inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)))
+ (inputs
+ `(("cbc" ,cbc)
+ ("gecode" ,gecode)
+ ("zlib" ,zlib)))
+ (home-page "https://www.minizinc.org")
+ (synopsis "High-level constraint modeling language")
+ (description "MiniZinc is a high-level modeling language for constraint
+satisfaction and optimization problems. Models are compiled to FlatZinc, a
+language understood by many solvers.")
+ (license license:mpl2.0)))
+
(define-public mumps
(package
(name "mumps")
@@ -3106,14 +3580,14 @@ implemented in ANSI C, and MPI for communications.")
(define-public scotch
(package
(name "scotch")
- (version "6.1.0")
+ (version "6.1.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://gforge.inria.fr/frs/download.php/"
"latestfile/298/scotch_" version ".tar.gz"))
(sha256
- (base32 "1184fcv4wa2df8szb5lan6pjh0raarr45pk8ilpvbz23naikzg53"))
+ (base32 "04dkz24a2g20wq703fnyi4440ac4mwycy9gwrrllljj7zxcjy19r"))
(patches (search-patches "scotch-build-parallelism.patch"
"scotch-integer-declarations.patch"))))
(build-system gnu-build-system)
@@ -3121,7 +3595,8 @@ implemented in ANSI C, and MPI for communications.")
`(("zlib" ,zlib)))
(native-inputs
`(("flex" ,flex)
- ("bison" ,bison)))
+ ("bison" ,bison)
+ ("gfortran" ,gfortran)))
(outputs '("out" "metis"))
(arguments
`(#:make-flags (list (string-append "prefix=" %output))
@@ -3146,6 +3621,7 @@ CAT = cat
CCS = gcc
CCP = mpicc
CCD = gcc
+FC = gfortran
CPPFLAGS =~{ -D~a~}
CFLAGS = -O2 -g -fPIC $(CPPFLAGS)
LDFLAGS = -lz -lm -lrt -lpthread
@@ -3189,6 +3665,8 @@ YACC = bison -pscotchyy -y -b y
(find-files "../lib/" ".*metis\\..*"))
#t))))))
(home-page "https://www.labri.fr/perso/pelegrin/scotch/")
+ (properties
+ `((release-monitoring-url . "https://gforge.inria.fr/frs/?group_id=248")))
(synopsis "Programs and libraries for graph algorithms")
(description "SCOTCH is a set of programs and libraries which implement
the static mapping and sparse matrix reordering algorithms developed within
@@ -3225,6 +3703,7 @@ CAT = cat
CCS = gcc
CCP = mpicc
CCD = gcc
+FC = gfortran
CPPFLAGS =~{ -D~a~}
CFLAGS = -O2 -g -fPIC $(CPPFLAGS)
LDFLAGS = -lz -lm -lrt -lpthread
@@ -3279,6 +3758,7 @@ CAT = cat
CCS = gcc
CCP = mpicc
CCD = gcc
+FC = gfortran
CPPFLAGS =~{ -D~a~}
CFLAGS = -O2 -g -fPIC $(CPPFLAGS) $(RPATHFLAGS)
CLIBFLAGS = -shared -fPIC
@@ -3458,31 +3938,32 @@ processor cores.")
(synopsis "Parallel adaptive mesh refinement on forests of octrees")))
(define-public gsegrafix
+ ;; This is an old and equally dead "experimental fork" of the longer-dead
+ ;; original. At least it no longer requires the even-deader libgnomeprint{,ui}
+ ;; libraries, instead rendering plots with Pango.
(package
(name "gsegrafix")
- (version "1.0.6")
+ (version "1.0.7.2")
(source
(origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/" name "/" name "-"
- version ".tar.gz"))
- (sha256
- (base32
- "1b13hvx063zv970y750bx41wpx6hwd5ngjhbdrna8w8yy5kmxcda"))))
+ (method url-fetch)
+ (uri (string-append "mirror://savannah/gsegrafix-experimental/"
+ "gsegrafix-experimental-" version ".tar.gz"))
+ (sha256
+ (base32 "0fwh6719xy2zasmqlp0vdx6kzm45hn37ga88xmw5cz0yx7xw4j6f"))))
(build-system gnu-build-system)
(arguments
- `(#:configure-flags '("LDFLAGS=-lm")))
+ `(#:configure-flags
+ (list "--disable-static")))
(inputs
- `(("libgnomecanvas" ,libgnomecanvas)
- ("libbonoboui" ,libbonoboui)
- ("libgnomeui" ,libgnomeui)
- ("libgnomeprintui" ,libgnomeprintui)
- ("popt" ,popt)))
+ `(("glib" ,glib)
+ ("gtk+" ,gtk+)))
(native-inputs
`(("pkg-config" ,pkg-config)))
(home-page "https://www.gnu.org/software/gsegrafix/")
(synopsis "GNOME application to create scientific and engineering plots")
- (description "GSEGrafix is an application which produces high-quality graphical
+ (description
+ "GSEGrafix is an application which produces high-quality graphical
plots for science and engineering. Plots are specified via simple ASCII
parameter files and data files and are presented in an anti-aliased GNOME
canvas. The program supports rectangular two-dimensional plots, histograms,
@@ -3493,7 +3974,7 @@ to BMP, JPEG or PNG image formats.")
(define-public maxima
(package
(name "maxima")
- (version "5.44.0")
+ (version "5.45.1")
(source
(origin
(method url-fetch)
@@ -3501,7 +3982,7 @@ to BMP, JPEG or PNG image formats.")
version "-source/" name "-" version ".tar.gz"))
(sha256
(base32
- "1v6jr5s6hhj6r18gfk6hgxk2qd6z1dxkrjq9ss2z1y6sqi45wgyr"))
+ "1p77nk5sz1qfkn5zr97szpbi8ib4b22k8i52l4ag5gkhd4kid47y"))
(patches (search-patches "maxima-defsystem-mkdir.patch"))))
(build-system gnu-build-system)
(inputs
@@ -3592,7 +4073,7 @@ to BMP, JPEG or PNG image formats.")
(wrap-program (string-append out "/bin/maxima")
`("PATH" prefix (,binutils))))
#t)))))
- (home-page "http://maxima.sourceforge.net")
+ (home-page "https://maxima.sourceforge.io")
(synopsis "Numeric and symbolic expression manipulation")
(description "Maxima is a system for the manipulation of symbolic and
numerical expressions. It yields high precision numeric results by using
@@ -3608,7 +4089,7 @@ point numbers.")
(define-public wxmaxima
(package
(name "wxmaxima")
- (version "21.02.0")
+ (version "21.05.2")
(source
(origin
(method git-fetch)
@@ -3617,7 +4098,7 @@ point numbers.")
(commit (string-append "Version-" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "19sab596ydwz65151bwymnfilyfmr8qcxb0k8cxlnj1gmdldlyz6"))))
+ (base32 "0h7ryykh2dapcyvpp4f1j1b3vrrz80x9k8nkci2yxifgdb29vyhw"))))
(build-system cmake-build-system)
(native-inputs
`(("gettext" ,gettext-minimal)))
@@ -3775,13 +4256,17 @@ parts of it.")
;; Build the library for all supported CPUs. This allows
;; switching CPU targets at runtime with the environment variable
;; OPENBLAS_CORETYPE=<type>, where "type" is a supported CPU type.
- ;; Unfortunately, this is not supported on non-x86 architectures,
+ ;; Unfortunately, this is not supported on all architectures,
;; where it leads to failed builds.
,@(let ((system (or (%current-target-system) (%current-system))))
(cond
((or (string-prefix? "x86_64" system)
(string-prefix? "i686" system))
'("DYNAMIC_ARCH=1"))
+ ;; On some of these architectures the CPU can't be detected.
+ ((string-prefix? "powerpc64le" system)
+ '("DYNAMIC_ARCH=1"
+ "TARGET=GENERIC"))
;; On MIPS we force the "SICORTEX" TARGET, as for the other
;; two available MIPS targets special extended instructions
;; for Loongson cores are used.
@@ -3790,6 +4275,9 @@ parts of it.")
;; On aarch64 force the generic 'armv8-a' target
((string-prefix? "aarch64" system)
'("TARGET=ARMV8"))
+ ;; Failed to detect CPU.
+ ((string-prefix? "armhf" system)
+ '("TARGET=ARMV7"))
(else '()))))
;; no configure script
#:phases
@@ -3934,7 +4422,7 @@ access to BLIS implementations via traditional BLAS routine calls.")
(define-public openlibm
(package
(name "openlibm")
- (version "0.6.0")
+ (version "0.7.4")
(source
(origin
(method git-fetch)
@@ -3943,11 +4431,12 @@ access to BLIS implementations via traditional BLAS routine calls.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "08wfchmmr5200fvmn1kwq9byc1fhsq46hn0y5k8scdl74771c7gh"))))
+ (base32 "1azms0lpxb7vxb3bln5lyz0wpwx6jnzbffkclclpq2v5aiw8d14i"))))
(build-system gnu-build-system)
(arguments
`(#:make-flags
- (list (string-append "prefix=" (assoc-ref %outputs "out")))
+ (list (string-append "prefix=" (assoc-ref %outputs "out"))
+ ,(string-append "CC=" (cc-for-target)))
#:phases
;; no configure script
(modify-phases %standard-phases (delete 'configure))
@@ -4011,7 +4500,7 @@ Fresnel integrals, and similar related functions as well.")
(define-public suitesparse
(package
(name "suitesparse")
- (version "5.9.0")
+ (version "5.10.1")
(source
(origin
(method git-fetch)
@@ -4021,7 +4510,7 @@ Fresnel integrals, and similar related functions as well.")
(file-name (git-file-name name version))
(sha256
(base32
- "1zhkix58afw92s7p291prljdm3yi0pjg1kbi3lczdb8rb14jkz5n"))
+ "19gx5wlgqnqpgz6mvam9lalyzpbfwgqhppps8z3np9sh0mgaiyw9"))
(patches (search-patches "suitesparse-mongoose-cmake.patch"))
(modules '((guix build utils)))
(snippet
@@ -4036,6 +4525,11 @@ Fresnel integrals, and similar related functions as well.")
(list (string-append "CC=" ,(cc-for-target))
"TBB=-ltbb"
"MY_METIS_LIB=-lmetis"
+
+ ;; The default is to link against netlib lapack. Use OpenBLAS
+ ;; instead.
+ "BLAS=-lopenblas" "LAPACK=-lopenblas"
+
;; Flags for cmake (required to build GraphBLAS and Mongoose)
(string-append "CMAKE_OPTIONS=-DCMAKE_INSTALL_PREFIX="
(assoc-ref %outputs "out")
@@ -4055,7 +4549,7 @@ Fresnel integrals, and similar related functions as well.")
(delete 'configure)))) ;no configure script
(inputs
`(("tbb" ,tbb)
- ("lapack" ,lapack)
+ ("openblas" ,openblas)
("gmp" ,gmp)
("mpfr" ,mpfr)
("metis" ,metis)))
@@ -4200,8 +4694,39 @@ done in the BIOS, or, on GNU/Linux, with the following command:
@end example
Failure to do so will result in a library with poor performance.")
+ ;; The test suite is notoriously lengthy and routinely exceeds the default
+ ;; timeout of 21600 seconds on the not unbeefy berlin build nodes.
+ (properties '((timeout . 86400))) ; 1 day
(license license:bsd-3)))
+(define-public cglm
+ (package
+ (name "cglm")
+ (version "0.8.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/recp/cglm")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1lcfl9ph4bnl3hckpx4hzwh8r4llnw94ik75igc5qy38wk468gmk"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags
+ (list "-DCGLM_USE_TEST=ON")))
+ (home-page "https://github.com/recp/cglm")
+ (synopsis "Mathematics C library for graphics programming")
+ (description
+ "@acronym{CGLM, C OpenGL Mathematics} is an optimised 3D maths library
+for graphics software based on the @acronym{GLSL, OpenGL Shading Language}
+specifications.
+
+It's similar to the original C++ GLM library but written in C99 and compatible
+with C89.")
+ (license license:expat)))
+
(define-public glm
(package
(name "glm")
@@ -4322,43 +4847,226 @@ specifications.")
revised simplex and the branch-and-bound methods.")
(license license:lgpl2.1+)))
+;; Private Trilinos package for dealii-openmpi (similar to
+;; trilinos-serial-xyce and trilinos-parallel-xyce).
+;; This version is the latest known to be compatible with deal.II [1].
+;; Since the latest version of Trilinos is not necessarily supported by
+;; deal.II, it may be worth keeping this package even if and when Trilinos
+;; gets packaged separately for Guix (unless various versions of Trilinos are
+;; packaged).
+;;
+;; An insightful source of information for building Trilinos for deal.II lies
+;; in the Trilinos package for candi [2], which is a source-based installer
+;; for deal.II and its dependencies.
+;;
+;; [1]: https://www.dealii.org/current/external-libs/trilinos.html
+;; [2]: https://github.com/dealii/candi/blob/master/deal.II-toolchain/packages/trilinos.package
+(define trilinos-for-dealii-openmpi
+ (package
+ (name "trilinos-for-dealii-openmpi")
+ (version "12.18.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/trilinos/Trilinos/")
+ (commit
+ (string-append "trilinos-release-"
+ (string-replace-substring version "." "-")))))
+ (file-name (git-file-name "trilinos" version))
+ (sha256
+ (base32 "0fnwlhzsh85qj38cq3igbs8nm1b2jdgr2z734sapmyyzsy21mkgp"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("gfortran" ,gfortran)
+ ;; Trilinos's repository contains several C-shell scripts, but adding
+ ;; tcsh to the native inputs does not result in the check phase running
+ ;; any more tests than without it (nor is tcsh required to build
+ ;; Trilinos).
+ ;; It seems that Trilinos has replaced its use of C-shell test scripts
+ ;; with CMake's testing facilities.
+ ;; For example,
+ ;; packages/zoltan/doc/Zoltan_html/dev_html/dev_test_script.html [1]
+ ;; states that Zoltan's C-shell test script
+ ;; packages/zoltan/test/test_zoltan has been obsoleted by the tests now
+ ;; performed through CMake.
+ ;;
+ ;; Perl is required for some Zoltan tests and Python 2 for one ML test.
+ ;;
+ ;; [1]: https://cs.sandia.gov/zoltan/dev_html/dev_test_script.html
+ ("perl" ,perl)
+ ("python" ,python-2)))
+ (inputs
+ `(("blas" ,openblas)
+ ("lapack" ,lapack)
+ ("mumps" ,mumps-openmpi)
+ ("scalapack" ,scalapack)))
+ (propagated-inputs
+ `(("mpi" ,openmpi)))
+ (arguments
+ `(#:build-type "Release"
+ #:configure-flags
+ `("-DBUILD_SHARED_LIBS=ON"
+ ;; Obtain the equivalent of RelWithDebInfo but with -O3 (the Release
+ ;; default) rather than -O2 (the RelWithDebInfo default), to conform
+ ;; to candi's trilinos.package's compilation flags, which are -g -O3.
+ "-DCMAKE_C_FLAGS=-g"
+ "-DCMAKE_CXX_FLAGS=-g"
+ "-DCMAKE_Fortran_FLAGS=-g"
+
+ ;; Trilinos libraries that deal.II can interface with.
+ "-DTrilinos_ENABLE_Amesos=ON"
+ "-DTrilinos_ENABLE_AztecOO=ON"
+ "-DTrilinos_ENABLE_Epetra=ON"
+ "-DTrilinos_ENABLE_EpetraExt=ON"
+ "-DTrilinos_ENABLE_Ifpack=ON"
+ "-DTrilinos_ENABLE_ML=ON"
+ "-DTrilinos_ENABLE_MueLu=ON"
+ "-DTrilinos_ENABLE_ROL=ON"
+ ;; Optional; required for deal.II's GridIn::read_exodusii, but
+ ;; depends on netcdf.
+ ;; Enable if and when someone needs it.
+ ;;"-DTrilinos_ENABLE_SEACAS=ON"
+ "-DTrilinos_ENABLE_Sacado=ON"
+ "-DTrilinos_ENABLE_Teuchos=ON"
+ "-DTrilinos_ENABLE_Tpetra=ON"
+ "-DTrilinos_ENABLE_Zoltan=ON"
+
+ ;; Third-party libraries (TPLs) that Trilinos can interface with.
+ "-DBLAS_LIBRARY_NAMES=openblas"
+ "-DTPL_ENABLE_MPI=ON"
+ "-DTPL_ENABLE_MUMPS=ON"
+ "-DTPL_ENABLE_SCALAPACK=ON"
+
+ ;; Enable the tests but not the examples (which are enabled by
+ ;; default when enabling tests).
+ ;; Although some examples are run as tests, they are otherwise
+ ;; unnecessary since this is a private package meant for
+ ;; dealii-openmpi.
+ ;; Besides, some MueLu and ROL examples require a lot of memory to
+ ;; compile.
+ ;;
+ ;; (For future reference, note that some ROL and SEACAS examples
+ ;; require removing gfortran from CPLUS_INCLUDE_PATH as in the
+ ;; dune-istl, dune-localfunctions and dune-alugrid packages.)
+ "-DTrilinos_ENABLE_TESTS=ON"
+ "-DTrilinos_ENABLE_EXAMPLES=OFF"
+ ;; MueLu tests require considerably more time and memory to compile
+ ;; than the rest of the tests.
+ "-DMueLu_ENABLE_TESTS=OFF"
+
+ ;; The following options were gleaned from candi's trilinos.package.
+ ;; (We do not enable the complex instantiations, which are anyway
+ ;; provided only as an option in trilinos.package, because they are
+ ;; costly in compilation time and memory usage, and disk space [1].)
+ ;;
+ ;; [1]: https://www.docs.trilinos.org/files/TrilinosBuildReference.html#enabling-float-and-complex-scalar-types
+ "-DTrilinos_ENABLE_Ifpack2=OFF"
+ "-DTeuchos_ENABLE_FLOAT=ON"
+ "-DTpetra_INST_INT_LONG=ON"
+ "-DTPL_ENABLE_Boost=OFF")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'configure 'fix-kokkos-config
+ (lambda _
+ ;; GNU Make 4.3 accidentally leaves the backslash preceding the
+ ;; number sign in strings containing a literal backslash–number
+ ;; sign (\#) [1, 2].
+ ;; This is still an issue in Trilinos 13.0.1, but should be fixed
+ ;; in the following version.
+ ;; (The latest versions of Kokkos incorporate the fix [2].)
+ ;;
+ ;; [1]: https://github.com/GEOSX/thirdPartyLibs/issues/136
+ ;; [2]: https://github.com/kokkos/kokkos/blob/3.4.00/Makefile.kokkos#L441
+ (substitute* "KokkosCore_config.h"
+ (("\\\\#") "#"))
+ #t))
+ (add-before 'check 'mpi-setup
+ ,%openmpi-setup))))
+ (home-page "https://trilinos.github.io/")
+ (synopsis "Algorithms for engineering and scientific problems")
+ (description
+ "The Trilinos Project is an effort to develop algorithms and enabling
+technologies within an object-oriented software framework for the solution of
+large-scale, complex multi-physics engineering and scientific problems.
+A unique design feature of Trilinos is its focus on packages.")
+ ;; The packages are variously licensed under more than just BSD-3 and
+ ;; LGPL-2.1+, but all the licenses are either BSD- or LGPL-compatible.
+ ;; See https://trilinos.github.io/license.html.
+ (license (list license:bsd-3 license:lgpl2.1+))))
+
(define-public dealii
(package
(name "dealii")
- (version "9.2.0")
+ (version "9.3.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/dealii/dealii/releases/"
"download/v" version "/dealii-" version ".tar.gz"))
(sha256
- (base32
- "0fm4xzrnb7dfn4415j24d8v3jkh0lssi86250x2f5wgi83xq4nnh"))
+ (base32 "1f0sqvlxvl0myqcn0q6xrn1vnp5pgx143lai4a4jkh1dmdv4cbx6"))
(modules '((guix build utils)))
(snippet
- ;; Remove bundled sources: UMFPACK, TBB, muParser, and boost
'(begin
+ ;; Remove bundled boost, muparser, TBB and UMFPACK.
(delete-file-recursively "bundled")
#t))))
(build-system cmake-build-system)
+ (outputs '("out" "doc"))
+ (native-inputs
+ ;; Required to build the documentation.
+ `(("dot" ,graphviz)
+ ("doxygen" ,doxygen)
+ ("perl" ,perl)))
(inputs
- `(("tbb" ,tbb)
- ("zlib" ,zlib)
- ("boost" ,boost)
- ("p4est" ,p4est)
+ `(("arpack" ,arpack-ng)
("blas" ,openblas)
+ ("gfortran" ,gfortran)
("lapack" ,lapack)
- ("arpack" ,arpack-ng)
("muparser" ,muparser)
- ("gfortran" ,gfortran)
- ("suitesparse" ,suitesparse))) ;for UMFPACK
+ ("zlib" ,zlib)))
+ (propagated-inputs
+ ;; Some scripts are installed into share/deal.II/scripts that require
+ ;; perl and python, but they are not executable (and some are missing the
+ ;; shebang line) and therefore must be explicitly passed to the
+ ;; interpreter.
+ ;; Anyway, they are meant to be used at build time, so rather than adding
+ ;; the interpreters here, any package depending on them should just add
+ ;; the requisite interpreter to its native inputs.
+ `(("boost" ,boost)
+ ("hdf5" ,hdf5)
+ ("suitesparse" ,suitesparse) ; For UMFPACK.
+ ("tbb" ,tbb)))
(arguments
- `(#:build-type "DebugRelease" ;only supports Release, Debug, or DebugRelease
+ `(#:build-type "DebugRelease" ; Supports only Debug, Release and DebugRelease.
+ ;; The tests take too long and must be explicitly enabled with "make
+ ;; setup_tests".
+ ;; See https://www.dealii.org/developer/developers/testsuite.html.
+ ;; (They can also be run for an already installed deal.II.)
+ #:tests? #f
#:configure-flags
- ;; Work around a bug in libsuitesparseconfig linking
- ;; see https://github.com/dealii/dealii/issues/4745
- '("-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON")))
- (home-page "https://www.dealii.org")
+ (let ((doc (string-append (assoc-ref %outputs "doc")
+ "/share/doc/" ,name "-" ,version)))
+ `("-DDEAL_II_COMPONENT_DOCUMENTATION=ON"
+ ,(string-append "-DDEAL_II_DOCREADME_RELDIR=" doc)
+ ,(string-append "-DDEAL_II_DOCHTML_RELDIR=" doc "/html")
+ ;; Don't compile the examples because the source and CMakeLists.txt
+ ;; are installed anyway, allowing users to do so for themselves.
+ "-DDEAL_II_COMPILE_EXAMPLES=OFF"
+ ,(string-append "-DDEAL_II_EXAMPLES_RELDIR=" doc "/examples")))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'remove-build-logs
+ ;; These build logs leak the name of the build directory by storing
+ ;; the values of CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR.
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((doc (string-append (assoc-ref outputs "doc")
+ "/share/doc/" ,name "-" ,version)))
+ (for-each delete-file (map (lambda (f) (string-append doc "/" f))
+ '("detailed.log" "summary.log"))))
+ #t)))))
+ (home-page "https://www.dealii.org/")
(synopsis "Finite element library")
(description
"Deal.II is a C++ program library targeted at the computational solution
@@ -4369,30 +5077,25 @@ in finite element programs.")
(license license:lgpl2.1+)))
(define-public dealii-openmpi
- (package (inherit dealii)
+ (package/inherit dealii
(name "dealii-openmpi")
(inputs
- `(("mpi" ,openmpi)
- ;;Supported only with MPI:
- ("hdf5" ,hdf5-parallel-openmpi) ;TODO: have petsc-openmpi propagate?
+ `(("arpack" ,arpack-ng-openmpi)
+ ("metis" ,metis)
+ ("scalapack" ,scalapack)
+ ,@(alist-delete "arpack" (package-inputs dealii))))
+ (propagated-inputs
+ `(("hdf5" ,hdf5-parallel-openmpi)
+ ("mpi" ,openmpi)
("p4est" ,p4est-openmpi)
("petsc" ,petsc-openmpi)
("slepc" ,slepc-openmpi)
- ("metis" ,metis) ;for MUMPS
- ("scalapack" ,scalapack) ;for MUMPS
- ("mumps" ,mumps-metis-openmpi) ;configure supports only metis orderings
- ("arpack" ,arpack-ng-openmpi)
- ,@(fold alist-delete (package-inputs dealii)
- '("p4est" "arpack"))))
+ ("trilinos" ,trilinos-for-dealii-openmpi)
+ ,@(alist-delete "hdf5" (package-propagated-inputs dealii))))
(arguments
(substitute-keyword-arguments (package-arguments dealii)
- ((#:configure-flags cf)
- `(cons "-DDEAL_II_WITH_MPI:BOOL=ON"
- ,cf))
- ((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (add-before 'check 'mpi-setup
- ,%openmpi-setup)))))
+ ((#:configure-flags flags)
+ `(cons "-DDEAL_II_WITH_MPI=ON" ,flags))))
(synopsis "Finite element library (with MPI support)")))
(define-public flann
@@ -4480,7 +5183,7 @@ evaluates expressions using the standard order of operations.")
(define-public xaos
(package
(name "xaos")
- (version "4.0")
+ (version "4.2.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -4489,10 +5192,10 @@ evaluates expressions using the standard order of operations.")
(file-name (git-file-name name version))
(sha256
(base32
- "00110p5xscjsmn7avfqgydn656zbmdj3l3y2fpv9b4ihzpid8n7a"))))
+ "0maw5am6rrkyjrprfg113zjq37mqj0iaznkg4h2927ff7wrprc94"))))
(build-system gnu-build-system)
(native-inputs `(("gettext" ,gettext-minimal)
- ("qtbase" ,qtbase)
+ ("qtbase" ,qtbase-5)
("qttools" ,qttools)))
(inputs `(("libx11" ,libx11)
("zlib" ,zlib)
@@ -4512,12 +5215,14 @@ evaluates expressions using the standard order of operations.")
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
- ;; The DESTDIR is originally set to install the xaos binary to
- ;; the "bin" folder inside the build directory. Setting make
- ;; flags doesn't seem to change this.
(substitute* "XaoS.pro"
+ ;; The DESTDIR is originally set to install the xaos binary to
+ ;; the "bin" folder inside the build directory. Setting make
+ ;; flags doesn't seem to change this.
(("DESTDIR.*$")
- (string-append "DESTDIR=" out "/bin")))
+ (string-append "DESTDIR=" out "/bin"))
+ ;; Set the correct path to the lrelease binary.
+ (("lrelease-qt5") "lrelease"))
(substitute* "src/include/config.h"
(("/usr/share/XaoS")
(string-append out "/share/XaoS")))
@@ -4554,7 +5259,7 @@ set.")
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/LLNL/hypre")
+ (url "https://github.com/hypre-space/hypre")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
@@ -4640,7 +5345,8 @@ set.")
'("HYPRE_usr_manual"
"HYPRE_ref_manual")))
#t))))))
- (home-page "http://www.llnl.gov/casc/hypre/")
+ (home-page "https://computing.llnl.gov/projects\
+/hypre-scalable-linear-solvers-multigrid-methods")
(synopsis "Library of solvers and preconditioners for linear equations")
(description
"HYPRE is a software library of high performance preconditioners and
@@ -4696,14 +5402,14 @@ supports compressed MAT files, as well as newer (version 7.3) MAT files.")
(define-public vc
(package
(name "vc")
- (version "1.4.1")
+ (version "1.4.2")
(source
(origin (method url-fetch)
(uri (string-append "https://github.com/VcDevel/Vc/releases/"
"download/" version "/Vc-" version ".tar.gz"))
(sha256
(base32
- "17qili8bf8r78cng65yf4qmgna8kiqjqbgcqbric6v9j6nkhkrk8"))))
+ "0lirdqzcxys9walz04bllsphydynk7973aimd5k1h1qbwi8z3lsh"))))
(build-system cmake-build-system)
(arguments
'(#:configure-flags
@@ -5062,7 +5768,7 @@ reduction.")
(define-public mcrl2
(package
(name "mcrl2")
- (version "202006.0")
+ (version "202106.0")
(source (origin
(method url-fetch)
(uri (string-append
@@ -5070,12 +5776,12 @@ reduction.")
version ".tar.gz"))
(sha256
(base32
- "167ryrzk1a2j53c2j198jlxa98amcaym070gkcj730619gymv5zl"))))
+ "0db9wgy9spwm76mgfisnifrlg69y9cadjgxjr4gdwzfgg6wgqf6d"))))
(inputs
`(("boost" ,boost)
("glu" ,glu)
("mesa" ,mesa)
- ("qtbase" ,qtbase)))
+ ("qtbase" ,qtbase-5)))
(build-system cmake-build-system)
(synopsis "Toolset for the mCRL2 formal specification language")
(description
@@ -5885,7 +6591,7 @@ management via the GIMPS project's Primenet server.")
(define-public nauty
(package
(name "nauty")
- (version "2.7r1")
+ (version "2.7r3")
(source
(origin
(method url-fetch)
@@ -5893,7 +6599,7 @@ management via the GIMPS project's Primenet server.")
"https://pallini.di.uniroma1.it/"
"nauty" (string-join (string-split version #\.) "") ".tar.gz"))
(sha256
- (base32 "0xsfqfcknbd6g6wzpa5l7crmmk3bf3zjh37rhylq6b20dqcmvjkn"))))
+ (base32 "1hl81gpf3xjf809w04jczvilq1ixy9ch1qrax8a7lgx52svna1jg"))))
(build-system gnu-build-system)
(outputs '("out" "lib"))
(arguments
@@ -6006,7 +6712,7 @@ functions.")
(base32
"0vh7cd1915bjqzkdp3sk25ngy8cq624mkh8c53c5bnzk357kb0fk"))))
(build-system cmake-build-system)
- (inputs `(("qtbase" ,qtbase)))
+ (inputs `(("qtbase" ,qtbase-5)))
(native-inputs `(("qttools" ,qttools)))
(arguments
`(#:phases
@@ -6066,7 +6772,7 @@ researchers and developers alike to get started on SAT.")
(define-public libqalculate
(package
(name "libqalculate")
- (version "3.8.0")
+ (version "3.19.0")
(source
(origin
(method git-fetch)
@@ -6075,7 +6781,7 @@ researchers and developers alike to get started on SAT.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1vbaza9c7159xf2ym90l0xkyj2mp6c3hbghhsqn29yvz08fda9df"))
+ (base32 "1w44407wb552q21dz4m2nwwdi8b9hzjb2w1l3ffsikzqckc7wbyj"))
(patches
(search-patches "libqalculate-3.8.0-libcurl-ssl-fix.patch"))))
(build-system gnu-build-system)
@@ -6120,7 +6826,7 @@ cli.")
(define-public qalculate-gtk
(package
(name "qalculate-gtk")
- (version "3.8.0")
+ (version "3.19.0")
(source
(origin
(method git-fetch)
@@ -6129,7 +6835,7 @@ cli.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "0nsg6dzg5r7rzqr671nvrf1c50rjwpz7bxv5f20i4s7agizgv840"))))
+ (base32 "1nrx7gp6f1yalbdda1gb97azhbr4xclq2xf08vvbvsk8jfd6fd2v"))))
(build-system glib-or-gtk-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)
@@ -6153,15 +6859,6 @@ cli.")
;; script, which has not yet been patched to replace /bin/sh.
(lambda _
(setenv "NOCONFIGURE" "TRUE")
- #t))
- (add-before 'check 'add-pot-file
- ;; the file contains translations and are currently not in use
- ;; left out on purpose so add it to POTFILES.skip
- (lambda _
- (with-output-to-file "po/POTFILES.skip"
- (lambda _
- (format #t "data/shortcuts.ui~%")
- #t))
#t)))))
(home-page "https://qalculate.github.io/")
(synopsis "Multi-purpose graphical desktop calculator")
@@ -6173,3 +6870,359 @@ and conversions, physical constants, symbolic calculations (including
integrals and equations), arbitrary precision, uncertainty propagation,
interval arithmetic, plotting.")
(license license:gpl2+)))
+
+(define-public numdiff
+ (package
+ (name "numdiff")
+ (version "5.9.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://savannah/numdiff/numdiff-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1vzmjh8mhwwysn4x4m2vif7q2k8i19x8azq7pzmkwwj4g48lla47"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:tests? #f ; There are no tests.
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'compress-documentation 'delete-precompressed-info-file
+ (lambda _
+ (delete-file (string-append (assoc-ref %outputs "out")
+ "/share/info/numdiff.info.gz"))
+ #t)))))
+ (home-page "https://nongnu.org/numdiff/")
+ (synopsis "Compare files with numeric fields")
+ (description
+ "Numdiff compares files line by line and field by field, ignoring small
+numeric differences and differences in numeric formats.")
+ (license license:gpl3+)))
+
+(define-public why3
+ (package
+ (name "why3")
+ (version "1.3.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://gforge.inria.fr/frs/download.php/file"
+ "/38367/why3-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1n0a2nn1gnk0zg339lh698g4wpk7m8m1vyi2yvifd5adqvk4milw"))))
+ (build-system ocaml-build-system)
+ (native-inputs
+ `(("coq" ,coq)
+ ("ocaml" ,ocaml)
+ ("which" ,which)))
+ (propagated-inputs
+ `(("camlzip" ,camlzip)
+ ("ocaml-graph" ,ocaml-graph)
+ ("ocaml-menhir" ,ocaml-menhir)
+ ("ocaml-num" ,ocaml-num)
+ ("ocaml-zarith" ,ocaml-zarith)))
+ (inputs
+ `(("coq-flocq" ,coq-flocq)
+ ("emacs-minimal" ,emacs-minimal)
+ ("zlib" ,zlib)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'fix-configure
+ (lambda _
+ (setenv "CONFIG_SHELL" (which "sh"))
+ (substitute* "configure"
+ ;; find ocaml-num in the correct directory
+ (("\\$DIR/nums.cma") "$DIR/num.cma")
+ (("\\$DIR/num.cmi") "$DIR/core/num.cmi"))
+ #t))
+ (add-after 'configure 'fix-makefile
+ (lambda _
+ (substitute* "Makefile"
+ ;; find ocaml-num in the correct directory
+ (("site-lib/num") "site-lib"))
+ #t))
+ (add-after 'install 'install-lib
+ (lambda _
+ (invoke "make" "byte")
+ (invoke "make" "install-lib")
+ #t)))))
+ (home-page "http://why3.lri.fr")
+ (synopsis "Deductive program verification")
+ (description "Why3 provides a language for specification and programming,
+called WhyML, and relies on external theorem provers, both automated and
+interactive, to discharge verification conditions. Why3 comes with a standard
+library of logical theories (integer and real arithmetic, Boolean operations,
+sets and maps, etc.) and basic programming data structures (arrays, queues,
+hash tables, etc.). A user can write WhyML programs directly and get
+correct-by-construction OCaml programs through an automated extraction
+mechanism. WhyML is also used as an intermediate language for the verification
+of C, Java, or Ada programs.")
+ (license license:lgpl2.1)))
+
+(define-public frama-c
+ (package
+ (name "frama-c")
+ (version "22.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://frama-c.com/download/frama-c-"
+ version "-Titanium.tar.gz"))
+ (sha256
+ (base32
+ "1mq1fijka95ydrla486yr4w6wdl9l7vmp512s1q00b0p6lmfwmkh"))))
+ (build-system ocaml-build-system)
+ (arguments
+ `(#:tests? #f; no test target in Makefile
+ #:phases
+ (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)))))
+ (inputs
+ `(("gmp" ,gmp)))
+ (propagated-inputs
+ `(("ocaml-biniou" ,ocaml-biniou)
+ ("ocaml-easy-format" ,ocaml-easy-format)
+ ("ocaml-graph" ,ocaml-graph)
+ ("ocaml-yojson" ,ocaml-yojson)
+ ("ocaml-zarith" ,ocaml-zarith)
+ ("why3" ,why3)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "FRAMAC_SHARE")
+ (files '("share/frama-c"))
+ (separator #f))
+ (search-path-specification
+ (variable "FRAMAC_LIB")
+ (files '("lib/frama-c"))
+ (separator #f))))
+ (home-page "http://frama-c.com")
+ (synopsis "C source code analysis platform")
+ (description "Frama-C is an extensible and collaborative platform dedicated
+to source-code analysis of C software. The Frama-C analyzers assist you in
+various source-code-related activities, from the navigation through unfamiliar
+projects up to the certification of critical software.")
+ (license license:lgpl2.1+)))
+
+(define-public blitz
+ (package
+ (name "blitz")
+ (version "1.0.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/blitzpp/blitz")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0c88gc72j3zggyk4yrrip6i0v7xkx97l140vpy3xhxs2i7xy1461"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags '("-DBUILD_DOC=ON"
+ "-DBUILD_TESTING=ON")
+ ;; The default "check" target also includes examples and benchmarks.
+ #:test-target "check-testsuite"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'build-doc
+ (lambda _
+ (invoke "make" "-j" (number->string (parallel-job-count))
+ "blitz-doc"))))))
+ (native-inputs
+ `(("python" ,python)
+ ("texinfo" ,texinfo)))
+ (synopsis "C++ template class library for multidimensional arrays")
+ (description "Blitz++ is a C++ template class library that provides
+high-performance multidimensional array containers for scientific computing.")
+ (home-page "https://github.com/blitzpp/blitz")
+ (license (list license:artistic2.0
+ license:bsd-3
+ license:lgpl3+))))
+
+(define-public fxdiv
+ ;; There is currently no tag in this repo.
+ (let ((commit "63058eff77e11aa15bf531df5dd34395ec3017c8")
+ (version "0.0")
+ (revision "1"))
+ (package
+ (name "fxdiv")
+ (version (git-version version revision commit))
+ (home-page "https://github.com/Maratyszcza/FXdiv")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference (url home-page) (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0zwzh8gmbx4m6b18s5nf13b0dk5yjkd1fs8f421bl7fz5f9gjd9f"))
+ (patches (search-patches "fxdiv-system-libraries.patch"))))
+ (build-system cmake-build-system)
+ (inputs
+ `(("googletest" ,googletest)
+ ("googlebenchmark" ,googlebenchmark)))
+ (synopsis
+ "C++ library for division via fixed-point multiplication by inverse")
+ (description
+ "On modern CPUs and GPUs, integer division is several times slower than
+multiplication. FXdiv implements an algorithm to replace an integer division
+with a multiplication and two shifts. This algorithm improves performance
+when an application performs repeated divisions by the same divisor.")
+ (license license:expat))))
+
+(define-public fp16
+ ;; There is currently no tag in this repo.
+ (let ((commit "0a92994d729ff76a58f692d3028ca1b64b145d91")
+ (version "0.0")
+ (revision "1"))
+ (package
+ (name "fp16")
+ (version (git-version version revision commit))
+ (home-page "https://github.com/Maratyszcza/FP16")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference (url home-page) (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "05mm4vrxsac35hjf5djif9r6rdxj9ippg97ia3p6q6b8lrp7srwv"))
+ (patches (search-patches "fp16-system-libraries.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:imported-modules ((guix build python-build-system)
+ ,@%cmake-build-system-modules)
+ #:modules (((guix build python-build-system)
+ #:select (site-packages))
+ (guix build cmake-build-system)
+ (guix build utils))
+ #:phases (modify-phases %standard-phases
+ (add-after 'install 'move-python-files
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Python files get installed to $includedir (!).
+ ;; Move them to the usual Python site directory.
+ (let* ((out (assoc-ref outputs "out"))
+ (include (string-append out "/include"))
+ (site (site-packages inputs outputs))
+ (target (string-append site "/fp16")))
+ (mkdir-p target)
+ (for-each (lambda (file)
+ (rename-file file
+ (string-append target "/"
+ (basename
+ file))))
+ (find-files include "\\.py$"))))))))
+ (native-inputs
+ `(("python-wrapper" ,python-wrapper)))
+ (inputs
+ `(("psimd" ,psimd)
+ ("googletest" ,googletest)
+ ("googlebenchmark" ,googlebenchmark)))
+ (synopsis "C++ library for half-precision floating point formats")
+ (description
+ "This header-only C++ library implements conversion to and from
+half-precision floating point formats.")
+ (license license:expat))))
+
+(define-public optizelle
+ (let ((commit "ed4160b5287518448caeb34789d92dc6a0b7e2cc"))
+ (package
+ (name "optizelle")
+ (version (git-version "1.3.0" "0" commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/OptimoJoe/Optizelle")
+ (commit commit)))
+ (file-name (git-file-name "optizelle" commit))
+ (sha256
+ (base32
+ "0rjrs5sdmd33a9f4xm8an7p0953aa0bxsmr4hs3ss1aad9k181vq"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; Reduce the stopping tolerance in one test so that the
+ ;; convergence check returns the correct stopping
+ ;; condition.
+ (substitute*
+ "src/unit/linear_algebra/tcg_loss_of_orthogonality.cpp"
+ (("1e-13") "5e-14"))
+ ;; Skip one set of python tests. See
+ ;; https://github.com/OptimoJoe/Optizelle/issues/2.
+ (substitute*
+ "src/examples/inequality_scaling/CMakeLists.txt"
+ (("add_unit(.*)\\$\\{interfaces\\}(.*)$" all middle end)
+ (string-append "add_unit" middle "\"cpp\"" end)))
+ ;; Install the licence for Optizelle, without also
+ ;; including the licences for the dependencies.
+ (substitute* "licenses/CMakeLists.txt"
+ (("file.*package.*$" all)
+ (string-append "# " all))
+ ((".*[^l].[.]txt\\)\n") "")
+ (("add_license.*\"\n") ""))
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:imported-modules ((guix build python-build-system)
+ ,@%cmake-build-system-modules)
+ #:modules (((guix build python-build-system) #:select
+ (python-version))
+ (guix build cmake-build-system)
+ (guix build utils))
+ #:configure-flags `("-DCMAKE_CXX_FLAGS:STRING=-pthread"
+ "-DENABLE_CPP_UNIT:BOOL=ON"
+ "-DENABLE_CPP_EXAMPLES:BOOL=ON"
+ "-DENABLE_PYTHON:BOOL=ON"
+ "-DENABLE_PYTHON_UNIT:BOOL=ON"
+ "-DENABLE_PYTHON_EXAMPLES:BOOL=ON"
+ ,(string-append "-DBLAS_LIBRARY:FILEPATH="
+ (assoc-ref %build-inputs
+ "blas/lapack")
+ "/lib/libopenblas.so")
+ ,(string-append "-DLAPACK_LIBRARY:FILEPATH="
+ (assoc-ref %build-inputs
+ "fortran:lib")
+ "/lib/libgfortran.so;"
+ (assoc-ref %build-inputs
+ "fortran:lib")
+ "/lib/libquadmath.so"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'set-numpy-path ; Needed for the unit tests.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((pyver (python-version (assoc-ref inputs "python")))
+ (npdir (string-append (assoc-ref inputs "numpy")
+ "/lib/python" pyver
+ "/site-packages")))
+ (substitute* "src/cmake/Modules/Optizelle.cmake"
+ (("PYTHONPATH=")
+ (string-append "LD_LIBRARY_PATH=$ENV{LIBRARY_PATH};"
+ "PYTHONPATH=" npdir ":"))))))
+ (delete 'install-license-files)))) ; LICENSE.txt is installed.
+ (inputs
+ `(("blas/lapack" ,openblas)
+ ("fortran:lib" ,gfortran "lib")
+ ("jsoncpp" ,jsoncpp)
+ ("numpy" ,python-numpy)
+ ("python" ,python)))
+ (native-inputs
+ `(("fortran" ,gfortran)
+ ("pkg-config" ,pkg-config)))
+ (home-page "https://www.optimojoe.com/products/optizelle/")
+ (synopsis "Mathematical optimization library")
+ (description "@code{optizelle} is a software library designed to
+solve nonlinear optimization problems. Four types of problem are
+considered: unconstrained, equality constrained, inequality
+constrained and constrained. Constraints may be applied as values of
+functions or sets of partial differential equations (PDEs).
+
+Solution algorithms such as the preconditioned nonlinear conjugate
+gradient method, sequential quadratic programming (SQP) and the
+primal-dual interior-point method are made available. Interfaces are
+provided for applications written in C++ and Python. Parallel
+computation is supported via MPI.")
+ (license license:bsd-2))))