gnu: xtensor: Update to 0.20.9.
[jackhill/guix/guix.git] / gnu / packages / algebra.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
3f074a21 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Andreas Enge <andreas@enge.fr>
4b0bf990 3;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
7f055a0a 4;;; Copyright © 2016, 2017, 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
69d5909e 5;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
67f39dd5 6;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
ecc5bc33 7;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
ff6807dc 8;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
f71f29ca 9;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
eb6785cf 10;;; Copyright © 2017, 2019 Eric Bavier <bavier@member.fsf.org>
2ed139c4 11;;;
233e7676 12;;; This file is part of GNU Guix.
2ed139c4 13;;;
233e7676 14;;; GNU Guix is free software; you can redistribute it and/or modify it
2ed139c4
AE
15;;; under the terms of the GNU General Public License as published by
16;;; the Free Software Foundation; either version 3 of the License, or (at
17;;; your option) any later version.
18;;;
233e7676 19;;; GNU Guix is distributed in the hope that it will be useful, but
2ed139c4
AE
20;;; WITHOUT ANY WARRANTY; without even the implied warranty of
21;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22;;; GNU General Public License for more details.
23;;;
24;;; You should have received a copy of the GNU General Public License
233e7676 25;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
2ed139c4 26
1ffa7090 27(define-module (gnu packages algebra)
59a43334 28 #:use-module (gnu packages)
14e6520e 29 #:use-module (gnu packages autotools)
fdb513a7 30 #:use-module (gnu packages bison)
70770b93 31 #:use-module (gnu packages check)
10b1f688 32 #:use-module (gnu packages compression)
70770b93 33 #:use-module (gnu packages cpp)
99828fa7 34 #:use-module (gnu packages documentation)
f71f29ca 35 #:use-module (gnu packages ed)
5894b604 36 #:use-module (gnu packages flex)
57497c57
NG
37 #:use-module (gnu packages fltk)
38 #:use-module (gnu packages gl)
aae03c48 39 #:use-module (gnu packages graphviz)
57497c57 40 #:use-module (gnu packages image)
c8d99608 41 #:use-module (gnu packages java)
aae03c48 42 #:use-module (gnu packages maths)
0fc54d4b 43 #:use-module (gnu packages mpi)
5894b604 44 #:use-module (gnu packages multiprecision)
1ffa7090 45 #:use-module (gnu packages perl)
4bf9cb40 46 #:use-module (gnu packages pkg-config)
6d3896b9 47 #:use-module (gnu packages pulseaudio)
aae03c48 48 #:use-module (gnu packages python)
1d6589db 49 #:use-module (gnu packages python-xyz)
5894b604 50 #:use-module (gnu packages readline)
b7194849 51 #:use-module (gnu packages shells)
8f9ac901 52 #:use-module (gnu packages tex)
f71f29ca 53 #:use-module (gnu packages texinfo)
57497c57 54 #:use-module (gnu packages xiph)
fb8d1be8 55 #:use-module (gnu packages xorg)
c8d99608 56 #:use-module (guix build-system ant)
7569c5cb 57 #:use-module (guix build-system gnu)
8f4b1dfb 58 #:use-module (guix build-system cmake)
1d6589db 59 #:use-module (guix build-system python)
5894b604 60 #:use-module (guix download)
c8d99608 61 #:use-module (guix git-download)
697eb65d 62 #:use-module (guix hg-download)
5894b604
TGR
63 #:use-module ((guix licenses) #:prefix license:)
64 #:use-module (guix packages)
7569c5cb 65 #:use-module (guix utils))
2ed139c4
AE
66
67
68(define-public mpfrcx
69 (package
70 (name "mpfrcx")
43a776e2 71 (version "0.5")
2ed139c4
AE
72 (source (origin
73 (method url-fetch)
74 (uri (string-append
43a776e2 75 "http://www.multiprecision.org/downloads/mpfrcx-"
2ed139c4
AE
76 version ".tar.gz"))
77 (sha256
78 (base32
43a776e2 79 "1s968480ymv6w0rnvfp9mxvx98hvi29fkvw8nk4ggzc6azxgwybs"))))
2ed139c4 80 (build-system gnu-build-system)
878c8f3f
AE
81 (propagated-inputs
82 `(("gmp" ,gmp)
83 ("mpfr" ,mpfr)
84 ("mpc" ,mpc))) ; Header files are included by mpfrcx.h.
35b9e423 85 (synopsis "Arithmetic of polynomials over arbitrary precision numbers")
2ed139c4 86 (description
35b9e423 87 "Mpfrcx is a library for the arithmetic of univariate polynomials over
2ed139c4 88arbitrary precision real (mpfr) or complex (mpc) numbers, without control
35b9e423 89on the rounding. For the time being, only the few functions needed to
2ed139c4 90implement the floating point approach to complex multiplication are
35b9e423 91implemented. On the other hand, these comprise asymptotically fast
e881752c 92multiplication routines such as Toom–Cook and the FFT.")
43a776e2 93 (license license:lgpl3+)
2ed139c4
AE
94 (home-page "http://mpfrcx.multiprecision.org/")))
95
7c5f6231
AE
96(define-public gf2x
97 (package
98 (name "gf2x")
99 (version "1.2")
100 (source (origin
101 (method url-fetch)
102 (uri (string-append
103 "https://gforge.inria.fr/frs/download.php/file/36934/gf2x-"
104 version ".tar.gz"))
105 (sha256
106 (base32
107 "0d6vh1mxskvv3bxl6byp7gxxw3zzpkldrxnyajhnl05m0gx7yhk1"))))
108 (build-system gnu-build-system)
109 (synopsis "Arithmetic of polynomials over binary finite fields")
110 (description
111 "The gf2x library provides arithmetic of polynomials over finite fields
112of characteristic 2. It implements the multiplication, squaring and
113greatest common divisor operations.")
114 (license license:gpl3+)
115 (home-page "https://gforge.inria.fr/projects/gf2x/")))
116
10b1f688
AE
117(define-public cm
118 (package
119 (name "cm")
81b55bf7 120 (version "0.3")
10b1f688
AE
121 (source (origin
122 (method url-fetch)
123 (uri (string-append
124 "http://www.multiprecision.org/cm/download/cm-"
125 version ".tar.gz"))
126 (sha256
127 (base32
81b55bf7 128 "1nf5kr0nqmhbzrsrinky18z0ighjpsmb5cr8zyg8jf04bfbyrfmc"))))
10b1f688
AE
129 (build-system gnu-build-system)
130 (propagated-inputs
131 `(("mpfrcx" ,mpfrcx)
132 ("zlib" ,zlib))) ; Header files included from cm_common.h.
133 (inputs
134 `(("pari-gp" ,pari-gp)))
135 (synopsis "CM constructions for elliptic curves")
136 (description
137 "The CM software implements the construction of ring class fields of
138imaginary quadratic number fields and of elliptic curves with complex
139multiplication via floating point approximations. It consists of libraries
140that can be called from within a C program and of executable command
141line applications.")
81b55bf7 142 (license license:gpl3+)
10b1f688
AE
143 (home-page "http://cm.multiprecision.org/")))
144
2ed139c4
AE
145(define-public fplll
146 (package
1de48e8f
NG
147 (name "fplll")
148 (version "5.2.1")
149 (source (origin
150 (method git-fetch)
151 (uri (git-reference
152 (url "https://github.com/fplll/fplll.git")
153 (commit version)))
154 (file-name (git-file-name name version))
155 (sha256
156 (base32
157 "015qmrd7nfaysbv1hbwiprz9g6hnww1y1z1xw8f43ysb7k1b5nbg"))))
158 (build-system gnu-build-system)
159 (native-inputs
160 `(("autoconf" ,autoconf)
161 ("automake" ,automake)
162 ("libtool" ,libtool)))
163 (inputs
164 `(("gmp" ,gmp)
165 ("mpfr" ,mpfr)))
166 (home-page "https://github.com/fplll/fplll")
167 (synopsis "Library for LLL-reduction of euclidean lattices")
168 (description
169 "fplll contains implementations of several lattice algorithms.
170The implementation relies on floating-point orthogonalization, and LLL
171is central to the code, hence the name.
172
173It includes implementations of floating-point LLL reduction
174algorithms, offering different speed/guarantees ratios. It contains
175a @emph{wrapper} choosing the estimated best sequence of variants in
176order to provide a guaranteed output as fast as possible. In the case
177of the wrapper, the succession of variants is oblivious to the user.
178
179It includes an implementation of the BKZ reduction algorithm,
180including the BKZ-2.0 improvements (extreme enumeration
181pruning, pre-processing of blocks, early termination). Additionally,
182Slide reduction and self dual BKZ are supported.
183
184It also includes a floating-point implementation of the
185Kannan-Fincke-Pohst algorithm that finds a shortest non-zero lattice
186vector. For the same task, the GaussSieve algorithm is also available
187in fplll. Finally, it contains a variant of the enumeration algorithm
188that computes a lattice vector closest to a given vector belonging to
189the real span of the lattice.")
190 (license license:lgpl2.1+)))
4e6b699d 191
25cbaa9e
NG
192(define-public python-fpylll
193 (package
194 (name "python-fpylll")
195 (version "0.4.1")
196 (source
197 (origin
198 ;; Pypi contains and older release, so we use a tagged release from
199 ;; Github instead.
200 (method git-fetch)
201 (uri (git-reference
202 (url "https://github.com/fplll/fpylll.git")
203 (commit (string-append version "dev"))))
204 (sha256
205 (base32
206 "01x2sqdv0sbjj4g4waj0hj4rcn4bq7h17442xaqwbznym9azmn9w"))))
207 (build-system python-build-system)
208 (inputs
209 `(("fplll" ,fplll)
210 ("gmp" ,gmp)
211 ("mpfr" ,mpfr)
212 ("pari-gp" ,pari-gp)))
213 (propagated-inputs
214 `(("cysignals" ,python-cysignals)
215 ("cython" ,python-cython)
216 ("flake8" ,python-flake8)
217 ("numpy" ,python-numpy)
218 ("pytest" ,python-pytest)))
219 (home-page "https://github.com/fplll/fpylll")
220 (synopsis "Python interface for fplll")
221 (description "fpylll is a Python wrapper for fplll.")
222 (license license:gpl2+)))
223
90a6d47c
AE
224(define-public pari-gp
225 (package
67f39dd5 226 (name "pari-gp")
a8ebf57c 227 (version "2.11.2")
67f39dd5
RW
228 (source (origin
229 (method url-fetch)
230 (uri (string-append
231 "https://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
232 version ".tar.gz"))
233 (sha256
234 (base32
a8ebf57c 235 "0fck8ssmirl8fy7s4mspgrxjs5sag76xbshqlqzkcl3kqyrk4raa"))))
67f39dd5
RW
236 (build-system gnu-build-system)
237 (native-inputs
238 `(("texlive" ,(texlive-union
f75aa97f 239 (list texlive-amsfonts)))))
67f39dd5
RW
240 (inputs `(("gmp" ,gmp)
241 ("libx11" ,libx11)
242 ("perl" ,perl)
243 ("readline" ,readline)))
244 (arguments
245 '(#:make-flags '("all")
246 #:test-target "dobench"
247 #:phases
248 (modify-phases %standard-phases
249 (replace 'configure
250 (lambda* (#:key outputs #:allow-other-keys)
251 (invoke "./Configure"
252 (string-append "--prefix="
253 (assoc-ref outputs "out"))))))))
254 (synopsis "PARI/GP, a computer algebra system for number theory")
255 (description
256 "PARI/GP is a widely used computer algebra system designed for fast
90a6d47c
AE
257computations in number theory (factorisations, algebraic number theory,
258elliptic curves...), but it also contains a large number of other useful
259functions to compute with mathematical entities such as matrices,
260polynomials, power series, algebraic numbers, etc., and a lot of
261transcendental functions.
262PARI is also available as a C library to allow for faster computations.")
67f39dd5
RW
263 (license license:gpl2+)
264 (home-page "https://pari.math.u-bordeaux.fr/")))
ed9f9a77 265
f854a8c1
AE
266(define-public gp2c
267 (package
268 (name "gp2c")
a71d42bc 269 (version "0.0.11pl2")
f854a8c1
AE
270 (source (origin
271 (method url-fetch)
272 (uri (string-append
eeb8b0e6 273 "https://pari.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-"
f854a8c1 274 version ".tar.gz"))
324bdcd8
AE
275 (sha256
276 (base32
a71d42bc 277 "0wqsf05wgkqvmmsx7jinvzdqav6rl56sr8haibgs31nzz4x9xz9g"))))
f854a8c1 278 (build-system gnu-build-system)
c67ccedd 279 (native-inputs `(("perl" ,perl)))
f854a8c1
AE
280 (inputs `(("pari-gp" ,pari-gp)))
281 (arguments
282 '(#:configure-flags
283 (list (string-append "--with-paricfg="
284 (assoc-ref %build-inputs "pari-gp")
285 "/lib/pari/pari.cfg"))))
286 (synopsis "PARI/GP, a computer algebra system for number theory")
287 (description
288 "PARI/GP is a widely used computer algebra system designed for fast
289computations in number theory (factorisations, algebraic number theory,
290elliptic curves...), but it also contains a large number of other useful
291functions to compute with mathematical entities such as matrices,
292polynomials, power series, algebraic numbers, etc., and a lot of
293transcendental functions.
294PARI is also available as a C library to allow for faster computations.
295
296GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
9f51293c 297 (license license:gpl2)
eeb8b0e6 298 (home-page "https://pari.math.u-bordeaux.fr/")))
f854a8c1 299
ddfb6280
TGR
300(define fplll-4-cmh
301 (package
302 (inherit fplll)
303 (name "fplll")
304 (version "4.0.4")
305 (source
306 (origin
307 (method url-fetch)
308 (uri (string-append
309 "http://perso.ens-lyon.fr/damien.stehle/fplll/libfplll-"
310 version ".tar.gz"))
311 (sha256
312 (base32 "1cbiby7ykis4z84swclpysrljmqhfcllpkcbll1m08rzskgb1a6b"))))))
313
eea7cd75
AE
314(define-public cmh
315 (package
316 (name "cmh")
317 (version "1.0")
318 (source (origin
319 (method url-fetch)
320 (uri (string-append
321 "https://gforge.inria.fr/frs/download.php/33497/cmh-"
322 version ".tar.gz"))
323 (sha256
324 (base32
325 "1a28xr9bs0igms0ik99x0w8lnb0jyfcmvyi26pbyh9ggcdivd33p"))))
326 (build-system gnu-build-system)
327 (inputs
328 `(("gmp" ,gmp)
329 ("mpfr" ,mpfr)
330 ("mpc" ,mpc)
331 ("mpfrcx" ,mpfrcx)
ddfb6280 332 ("fplll" ,fplll-4-cmh)
eea7cd75
AE
333 ("pari-gp" ,pari-gp)))
334 (synopsis "Igusa class polynomial computations")
335 (description
336 "The CMH software computes Igusa (genus 2) class polynomials, which
337parameterize the CM points in the moduli space of 2-dimensional abelian
338varieties, i.e. Jacobians of hyperelliptic curves.
339It can also be used to compute theta constants at arbitrary
340precision.")
341 (license license:gpl3+)
342 (home-page "http://cmh.gforge.inria.fr/")))
343
7fc0e3db 344(define-public giac
57497c57 345 (package
7fc0e3db 346 (name "giac")
d9e3f9d9 347 (version "1.5.0-63")
57497c57
NG
348 (source (origin
349 (method url-fetch)
350 ;; "~parisse/giac" is not used because the maintainer regularly
351 ;; overwrites the release tarball there, introducing a checksum
352 ;; mismatch every time. See
353 ;; <https://www-fourier.ujf-grenoble.fr/~parisse/debian/dists/stable/main/source/README>
354 (uri (string-append "https://www-fourier.ujf-grenoble.fr/"
355 "~parisse/debian/dists/stable/main/"
356 "source/giac_" version ".tar.gz"))
357 (sha256
358 (base32
d9e3f9d9 359 "1jp7awyp8j8w6fhn802z8ddbq1fxhkyk9xdf0mq0mm0chpkylwqk"))))
57497c57
NG
360 (build-system gnu-build-system)
361 (arguments
af90cc45
NG
362 `(#:modules ((ice-9 ftw)
363 (guix build utils)
364 (guix build gnu-build-system))
365 #:phases
57497c57
NG
366 (modify-phases %standard-phases
367 (add-after 'unpack 'patch-bin-cp
90d5ec55 368 ;; Some Makefiles contain hard-coded "/bin/cp".
57497c57 369 (lambda _
57497c57
NG
370 (substitute* (find-files "doc" "^Makefile")
371 (("/bin/cp") (which "cp")))
90d5ec55
NG
372 #t))
373 (add-after 'unpack 'disable-failing-test
374 ;; FIXME: Test failing. Not sure why.
375 (lambda _
376 (substitute* "check/Makefile.in"
377 (("chk_fhan11") ""))
af90cc45 378 #t))
9f73ac24 379 (add-after 'install 'fix-doc
af90cc45 380 (lambda* (#:key outputs #:allow-other-keys)
9f73ac24
NG
381 (let ((out (assoc-ref outputs "out")))
382 ;; Most French documentation has a non-commercial
383 ;; license, so we need to remove it.
384 (with-directory-excursion (string-append out "/share/giac/doc/fr")
385 (for-each delete-file-recursively
386 '("cascas" "casexo" "casgeo" "casrouge" "cassim"
387 "castor")))
388 ;; Remove duplicate documentation in
389 ;; "%out/share/doc/giac/", where Xcas does not expect
390 ;; to find it.
391 (delete-file-recursively (string-append out "/share/doc/giac"))
392 #t)))
393 (add-after 'install 'remove-unnecessary-executable
394 (lambda* (#:key outputs #:allow-other-keys)
395 (let ((out (assoc-ref outputs "out")))
396 (delete-file (string-append out "/bin/xcasnew"))
397 #t))))))
57497c57 398 (inputs
6d3896b9 399 ;;; TODO: Add libnauty.
57497c57 400 `(("fltk" ,fltk)
6d3896b9 401 ("glpk" ,glpk)
57497c57
NG
402 ("gmp" ,gmp)
403 ("gsl" ,gsl)
404 ("lapack" ,lapack)
405 ("libao" ,ao)
406 ("libjpeg" ,libjpeg)
407 ("libpng" ,libpng)
6d3896b9 408 ("libsamplerate" ,libsamplerate)
57497c57 409 ("libx11" ,libx11)
99a00446 410 ("libxinerama" ,libxinerama)
57497c57
NG
411 ("libxft" ,libxft)
412 ("libxt" ,libxt)
413 ("mesa" ,mesa)
414 ("mpfi" ,mpfi)
415 ("mpfr" ,mpfr)
416 ("ntl" ,ntl)
417 ("perl" ,perl)
418 ("pari-gp" ,pari-gp)
9f73ac24
NG
419 ("tcsh" ,tcsh)))
420 (native-inputs
6d3896b9
NG
421 `(("bison" ,bison)
422 ("flex" ,flex)
423 ("readline" ,readline)
a023ec6e 424 ("texlive" ,texlive-tiny)))
57497c57
NG
425 (home-page "https://www-fourier.ujf-grenoble.fr/~parisse/giac.html")
426 (synopsis "Computer algebra system")
427 (description
428 "Giac/Xcas is a computer algebra system. It has a compatibility mode for
429maple, mupad and the TI89. It is available as a standalone program (graphic
430or text interfaces) or as a C++ library.")
431 (license license:gpl3+)))
432
7fc0e3db 433(define-public giac-xcas
e0f3a4fe 434 (deprecated-package "giac-xcas" giac))
7fc0e3db 435
d7ab698a
AE
436(define-public flint
437 (package
438 (name "flint")
6c591c8e 439 (version "2.5.2")
d7ab698a
AE
440 (source (origin
441 (method url-fetch)
442 (uri (string-append
443 "http://flintlib.org/flint-"
444 version ".tar.gz"))
445 (sha256 (base32
6c591c8e 446 "11syazv1a8rrnac3wj3hnyhhflpqcmq02q8pqk2m6g2k6h0gxwfb"))
fc1adab1 447 (patches (search-patches "flint-ldconfig.patch"))))
d7ab698a 448 (build-system gnu-build-system)
df15d17d 449 (propagated-inputs
d7ab698a 450 `(("gmp" ,gmp)
df15d17d 451 ("mpfr" ,mpfr))) ; header files from both are included by flint/arith.h
d7ab698a 452 (arguments
ad11974e
AE
453 `(#:parallel-tests? #f ; seems to be necessary on arm
454 #:phases
91430de6
AE
455 (modify-phases %standard-phases
456 (replace 'configure
457 (lambda* (#:key inputs outputs #:allow-other-keys)
458 (let ((out (assoc-ref outputs "out"))
459 (gmp (assoc-ref inputs "gmp"))
460 (mpfr (assoc-ref inputs "mpfr")))
91430de6
AE
461 ;; do not pass "--enable-fast-install", which makes the
462 ;; homebrew configure process fail
50233d95 463 (invoke "./configure"
91430de6
AE
464 (string-append "--prefix=" out)
465 (string-append "--with-gmp=" gmp)
50233d95
RW
466 (string-append "--with-mpfr=" mpfr))
467 #t))))))
d7ab698a
AE
468 (synopsis "Fast library for number theory")
469 (description
470 "FLINT is a C library for number theory. It supports arithmetic
471with numbers, polynomials, power series and matrices over many base
472rings, including multiprecision integers and rationals, integers
473modulo n, p-adic numbers, finite fields (prime and non-prime order)
474and real and complex numbers (via the Arb extension library).
475
476Operations that can be performed include conversions, arithmetic,
477GCDs, factoring, solving linear systems, and evaluating special
478functions. In addition, FLINT provides various low-level routines for
479fast arithmetic.")
9f51293c 480 (license license:gpl2+)
d7ab698a
AE
481 (home-page "http://flintlib.org/")))
482
6b8e8285
AE
483(define-public arb
484 (package
6aa54e23 485 (name "arb")
402db511 486 (version "2.16.0")
6aa54e23
RW
487 (source (origin
488 (method git-fetch)
489 (uri (git-reference
490 (url "https://github.com/fredrik-johansson/arb.git")
491 (commit version)))
492 (file-name (git-file-name name version))
493 (sha256
494 (base32
402db511 495 "0478671wfwy3gl26sbxh1jq1ih36z4k72waa8y2y2lvn649gb7cd"))))
6aa54e23
RW
496 (build-system gnu-build-system)
497 (propagated-inputs
498 `(("flint" ,flint))) ; flint.h is included by arf.h
499 (inputs
500 `(("gmp" ,gmp)
501 ("mpfr" ,mpfr)))
502 (arguments
503 `(#:phases
504 (modify-phases %standard-phases
505 (replace 'configure
506 (lambda* (#:key inputs outputs #:allow-other-keys)
507 (let ((out (assoc-ref outputs "out"))
508 (flint (assoc-ref inputs "flint"))
509 (gmp (assoc-ref inputs "gmp"))
510 (mpfr (assoc-ref inputs "mpfr")))
511 ;; do not pass "--enable-fast-install", which makes the
512 ;; homebrew configure process fail
513 (invoke "./configure"
514 (string-append "--prefix=" out)
515 (string-append "--with-flint=" flint)
516 (string-append "--with-gmp=" gmp)
517 (string-append "--with-mpfr=" mpfr))))))))
518 (synopsis "Arbitrary precision floating-point ball arithmetic")
519 (description
520 "Arb is a C library for arbitrary-precision floating-point ball
6b8e8285
AE
521arithmetic. It supports efficient high-precision computation with
522polynomials, power series, matrices and special functions over the
523real and complex numbers, with automatic, rigorous error control.")
6aa54e23
RW
524 (license license:lgpl2.1+)
525 (home-page "http://fredrikj.net/arb/")))
6b8e8285 526
1d6589db
AE
527(define-public python-flint
528 (package
529 (name "python-flint")
530 (version "0.3.0")
531 (source (origin
532 (method git-fetch)
533 (uri (git-reference
534 (url "https://github.com/fredrik-johansson/python-flint.git")
535 (commit version)))
536 (file-name (git-file-name name version))
537 (sha256
538 (base32
539 "1v0anazbj1cfi68nl2j6dbd31kgkc1563xmr0zk5xk3xj78569pw"))
540 (patches (search-patches "python-flint-includes.patch"))))
541 (build-system python-build-system)
542 (native-inputs
543 `(("python-cython" ,python-cython)))
544 (propagated-inputs
545 `(("python-numpy" ,python-numpy)))
546 (inputs
547 `(("arb" ,arb)
548 ("flint" ,flint)))
549 (synopsis "Python module wrapping ARB and FLINT")
550 (description
551 "Python-flint is a Python extension module wrapping FLINT
552(Fast Library for Number Theory) and Arb (arbitrary-precision ball
553arithmetic). It supports integers, rationals, modular integers,
554real and complex ball arithmetic, polynomials and matrices over all
555these types and other mathematical functions.")
556 (license license:expat)
557 (home-page "http://fredrikj.net/python-flint/")))
558
14e6520e
AE
559(define-public ntl
560 (package
561 (name "ntl")
562 (version "9.7.0")
563 (source (origin
564 (method url-fetch)
565 (uri (string-append "http://shoup.net/ntl/ntl-"
566 version ".tar.gz"))
567 (sha256 (base32
568 "115frp5flyvw9wghz4zph1b3llmr5nbxk1skgsggckr81fh3gmxq"))))
569 (build-system gnu-build-system)
570 (native-inputs
571 `(("libtool" ,libtool)
572 ("perl" ,perl))) ; for configuration
573 ;; FIXME: Add optional input gf2x once available; then also add
574 ;; configure flag "NTL_GF2X_LIB=on".
575 (inputs
576 `(("gmp" ,gmp)))
577 (arguments
578 `(#:phases
579 (modify-phases %standard-phases
580 (replace 'configure
581 (lambda* (#:key outputs #:allow-other-keys)
582 (chdir "src")
583 (system* "./configure"
584 (string-append "PREFIX=" (assoc-ref outputs "out"))
585 ;; Do not build especially for the build machine.
586 "NATIVE=off"
587 ;; Also do not tune to the build machine.
588 "WIZARD=off"
589 "SHARED=on")
590 #t)))))
591 (synopsis "C++ library for number theory")
592 (description
593 "NTL is a C++ library providing data structures and algorithms
594for manipulating signed, arbitrary length integers, and for vectors,
595matrices, and polynomials over the integers and over finite fields.")
596 (license license:gpl2+)
597 (home-page "http://shoup.net/ntl/")))
598
aae03c48
AE
599(define-public singular
600 (package
601 (name "singular")
ff6807dc 602 (version "4.1.2p1")
f35c3bbb
KK
603 (source
604 (origin
605 (method url-fetch)
606 (uri
607 (string-append "http://www.mathematik.uni-kl.de/ftp/pub/Math/"
608 "Singular/SOURCES/"
609 (string-join
610 (string-split
611 (string-trim-right version #\p
612 0 (1- (string-length version)))
613 #\.) "-")
614 "/singular-" version ".tar.gz"))
615 (sha256 (base32
ff6807dc 616 "0kvd55353fiqyq1msmi0kka66n5h0aqs7m3km60r01b1w2f8085m"))))
aae03c48
AE
617 (build-system gnu-build-system)
618 (native-inputs
619 `(("doxygen" ,doxygen)
620 ("graphviz" ,graphviz)
621 ("perl" ,perl)))
622 (inputs
623 `(("cddlib" ,cddlib)
624 ("gmp" ,gmp)
625 ("flint" ,flint)
626 ("mpfr" ,mpfr)
627 ("ntl" ,ntl)
628 ("python" ,python-2)
629 ("readline" ,readline)))
630 (arguments
631 `(#:configure-flags
632 (list (string-append "--with-ntl="
633 (assoc-ref %build-inputs "ntl")))))
634 (synopsis "Computer algebra system for polynomial computations")
635 (description
636 "Singular is a computer algebra system for polynomial computations,
637with special emphasis on commutative and non-commutative algebra, algebraic
638geometry and singularity theory.")
639 ;; Singular itself is dual licensed gpl2 or gpl3, but some of the
640 ;; libraries with which it links are licensed under lgpl3+, so the
641 ;; combined work becomes gpl3. See COPYING in the source code.
642 (license license:gpl3)
643 (home-page "http://www.singular.uni-kl.de/index.php")))
644
57c9c349
AE
645(define-public gmp-ecm
646 (package
647 (name "gmp-ecm")
7d15cf17 648 (version "7.0.4")
57c9c349 649 (source (origin
7d15cf17
TGR
650 (method url-fetch)
651 ;; Use the ‘Latest version’ link for a stable URI across releases.
652 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
653 "latestfile/160/ecm-" version ".tar.gz"))
654 (sha256 (base32
655 "0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
57c9c349
AE
656 (build-system gnu-build-system)
657 (inputs
658 `(("gmp" ,gmp)))
659 (arguments
660 `(#:configure-flags '("--enable-shared"
661 ;; Disable specific assembly routines, which depend
662 ;; on the subarchitecture of the build machine,
663 ;; and use gmp instead.
664 "--disable-asm-redc")))
665 (synopsis "Integer factorization library using the elliptic curve method")
666 (description
667 "GMP-ECM factors integers using the elliptic curve method (ECM) as well
668as the P-1 and P+1 algorithms. It provides a library and a stand-alone
669binary.")
670 ;; Most files are under lgpl3+, but some are under gpl3+ or gpl2+,
671 ;; so the combined work is under gpl3+.
672 (license license:gpl3+)
673 (home-page "http://ecm.gforge.inria.fr/")))
674
ed9f9a77
LC
675(define-public bc
676 (package
677 (name "bc")
f71f29ca 678 (version "1.07.1")
ed9f9a77
LC
679 (source (origin
680 (method url-fetch)
681 (uri (string-append "mirror://gnu/bc/bc-" version ".tar.gz"))
682 (sha256
683 (base32
f71f29ca 684 "0amh9ik44jfg66csyvf4zz1l878c4755kjndq9j0270akflgrbb2"))))
ed9f9a77 685 (build-system gnu-build-system)
f71f29ca
MB
686 (native-inputs
687 `(("ed" ,ed)
688 ("flex" ,flex)
689 ("texinfo" ,texinfo)))
ed9f9a77 690 (arguments
f71f29ca 691 '(#:configure-flags
f0bacad6 692 (list "--with-readline")))
6fd52309 693 (home-page "https://www.gnu.org/software/bc/")
f50d2669 694 (synopsis "Arbitrary precision numeric processing language")
ed9f9a77 695 (description
a22dc0c4
LC
696 "bc is an arbitrary precision numeric processing language. It includes
697an interactive environment for evaluating mathematical statements. Its
698syntax is similar to that of C, so basic usage is familiar. It also includes
699\"dc\", a reverse-polish calculator.")
9f51293c 700 (license license:gpl2+)))
37e6cdcd 701
2a9b10c7
RW
702;; The original kiss-fft does not have a complete build system and does not
703;; build any shared libraries. This is a fork used by Extempore.
704(define-public kiss-fft-for-extempore
705 (package
706 (name "kiss-fft-for-extempore")
707 (version "1.3.0")
708 (source (origin
9774fac4
RW
709 (method git-fetch)
710 (uri (git-reference
711 (url "https://github.com/extemporelang/kiss_fft.git")
712 (commit version)))
713 (file-name (git-file-name name version))
2a9b10c7
RW
714 (sha256
715 (base32
9774fac4 716 "0jasbmqy4wkqrqx3w64s1dfmj34875xmsl72mb26aa4hpyn14bi2"))))
2a9b10c7
RW
717 (build-system cmake-build-system)
718 (arguments `(#:tests? #f)) ; no tests included
39162ee4
RW
719 ;; Extempore refuses to build on architectures other than x86_64
720 (supported-systems '("x86_64-linux"))
2a9b10c7
RW
721 (home-page "https://github.com/extemporelang/kiss_fft")
722 (synopsis "Mixed-radix Fast Fourier Transform")
723 (description
724 "Kiss FFT attempts to be a reasonably efficient, moderately useful FFT
725that can use fixed or floating data types and can easily be incorporated into
726a C program.")
727 (license license:bsd-3)))
728
37e6cdcd
LC
729(define-public fftw
730 (package
731 (name "fftw")
bdb74478 732 (version "3.3.8")
37e6cdcd
LC
733 (source (origin
734 (method url-fetch)
735 (uri (string-append "ftp://ftp.fftw.org/pub/fftw/fftw-"
736 version".tar.gz"))
737 (sha256
738 (base32
bdb74478 739 "00z3k8fq561wq2khssqg0kallk0504dzlx989x3vvicjdqpjc4v1"))))
37e6cdcd
LC
740 (build-system gnu-build-system)
741 (arguments
65bb2279 742 `(#:configure-flags
69d5909e
MW
743 '("--enable-shared" "--enable-openmp" "--enable-threads"
744 ,@(let ((system (or (%current-target-system) (%current-system))))
745 ;; Enable SIMD extensions for codelets. See details at:
746 ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
747 (cond
748 ((string-prefix? "x86_64" system)
749 '("--enable-sse2" "--enable-avx" "--enable-avx2"
750 "--enable-avx512" "--enable-avx-128-fma"))
751 ((string-prefix? "i686" system)
752 '("--enable-sse2"))
753 ((string-prefix? "aarch64" system)
754 ;; Note that fftw supports NEON on 32-bit ARM only when
755 ;; compiled for single-precision.
756 '("--enable-neon"))
757 (else
758 '())))
65bb2279
EB
759 ;; By default '-mtune=native' is used. However, that may cause the
760 ;; use of ISA extensions (e.g. AVX) that are not necessarily
761 ;; available on the user's machine when that package is built on a
762 ;; different machine.
763 "ax_cv_c_flags__mtune_native=no")))
37e6cdcd
LC
764 (native-inputs `(("perl" ,perl)))
765 (home-page "http://fftw.org")
766 (synopsis "Computing the discrete Fourier transform")
767 (description
768 "FFTW is a C subroutine library for computing the discrete Fourier
769transform (DFT) in one or more dimensions, of arbitrary input size, and of
770both real and complex data (as well as of even/odd data---i.e. the discrete
771cosine/ sine transforms or DCT/DST).")
9f51293c 772 (license license:gpl2+)))
7569c5cb
EB
773
774(define-public fftwf
775 (package (inherit fftw)
776 (name "fftwf")
777 (arguments
778 (substitute-keyword-arguments (package-arguments fftw)
69d5909e
MW
779 ((#:configure-flags fftw-configure-flags)
780 `(cons* "--enable-single"
781 ,@(if (string-prefix? "arm" (or (%current-target-system)
782 (%current-system)))
783 ;; fftw supports NEON on 32-bit ARM only when compiled
784 ;; for single-precision, so add it here.
785 '("--enable-neon")
786 '())
787 ,fftw-configure-flags))))
7569c5cb
EB
788 (description
789 (string-append (package-description fftw)
790 " Single-precision version."))))
e5c66f8c
EB
791
792(define-public fftw-openmpi
793 (package (inherit fftw)
794 (name "fftw-openmpi")
795 (inputs
796 `(("openmpi" ,openmpi)
797 ,@(package-inputs fftw)))
798 (arguments
799 (substitute-keyword-arguments (package-arguments fftw)
800 ((#:configure-flags cf)
eb6785cf
EB
801 `(cons "--enable-mpi" ,cf))
802 ((#:phases phases '%standard-phases)
803 `(modify-phases ,phases
804 (add-before 'check 'mpi-setup
805 ,%openmpi-setup)))))
e5c66f8c
EB
806 (description
807 (string-append (package-description fftw)
808 " With OpenMPI parallelism support."))))
8f4b1dfb 809
c8d99608
RW
810(define-public java-la4j
811 (package
812 (name "java-la4j")
813 (version "0.6.0")
814 (source (origin
815 (method git-fetch)
816 (uri (git-reference
817 (url "https://github.com/vkostyukov/la4j.git")
818 (commit version)))
819 (file-name (string-append name "-" version "-checkout"))
820 (sha256
821 (base32
822 "1qir8dr978cfvz9k12m2kbdwpyf6cqdf1d0ilb7lnkhbgq5i53w3"))))
823 (build-system ant-build-system)
824 (arguments
825 `(#:jar-name "la4j.jar"
826 #:jdk ,icedtea-8
827 #:test-exclude (list "**/Abstract*.java"
828 "**/MatrixTest.java"
829 "**/DenseMatrixTest.java"
830 "**/SparseMatrixTest.java"
831 "**/VectorTest.java"
832 "**/SparseVectorTest.java"
833 "**/DenseVectorTest.java")))
834 (native-inputs
835 `(("java-junit" ,java-junit)
836 ("java-hamcrest-core" ,java-hamcrest-core)))
837 (home-page "http://la4j.org/")
838 (synopsis "Java library that provides Linear Algebra primitives and algorithms")
839 (description "The la4j library is a Java library that provides Linear
840Algebra primitives (matrices and vectors) and algorithms. The key features of
841the la4j library are:
842
843@itemize
844@item No dependencies and tiny size
845@item Fluent object-oriented/functional API
846@item Sparse (CRS, CCS) and dense (1D/2D arrays) matrices
847@item Linear systems solving (Gaussian, Jacobi, Zeidel, Square Root, Sweep and other)
848@item Matrices decomposition (Eigenvalues/Eigenvectors, SVD, QR, LU, Cholesky and other)
849@item MatrixMarket/CSV IO formats support for matrices and vectors
850@end itemize\n")
851 (license license:asl2.0)))
852
24074b0b
RW
853(define-public java-jlargearrays
854 (package
855 (name "java-jlargearrays")
856 (version "1.6")
857 (source (origin
858 (method url-fetch)
859 (uri (string-append "http://search.maven.org/remotecontent?"
860 "filepath=pl/edu/icm/JLargeArrays/"
861 version "/JLargeArrays-" version
862 "-sources.jar"))
863 (file-name (string-append name "-" version ".jar"))
864 (sha256
865 (base32
866 "0v05iphpxbjnd7f4jf1rlqq3m8hslhcm0imdbsgxr20pi3xkaf2a"))))
867 (build-system ant-build-system)
868 (arguments
869 `(#:jar-name "jlargearrays.jar"
870 #:tests? #f ; tests are not included in the release archive
871 #:jdk ,icedtea-8))
872 (propagated-inputs
873 `(("java-commons-math3" ,java-commons-math3)))
874 (home-page "https://gitlab.com/ICM-VisLab/JLargeArrays")
875 (synopsis "Library of one-dimensional arrays that can store up to 263 elements")
876 (description "JLargeArrays is a Java library of one-dimensional arrays
877that can store up to 263 elements.")
878 (license license:bsd-2)))
879
4e92911c
RW
880(define-public java-jtransforms
881 (package
882 (name "java-jtransforms")
883 (version "3.1")
884 (source (origin
885 (method url-fetch)
886 (uri (string-append "http://search.maven.org/remotecontent?"
887 "filepath=com/github/wendykierp/JTransforms/"
888 version "/JTransforms-" version "-sources.jar"))
889 (sha256
890 (base32
891 "1haw5m8shv5srgcpwkl853dz8bv6h90bzlhcps6mdpb4cixjirsg"))))
892 (build-system ant-build-system)
893 (arguments
894 `(#:jar-name "jtransforms.jar"
895 #:tests? #f ; tests are not included in the release archive
896 #:jdk ,icedtea-8))
897 (propagated-inputs
898 `(("java-commons-math3" ,java-commons-math3)
899 ("java-jlargearrays" ,java-jlargearrays)))
900 (home-page "https://github.com/wendykierp/JTransforms")
901 (synopsis "Multithreaded FFT library written in pure Java")
902 (description "JTransforms is a multithreaded FFT library written in pure
903Java. Currently, four types of transforms are available: @dfn{Discrete
904Fourier Transform} (DFT), @dfn{Discrete Cosine Transform} (DCT), @dfn{Discrete
905Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
906 (license license:bsd-2)))
907
8f4b1dfb
LC
908(define-public eigen
909 (package
910 (name "eigen")
8cd80a4b 911 (version "3.3.5")
8f4b1dfb
LC
912 (source (origin
913 (method url-fetch)
914 (uri (string-append "https://bitbucket.org/eigen/eigen/get/"
9b268f12 915 version ".tar.bz2"))
8f4b1dfb
LC
916 (sha256
917 (base32
8cd80a4b 918 "1qh3yrwn78ms5yhwbpl5wvblk4gbz02cacdygxylr7i9xbrvylkk"))
2abcc935 919 (file-name (string-append name "-" version ".tar.bz2"))
8f4b1dfb
LC
920 (modules '((guix build utils)))
921 (snippet
922 ;; There are 3 test failures in the "unsupported" directory,
923 ;; but maintainers say it's a known issue and it's unsupported
924 ;; anyway, so just skip them.
1137d85b 925 '(begin
44884a9d
RW
926 (substitute* "unsupported/CMakeLists.txt"
927 (("add_subdirectory\\(test.*")
928 "# Do not build the tests for unsupported features.\n"))
6cbee49d 929 #t))))
8f4b1dfb
LC
930 (build-system cmake-build-system)
931 (arguments
932 '(;; Turn off debugging symbols to save space.
933 #:build-type "Release"
934
354f4fe2 935 #:phases (modify-phases %standard-phases
ef8742ea 936 (replace 'check
354f4fe2 937 (lambda _
354f4fe2
LC
938 (let* ((cores (parallel-job-count))
939 (dash-j (format #f "-j~a" cores)))
1137d85b 940 (setenv "EIGEN_SEED" "1") ;for reproducibility
ef8742ea
LC
941 ;; First build the tests, in parallel. See
942 ;; <http://eigen.tuxfamily.org/index.php?title=Tests>.
fbe9c80f 943 (invoke "make" "buildtests" dash-j)
8f4b1dfb 944
fbe9c80f
TGR
945 ;; Then run 'CTest' with -V so we get more
946 ;; details upon failure.
947 (invoke "ctest" "-V" dash-j)))))))
eeb8b0e6 948 (home-page "https://eigen.tuxfamily.org")
8f4b1dfb
LC
949 (synopsis "C++ template library for linear algebra")
950 (description
951 "Eigen is a C++ template library for linear algebra: matrices, vectors,
952numerical solvers, and related algorithms. It provides an elegant API based
953on \"expression templates\". It is versatile: it supports all matrix sizes,
954all standard numeric types, various matrix decompositions and geometry
955features, and more.")
956
957 ;; Most of the code is MPLv2, with a few files under LGPLv2.1+ or BSD-3.
958 ;; See 'COPYING.README' for details.
9f51293c 959 (license license:mpl2.0)))
70770b93 960
697eb65d
RW
961(define-public eigen-for-tensorflow
962 (let ((changeset "fd6845384b86")
963 (revision "1"))
964 (package (inherit eigen)
965 (name "eigen-for-tensorflow")
966 (version (string-append "3.3.5-" revision "." changeset))
967 (source (origin
968 (method hg-fetch)
969 (uri (hg-reference
970 (url "https://bitbucket.org/eigen/eigen")
971 (changeset changeset)))
972 (sha256
973 (base32
974 "12cwgah63wqwb66xji048hcxc1z5zjg8a7701zlia5zbilnnk1n5"))
975 (file-name (string-append name "-" version "-checkout"))
976 (modules '((guix build utils)))
977 (snippet
978 ;; There are 3 test failures in the "unsupported" directory,
979 ;; but maintainers say it's a known issue and it's unsupported
980 ;; anyway, so just skip them.
981 '(begin
982 (substitute* "unsupported/CMakeLists.txt"
983 (("add_subdirectory\\(test.*")
984 "# Do not build the tests for unsupported features.\n"))
985 #t)))))))
986
70770b93
FT
987(define-public xtensor
988 (package
989 (name "xtensor")
aec6c09a 990 (version "0.20.9")
70770b93 991 (source (origin
e1ecaa83
KK
992 (method git-fetch)
993 (uri (git-reference
994 (url "https://github.com/QuantStack/xtensor.git")
995 (commit version)))
70770b93
FT
996 (sha256
997 (base32
aec6c09a 998 "1rw04bdi7mzp362dhkxr9m4rafnvb47xjsi9p3fp4vfif8v0jij8"))
e1ecaa83 999 (file-name (git-file-name name version))))
70770b93
FT
1000 (build-system cmake-build-system)
1001 (native-inputs
1002 `(("googletest" ,googletest)
1003 ("xtl" ,xtl)))
1004 (arguments
1005 `(#:configure-flags
1006 '("-DBUILD_TESTS=ON")
1007 #:test-target "xtest"))
1008 (home-page "http://quantstack.net/xtensor")
1009 (synopsis "C++ tensors with broadcasting and lazy computing")
1010 (description "xtensor is a C++ library meant for numerical analysis with
1011multi-dimensional array expressions.
1012
1013xtensor provides:
1014@itemize
1015@item an extensible expression system enabling lazy broadcasting.
1016@item an API following the idioms of the C++ standard library.
1017@item tools to manipulate array expressions and build upon xtensor.
1018@end itemize")
1019 (license license:bsd-3)))
3f074a21
AE
1020
1021(define-public gap
1022 (package
1023 (name "gap")
c8a227df 1024 (version "4.10.2")
3f074a21
AE
1025 (source
1026 (origin
1027 (method url-fetch)
1028 (uri (string-append "https://www.gap-system.org/pub/gap/gap-"
1029 (version-major+minor version)
1030 "/tar.bz2/gap-"
1031 version
1032 ".tar.bz2"))
1033 (sha256
c8a227df 1034 (base32 "0cp6ddk0469zzv1m1vair6gm27ic6c5m77ri8rn0znq3gaps6x94"))
3f074a21
AE
1035 (modules '((guix build utils) (ice-9 ftw) (srfi srfi-1)))
1036 (snippet
1037 '(begin
1038 ;; Delete the external gmp and zlib libraries
1039 ;; and a subdirectory not needed for our build.
1040 (for-each delete-file-recursively
1041 '("extern" "hpcgap"))
1042 ;; Delete a failing test.
1043 ;; FIXME: This might be fixed in the next release, see
1044 ;; https://github.com/gap-system/gap/issues/3292
1045 (delete-file "tst/testinstall/dir.tst")
1046 ;; Delete all packages except for a fixed list.
1047 (with-directory-excursion "pkg"
1048 (for-each delete-file-recursively
1049 (lset-difference string=? (scandir ".")
1050 '("." ".."
1051 ;; Necessary packages.
1052 "GAPDoc-1.6.2"
1053 "primgrp-3.3.2"
1054 "SmallGrp-1.3" ; artistic2.0
1055 "transgrp" ; artistic2.0 for data,
1056 ; gpl2 or gpl3 for code
1057 ;; Recommanded package.
1058 "io-4.5.4" ; gpl3+
1059 ;; Optional packages, searched for at start,
1060 ;; and their depedencies.
1061 "alnuth-3.1.0"
3f074a21
AE
1062 "autpgrp-1.10"
1063 "crisp-1.4.4" ; bsd-2
bf95a142 1064 "ctbllib" ; gpl3+ according to doc/chap0.txt
3f074a21
AE
1065 "FactInt-1.6.2"
1066 "fga"
1067 "irredsol-1.4" ; bsd-2
bf95a142 1068 "laguna-3.9.2"
3f074a21
AE
1069 "polenta-1.3.8"
1070 "polycyclic-2.14"
1071 "radiroot-2.8"
1072 "resclasses-4.7.1"
1073 "sophus-1.24"
bf95a142
AE
1074 "tomlib-1.2.7" ; gpl2+, clarified in the git repository
1075 ; and the next release
3f074a21
AE
1076 "utils-0.59"))))
1077 #t))))
1078 (build-system gnu-build-system)
1079 (inputs
1080 `(("gmp" ,gmp)
1081 ("zlib" ,zlib)))
1082 (arguments
bf95a142
AE
1083 `(#:modules ((ice-9 ftw)
1084 (srfi srfi-26)
1085 (guix build gnu-build-system)
1086 (guix build utils))
1087 #:phases
3f074a21
AE
1088 (modify-phases %standard-phases
1089 (add-after 'build 'build-packages
1090 ;; Compile all packages that have not been deleted by the
1091 ;; code snippet above.
1092 (lambda _
1093 (setenv "CONFIG_SHELL" (which "bash"))
1094 (with-directory-excursion "pkg"
1095 (invoke "../bin/BuildPackages.sh")
1096 #t)))
1097 (add-after 'build-packages 'build-doc
1098 ;; The documentation is bundled, but we create it from source.
1099 (lambda _
1100 (with-directory-excursion "doc"
1101 (invoke "./make_doc"))
1102 #t))
3f074a21
AE
1103 (replace 'install
1104 (lambda* (#:key outputs #:allow-other-keys)
1105 (let* ((out (assoc-ref outputs "out"))
1106 (bin (string-append out "/bin"))
bf95a142 1107 (lib (string-append out "/lib"))
3f074a21
AE
1108 (prog (string-append bin "/gap"))
1109 (prog-real (string-append bin "/.gap-real"))
1110 (share (string-append out "/share/gap"))
bf95a142
AE
1111 (include (string-append out "/include/gap"))
1112 (include-hpc (string-append include "/hpc")))
3f074a21
AE
1113 ;; Install only the gap binary; the gac compiler is left
1114 ;; for maybe later. "Wrap" it in a shell script that calls
1115 ;; the binary with the correct parameter.
1116 (mkdir-p bin)
1117 (copy-file "gap" prog-real)
1118 (call-with-output-file prog
1119 (lambda (port)
1120 (format port
1121 "#!~a~%exec ~a -l ~a \"$@\"~%"
1122 (which "bash")
1123 prog-real
1124 share)))
1125 (chmod prog #o755)
bf95a142
AE
1126 ;; Install the headers, which are needed by Sage. The
1127 ;; Makefile target "install-headers" was available in
1128 ;; gap-4.10.0, but has been commented out in gap-4.10.1.
1129 (mkdir-p include-hpc)
3f074a21 1130 (install-file "gen/config.h" include)
bf95a142
AE
1131 (let ((file-name-predicate-without-stat
1132 (lambda (regex)
1133 (cut (file-name-predicate regex) <> #f))))
1134 (with-directory-excursion "src"
1135 (for-each
1136 (cut install-file <> include)
1137 (scandir "."
1138 (file-name-predicate-without-stat ".*\\.h$"))))
1139 (with-directory-excursion "src/hpc"
1140 (for-each
1141 (cut install-file <> include-hpc)
1142 (scandir "."
1143 (file-name-predicate-without-stat ".*\\.h$")))))
1144 ;; Install the library, which is needed by Sage. The
1145 ;; Makefile target "install-libgap" was available in
1146 ;; gap-4.10.0, but has been commented out in gap-4.10.1.
1147 ;; Compared to the Makefile, which used libtool, the
1148 ;; following approach of copying files and making symlinks
1149 ;; is rather pedestrian. There is hope that some later
1150 ;; version of gap reinstates and completes the install
1151 ;; targets.
1152 (invoke "make" "libgap.la")
1153 (install-file "libgap.la" lib)
1154 (install-file ".libs/libgap.so.0.0.0" lib)
1155 (symlink "libgap.so.0.0.0" (string-append lib "/libgap.so"))
1156 (symlink "libgap.so.0.0.0" (string-append lib "/libgap.so.0"))
3f074a21
AE
1157 ;; Install a certain number of files and directories to
1158 ;; SHARE, where the wrapped shell script expects them.
1159 ;; Remove information on the build directory from sysinfo.gap.
1160 (substitute* "sysinfo.gap"
1161 (("GAP_BIN_DIR=\".*\"") "GAP_BIN_DIR=\"\"")
1162 (("GAP_LIB_DIR=\".*\"") "GAP_LIB_DIR=\"\"")
1163 (("GAP_CPPFLAGS=\".*\"") "GAP_CPPFLAGS=\"\""))
1164 (install-file "sysinfo.gap" share)
1165 (copy-recursively "grp" (string-append share "/grp"))
1166 (copy-recursively "pkg" (string-append share "/pkg"))
1167 ;; The following is not the C library libgap.so, but a
1168 ;; library of GAP code.
1169 (copy-recursively "lib" (string-append share "/lib"))
1170 ;; The gap binary looks for documentation inside SHARE.
1171 (copy-recursively "doc" (string-append share "/doc")))
1172 #t)))))
1173 (home-page "https://www.gap-system.org/")
1174 (synopsis
1175 "System for computational group theory")
1176 (description
1177 "GAP is a system for computational discrete algebra, with particular
1178emphasis on computational group theory. It provides a programming language,
1179a library of thousands of functions implementing algebraic algorithms
1180written in the GAP language as well as large data libraries of algebraic
1181objects.")
1182 ;; Some packages have different licenses (effectively forcing the
1183 ;; combined work to be licensed as gpl3+); if this is the case, this
1184 ;; is mentioned above next to their name.
1185 ;; Some packages have no license mentioned explicitly; supposedly this
1186 ;; means that the gpl2+ licence of GAP itself applies, but to be on the
1187 ;; safe side, we drop them for now.
1188 (license license:gpl2+)))
f0fbb31d
AE
1189
1190(define-public givaro
1191 (package
1192 (name "givaro")
1193 (version "4.1.1")
1194 (source (origin
1195 (method git-fetch)
1196 (uri (git-reference
1197 (url "https://github.com/linbox-team/givaro")
1198 (commit (string-append "v" version))))
1199 (file-name (git-file-name name version))
1200 (sha256
1201 (base32
1202 "11wz57q6ijsvfs5r82masxgr319as92syi78lnl9lgdblpc6xigk"))))
1203 (build-system gnu-build-system)
1204 (native-inputs
1205 `(("autoconf" ,autoconf)
1206 ("automake" ,automake)
1207 ("libtool" ,libtool)))
1208 (propagated-inputs
1209 `(("gmp" ,gmp))) ; gmp++.h includes gmpxx.h
1210 (arguments
1211 `(#:phases
1212 (modify-phases %standard-phases
1213 (add-before 'bootstrap 'setenv
1214 ;; Prevent the autogen.sh script to carry out the configure
1215 ;; script, which has not yet been patched to replace /bin/sh.
1216 (lambda _
1217 (setenv "NOCONFIGURE" "yes")
1218 #t)))))
1219 (synopsis "Algebraic computations with exact rings and fields")
1220 (description
1221 "Givaro is a C++ library implementing the basic arithmetic of various
1222algebraic objects: prime fields, extension fields, finite fields, finite
1223rings, polynomials, algebraic numbers, arbitrary precision integers and
1224rationals (C++ wrappers over gmp), fixed precision integers. It also
1225provides data-structures and templated classes for the manipulation of
1226compound objects, such as vectors, matrices and univariate polynomials.")
1227 (license license:cecill-b)
1228 (home-page "https://github.com/linbox-team/givaro")))
4bf9cb40
AE
1229
1230(define-public fflas-ffpack
1231 (package
1232 (name "fflas-ffpack")
1233 (version "2.4.3")
1234 (source (origin
1235 (method git-fetch)
1236 (uri (git-reference
1237 (url "https://github.com/linbox-team/fflas-ffpack")
1238 (commit version)))
1239 (file-name (git-file-name name version))
1240 (sha256
1241 (base32
1242 "1ynbjd72qrwp0b4kpn0p5d7gddpvj8dlb5fwdxajr5pvkvi3if74"))))
1243 (build-system gnu-build-system)
1244 (native-inputs
1245 `(("autoconf" ,autoconf)
1246 ("automake" ,automake)
1247 ("libtool" ,libtool)
1248 ("pkg-config" ,pkg-config)))
1249 (inputs
1250 `(("openblas" ,openblas)))
1251 (propagated-inputs
1252 `(("givaro" ,givaro))) ; required according to the .pc file
1253 (arguments
1254 `(#:configure-flags
1255 (list (string-append "--with-blas-libs="
1256 (assoc-ref %build-inputs "openblas")
1257 "/lib/libopenblas.so"))
1258 #:phases
1259 (modify-phases %standard-phases
1260 (add-before 'bootstrap 'setenv
1261 ;; Prevent the autogen.sh script to carry out the configure
1262 ;; script, which has not yet been patched to replace /bin/sh.
1263 (lambda _
1264 (setenv "NOCONFIGURE" "yes")
1265 #t)))))
1266 (synopsis "C++ library for linear algebra over finite fields")
1267 (description
1268 "FFLAS-FFPACK is a C++ template library for basic linear algebra
1269operations over a finite field.
1270FFLAS (Finite Field Linear Algebra Subprograms) provides the implementation
1271of a subset of routines of the numerical BLAS; it also supports sparse
1272matrix-vector products.
1273FFPACK (Finite Field Linear Algebra Package) is inspired by the LAPACK
1274library to provide functionalities of higher level, using the kernel
1275of a BLAS. Additionally, it provides routines specific to exact linear
1276algebra, such as the row echelon form.")
1277 (license license:lgpl2.1+)
1278 (home-page "https://linbox-team.github.io/fflas-ffpack/")))
a612f866
AE
1279
1280(define-public linbox
1281 (package
1282 (name "linbox")
1283 (version "1.6.3")
1284 (source (origin
1285 (method git-fetch)
1286 (uri (git-reference
1287 (url "https://github.com/linbox-team/linbox")
1288 (commit (string-append "v" version))))
1289 (file-name (git-file-name name version))
1290 (sha256
1291 (base32
1292 "10j6dspbsq7d2l4q3y0c1l1xwmaqqba2fxg59q5bhgk9h5d7q571"))))
1293 (build-system gnu-build-system)
1294 (native-inputs
1295 `(("autoconf" ,autoconf)
1296 ("automake" ,automake)
1297 ("libtool" ,libtool)
1298 ("pkg-config" ,pkg-config)))
1299 (inputs
1300 `(("fflas-ffpack" ,fflas-ffpack)))
1301 (arguments
1302 `(#:phases
1303 (modify-phases %standard-phases
1304 (add-before 'bootstrap 'setenv
1305 ;; Prevent the autogen.sh script to carry out the configure
1306 ;; script, which has not yet been patched to replace /bin/sh.
1307 (lambda _
1308 (setenv "NOCONFIGURE" "yes")
1309 #t)))))
1310 (synopsis "C++ library for linear algebra over exact rings")
1311 (description
1312 "LinBox is a C++ template library for exact linear algebra computation
1313with dense, sparse, and structured matrices over the integers and over
1314finite fields.")
1315 (license license:lgpl2.1+)
1316 (home-page "https://linbox-team.github.io/linbox/")))
37edfb0f
AE
1317
1318(define-public m4ri
1319 (package
1320 (name "m4ri")
1321 (version "20140914")
1322 (source (origin
1323 (method git-fetch)
1324 (uri (git-reference
1325 (url "https://bitbucket.org/malb/m4ri")
1326 (commit (string-append "release-" version))))
1327 (file-name (git-file-name name version))
1328 (sha256
1329 (base32
1330 "0xfg6pffbn8r1s0y7bn9b8i55l00d41dkmhrpf7pwk53qa3achd3"))))
1331 (build-system gnu-build-system)
1332 (native-inputs
1333 `(("autoconf" ,autoconf)
1334 ("automake" ,automake)
1335 ("libtool" ,libtool)
1336 ("pkg-config" ,pkg-config)))
1337 (inputs
1338 `(("libpng" ,libpng)))
1339 (synopsis "Arithmetic of dense matrices over F_2")
1340 (description "M4RI is a library for fast arithmetic with dense matrices
1341over F2. The name M4RI comes from the first implemented algorithm: The
1342Method of the Four Russians inversion algorithm published by Gregory Bard.
1343This algorithm in turn is named after the Method of the Four Russians
1344multiplication algorithm.")
1345 (license license:gpl2+)
1346 (home-page "https://bitbucket.org/malb/m4ri/")))
ab398380 1347
75a73bb0
NG
1348(define-public symmetrica
1349 (package
1350 (name "symmetrica")
1351 (version "2.0")
1352 (source (origin
1353 (method url-fetch/tarbomb)
1354 (uri (let ((v (string-join (string-split version #\.) "_")))
1355 (string-append "http://www.algorithm.uni-bayreuth.de/"
1356 "en/research/SYMMETRICA/"
1357 "SYM" v "_tar.gz")))
1358 (sha256
1359 (base32
1360 "1qhfrbd5ybb0sinl9pad64rscr08qvlfzrzmi4p4hk61xn6phlmz"))
1361 ;; Taken from <https://git.sagemath.org/sage.git/plain/build/pkgs/symmetrica/patches/>
1362 (patches (search-patches "symmetrica-bruch.patch"
1363 "symmetrica-int32.patch"
1364 "symmetrica-return_values.patch"
1365 "symmetrica-sort_sum_rename.patch"))))
1366 (build-system gnu-build-system)
1367 (arguments
1368 `(#:tests? #f ;no test
1369 #:phases
1370 (modify-phases %standard-phases
1371 (add-after 'unpack 'fix-makefile
1372 (lambda _
1373 (substitute* "makefile"
e6eafd42 1374 (("cc -c") "gcc -c -fPIC"))
75a73bb0
NG
1375 #t))
1376 (add-after 'fix-makefile 'turn-off-banner
1377 (lambda _
1378 (substitute* "de.c"
1379 (("(INT no_banner = )FALSE" _ pre) (string-append pre "TRUE")))
1380 #t))
1381 (delete 'configure) ;no configure script
1382 (replace 'install ;no install target
1383 (lambda* (#:key outputs #:allow-other-keys)
1384 (let* ((out (assoc-ref outputs "out"))
1385 (lib (string-append out "/lib"))
1386 (inc (string-append out "/include/symmetrica"))
1387 (doc (string-append out "/share/doc/symmetrica-" ,version))
1388 (static "libsymmetrica.a"))
1389 ;; Build static library.
1390 (apply invoke "ar" "crs" static (find-files "." "\\.o$"))
1391 (invoke "ranlib" static)
1392 ;; Install static library and headers.
1393 (for-each (lambda (f) (install-file f inc))
1394 (find-files "." "\\.h$"))
1395 (install-file "libsymmetrica.a" lib)
1396 ;; Install documentation.
1397 (for-each (lambda (f) (install-file f doc))
1398 (find-files "." "\\.doc$"))
1399 #t))))))
1400 (home-page "http://www.algorithm.uni-bayreuth.de/en/research/SYMMETRICA/")
1401 (synopsis "Combinatoric C Library")
1402 (description "Symmetrica is a library for combinatorics. It has support
1403for the representation theory of the symmetric group and related groups,
1404combinatorics of tableaux, symmetric functions and polynomials, Schubert
1405polynomials, and the representation theory of Hecke algebras of type A_n.")
1406 (license license:public-domain)))
6cbedbd2
AE
1407
1408(define-public m4rie
1409 (package
1410 (name "m4rie")
1411 (version "20150908")
1412 (source (origin
1413 (method git-fetch)
1414 (uri (git-reference
1415 (url "https://bitbucket.org/malb/m4rie")
1416 (commit (string-append "release-" version))))
1417 (file-name (git-file-name name version))
1418 (sha256
1419 (base32
1420 "0r8lv46qx5mkz5kp3ay2jnsp0mbhlqr5z2z220wdk73wdshcznss"))))
1421 (build-system gnu-build-system)
1422 (native-inputs
1423 `(("autoconf" ,autoconf)
1424 ("automake" ,automake)
1425 ("libtool" ,libtool)))
1426 (inputs
1427 `(("m4ri" ,m4ri)))
1428 (synopsis "Arithmetic of dense matrices over F_{2^e}")
1429 (description "M4RI is a library for fast arithmetic with dense matrices
1430over finite fields of characteristic 2. So it extends the functionality
1431of M4RI from F_2 to F_{2^e}.")
1432 (license license:gpl2+)
1433 (home-page "https://bitbucket.org/malb/m4rie/")))
66c67e7b
AE
1434
1435(define-public eclib
1436 (package
1437 (name "eclib")
9a5f35fe 1438 (version "20190909")
66c67e7b
AE
1439 (source (origin
1440 (method git-fetch)
1441 (uri (git-reference
1442 (url "https://github.com/JohnCremona/eclib/")
1443 (commit (string-append "v" version))))
1444 (file-name (git-file-name name version))
1445 (sha256
1446 (base32
9a5f35fe 1447 "1gw27lqc3f525n8qdcmr2nyn16y9g10z9f6dnmckyyxcdzvhq35n"))))
66c67e7b
AE
1448 (build-system gnu-build-system)
1449 (native-inputs
1450 `(("autoconf" ,autoconf)
1451 ("automake" ,automake)
1452 ("libtool" ,libtool)))
1453 (inputs
1454 `(("gmp" ,gmp)
1455 ("ntl" ,ntl)
1456 ("pari-gp" ,pari-gp)))
1457 (synopsis "Ranks of elliptic curves and modular symbols")
1458 (description "The eclib package includes mwrank (for 2-descent on
1459elliptic curves over Q) and modular symbol code; it has been written by
1460John Cremona to compute his elliptic curve database.")
1461 (license license:gpl2+)
1462 (home-page (string-append "http://homepages.warwick.ac.uk/staff/"
1463 "J.E.Cremona/mwrank/index.html"))))
197ebc36
AE
1464
1465(define-public lrcalc
1466 (package
1467 (name "lrcalc")
1468 (version "1.2")
1469 (source (origin
1470 (method git-fetch)
1471 (uri (git-reference
1472 (url "https://bitbucket.org/asbuch/lrcalc")
1473 (commit (string-append "lrcalc-" version))))
1474 (file-name (git-file-name name version))
1475 (sha256
1476 (base32
88f913e8
AE
1477 "1c12d04jdyxkkav4ak8d1aqrv594gzihwhpxvc6p9js0ry1fahss"))
1478 (patches (search-patches "lrcalc-includes.patch"))))
197ebc36
AE
1479 (build-system gnu-build-system)
1480 (native-inputs
1481 `(("autoconf" ,autoconf)
1482 ("automake" ,automake)
1483 ("libtool" ,libtool)))
1484 (arguments
1485 `(#:phases
1486 (modify-phases %standard-phases
1487 (add-before 'build 'fix-permission
1488 (lambda _
1489 (chmod "lrcalc.maple.src" #o644)
1490 #t)))))
1491 (synopsis "Littlewood-Richardson calculator in algebraic combinatorics")
1492 (description "The Littlewood-Richardson Calculator (lrcalc) is a
1493program designed to compute Littlewood-Richardson coefficients. It computes
1494single Littlewood-Richardson coefficients, products of Schur functions, or
1495skew Schur functions. In addition it computes products in the small quantum
1496cohomology ring of a Grassmann variety. The software package also includes
1497a program that performs fast computation of the more general multiplicative
1498structure constants of Schubert polynomials.")
1499 (license license:gpl2+)
1500 (home-page "http://sites.math.rutgers.edu/~asbuch/lrcalc/")))
eacf2983
AE
1501
1502(define-public iml
1503 (package
1504 (name "iml")
1505 (version "1.0.5")
1506 (source
1507 (origin
1508 (method url-fetch)
1509 (uri (string-append "http://www.cs.uwaterloo.ca/~astorjoh/iml-"
1510 version ".tar.bz2"))
1511 (sha256
1512 (base32
1513 "0akwhhz9b40bz6lrfxpamp7r7wkk48p455qbn04mfnl9a1l6db8x"))))
1514 (build-system gnu-build-system)
1515 (inputs
1516 `(("gmp", gmp)
1517 ("cblas" ,openblas))) ; or any other BLAS library; the documentation
1518 ; mentions ATLAS in particular
1519 (arguments
1520 `(#:configure-flags
1521 (list
c68ec87c 1522 "--enable-shared"
eacf2983
AE
1523 (string-append "--with-gmp-include="
1524 (assoc-ref %build-inputs "gmp") "/include")
1525 (string-append "--with-gmp-lib="
1526 (assoc-ref %build-inputs "gmp") "/lib")
1527 "--with-cblas=-lopenblas"
1528 (string-append "--with-cblas-include="
1529 (assoc-ref %build-inputs "cblas") "/include")
1530 (string-append "--with-cblas-lib="
1531 (assoc-ref %build-inputs "cblas") "/lib"))))
1532 (home-page "https://cs.uwaterloo.ca/~astorjoh/iml.html")
1533 (synopsis
1534 "Solver for systems of linear equations over the integers")
1535 (description
1536 "IML is a C library implementing algorithms for computing exact
1537solutions to dense systems of linear equations over the integers.
1538Currently, IML provides the following functionality:
1539
1540@itemize
1541@item Nonsingular rational system solving:
1542compute the unique rational solution X to the system AX=B, where A and B
1543are integer matrices, A nonsingular.
1544@item Compute the right nullspace or kernel of an integer matrix.
1545@item Certified linear system solving:
1546compute a minimal denominator solution x to a system Ax=b, where b is an
1547integer vector and A is an integer matrix with arbitrary shape and
1548rank profile.
1549@end itemize
1550
1551In addition, IML provides some low level routines for a variety of mod p
1552matrix operations: computing the row-echelon form, determinant, rank
1553profile, and inverse of a mod p matrix. These mod p routines are not
1554general purpose; they require that p satisfy some preconditions based on
1555the dimension of the input matrix (usually p should be prime and should be
1556no more than about 20 bits long).")
1557 (license license:bsd-3)))