X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/f5d5a346dbe74c93642b532a1680c900d24658d8..97ffa451eb58b4883bbab86e52f8bbe1e37dee6d:/gnu/packages/maths.scm diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 93ae0bd3ba..c1f270a721 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -3,6 +3,10 @@ ;;; Copyright © 2013 Nikita Karetnikov ;;; Copyright © 2014 John Darrington ;;; Copyright © 2014 Eric Bavier +;;; Copyright © 2014 Federico Beffa +;;; Copyright © 2014 Mathieu Lirzin +;;; Copyright © 2015 Ricardo Wurmus +;;; Copyright © 2015 Sou Bunnbu ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,11 +24,13 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages maths) + #:use-module (ice-9 regex) #:use-module (gnu packages) - #:use-module ((guix licenses) - #:renamer (symbol-prefix-proc 'license:)) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix svn-download) + #:use-module (guix utils) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (gnu packages algebra) @@ -40,17 +46,24 @@ #:use-module (gnu packages gcc) #:use-module (gnu packages gd) #:use-module (gnu packages ghostscript) + #:use-module (gnu packages glib) #:use-module (gnu packages gtk) #:use-module (gnu packages less) + #:use-module (gnu packages lisp) + #:use-module (gnu packages gnome) #:use-module (gnu packages xorg) #:use-module (gnu packages gl) + #:use-module (gnu packages m4) + #:use-module (gnu packages mpi) #:use-module (gnu packages multiprecision) #:use-module (gnu packages pcre) + #:use-module (gnu packages popt) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages readline) #:use-module (gnu packages tcsh) + #:use-module (gnu packages tcl) #:use-module (gnu packages texinfo) #:use-module (gnu packages texlive) #:use-module (gnu packages xml)) @@ -76,6 +89,29 @@ effectively as a scientific calculator.") (license license:gpl3+) (home-page "http://www.gnu.org/software/units/"))) +(define-public dionysus + (package + (name "dionysus") + (version "1.3.0") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/dionysus/dionysus-" version + ".tar.gz")) + (sha256 + (base32 + "1aqnvw6z33bzqgd1ga571pnx6vq2zrkckm1cz91grv45h4jr9vgs")))) + (build-system gnu-build-system) + (inputs `(("tcl" ,tcl))) ;for 'tclsh' + (synopsis "Local search for universal constants and scientific values") + (description + "GNU Dionysus is a convenient system for quickly retrieving the values of +mathematical constants used in science and engineering. Values can be +searched using a simple command-line tool, choosing from three databases: +universal constants, atomic numbers, and constants related to +semiconductors.") + (license license:gpl3+) + (home-page "http://www.gnu.org/software/dionysus/"))) + (define-public gsl (package (name "gsl") @@ -116,7 +152,7 @@ numbers.") (define-public glpk (package (name "glpk") - (version "4.54") + (version "4.55") (source (origin (method url-fetch) @@ -124,7 +160,7 @@ numbers.") version ".tar.gz")) (sha256 (base32 - "18gr2anv8gyps6j9f22k7li6w07glvww666sdqblvlq2hh3whwmb")))) + "1rqx5fzj1mhkifilip5mkxybpj2wkniq5qcn8h1w2vkr2rzhs29p")))) (build-system gnu-build-system) (inputs `(("gmp" ,gmp))) @@ -143,7 +179,7 @@ LP/MIP solver is included in the package.") (define-public pspp (package (name "pspp") - (version "0.8.2") + (version "0.8.4") (source (origin (method url-fetch) @@ -151,7 +187,7 @@ LP/MIP solver is included in the package.") version ".tar.gz")) (sha256 (base32 - "1w7h3dglgx0jlq1wb605b8pgfsk2vr1q2q2rj7bsajh9ihbcsixr")))) + "0b65q45x05ps95pph6glbg7ymdr638nfb0rk9x5x9qm5k073pk5z")))) (build-system gnu-build-system) (inputs `(("cairo" ,cairo) @@ -165,19 +201,45 @@ LP/MIP solver is included in the package.") ("gtksourceview" ,gtksourceview) ("zlib" ,zlib))) (native-inputs - `(("perl" ,perl) + `(("glib" ,glib "bin") ;for glib-genmarshal + ("perl" ,perl) ("pkg-config" ,pkg-config))) (home-page "http://www.gnu.org/software/pspp/") (synopsis "Statistical analysis") (description "GNU PSPP is a statistical analysis program. It can perform -descriptive statistics, T-tests, linear regression and non-parametric tests. -It features both a graphical interface as well as command-line input. PSPP is -designed to interoperate with Gnumeric, LibreOffice and OpenOffice. Data can -be imported from spreadsheets, text files and database sources and it can be -output in text, PostScript, PDF or HTML.") +descriptive statistics, T-tests, linear regression and non-parametric tests. +It features both a graphical interface as well as command-line input. PSPP +is designed to interoperate with Gnumeric, LibreOffice and OpenOffice. Data +can be imported from spreadsheets, text files and database sources and it can +be output in text, PostScript, PDF or HTML.") (license license:gpl3+))) +(define-public arpack-ng + (package + (name "arpack-ng") + (version "3.2.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/opencollab/arpack-ng/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1fwch6vipms1ispzg2djvbzv5wag36f1dmmr3xs3mbp6imfyhvff")))) + (build-system gnu-build-system) + (home-page "https://github.com/opencollab/arpack-ng") + (inputs + `(("lapack" ,lapack) + ("fortran" ,gfortran-4.8))) + (synopsis "Fortran subroutines for solving eigenvalue problems") + (description + "ARPACK-NG is a collection of Fortran77 subroutines designed to solve +large scale eigenvalue problems.") + (license (license:bsd-style "file://COPYING" + "See COPYING in the distribution.")))) + (define-public lapack (package (name "lapack") @@ -233,9 +295,9 @@ problems in numerical linear algebra.") (home-page "http://www.gnuplot.info") (synopsis "Command-line driven graphing utility") (description "Gnuplot is a portable command-line driven graphing -utility. It was originally created to allow scientists and students to +utility. It was originally created to allow scientists and students to visualize mathematical functions and data interactively, but has grown to -support many non-interactive uses such as web scripting. It is also used as a +support many non-interactive uses such as web scripting. It is also used as a plotting engine by third-party applications like Octave.") ;; X11 Style with the additional restriction that derived works may only be ;; distributed as patches to the original. @@ -249,7 +311,8 @@ plotting engine by third-party applications like Octave.") (source (origin (method url-fetch) - (uri (string-append "http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-" + (uri (string-append "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-" + version "/src/hdf5-" version ".tar.bz2")) (sha256 (base32 "0f9n0v3p3lwc7564791a39c6cn1d3dbrn7d1j3ikqsi27a8hy23d")))) @@ -264,7 +327,7 @@ plotting engine by third-party applications like Octave.") %standard-phases))) (outputs '("out" "bin" "lib" "include")) (home-page "http://www.hdfgroup.org") - (synopsis "Management suite for extremely large and complex data") + (synopsis "Management suite for extremely large and complex data") (description "HDF5 is a suite that makes possible the management of extremely large and complex data collections.") (license (license:x11-style @@ -276,7 +339,7 @@ extremely large and complex data collections.") (define-public octave (package (name "octave") - (version "3.8.0") + (version "3.8.2") (source (origin (method url-fetch) @@ -284,7 +347,7 @@ extremely large and complex data collections.") version ".tar.gz")) (sha256 (base32 - "0ks9pr154syw0vb3jn6xsnrkkrbvf9y7i7gaxa28rz6ngxbxvq9l")))) + "05slz8yx8k91fqlnfr1f0vni95iq9qmchz41c7nf4isn3b2fjn7j")))) (build-system gnu-build-system) (inputs `(("lapack" ,lapack) @@ -352,6 +415,7 @@ files.") ("hdf5-include" ,hdf5 "include") ("lapack" ,lapack) ("mesa" ,mesa) + ("glu" ,glu) ("libx11" ,libx11) ("libxext" ,libxext))) (arguments @@ -419,34 +483,42 @@ ASCII text files using Gmsh's own scripting language.") (format #t "configure flags: ~s~%" flags) (zero? (apply system* "./configure" flags)))) (alist-cons-after - 'install 'clean-local-references - ;; Try to keep installed files from leaking build directory names. + 'configure 'clean-local-references + ;; Try to keep build directory names from leaking into compiled code (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (fortran (assoc-ref inputs "gfortran"))) - (substitute* (map (lambda (file) - (string-append out "/" file)) - '("conf/petscvariables" - "conf/PETScConfig.cmake" - "include/petscconf.h" - "include/petscmachineinfo.h")) - (((getcwd)) out)) - ;; Make compiler references point to the store - (substitute* (string-append out "/conf/petscvariables") - (("= g(cc|\\+\\+|fortran)" _ suffix) - (string-append "= " fortran "/bin/g" suffix))) - ;; PETSc installs some build logs, which aren't necessary. - (for-each (lambda (file) - (delete-file (string-append out "/" file))) - '("conf/configure.log" - "conf/make.log" - "conf/test.log" - "conf/RDict.db" - ;; Once installed, should uninstall with Guix - "conf/uninstall.py")))) - %standard-phases)))) + (let ((out (assoc-ref outputs "out"))) + (substitute* (find-files "." "^petsc(conf|machineinfo).h$") + (((getcwd)) out)))) + (alist-cons-after + 'install 'clean-install + ;; Try to keep installed files from leaking build directory names. + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (fortran (assoc-ref inputs "gfortran"))) + (substitute* (map (lambda (file) + (string-append out "/" file)) + '("conf/petscvariables" + "conf/PETScConfig.cmake")) + (((getcwd)) out)) + ;; Make compiler references point to the store + (substitute* (string-append out "/conf/petscvariables") + (("= g(cc|\\+\\+|fortran)" _ suffix) + (string-append "= " fortran "/bin/g" suffix))) + ;; PETSc installs some build logs, which aren't necessary. + (for-each (lambda (file) + (let ((f (string-append out "/" file))) + (when (file-exists? f) + (delete-file f)))) + '("conf/configure.log" + "conf/make.log" + "conf/test.log" + "conf/error.log" + "conf/RDict.db" + ;; Once installed, should uninstall with Guix + "conf/uninstall.py")))) + %standard-phases))))) (home-page "http://www.mcs.anl.gov/petsc") - (synopsis "Library to solve ODEs and algebraic equations") + (synopsis "Library to solve PDEs") (description "PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations.") @@ -455,14 +527,43 @@ scientific applications modeled by partial differential equations.") (define-public petsc-complex (package (inherit petsc) + (location (source-properties->location (current-source-location))) (name "petsc-complex") (arguments (substitute-keyword-arguments (package-arguments petsc) ((#:configure-flags cf) `(cons "--with-scalar-type=complex" ,cf)))) - (description - (string-append (package-description petsc) - " Complex scalar type version.")))) + (synopsis "Library to solve PDEs (with complex scalars)"))) + +(define-public petsc-openmpi + (package (inherit petsc) + (name "petsc-openmpi") + (inputs + `(("openmpi" ,openmpi) + ,@(package-inputs petsc))) + (arguments + (substitute-keyword-arguments (package-arguments petsc) + ((#:configure-flags cf) + ``("--with-mpiexec=mpirun" + ,(string-append "--with-mpi-dir=" + (assoc-ref %build-inputs "openmpi")) + ,@(delete "--with-mpi=0" ,cf))))) + (synopsis "Library to solve PDEs (with MPI support)"))) + +(define-public petsc-complex-openmpi + (package (inherit petsc-complex) + (name "petsc-complex-openmpi") + (inputs + `(("openmpi" ,openmpi) + ,@(package-inputs petsc-complex))) + (arguments + (substitute-keyword-arguments (package-arguments petsc-complex) + ((#:configure-flags cf) + ``("--with-mpiexec=mpirun" + ,(string-append "--with-mpi-dir=" + (assoc-ref %build-inputs "openmpi")) + ,@(delete "--with-mpi=0" ,cf))))) + (synopsis "Library to solve PDEs (with complex scalars and MPI support)"))) (define-public superlu (package @@ -545,3 +646,551 @@ library routines perform an LU decomposition with partial pivoting and triangular system solves through forward and back substitution. The library also provides threshold-based ILU factorization preconditioners.") (license license:bsd-3))) + +(define-public superlu-dist + (package + (name "superlu-dist") + (version "3.3") + (source + (origin + (method url-fetch) + (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/" + "superlu_dist_" version ".tar.gz")) + (sha256 + (base32 "1hnak09yxxp026blq8zhrl7685yip16svwngh1wysqxf8z48vzfj")) + (patches (list (search-patch "superlu-dist-scotchmetis.patch"))))) + (build-system gnu-build-system) + (native-inputs + `(("tcsh" ,tcsh))) + (inputs + `(("gfortran" ,gfortran-4.8))) + (propagated-inputs + `(("openmpi" ,openmpi) ;headers include MPI heades + ("lapack" ,lapack) ;required to link with output library + ("pt-scotch" ,pt-scotch))) ;same + (arguments + `(#:parallel-build? #f ;race conditions using ar + #:phases + (alist-replace + 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (call-with-output-file "make.inc" + (lambda (port) + (format port " +PLAT = +DSuperLUroot = ~a +DSUPERLULIB = ~a/lib/libsuperlu_dist.a +BLASDEF = -DUSE_VENDOR_BLAS +BLASLIB = -L~a/lib -lblas +PARMETISLIB = -L~a/lib \ + -lptscotchparmetis -lptscotch -lptscotcherr -lptscotcherrexit \ + -lscotch -lscotcherr -lscotcherrexit +METISLIB = -L~:*~a/lib \ + -lscotchmetis -lscotch -lscotcherr -lscotcherrexit +LIBS = $(DSUPERLULIB) $(PARMETISLIB) $(METISLIB) $(BLASLIB) +ARCH = ar +ARCHFLAGS = cr +RANLIB = ranlib +CC = mpicc +PIC = -fPIC +CFLAGS = -O3 -g -DPRNTlevel=0 $(PIC) +NOOPTS = -O0 -g $(PIC) +FORTRAN = mpifort +FFLAGS = -O2 -g $(PIC) +LOADER = $(CC) +CDEFS = -DAdd_" + (getcwd) + (assoc-ref outputs "out") + (assoc-ref inputs "lapack") + (assoc-ref inputs "pt-scotch"))))) + (alist-cons-after + 'unpack 'remove-broken-symlinks + (lambda _ + (for-each delete-file + (find-files "MAKE_INC" "\\.#make\\..*"))) + (alist-cons-before + 'build 'create-install-directories + (lambda* (#:key outputs #:allow-other-keys) + (for-each + (lambda (dir) + (mkdir-p (string-append (assoc-ref outputs "out") + "/" dir))) + '("lib" "include"))) + (alist-replace + 'check + (lambda _ + (with-directory-excursion "EXAMPLE" + (and + (zero? (system* "mpirun" "-n" "2" + "./pddrive" "-r" "1" "-c" "2" "g20.rua")) + (zero? (system* "mpirun" "-n" "2" + "./pzdrive" "-r" "1" "-c" "2" "cg20.cua"))))) + (alist-replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + ;; Library is placed in lib during the build phase. Copy over + ;; headers to include. + (let* ((out (assoc-ref outputs "out")) + (incdir (string-append out "/include"))) + (for-each (lambda (file) + (let ((base (basename file))) + (format #t "installing `~a' to `~a'~%" + base incdir) + (copy-file file + (string-append incdir "/" base)))) + (find-files "SRC" ".*\\.h$")))) + %standard-phases))))))) + (home-page (package-home-page superlu)) + (synopsis "Parallel supernodal direct solver") + (description + "SuperLU_DIST is a parallel extension to the serial SuperLU library. +It is targeted for distributed memory parallel machines. SuperLU_DIST is +implemented in ANSI C, and MPI for communications.") + (license license:bsd-3))) + +(define-public scotch + (package + (name "scotch") + (version "6.0.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://gforge.inria.fr/frs/download.php/31831/" + "scotch_" version ".tar.gz")) + (sha256 + (base32 "0yfqf9lk7chb3h42777x42x4adx0v3n0b41q0cdqrdmscp4iczp5")) + (patches (list (search-patch "scotch-test-threading.patch"))))) + (build-system gnu-build-system) + (inputs + `(("zlib" ,zlib) + ("flex" ,flex) + ("bison" ,bison))) + (arguments + `(#:phases + (alist-cons-after + 'unpack 'chdir-to-src + (lambda _ (chdir "src")) + (alist-replace + 'configure + (lambda _ + (call-with-output-file "Makefile.inc" + (lambda (port) + (format port " +EXE = +LIB = .a +OBJ = .o +MAKE = make +AR = ar +ARFLAGS = -ruv +CCS = gcc +CCP = mpicc +CCD = gcc +CPPFLAGS =~{ -D~a~} +CFLAGS = -O2 -g $(CPPFLAGS) +LDFLAGS = -lz -lm -lrt -lpthread +CP = cp +LEX = flex -Pscotchyy -olex.yy.c +LN = ln +MKDIR = mkdir +MV = mv +RANLIB = ranlib +YACC = bison -pscotchyy -y -b y +" + '("COMMON_FILE_COMPRESS_GZ" + "COMMON_PTHREAD" + "COMMON_RANDOM_FIXED_SEED" + ;; TODO: Define once our MPI supports + ;; MPI_THREAD_MULTIPLE + ;; "SCOTCH_PTHREAD" + ;; "SCOTCH_PTHREAD_NUMBER=2" + "restrict=__restrict"))))) + (alist-replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir out) + (zero? (system* "make" + (string-append "prefix=" out) + "install")))) + %standard-phases))))) + (home-page "http://www.labri.fr/perso/pelegrin/scotch/") + (synopsis "Programs and libraries for graph algorithms") + (description "SCOTCH is a set of programs and libraries which implement +the static mapping and sparse matrix reordering algorithms developed within +the SCOTCH project. Its purpose is to apply graph theory, with a divide and +conquer approach, to scientific computing problems such as graph and mesh +partitioning, static mapping, and sparse matrix ordering, in application +domains ranging from structural mechanics to operating systems or +bio-chemistry.") + ;; See LICENSE_en.txt + (license license:cecill-c))) + +(define-public pt-scotch + (package (inherit scotch) + (name "pt-scotch") + (propagated-inputs + `(("openmpi" ,openmpi))) ;Headers include MPI headers + (arguments + (substitute-keyword-arguments (package-arguments scotch) + ((#:phases scotch-phases) + `(alist-replace + 'build + ;; TODO: Would like to add parallelism here + (lambda _ + (and + (zero? (system* "make" "ptscotch")) + ;; Install the serial metis compatibility library + (zero? (system* "make" "-C" "libscotchmetis" "install")))) + (alist-replace + 'check + (lambda _ (zero? (system* "make" "ptcheck"))) + (alist-replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir out) + (zero? (system* "make" + (string-append "prefix=" out) + "install")))) + ,scotch-phases)))))) + (synopsis "Programs and libraries for graph algorithms (with MPI)"))) + +(define-public gsegrafix + (package + (name "gsegrafix") + (version "1.0.6") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/" name "/" name "-" + version ".tar.gz")) + (sha256 + (base32 + "1b13hvx063zv970y750bx41wpx6hwd5ngjhbdrna8w8yy5kmxcda")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags '("LDFLAGS=-lm"))) + (inputs + `(("libgnomecanvas" ,libgnomecanvas) + ("libbonoboui" ,libbonoboui) + ("libgnomeui" ,libgnomeui) + ("libgnomeprintui" ,libgnomeprintui) + ("popt" ,popt))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://www.gnu.org/software/gsegrafix/") + (synopsis "GNOME application to create scientific and engineering plots") + (description "GSEGrafix is an application which produces high-quality graphical +plots for science and engineering. Plots are specified via simple ASCII +parameter files and data files and are presented in an anti-aliased GNOME +canvas. The program supports rectangular two-dimensional plots, histograms, +polar-axis plots and three-dimensional plots. Plots can be printed or saved +to BMP, JPEG or PNG image formats.") + (license license:gpl3+))) + +(define-public maxima + (package + (name "maxima") + (version "5.34.1") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/maxima/Maxima-source/" + version "-source/" name "-" version ".tar.gz")) + (sha256 + (base32 + "1dw9vfzldpj7lv303xbw0wpyn6ra6i2yzwlrjbcx7j0jm5n43ji0")))) + (build-system gnu-build-system) + (inputs + `(("gcl" ,gcl) + ("gnuplot" ,gnuplot) ;for plots + ("tk" ,tk))) ;Tcl/Tk is used by 'xmaxima' + (native-inputs + `(("texinfo" ,texinfo) + ("perl" ,perl))) + (arguments + `(#:configure-flags + (list "--enable-gcl" + (string-append "--with-posix-shell=" + (assoc-ref %build-inputs "bash") + "/bin/sh") + (string-append "--with-wish=" + (assoc-ref %build-inputs "tk") + "/bin/wish" + (let ((v ,(package-version tk))) + (string-take v (string-index-right v #\.))))) + ;; By default Maxima attempts to write temporary files to + ;; '/tmp/nix-build-maxima-5.34.1', which doesn't exist. Work around + ;; that. + #:make-flags (list "TMPDIR=/tmp") + #:phases (alist-cons-before + 'check 'pre-check + (lambda _ + (chmod "src/maxima" #o555)) + ;; Make sure the doc and emacs files are found in the + ;; standard location. Also configure maxima to find gnuplot + ;; without having it on the PATH. + (alist-cons-after + 'install 'post-install + (lambda* (#:key outputs inputs #:allow-other-keys) + (let* ((gnuplot (assoc-ref inputs "gnuplot")) + (out (assoc-ref outputs "out")) + (datadir (string-append out "/share/maxima/" ,version))) + (with-directory-excursion out + (mkdir-p "share/emacs") + (mkdir-p "share/doc") + (symlink + (string-append datadir "/emacs/") + (string-append out "/share/emacs/site-lisp")) + (symlink + (string-append datadir "/doc/") + (string-append out "/share/doc/maxima")) + (with-atomic-file-replacement + (string-append datadir "/share/maxima-init.lisp") + (lambda (in out) + (format out "~a ~s~a~%" + "(setf $gnuplot_command " + (string-append gnuplot "/bin/gnuplot") ")") + (dump-port in out)))))) + %standard-phases)))) + (home-page "http://maxima.sourceforge.net") + (synopsis "Numeric and symbolic expression manipulation") + (description "Maxima is a system for the manipulation of symbolic and +numerical expressions. It yields high precision numeric results by using +exact fractions, arbitrary precision integers, and variable precision floating +point numbers") + ;; Some files are lgpl2.1+. Some are gpl2+. Some explicitly state gpl1+. + ;; Others simply say "GNU General Public License" without stating a + ;; version (which implicitly means gpl1+). + ;; At least one file (src/maxima.asd) says "version 2." + ;; GPLv2 only is therefore the smallest subset. + (license license:gpl2))) + +(define-public muparser + (package + (name "muparser") + (version "2.2.5") + (source + (origin + (method svn-fetch) + (uri (svn-reference + (url "http://muparser.googlecode.com/svn/trunk/") + (revision 34))) + (sha256 + (base32 + "1d6bdbhx9zj3srwj3m7c9hvr18gnx1fx43h6d25my7q85gicpcwn")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags '("--enable-samples=no") + #:tests? #f)) ;no "check" target + (home-page "http://muparser.beltoforion.de/") + (synopsis "Fast parser library for mathematical expressions") + (description + "muParser is an extensible high performance math parser library. It is +based on transforming an expression into a bytecode and precalculating +constant parts of it.") + (license license:expat))) + +(define-public openlibm + (package + (name "openlibm") + (version "0.4.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/JuliaLang/openlibm/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0cwqqqlblj3kzp9aq1wnpfs1fl0qd1wp1xzm5shb09w06i4rh9nn")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (list (string-append "prefix=" (assoc-ref %outputs "out"))) + #:phases + ;; no configure script + (alist-delete 'configure %standard-phases) + #:tests? #f)) ;the tests are part of the default target + (home-page "http://openlibm.org/") + (synopsis "Portable C mathematical library (libm)") + (description + "OpenLibm is an effort to have a high quality, portable, standalone C +mathematical library (libm). It can be used standalone in applications and +programming language implementations. The project was born out of a need to +have a good libm for the Julia programming langage that worked consistently +across compilers and operating systems, and in 32-bit and 64-bit +environments.") + ;; See LICENSE.md for details. + (license (list license:expat + license:isc + license:bsd-2 + license:public-domain + license:lgpl2.1+)))) + +(define-public openspecfun + (package + (name "openspecfun") + (version "0.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/JuliaLang/openspecfun/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0nsa3jjmlhcqkw5ba5ypbn3n0c8b6lc22zzlxnmxkxi9shhdx65z")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ;no "check" target + #:make-flags + (list (string-append "prefix=" (assoc-ref %outputs "out"))) + ;; no configure script + #:phases (alist-delete 'configure %standard-phases))) + (inputs + `(("fortran" ,gfortran-4.8))) + (home-page "https://github.com/JuliaLang/openspecfun") + (synopsis "Collection of special mathematical functions") + (description + "Openspecfun provides AMOS and Faddeeva. AMOS (from Netlib) is a +portable package for Bessel Functions of a Complex Argument and Nonnegative +Order; it contains subroutines for computing Bessel functions and Airy +functions. Faddeeva allows computing the various error functions of arbitrary +complex arguments (Faddeeva function, error function, complementary error +function, scaled complementary error function, imaginary error function, and +Dawson function); given these, one can also easily compute Voigt functions, +Fresnel integrals, and similar related functions as well.") + ;; Faddeeva is released under the Expat license; AMOS is included as + ;; public domain software. + (license (list license:expat license:public-domain)))) + +(define-public atlas + (package + (name "atlas") + (version "3.10.2") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/math-atlas/atlas" + version ".tar.bz2")) + (sha256 + (base32 + "0bqh4bdnjdyww4mcpg6kn0x7338mfqbdgysn97dzrwwb26di7ars")))) + (build-system gnu-build-system) + (home-page "http://math-atlas.sourceforge.net/") + (inputs `(("gfortran" ,gfortran-4.8) + ("lapack-tar" ,(package-source lapack)))) + (outputs '("out" "doc")) + ;; For the moment we drop support for MIPS at it fails to compile. See + ;; https://lists.gnu.org/archive/html/guix-devel/2014-11/msg00516.html + (supported-systems (delete "mips64el-linux" %supported-systems)) + (arguments + `(#:parallel-build? #f + #:parallel-tests? #f + + ;; ATLAS tunes itself for the machine it is built on, as explained at + ;; . + ;; For this reason, we want users to build it locally instead of using + ;; substitutes. + #:substitutable? #f + + #:modules ((srfi srfi-26) + (srfi srfi-1) + (guix build gnu-build-system) + (guix build utils)) + #:configure-flags + `(;; Generate position independent code suitable for dynamic libraries + ;; and use WALL timer to get more accurate timing. + "-Fa" "alg" "-fPIC" "-D" "c" "-DWALL" + ;; Set word width. + "-b" + ,,(if (string-match "64" (%current-system)) + "64" + "32") + ;; Disable parallel build as it gives errors: atlas_pthread.h is + ;; needed to compile C files before it is generated. + "-Ss" "pmake" "make -j 1" + ;; Probe is failing for MIPS. We therefore define the system + ;; architecture explicitly by setting (-A) MACHINETYPE = 49 + ;; 'MIPSR1xK' and (-V) ISA = 1 'none'. + ,,@(if (string-prefix? "mips" (%current-system)) + (list "-A" "49" "-V" "1") + (list)) + ;; Generate shared libraries. + "--shared" + ;; Build a full LAPACK library. + ,(string-append "--with-netlib-lapack-tarfile=" + (assoc-ref %build-inputs "lapack-tar"))) + #:phases + (alist-cons-after + 'install 'install-doc + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((doc (string-append (assoc-ref outputs "doc") + "/share/doc/atlas"))) + (mkdir-p doc) + (fold (lambda (file previous) + (and previous (zero? (system* "cp" file doc)))) + #t (find-files "../ATLAS/doc" ".*")))) + (alist-cons-after + 'check 'check-pt + (lambda _ (zero? (system* "make" "ptcheck"))) + ;; Fix files required to run configure. + (alist-cons-before + 'configure 'fix-/bin/sh + (lambda _ + ;; Use `sh', not `/bin/sh'. + (substitute* (find-files "." "Makefile|configure|SpewMakeInc\\.c") + (("/bin/sh") + "sh"))) + ;; Fix /bin/sh in generated make files. + (alist-cons-after + 'configure 'fix-/bin/sh-in-generated-files + (lambda _ + (substitute* (find-files "." "^[Mm]ake\\.inc.*") + (("/bin/sh") + "sh"))) + ;; ATLAS configure program does not accepts the default flags + ;; passed by the 'gnu-build-system'. + (alist-replace + 'configure + (lambda* (#:key native-inputs inputs outputs + (configure-flags '()) + #:allow-other-keys #:rest args) + (let* ((prefix (assoc-ref outputs "out")) + (bash (or (and=> (assoc-ref + (or native-inputs inputs) "bash") + (cut string-append <> "/bin/bash")) + "/bin/sh")) + (flags `(,(string-append "--prefix=" prefix) + ,@configure-flags)) + (abs-srcdir (getcwd)) + (srcdir (string-append "../" (basename abs-srcdir)))) + (format #t "source directory: ~s (relative from build: ~s)~%" + abs-srcdir srcdir) + (mkdir "../build") + (chdir "../build") + (format #t "build directory: ~s~%" (getcwd)) + (format #t "configure flags: ~s~%" flags) + (zero? (apply system* bash + (string-append srcdir "/configure") + flags)))) + %standard-phases))))))) + (synopsis "Automatically Tuned Linear Algebra Software") + (description + "ATLAS is an automatically tuned linear algebra software library +providing C and Fortran77 interfaces to a portably efficient BLAS +implementation, as well as a few routines from LAPACK. + +Optimization occurs at build time. For this reason, the library is built on +the machine where it is installed, without resorting to pre-built substitutes. + +Before building the library, CPU throttling should be disabled. This can be +done in the BIOS, or, on GNU/Linux, with the following commands: + +cpufreq-selector -g performance -c 0 +... +cpufreq-selector -g performance -c N-1 + +where N is the number of cores of your CPU. Failure to do so will result in a +library with poor performance.") + (license license:bsd-3)))