aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/python-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/python-xyz.scm')
-rw-r--r--gnu/packages/python-xyz.scm1119
1 files changed, 1005 insertions, 114 deletions
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 9da8e47755..0c06b32907 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -88,7 +88,7 @@
;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
-;;; Copyright © 2020 Bonface Munyoki Kilyungi <bonfacemunyoki@gmail.com>
+;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
@@ -217,6 +217,172 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26))
+(define-public python-colorful
+ (package
+ (name "python-colorful")
+ (version "0.5.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "colorful" version))
+ (sha256
+ (base32 "1sh7g2cn1fyz2hzmzs933razdxi2bna9i1lxa790r9pdwba8m146"))))
+ (build-system python-build-system)
+ ;; FIXME: tests cannot be computed:
+ ;; "Can't perform this operation for unregistered loader type"
+ (arguments
+ `(#:tests? #f))
+ (native-inputs
+ `(("python-coverage" ,python-coverage)
+ ("python-flake8" ,python-flake8)
+ ("python-pytest" ,python-pytest)))
+ (propagated-inputs
+ `(("python-colorama" ,python-colorama)))
+ (home-page "http://github.com/timofurrer/colorful")
+ (synopsis "Terminal string styling")
+ (description "Colorful provides an array of text styles, that can be used
+as functions or string constants to form colored terminal output.")
+ (license license:expat)))
+
+(define-public python-yaspin
+ (package
+ (name "python-yaspin")
+ (version "1.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "yaspin" version))
+ (sha256
+ (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/pavdmyt/yaspin")
+ (synopsis "Yet Another Terminal Spinner")
+ (description "Yaspin provides a terminal spinner to indicate the progress
+during long operations.")
+ (license license:expat)))
+
+(define-public python-lunr
+ (package
+ (name "python-lunr")
+ (version "0.6.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "lunr" version))
+ (sha256
+ (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-mock" ,python-mock)
+ ("python-pytest" ,python-pytest)))
+ (propagated-inputs
+ `(("python-nltk" ,python-nltk-3.4)))
+ (home-page
+ "https://github.com/yeraydiazdiaz/lunr.py")
+ (synopsis "Full-text search library")
+ (description "This package provides python library for full-text search.
+It indexes documents and provides a search interface for retrieving documents
+that best match text queries.")
+ (license license:expat)))
+
+(define-public python-mkdocs
+ (package
+ (name "python-mkdocs")
+ (version "1.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "mkdocs" version))
+ (sha256
+ (base32 "0fgv5zawpyyv0vd4j5y8m4h058lh9jkwfcm0xy4pg7dr09a1xdph"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ ;; Requirements refer to a specific version of dependencies,
+ ;; which are too old. So we patch to refer to any later version.
+ (add-after 'unpack 'patch-requirements
+ (lambda _
+ (substitute* "setup.py"
+ (("==") ">=")))))))
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-jinja2" ,python-jinja2)
+ ("python-livereload" ,python-livereload)
+ ("python-lunr" ,python-lunr)
+ ("python-markdown" ,python-markdown)
+ ("python-pyyaml" ,python-pyyaml)
+ ("python-tornado" ,python-tornado)))
+ (home-page "https://www.mkdocs.org")
+ (synopsis "Project documentation with Markdown")
+ (description "MkDocs is a static site generator geared towards building
+project documentation. Documentation source files are written in Markdown, and
+configured with a single YAML configuration file.")
+ (license license:bsd-3)))
+
+(define-public python-pymdown-extensions
+ (package
+ (name "python-pymdown-extensions")
+ (version "8.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "pymdown-extensions" version))
+ (sha256
+ (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
+ (build-system python-build-system)
+ ;; FIXME: "AssertionError: False is not true"
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("python-markdown" ,python-markdown)))
+ (home-page "https://github.com/facelessuser/pymdown-extensions")
+ (synopsis "Extension pack for Python Markdown")
+ (description "PyMdown Extensions is a collection of extensions for Python
+Markdown. All extensions are found under the module namespace of pymdownx.")
+ (license license:expat)))
+
+(define-public python-mkdocs-material
+ (package
+ (name "python-mkdocs-material")
+ (version "7.1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (pypi-uri "mkdocs-material" version))
+ (sha256
+ (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ ;; Requirement mkdocs-material-extensions
+ ;; in-turn requires mkdocs-material. This causes
+ ;; circular dependency, so we remove this requirement.
+ (add-after 'unpack 'patch-requirements
+ (lambda _
+ (substitute* "requirements.txt"
+ (("mkdocs-material-extensions.*$") "")))))))
+ (propagated-inputs
+ `(("python-markdown" ,python-markdown)
+ ("python-mkdocs" ,python-mkdocs)
+ ("python-pygments" ,python-pygments)
+ ("python-pymdown-extensions"
+ ,python-pymdown-extensions)))
+ (home-page "https://squidfunk.github.io/mkdocs-material/")
+ (synopsis "Material Design theme for MkDocs")
+ (description "This package provides a theme plugin for the static site
+generator MkDocs.")
+ (license license:expat)))
+
(define-public python-slixmpp
(package
(name "python-slixmpp")
@@ -948,6 +1114,39 @@ concepts.")
(define-public python2-h5py
(package-with-python2 python-h5py))
+(define-public python-pyls-black
+ (package
+ (name "python-pyls-black")
+ (version "0.4.6")
+ (source
+ (origin
+ ;; There are no tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/rupert/pyls-black/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0cjf0mjn156qp0x6md6mncs31hdpzfim769c2lixaczhyzwywqnj"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"))
+ (propagated-inputs
+ `(("python-black" ,python-black)
+ ("python-language-server"
+ ,python-language-server)
+ ("python-toml" ,python-toml)))
+ (native-inputs
+ `(("python-flake8" ,python-flake8)
+ ("python-isort" ,python-isort)
+ ("python-mypy" ,python-mypy)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (home-page "https://github.com/rupert/pyls-black")
+ (synopsis "Black plugin for the Python Language Server")
+ (description "Black plugin for the Python Language Server.")
+ (license license:expat)))
+
(define-public python-sh
(package
(name "python-sh")
@@ -3160,32 +3359,6 @@ memory usage and transliteration quality.")
(define-public python2-pyjwt
(package-with-python2 python-pyjwt))
-(define-public python-pykka
- (package
- (name "python-pykka")
- (version "1.2.1")
- (source
- (origin
- (method url-fetch)
- (uri (pypi-uri "Pykka" version))
- (sha256
- (base32
- "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
- (build-system python-build-system)
- (native-inputs
- `(("python-mock" ,python-mock)
- ("python-nose" ,python-nose)
- ("python-gevent" ,python-gevent)
- ("python-eventlet" ,python-eventlet)))
- (home-page "https://www.pykka.org/")
- (synopsis "Pykka is a Python implementation of the actor model")
- (description
- "Pykka is a Python implementation of the actor model.
-The actor model introduces some simple rules to control the sharing
-of state and cooperation between execution units, which makes it
-easier to build concurrent applications.")
- (license license:asl2.0)))
-
(define-public python-pymsgbox
(package
(name "python-pymsgbox")
@@ -4297,10 +4470,27 @@ Server (PLS).")
(base32
"1c0pnk2aibfhfaanrs0a5gkabkvz81gj20z7r0152b7fcx5ci14r"))))
(build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'relax-deps
+ (lambda _
+ (substitute* "setup.py" (("pycodestyle>=2.6.0,<2.7.0")
+ "pycodestyle"))
+ (substitute* "setup.py" (("pyflakes>=2.2.0,<2.3.0") "pyflakes"))
+ #t))
+ (add-before 'check 'set-HOME
+ (lambda _ (setenv "HOME" "/tmp") #t))
+ (replace 'check
+ (lambda _
+ ;; Disable failing test.
+ (invoke "python" "-m" "pytest" "-k"
+ "not test_pyqt_completion"))))))
(propagated-inputs
`(("python-autopep8" ,python-autopep8)
("python-configparser" ,python-configparser)
("python-pydocstyle" ,python-pydocstyle)
+ ("python-flake8" ,python-flake8)
("python-future" ,python-future)
("python-jedi" ,python-jedi)
("python-jsonrpc-server" ,python-jsonrpc-server)
@@ -5666,6 +5856,17 @@ Python code against some of the style conventions in
(define-public python2-pycodestyle
(package-with-python2 python-pycodestyle))
+(define-public python-pycodestyle-2.6
+ (package
+ (inherit python-pycodestyle)
+ (version "2.6.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "pycodestyle" version))
+ (sha256
+ (base32
+ "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
+
(define-public python-multidict
(package
(name "python-multidict")
@@ -5888,13 +6089,13 @@ the OleFileIO module from PIL, the Python Image Library.")
(define-public python-pikepdf
(package
(name "python-pikepdf")
- (version "2.10.0")
+ (version "2.11.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pikepdf" version))
(sha256
- (base32 "09wfj1hjvj3r9gv7ywrqd7h3d0bz64bvils8sm3ghj90jhalb03s"))))
+ (base32 "0kd5ydnsmlikkg69r255wvq4vy7plh7dx077s2saly5s5vdcqlkk"))))
(build-system python-build-system)
(arguments
`(#:tests? #false)) ;require python-xmp-toolkit
@@ -6034,17 +6235,99 @@ a general image processing tool.")
(description "This package is a fork of Pillow which adds support for SIMD
parallelism.")))
+(define-public python-imagecodecs
+ (package
+ (name "python-imagecodecs")
+ (version "2021.3.31")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "imagecodecs" version))
+ (sha256
+ (base32
+ "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; Unbundle 3rd party modules.
+ (delete-file-recursively "3rdparty")
+ ;; Delete pre-generated Cython files.
+ (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
+ #t))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; Tests are disabled, because dependencies are missing.
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'create-configuration
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; By default everything is enabled. We can selectively disable
+ ;; extensions (and thus dependencies) by deleting them from the
+ ;; EXTENSIONS dictionary. This is upstream’s preferred way.
+ (call-with-output-file "imagecodecs_distributor_setup.py"
+ (lambda (port)
+ (format port "\
+def customize_build(EXTENSIONS, OPTIONS):
+ del EXTENSIONS['aec']
+ del EXTENSIONS['avif']
+ del EXTENSIONS['bitshuffle']
+ del EXTENSIONS['deflate']
+ del EXTENSIONS['jpeg2k']
+ del EXTENSIONS['jpeg12']
+ del EXTENSIONS['jpegls']
+ del EXTENSIONS['jpegxl']
+ del EXTENSIONS['jpegxr']
+ del EXTENSIONS['lerc']
+ del EXTENSIONS['ljpeg']
+ del EXTENSIONS['lzf']
+ del EXTENSIONS['zfp']
+ del EXTENSIONS['zopfli']
+ OPTIONS['cythonize']
+")))
+ #t)))))
+ (inputs
+ `(("c-blosc" ,c-blosc)
+ ("giflib" ,giflib)
+ ("google-brotli" ,google-brotli)
+ ("libjpeg-turbo" ,libjpeg-turbo)
+ ("libpng" ,libpng)
+ ("libtiff" ,libtiff)
+ ("libwebp" ,libwebp)
+ ("lz4" ,lz4)
+ ("snappy" ,snappy)
+ ("xz" ,xz)
+ ("zlib" ,zlib)
+ ("zstd" ,zstd "lib")))
+ (propagated-inputs
+ `(("python-numpy" ,python-numpy)))
+ (native-inputs
+ ;; For building.
+ `(("python-cython" ,python-cython)
+ ;; For testing. Incomplete.
+ ;("python-numcodecs" ,python-numcodecs)
+ ;("python-zarr" ,python-zarr)
+ ;("python-pytest" ,python-pytest)
+ ))
+ (home-page "https://www.lfd.uci.edu/~gohlke/")
+ (synopsis
+ "Image transformation, compression, and decompression codecs")
+ (description
+ "Imagecodecs is a Python library that provides block-oriented, in-memory
+buffer transformation, compression, and decompression functions for use in the
+tifffile, czifile, and other scientific image input/output modules.")
+ (license license:bsd-3)))
+
(define-public python-roifile
(package
(name "python-roifile")
- (version "2020.5.28")
+ (version "2020.11.28")
(source
(origin
(method url-fetch)
(uri (pypi-uri "roifile" version))
(sha256
(base32
- "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
+ "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
(build-system python-build-system)
(arguments `(#:tests? #f)) ; there are none
(propagated-inputs
@@ -6059,21 +6342,20 @@ regions of interest, geometric shapes, paths, text, etc for image overlays.")
(define-public python-tifffile
(package
(name "python-tifffile")
- (version "2020.6.3")
+ (version "2021.4.8")
(source
(origin
(method url-fetch)
(uri (pypi-uri "tifffile" version))
(sha256
(base32
- "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
+ "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
(build-system python-build-system)
;; Tests require lfdfiles, which depends on tifffile
(arguments `(#:tests? #f))
(propagated-inputs
`(("python-numpy" ,python-numpy)
- ;;("python-lfdfiles" ,python-lfdfiles)
- ("python-roifile" ,python-roifile)))
+ ("python-imagecodecs" ,python-imagecodecs)))
(home-page "https://www.lfd.uci.edu/~gohlke/")
(synopsis "Read and write TIFF(r) files")
(description "This package lets you read image and metadata from many
@@ -6085,19 +6367,28 @@ numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
(define-public python-lfdfiles
(package
(name "python-lfdfiles")
- (version "2020.1.1")
+ (version "2021.2.22")
(source
(origin
(method url-fetch)
(uri (pypi-uri "lfdfiles" version))
(sha256
(base32
- "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
+ "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; Delete pre-generated Cython files.
+ (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
+ #t))))
(build-system python-build-system)
+ (arguments
+ `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
(propagated-inputs
`(("python-click" ,python-click)
("python-numpy" ,python-numpy)
("python-tifffile" ,python-tifffile)))
+ (native-inputs `(("python-cython" ,python-cython)))
(home-page "https://www.lfd.uci.edu/~gohlke/")
(synopsis "Work with LFD data files")
(description
@@ -6193,7 +6484,7 @@ a front-end for C compilers or analysis tools.")
(define-public python-xlsxwriter
(package
(name "python-xlsxwriter")
- (version "1.3.7")
+ (version "1.3.9")
(source
(origin
;; There are no tests in the PyPI tarball.
@@ -6203,7 +6494,7 @@ a front-end for C compilers or analysis tools.")
(commit (string-append "RELEASE_" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1qg40r2mwrqfmhaxnary1cfgi0dwwazp5qga7c9p2cdji2v0x5rm"))))
+ (base32 "04idf331rp0iyhlnh7268jmim8ydw4jjb81hr5rh548sqnq4bhpl"))))
(build-system python-build-system)
(home-page "https://github.com/jmcnamara/XlsxWriter")
(synopsis "Python module for creating Excel XLSX files")
@@ -7246,10 +7537,41 @@ without using the configuration machinery.")
(base32
"1d12j5hkff0xiax87pnhmzbsph3jqqzhz16h8xld7z2y4armq0kr"))))
(build-system python-build-system)
- ;; FIXME: not sure how to run the tests
- (arguments `(#:tests? #f))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ ; Some tests write to $HOME.
+ (setenv "HOME" "/tmp")
+ ; Some tests load the installed package.
+ (add-installed-pythonpath inputs outputs)
+ (invoke "pytest" "-vv"))))
+ (add-after 'unpack 'patch-testsuite
+ (lambda _
+ ;; test_not_on_path() and test_path_priority() try to run a test
+ ;; that loads jupyter_core, so we need PYTHONPATH
+ (substitute* "jupyter_core/tests/test_command.py"
+ (("env = \\{'PATH': ''\\}")
+ "env = {'PATH': '', 'PYTHONPATH': os.environ['PYTHONPATH']}")
+ (("env = \\{'PATH': str\\(b\\)\\}")
+ "env = {'PATH': str(b), 'PYTHONPATH': os.environ['PYTHONPATH']}"))
+ #t)))))
(propagated-inputs
`(("python-traitlets" ,python-traitlets)))
+ (native-inputs
+ `(("python-six" ,python-six)
+ ("python-pytest" ,python-pytest)))
+ ;; This package provides the `jupyter` binary and thus also exports the
+ ;; search paths.
+ (native-search-paths
+ (list (search-path-specification
+ (variable "JUPYTER_CONFIG_DIR")
+ (files '("etc/jupyter")))
+ (search-path-specification
+ (variable "JUPYTER_PATH")
+ (files '("share/jupyter")))))
(home-page "https://jupyter.org/")
(synopsis "Jupyter base package")
(description
@@ -7268,19 +7590,22 @@ without using the configuration machinery.")
(base32
"10p7fcgvv9hvz9zical9wk68ks5ssak2ykbzx65wm1k1hk8a3g64"))))
(build-system python-build-system)
- ;; Tests fail because of missing native python kernel which I assume is
- ;; provided by the ipython package, which we cannot use because it would
- ;; cause a dependency cycle.
(arguments
- `(#:tests? #f
- #:phases (modify-phases %standard-phases
- (add-after 'unpack 'set-tool-file-names
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((iproute (assoc-ref inputs "iproute")))
- (substitute* "jupyter_client/localinterfaces.py"
- (("'ip'")
- (string-append "'" iproute "/sbin/ip'")))
- #t))))))
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'set-tool-file-names
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((iproute (assoc-ref inputs "iproute")))
+ (substitute* "jupyter_client/localinterfaces.py"
+ (("'ip'")
+ (string-append "'" iproute "/sbin/ip'")))
+ #t)))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ ;; Some tests try to write to $HOME.
+ (setenv "HOME" "/tmp")
+ (invoke "pytest" "-vv")))))))
(inputs
`(("iproute" ,iproute)))
(propagated-inputs
@@ -7290,7 +7615,14 @@ without using the configuration machinery.")
("python-tornado" ,python-tornado-6)
("python-traitlets" ,python-traitlets)))
(native-inputs
- `(("python-pytest" ,python-pytest)))
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-asyncio" ,python-pytest-asyncio)
+ ("python-pytest-timeout" ,python-pytest-timeout)
+ ("python-async-generator" ,python-async-generator)
+ ("python-mock" ,python-mock)
+ ("python-msgpack" ,python-msgpack)
+ ("python-ipython" ,python-ipython)
+ ("python-ipykernel" ,python-ipykernel-bootstrap)))
(home-page "https://jupyter.org/")
(synopsis "Jupyter protocol implementation and client libraries")
(description
@@ -7300,6 +7632,20 @@ for working with kernels, and the @code{jupyter kernelspec} entrypoint for
installing @code{kernelspec}s for use with Jupyter frontends.")
(license license:bsd-3)))
+;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
+;; and jupyter-client by removing the former from its native-inputs and
+;; disabling tests.
+(define-public python-jupyter-client-bootstrap
+ (let ((base python-jupyter-client))
+ (hidden-package
+ (package
+ (inherit base)
+ (name "python-jupyter-client-bootstrap")
+ (arguments
+ `(#:tests? #f
+ ,@(package-arguments base)))
+ (native-inputs `())))))
+
(define-public python2-jupyter-client
(package-with-python2 python-jupyter-client))
@@ -7334,6 +7680,8 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
#t))))))
(propagated-inputs
`(("python-ipython" ,python-ipython)
+ ("python-tornado" ,python-tornado-6)
+ ("python-traitlets" ,python-traitlets)
;; imported at runtime during connect
("python-jupyter-client" ,python-jupyter-client)))
(native-inputs
@@ -7346,6 +7694,19 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
"This package provides the IPython kernel for Jupyter.")
(license license:bsd-3)))
+;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
+;; break the cycle between ipykernel and jupyter-client.
+(define-public python-ipykernel-bootstrap
+ (let ((parent python-ipykernel))
+ (hidden-package
+ (package
+ (inherit parent)
+ (name "python-ipykernel-bootstrap")
+ (propagated-inputs
+ `(("python-jupyter-client" ,python-jupyter-client-bootstrap)
+ ,@(fold alist-delete (package-propagated-inputs parent)
+ '("python-jupyter-client"))))))))
+
(define-public python-pari-jupyter
(package
(name "python-pari-jupyter")
@@ -7689,6 +8050,43 @@ features useful for text console applications.")
supports @code{readline} shortcuts.")
(license license:expat)))
+(define-public python-textdistance
+ (package
+ (name "python-textdistance")
+ (version "4.2.1")
+ (source
+ (origin
+ ;; There are no tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/life4/textdistance")
+ (commit (string-append "v." version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'delete-external-test
+ (lambda _
+ ;; All tests in this file require external libraries.
+ (delete-file "tests/test_external.py")
+ #t)))))
+ (native-inputs
+ `(("python-hypothesis" ,python-hypothesis)
+ ("python-isort" ,python-isort)
+ ("python-numpy" ,python-numpy)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)
+ ("python-tabulate" ,python-tabulate)))
+ (home-page "https://github.com/life4/textdistance")
+ (synopsis "Compute distance between the two texts")
+ (description "@code{textdistance} is a pure Python library for comparing
+distance between two or more sequences by many algorithms.")
+ (license license:expat)))
+
(define-public python-urwidtrees
(package
(name "python-urwidtrees")
@@ -8080,6 +8478,40 @@ solve linear problems.")
algorithm.")
(license license:asl2.0)))
+(define-public python-three-merge
+ (package
+ (name "python-three-merge")
+ (version "0.1.1")
+ (source
+ (origin
+ ;; There are no tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/spyder-ide/three-merge")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"))
+ (propagated-inputs
+ `(("python-diff-match-patch" ,python-diff-match-patch)))
+ (native-inputs
+ `(("python-flaky" ,python-flaky)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-runner" ,python-pytest-runner)
+ ("python-pytest-timeout" ,python-pytest-timeout)))
+ (home-page "https://github.com/spyder-ide/three-merge")
+ (synopsis "Library for merging two strings with respect to a base one")
+ (description
+ "This package provides a Python library to perform a 3-way merge between
+strings, based on @code{diff-match-patch}. This library performs merges at a
+character level, as opposed to most VCS systems, which opt for a line-based
+approach.")
+ (license license:expat)))
+
(define-public snakemake
(package
(name "snakemake")
@@ -8620,6 +9052,17 @@ PEP 8.")
(define-public python2-pyflakes
(package-with-python2 python-pyflakes))
+(define-public python-pyflakes-2.2
+ (package
+ (inherit python-pyflakes)
+ (version "2.2.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyflakes" version))
+ (sha256
+ (base32
+ "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))))
+
(define-public python-mccabe
(package
(name "python-mccabe")
@@ -8648,23 +9091,21 @@ cyclomatic complexity of Python source code.")
(define-public python-flake8
(package
(name "python-flake8")
- (version "3.9.0")
+ (version "3.9.1")
(source (origin
(method url-fetch)
(uri (pypi-uri "flake8" version))
(sha256
(base32
- "1w65iyjnrwipv4dbcqxh725ri7mdx01d6pjyggd97c0j5cvkx1vq"))))
+ "0y732h02n2aih8gzyfj4bbhg4jgahyv84mjwfindk2g6w45rka0s"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
- (delete 'check)
- (add-after 'install 'check
+ (replace 'check
(lambda* (#:key inputs outputs #:allow-other-keys)
(add-installed-pythonpath inputs outputs)
- (invoke "pytest" "-v")
- #t)))))
+ (invoke "pytest" "-v"))))))
(propagated-inputs
`(("python-pycodestyle" ,python-pycodestyle)
("python-entrypoints" ,python-entrypoints)
@@ -8672,7 +9113,7 @@ cyclomatic complexity of Python source code.")
("python-mccabe" ,python-mccabe)))
(native-inputs
`(("python-mock" ,python-mock)
- ("python-pytest" ,python-pytest-bootstrap)))
+ ("python-pytest" ,python-pytest)))
(home-page "https://gitlab.com/pycqa/flake8")
(synopsis
"The modular source code checker: pep8, pyflakes and co")
@@ -8691,6 +9132,22 @@ cyclomatic complexity of Python source code.")
("python2-typing" ,python2-typing)
,@(package-propagated-inputs base))))))
+(define-public python-flake8-3.8
+ (package
+ (inherit python-flake8)
+ (version "3.8.4")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "flake8" version))
+ (sha256
+ (base32
+ "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
+ (propagated-inputs
+ `(("python-pycodestyle" ,python-pycodestyle-2.6)
+ ("python-entrypoints" ,python-entrypoints)
+ ("python-pyflakes" ,python-pyflakes-2.2)
+ ("python-mccabe" ,python-mccabe)))))
+
(define-public python-flake8-bugbear
(package
(name "python-flake8-bugbear")
@@ -8776,7 +9233,7 @@ These should be used in preference to using a backslash for line continuation.
correct string literal concatenation.
It looks for style problems like implicitly concatenated string literals on
-the same line (which can be introduced by the code formating tool Black), or
+the same line (which can be introduced by the code formatting tool Black), or
unnecessary plus operators for explicit string literal concatenation.")
(license license:expat)))
@@ -9321,14 +9778,14 @@ reading and writing MessagePack data.")
(define-public python-netaddr
(package
(name "python-netaddr")
- (version "0.7.19")
+ (version "0.8.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "netaddr" version))
(sha256
(base32
- "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
+ "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
(build-system python-build-system)
(arguments `(#:tests? #f)) ;; No tests.
(home-page "https://github.com/drkjam/netaddr/")
@@ -9755,9 +10212,9 @@ implementations of ASN.1-based codecs and protocols.")
(define-public python2-pyasn1-modules
(package-with-python2 python-pyasn1-modules))
-(define-public python-ipaddress
+(define-public python2-ipaddress
(package
- (name "python-ipaddress")
+ (name "python2-ipaddress")
(version "1.0.23")
(source (origin
(method url-fetch)
@@ -9766,6 +10223,8 @@ implementations of ASN.1-based codecs and protocols.")
(base32
"1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
(build-system python-build-system)
+ (arguments
+ `(#:python ,python-2))
(home-page "https://github.com/phihag/ipaddress")
(synopsis "IP address manipulation library")
(description
@@ -9775,9 +10234,6 @@ implementations of ASN.1-based codecs and protocols.")
module to older versions of Python.")
(license license:psfl)))
-(define-public python2-ipaddress
- (package-with-python2 python-ipaddress))
-
(define-public python2-ipaddr
(package
(name "python2-ipaddr")
@@ -10167,25 +10623,103 @@ Debian-related files, such as:
;; Modules are either GPLv2+ or GPLv3+.
(license license:gpl3+)))
+(define-public python-json-spec
+ (package
+ (name "python-json-spec")
+ (version "0.10.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "json-spec" version))
+ (sha256
+ (base32
+ "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-pathlib" ,python-pathlib)
+ ("python-six" ,python-six)))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "http://py.errorist.io/json-spec")
+ (synopsis
+ "JSON Schema, JSON Pointer and JSON Reference for Python")
+ (description
+ "This Python library implements several JSON specs, like JSON Schema,
+JSON Reference and JSON Pointer.")
+ (license license:bsd-3)))
+
+(define-public python-fastjsonschema
+ (package
+ (name "python-fastjsonschema")
+ (version "2.15.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "fastjsonschema" version))
+ (sha256
+ (base32
+ "0xknp399gpdjf08lrq2yvv66s7nsc51fgbm6vph7vyyg1ckbmv71"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; Fail with a strange backtrace ending in importlib.
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest" "-vv" "-m" "not benchmark")))))))
+ (native-inputs
+ `(("python-colorama" ,python-colorama)
+ ("python-json-spec" ,python-json-spec)
+ ("python-jsonschema" ,python-jsonschema)
+ ("python-pylint" ,python-pylint)
+ ("python-pytest" ,python-pytest-6)
+ ("python-pytest-benchmark"
+ ,python-pytest-benchmark)
+ ("python-pytest-cache" ,python-pytest-cache)
+ ("python-validictory" ,python-validictory)))
+ (home-page
+ "https://github.com/horejsek/python-fastjsonschema")
+ (synopsis
+ "Fast Python implementation of JSON schema")
+ (description
+ "This library implements validation of JSON documents by JSON schema for
+drafts 04, 06 and 07.")
+ (license license:bsd-3)))
+
(define-public python-nbformat
(package
(name "python-nbformat")
(version "5.1.3")
- (source
- (origin
- (method url-fetch)
- (uri (pypi-uri "nbformat" version))
- (sha256
- (base32
- "1j6idwsw59cslsssvlkg2bkfpvd6ri7kghbp14jwcw87sy57h5mm"))))
+ ;; The PyPi release tarball lacks some test cases and test data.
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jupyter/nbformat.git")
+ (commit version)))
+ (sha256
+ (base32
+ "033v16cfmxzh3jn5phnil4p3silr49iwh9wiigzhv0crc6sanvwz"))
+ (file-name (git-file-name name version))))
(build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest" "-vv")))))))
(propagated-inputs
`(("python-ipython-genutils" ,python-ipython-genutils)
("python-jsonschema" ,python-jsonschema)
("python-jupyter-core" ,python-jupyter-core)
("python-traitlets" ,python-traitlets)))
(native-inputs
- `(("python-pytest" ,python-pytest)))
+ `(("python-pytest" ,python-pytest)
+ ("python-fastjsonschema" ,python-fastjsonschema) ; This is only active
+ ; when setting NBFORMAT_VALIDATOR="fastjsonschema", so include it for
+ ; testing only.
+ ("python-testpath" ,python-testpath)))
(home-page "https://jupyter.org")
(synopsis "Jupyter Notebook format")
(description "This package provides the reference implementation of the
@@ -10368,32 +10902,88 @@ time.")
(arguments
`(#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'fix-paths-and-tests
+ (lambda _
+ ;; Use pandoc binary from input.
+ (substitute* "nbconvert/utils/pandoc.py"
+ (("'pandoc'") (string-append "'" (which "pandoc") "'")))
+ ;; Same for LaTeX.
+ (substitute* "nbconvert/exporters/pdf.py"
+ (("\"xelatex\"") (string-append "\"" (which "xelatex") "\""))
+ (("\"bibtex\"") (string-append "\"" (which "bibtex") "\"")))
+ ;; Make sure tests are not skipped.
+ (substitute* (find-files "." "test_.+\\.py$")
+ (("@onlyif_cmds_exist\\(('(pandoc|xelatex)'(, )?)+\\)") ""))
+ ;; Pandoc is never missing, disable test.
+ (substitute* "nbconvert/utils/tests/test_pandoc.py"
+ (("import os" all) (string-append all "\nimport pytest"))
+ (("(.+)(def test_pandoc_available)" all indent def)
+ (string-append indent "@pytest.mark.skip('disabled by guix')\n"
+ indent def)))
+ ;; Not installing pyppeteer, delete test.
+ (delete-file "nbconvert/exporters/tests/test_webpdf.py")
+ (substitute* "nbconvert/tests/test_nbconvertapp.py"
+ (("(.+)(def test_webpdf_with_chromium)" all indent def)
+ (string-append indent "@pytest.mark.skip('disabled by guix')\n"
+ indent def)))))
(replace 'check
(lambda* (#:key tests? inputs outputs #:allow-other-keys)
(when tests?
+ ;; Some tests invoke the installed nbconvert binary.
(add-installed-pythonpath inputs outputs)
-
- ;; This seems to require Chromium.
- (delete-file "nbconvert/exporters/tests/test_webpdf.py")
-
- ;; This depends on the python3 kernel, which is provided by a
- ;; package that depends on nbconvert.
- (delete-file "nbconvert/preprocessors/tests/test_execute.py")
-
- ;; Most of these tests fail because nbconvert fails to execute
- ;; itself.
- (delete-file "nbconvert/tests/test_nbconvertapp.py")
-
- ;; One test here fails with an unclear error. It looks like
- ;; "%%pylabprint" is supposed to be expanded to some other
- ;; code, but isn't.
- (delete-file "nbconvert/filters/tests/test_strings.py")
-
+ ;; Tries to write to this path.
+ (unsetenv "JUPYTER_CONFIG_DIR")
+ ;; Tests depend on templates installed to output.
+ (setenv "JUPYTER_PATH"
+ (string-append
+ (assoc-ref outputs "out")
+ "/share/jupyter:"
+ (getenv "JUPYTER_PATH")))
;; Some tests need HOME
(setenv "HOME" "/tmp")
- (invoke "pytest")))))))
+ (invoke "pytest" "-vv")))))))
+ (inputs
+ `(("pandoc" ,pandoc)
+ ;; XXX: Disabled, needs substitute*.
+ ;;("inkscape" ,inkscape)
+ ))
(native-inputs
- `(("python-pytest" ,python-pytest)))
+ `(("python-ipykernel" ,python-ipykernel)
+ ;; XXX: Disabled, not in guix.
+ ;;("python-pyppeteer" ,python-pyppeteer)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-dependency" ,python-pytest-dependency)
+ ("texlive" ,(texlive-union (list texlive-adjustbox
+ texlive-amsfonts/patched
+ texlive-booktabs
+ texlive-caption
+ texlive-eurosym
+ texlive-fonts-rsfs
+ texlive-generic-ulem
+ texlive-iftex
+ texlive-jknappen
+ texlive-latex-amsmath
+ texlive-latex-enumitem
+ texlive-latex-fancyvrb
+ texlive-latex-float
+ texlive-latex-fontspec
+ texlive-latex-geometry
+ texlive-latex-hyperref
+ texlive-latex-jknapltx
+ texlive-latex-ms
+ texlive-latex-oberdiek
+ texlive-latex-parskip
+ texlive-latex-trimspaces
+ texlive-latex-upquote
+ texlive-latex-ucs
+ texlive-lm
+ texlive-mathpazo
+ texlive-tcolorbox
+ texlive-titling
+ texlive-tools
+ texlive-xcolor
+ texlive-zapfding)))))
(propagated-inputs
`(("python-bleach" ,python-bleach)
("python-defusedxml" ,python-defusedxml)
@@ -10407,7 +10997,9 @@ time.")
("python-pygments" ,python-pygments)
("python-jupyterlab-pygments" ,python-jupyterlab-pygments)
("python-testpath" ,python-testpath)
- ("python-traitlets" ,python-traitlets)))
+ ("python-traitlets" ,python-traitlets)
+ ;; Required, even if [serve] is not used.
+ ("python-tornado" ,python-tornado-6)))
(home-page "https://jupyter.org")
(synopsis "Converting Jupyter Notebooks")
(description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
@@ -10476,6 +11068,9 @@ convert an @code{.ipynb} notebook file into various static formats including:
(delete-file-recursively "notebook/tests/selenium")
(when tests?
(add-installed-pythonpath inputs outputs)
+ ;; Some tests do not expect all files to be installed in the
+ ;; same directory, but JUPYTER_PATH contains multiple entries.
+ (unsetenv "JUPYTER_PATH")
;; Some tests need HOME
(setenv "HOME" "/tmp")
(with-directory-excursion "/tmp"
@@ -10730,10 +11325,6 @@ popular online obfuscators.")
("python-nbconvert" ,python-nbconvert)
("python-notebook" ,python-notebook)
("python-qtconsole" ,python-qtconsole)))
- (native-search-paths
- (list (search-path-specification
- (variable "JUPYTER_PATH")
- (files '("share/jupyter")))))
(home-page "https://jupyter.org")
(synopsis "Web application for interactive documents")
(description
@@ -11025,6 +11616,44 @@ for atomic file system operations.")
(define-public python2-atomicwrites
(package-with-python2 python-atomicwrites))
+(define-public python-qstylizer
+ (package
+ (name "python-qstylizer")
+ (version "0.1.10")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/blambright/qstylizer")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'set-pbr-version
+ (lambda _
+ (setenv "PBR_VERSION" "3.0.1"))))))
+ (native-inputs
+ `(("python-pbr" ,python-pbr)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-catchlog" ,python-pytest-catchlog)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-mock" ,python-pytest-mock)
+ ("python-pytest-runner" ,python-pytest-runner)
+ ("python-pytest-xdist" ,python-pytest-xdist)))
+ (propagated-inputs
+ `(("python-inflection" ,python-inflection)
+ ("python-tinycss" ,python-tinycss)))
+ (home-page "https://github.com/blambright/qstylizer")
+ (synopsis "Qt stylesheet generation utility for PyQt/PySide")
+ (description "@code{qstylizer} is a Python package designed to help with
+the construction of PyQt/PySide stylesheets.")
+ (license license:expat)))
+
(define-public python-click-threading
(package
(name "python-click-threading")
@@ -11251,13 +11880,13 @@ output, progress bar display, and pipes.")
(define-public python-rply
(package
(name "python-rply")
- (version "0.7.5")
+ (version "0.7.8")
(source (origin
(method url-fetch)
(uri (pypi-uri "rply" version))
(sha256
(base32
- "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
+ "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
(build-system python-build-system)
(propagated-inputs
`(("python-appdirs" ,python-appdirs)))
@@ -11311,6 +11940,25 @@ its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
Python at your fingertips, in Lisp form.")
(license license:expat)))
+(define-public python-hissp
+ (package
+ (name "python-hissp")
+ (version "0.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "hissp" version))
+ (sha256
+ (base32
+ "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/gilch/hissp")
+ (synopsis "It's Python with a Lissp")
+ (description "Hissp is a modular Lisp implementation that compiles to a
+functional subset of Python—Syntactic macro metaprogramming with full access
+to the Python ecosystem.")
+ (license license:asl2.0)))
+
(define-public python2-functools32
(package
(name "python2-functools32")
@@ -12405,6 +13053,119 @@ ISO 8859, etc.).")
(define-public python2-translitcodec
(package-with-python2 python-translitcodec))
+(define-public python-anyqt
+ (package
+ (name "python-anyqt")
+ (version "0.0.11")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "AnyQt" version))
+ (sha256
+ (base32 "0gl2czirzjvhbq963i2awxp8kwbc1grh67lpcwfipyn9w3kdwdj4"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ;there are no tests
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'delete-files
+ ;; Delete files related to other operating systems.
+ (lambda _
+ (delete-file "AnyQt/QtMacExtras.py")
+ (delete-file "AnyQt/QtWinExtras.py")
+ #t)))))
+ (home-page "https://github.com/ales-erjavec/anyqt")
+ (synopsis "PyQt4/PyQt5 compatibility layer")
+ (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
+ (license license:gpl3)))
+
+(define-public python-pyqtgraph
+ (package
+ (name "python-pyqtgraph")
+ (version "0.12.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyqtgraph" version))
+ (sha256
+ (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'set-home-and-qpa
+ (lambda _
+ (setenv "HOME" "/tmp")
+ (setenv "QT_QPA_PLATFORM" "offscreen")
+ #t))
+ (replace 'check
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (invoke "pytest" "-vv" "-k"
+ ;; These tests try to download online data.
+ (string-append "not test_PolyLineROI"
+ " and not test_getArrayRegion_axisorder"
+ " and not test_getArrayRegion"
+ " and not test_PlotCurveItem"
+ " and not test_NonUniformImage_colormap"
+ " and not test_NonUniformImage_lut"
+ " and not test_ImageItem_axisorder"
+ " and not test_ImageItem")))))))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-xdist" ,python-pytest-xdist)))
+ (inputs
+ `(("qtbase" ,qtbase)))
+ (propagated-inputs
+ `(("python-h5py" ,python-h5py)
+ ("python-numpy" ,python-numpy)
+ ("python-pyopengl" ,python-pyopengl)
+ ("python-scipy" ,python-scipy)
+ ("python-pyqt" ,python-pyqt)))
+ (home-page "http://www.pyqtgraph.org")
+ (synopsis "Scientific graphics and GUI library for Python")
+ (description
+ "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
+and PySide6. It is intended for use in mathematics, scientific or engineering
+applications.")
+ (license license:expat)))
+
+(define-public python-qasync
+ (package
+ (name "python-qasync")
+ (version "0.15.0")
+ (source
+ (origin
+ ;; There are no tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/CabbageDevelopment/qasync/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0va9h6v102d7mxz608banjc0l0v02dq3ywhr5i4nqaxx3qkazc2l"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'set-qpa
+ (lambda _
+ (setenv "QT_QPA_PLATFORM" "offscreen")
+ #t)))))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (propagated-inputs
+ `(("python-pyqt" ,python-pyqt)))
+ (home-page "https://github.com/CabbageDevelopment/qasync")
+ (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
+ (description
+ "@code{qasync} allows coroutines to be used in PyQt/PySide applications
+by providing an implementation of the PEP 3156 event-loop.")
+ (license license:bsd-2)))
+
(define-public python-editor
(package
(name "python-editor")
@@ -13997,13 +14758,13 @@ until the object is actually required, and caches the result of said call.")
(define-public python-dnspython
(package
(name "python-dnspython")
- (version "2.0.0")
+ (version "2.1.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "dnspython" version ".zip"))
(sha256
(base32
- "1dyip5ygqqhrgcaiy7qzjpndl9xciip186paxqwkm726fj9z0jh4"))))
+ "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
(build-system python-build-system)
(native-inputs `(("unzip" ,unzip)))
(arguments '(#:tests? #f)) ; XXX: requires internet access
@@ -14364,6 +15125,80 @@ etc.")
(package/inherit base
(name "ptpython2"))))
+(define-public python-easyprocess
+ (package
+ (name "python-easyprocess")
+ (version "0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "EasyProcess" version))
+ (sha256
+ (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
+ (build-system python-build-system)
+ (arguments
+ ;; Tests require pyvirtualdisplay, which requires this package.
+ `(#:tests? #f))
+ (home-page "https://github.com/ponty/easyprocess")
+ (synopsis "Python subprocess interface")
+ (description
+ "@code{easyprocess} is an easy to use Python subprocess interface.")
+ (license license:bsd-3)))
+
+(define-public python-entrypoint2
+ (package
+ (name "python-entrypoint2")
+ (version "0.2.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "entrypoint2" version))
+ (sha256
+ (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"))
+ (native-inputs
+ `(("python-easyprocess" ,python-easyprocess)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (home-page "https://github.com/ponty/entrypoint2")
+ (synopsis "Command-line interface for Python modules")
+ (description
+ "@code{entrypoint2} is an easy to use command-line interface for Python
+modules based on @code{argparse}. It translates function signature and
+documentation to argparse configuration.")
+ (license license:bsd-3)))
+
+(define-public python-pyvirtualdisplay
+ (package
+ (name "python-pyvirtualdisplay")
+ (version "2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "PyVirtualDisplay" version))
+ (sha256
+ (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
+ (build-system python-build-system)
+ (arguments
+ ;; Tests fail with:
+ ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
+ `(#:tests? #f))
+ (native-inputs
+ `(("python-entrypoint2" ,python-entrypoint2)
+ ("python-psutil" ,python-psutil)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (propagated-inputs
+ `(("python-easyprocess" ,python-easyprocess)
+ ("python-pillow" ,python-pillow)))
+ (home-page "https://github.com/ponty/pyvirtualdisplay")
+ (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
+ (description
+ "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
+ (license license:bsd-3)))
+
(define-public python-stem
(package
(name "python-stem")
@@ -14539,18 +15374,20 @@ extracting firmware images")
(define-public python-nltk
(package
(name "python-nltk")
- (version "3.2.1")
+ (version "3.6.2")
(source (origin
(method url-fetch)
- (uri (pypi-uri "nltk" version))
+ (uri (pypi-uri "nltk" version ".zip"))
(sha256
(base32
- "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
+ "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
(build-system python-build-system)
(arguments
'(;; The tests require some extra resources to be downloaded.
;; TODO Try packaging these resources.
#:tests? #f))
+ (native-inputs
+ `(("unzip" ,unzip)))
(home-page "http://nltk.org/")
(synopsis "Natural Language Toolkit")
(description "It provides interfaces to over 50 corpora and lexical
@@ -14559,6 +15396,19 @@ for classification, tokenization, stemming, tagging, parsing, and semantic
reasoning, wrappers for natural language processing libraries.")
(license license:asl2.0)))
+;; Versions >=3.5 breaks backward-compatibility,
+;; so we keep version 3.4.x around for a while.
+(define-public python-nltk-3.4
+ (package
+ (inherit python-nltk)
+ (version "3.4.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "nltk" version ".zip"))
+ (sha256
+ (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))))
+
(define-public python2-nltk
(package-with-python2 python-nltk))
@@ -14730,13 +15580,13 @@ command @command{natsort} that exposes this functionality in the command line.")
(define-public glances
(package
(name "glances")
- (version "3.1.6")
+ (version "3.1.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "Glances" version))
(sha256
- (base32 "11xbm8jgcxha191ly7q76nab1ilabiz14mqf6i3y6aw5xvgg017c"))
+ (base32 "020vb38qrb0m3sdr7xjr43cmcfxpnyg4hmb97wgxsa9zvwsjwa5x"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -21179,14 +22029,14 @@ one-off scripts.")
(define-public python-cached-property
(package
(name "python-cached-property")
- (version "1.5.1")
+ (version "1.5.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "cached-property" version))
(sha256
(base32
- "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
+ "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
(build-system python-build-system)
(arguments
`(#:phases
@@ -23966,13 +24816,13 @@ applications with variable CPU loads).")
(define-public python-djvulibre
(package
(name "python-djvulibre")
- (version "0.8.5")
+ (version "0.8.6")
(source
(origin
(method url-fetch)
(uri (pypi-uri "python-djvulibre" version))
(sha256
- (base32 "1c0lvpg7j2525cv52s3q5sg7hfnakkb8rmghg0jc02gshsxmrj4f"))))
+ (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
(build-system python-build-system)
(native-inputs
`(("ghostscript" ,ghostscript)
@@ -24192,6 +25042,47 @@ query Watchman to discover file changes.")
environment.")
(license license:expat)))
+(define-public python-qtsass
+ (package
+ (name "python-qtsass")
+ (version "0.3.0")
+ (source
+ (origin
+ ;; There are no tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/spyder-ide/qtsass/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:test-target "pytest"
+ #:phases
+ (modify-phases %standard-phases
+ ;; Tests need to read and write files.
+ (add-before 'check 'make-git-checkout-writable
+ (lambda _
+ (for-each make-file-writable (find-files "."))
+ #t)))))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (propagated-inputs
+ `(("python-libsass" ,python-libsass)))
+ (home-page "https://github.com/spyder-ide/qtsass")
+ (synopsis "Compile SCSS files to valid Qt stylesheets")
+ (description
+ "Besides being used in web development, CSS is also the way to stylize
+Qt-based desktop applications. However, Qt's CSS has a few variations that
+prevent the direct use of SASS compiler.
+
+The purpose of this tool is to fill the gap between SASS and Qt-CSS by
+handling those variations.")
+ (license license:expat)))
+
(define-public python-qdarkstyle
(package
(name "python-qdarkstyle")