451 lines
18 KiB
Scheme
451 lines
18 KiB
Scheme
;;; GNU Guix --- Functional package management for GNU
|
|
;;; Copyright © 2015, 2016, 2020 Ricardo Wurmus <rekado@elephly.net>
|
|
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
|
|
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
|
|
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
|
|
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
|
|
;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
|
|
;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
|
;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
|
;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
|
|
;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
|
|
;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
|
|
;;;
|
|
;;; This file is part of GNU Guix.
|
|
;;;
|
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
|
;;; under the terms of the GNU General Public License as published by
|
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
|
;;; your option) any later version.
|
|
;;;
|
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;;; GNU General Public License for more details.
|
|
;;;
|
|
;;; You should have received a copy of the GNU General Public License
|
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
(define-module (gnu packages python-science)
|
|
#:use-module ((guix licenses) #:prefix license:)
|
|
#:use-module (gnu packages)
|
|
#:use-module (gnu packages base)
|
|
#:use-module (gnu packages check)
|
|
#:use-module (gnu packages gcc)
|
|
#:use-module (gnu packages maths)
|
|
#:use-module (gnu packages perl)
|
|
#:use-module (gnu packages python)
|
|
#:use-module (gnu packages python-web)
|
|
#:use-module (gnu packages python-xyz)
|
|
#:use-module (gnu packages sphinx)
|
|
#:use-module (gnu packages time)
|
|
#:use-module (gnu packages xdisorg)
|
|
#:use-module (gnu packages xml)
|
|
#:use-module (gnu packages xorg)
|
|
#:use-module (guix packages)
|
|
#:use-module (guix download)
|
|
#:use-module (guix utils)
|
|
#:use-module (guix build-system python))
|
|
|
|
(define-public python-scipy
|
|
(package
|
|
(name "python-scipy")
|
|
(version "1.3.2")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "scipy" version))
|
|
(sha256
|
|
(base32 "192d8dsybvhv19igkrsafbdafx198nz7pibkjgrqjhlr66s3jfd0"))))
|
|
(build-system python-build-system)
|
|
(propagated-inputs
|
|
`(("python-numpy" ,python-numpy)
|
|
("python-matplotlib" ,python-matplotlib)
|
|
("python-pyparsing" ,python-pyparsing)))
|
|
(inputs
|
|
`(("lapack" ,lapack)
|
|
("openblas" ,openblas)))
|
|
(native-inputs
|
|
`(("python-cython" ,python-cython)
|
|
("python-pytest" ,python-pytest)
|
|
("python-sphinx" ,python-sphinx)
|
|
("python-numpydoc" ,python-numpydoc)
|
|
("gfortran" ,gfortran)
|
|
("perl" ,perl)
|
|
("which" ,which)))
|
|
(outputs '("out" "doc"))
|
|
(arguments
|
|
`(#:phases
|
|
(modify-phases %standard-phases
|
|
(add-after 'unpack 'disable-broken-tests
|
|
(lambda _
|
|
(substitute* "scipy/sparse/linalg/dsolve/tests/test_linsolve.py"
|
|
(("^( +)def test_threads_parallel\\(self\\):" m indent)
|
|
(string-append indent
|
|
"@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
|
|
m)))
|
|
(substitute* "scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py"
|
|
(("^def test_parallel_threads\\(\\):" m)
|
|
(string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
|
|
m)))
|
|
#t))
|
|
(add-before 'build 'configure-openblas
|
|
(lambda* (#:key inputs #:allow-other-keys)
|
|
(call-with-output-file "site.cfg"
|
|
(lambda (port)
|
|
(format port
|
|
"[blas]
|
|
libraries = openblas
|
|
library_dirs = ~a/lib
|
|
include_dirs = ~a/include
|
|
|
|
# backslash-n to make emacs happy
|
|
\n[atlas]
|
|
library_dirs = ~a/lib
|
|
atlas_libs = openblas
|
|
"
|
|
(assoc-ref inputs "openblas")
|
|
(assoc-ref inputs "openblas")
|
|
(assoc-ref inputs "openblas"))))
|
|
#t))
|
|
(add-after 'install 'install-doc
|
|
(lambda* (#:key inputs outputs #:allow-other-keys)
|
|
(let* ((data (string-append (assoc-ref outputs "doc") "/share"))
|
|
(doc (string-append data "/doc/" ,name "-" ,version))
|
|
(html (string-append doc "/html"))
|
|
(pyver ,(string-append "PYVER=" (version-major+minor
|
|
(package-version python))))
|
|
;; By default it tries to run sphinx-build through the Python
|
|
;; interpreter which won't work with our shell wrapper.
|
|
(sphinxbuild "SPHINXBUILD=LANG=C sphinx-build"))
|
|
;; Make installed package available for building the
|
|
;; documentation
|
|
(add-installed-pythonpath inputs outputs)
|
|
(with-directory-excursion "doc"
|
|
;; Fix generation of images for mathematical expressions.
|
|
(substitute* (find-files "source" "conf\\.py")
|
|
(("pngmath_use_preview = True")
|
|
"pngmath_use_preview = False"))
|
|
(mkdir-p html)
|
|
(invoke "make" "html" pyver sphinxbuild)
|
|
(with-directory-excursion "build/html"
|
|
(for-each (lambda (file)
|
|
(let* ((dir (dirname file))
|
|
(tgt-dir (string-append html "/" dir)))
|
|
(install-file file html)))
|
|
(find-files "." ".*")))))
|
|
#t))
|
|
;; Tests can only be run after the library has been installed and not
|
|
;; within the source directory.
|
|
(delete 'check)
|
|
(add-after 'install 'check
|
|
(lambda* (#:key inputs outputs #:allow-other-keys)
|
|
(add-installed-pythonpath inputs outputs)
|
|
(with-directory-excursion "/tmp"
|
|
(invoke "python" "-c"
|
|
"import scipy; scipy.test(verbose=2)")))))))
|
|
(home-page "https://www.scipy.org/")
|
|
(synopsis "The Scipy library provides efficient numerical routines")
|
|
(description "The SciPy library is one of the core packages that make up
|
|
the SciPy stack. It provides many user-friendly and efficient numerical
|
|
routines such as routines for numerical integration and optimization.")
|
|
(properties `((python2-variant . ,(delay python2-scipy))))
|
|
(license license:bsd-3)))
|
|
|
|
;; Version 1.2.2 is the last version to support Python 2
|
|
(define-public python2-scipy
|
|
(package
|
|
(inherit (package-with-python2
|
|
(strip-python2-variant python-scipy)))
|
|
(version "1.2.2")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "scipy" version))
|
|
(sha256
|
|
(base32
|
|
"1cgvgin8fvckv96hjh3ikmwkra5rif51bdb75ifzf7xbil5iwcx4"))))))
|
|
|
|
(define-public python2-weave
|
|
(package
|
|
(name "python2-weave")
|
|
(version "0.16.0")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "weave" version))
|
|
(sha256
|
|
(base32 "0jnm3584mfichgwgrd1gk5i42ll9c08nkw9716n947n4338f6ghs"))))
|
|
(build-system python-build-system)
|
|
(arguments
|
|
`(#:python ,python-2
|
|
#:phases
|
|
(modify-phases %standard-phases
|
|
(replace 'check
|
|
(lambda _
|
|
(invoke "nosetests" "-v"
|
|
"--exclude"
|
|
"test_(user|incorrect_ownership|char_fail|obj_fail)"))))))
|
|
(propagated-inputs
|
|
`(("python-numpy" ,python2-numpy)))
|
|
(native-inputs
|
|
`(("python-nose" ,python2-nose)))
|
|
(home-page "https://www.scipy.org/")
|
|
(synopsis "Tools for including C/C++ code within Python code")
|
|
(description "Weave is the stand-alone version of the obsolete Scipy
|
|
submodule @code{scipy.weave}. It is Python 2.x only, and is provided for
|
|
users that need new versions of Scipy but have existing code that still
|
|
depends on @code{scipy.weave}. For new code, users are recommended to use
|
|
Cython.")
|
|
(license license:bsd-3)))
|
|
|
|
(define-public python-scikit-fuzzy
|
|
(package
|
|
(name "python-scikit-fuzzy")
|
|
(version "0.4.2")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "scikit-fuzzy" version))
|
|
(sha256
|
|
(base32 "0bp1n771fj44kdp7a00bcvfwirvv2rc803b7g6yf3va7v0j29c8s"))))
|
|
(build-system python-build-system)
|
|
(arguments
|
|
`(#:phases
|
|
(modify-phases %standard-phases
|
|
(replace 'check
|
|
(lambda _
|
|
(invoke "nosetests" "-s" "-v" "skfuzzy")
|
|
#t)))))
|
|
(native-inputs
|
|
`(("python-nose" ,python-nose)))
|
|
(propagated-inputs
|
|
`(("python-networkx" ,python-networkx)
|
|
("python-numpy" ,python-numpy)
|
|
("python-scipy" ,python-scipy)))
|
|
(home-page "https://github.com/scikit-fuzzy/scikit-fuzzy")
|
|
(synopsis "Fuzzy logic toolkit for SciPy")
|
|
(description
|
|
"This package implements many useful tools for projects involving fuzzy
|
|
logic, also known as grey logic.")
|
|
(license license:bsd-3)))
|
|
|
|
(define-public python-scikit-image
|
|
(package
|
|
(name "python-scikit-image")
|
|
(version "0.17.2")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "scikit-image" version))
|
|
(sha256
|
|
(base32 "1cyqqbcbrg3prc36wis0sm3q5rjhd7h9bp33jwfyixzhi02lr5dx"))))
|
|
(build-system python-build-system)
|
|
(arguments
|
|
;; TODO: Some tests require running X11 server. Disable them?
|
|
'(#:tests? #f))
|
|
;; See DEPENDS.txt for the list of build and run time requiremnts
|
|
(propagated-inputs
|
|
`(("python-cloudpickle" ,python-cloudpickle)
|
|
("python-dask" ,python-dask)
|
|
("python-imageio" ,python-imageio)
|
|
("python-matplotlib" ,python-matplotlib)
|
|
("python-networkx" ,python-networkx)
|
|
("python-numpy" ,python-numpy)
|
|
("python-pillow" ,python-pillow)
|
|
("python-pywavelets" ,python-pywavelets)
|
|
("python-scipy" ,python-scipy)
|
|
("python-six" ,python-six)
|
|
("python-tifffile" ,python-tifffile)))
|
|
(native-inputs
|
|
`(("python-cython" ,python-cython)))
|
|
(home-page "https://scikit-image.org/")
|
|
(synopsis "Image processing in Python")
|
|
(description
|
|
"Scikit-image is a collection of algorithms for image processing.")
|
|
(license license:bsd-3)))
|
|
|
|
(define-public python-pandas
|
|
(package
|
|
(name "python-pandas")
|
|
(version "1.0.5")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "pandas" version))
|
|
(sha256
|
|
(base32 "1a2gv3g6jr6vb5ca43fkwjl5xf86wpfz8y3zcy787adjl0hdkib9"))))
|
|
(build-system python-build-system)
|
|
(arguments
|
|
`(#:modules ((guix build utils)
|
|
(guix build python-build-system)
|
|
(ice-9 ftw)
|
|
(srfi srfi-26))
|
|
#:phases (modify-phases %standard-phases
|
|
(add-after 'unpack 'patch-which
|
|
(lambda* (#:key inputs #:allow-other-keys)
|
|
(let ((which (assoc-ref inputs "which")))
|
|
(substitute* "pandas/io/clipboard/__init__.py"
|
|
(("^WHICH_CMD = .*")
|
|
(string-append "WHICH_CMD = \"" which "\"\n"))))
|
|
#t))
|
|
(add-before 'check 'prepare-x
|
|
(lambda _
|
|
(system "Xvfb &")
|
|
(setenv "DISPLAY" ":0")
|
|
;; xsel needs to write a log file.
|
|
(setenv "HOME" "/tmp")
|
|
#t))
|
|
(replace 'check
|
|
(lambda _
|
|
(let ((build-directory
|
|
(string-append
|
|
(getcwd) "/build/"
|
|
(car (scandir "build"
|
|
(cut string-prefix? "lib." <>))))))
|
|
;; Disable the "strict data files" option which causes
|
|
;; the build to error out if required data files are
|
|
;; not available (as is the case with PyPI archives).
|
|
(substitute* "setup.cfg"
|
|
(("addopts = --strict-data-files") "addopts = "))
|
|
(with-directory-excursion build-directory
|
|
(invoke "pytest" "-vv" "pandas" "--skip-slow"
|
|
"--skip-network"))))))))
|
|
(propagated-inputs
|
|
`(("python-jinja2" ,python-jinja2)
|
|
("python-numpy" ,python-numpy)
|
|
("python-openpyxl" ,python-openpyxl)
|
|
("python-pytz" ,python-pytz)
|
|
("python-dateutil" ,python-dateutil)
|
|
("python-xlrd" ,python-xlrd)))
|
|
(inputs
|
|
`(("which" ,which)
|
|
("xclip" ,xclip)
|
|
("xsel" ,xsel)))
|
|
(native-inputs
|
|
`(("python-cython" ,python-cython)
|
|
("python-beautifulsoup4" ,python-beautifulsoup4)
|
|
("python-lxml" ,python-lxml)
|
|
("python-html5lib" ,python-html5lib)
|
|
("python-nose" ,python-nose)
|
|
("python-pytest" ,python-pytest)
|
|
("python-pytest-mock" ,python-pytest-mock)
|
|
;; Needed to test clipboard support.
|
|
("xorg-server" ,xorg-server-for-tests)))
|
|
(home-page "https://pandas.pydata.org")
|
|
(synopsis "Data structures for data analysis, time series, and statistics")
|
|
(description
|
|
"Pandas is a Python package providing fast, flexible, and expressive data
|
|
structures designed to make working with structured (tabular,
|
|
multidimensional, potentially heterogeneous) and time series data both easy
|
|
and intuitive. It aims to be the fundamental high-level building block for
|
|
doing practical, real world data analysis in Python.")
|
|
(properties `((python2-variant . ,(delay python2-pandas))))
|
|
(license license:bsd-3)))
|
|
|
|
(define-public python-pandas-0.25
|
|
(package
|
|
(inherit python-pandas)
|
|
(version "0.25.3")
|
|
(source (origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "pandas" version))
|
|
(sha256
|
|
(base32
|
|
"191048m6kdc6yfvqs9w412lq60cfvigrsb57y0x116lwibgp9njj"))))
|
|
(arguments
|
|
(substitute-keyword-arguments (package-arguments python-pandas)
|
|
((#:phases phases)
|
|
`(modify-phases ,phases
|
|
(replace 'patch-which
|
|
(lambda* (#:key inputs #:allow-other-keys)
|
|
(let ((which (assoc-ref inputs "which")))
|
|
(substitute* "pandas/io/clipboard/__init__.py"
|
|
(("^CHECK_CMD = .*")
|
|
(string-append "CHECK_CMD = \"" which "\"\n"))))
|
|
#t))
|
|
(delete 'prepare-x)))))))
|
|
|
|
;; Pandas 0.24.x are the last versions that support Python 2.
|
|
(define-public python2-pandas
|
|
(let ((pandas (package-with-python2
|
|
(strip-python2-variant python-pandas-0.25))))
|
|
(package
|
|
(inherit pandas)
|
|
(version "0.24.2")
|
|
(source (origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "pandas" version))
|
|
(sha256
|
|
(base32
|
|
"18imlm8xbhcbwy4wa957a1fkamrcb0z988z006jpfda3ki09z4ag"))
|
|
(modules '((guix build utils)))
|
|
(snippet
|
|
'(begin
|
|
;; Adjust for renamed error message in Python 2.7.17. Taken
|
|
;; from <https://github.com/pandas-dev/pandas/pull/29294>.
|
|
(substitute* "pandas/io/parsers.py"
|
|
(("if 'NULL byte' in msg:")
|
|
"if 'NULL byte' in msg or 'line contains NUL' in msg:"))
|
|
#t)))))))
|
|
|
|
(define-public python-xarray
|
|
(package
|
|
(name "python-xarray")
|
|
(version "0.15.1")
|
|
(source (origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "xarray" version))
|
|
(sha256
|
|
(base32
|
|
"1yx8j66b7rn10m2l6gmn8yr9cn38pi5cj0x0wwpy4hdnhy6i7qv4"))))
|
|
(build-system python-build-system)
|
|
(native-inputs
|
|
`(("python-setuptools-scm" ,python-setuptools-scm)
|
|
("python-pytest" ,python-pytest)))
|
|
(propagated-inputs
|
|
`(("python-numpy" ,python-numpy)
|
|
("python-pandas" ,python-pandas)))
|
|
(arguments
|
|
`(#:phases
|
|
(modify-phases %standard-phases
|
|
(replace 'check
|
|
(lambda _
|
|
(invoke "pytest"))))))
|
|
(home-page "https://github.com/pydata/xarray")
|
|
(synopsis "N-D labeled arrays and datasets")
|
|
(description "Xarray (formerly xray) makes working with labelled
|
|
multi-dimensional arrays simple, efficient, and fun!
|
|
|
|
Xarray introduces labels in the form of dimensions, coordinates and attributes
|
|
on top of raw NumPy-like arrays, which allows for a more intuitive, more
|
|
concise, and less error-prone developer experience. The package includes a
|
|
large and growing library of domain-agnostic functions for advanced analytics
|
|
and visualization with these data structures.")
|
|
(license license:asl2.0)))
|
|
|
|
(define-public python-msgpack-numpy
|
|
(package
|
|
(name "python-msgpack-numpy")
|
|
(version "0.4.6.post0")
|
|
(source
|
|
(origin
|
|
(method url-fetch)
|
|
(uri (pypi-uri "msgpack-numpy" version))
|
|
(sha256
|
|
(base32
|
|
"0syzy645mwcy7lfjwz6pc8f9p2vv1qk4limc8iina3l5nnf0rjyz"))))
|
|
(build-system python-build-system)
|
|
(propagated-inputs
|
|
`(("python-msgpack" ,python-msgpack)
|
|
("python-numpy" ,python-numpy)))
|
|
(home-page "https://github.com/lebedov/msgpack-numpy")
|
|
(synopsis
|
|
"Numpy data serialization using msgpack")
|
|
(description
|
|
"This package provides encoding and decoding routines that enable the
|
|
serialization and deserialization of numerical and array data types provided
|
|
by numpy using the highly efficient @code{msgpack} format. Serialization of
|
|
Python's native complex data types is also supported.")
|
|
(license license:bsd-3)))
|