gnu: python-wcwidth: Adjust indentation.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
index 6d86eb1..a4f36c4 100644 (file)
@@ -14,7 +14,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2017 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
@@ -32,7 +32,7 @@
 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
@@ -41,7 +41,7 @@
 ;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
+;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
 ;;; Copyright © 2017, 2019 Brendan Tildesley <mail@brendan.scot>
@@ -57,7 +57,7 @@
 ;;; Copyright © 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
-;;; Copyright © 2019 Brett Gilio <brettg@posteo.net>
+;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
@@ -67,6 +67,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
@@ -1049,21 +1052,21 @@ standard.")
 (define-public python-eventlet
   (package
     (name "python-eventlet")
-    (version "0.20.1")
+    (version "0.25.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "eventlet" version))
        (sha256
         (base32
-         "0f3q55mq4n021wb7qa53pz3ix6i2py64sap66vsaqm2scjw83m9s"))))
+         "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-greenlet" ,python-greenlet)))
     (arguments
      ;; TODO: Requires unpackaged 'enum-compat'.
      '(#:tests? #f))
-    (home-page "http://eventlet.net")
+    (home-page "https://eventlet.net")
     (synopsis "Concurrent networking library for Python")
     (description
      "Eventlet is a concurrent networking library for Python that
@@ -1154,95 +1157,6 @@ human-friendly syntax.")
 (define-public python2-schedule
   (package-with-python2 python-schedule))
 
-(define-public python-pandas
-  (package
-    (name "python-pandas")
-    (version "0.25.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pandas" version))
-       (sha256
-        (base32 "1gp2pvzdiakvgjmykdzdlzrsfbg4vjm49jjdl9s0ha0a3yfs34fa"))))
-    (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"
-                          (("^CHECK_CMD = .*")
-                           (string-append "CHECK_CMD = \"" which "\"\n"))))
-                      #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
-                          ;; Delete tests that require "moto" which is not yet
-                          ;; in Guix.
-                          (for-each delete-file
-                                    '("pandas/tests/io/conftest.py"
-                                      "pandas/tests/io/json/test_compression.py"
-                                      "pandas/tests/io/parser/test_network.py"
-                                      "pandas/tests/io/test_parquet.py"))
-                          (invoke "pytest" "-vv" "pandas" "--skip-slow"
-                                  "--skip-network" "-k"
-                                  ;; XXX: Due to the deleted tests above.
-                                  "not test_read_s3_jsonl"))))))))
-    (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-pytz" ,python-pytz)
-       ("python-dateutil" ,python-dateutil)
-       ("python-xlrd" ,python-xlrd)))
-    (inputs
-     `(("which" ,which)))
-    (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)))
-    (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)))
-
-;; 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))))
-    (package/inherit
-     pandas
-     (version "0.24.2")
-     (source (origin
-               (method url-fetch)
-               (uri (pypi-uri "pandas" version))
-               (sha256
-                (base32
-                 "18imlm8xbhcbwy4wa957a1fkamrcb0z988z006jpfda3ki09z4ag")))))))
-
 (define-public python2-mechanize
   (package
     (name "python2-mechanize")
@@ -3094,19 +3008,20 @@ Language (TOML) configuration files.")
 (define-public python-jsonrpc-server
   (package
     (name "python-jsonrpc-server")
-    (version "0.1.2")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-jsonrpc-server" version))
        (sha256
         (base32
-         "0m4ykpcdy52x37n1ikysp07j7p8ialcdvvvsrjp3545sn7iiid09"))))
+         "0ddgdp26dfxaz6isjbb12974b3rxavgsqrn2zrmck62cmipg5g05"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-future" ,python-future)
        ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+       ("python-pytest" ,python-pytest)
+       ("python-ujson" ,python-ujson)))
     (home-page
      "https://github.com/palantir/python-jsonrpc-server")
     (synopsis "JSON RPC 2.0 server library")
@@ -3140,14 +3055,14 @@ Server (PLS).")
 (define-public python-language-server
   (package
     (name "python-language-server")
-    (version "0.29.1")
+    (version "0.31.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-language-server" version))
        (sha256
         (base32
-         "1f8qlflh6j3s7qfmzhirpl8fgidl6f0qbakdmiml96wdxzvka0s3"))))
+         "1nrs56jpx7dvghaas0kc5k9lxas5vr3awj3k87p4akki43nsblb8"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-pluggy" ,python-pluggy)
@@ -3231,42 +3146,30 @@ interested parties to subscribe to events, or \"signals\".")
 (define-public pelican
   (package
     (name "pelican")
-    (version "4.0.1")
+    (version "4.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pelican" version))
        (sha256
         (base32
-         "05yda7n6r0ll18fpdjzkzyr0ls8hbb86fnjyb33k9jvv5avah2lr"))))
+         "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-feedgenerator" ,python-feedgenerator)
+     `(("python-blinker" ,python-blinker)
+       ("python-dateutil" ,python-dateutil)
+       ("python-docutils" ,python-docutils)
+       ("python-feedgenerator" ,python-feedgenerator)
        ("python-jinja2" ,python-jinja2)
+       ("python-markdown" ,python-markdown)
        ("python-pygments" ,python-pygments)
-       ("python-docutils" ,python-docutils)
        ("python-pytz" ,python-pytz)
-       ("python-blinker" ,python-blinker)
-       ("python-unidecode" ,python-unidecode)
        ("python-six" ,python-six)
-       ("python-dateutil" ,python-dateutil)
-       ("python-markdown" ,python-markdown)))
+       ("python-unidecode" ,python-unidecode)))
     (home-page "https://getpelican.com/")
     (arguments
      `(;; XXX Requires a lot more packages to do unit tests :P
-       #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-before
-                   'install 'adjust-requires
-                   ;; Since feedgenerator is installed from git, it doesn't
-                   ;; conform to the version requirements.
-                   ;;
-                   ;; We *do have* "feedgenerator >= 1.6", but strip off the
-                   ;; version requirement so setuptools doesn't get confused.
-                   (lambda _
-                     (substitute* "setup.py"
-                       (("['\"]feedgenerator.*?['\"]")
-                        "'feedgenerator'")))))))
+       #:tests? #f))
     (synopsis "Python-based static site publishing system")
     (description
      "Pelican is a tool to generate a static blog from reStructuredText,
@@ -3307,42 +3210,6 @@ Mallard using the @command{ducktype} tool.  The yelp-tools package
 provides additional functionality on the produced Mallard documents.")
     (license license:expat)))
 
-(define-public python-scikit-image
-  (package
-    (name "python-scikit-image")
-    (version "0.14.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "scikit-image" version))
-       (sha256
-        (base32 "07qchljkyxvg5nrm12fvszi7pmjk4m01qp0w0z8syxzxxs20pz8s"))))
-    (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-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)))
-    (native-inputs
-     `(("python-cython" ,python-cython)))
-    (home-page "http://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 python2-scikit-image
-  (package-with-python2 python-scikit-image))
-
 (define-public python-cython
   (package
     (name "python-cython")
@@ -3563,13 +3430,14 @@ capabilities.")
     (version "1.8.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
-       (file-name (string-append "python2-numpy-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/numpy/numpy")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name "numpy" version))
        (sha256
         (base32
-         "0sc20gz1b17xnyrkp5frca3ql5qfalpv916hfg2kqxpwr6jg0f1g"))))
+         "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
     (arguments
      (substitute-keyword-arguments (package-arguments python2-numpy)
        ((#:phases phases)
@@ -4312,125 +4180,6 @@ those files.  It can also efficiently manipulate ranges of integers using set
 operators such as union, intersection, and difference.")
     (license license:asl2.0)))
 
-(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 python-socksipy-branch
   (package
     (name "python-socksipy-branch")
@@ -4462,7 +4211,7 @@ as the original project seems to have been abandoned circa 2007.")
 (define-public python-socksipychain
   (package
     (name "python-socksipychain")
-    (version "2.0.15")
+    (version "2.1.0")
     (source
      (origin
        (method git-fetch)
@@ -4472,7 +4221,7 @@ as the original project seems to have been abandoned circa 2007.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1pkljnh9hfwla8sg7mil4f9zrnsqj0dbhr3crxjw3k8dnjz70dvk"))))
+         "0idm9a050rd2kbgbz2sk9ib9589kj4xh1xdnggs6xbq2v2y8f6zn"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f)) ; Tests try to access the network.
@@ -4485,9 +4234,6 @@ TLS/SSL encryption.  It was developed for use in PageKite, and also includes
 a simple netcat replacement with chaining support.")
     (license license:bsd-3)))
 
-(define-public python2-socksipychain
-  (package-with-python2 python-socksipychain))
-
 (define-public python-pycodestyle
   (package
     (name "python-pycodestyle")
@@ -5875,18 +5621,20 @@ features useful for text console applications.")
     (version "1.0.2")
     (source
       (origin
-        (method url-fetch)
+        (method git-fetch)
         ;; package author intends on distributing via github rather than pypi:
         ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
-        (uri (string-append "https://github.com/pazz/urwidtrees/archive/"
-                            version ".tar.gz"))
-        (file-name (string-append name "-" version ".tar.gz"))
+        (uri (git-reference
+               (url "https://github.com/pazz/urwidtrees")
+               (commit version)))
+        (file-name (git-file-name name version))
         (sha256
           (base32
-            "0d30lyd3s2a97rhqfax5w9ssqds2z6aydqx3c6j2c2lk3cb4ngvh"))))
+           "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; no tests
+     '(#:use-setuptools? #f
+       #:tests? #f)) ; no tests
     (propagated-inputs `(("python-urwid" ,python-urwid)))
     (home-page "https://github.com/pazz/urwidtrees")
     (synopsis "Tree widgets for urwid")
@@ -6009,14 +5757,13 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
 (define-public python-lxml
   (package
     (name "python-lxml")
-    (version "4.4.1")
+    (version "4.4.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "lxml" version))
         (sha256
-         (base32
-          "14jnpfcpgqr9sx8ppd286jzcbk0b36hbqsvd8jkvffipzw5v8768"))))
+         (base32 "01nvb5j8vs9nk4z5s3250b1m22b4d08kffa36if3g1mdygdrvxpg"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -6026,9 +5773,8 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
     (inputs
       `(("libxml2" ,libxml2)
         ("libxslt" ,libxslt)))
-    (home-page "http://lxml.de/")
-    (synopsis
-      "Python XML processing library")
+    (home-page "https://lxml.de/")
+    (synopsis "Python XML processing library")
     (description
       "The lxml XML toolkit is a Pythonic binding for the C libraries
 libxml2 and libxslt.")
@@ -6575,21 +6321,26 @@ so it might be a tiny bit slower.")
 (define-public python-waf
   (package
     (name "python-waf")
-    (version "2.0.11")
+    (version "2.0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://waf.io/"
                                   "waf-" version ".tar.bz2"))
               (sha256
                (base32
-                "13zrniwkmfqgsgzi9v5m1367fppp9yzrz6z2ny6hy8dmpb8mj4z4"))))
+                "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'build
            (lambda _
-             (invoke "python" "waf-light" "configure" "build")))
+             ;; XXX: Find a way to add all extra tools.
+             (let ((tools '("gccdeps"
+                            "clang_compilation_database")))
+               (invoke "python" "waf-light" "configure" "build"
+                       (string-append "--tools="
+                                      (string-join tools ","))))))
          (replace 'check
            (lambda _
              (invoke "python" "waf" "--version")))
@@ -7061,7 +6812,7 @@ add functionality and customization to your projects with their own plugins.")
      `(("unzip" ,unzip)
        ("python-pytest" ,python-pytest)
        ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/behdad/fonttools")
+    (home-page "https://github.com/fonttools/fonttools")
     (synopsis "Tools to manipulate font files")
     (description
      "FontTools/TTX is a library to manipulate font files from Python.  It
@@ -8313,15 +8064,15 @@ automatically detect a wide range of file encodings.")
     (version "0.6.2")
     (source
      (origin
-       (method url-fetch)
+       (method git-fetch)
        ;; The release on PyPI does not include tests.
-       (uri (string-append
-             "https://github.com/docopt/docopt/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (git-reference
+              (url "https://github.com/docopt/docopt")
+              (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "16bf890xbdz3m30rsv2qacklh2rdn1zrfspfnwzx9g7vwz8yw4r1"))))
+         "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -8487,36 +8238,22 @@ be set via config files and/or environment variables.")
 provides utilities for common tasks involving decorators and context
 managers.  It also contains additional features that are not part of
 the standard library.")
+    (properties `((python2-variant . ,(delay python2-contextlib2))))
     (license license:psfl)))
 
 (define-public python2-contextlib2
-  (package
-    (name "python2-contextlib2")
-    (version "0.5.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "contextlib2" version))
-       (sha256
-        (base32
-         "0j6ad6lwwyc9kv71skj098v5l7x5biyj2hs4lc5x1kcixqcr97sh"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _ (invoke "python" "test_contextlib2.py" "-v"))))))
-    (native-inputs
-     `(("python2-unittest2" ,python2-unittest2)))
-    (home-page "http://contextlib2.readthedocs.org/")
-    (synopsis "Tools for decorators and context managers")
-    (description "This module is primarily a backport of the Python
-3.2 contextlib to earlier Python versions.  Like contextlib, it
-provides utilities for common tasks involving decorators and context
-managers.  It also contains additional features that are not part of
-the standard library.")
-    (license license:psfl)))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-contextlib2))))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+           (replace 'check
+             (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
+      (native-inputs
+       `(("python2-unittest2" ,python2-unittest2))))))
 
 (define-public python-texttable
   (package
@@ -8756,13 +8493,13 @@ with a new public API, and RPython support.")
 (define-public python-hy
   (package
     (name "python-hy")
-    (version "0.13.0")
+    (version "0.17.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hy" version))
               (sha256
                (base32
-                "19sfymaksx9jhksfnb15ahid46mzrhdfzz6yy2craz2qnzvpmky8"))))
+                "1gdbqsirsdxj320wnp7my5awzs1kfs6m4fqmkzbd1zd47qzj0zfi"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -8781,7 +8518,11 @@ with a new public API, and RPython support.")
     (propagated-inputs
      `(("python-astor" ,python-astor)
        ("python-clint" ,python-clint)
-       ("python-rply" ,python-rply)))
+       ("python-rply" ,python-rply)
+       ("python-fastentrypoints"
+        ,python-fastentrypoints)
+       ("python-funcparserlib"
+        ,python-funcparserlib)))
     (home-page "http://hylang.org/")
     (synopsis "Lisp frontend to Python")
     (description
@@ -9766,15 +9507,16 @@ encoding algorithms to do fuzzy string matching.")
     (name "python2-unicodecsv")
     (version "0.14.1")
     (source (origin
-             (method url-fetch)
+             (method git-fetch)
              ;; The test suite is not included in the PyPi release.
              ;; https://github.com/jdunck/python-unicodecsv/issues/19
-             (uri (string-append "https://github.com/jdunck/python-unicodecsv/"
-                                 "archive/" version ".tar.gz"))
-             (file-name (string-append name "-" version ".tar.gz"))
+             (uri (git-reference
+                    (url "https://github.com/jdunck/python-unicodecsv")
+                    (commit version)))
+             (file-name (git-file-name name version))
              (sha256
               (base32
-               "087nqanfcyp6mlfbbr5lva5f3w6iz1bybls9xlrb8icmc474wh4w"))))
+               "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
     (build-system python-build-system)
     (arguments
      `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
@@ -10154,7 +9896,7 @@ to occurrences in strings and comments.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((file-path (assoc-ref inputs "file")))
                (substitute* "py3status/parse_config.py"
-                 (("\\['file', '-b'")
+                 (("\\[\"file\", \"-b\"")
                   (string-append "['" file-path "/bin/file', '-b'")))
                #t))))
        #:tests? #f)) ; TODO: Requires many libraries not in Guix.
@@ -10547,25 +10289,24 @@ are optionally backed by a C extension built on librdkafka.")
   (package-with-python2 python-pykafka))
 
 (define-public python-wcwidth
- (package
-  (name "python-wcwidth")
-  (version "0.1.7")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (pypi-uri "wcwidth" version))
-      (sha256
-        (base32
-          "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"))))
-  (build-system python-build-system)
-  (home-page "https://github.com/jquast/wcwidth")
-  (synopsis "Measure number of terminal column cells of wide-character codes")
-  (description "Wcwidth measures the number of terminal column cells of
+  (package
+    (name "python-wcwidth")
+    (version "0.1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "wcwidth" version))
+              (sha256
+               (base32
+                "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/jquast/wcwidth")
+    (synopsis "Measure number of terminal column cells of wide-character codes")
+    (description "Wcwidth measures the number of terminal column cells of
 wide-character codes.  It is useful for those implementing a terminal emulator,
 or programs that carefully produce output to be interpreted by one.  It is a
 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
 specified in POSIX.1-2001 and POSIX.1-2008.")
-  (license license:expat)))
+    (license license:expat)))
 
 (define-public python2-wcwidth
   (package-with-python2 python-wcwidth))
@@ -11245,14 +10986,14 @@ relays publish about themselves.")
 (define-public python-pyserial
   (package
     (name "python-pyserial")
-    (version "3.1.1")
+    (version "3.4")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyserial" version))
         (sha256
           (base32
-            "0k1nfdrxxkdlv4zgaqsdv8li0pj3gbh2pyxw8q2bsg6f9490amyn"))))
+            "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
@@ -11597,14 +11338,13 @@ command @command{natsort} that exposes this functionality in the command line.")
 (define-public python-glances
   (package
   (name "python-glances")
-  (version "3.1.1")
+  (version "3.1.2")
   (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "Glances" version))
       (sha256
-        (base32
-          "07j1ggzsqiskyz1i4mrnyr9i95v0dqi0i0hibnv1l188km8shmi8"))
+        (base32 "15384pbvw9wj4sb8zgvd9v1812vrypbyjg0acicjf1hdb3p30fkk"))
       (modules '((guix build utils)))
       (snippet
        '(begin
@@ -11620,8 +11360,7 @@ command @command{natsort} that exposes this functionality in the command line.")
   (propagated-inputs
    `(("python-future" ,python-future)
      ("python-psutil" ,python-psutil)))
-  (home-page
-    "https://github.com/nicolargo/glances")
+  (home-page "https://github.com/nicolargo/glances")
   (synopsis "Cross-platform curses-based monitoring tool")
   (description
     "Glances is a curses-based monitoring tool for a wide variety of platforms.
@@ -12012,19 +11751,41 @@ PNG, JPEG, JPEG2000 and GIF files in pure Python.")
 (define-public python-argcomplete
   (package
     (name "python-argcomplete")
-    (version "1.7.0")
+    (version "1.10.3")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "argcomplete" version))
-        (sha256
-          (base32
-            "11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "argcomplete" version))
+       (sha256
+        (base32
+         "02jkc44drb0yjz6x28lvg6rj607n8r2irdpdvyylm8xnycn54zx3"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'embed-tool-references
+           (lambda _
+             (substitute* "argcomplete/bash_completion.d/python-argcomplete.sh"
+               ((" grep")
+                (string-append " " (which "grep")))
+               ((" egrep")
+                (string-append " " (which "egrep")))
+               (("elif which")
+                (string-append "elif " (which "which")))
+               (("\\$\\(which")
+                (string-append "$(" (which "which"))))
+             #t)))))
+    (inputs
+     `(("grep" ,grep)
+       ("which" ,which)))
     (native-inputs
-     `(("python-pexpect" ,python-pexpect)
+     `(("python-coverage" ,python-coverage)
+       ("python-flake8" ,python-flake8)
+       ("python-pexpect" ,python-pexpect)
+       ("python-wheel" ,python-wheel)
        ("tcsh" ,tcsh)
-       ("bash-full" ,bash)))             ;full Bash for 'test_file_completion'
+       ("fish" ,fish)
+       ("bash-full" ,bash)))            ;full Bash for 'test_file_completion'
     (home-page "https://github.com/kislyuk/argcomplete")
     (synopsis "Shell tab completion for Python argparse")
     (description "argcomplete provides extensible command line tab completion
@@ -13033,29 +12794,27 @@ exception message with a traceback that points to the culprit.")
 (define-public python-mwclient
   (package
     (name "python-mwclient")
-    (version "0.8.4")
+    (version "0.10.0")
     (source
      (origin
-       (method url-fetch)
+       (method git-fetch)
        ;; The PyPI version wouldn't contain tests.
-       (uri (string-append "https://github.com/mwclient/mwclient/archive/"
-                           "v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (git-reference
+              (url "https://github.com/mwclient/mwclient")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "1jj0yhilkjir00719fc7w133x7hdyhkxhk6xblla4asig45klsfv"))))
+         "1c3q6lwmb05yqywc4ya98ca7hsl15niili8rccl4n1yqp77c103v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-requests-oauthlib"
-        ,python-requests-oauthlib)
+     `(("python-requests-oauthlib" ,python-requests-oauthlib)
        ("python-six" ,python-six)))
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-cache" ,python-pytest-cache)
        ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-runner" ,python-pytest-runner)
        ("python-responses" ,python-responses)))
     (home-page "https://github.com/btongminh/mwclient")
     (synopsis "MediaWiki API client")
@@ -13290,14 +13049,14 @@ several utilities, as well as an API for building localization tools.")
 (define-public python-packaging
   (package
     (name "python-packaging")
-    (version "19.0")
+    (version "20.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "packaging" version))
         (sha256
          (base32
-          "1brjhygq9dz6x1kdljivkjfldi3qf5rbkqgck1bpgv9qpv8ab60c"))))
+          "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -13540,14 +13299,15 @@ by path in a JSON document (see RFC 6901).")
     (version "1.16")
     (source
      (origin
-       (method url-fetch)
+       (method git-fetch)
        ;; pypi version lacks tests.js
-       (uri (string-append "https://github.com/stefankoegl/python-json-patch/"
-                           "archive/v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (git-reference
+              (url "https://github.com/stefankoegl/python-json-patch")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "085ykisl8v7mv9h7hvhdy3l2fjzs4214gx32r5k6nx4f76hbv6y5"))))
+         "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-jsonpointer" ,python-jsonpointer)))
@@ -13566,13 +13326,14 @@ applying JSON Patches according to RFC 6902.")
     (version "0.4")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/stefankoegl/python-json-patch/"
-                           "archive/v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/stefankoegl/python-json-patch")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0j0cd9z9zyp8kppp464jxrfgrnbgkzl1yi10i5gsv8yz6d95929d"))))))
+         "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
 
 (define-public python2-jsonpatch-0.4
   (package-with-python2 python-jsonpatch-0.4))
@@ -13893,14 +13654,13 @@ many of the popular cloud service providers using a unified API.")
 (define-public python-smmap2
   (package
     (name "python-smmap2")
-    (version "2.0.3")
+    (version "2.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "smmap2" version))
        (sha256
-        (base32
-         "1hvn28p3zvxa98sbi9lrqvv2ps4q284j4jq9a619zw0m7yv0sly7"))))
+        (base32 "16k03pcnxd3lgzwgbd7nl4jwzm1wmahirvd09kljnzvy96hgza99"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-nosexcover" ,python-nosexcover)))
@@ -14549,24 +14309,15 @@ such as figshare or Zenodo.")
 (define-public python-semver
   (package
     (name "python-semver")
-    (version "2.7.9")
+    (version "2.9.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "semver" version))
-        (sha256
-          (base32
-            "0hhgqppchv59rqj0yzi1prdg2nfsywqmjsqy2rycyxm0hvxmbyqz"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "semver" version))
+       (sha256
+        (base32
+         "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-test-requirements
-           (lambda _
-             (substitute* "setup.py"
-               ;; Our Python is new enough.
-               (("'virtualenv<14\\.0\\.0'") "'virtualenv'"))
-             #t)))))
     (native-inputs
      `(("python-tox" ,python-tox)
        ("python-virtualenv" ,python-virtualenv)))
@@ -14786,14 +14537,14 @@ user's @file{~/Trash} directory.")
 (define-public python-yapf
   (package
     (name "python-yapf")
-    (version "0.24.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "yapf" version))
        (sha256
         (base32
-         "0anwby0ydmyzcsgjc5dn1ryddwvii4dq61vck447q0n96npnzfyf"))))
+         "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
     (build-system python-build-system)
     (home-page "https://github.com/google/yapf")
     (synopsis "Formatter for Python code")
@@ -14844,12 +14595,13 @@ files, and Makefiles.")
     (version "0.6")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/Suor/whatever/archive/" version
-                           ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/Suor/whatever")
+              (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1rchg9hrlvw4sn20lq1zspczr4x1pv57c02gv73igiqx1hqpy2nc"))
-       (file-name (string-append name "-" version ".tar.gz"))))
+        (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -15774,14 +15526,14 @@ validation testing and application logic.")
 (define-public python-numba
   (package
     (name "python-numba")
-    (version "0.42.0")
+    (version "0.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "numba" version))
        (sha256
         (base32
-         "03rqdfx0512lcri2bcpngx5k3jwfbqnanqj3n19c7d6h6hqxvq9x"))))
+         "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -15798,7 +15550,7 @@ validation testing and application logic.")
              #t))
          (add-after 'unpack 'remove-failing-tests
            (lambda _
-             ;; FIXME: these tests fail for unknown reasons:
+             ;; FIXME: These tests fail for unknown reasons:
              ;; test_non_writable_pycache, test_non_creatable_pycache, and
              ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
              (substitute* "numba/tests/test_dispatcher.py"
@@ -15811,10 +15563,20 @@ validation testing and application logic.")
 
              ;; These tests fail because we don't run the tests from the build
              ;; directory: test_setup_py_distutils, test_setup_py_setuptools
-             ;; They ar in numba.tests.test_pycc.TestDistutilsSupport.
+             ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
              (substitute* "numba/tests/test_pycc.py"
                (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
                 (string-append "def guix_skip" m)))
+
+             ;; These tests fail because our version of Python does not have
+             ;; a recognizable front-end for the Numba distribution to use
+             ;; to check against.
+             (substitute* "numba/tests/test_entrypoints.py"
+               (("def test(_init_entrypoint)" _ m)
+                (string-append "def guix_skip" m)))
+             (substitute* "numba/tests/test_jitclasses.py"
+               (("def test(_jitclass_longlabel_not_truncated)" _ m)
+                (string-append "def guix_skip" m)))
              #t))
          (replace 'check
            (lambda _
@@ -15881,17 +15643,25 @@ object-oriented library such as @code{scikit-learn}.")
 (define-public python-dill
   (package
     (name "python-dill")
-    (version "0.2.9")
+    (version "0.3.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dill" version))
        (sha256
-        (base32 "0vwqyi6hyz2r29zydc78dqymkbc5y7gia16xcdh215cikxph9mpn"))))
+        (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
     (build-system python-build-system)
-    ;; FIXME: The check phase fails with "don't know how to make test from: …".
-    (arguments '(#:tests? #f))
-    (home-page "https://pypi.org/project/dill")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (with-directory-excursion "/tmp"
+               (invoke "nosetests" "-v"))
+             #t)))))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (home-page "https://pypi.org/project/dill/")
     (synopsis "Serialize all of Python")
     (description "Dill extends Python's @code{pickle} module for serializing
 and de-serializing Python objects to the majority of the built-in Python
@@ -15907,18 +15677,38 @@ the saved state of the original interpreter session.")
 (define-public python-multiprocess
   (package
     (name "python-multiprocess")
-    (version "0.70.6.1")
+    (version "0.70.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "multiprocess" version))
        (sha256
         (base32
-         "1ip5caz67b3q0553mr8gm8xwsb8x500jn8ml0gihgyfy52m2ypcq"))))
+         "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-broken-tests
+           (lambda _
+             ;; This test is broken as there is no keyboard interrupt.
+             (substitute* "py3.7/multiprocess/tests/__init__.py"
+               (("^(.*)def test_wait_result"
+                 line indent)
+                (string-append indent
+                               "@unittest.skip(\"Disabled by Guix\")\n"
+                               line)))
+             #t))
+         ;; Tests must be run after installation.
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "python" "-m" "multiprocess.tests")
+             #t)))))
     (propagated-inputs
      `(("python-dill" ,python-dill)))
-    (home-page "https://pypi.org/project/multiprocess")
+    (home-page "https://pypi.org/project/multiprocess/")
     (synopsis "Multiprocessing and multithreading in Python")
     (description
      "This package is a fork of the multiprocessing Python package, a package
@@ -16120,41 +15910,63 @@ append on old values.  Partd excels at shuffling operations.")
 (define-public python2-partd
   (package-with-python2 python-partd))
 
+(define-public python-fsspec
+  (package
+    (name "python-fsspec")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fsspec" version))
+       (sha256
+        (base32
+         "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ; there are none
+    (home-page "https://github.com/intake/filesystem_spec")
+    (synopsis "File-system specification")
+    (description "The purpose of this package is to produce a template or
+specification for a file-system interface, that specific implementations
+should follow, so that applications making use of them can rely on a common
+behavior and not have to worry about the specific internal implementation
+decisions with any given backend.")
+    (license license:bsd-3)))
+
 (define-public python-dask
   (package
     (name "python-dask")
-    (version "1.2.2")
+    (version "2.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dask" version))
        (sha256
-        (base32 "0b29gvf96gmp20wicly3v3mhyc93zbm3mdv935fka6x0wax7cy2y"))))
+        (base32 "1w1hqr8vyx6ygwflj2737dcy0mmgvrc0s602gnny8pzlcbs9m76b"))))
     (build-system python-build-system)
-    ;; A single test out of 5000+ fails.  This test is marked as xfail when
-    ;; pytest-xdist is used.
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-broken-test
+         (add-after 'unpack 'disable-broken-tests
            (lambda _
+             ;; This test is marked as xfail when pytest-xdist is used.
              (substitute* "dask/tests/test_threaded.py"
                (("def test_interrupt\\(\\)" m)
                 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
                                m)))
-             (when (which "python2")
-               ;; This test fails with recent Pandas:
-               ;; <https://github.com/dask/dask/issues/3794>.
-               (substitute* "dask/dataframe/tests/test_dataframe.py"
-                 (("def test_info\\(\\)" m)
-                  (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
-                                 m))))
+             ;; This one fails with a type error:
+             ;; TypeError: Already tz-aware, use tz_convert to convert.
+             (substitute* "dask/dataframe/tests/test_shuffle.py"
+               (("def test_set_index_timestamp\\(\\)" m)
+                (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
+                               m)))
              #t))
          (replace 'check
            (lambda _ (invoke "pytest" "-vv"))))))
     (propagated-inputs
      `(("python-cloudpickle" ,python-cloudpickle)
+       ("python-fsspec" ,python-fsspec)
        ("python-numpy" ,python-numpy)
+       ("python-packaging" ,python-packaging)
        ("python-pandas" ,python-pandas)
        ("python-partd" ,python-partd)
        ("python-toolz" ,python-toolz)
@@ -16173,9 +15985,6 @@ larger-than-memory or distributed environments.  These parallel collections
 run on top of the dynamic task schedulers. ")
     (license license:bsd-3)))
 
-(define-public python2-dask
-  (package-with-python2 python-dask))
-
 (define-public python-ilinkedlist
   (package
     (name "python-ilinkedlist")
@@ -16710,14 +16519,14 @@ time-or-computationally-expensive properties quick and easy and works in Python
 (define-public python-folium
   (package
     (name "python-folium")
-    (version "0.10.0")
+    (version "0.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "folium" version))
        (sha256
         (base32
-         "18fzxijsgrb95r0a8anc9ba5ijyw3nlnv3rpavfbkqa5v878x84f"))))
+         "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-branca" ,python-branca)
@@ -16932,3 +16741,359 @@ scratch and manipulate data from Intel HEX file format.  It also includes
 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
 converters and more, those based on the library itself.")
     (license license:bsd-3)))
+
+(define-public python-pykwalify
+  (package
+    (name "python-pykwalify")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pykwalify" version))
+       (sha256
+        (base32
+         "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;missing dependencies
+    (propagated-inputs
+     `(("python-dateutil" ,python-dateutil)
+       ("python-docopt" ,python-docopt)
+       ("python-pyyaml" ,python-pyyaml)))
+    (home-page "https://github.com/grokzen/pykwalify")
+    (synopsis
+     "Python lib/cli for JSON/YAML schema validation")
+    (description
+     "This package provides a parser, schema validator, and data binding tool
+for YAML and JSON.")
+    (license license:expat)))
+
+(define-public python-dbusmock
+  (package
+    (name "python-dbusmock")
+    (version "0.18.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-dbusmock" version))
+       (sha256
+        (base32
+         "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-shell-path
+           (lambda _
+             (substitute* "tests/test_code.py"
+               (("/bin/bash") (which "bash")))
+             #t)))))
+    (native-inputs
+     `(;; For tests.
+       ("dbus" ,dbus) ; for dbus-daemon
+       ("python-nose" ,python-nose)
+       ("which" ,which)))
+    (propagated-inputs
+     `(("python-dbus" ,python-dbus)
+       ("python-pygobject" ,python-pygobject)))
+    (home-page "https://github.com/martinpitt/python-dbusmock")
+    (synopsis "Python library for mock D-Bus objects")
+    (description "python-dbusmock allows for the easy creation of mock objects on
+D-Bus.  This is useful for writing tests for software which talks to D-Bus
+services such as upower, systemd, logind, gnome-session or others, and it is
+hard (or impossible without root privileges) to set the state of the real
+services to what you expect in your tests.")
+    (license license:lgpl3+)))
+
+(define-public python-ujson
+  (package
+    (name "python-ujson")
+    (version "1.35")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ujson" version))
+       (sha256
+        (base32
+         "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
+    (build-system python-build-system)
+    (home-page "http://www.esn.me")
+    (synopsis
+     "Ultra fast JSON encoder and decoder for Python")
+    (description
+     "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
+ bindings for Python 2.5+ and 3.")
+    (license license:bsd-3)))
+
+(define-public python2-ujson
+  (package-with-python2 python-ujson))
+
+(define-public python-iocapture
+  ;; The latest release is more than a year older than this commit.
+  (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
+        (revision "1"))
+    (package
+      (name "python-iocapture")
+      (version "0.1.2")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/oinume/iocapture.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
+      (build-system python-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (delete 'check)
+           (add-after 'install 'check
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (add-installed-pythonpath inputs outputs)
+               (invoke "py.test" "-v" "tests")
+               #t)))))
+      (propagated-inputs
+       `(("python-flexmock" ,python-flexmock)
+         ("python-pytest" ,python-pytest)
+         ("python-pytest-cov" ,python-pytest-cov)
+         ("python-six" ,python-six)))
+      (home-page "https://github.com/oinume/iocapture")
+      (synopsis "Python capturing tool for stdout and stderr")
+      (description
+       "This package helps you to capture the standard out (stdout) and the
+standard error channel (stderr) in your program.")
+      (license license:expat))))
+
+(define-public python-argh
+  ;; There are 21 commits since the latest release containing important
+  ;; improvements.
+  (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
+        (revision "1"))
+    (package
+      (name "python-argh")
+      (version (git-version "0.26.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/neithere/argh.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
+      (build-system python-build-system)
+      (propagated-inputs
+       `(("python-iocapture" ,python-iocapture)
+         ("python-mock" ,python-mock)
+         ("python-pytest" ,python-pytest)
+         ("python-pytest-cov" ,python-pytest-cov)
+         ("python-pytest-xdist" ,python-pytest-xdist)
+         ("python-tox" ,python-tox)))
+      (home-page "https://github.com/neithere/argh/")
+      (synopsis "Argparse wrapper with natural syntax")
+      (description
+       "python-argh is a small library that provides several layers of
+abstraction on top of @code{python-argparse}.  The layers can be mixed.  It is
+always possible to declare a command with the highest possible (and least
+flexible) layer and then tune the behaviour with any of the lower layers
+including the native API of @code{python-argparse}.")
+      (license license:lgpl3+))))
+
+(define-public python-ppft
+  (package
+    (name "python-ppft")
+    (version "1.6.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ppft" version))
+       (sha256
+        (base32
+         "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ; there are none
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (home-page "https://pypi.org/project/ppft/")
+    (synopsis "Fork of Parallel Python")
+    (description
+     "This package is a fork of Parallel Python.  The Parallel Python
+module (@code{pp}) provides an easy and efficient way to create
+parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
+computers and clusters.  It features cross-platform portability and dynamic
+load balancing.")
+    (license license:bsd-3)))
+
+(define-public python-pox
+  (package
+    (name "python-pox")
+    (version "0.2.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pox" version))
+       (sha256
+        (base32
+         "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (mkdir-p "/tmp/guix")
+             (setenv "SHELL" "bash")
+             (setenv "USERNAME" "guix")
+             (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
+             (invoke "py.test" "-vv")
+             #t)))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("which" ,which)))
+    (home-page "https://pypi.org/project/pox/")
+    (synopsis "Python utilities for filesystem exploration and automated builds")
+    (description
+     "Pox provides a collection of utilities for navigating and manipulating
+filesystems.  This module is designed to facilitate some of the low level
+operating system interactions that are useful when exploring a filesystem on a
+remote host.  Pox provides Python equivalents of several shell commands such
+as @command{which} and @command{find}.  These commands allow automated
+discovery of what has been installed on an operating system, and where the
+essential tools are located.")
+    (license license:bsd-3)))
+
+(define-public python-pathos
+  (package
+    (name "python-pathos")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pathos" version))
+       (sha256
+        (base32
+         "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (setenv "PYTHONPATH"
+                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
+             (invoke "python" "./tests/__main__.py"))))))
+    (propagated-inputs
+     `(("python-dill" ,python-dill)
+       ("python-multiprocess" ,python-multiprocess)
+       ("python-pox" ,python-pox)
+       ("python-ppft" ,python-ppft)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://pypi.org/project/pathos/")
+    (synopsis
+     "Parallel graph management and execution in heterogeneous computing")
+    (description
+     "Python-pathos is a framework for heterogenous computing.  It provides a
+consistent high-level interface for configuring and launching parallel
+computations across heterogenous resources.  Python-pathos provides configurable
+launchers for parallel and distributed computing, where each launcher contains
+the syntactic logic to configure and launch jobs in an execution environment.")
+    (license license:bsd-3)))
+
+(define-public python-flit
+  (package
+    (name "python-flit")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flit" version))
+       (sha256
+        (base32
+         "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; XXX: Check requires network access.
+    (home-page "https://flit.readthedocs.io/")
+    (synopsis
+     "Simple packaging tool for simple packages")
+    (description
+     "Flit is a simple way to put Python packages and modules on PyPI.  Flit
+packages a single importable module or package at a time, using the import
+name as the name on PyPI.  All subpackages and data files within a package
+are included automatically.")
+    (license license:bsd-3)))
+
+(define-public python-pathtools
+  (package
+    (name "python-pathtools")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pathtools" version))
+       (sha256
+        (base32
+         "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/gorakhargosh/pathtools")
+    (synopsis "Path utilities for Python")
+    (description "Pattern matching and various utilities for file systems
+paths.")
+    (license license:expat)))
+
+(define-public python-fastentrypoints
+  (package
+    (name "python-fastentrypoints")
+    (version "0.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fastentrypoints" version))
+       (sha256
+        (base32
+         "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/ninjaaron/fast-entry_points")
+    (synopsis
+     "Makes entry_points specified in setup.py load more quickly")
+    (description
+     "Using entry_points in your setup.py makes scripts that start really
+slowly because it imports pkg_resources.  This package allows such setup
+scripts to load entry points more quickly.")
+    (license license:bsd-3)))
+
+(define-public python-funcparserlib
+  (package
+    (name "python-funcparserlib")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "funcparserlib" version))
+       (sha256
+        (base32
+         "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
+    (native-inputs
+     `(("python-tox" ,python-tox)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "tox"))))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/vlasovskikh/funcparserlib")
+    (synopsis
+     "Recursive descent parsing library based on functional combinators")
+    (description
+     "This package is a recursive descent parsing library for Python based on
+functional combinators.  Parser combinators are just higher-order functions
+that take parsers as their arguments and return them as result values.")
+    (license license:expat)))