gnu: texlive-fonts-amsfonts: Build more fonts.
[jackhill/guix/guix.git] / gnu / packages / algebra.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
eea7cd75 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Andreas Enge <andreas@enge.fr>
4b0bf990 3;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
47fefe98 4;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
69d5909e 5;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
c8d99608 6;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
ecc5bc33 7;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
a0d4d2d8 8;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
f71f29ca 9;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
1137d85b 10;;; Copyright © 2017 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)
70770b93 30 #:use-module (gnu packages check)
10b1f688 31 #:use-module (gnu packages compression)
70770b93 32 #:use-module (gnu packages cpp)
99828fa7 33 #:use-module (gnu packages documentation)
f71f29ca 34 #:use-module (gnu packages ed)
5894b604 35 #:use-module (gnu packages flex)
57497c57
NG
36 #:use-module (gnu packages fltk)
37 #:use-module (gnu packages gl)
aae03c48 38 #:use-module (gnu packages graphviz)
57497c57 39 #:use-module (gnu packages image)
c8d99608 40 #:use-module (gnu packages java)
aae03c48 41 #:use-module (gnu packages maths)
0fc54d4b 42 #:use-module (gnu packages mpi)
5894b604 43 #:use-module (gnu packages multiprecision)
1ffa7090 44 #:use-module (gnu packages perl)
aae03c48 45 #:use-module (gnu packages python)
5894b604 46 #:use-module (gnu packages readline)
b7194849 47 #:use-module (gnu packages shells)
8f9ac901 48 #:use-module (gnu packages tex)
f71f29ca 49 #:use-module (gnu packages texinfo)
57497c57 50 #:use-module (gnu packages xiph)
fb8d1be8 51 #:use-module (gnu packages xorg)
c8d99608 52 #:use-module (guix build-system ant)
7569c5cb 53 #:use-module (guix build-system gnu)
8f4b1dfb 54 #:use-module (guix build-system cmake)
5894b604 55 #:use-module (guix download)
c8d99608 56 #:use-module (guix git-download)
5894b604
TGR
57 #:use-module ((guix licenses) #:prefix license:)
58 #:use-module (guix packages)
7569c5cb 59 #:use-module (guix utils))
2ed139c4
AE
60
61
62(define-public mpfrcx
63 (package
64 (name "mpfrcx")
43a776e2 65 (version "0.5")
2ed139c4
AE
66 (source (origin
67 (method url-fetch)
68 (uri (string-append
43a776e2 69 "http://www.multiprecision.org/downloads/mpfrcx-"
2ed139c4
AE
70 version ".tar.gz"))
71 (sha256
72 (base32
43a776e2 73 "1s968480ymv6w0rnvfp9mxvx98hvi29fkvw8nk4ggzc6azxgwybs"))))
2ed139c4 74 (build-system gnu-build-system)
878c8f3f
AE
75 (propagated-inputs
76 `(("gmp" ,gmp)
77 ("mpfr" ,mpfr)
78 ("mpc" ,mpc))) ; Header files are included by mpfrcx.h.
35b9e423 79 (synopsis "Arithmetic of polynomials over arbitrary precision numbers")
2ed139c4 80 (description
35b9e423 81 "Mpfrcx is a library for the arithmetic of univariate polynomials over
2ed139c4 82arbitrary precision real (mpfr) or complex (mpc) numbers, without control
35b9e423 83on the rounding. For the time being, only the few functions needed to
2ed139c4 84implement the floating point approach to complex multiplication are
35b9e423 85implemented. On the other hand, these comprise asymptotically fast
e881752c 86multiplication routines such as Toom–Cook and the FFT.")
43a776e2 87 (license license:lgpl3+)
2ed139c4
AE
88 (home-page "http://mpfrcx.multiprecision.org/")))
89
10b1f688
AE
90(define-public cm
91 (package
92 (name "cm")
81b55bf7 93 (version "0.3")
10b1f688
AE
94 (source (origin
95 (method url-fetch)
96 (uri (string-append
97 "http://www.multiprecision.org/cm/download/cm-"
98 version ".tar.gz"))
99 (sha256
100 (base32
81b55bf7 101 "1nf5kr0nqmhbzrsrinky18z0ighjpsmb5cr8zyg8jf04bfbyrfmc"))))
10b1f688
AE
102 (build-system gnu-build-system)
103 (propagated-inputs
104 `(("mpfrcx" ,mpfrcx)
105 ("zlib" ,zlib))) ; Header files included from cm_common.h.
106 (inputs
107 `(("pari-gp" ,pari-gp)))
108 (synopsis "CM constructions for elliptic curves")
109 (description
110 "The CM software implements the construction of ring class fields of
111imaginary quadratic number fields and of elliptic curves with complex
112multiplication via floating point approximations. It consists of libraries
113that can be called from within a C program and of executable command
114line applications.")
81b55bf7 115 (license license:gpl3+)
10b1f688
AE
116 (home-page "http://cm.multiprecision.org/")))
117
2ed139c4
AE
118(define-public fplll
119 (package
120 (name "fplll")
5a15ed50 121 (version "4.0.4")
2ed139c4
AE
122 (source (origin
123 (method url-fetch)
124 (uri (string-append
125 "http://perso.ens-lyon.fr/damien.stehle/fplll/libfplll-"
126 version ".tar.gz"))
127 (sha256 (base32
5a15ed50 128 "1cbiby7ykis4z84swclpysrljmqhfcllpkcbll1m08rzskgb1a6b"))))
2ed139c4
AE
129 (build-system gnu-build-system)
130 (inputs `(("gmp" ,gmp)
131 ("mpfr" ,mpfr)))
35b9e423 132 (synopsis "Library for LLL-reduction of euclidean lattices")
2ed139c4 133 (description
35b9e423 134 "fplll LLL-reduces euclidean lattices. Since version 3, it can also
2ed139c4 135solve the shortest vector problem.")
9f51293c 136 (license license:lgpl2.1+)
2ed139c4 137 (home-page "http://perso.ens-lyon.fr/damien.stehle/fplll/")))
4e6b699d 138
90a6d47c
AE
139(define-public pari-gp
140 (package
141 (name "pari-gp")
4ebfe99a 142 (version "2.11.1")
90a6d47c
AE
143 (source (origin
144 (method url-fetch)
145 (uri (string-append
eeb8b0e6 146 "https://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
90a6d47c 147 version ".tar.gz"))
f78c66aa
AE
148 (sha256
149 (base32
4ebfe99a 150 "1jfax92jpydjd02fwl30r6b8kfzqqd6sm4yx94gidyz9lqjb7a94"))))
90a6d47c 151 (build-system gnu-build-system)
a8b0948b 152 (native-inputs `(("texlive" ,texlive-tiny)))
90a6d47c 153 (inputs `(("gmp" ,gmp)
fb8d1be8 154 ("libx11" ,libx11)
90a6d47c
AE
155 ("perl" ,perl)
156 ("readline" ,readline)))
157 (arguments
9bd9486d 158 '(#:make-flags '("all")
12abb19d 159 #:test-target "dobench"
08595262
AE
160 #:phases (modify-phases %standard-phases
161 (replace 'configure
162 (lambda* (#:key outputs #:allow-other-keys)
163 (let ((out (assoc-ref outputs "out")))
164 (zero?
165 (system* "./Configure"
166 (string-append "--prefix=" out)))))))))
90a6d47c
AE
167 (synopsis "PARI/GP, a computer algebra system for number theory")
168 (description
169 "PARI/GP is a widely used computer algebra system designed for fast
170computations in number theory (factorisations, algebraic number theory,
171elliptic curves...), but it also contains a large number of other useful
172functions to compute with mathematical entities such as matrices,
173polynomials, power series, algebraic numbers, etc., and a lot of
174transcendental functions.
175PARI is also available as a C library to allow for faster computations.")
9f51293c 176 (license license:gpl2+)
eeb8b0e6 177 (home-page "https://pari.math.u-bordeaux.fr/")))
ed9f9a77 178
f854a8c1
AE
179(define-public gp2c
180 (package
181 (name "gp2c")
44ff80fc 182 (version "0.0.11pl1")
f854a8c1
AE
183 (source (origin
184 (method url-fetch)
185 (uri (string-append
eeb8b0e6 186 "https://pari.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-"
f854a8c1 187 version ".tar.gz"))
324bdcd8
AE
188 (sha256
189 (base32
44ff80fc 190 "1c6f6vmncw032kfzrfyr8bynw6yd3faxpy2285r009fmr0zxfs5s"))))
f854a8c1 191 (build-system gnu-build-system)
c67ccedd 192 (native-inputs `(("perl" ,perl)))
f854a8c1
AE
193 (inputs `(("pari-gp" ,pari-gp)))
194 (arguments
195 '(#:configure-flags
196 (list (string-append "--with-paricfg="
197 (assoc-ref %build-inputs "pari-gp")
198 "/lib/pari/pari.cfg"))))
199 (synopsis "PARI/GP, a computer algebra system for number theory")
200 (description
201 "PARI/GP is a widely used computer algebra system designed for fast
202computations in number theory (factorisations, algebraic number theory,
203elliptic curves...), but it also contains a large number of other useful
204functions to compute with mathematical entities such as matrices,
205polynomials, power series, algebraic numbers, etc., and a lot of
206transcendental functions.
207PARI is also available as a C library to allow for faster computations.
208
209GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
9f51293c 210 (license license:gpl2)
eeb8b0e6 211 (home-page "https://pari.math.u-bordeaux.fr/")))
f854a8c1 212
eea7cd75
AE
213(define-public cmh
214 (package
215 (name "cmh")
216 (version "1.0")
217 (source (origin
218 (method url-fetch)
219 (uri (string-append
220 "https://gforge.inria.fr/frs/download.php/33497/cmh-"
221 version ".tar.gz"))
222 (sha256
223 (base32
224 "1a28xr9bs0igms0ik99x0w8lnb0jyfcmvyi26pbyh9ggcdivd33p"))))
225 (build-system gnu-build-system)
226 (inputs
227 `(("gmp" ,gmp)
228 ("mpfr" ,mpfr)
229 ("mpc" ,mpc)
230 ("mpfrcx" ,mpfrcx)
231 ("fplll" ,fplll)
232 ("pari-gp" ,pari-gp)))
233 (synopsis "Igusa class polynomial computations")
234 (description
235 "The CMH software computes Igusa (genus 2) class polynomials, which
236parameterize the CM points in the moduli space of 2-dimensional abelian
237varieties, i.e. Jacobians of hyperelliptic curves.
238It can also be used to compute theta constants at arbitrary
239precision.")
240 (license license:gpl3+)
241 (home-page "http://cmh.gforge.inria.fr/")))
242
57497c57
NG
243(define-public giac-xcas
244 (package
245 (name "giac-xcas")
31603ee6 246 (version "1.5.0-29")
57497c57
NG
247 (source (origin
248 (method url-fetch)
249 ;; "~parisse/giac" is not used because the maintainer regularly
250 ;; overwrites the release tarball there, introducing a checksum
251 ;; mismatch every time. See
252 ;; <https://www-fourier.ujf-grenoble.fr/~parisse/debian/dists/stable/main/source/README>
253 (uri (string-append "https://www-fourier.ujf-grenoble.fr/"
254 "~parisse/debian/dists/stable/main/"
255 "source/giac_" version ".tar.gz"))
256 (sha256
257 (base32
31603ee6 258 "1d904w02x6i26crbvw2d25v7j1hv1w461casyj5mgh42kzcdhb4c"))))
57497c57 259 (build-system gnu-build-system)
af90cc45 260 (outputs '("out" "doc")) ;77MiB of documentation
57497c57 261 (arguments
af90cc45
NG
262 `(#:modules ((ice-9 ftw)
263 (guix build utils)
264 (guix build gnu-build-system))
265 #:phases
57497c57
NG
266 (modify-phases %standard-phases
267 (add-after 'unpack 'patch-bin-cp
90d5ec55 268 ;; Some Makefiles contain hard-coded "/bin/cp".
57497c57 269 (lambda _
57497c57
NG
270 (substitute* (find-files "doc" "^Makefile")
271 (("/bin/cp") (which "cp")))
90d5ec55
NG
272 #t))
273 (add-after 'unpack 'disable-failing-test
274 ;; FIXME: Test failing. Not sure why.
275 (lambda _
276 (substitute* "check/Makefile.in"
277 (("chk_fhan11") ""))
af90cc45
NG
278 #t))
279 (add-after 'install 'install-doc
280 ;; Setting --docdir to "doc" output isn't sufficient as
281 ;; documentation and examples are scattered throughout the source.
282 (lambda* (#:key outputs #:allow-other-keys)
283 (let* ((out (assoc-ref outputs "out"))
284 (doc (assoc-ref outputs "doc"))
285 (docdir (string-append doc
286 "/share/doc/"
287 (string-append ,name "-" ,version))))
288 ;; For some reason, the install process moves
289 ;; "share/giac/examples" instead of "share/giac/doc" to
290 ;; "$(docdir)". Clean up the mess and start over.
291 (delete-file-recursively (string-append doc "/share"))
292 (mkdir-p docdir)
293 (with-directory-excursion out
294 (for-each (lambda (f)
295 (unless (member f '("." ".."))
296 (copy-recursively (string-append "share/giac/" f)
297 (string-append docdir "/" f))))
298 (scandir "share/giac"))
299 (delete-file-recursively "share/giac")))
57497c57
NG
300 #t)))))
301 (inputs
302 `(("fltk" ,fltk)
303 ("gmp" ,gmp)
304 ("gsl" ,gsl)
305 ("lapack" ,lapack)
306 ("libao" ,ao)
307 ("libjpeg" ,libjpeg)
308 ("libpng" ,libpng)
309 ("libx11" ,libx11)
99a00446 310 ("libxinerama" ,libxinerama)
57497c57
NG
311 ("libxft" ,libxft)
312 ("libxt" ,libxt)
313 ("mesa" ,mesa)
314 ("mpfi" ,mpfi)
315 ("mpfr" ,mpfr)
316 ("ntl" ,ntl)
317 ("perl" ,perl)
318 ("pari-gp" ,pari-gp)
319 ("tcsh" ,tcsh)
a023ec6e 320 ("texlive" ,texlive-tiny)))
57497c57
NG
321 (native-inputs `(("readline" ,readline)))
322 (home-page "https://www-fourier.ujf-grenoble.fr/~parisse/giac.html")
323 (synopsis "Computer algebra system")
324 (description
325 "Giac/Xcas is a computer algebra system. It has a compatibility mode for
326maple, mupad and the TI89. It is available as a standalone program (graphic
327or text interfaces) or as a C++ library.")
328 (license license:gpl3+)))
329
d7ab698a
AE
330(define-public flint
331 (package
332 (name "flint")
6c591c8e 333 (version "2.5.2")
d7ab698a
AE
334 (source (origin
335 (method url-fetch)
336 (uri (string-append
337 "http://flintlib.org/flint-"
338 version ".tar.gz"))
339 (sha256 (base32
6c591c8e 340 "11syazv1a8rrnac3wj3hnyhhflpqcmq02q8pqk2m6g2k6h0gxwfb"))
fc1adab1 341 (patches (search-patches "flint-ldconfig.patch"))))
d7ab698a 342 (build-system gnu-build-system)
df15d17d 343 (propagated-inputs
d7ab698a 344 `(("gmp" ,gmp)
df15d17d 345 ("mpfr" ,mpfr))) ; header files from both are included by flint/arith.h
d7ab698a 346 (arguments
ad11974e
AE
347 `(#:parallel-tests? #f ; seems to be necessary on arm
348 #:phases
91430de6
AE
349 (modify-phases %standard-phases
350 (replace 'configure
351 (lambda* (#:key inputs outputs #:allow-other-keys)
352 (let ((out (assoc-ref outputs "out"))
353 (gmp (assoc-ref inputs "gmp"))
354 (mpfr (assoc-ref inputs "mpfr")))
91430de6
AE
355 ;; do not pass "--enable-fast-install", which makes the
356 ;; homebrew configure process fail
357 (zero? (system*
358 "./configure"
359 (string-append "--prefix=" out)
360 (string-append "--with-gmp=" gmp)
361 (string-append "--with-mpfr=" mpfr)))))))))
d7ab698a
AE
362 (synopsis "Fast library for number theory")
363 (description
364 "FLINT is a C library for number theory. It supports arithmetic
365with numbers, polynomials, power series and matrices over many base
366rings, including multiprecision integers and rationals, integers
367modulo n, p-adic numbers, finite fields (prime and non-prime order)
368and real and complex numbers (via the Arb extension library).
369
370Operations that can be performed include conversions, arithmetic,
371GCDs, factoring, solving linear systems, and evaluating special
372functions. In addition, FLINT provides various low-level routines for
373fast arithmetic.")
9f51293c 374 (license license:gpl2+)
d7ab698a
AE
375 (home-page "http://flintlib.org/")))
376
6b8e8285
AE
377(define-public arb
378 (package
6aa54e23
RW
379 (name "arb")
380 (version "2.14.0")
381 (source (origin
382 (method git-fetch)
383 (uri (git-reference
384 (url "https://github.com/fredrik-johansson/arb.git")
385 (commit version)))
386 (file-name (git-file-name name version))
387 (sha256
388 (base32
389 "1ndxg7h4xvccjgp5l9z2f8b66dsff6fhf86bn5n7f75a1ksd7554"))))
390 (build-system gnu-build-system)
391 (propagated-inputs
392 `(("flint" ,flint))) ; flint.h is included by arf.h
393 (inputs
394 `(("gmp" ,gmp)
395 ("mpfr" ,mpfr)))
396 (arguments
397 `(#:phases
398 (modify-phases %standard-phases
399 (replace 'configure
400 (lambda* (#:key inputs outputs #:allow-other-keys)
401 (let ((out (assoc-ref outputs "out"))
402 (flint (assoc-ref inputs "flint"))
403 (gmp (assoc-ref inputs "gmp"))
404 (mpfr (assoc-ref inputs "mpfr")))
405 ;; do not pass "--enable-fast-install", which makes the
406 ;; homebrew configure process fail
407 (invoke "./configure"
408 (string-append "--prefix=" out)
409 (string-append "--with-flint=" flint)
410 (string-append "--with-gmp=" gmp)
411 (string-append "--with-mpfr=" mpfr))))))))
412 (synopsis "Arbitrary precision floating-point ball arithmetic")
413 (description
414 "Arb is a C library for arbitrary-precision floating-point ball
6b8e8285
AE
415arithmetic. It supports efficient high-precision computation with
416polynomials, power series, matrices and special functions over the
417real and complex numbers, with automatic, rigorous error control.")
6aa54e23
RW
418 (license license:lgpl2.1+)
419 (home-page "http://fredrikj.net/arb/")))
6b8e8285 420
14e6520e
AE
421(define-public ntl
422 (package
423 (name "ntl")
424 (version "9.7.0")
425 (source (origin
426 (method url-fetch)
427 (uri (string-append "http://shoup.net/ntl/ntl-"
428 version ".tar.gz"))
429 (sha256 (base32
430 "115frp5flyvw9wghz4zph1b3llmr5nbxk1skgsggckr81fh3gmxq"))))
431 (build-system gnu-build-system)
432 (native-inputs
433 `(("libtool" ,libtool)
434 ("perl" ,perl))) ; for configuration
435 ;; FIXME: Add optional input gf2x once available; then also add
436 ;; configure flag "NTL_GF2X_LIB=on".
437 (inputs
438 `(("gmp" ,gmp)))
439 (arguments
440 `(#:phases
441 (modify-phases %standard-phases
442 (replace 'configure
443 (lambda* (#:key outputs #:allow-other-keys)
444 (chdir "src")
445 (system* "./configure"
446 (string-append "PREFIX=" (assoc-ref outputs "out"))
447 ;; Do not build especially for the build machine.
448 "NATIVE=off"
449 ;; Also do not tune to the build machine.
450 "WIZARD=off"
451 "SHARED=on")
452 #t)))))
453 (synopsis "C++ library for number theory")
454 (description
455 "NTL is a C++ library providing data structures and algorithms
456for manipulating signed, arbitrary length integers, and for vectors,
457matrices, and polynomials over the integers and over finite fields.")
458 (license license:gpl2+)
459 (home-page "http://shoup.net/ntl/")))
460
aae03c48
AE
461(define-public singular
462 (package
463 (name "singular")
f35c3bbb
KK
464 (version "4.1.1p3")
465 (source
466 (origin
467 (method url-fetch)
468 (uri
469 (string-append "http://www.mathematik.uni-kl.de/ftp/pub/Math/"
470 "Singular/SOURCES/"
471 (string-join
472 (string-split
473 (string-trim-right version #\p
474 0 (1- (string-length version)))
475 #\.) "-")
476 "/singular-" version ".tar.gz"))
477 (sha256 (base32
478 "1qqj9bm9pkzm0iyycpvm8x6s79wws3nq60lz25h8x1q61h3426sm"))))
aae03c48
AE
479 (build-system gnu-build-system)
480 (native-inputs
481 `(("doxygen" ,doxygen)
482 ("graphviz" ,graphviz)
483 ("perl" ,perl)))
484 (inputs
485 `(("cddlib" ,cddlib)
486 ("gmp" ,gmp)
487 ("flint" ,flint)
488 ("mpfr" ,mpfr)
489 ("ntl" ,ntl)
490 ("python" ,python-2)
491 ("readline" ,readline)))
492 (arguments
493 `(#:configure-flags
494 (list (string-append "--with-ntl="
495 (assoc-ref %build-inputs "ntl")))))
496 (synopsis "Computer algebra system for polynomial computations")
497 (description
498 "Singular is a computer algebra system for polynomial computations,
499with special emphasis on commutative and non-commutative algebra, algebraic
500geometry and singularity theory.")
501 ;; Singular itself is dual licensed gpl2 or gpl3, but some of the
502 ;; libraries with which it links are licensed under lgpl3+, so the
503 ;; combined work becomes gpl3. See COPYING in the source code.
504 (license license:gpl3)
505 (home-page "http://www.singular.uni-kl.de/index.php")))
506
57c9c349
AE
507(define-public gmp-ecm
508 (package
509 (name "gmp-ecm")
7d15cf17 510 (version "7.0.4")
57c9c349 511 (source (origin
7d15cf17
TGR
512 (method url-fetch)
513 ;; Use the ‘Latest version’ link for a stable URI across releases.
514 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
515 "latestfile/160/ecm-" version ".tar.gz"))
516 (sha256 (base32
517 "0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
57c9c349
AE
518 (build-system gnu-build-system)
519 (inputs
520 `(("gmp" ,gmp)))
521 (arguments
522 `(#:configure-flags '("--enable-shared"
523 ;; Disable specific assembly routines, which depend
524 ;; on the subarchitecture of the build machine,
525 ;; and use gmp instead.
526 "--disable-asm-redc")))
527 (synopsis "Integer factorization library using the elliptic curve method")
528 (description
529 "GMP-ECM factors integers using the elliptic curve method (ECM) as well
530as the P-1 and P+1 algorithms. It provides a library and a stand-alone
531binary.")
532 ;; Most files are under lgpl3+, but some are under gpl3+ or gpl2+,
533 ;; so the combined work is under gpl3+.
534 (license license:gpl3+)
535 (home-page "http://ecm.gforge.inria.fr/")))
536
ed9f9a77
LC
537(define-public bc
538 (package
539 (name "bc")
f71f29ca 540 (version "1.07.1")
ed9f9a77
LC
541 (source (origin
542 (method url-fetch)
543 (uri (string-append "mirror://gnu/bc/bc-" version ".tar.gz"))
544 (sha256
545 (base32
f71f29ca 546 "0amh9ik44jfg66csyvf4zz1l878c4755kjndq9j0270akflgrbb2"))))
ed9f9a77 547 (build-system gnu-build-system)
f71f29ca
MB
548 (native-inputs
549 `(("ed" ,ed)
550 ("flex" ,flex)
551 ("texinfo" ,texinfo)))
ed9f9a77 552 (arguments
f71f29ca 553 '(#:configure-flags
f0bacad6 554 (list "--with-readline")))
6fd52309 555 (home-page "https://www.gnu.org/software/bc/")
f50d2669 556 (synopsis "Arbitrary precision numeric processing language")
ed9f9a77 557 (description
a22dc0c4
LC
558 "bc is an arbitrary precision numeric processing language. It includes
559an interactive environment for evaluating mathematical statements. Its
560syntax is similar to that of C, so basic usage is familiar. It also includes
561\"dc\", a reverse-polish calculator.")
9f51293c 562 (license license:gpl2+)))
37e6cdcd 563
2a9b10c7
RW
564;; The original kiss-fft does not have a complete build system and does not
565;; build any shared libraries. This is a fork used by Extempore.
566(define-public kiss-fft-for-extempore
567 (package
568 (name "kiss-fft-for-extempore")
569 (version "1.3.0")
570 (source (origin
9774fac4
RW
571 (method git-fetch)
572 (uri (git-reference
573 (url "https://github.com/extemporelang/kiss_fft.git")
574 (commit version)))
575 (file-name (git-file-name name version))
2a9b10c7
RW
576 (sha256
577 (base32
9774fac4 578 "0jasbmqy4wkqrqx3w64s1dfmj34875xmsl72mb26aa4hpyn14bi2"))))
2a9b10c7
RW
579 (build-system cmake-build-system)
580 (arguments `(#:tests? #f)) ; no tests included
39162ee4
RW
581 ;; Extempore refuses to build on architectures other than x86_64
582 (supported-systems '("x86_64-linux"))
2a9b10c7
RW
583 (home-page "https://github.com/extemporelang/kiss_fft")
584 (synopsis "Mixed-radix Fast Fourier Transform")
585 (description
586 "Kiss FFT attempts to be a reasonably efficient, moderately useful FFT
587that can use fixed or floating data types and can easily be incorporated into
588a C program.")
589 (license license:bsd-3)))
590
37e6cdcd
LC
591(define-public fftw
592 (package
593 (name "fftw")
bdb74478 594 (version "3.3.8")
37e6cdcd
LC
595 (source (origin
596 (method url-fetch)
597 (uri (string-append "ftp://ftp.fftw.org/pub/fftw/fftw-"
598 version".tar.gz"))
599 (sha256
600 (base32
bdb74478 601 "00z3k8fq561wq2khssqg0kallk0504dzlx989x3vvicjdqpjc4v1"))))
37e6cdcd
LC
602 (build-system gnu-build-system)
603 (arguments
65bb2279 604 `(#:configure-flags
69d5909e
MW
605 '("--enable-shared" "--enable-openmp" "--enable-threads"
606 ,@(let ((system (or (%current-target-system) (%current-system))))
607 ;; Enable SIMD extensions for codelets. See details at:
608 ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
609 (cond
610 ((string-prefix? "x86_64" system)
611 '("--enable-sse2" "--enable-avx" "--enable-avx2"
612 "--enable-avx512" "--enable-avx-128-fma"))
613 ((string-prefix? "i686" system)
614 '("--enable-sse2"))
615 ((string-prefix? "aarch64" system)
616 ;; Note that fftw supports NEON on 32-bit ARM only when
617 ;; compiled for single-precision.
618 '("--enable-neon"))
619 (else
620 '())))
65bb2279
EB
621 ;; By default '-mtune=native' is used. However, that may cause the
622 ;; use of ISA extensions (e.g. AVX) that are not necessarily
623 ;; available on the user's machine when that package is built on a
624 ;; different machine.
625 "ax_cv_c_flags__mtune_native=no")))
37e6cdcd
LC
626 (native-inputs `(("perl" ,perl)))
627 (home-page "http://fftw.org")
628 (synopsis "Computing the discrete Fourier transform")
629 (description
630 "FFTW is a C subroutine library for computing the discrete Fourier
631transform (DFT) in one or more dimensions, of arbitrary input size, and of
632both real and complex data (as well as of even/odd data---i.e. the discrete
633cosine/ sine transforms or DCT/DST).")
9f51293c 634 (license license:gpl2+)))
7569c5cb
EB
635
636(define-public fftwf
637 (package (inherit fftw)
638 (name "fftwf")
639 (arguments
640 (substitute-keyword-arguments (package-arguments fftw)
69d5909e
MW
641 ((#:configure-flags fftw-configure-flags)
642 `(cons* "--enable-single"
643 ,@(if (string-prefix? "arm" (or (%current-target-system)
644 (%current-system)))
645 ;; fftw supports NEON on 32-bit ARM only when compiled
646 ;; for single-precision, so add it here.
647 '("--enable-neon")
648 '())
649 ,fftw-configure-flags))))
7569c5cb
EB
650 (description
651 (string-append (package-description fftw)
652 " Single-precision version."))))
e5c66f8c
EB
653
654(define-public fftw-openmpi
655 (package (inherit fftw)
656 (name "fftw-openmpi")
657 (inputs
658 `(("openmpi" ,openmpi)
659 ,@(package-inputs fftw)))
660 (arguments
661 (substitute-keyword-arguments (package-arguments fftw)
662 ((#:configure-flags cf)
663 `(cons "--enable-mpi" ,cf))))
664 (description
665 (string-append (package-description fftw)
666 " With OpenMPI parallelism support."))))
8f4b1dfb 667
c8d99608
RW
668(define-public java-la4j
669 (package
670 (name "java-la4j")
671 (version "0.6.0")
672 (source (origin
673 (method git-fetch)
674 (uri (git-reference
675 (url "https://github.com/vkostyukov/la4j.git")
676 (commit version)))
677 (file-name (string-append name "-" version "-checkout"))
678 (sha256
679 (base32
680 "1qir8dr978cfvz9k12m2kbdwpyf6cqdf1d0ilb7lnkhbgq5i53w3"))))
681 (build-system ant-build-system)
682 (arguments
683 `(#:jar-name "la4j.jar"
684 #:jdk ,icedtea-8
685 #:test-exclude (list "**/Abstract*.java"
686 "**/MatrixTest.java"
687 "**/DenseMatrixTest.java"
688 "**/SparseMatrixTest.java"
689 "**/VectorTest.java"
690 "**/SparseVectorTest.java"
691 "**/DenseVectorTest.java")))
692 (native-inputs
693 `(("java-junit" ,java-junit)
694 ("java-hamcrest-core" ,java-hamcrest-core)))
695 (home-page "http://la4j.org/")
696 (synopsis "Java library that provides Linear Algebra primitives and algorithms")
697 (description "The la4j library is a Java library that provides Linear
698Algebra primitives (matrices and vectors) and algorithms. The key features of
699the la4j library are:
700
701@itemize
702@item No dependencies and tiny size
703@item Fluent object-oriented/functional API
704@item Sparse (CRS, CCS) and dense (1D/2D arrays) matrices
705@item Linear systems solving (Gaussian, Jacobi, Zeidel, Square Root, Sweep and other)
706@item Matrices decomposition (Eigenvalues/Eigenvectors, SVD, QR, LU, Cholesky and other)
707@item MatrixMarket/CSV IO formats support for matrices and vectors
708@end itemize\n")
709 (license license:asl2.0)))
710
24074b0b
RW
711(define-public java-jlargearrays
712 (package
713 (name "java-jlargearrays")
714 (version "1.6")
715 (source (origin
716 (method url-fetch)
717 (uri (string-append "http://search.maven.org/remotecontent?"
718 "filepath=pl/edu/icm/JLargeArrays/"
719 version "/JLargeArrays-" version
720 "-sources.jar"))
721 (file-name (string-append name "-" version ".jar"))
722 (sha256
723 (base32
724 "0v05iphpxbjnd7f4jf1rlqq3m8hslhcm0imdbsgxr20pi3xkaf2a"))))
725 (build-system ant-build-system)
726 (arguments
727 `(#:jar-name "jlargearrays.jar"
728 #:tests? #f ; tests are not included in the release archive
729 #:jdk ,icedtea-8))
730 (propagated-inputs
731 `(("java-commons-math3" ,java-commons-math3)))
732 (home-page "https://gitlab.com/ICM-VisLab/JLargeArrays")
733 (synopsis "Library of one-dimensional arrays that can store up to 263 elements")
734 (description "JLargeArrays is a Java library of one-dimensional arrays
735that can store up to 263 elements.")
736 (license license:bsd-2)))
737
4e92911c
RW
738(define-public java-jtransforms
739 (package
740 (name "java-jtransforms")
741 (version "3.1")
742 (source (origin
743 (method url-fetch)
744 (uri (string-append "http://search.maven.org/remotecontent?"
745 "filepath=com/github/wendykierp/JTransforms/"
746 version "/JTransforms-" version "-sources.jar"))
747 (sha256
748 (base32
749 "1haw5m8shv5srgcpwkl853dz8bv6h90bzlhcps6mdpb4cixjirsg"))))
750 (build-system ant-build-system)
751 (arguments
752 `(#:jar-name "jtransforms.jar"
753 #:tests? #f ; tests are not included in the release archive
754 #:jdk ,icedtea-8))
755 (propagated-inputs
756 `(("java-commons-math3" ,java-commons-math3)
757 ("java-jlargearrays" ,java-jlargearrays)))
758 (home-page "https://github.com/wendykierp/JTransforms")
759 (synopsis "Multithreaded FFT library written in pure Java")
760 (description "JTransforms is a multithreaded FFT library written in pure
761Java. Currently, four types of transforms are available: @dfn{Discrete
762Fourier Transform} (DFT), @dfn{Discrete Cosine Transform} (DCT), @dfn{Discrete
763Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
764 (license license:bsd-2)))
765
8f4b1dfb
LC
766(define-public eigen
767 (package
768 (name "eigen")
8cd80a4b 769 (version "3.3.5")
8f4b1dfb
LC
770 (source (origin
771 (method url-fetch)
772 (uri (string-append "https://bitbucket.org/eigen/eigen/get/"
9b268f12 773 version ".tar.bz2"))
8f4b1dfb
LC
774 (sha256
775 (base32
8cd80a4b 776 "1qh3yrwn78ms5yhwbpl5wvblk4gbz02cacdygxylr7i9xbrvylkk"))
2abcc935 777 (file-name (string-append name "-" version ".tar.bz2"))
8f4b1dfb
LC
778 (modules '((guix build utils)))
779 (snippet
780 ;; There are 3 test failures in the "unsupported" directory,
781 ;; but maintainers say it's a known issue and it's unsupported
782 ;; anyway, so just skip them.
1137d85b 783 '(begin
44884a9d
RW
784 (substitute* "unsupported/CMakeLists.txt"
785 (("add_subdirectory\\(test.*")
786 "# Do not build the tests for unsupported features.\n"))
6cbee49d 787 #t))))
8f4b1dfb
LC
788 (build-system cmake-build-system)
789 (arguments
790 '(;; Turn off debugging symbols to save space.
791 #:build-type "Release"
792
354f4fe2 793 #:phases (modify-phases %standard-phases
ef8742ea 794 (replace 'check
354f4fe2 795 (lambda _
354f4fe2
LC
796 (let* ((cores (parallel-job-count))
797 (dash-j (format #f "-j~a" cores)))
1137d85b 798 (setenv "EIGEN_SEED" "1") ;for reproducibility
ef8742ea
LC
799 ;; First build the tests, in parallel. See
800 ;; <http://eigen.tuxfamily.org/index.php?title=Tests>.
fbe9c80f 801 (invoke "make" "buildtests" dash-j)
8f4b1dfb 802
fbe9c80f
TGR
803 ;; Then run 'CTest' with -V so we get more
804 ;; details upon failure.
805 (invoke "ctest" "-V" dash-j)))))))
eeb8b0e6 806 (home-page "https://eigen.tuxfamily.org")
8f4b1dfb
LC
807 (synopsis "C++ template library for linear algebra")
808 (description
809 "Eigen is a C++ template library for linear algebra: matrices, vectors,
810numerical solvers, and related algorithms. It provides an elegant API based
811on \"expression templates\". It is versatile: it supports all matrix sizes,
812all standard numeric types, various matrix decompositions and geometry
813features, and more.")
814
815 ;; Most of the code is MPLv2, with a few files under LGPLv2.1+ or BSD-3.
816 ;; See 'COPYING.README' for details.
9f51293c 817 (license license:mpl2.0)))
70770b93
FT
818
819(define-public xtensor
820 (package
821 (name "xtensor")
e1ecaa83 822 (version "0.17.1")
70770b93 823 (source (origin
e1ecaa83
KK
824 (method git-fetch)
825 (uri (git-reference
826 (url "https://github.com/QuantStack/xtensor.git")
827 (commit version)))
70770b93
FT
828 (sha256
829 (base32
e1ecaa83
KK
830 "0w40v5lp0hp8ihf8nnvak373sb5xx0768pxgiqh3nzn57wf8px4r"))
831 (file-name (git-file-name name version))))
70770b93
FT
832 (build-system cmake-build-system)
833 (native-inputs
834 `(("googletest" ,googletest)
835 ("xtl" ,xtl)))
836 (arguments
837 `(#:configure-flags
838 '("-DBUILD_TESTS=ON")
839 #:test-target "xtest"))
840 (home-page "http://quantstack.net/xtensor")
841 (synopsis "C++ tensors with broadcasting and lazy computing")
842 (description "xtensor is a C++ library meant for numerical analysis with
843multi-dimensional array expressions.
844
845xtensor provides:
846@itemize
847@item an extensible expression system enabling lazy broadcasting.
848@item an API following the idioms of the C++ standard library.
849@item tools to manipulate array expressions and build upon xtensor.
850@end itemize")
851 (license license:bsd-3)))