projects/guix·blob mpd-fix-groups · refs

6473 lines · 250.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015, 2016, 2018, 2020-2025 Ricardo Wurmus <[email protected]>
3;;; Copyright © 2015 Federico Beffa <[email protected]>
4;;; Copyright © 2016 Ben Woodcroft <[email protected]>
5;;; Copyright © 2016,2024 Hartmut Goebel <[email protected]>
6;;; Copyright © 2016, 2021-2025 Efraim Flashner <[email protected]>
7;;; Copyright © 2016-2020, 2022 Marius Bakke <[email protected]>
8;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <[email protected]>
9;;; Copyright © 2018, 2022 Leo Famulari <[email protected]>
10;;; Copyright © 2019-2025 Maxim Cournoyer <[email protected]>
11;;; Copyright © 2019 Giacomo Leidi <[email protected]>
12;;; Copyright © 2020-2025 Nicolas Goaziou <[email protected]>
13;;; Copyright © 2020 Pierre Langlois <[email protected]>
14;;; Copyright © 2020-2025 Vinicius Monego <[email protected]>
15;;; Copyright © 2021 Greg Hogan <[email protected]>
16;;; Copyright © 2021 Mădălin Ionel Patrașcu <[email protected]>
17;;; Copyright © 2021 Roel Janssen <[email protected]>
18;;; Copyright © 2021 Paul Garlick <[email protected]>
19;;; Copyright © 2021 Arun Isaac <[email protected]>
20;;; Copyright © 2021 Vagrant Cascadian <[email protected]>
21;;; Copyright © 2021, 2023 Felix Gruber <[email protected]>
22;;; Copyright © 2022 Malte Frank Gerdes <[email protected]>
23;;; Copyright © 2021, 2022 Guillaume Le Vaillant <[email protected]>
24;;; Copyright © 2022 Paul A. Patience <[email protected]>
25;;; Copyright © 2022 Wiktor Żelazny <[email protected]>
26;;; Copyright © 2022 Eric Bavier <[email protected]>
27;;; Copyright © 2022 kiasoc5 <[email protected]>
28;;; Copyright © 2022, 2024 Antero Mejr <[email protected]>
29;;; Copyright © 2022 jgart <[email protected]>
30;;; Copyright © 2022 Sarah Morgensen <[email protected]>
31;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
32;;; Copyright © 2024-2025 Sharlatan Hellseher <[email protected]>
33;;; Copyright © 2024 Marco Baggio <[email protected]>
34;;; Copyright © 2024 Nicolas Graves <[email protected]>
35;;; Copyright © 2024 Rick Huijzer <[email protected]>
36;;; Copyright © 2025 Nicolas Graves <[email protected]>
37;;; Copyright © 2025 Mark Walker <[email protected]>
38;;; Copyright © 2025 Nguyễn Gia Phong <[email protected]>
39;;; Copyright © 2025 Jake Forster <[email protected]>
40;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
41;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
42;;;
43;;; This file is part of GNU Guix.
44;;;
45;;; GNU Guix is free software; you can redistribute it and/or modify it
46;;; under the terms of the GNU General Public License as published by
47;;; the Free Software Foundation; either version 3 of the License, or (at
48;;; your option) any later version.
49;;;
50;;; GNU Guix is distributed in the hope that it will be useful, but
51;;; WITHOUT ANY WARRANTY; without even the implied warranty of
52;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53;;; GNU General Public License for more details.
54;;;
55;;; You should have received a copy of the GNU General Public License
56;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
57
58(define-module (gnu packages python-science)
59 #:use-module ((guix licenses) #:prefix license:)
60 #:use-module (gnu packages)
61 #:use-module (gnu packages base)
62 #:use-module (gnu packages bioinformatics)
63 #:use-module (gnu packages boost)
64 #:use-module (gnu packages build-tools)
65 #:use-module (gnu packages check)
66 #:use-module (gnu packages chemistry)
67 #:use-module (gnu packages cmake)
68 #:use-module (gnu packages compression)
69 #:use-module (gnu packages cpp)
70 #:use-module (gnu packages crypto)
71 #:use-module (gnu packages databases)
72 #:use-module (gnu packages digest)
73 #:use-module (gnu packages gcc)
74 #:use-module (gnu packages geo)
75 #:use-module (gnu packages graphviz)
76 #:use-module (gnu packages image)
77 #:use-module (gnu packages image-processing)
78 #:use-module (gnu packages jupyter)
79 #:use-module (gnu packages machine-learning)
80 #:use-module (gnu packages maths)
81 #:use-module (gnu packages mpi)
82 #:use-module (gnu packages pcre)
83 #:use-module (gnu packages perl)
84 #:use-module (gnu packages pkg-config)
85 #:use-module (gnu packages python)
86 #:use-module (gnu packages python-build)
87 #:use-module (gnu packages python-check)
88 #:use-module (gnu packages python-compression)
89 #:use-module (gnu packages python-crypto)
90 #:use-module (gnu packages python-graphics)
91 #:use-module (gnu packages python-web)
92 #:use-module (gnu packages python-xyz)
93 #:use-module (gnu packages qt)
94 #:use-module (gnu packages rust-apps)
95 #:use-module (gnu packages simulation)
96 #:use-module (gnu packages sphinx)
97 #:use-module (gnu packages ssh)
98 #:use-module (gnu packages statistics)
99 #:use-module (gnu packages time)
100 #:use-module (gnu packages version-control)
101 #:use-module (gnu packages xdisorg)
102 #:use-module (gnu packages xml)
103 #:use-module (gnu packages xorg)
104 #:use-module (guix packages)
105 #:use-module (guix gexp)
106 #:use-module (guix download)
107 #:use-module (guix git-download)
108 #:use-module (guix utils)
109 #:use-module (guix build-system cargo)
110 #:use-module (guix build-system cmake)
111 #:use-module (guix build-system python)
112 #:use-module (guix build-system pyproject))
113
114(define-public pyre
115 (package
116 (name "pyre")
117 (version "1.12.5")
118 (source
119 (origin
120 (method git-fetch)
121 (uri (git-reference
122 (url "https://github.com/pyre/pyre")
123 (commit (string-append "v" version))))
124 (file-name (git-file-name name version))
125 (sha256
126 (base32
127 "0crmssga481q2ggwcmj40nj5n9975wri14p609jdr9hwg4vdyvj2"))))
128 (build-system cmake-build-system)
129 (arguments
130 (list
131 #:imported-modules (append %cmake-build-system-modules
132 %python-build-system-modules)
133 #:modules '((guix build cmake-build-system)
134 ((guix build python-build-system) #:prefix python:)
135 (guix build utils))
136 #:configure-flags
137 #~(list (string-append "-DPYRE_VERSION=" #$version)
138 (string-append "-DPYRE_DEST_PACKAGES="
139 (python:site-packages %build-inputs %outputs)))
140 #:phases
141 #~(modify-phases %standard-phases
142 (add-after 'unpack 'enable-bytecode-determinism
143 (assoc-ref python:%standard-phases 'enable-bytecode-determinism))
144 ;; Move the check phase after the Python 'pyre' module
145 ;; is installed and made available.
146 (delete 'check)
147 (add-after 'install 'add-to-pythonpath
148 (lambda* (#:key inputs outputs #:allow-other-keys)
149 (python:add-installed-pythonpath inputs outputs)))
150 (add-after 'add-to-pythonpath 'wrap
151 (assoc-ref python:%standard-phases 'wrap))
152 (add-after 'add-to-pythonpath 'check
153 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
154 (when tests?
155 (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
156 (let ((ignored-tests
157 (list
158 ;; The MPI tests are failing for unknown reasons (see:
159 ;; https://github.com/pyre/pyre/issues/126).
160 "tests.mpi"
161 ;; These tests have a cleanup phase that fails
162 ;; non-deterministically (see:
163 ;; https://github.com/pyre/pyre/issues/125).
164 "tests.pyre.lib.viz.flow"
165 ;; This test expects a TCP port 22 to be listening.
166 "tests.pyre.pkg.ipc.tcp.py"
167 ;; These postgres tests require a running postgresql
168 ;; daemon; they are also skipped in upstream CI.
169 "tests.postgres.ext"
170 ;; This test fails due to pre-1980 timestamps, not
171 ;; supported by ZIP.
172 "tests.pyre.pkg.filesystem.zip_open.py"
173 ;; This one trips on the patched python3 shebang.
174 "tests.pyre.pkg.filesystem.local_open.py")))
175 (invoke "ctest"
176 "-j" (if parallel-tests?
177 (number->string (parallel-job-count))
178 "1")
179 "-E" (string-join ignored-tests "|")))))))))
180 (native-inputs (list openssh-sans-x python python-numpy pybind11 zip))
181 (inputs (list gsl hdf5 openmpi postgresql))
182 (propagated-inputs (list python-pyyaml)) ;for the Python bindings
183 (home-page "http://pyre.orthologue.com/")
184 (synopsis "Framework for building Scientific applications")
185 (description
186 "This package provides a framework for building scientific applications.
187It aims to bring state of the art software design practices to scientific
188computing, with the goal of providing a strong skeleton on which to build
189scientific codes by steering the implementation towards usability and
190maintainability.")
191 (license license:bsd-3)))
192
193(define-public python-adjusttext
194 (package
195 (name "python-adjusttext")
196 (version "1.3.0")
197 (source
198 (origin
199 (method url-fetch)
200 (uri (pypi-uri "adjusttext" version))
201 (sha256
202 (base32 "18dw5kqxan4m8kvw3w1lm0p69gj95i7rcgmcfs485x1s8pa5rdsa"))))
203 (build-system pyproject-build-system)
204 (arguments
205 (list #:tests? #false)) ;there are none
206 (native-inputs
207 (list python-setuptools
208 python-wheel))
209 (propagated-inputs
210 (list python-matplotlib
211 python-numpy
212 python-scipy))
213 (home-page "https://github.com/Phlya/adjustText")
214 (synopsis "Adjust text position in matplotlib plots to minimize overlaps")
215 (description
216 "Often when we want to label multiple points on a graph the text will
217start heavily overlapping with both other labels and data points. This can be
218a major problem requiring manual solution. However this can be largely
219automated by smart placing of the labels (difficult) or iterative adjustment
220of their positions to minimize overlaps (relatively easy). This library
221implements the latter option to help with matplotlib graphs.")
222 (license license:expat)))
223
224(define-public python-algopy
225 (package
226 (name "python-algopy")
227 (version "0.6.0") ; the higher versions requir NumPy 2+ stack
228 (source
229 (origin
230 (method url-fetch)
231 (uri (pypi-uri "algopy" version))
232 (sha256
233 (base32 "1vjrzzxa3gvyh2zvm1vwg0s6a7dv23rihgdvgyj1vqniyymp91nq"))))
234 (build-system pyproject-build-system)
235 (native-inputs
236 (list python-pytest
237 python-setuptools
238 python-wheel))
239 (propagated-inputs
240 (list python-numpy
241 python-scipy))
242 (home-page "https://pythonhosted.org/algopy")
243 (synopsis "Algorithmic Differentation in Python")
244 (description
245 "AlgoPy provides a functionality to differentiate functions implemented
246as computer programs by using Algorithmic Differentiation (AD) techniques in
247the forward and reverse mode.
248
249The forward mode propagates univariate Taylor polynomials of arbitrary order.
250Hence it is also possible to use AlgoPy to evaluate higher-order derivative
251tensors. The reverse mode is also known as backpropagation and can be found
252in similar form in tools like PyTorch. Speciality of AlgoPy is the
253possibility to differentiate functions that contain matrix functions as
254+,-,*,/, dot, solve, qr, eigh, cholesky.")
255 (license license:bsd-3)))
256
257(define-public python-anndata
258 (package
259 (name "python-anndata")
260 (version "0.12.1")
261 (source
262 (origin
263 ;; The tarball from PyPi doesn't include tests.
264 (method git-fetch)
265 (uri (git-reference
266 (url "https://github.com/theislab/anndata")
267 (commit version)))
268 (file-name (git-file-name name version))
269 (sha256
270 (base32 "1pwqy1pxsiqf13kfshcbqah1a92x4044s6jyr94488ngpqkr275z"))))
271 (build-system pyproject-build-system)
272 (arguments
273 (list
274 #:test-flags
275 #~(list "--numprocesses" (number->string (parallel-job-count))
276 ;; XXX: AttributeError: module 'pyarrow.lib' has no attribute
277 ;; 'PyExtensionType
278 "--ignore=tests/test_awkward.py"
279 "-k" (string-join
280 ;; TypeError: read_text() takes from 1 to 2 positional
281 ;; arguments but 4 were given
282 (list "not test_read_csv"
283 ;; TypeError: _fix_co_filename() argument 2 must be
284 ;; str, not PosixPath
285 "test_hints"
286 ;; Failed: DID NOT WARN. No warnings of type (<class
287 ;; 'FutureWarning'>,) were emitted.
288 "test_readloom_deprecations")
289 " and not "))
290 #:phases
291 #~(modify-phases %standard-phases
292 ;; Doctests require scanpy from (gnu packages bioinformatics)
293 (add-after 'unpack 'disable-doctests
294 (lambda _
295 (substitute* "pyproject.toml"
296 (("--doctest-modules") ""))))
297 (add-before 'build 'set-version
298 (lambda _
299 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
300 ;; ZIP does not support timestamps before 1980.
301 (setenv "SOURCE_DATE_EPOCH" "315532800")))
302 ;; Numba needs a writable dir to cache functions.
303 (add-before 'check 'set-numba-cache-dir
304 (lambda _
305 (setenv "NUMBA_CACHE_DIR" "/tmp"))))))
306 (propagated-inputs
307 (list python-array-api-compat
308 python-h5py
309 python-importlib-metadata
310 python-legacy-api-wrap
311 python-natsort
312 python-packaging
313 python-pandas
314 python-scikit-learn
315 python-scipy
316 python-setuptools ; For pkg_resources.
317 python-zarr))
318 (native-inputs
319 (list python-awkward
320 python-boltons
321 python-dask
322 python-distributed
323 python-filelock
324 python-hatch-vcs
325 python-hatchling
326 python-joblib
327 python-loompy
328 python-matplotlib
329 python-pytest
330 python-pytest-mock
331 python-pytest-xdist
332 python-setuptools-scm))
333 (home-page "https://github.com/theislab/anndata")
334 (synopsis "Annotated data for data analysis pipelines")
335 (description "Anndata is a package for simple (functional) high-level APIs
336for data analysis pipelines. In this context, it provides an efficient,
337scalable way of keeping track of data together with learned annotations and
338reduces the code overhead typically encountered when using a mostly
339object-oriented library such as @code{scikit-learn}.")
340 (license license:bsd-3)))
341
342(define-public python-anndata-0.11
343 (package
344 (inherit python-anndata)
345 (name "python-anndata")
346 (version "0.11.4")
347 (source
348 (origin
349 (method git-fetch)
350 (uri (git-reference
351 (url "https://github.com/theislab/anndata")
352 (commit version)))
353 (file-name (git-file-name name version))
354 (sha256
355 (base32 "05i805k5kvmwp5k0qw9vxvpgjwys284nq529mfn7vwlryz9d247m"))))))
356
357;; XXX: See: <https://codeberg.org/guix/guix/issues/3093>.
358(define-public python-aplus
359 ;; PyPI release lacks the latest version, Git has no tags.
360 (let ((commit "1ab8ebec987fb7213766784aad02cbf4410d9036")
361 (revision "0"))
362 (package
363 (name "python-aplus")
364 (version (git-version "0.11.1" revision commit))
365 (source
366 (origin
367 (method git-fetch)
368 (uri (git-reference
369 (url "https://github.com/xogeny/aplus")
370 (commit commit)))
371 (file-name (git-file-name name version))
372 (sha256
373 (base32 "02jcfj7dywvs0sd60c85pxwh0mwsj9p1q27445pba6j489x3dffj"))))
374 (build-system pyproject-build-system)
375 (arguments
376 (list #:tests? #f)) ;they depend on Nose test runner
377 (native-inputs
378 (list python-setuptools))
379 (home-page "https://github.com/xogeny/aplus")
380 (synopsis "Promises/A+ for Python")
381 (description
382 "This package is an implementation of the Promises/A+ specification and
383test suite in Python.")
384 (license license:expat))))
385
386(define-public python-apted
387 ;; PyPI release lacks tests and there is no Git tag.
388 (let ((commit "828b3e3f4c053f7d35f0b55b0d5597e8041719ac")
389 (revision "0"))
390 (package
391 (name "python-apted")
392 (version (git-version "1.0.3" revision commit))
393 (source
394 (origin
395 (method git-fetch)
396 (uri (git-reference
397 (url "https://github.com/JoaoFelipe/apted")
398 (commit commit)))
399 (file-name (git-file-name name version))
400 (sha256
401 (base32 "1vw1sbn41cysmhr4ib58cw3hzs1xjxwb1d8r1yhrqgjk5q6ckjw7"))))
402 (build-system pyproject-build-system)
403 (arguments
404 (list
405 #:test-flags
406 #~(list "--deselect=apted/tests/test_chained.py::test_factory"
407 "--deselect=apted/tests/test_correctness.py::test_factory"
408 "--deselect=apted/tests/test_per_edit_operation_correctness.py::test_factory")))
409 (native-inputs
410 (list python-pytest
411 python-setuptools
412 python-wheel))
413 (home-page "https://github.com/JoaoFelipe/apted")
414 (synopsis "Algorithm for the tree edit distance")
415 (description
416 "This is a Python implementation of the APTED algorithm,which
417supersedes the RTED algorithm for computing the tree edit distance.")
418 (license license:expat))))
419
420(define-public python-asap3
421 (package
422 (name "python-asap3")
423 (version "3.13.9")
424 (source
425 (origin
426 (method url-fetch)
427 (uri (pypi-uri "asap3" version))
428 (sha256
429 (base32 "0r4sx93v2ck4m9ykzj9zaar2l9wk4nrb3d3rlik1nqimk6pnnbm2"))))
430 (build-system pyproject-build-system)
431 (arguments
432 (list #:tests? #f)) ;TODO: collecting ... ERROR: Wrong command line.
433 (native-inputs
434 (list python-setuptools
435 which)) ;for build
436 (propagated-inputs
437 (list python-ase
438 python-numpy))
439 (home-page "https://wiki.fysik.dtu.dk/asap")
440 (synopsis "ASAP - classical potentials for Molecular Dynamics with ASE.")
441 (description "This package provides accelerated simulations and potentials
442of solids.")
443 (license license:lgpl3)))
444
445(define-public python-ase
446 (package
447 (name "python-ase")
448 (version "3.25.0")
449 (source
450 (origin
451 (method url-fetch)
452 (uri (pypi-uri "ase" version))
453 (sha256
454 (base32 "1hk2r5042cs9shqv49w0jvf65wkyq74s6vc5drfz1275kz5ghk1p"))))
455 (build-system pyproject-build-system)
456 (arguments
457 (list #:test-flags
458 #~(list ;; DeprecationWarning.
459 "--deselect"
460 "ase/test/fio/test_espresso.py::test_pw_input_write_nested_flat"
461 ;; UserWarning.
462 "--deselect"
463 "ase/test/fio/test_espresso.py::TestConstraints::test_fix_scaled")))
464 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
465 (native-inputs (list python-pytest python-pytest-xdist python-setuptools
466 python-wheel))
467 (inputs (list spglib))
468 (home-page "https://wiki.fysik.dtu.dk/ase/")
469 (synopsis "Atomic Simulation Environment")
470 (description "This package provides a set of tools and Python modules for
471setting up, manipulating, running, visualizing and analyzing atomistic
472simulations.")
473 (license license:lgpl2.1+)))
474
475(define-public python-baycomp
476 (package
477 (name "python-baycomp")
478 (version "1.0.3")
479 (source
480 (origin
481 (method url-fetch)
482 (uri (pypi-uri "baycomp" version))
483 (sha256
484 (base32 "1v6s4mfr6xzjbv9a2v89hywm6fbv5nii0qczvcfjanvdn7bmmcij"))))
485 (build-system pyproject-build-system)
486 (native-inputs
487 (list python-pytest python-setuptools python-wheel))
488 (propagated-inputs
489 (list python-matplotlib python-numpy python-scipy))
490 (home-page "https://github.com/janezd/baycomp")
491 (synopsis "Library for comparison of Bayesian classifiers")
492 (description
493 "Baycomp is a library for Bayesian comparison of classifiers. Functions
494in the library compare two classifiers on one or on multiple data sets. They
495compute three probabilities: the probability that the first classifier has
496higher scores than the second, the probability that differences are within the
497region of practical equivalence (rope), or that the second classifier has
498higher scores.")
499 (license license:expat)))
500
501(define-public python-boost-histogram
502 (package
503 (name "python-boost-histogram")
504 (version "1.5.2")
505 (source
506 (origin
507 (method url-fetch)
508 (uri (pypi-uri "boost_histogram" version))
509 (sha256
510 (base32 "0p2f90p5jwlwrjz3hq2fzaifkmny33g2mpi89nnhi3w41f1jxr2i"))))
511 (build-system pyproject-build-system)
512 ;; This package bundles files from Boost::Histogram and doesn't provide
513 ;; a way to use a system library.
514 (propagated-inputs (list python-numpy))
515 (native-inputs (list cmake-minimal
516 pybind11
517 python-pytest
518 python-pytest-benchmark
519 python-scikit-build-core
520 python-setuptools-scm))
521 (home-page "https://boost-histogram.readthedocs.io/en/latest/")
522 (synopsis "Python bindings for the Boost::Histogram library")
523 (description
524 "This package provides Python bindings for the Boost::Histogram library,
525one of the fastest libraries for histogramming.")
526 (license license:bsd-3)))
527
528(define-public python-bottleneck
529 (package
530 (name "python-bottleneck")
531 (version "1.4.2")
532 (source
533 (origin
534 (method url-fetch)
535 (uri (pypi-uri "bottleneck" version))
536 (sha256
537 (base32 "1x29yj4yr12v646si63gkxj9b6lx1xk65536wqy4i9fyk4bqx3ps"))))
538 (build-system pyproject-build-system)
539 (arguments
540 (list
541 #:phases
542 #~(modify-phases %standard-phases
543 (add-before 'check 'rebuild-ext
544 (lambda _
545 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
546 (native-inputs (list python-pytest
547 python-setuptools
548 python-wheel))
549 (propagated-inputs (list python-numpy))
550 (home-page "https://github.com/pydata/bottleneck")
551 (synopsis "Fast NumPy array functions written in C")
552 (description
553 "Bottleneck is a collection of fast, NaN-aware NumPy array functions
554written in C.")
555 (license license:bsd-2)))
556
557(define-public python-clarabel
558 (package
559 (name "python-clarabel")
560 (version "0.7.1")
561 (source
562 (origin
563 (method url-fetch)
564 (uri (pypi-uri "clarabel" version))
565 (sha256
566 (base32 "15k32ynvh45n9q905bxwamh5w5cia9bxzmwz69wbribmyhsv22m3"))
567 (patches
568 (search-patches "python-clarabel-blas.patch"))))
569 (build-system cargo-build-system)
570 (arguments
571 (list
572 #:imported-modules `(,@%cargo-build-system-modules
573 ,@%pyproject-build-system-modules)
574 #:modules '((guix build cargo-build-system)
575 ((guix build pyproject-build-system) #:prefix py:)
576 (guix build utils))
577 #:phases
578 #~(modify-phases %standard-phases
579 (add-after 'build 'build-python-module
580 (assoc-ref py:%standard-phases 'build))
581 (add-after 'build-python-module 'install-python-module
582 (assoc-ref py:%standard-phases 'install)))
583 #:features '(list "python")
584 #:install-source? #false))
585 (inputs
586 (cons maturin (cargo-inputs 'python-clarabel)))
587 (native-inputs
588 (list python-wrapper))
589 (propagated-inputs (list python-numpy python-scipy))
590 (home-page "https://github.com/oxfordcontrol/Clarabel.rs")
591 (synopsis "Interior-point solver for convex conic optimisation problems")
592 (description "Clarabel.rs is a Rust implementation of an interior point
593numerical solver for convex optimization problems using a novel homogeneous
594embedding.")
595 (license license:asl2.0)))
596
597(define-public python-climin
598 (package
599 (name "python-climin")
600 (version "0.1a1")
601 (source (origin
602 (method url-fetch)
603 (uri (pypi-uri "climin" version))
604 (sha256
605 (base32
606 "1wpjisd5zzi5yvjff02hnxn84822k8sdxvvd33lil2x79wdb36rv"))))
607 (build-system python-build-system)
608 (native-inputs (list python-nose))
609 (propagated-inputs (list python-numpydoc python-numpy python-scipy))
610 (home-page "https://github.com/BRML/climin")
611 (synopsis "Optimization for machine learning")
612 (description
613 "@command{climin} is a Python package for optimization,
614heavily biased to machine learning scenarios. It works on top of
615@command{numpy} and (partially) @command{gnumpy}.")
616 (license license:bsd-3)))
617
618(define-public python-cmocean
619 (package
620 (name "python-cmocean")
621 (version "4.0.3")
622 (source
623 (origin
624 (method url-fetch)
625 (uri (pypi-uri "cmocean" version))
626 (sha256
627 (base32 "0z0d4ma6i228gwpgnkai8scs9bmzz41rirlnqpmb8hazzfcq71ip"))))
628 (build-system pyproject-build-system)
629 (native-inputs
630 (list python-pytest
631 python-setuptools
632 python-wheel))
633 (propagated-inputs
634 (list python-matplotlib
635 python-numpy
636 python-packaging))
637 (home-page "https://github.com/matplotlib/cmocean")
638 (synopsis "Colormaps for Oceanography")
639 (description
640 "This package contains colormaps for commonly-used oceanographic
641variables. Most of the colormaps started from @code{matplotlib} colormaps,
642but have now been adjusted using the viscm tool to be perceptually uniform.")
643 (license license:expat)))
644
645(define-public python-corner
646 (package
647 (name "python-corner")
648 (version "2.2.2")
649 (source
650 (origin
651 (method git-fetch) ;no tests in PyPi archive
652 (uri (git-reference
653 (url "https://github.com/dfm/corner.py")
654 (commit (string-append "v" version))))
655 (file-name (git-file-name name version))
656 (sha256
657 (base32 "1i4dk4jxh0saysya2cnsfwlxwpldbdl174i9pwi4qj82av9jr2ii"))))
658 (build-system pyproject-build-system)
659 (arguments
660 (list
661 #:test-flags
662 #~(list
663 ;; XXX: Disable tests which failed with mismatched images, check why.
664 "-k" (string-append "not test_labels[png]"
665 " and not test_title_quantiles[png]"
666 " and not test_title_quantiles_default[png]"
667 " and not test_title_quantiles_raises[png]"
668 " and not test_bins[png]"
669 " and not test_bins_log[png]"
670 " and not test_titles1[png]"
671 " and not test_titles2[png]"
672 " and not test_pandas[png]"
673 " and not test_tight[png]"
674 " and not test_extended_overplotting[png]"
675 " and not test_reverse_overplotting[png]"
676 " and not test_arviz[png]"
677 " and not test_range_fig_arg[png]"))
678 #:phases
679 #~(modify-phases %standard-phases
680 (add-before 'build 'pretend-version
681 ;; XXX: Make sure you're either building from a fully intact git
682 ;; repository or PyPI tarballs. Most other sources (such as GitHub's
683 ;; tarballs, a git checkout without the .git folder) don't contain
684 ;; the necessary metadata and will not work.
685 (lambda _
686 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
687 (propagated-inputs
688 (list python-matplotlib))
689 (native-inputs
690 (list python-arviz python-pytest python-scipy python-setuptools-scm))
691 (home-page "http://corner.readthedocs.io/")
692 (synopsis "Make some beautiful corner plots")
693 (description
694 "This Python module uses @code{matplotlib} to visualize multidimensional
695samples using a scatterplot matrix. In these visualizations, each one- and
696two-dimensional projection of the sample is plotted to reveal covariances.
697corner was originally conceived to display the results of Markov Chain Monte
698Carlo simulations and the defaults are chosen with this application in mind but
699it can be used for displaying many qualitatively different samples.")
700 (license license:bsd-2)))
701
702(define-public python-cvxpy
703 (package
704 (name "python-cvxpy")
705 (version "1.4.3")
706 (source
707 (origin
708 (method url-fetch)
709 (uri (pypi-uri "cvxpy" version))
710 (sha256
711 (base32 "0lyri9j5gyg6m1bvfy1a4q2sqdy3w45lp0bxiq9as8srq347ic5i"))))
712 (build-system pyproject-build-system)
713 ;; It's odd but cvxpy appears to need pybind11 at runtime according to its
714 ;; specification. Moving pybind11 to native-inputs would break downstream
715 ;; packages using cvxpy.
716 (propagated-inputs (list pybind11
717 python-clarabel
718 python-ecos
719 python-numpy
720 python-osqp
721 python-scipy
722 python-scs))
723 (native-inputs (list python-pytest python-setuptools python-wheel))
724 (home-page "https://github.com/cvxpy/cvxpy")
725 (synopsis "DSL for modeling convex optimization problems")
726 (description
727 "This package provides a domain-specific language for modeling convex
728optimization problems in Python.")
729 (license license:asl2.0)))
730
731;; Note: Remember to update python-distributed when updating dask.
732(define-public python-dask
733 (package
734 (name "python-dask")
735 (version "2024.12.1")
736 (source
737 (origin
738 (method git-fetch)
739 (uri (git-reference
740 (url "https://github.com/dask/dask/")
741 (commit version)))
742 (file-name (git-file-name name version))
743 (sha256
744 (base32 "17iqfyjphyn72xdr8fmynzvixskbq16pwmsknwc6anq7s2axvas2"))))
745 (build-system pyproject-build-system)
746 (arguments
747 (list
748 ;; Avoid coverage
749 #:test-flags
750 #~(list "--numprocesses" (number->string (parallel-job-count))
751 "-m" "not gpu and not slow and not network"
752 ;; These all fail with different hashes. Doesn't seem
753 ;; problematic.
754 "--ignore-glob=**/test_tokenize.py"
755 ;; ORC tests crash Python with a failure to find the global
756 ;; localtime file. See also
757 ;; https://github.com/apache/arrow/issues/40633.
758 "--ignore-glob=**/test_orc.py"
759 "-k" (string-append
760 ;; This one cannot be interrupted.
761 "not test_interrupt"
762 ;; This one fails with "local variable 'ctx' referenced
763 ;; before assignment". Maybe enable this in later
764 ;; versions (or when pandas has been upgraded.
765 " and not test_dt_accessor"
766 ;; This fails when dask-expr is among the inputs.
767 " and not test_groupby_internal_repr"
768 ;; This fails with different job ids.
769 " and not test_to_delayed_optimize_graph"
770 ;; This one expects a deprecation warning that never
771 ;; comes.
772 " and not test_RandomState_only_funcs"
773 ;; This test expects a RuntimeWarning that is never
774 ;; raised.
775 " and not test_nanquantile_all_nan")
776 ;; Tests must run from the output directory, because otherwise
777 ;; it complains about the difference between the target
778 ;; directory embedded in the pyc files and the source directory
779 ;; from which we run tests.
780 (getcwd))
781 #:phases
782 #~(modify-phases %standard-phases
783 (add-after 'unpack 'versioneer
784 (lambda _
785 ;; Our version of versioneer needs setup.cfg. This is adapted
786 ;; from pyproject.toml.
787 (with-output-to-file "setup.cfg"
788 (lambda ()
789 (display "\
790[versioneer]
791VCS = git
792style = pep440
793versionfile_source = dask/_version.py
794versionfile_build = dask/_version.py
795tag_prefix =
796parentdir_prefix = dask-
797")))
798 (invoke "versioneer" "install")
799 (substitute* "setup.py"
800 (("versioneer.get_version\\(\\)")
801 (string-append "\"" #$version "\"")))))
802 (add-after 'unpack 'fix-pytest-config
803 (lambda _
804 ;; This option is not supported by our version of pytest.
805 (substitute* "pyproject.toml"
806 (("--cov-config=pyproject.toml") ""))))
807 (add-after 'unpack 'patch-pyproject
808 (lambda _
809 ;; We use pyarrow > 14
810 (substitute* "pyproject.toml"
811 (("\"pyarrow_hotfix\",") ""))))
812 (add-before 'check 'pre-check
813 (lambda _ (chdir "/tmp"))))))
814 (propagated-inputs
815 (list python-click ;needed at runtime
816 python-cloudpickle
817 python-dask-expr
818 python-fsspec
819 python-importlib-metadata ;needed at runtime for dask/_compatibility.py
820 python-numpy
821 python-packaging
822 python-pandas
823 python-partd
824 python-toolz
825 python-pyyaml))
826 (native-inputs
827 (list python-importlib-metadata
828 python-pytest
829 python-pytest-rerunfailures
830 python-pytest-xdist
831 python-versioneer
832 python-setuptools))
833 (home-page "https://github.com/dask/dask/")
834 (synopsis "Parallel computing with task scheduling")
835 (description
836 "Dask is a flexible parallel computing library for analytics. It
837consists of two components: dynamic task scheduling optimized for computation,
838and large data collections like parallel arrays, dataframes, and lists that
839extend common interfaces like NumPy, Pandas, or Python iterators to
840larger-than-memory or distributed environments. These parallel collections
841run on top of the dynamic task schedulers.")
842 (license license:bsd-3)))
843
844(define-public python-dask/bootstrap
845 (package
846 (inherit python-dask)
847 (properties '((hidden? . #true)))
848 (arguments
849 (substitute-keyword-arguments (package-arguments python-dask)
850 ((#:tests? _ #t) #f)))
851 (propagated-inputs
852 (modify-inputs (package-propagated-inputs python-dask)
853 (delete "python-dask-expr")))))
854
855(define-public python-dask-expr
856 (package
857 (name "python-dask-expr")
858 (version "1.1.21")
859 (source
860 (origin
861 (method git-fetch)
862 (uri (git-reference
863 (url "https://github.com/dask/dask-expr")
864 (commit (string-append "v" version))))
865 (file-name (git-file-name name version))
866 (sha256
867 (base32 "0m920db2asmqf4w2dncpnkccdhx4c9sfcsd96bh1jfdh8sw2wf6z"))))
868 (build-system pyproject-build-system)
869 (arguments
870 (list
871 #:tests? #false ;need python-distributed, which needs dask-expr.
872 #:phases
873 #~(modify-phases %standard-phases
874 (add-after 'unpack 'versioneer
875 (lambda _
876 ;; Our version of versioneer needs setup.cfg. This is adapted
877 ;; from pyproject.toml.
878 (with-output-to-file "setup.cfg"
879 (lambda ()
880 (display "\
881[versioneer]
882VCS = git
883style = pep440
884versionfile_source = dask_expr/_version.py
885versionfile_build = dask_expr/_version.py
886tag_prefix =
887parentdir_prefix = dask_expr-
888")))
889 (invoke "versioneer" "install")
890 (substitute* "setup.py"
891 (("versioneer.get_version\\(\\)")
892 (string-append "\"" #$version "\""))))))))
893 (propagated-inputs (list python-pandas python-pyarrow))
894 (native-inputs
895 ;; We use python-dask/bootstrap so that python-dask can propagate this
896 ;; package without creating a mutually recursive dependency.
897 (list python-dask/bootstrap
898 python-pytest
899 python-setuptools
900 python-versioneer
901 python-wheel))
902 (home-page "https://github.com/dask/dask-expr")
903 (synopsis "Dask DataFrames with query optimization")
904 (description "This is a rewrite of Dask DataFrame that includes query
905optimization and generally improved organization.")
906 (license license:bsd-3)))
907
908(define-public python-dask-image
909 (package
910 (name "python-dask-image")
911 (version "2024.5.3")
912 (source
913 (origin
914 (method url-fetch)
915 (uri (pypi-uri "dask_image" version))
916 (sha256
917 (base32 "0g4293n1vjlpyxbvd1xz3pz9an9z4rnsw1m7lynhm00m0bgiz7qc"))))
918 (build-system pyproject-build-system)
919 (arguments
920 (list
921 ;; tests: 2152 passed, 177 skipped, 6 deselected, 4037 warnings
922 #:test-flags
923 #~(list "-k" (string-join
924 ;; KeyError: 'float32
925 (list "not test_spline_filter_output_dtype[None-float32_1]"
926 "test_spline_filter_output_dtype[-1-float32_1]"
927 ;; AttributeError: 'str' object has no attribute
928 ;; 'start'
929 "test_find_objects"
930 "test_3d_find_objects"
931 ;; assert False
932 "test_find_objects_with_empty_chunks")
933 " and not "))
934 #:phases
935 #~(modify-phases %standard-phases
936 (add-before 'build 'set-version
937 (lambda _
938 (substitute* "pyproject.toml"
939 (("^version_file.*") "")
940 (("dynamic = \\[\"version\"\\]")
941 (string-append "version = \"" #$version "\""))))))))
942 (native-inputs
943 (list python-pytest
944 python-pytest-timeout
945 python-setuptools
946 python-setuptools-scm))
947 (propagated-inputs
948 (list python-dask
949 python-numpy
950 python-pandas
951 python-pims
952 python-scipy
953 python-tifffile-for-dask-image))
954 (home-page "https://github.com/dask/dask-image")
955 (synopsis "Distributed image processing")
956 (description "This is a package for image processing with Dask arrays.
957Features:
958
959@itemize
960@item Provides support for loading image files.
961@item Implements commonly used N-D filters.
962@item Includes a few N-D Fourier filters.
963@item Provides some functions for working with N-D label images.
964@item Supports a few N-D morphological operators.
965@end itemize")
966 (license license:bsd-3)))
967
968(define-public python-decaylanguage
969 (package
970 (name "python-decaylanguage")
971 (version "0.18.6")
972 (source
973 (origin
974 (method url-fetch)
975 (uri (pypi-uri "decaylanguage" version))
976 (sha256
977 (base32 "0kc9i9k51kg2zv8dwywpigiipxzmyxpzb101imjsvv1licip7b8v"))))
978 (build-system pyproject-build-system)
979 (arguments
980 (list
981 ;; This file fails to be collected with "DeprecationWarning: setDaemon()
982 ;; is deprecated, set the daemon attribute instead".
983 #:test-flags #~(list "--ignore" "tests/test_convert.py")))
984 (propagated-inputs (list python-attrs
985 python-graphviz
986 python-hepunits
987 python-lark
988 python-numpy
989 python-pandas
990 python-particle
991 python-plumbum))
992 (native-inputs (list python-hatch-vcs
993 python-hatchling
994 python-pytest))
995 (home-page "https://decaylanguage.readthedocs.io/en/latest/")
996 (synopsis "Language to describe, manipulate and convert particle decays")
997 (description "DecayLanguage implements a language to describe and convert
998particle decays between digital representations, effectively making it
999possible to interoperate several fitting programs. Particular interest is
1000given to programs dedicated to amplitude analyses.")
1001 (license license:bsd-3)))
1002
1003(define-public python-deepdish
1004 ;; XXX: The project may no longer be compatible with the version of NumPy
1005 ;; packed in Guix (now 1.24.4), use the latest commit containing fixes.
1006 ;; See: <https://github.com/uchicago-cs/deepdish/issues/50>.
1007 ;; However, there is a maintained fork that appears to be a good
1008 ;; replacement: https://github.com/portugueslab/flammkuchen.
1009 (let ((commit "3f2dff7a03f1b31f6924b665ad5b8c299329c1cd")
1010 (revision "0"))
1011 (package
1012 (name "python-deepdish")
1013 (version (git-version "0.3.7" revision commit))
1014 (source
1015 (origin
1016 (method git-fetch)
1017 (uri (git-reference
1018 (url "https://github.com/uchicago-cs/deepdish")
1019 (commit commit)))
1020 (file-name (git-file-name name version))
1021 (sha256
1022 (base32 "1n3r6z5zd18kdmzyg1gkm9lqi573szlxbls1ck5wjn4a14ar9fw3"))))
1023 (arguments
1024 ;; Disable few failing tests to pass the build.
1025 (list
1026 #:test-flags
1027 #~(list "-k" (string-append "not test_pad"
1028 " and not test_pad_repeat_border"
1029 " and not test_pad_repeat_border_corner"
1030 " and not test_pad_to_size"))
1031 #:phases
1032 #~(modify-phases %standard-phases
1033 (add-after 'unpack 'dont-vendor-six
1034 (lambda _
1035 (delete-file "deepdish/six.py")
1036 (substitute* "deepdish/io/hdf5io.py"
1037 (("from deepdish import six") "import six"))
1038 (substitute* "deepdish/io/ls.py"
1039 (("from deepdish import io, six, __version__")
1040 "from deepdish import io, __version__
1041import six
1042")))))))
1043 (build-system pyproject-build-system)
1044 (native-inputs
1045 (list python-pytest
1046 python-pandas
1047 python-setuptools
1048 python-wheel))
1049 (propagated-inputs
1050 (list python-numpy
1051 python-scipy
1052 python-six
1053 python-tables))
1054 (home-page "https://github.com/uchicago-cs/deepdish")
1055 (synopsis "Python library for HDF5 file saving and loading")
1056 (description
1057 "Deepdish is a Python library to load and save HDF5 files.
1058The primary feature of deepdish is its ability to save and load all kinds of
1059data as HDF5. It can save any Python data structure, offering the same ease
1060of use as pickling or @code{numpy.save}, but with the language
1061interoperability offered by HDF5.")
1062 (license license:bsd-3))))
1063
1064(define-public python-distributed
1065 (package
1066 (name "python-distributed")
1067 (version "2024.12.1")
1068 (source
1069 (origin
1070 ;; The test files are not included in the archive on pypi
1071 (method git-fetch)
1072 (uri (git-reference
1073 (url "https://github.com/dask/distributed")
1074 (commit version)))
1075 (file-name (git-file-name name version))
1076 (sha256
1077 (base32
1078 "1k0kmzd48mvaaizbf3b6lk84s0fw88x9v7hfgiddyyv6mf4x7h27"))))
1079 (build-system pyproject-build-system)
1080 (arguments
1081 (list
1082 #:test-flags
1083 '(list "-m"
1084 (string-append "not slow"
1085 " and not flaky"
1086 " and not gpu"
1087 " and not ipython"
1088 " and not avoid_ci")
1089 ;; This disables FutureWarning that are caught as error,
1090 ;; related to the merge of python-dask-expr in python-dask.
1091 "-W"
1092 (string-append "ignore::FutureWarning")
1093 "-k"
1094 (string-append
1095 ;; These fail because they require network access,
1096 ;; specifically access to 8.8.8.8.
1097 "not "
1098 (string-join
1099 (list
1100 "TestClientSecurityLoader.test_security_loader"
1101 "test_BatchedSend"
1102 "test_allowed_failures_config"
1103 "test_async_context_manager"
1104 "test_async_with"
1105 "test_client_repr_closed_sync"
1106 "test_client_is_quiet_cluster_close"
1107 "test_close_closed"
1108 "test_close_fast_without_active_handlers"
1109 "test_close_grace_period_for_handlers"
1110 "test_close_loop_sync"
1111 "test_close_properly"
1112 "test_close_twice"
1113 "test_compression"
1114 "test_connection_pool"
1115 "test_connection_pool_close_while_connecting"
1116 "test_connection_pool_detects_remote_close"
1117 "test_connection_pool_outside_cancellation"
1118 "test_connection_pool_remove"
1119 "test_connection_pool_respects_limit"
1120 "test_connection_pool_tls"
1121 "test_counters"
1122 "test_dashboard_host"
1123 "test_dashboard_link_cluster"
1124 "test_dashboard_link_inproc"
1125 "test_deserialize_error"
1126 "test_dont_override_default_get"
1127 "test_ensure_no_new_clients"
1128 "test_errors"
1129 "test_fail_to_pickle_target_2"
1130 "test_failure_doesnt_crash"
1131 "test_file_descriptors_dont_leak"
1132 "test_finished"
1133 "test_freeze_batched_send"
1134 "test_get_client_functions_spawn_clusters"
1135 "test_host_uses_scheduler_protocol"
1136 "test_identity_inproc"
1137 "test_identity_tcp"
1138 "test_large_packets_inproc"
1139 "test_locked_comm_drop_in_replacement"
1140 "test_locked_comm_intercept_read"
1141 "test_locked_comm_intercept_write"
1142 "test_messages_are_ordered_bsend"
1143 "test_messages_are_ordered_raw"
1144 "test_mixing_clients_different_scheduler"
1145 "test_multiple_listeners"
1146 "test_no_dangling_asyncio_tasks"
1147 "test_plugin_exception"
1148 "test_plugin_internal_exception"
1149 "test_plugin_multiple_exceptions"
1150 "test_ports"
1151 "test_preload_import_time"
1152 "test_preload_manager_sequence"
1153 "test_queue_in_task"
1154 "test_quiet_client_close"
1155 "test_rebalance_sync"
1156 "test_repr_localcluster"
1157 "test_require_encryption"
1158 "test_rpc_closed_exception"
1159 "test_rpc_default"
1160 "test_rpc_inproc"
1161 "test_rpc_message_lifetime_default"
1162 "test_rpc_message_lifetime_inproc"
1163 "test_rpc_message_lifetime_tcp"
1164 "test_rpc_serialization"
1165 "test_rpc_tcp"
1166 "test_rpc_tls"
1167 "test_rpc_with_many_connections_inproc"
1168 "test_rpc_with_many_connections_tcp"
1169 "test_scheduler_file"
1170 "test_security_dict_input_no_security"
1171 "test_security_loader"
1172 "test_security_loader_ignored_if_explicit_security_provided"
1173 "test_security_loader_ignored_if_returns_none"
1174 "test_send_after_stream_start"
1175 "test_send_before_close"
1176 "test_send_before_start"
1177 "test_send_recv_args"
1178 "test_send_recv_cancelled"
1179 "test_sending_traffic_jam"
1180 "test_serializers"
1181 "test_server"
1182 "test_server_comms_mark_active_handlers"
1183 "test_shutdown"
1184 "test_shutdown_localcluster"
1185 "test_teardown_failure_doesnt_crash_scheduler"
1186 "test_tell_workers_when_peers_have_left"
1187 "test_threadpoolworkers_pick_correct_ioloop"
1188 "test_tls_listen_connect"
1189 "test_tls_temporary_credentials_functional"
1190 "test_transition_failure_triggers_log_event"
1191 "test_variable_in_task"
1192 "test_worker_preload_text"
1193 "test_worker_uses_same_host_as_nanny"
1194 "test_nanny_timeout") ; access to 127.0.0.1
1195 " and not ")
1196
1197 ;; This seems to want to use 64GB of memory.
1198 " and not test_computation_object_code_dask_compute"
1199
1200 ;; These fail because it doesn't find dask[distributed]
1201 " and not test_quiet_close_process"
1202
1203 ;; There is no distributed.__git_revision__ property.
1204 " and not test_git_revision"
1205
1206 ;; The system monitor did not return a dictionary containing
1207 ;; "host_disk_io.read_bps".
1208 " and not test_disk_config"
1209
1210 ;; These fail because the exception text format
1211 ;; appears to have changed.
1212 " and not test_exception_text"
1213 " and not test_worker_bad_args"
1214
1215 ;; These time out
1216 " and not test_nanny_timeout"
1217
1218 ;; These tests are rather flaky
1219 " and not test_quiet_quit_when_cluster_leaves"
1220 " and not multiple_clients_restart"
1221 " and not test_steal_twice"
1222 " and not test_task_groups_update_start_stop"
1223 " and not test_web_preload"
1224 " and not test_web_preload_worker"))
1225 #:phases
1226 #~(modify-phases %standard-phases
1227 (add-after 'unpack 'versioneer
1228 (lambda _
1229 ;; Our version of versioneer needs setup.cfg. This is adapted
1230 ;; from pyproject.toml.
1231 (with-output-to-file "setup.cfg"
1232 (lambda ()
1233 (display "\
1234[versioneer]
1235VCS = git
1236style = pep440
1237versionfile_source = distributed/_version.py
1238versionfile_build = distributed/_version.py
1239tag_prefix =
1240parentdir_prefix = distributed-
1241")))
1242 (invoke "versioneer" "install")
1243 (substitute* "setup.py"
1244 (("versioneer.get_version\\(\\)")
1245 (string-append "\"" #$version "\"")))))
1246 (add-after 'unpack 'fix-pytest-config
1247 (lambda _
1248 ;; This option is not supported by our version of pytest.
1249 (substitute* "pyproject.toml"
1250 (("--cov-config=pyproject.toml.*") ""))))
1251 (add-after 'unpack 'fix-references
1252 (lambda* (#:key outputs #:allow-other-keys)
1253 (substitute* '("distributed/comm/tests/test_ucx_config.py"
1254 "distributed/tests/test_client.py"
1255 "distributed/tests/test_queues.py"
1256 "distributed/tests/test_variable.py"
1257 "distributed/cli/tests/test_tls_cli.py"
1258 "distributed/cli/tests/test_dask_spec.py"
1259 "distributed/cli/tests/test_dask_worker.py"
1260 "distributed/cli/tests/test_dask_scheduler.py")
1261 (("\"dask-scheduler\"")
1262 (format #false "\"~a/bin/dask-scheduler\"" #$output))
1263 (("\"dask-worker\"")
1264 (format #false "\"~a/bin/dask-worker\"" #$output)))))
1265 (add-before 'check 'pre-check
1266 (lambda _
1267 (setenv "DISABLE_IPV6" "1")
1268 ;; Disable job queueing
1269 (setenv "DASK_DISTRIBUTED__SCHEDULER__WORKER_SATURATION" "inf")
1270 ;; Do not use dask-expr
1271 (setenv "DASK_DATAFRAME__QUERY_PLANNING" "False")
1272 ;; The integration tests are all problematic to some
1273 ;; degree. They either require network access or some
1274 ;; other setup. We only run the tests in
1275 ;; distributed/tests.
1276 (for-each (lambda (dir)
1277 (delete-file-recursively
1278 (string-append "distributed/" dir "/tests")))
1279 (list "cli" "comm" "dashboard" "deploy" "diagnostics"
1280 "http" "http/scheduler" "http/worker"
1281 "protocol" "shuffle"))))
1282 ;; We need to use "." here.
1283 (replace 'check
1284 (lambda* (#:key tests? test-flags #:allow-other-keys)
1285 (when tests?
1286 (apply invoke "python" "-m" "pytest" "." "-vv" test-flags)))))))
1287 (propagated-inputs
1288 (list python-click
1289 python-cloudpickle
1290 python-cryptography
1291 python-dask
1292 python-dask-expr
1293 python-msgpack
1294 python-psutil
1295 python-pyyaml
1296 python-setuptools
1297 python-sortedcontainers
1298 python-tblib
1299 python-toolz
1300 python-tornado-6
1301 python-urllib3
1302 python-zict))
1303 (native-inputs
1304 (list python-flaky
1305 python-importlib-metadata
1306 python-pytest
1307 python-pytest-timeout
1308 python-versioneer
1309 python-wheel))
1310 (home-page "https://distributed.dask.org")
1311 (synopsis "Distributed scheduler for Dask")
1312 (description "Dask.distributed is a lightweight library for distributed
1313computing in Python. It extends both the @code{concurrent.futures} and
1314@code{dask} APIs to moderate sized clusters.")
1315 (license license:bsd-3)))
1316
1317(define-public python-ecos
1318 (package
1319 (name "python-ecos")
1320 (version "2.0.13")
1321 (source
1322 (origin
1323 (method git-fetch)
1324 (uri (git-reference
1325 (url "https://github.com/embotech/ecos-python")
1326 (commit (string-append "v" version))
1327 (recursive? #true)))
1328 (file-name (git-file-name name version))
1329 (sha256
1330 (base32 "16ljq8maflfkgbw16rldg6cy14vgz2pb3b2iga60i7yzkq2ikmyw"))))
1331 (build-system pyproject-build-system)
1332 (propagated-inputs (list python-numpy python-scipy))
1333 (native-inputs (list python-pytest python-setuptools python-wheel))
1334 (home-page "https://github.com/embotech/ecos")
1335 (synopsis "Embedded Cone Solver")
1336 (description
1337 "This is the Python package for ECOS: Embedded Cone Solver. ECOS is
1338numerical software for solving convex second-order cone programs (SOCPs).")
1339 (license license:gpl3)))
1340
1341(define-public python-efficient-apriori
1342 (package
1343 (name "python-efficient-apriori")
1344 (version "2.0.6")
1345 (source
1346 (origin
1347 (method url-fetch)
1348 (uri (pypi-uri "efficient_apriori" version))
1349 (sha256
1350 (base32 "0vmdp8qkir7jrmwgpzajssyxh6q78m0q16pr1v657vla9x5wxn2s"))))
1351 (build-system pyproject-build-system)
1352 (arguments
1353 (list
1354 #:test-flags
1355 #~(list "--doctest-modules" "-vv" "efficient_apriori")))
1356 (native-inputs (list python-setuptools python-pytest))
1357 (home-page "https://github.com/tommyod/Efficient-Apriori")
1358 (synopsis "An efficient Python implementation of the Apriori algorithm.")
1359 (description "An efficient Python implementation of the Apriori algorithm,
1360which uncovers hidden structures in categorical data")
1361 (license license:expat)))
1362
1363(define-public python-fast-histogram
1364 (package
1365 (name "python-fast-histogram")
1366 (version "0.14")
1367 (source
1368 (origin
1369 (method url-fetch)
1370 (uri (pypi-uri "fast_histogram" version))
1371 (sha256
1372 (base32 "1sk9xa85cgm4sylzblwv3qr2dmm0ic06zkwxqa2xlazjiawp629r"))))
1373 (build-system pyproject-build-system)
1374 (arguments
1375 (list
1376 #:phases
1377 #~(modify-phases %standard-phases
1378 (add-before 'check 'build-extensions
1379 (lambda _
1380 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
1381 (native-inputs
1382 (list python-hypothesis
1383 python-pytest
1384 python-setuptools
1385 python-setuptools-scm
1386 python-wheel))
1387 (propagated-inputs
1388 (list python-numpy))
1389 (home-page "https://github.com/astrofrog/fast-histogram")
1390 (synopsis "Fast simple 1D and 2D histograms")
1391 (description
1392 "The fast-histogram mini-package aims to provide simple and fast
1393histogram functions for regular bins that don't compromise on performance. It
1394doesn't do anything complicated - it just implements a simple histogram
1395algorithm in C and keeps it simple. The aim is to have functions that are
1396fast but also robust and reliable. The result is a 1D histogram function here
1397that is 7-15x faster than @code{numpy.histogram}, and a 2D histogram function
1398that is 20-25x faster than @code{numpy.histogram2d}.")
1399 (license license:bsd-3)))
1400
1401(define-public python-fastcluster
1402 (package
1403 (name "python-fastcluster")
1404 (version "1.2.6")
1405 (source
1406 (origin
1407 (method url-fetch)
1408 (uri (pypi-uri "fastcluster" version))
1409 (sha256
1410 (base32 "19labbgnq85p4r4jbli2p045lgh57larhi2g2anagfxnlzpqdf5a"))))
1411 (build-system pyproject-build-system)
1412 (arguments (list #:test-backend #~'unittest))
1413 (propagated-inputs (list python-numpy))
1414 (native-inputs (list python-scipy python-setuptools python-wheel))
1415 (home-page "https://danifold.net/fastcluster.html")
1416 (synopsis "Fast hierarchical clustering routines for R and Python")
1417 (description "The fastcluster package implements seven common hierarchical
1418clustering schemes efficiently. The package is made with two interfaces to
1419standard software: R and Python.")
1420 (license license:bsd-2)))
1421
1422(define-public python-formulaic
1423 (package
1424 (name "python-formulaic")
1425 (version "1.0.1")
1426 (source
1427 (origin
1428 (method url-fetch)
1429 (uri (pypi-uri "formulaic" version))
1430 (sha256
1431 (base32 "18gvd3f2x358jj0df8vx5fhhnvzw047rsrs03vmvqnxaly97kpb4"))))
1432 (build-system pyproject-build-system)
1433 (propagated-inputs (list python-astor
1434 python-cached-property
1435 python-interface-meta
1436 python-numpy
1437 python-pandas
1438 python-scipy
1439 python-typing-extensions
1440 python-wrapt))
1441 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
1442 (home-page "https://github.com/matthewwardrop/formulaic")
1443 (synopsis "Implementation of Wilkinson formulas")
1444 (description "Formulaic is a high-performance implementation of Wilkinson
1445formulas for Python.")
1446 (license license:expat)))
1447
1448(define-public python-geosketch
1449 (package
1450 (name "python-geosketch")
1451 (version "1.2")
1452 (source (origin
1453 (method url-fetch)
1454 (uri (pypi-uri "geosketch" version))
1455 (sha256
1456 (base32
1457 "0knch5h0p8xpm8bi3b5mxyaf1ywwimrsdmbnc1xr5icidcv9gzmv"))))
1458 (build-system python-build-system)
1459 (arguments '(#:tests? #false)) ;there are none
1460 (propagated-inputs (list python-fbpca python-numpy python-scikit-learn))
1461 (home-page "https://github.com/brianhie/geosketch")
1462 (synopsis "Geometry-preserving random sampling")
1463 (description "geosketch is a Python package that implements the geometric
1464sketching algorithm described by Brian Hie, Hyunghoon Cho, Benjamin DeMeo,
1465Bryan Bryson, and Bonnie Berger in \"Geometric sketching compactly summarizes
1466the single-cell transcriptomic landscape\", Cell Systems (2019). This package
1467provides an example implementation of the algorithm as well as scripts
1468necessary for reproducing the experiments in the paper.")
1469 (license license:expat)))
1470
1471(define-public python-hepunits
1472 (package
1473 (name "python-hepunits")
1474 (version "2.3.5")
1475 (source
1476 (origin
1477 (method url-fetch)
1478 (uri (pypi-uri "hepunits" version))
1479 (sha256
1480 (base32 "1n1nf2rz2d86qzjmcwykbc16jzsqb45vs8lyksg98b3jd8nwsd4l"))))
1481 (build-system pyproject-build-system)
1482 (native-inputs (list python-hatch-vcs python-hatchling python-pytest))
1483 (home-page "https://github.com/scikit-hep/hepunits")
1484 (synopsis "Units and constants in the HEP system of units")
1485 (description "@code{hepunits} collects the most commonly used units and
1486constants in the HEP System of Units, as derived from the basic units
1487originally defined by the CLHEP project.")
1488 (license license:bsd-3)))
1489
1490(define-public python-hist
1491 (package
1492 (name "python-hist")
1493 (version "2.8.1")
1494 (source
1495 (origin
1496 (method url-fetch)
1497 (uri (pypi-uri "hist" version))
1498 (sha256
1499 (base32 "17cd46c0ixq18fr2kgzam09w1sr4qkd9l6nsjdbl4vggw80ck9vx"))))
1500 (build-system pyproject-build-system)
1501 (propagated-inputs (list python-boost-histogram
1502 python-histoprint
1503 python-numpy
1504 python-typing-extensions))
1505 (native-inputs (list python-hatch-vcs
1506 python-hatchling
1507 python-pytest
1508 python-pytest-mpl))
1509 (home-page "https://hist.readthedocs.io/en/latest/")
1510 (synopsis "Hist classes and utilities")
1511 (description
1512 "Hist is an analyst-friendly front-end for @code{boost-histogram}.")
1513 (license license:bsd-3)))
1514
1515(define-public python-histoprint
1516 (package
1517 (name "python-histoprint")
1518 (version "2.6.0")
1519 (source
1520 (origin
1521 (method url-fetch)
1522 (uri (pypi-uri "histoprint" version))
1523 (sha256
1524 (base32 "07d2lk64gwhjvw4wccvwks3j4ig7g99q627jjxz4ans5a29p5pz1"))))
1525 (build-system pyproject-build-system)
1526 (propagated-inputs (list python-click python-numpy python-uhi))
1527 (native-inputs (list python-awkward
1528 python-boost-histogram
1529 python-hatch-vcs
1530 python-hatchling
1531 python-pytest
1532 python-rich))
1533 (home-page "https://github.com/scikit-hep/histoprint")
1534 (synopsis "Pretty print histograms to the console")
1535 (description "Histoprint uses a mix of terminal color codes and Unicode
1536trickery (i.e. combining characters) to plot overlaying histograms.")
1537 (license license:expat)))
1538
1539(define-public python-imagehash
1540 (package
1541 (name "python-imagehash")
1542 (version "4.3.2")
1543 (source
1544 (origin
1545 (method git-fetch) ;no tests in PyPI
1546 (uri (git-reference
1547 ;; It's an effective and maintained fork of
1548 ;; <https://github.com/bunchesofdonald/photohash> project, which
1549 ;; has the latest release in 2016.
1550 (url "https://github.com/JohannesBuchner/imagehash")
1551 (commit (string-append "v" version))))
1552 (file-name (git-file-name name version))
1553 (sha256
1554 (base32 "1rz1fpwhcx0cbln189bcs61wlwgngcjcn77jvm0yji5s7lshhipy"))))
1555 (build-system pyproject-build-system)
1556 (arguments
1557 (list
1558 #:phases
1559 #~(modify-phases %standard-phases
1560 ;; Upstream plans to remove Python 2 compatibility:
1561 ;; https://github.com/JohannesBuchner/imagehash/pull/223
1562 (add-after 'unpack 'remove-six
1563 (lambda _
1564 (substitute* (find-files "." ".py$")
1565 (("import six") "")
1566 (("six\\.assertRaisesRegex\\(self, ")
1567 "self.assertRaisesRegex(")
1568 (("six\\.exec_") "")))))))
1569 (native-inputs
1570 (list python-pytest
1571 python-setuptools
1572 python-wheel))
1573 (propagated-inputs
1574 (list python-numpy
1575 python-pillow
1576 python-pywavelets
1577 python-scipy))
1578 (home-page "https://github.com/JohannesBuchner/imagehash")
1579 (synopsis "Perceptual Image Hashing library")
1580 (description
1581 "This package implements a functionality to tell whether two images look
1582nearly identical. The image hash algorithms (average, perceptual, difference,
1583wavelet) analyse the image structure on luminance (without color information).
1584The color hash algorithm analyses the color distribution and black & gray
1585fractions (without position information).
1586
1587Features:
1588@itemize
1589@item average hashing
1590@item perceptual hashing
1591@item difference hashing
1592@item wavelet hashing
1593@item HSV color hashing (colorhash)
1594@item crop-resistant hashing
1595@end itemize")
1596 (license license:bsd-2)))
1597
1598(define-public python-iminuit
1599 (package
1600 (name "python-iminuit")
1601 (version "2.31.1")
1602 (source
1603 (origin
1604 (method url-fetch)
1605 (uri (pypi-uri "iminuit" version))
1606 (sha256
1607 (base32 "066y0khk5bv56jv0p5bkkmya3rwijskz9yq9ch3jlgfqzzqh9q6m"))))
1608 (build-system pyproject-build-system)
1609 (arguments
1610 (list #:test-flags #~(list "-k" "not test_interactive_pyside6")))
1611 (native-inputs
1612 (list cmake-minimal
1613 pybind11
1614 python-annotated-types
1615 python-boost-histogram
1616 python-ipykernel
1617 python-jacobi
1618 python-joblib
1619 python-pydantic-2
1620 python-pytest
1621 python-resample
1622 python-scikit-build-core
1623 python-tabulate))
1624 ;; All inputs besides python-numpy are optional but greatly improve
1625 ;; the package.
1626 ;; FIXME: Numba segfaults Python in some tests.
1627 (propagated-inputs
1628 (list python-ipywidgets
1629 python-matplotlib
1630 ;; python-numba
1631 ;; python-numba-stats
1632 python-numpy
1633 python-scipy
1634 python-unicodeitplus))
1635 (home-page "https://github.com/scikit-hep/iminuit")
1636 (synopsis "Python interface for MINUIT2")
1637 (description
1638 "@code{iminuit} is a Jupyter-friendly Python interface for the @code{Minuit2}
1639C++ library maintained by CERN's ROOT team.
1640
1641Minuit was designed to optimize statistical cost functions, for
1642maximum-likelihood and least-squares fits. It provides the best-fit
1643parameters and error estimates from likelihood profile analysis.
1644
1645Optionally, Iminuit supports SciPy minimizers as alternatives to Minuit's
1646MIGRAD algorithm and Numba accelerated functions.")
1647 ;; Python interface under MIT Expat, Iminuit C++ library under LGPL v2.1+.
1648 (license (list license:expat license:lgpl2.1+))))
1649
1650(define-public python-jacobi
1651 (package
1652 (name "python-jacobi")
1653 (version "0.9.2")
1654 (source
1655 (origin
1656 (method url-fetch)
1657 (uri (pypi-uri "jacobi" version))
1658 (sha256
1659 (base32 "0a08680q6rnl6b1azq0lzd8r08pgnjd9ynwivb1g2vi4ccb4h7y1"))))
1660 (build-system pyproject-build-system)
1661 (native-inputs
1662 (list python-pytest
1663 python-pytest-benchmark
1664 python-setuptools
1665 python-setuptools-scm))
1666 (propagated-inputs
1667 (list python-numpy))
1668 (home-page "https://github.com/hdembinski/jacobi")
1669 (synopsis "Compute numerical derivatives")
1670 (description
1671 "This package provides fast numerical derivatives for analytic
1672functions with arbitrary round-off error and error propagation.")
1673 (license license:expat)))
1674
1675(define-public python-legendkit
1676 (package
1677 (name "python-legendkit")
1678 (version "0.3.6")
1679 (source
1680 (origin
1681 (method git-fetch) ;no tests in PyPI archive
1682 (uri (git-reference
1683 (url "https://github.com/Marsilea-viz/legendkit")
1684 (commit (string-append "v" version))))
1685 (file-name (git-file-name name version))
1686 (sha256
1687 (base32 "03xdhh95w4zydwa4ahp3gyfa6i60c9s5arfcj366knckb1bnpnn9"))))
1688 (build-system pyproject-build-system)
1689 (native-inputs
1690 (list python-hatchling
1691 python-pytest))
1692 (propagated-inputs
1693 (list python-matplotlib))
1694 (home-page "https://github.com/Marsilea-viz/legendki")
1695 (synopsis "Legend creation and manipulation for matplotlib")
1696 (description
1697 "This package implements a functionality to create and manipulate plot
1698legends for @code{matplotlib}.")
1699 (license license:expat)))
1700
1701(define-public python-libneuroml
1702 (package
1703 (name "python-libneuroml")
1704 (version "0.6.5")
1705 (source (origin
1706 (method git-fetch)
1707 (uri (git-reference
1708 (url "https://github.com/NeuralEnsemble/libNeuroML.git")
1709 (commit (string-append "v" version))))
1710 (file-name (git-file-name name version))
1711 (sha256
1712 (base32
1713 "04cfff9phm19x87p86xrkhd6wlpxvdwk3rf1c3qgyncfchws0sjh"))))
1714 (build-system pyproject-build-system)
1715 (native-inputs
1716 (list python-pytest
1717 python-numpy
1718 python-setuptools
1719 python-tables
1720 python-wheel))
1721 (propagated-inputs
1722 (list python-lxml
1723 python-natsort
1724 python-networkx))
1725 (home-page "https://libneuroml.readthedocs.org/en/latest/")
1726 (synopsis
1727 "Python library for working with NeuroML descriptions of neuronal models")
1728 (description
1729 "This package provides a Python library for working with NeuroML descriptions of
1730neuronal models")
1731 (license license:bsd-3)))
1732
1733(define-public python-marsilea
1734 (package
1735 (name "python-marsilea")
1736 (version "0.5.4")
1737 (source
1738 (origin
1739 (method git-fetch) ;no tests in PyPI archive
1740 (uri (git-reference
1741 (url "https://github.com/Marsilea-viz/marsilea")
1742 (commit (string-append "v" version))))
1743 (file-name (git-file-name name version))
1744 (sha256
1745 (base32 "09pyfx0gn46ypsp991d3n4a4xx6zlbpss078lw6yywnhl834v2i0"))))
1746 (build-system pyproject-build-system)
1747 (native-inputs
1748 (list python-hatchling
1749 python-pytest))
1750 (propagated-inputs
1751 (list python-legendkit
1752 python-matplotlib
1753 python-numpy
1754 python-pandas
1755 python-platformdirs
1756 python-scipy
1757 python-seaborn))
1758 (home-page "https://github.com/Marsilea-viz/marsilea")
1759 (synopsis "Declarative creation of composable visualizations")
1760 (description
1761 "Marsilea is a Python library for creating composable visualizations in a
1762declarative way. It is built on top of Matplotlib and provides a high-level
1763API for you to puzzle different visualizations together like logo.")
1764 (license license:expat)))
1765
1766(define-public python-meshzoo
1767 (package
1768 (name "python-meshzoo")
1769 (version "0.9.4")
1770 (source
1771 (origin
1772 (method git-fetch)
1773 (uri (git-reference
1774 (url "https://github.com/diego-hayashi/meshzoo")
1775 (commit (string-append "v" version))))
1776 (file-name (git-file-name name version))
1777 (sha256
1778 (base32 "107byfppbq16fqyp2hw7ydcvvahspzq0hzvlvzqg2zxi1aigbr68"))))
1779 (build-system pyproject-build-system)
1780 (propagated-inputs
1781 (list python-numpy))
1782 (native-inputs (list python-flit-core python-matplotlib python-pytest))
1783 (home-page "https://github.com/diego-hayashi/meshzoo")
1784 (synopsis "Mesh generator for simple geometries")
1785 (description
1786 "@code{meshzoo} is a mesh generator for finite element or finite
1787volume computations for simple domains like regular polygons, disks,
1788spheres, cubes, etc.")
1789 (license license:gpl3+)))
1790
1791(define-public python-modin
1792 (package
1793 (name "python-modin")
1794 (version "0.32.0")
1795 (source
1796 (origin
1797 ;; The archive on pypi does not include all required files.
1798 (method git-fetch)
1799 (uri (git-reference
1800 (url "https://github.com/modin-project/modin")
1801 (commit version)))
1802 (file-name (git-file-name name version))
1803 (sha256
1804 (base32
1805 "1vb3iffgspryb6nvwiwdnypb922vkn2yvyzc1y0wwxcb0c0fl78d"))))
1806 (build-system pyproject-build-system)
1807 (arguments
1808 (list
1809 #:test-flags
1810 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
1811 ;; These four tests fail because an expected error is not raised.
1812 "-k" "not test_binary_bad_broadcast")
1813 #:phases
1814 '(modify-phases %standard-phases
1815 (add-after 'unpack 'loosen-requirements
1816 (lambda _
1817 (substitute* "setup.py"
1818 ;; Don't depend on a specific version of Pandas.
1819 (("pandas==") "pandas>="))))
1820 (replace 'check
1821 (lambda* (#:key tests? test-flags #:allow-other-keys)
1822 (when tests?
1823 (setenv "MODIN_ENGINE" "dask")
1824 (apply invoke "python" "-m" "pytest"
1825 "modin/tests/numpy" test-flags)
1826 (setenv "MODIN_ENGINE" "python")
1827 (apply invoke "python" "-m" "pytest"
1828 "modin/tests/numpy" test-flags)))))))
1829 (propagated-inputs
1830 (list python-cloudpickle
1831 python-dask
1832 python-distributed
1833 python-numpy
1834 python-packaging
1835 python-pandas
1836 python-s3fs))
1837 (native-inputs
1838 (list python-boto3
1839 python-jinja2
1840 python-lxml
1841 python-matplotlib
1842 python-msgpack
1843 python-openpyxl
1844 python-psutil
1845 python-pyarrow
1846 python-pytest
1847 python-pytest-benchmark
1848 python-pytest-cov
1849 python-pytest-xdist
1850 python-scipy
1851 python-sqlalchemy
1852 python-tables
1853 python-tqdm
1854 python-xarray
1855 python-xlrd
1856 python-wheel))
1857 (home-page "https://github.com/modin-project/modin")
1858 (synopsis "Make your pandas code run faster")
1859 (description
1860 "Modin uses Ray or Dask to provide an effortless way to speed up your
1861pandas notebooks, scripts, and libraries. Unlike other distributed DataFrame
1862libraries, Modin provides seamless integration and compatibility with existing
1863pandas code.")
1864 (license license:asl2.0)))
1865
1866(define-public python-mpl-scatter-density
1867 (package
1868 (name "python-mpl-scatter-density")
1869 (version "0.8")
1870 (source
1871 (origin
1872 (method url-fetch)
1873 (uri (pypi-uri "mpl_scatter_density" version))
1874 (sha256
1875 (base32 "0cynk1rk6k2xklgv69difphrz6id77x3xb58kbs4mc4q7z6bvfid"))))
1876 (build-system pyproject-build-system)
1877 (arguments
1878 (list
1879 ;; See <https://github.com/astrofrog/mpl-scatter-density/issues/42>.
1880 #:test-flags #~(list "-k" "not test_default_dpi")))
1881 (native-inputs
1882 (list python-pytest
1883 python-pytest-cov
1884 python-pytest-mpl
1885 python-setuptools
1886 python-setuptools-scm
1887 python-wheel))
1888 (propagated-inputs
1889 (list python-fast-histogram
1890 python-matplotlib
1891 python-numpy))
1892 (home-page "https://github.com/astrofrog/mpl-scatter-density")
1893 (synopsis "Matplotlib helpers to make density scatter plots")
1894 (description
1895 "This package provides functionality to make it easy to make scatter
1896density maps, both for interactive and non-interactive use.")
1897 (license license:bsd-2)))
1898
1899(define-public python-mpsplines
1900 ;; No release on PyPI no git tag, use the latest commit.
1901 (let ((commit "4967655fca8f4d0fc0685486c8ec2f1fe2f199d2")
1902 (revision "0"))
1903 (package
1904 (name "python-mpsplines")
1905 (version (git-version "0.0.0" revision commit))
1906 (source
1907 (origin
1908 (method git-fetch)
1909 (uri (git-reference
1910 (url "https://github.com/jararias/mpsplines")
1911 (commit commit)))
1912 (file-name (git-file-name name version))
1913 (sha256
1914 (base32 "1wqfvjp1d6xzb07qnq72h76f0mx7za9pasgw3qp3ciaycmlkvdr3"))))
1915 (build-system pyproject-build-system)
1916 (arguments
1917 (list #:tests? #f)) ; no tests provided
1918 (native-inputs
1919 (list python-setuptools
1920 python-wheel))
1921 (propagated-inputs
1922 (list python-scipy
1923 python-numpy
1924 python-loguru))
1925 (home-page "https://github.com/jararias/mpsplines")
1926 (synopsis "Mean preserving interpolation with splines")
1927 (description
1928 "Thi package implements a functionality for mean-preserving
1929interpolation of 1D data (for example, time series) with splines.")
1930 (license license:bsd-3))))
1931
1932(define-public python-msgpack-numpy
1933 (package
1934 (name "python-msgpack-numpy")
1935 (version "0.4.8")
1936 (source
1937 (origin
1938 (method url-fetch)
1939 (uri (pypi-uri "msgpack-numpy" version))
1940 (sha256
1941 (base32
1942 "0sbfanbkfs6c77np4vz0ayrwnv99bpn5xgj5fnf2yhhk0lcd6ry6"))))
1943 (build-system python-build-system)
1944 (propagated-inputs
1945 (list python-msgpack python-numpy))
1946 (home-page "https://github.com/lebedov/msgpack-numpy")
1947 (synopsis
1948 "Numpy data serialization using msgpack")
1949 (description
1950 "This package provides encoding and decoding routines that enable the
1951serialization and deserialization of numerical and array data types provided
1952by numpy using the highly efficient @code{msgpack} format. Serialization of
1953Python's native complex data types is also supported.")
1954 (license license:bsd-3)))
1955
1956(define-public python-multiscale-spatial-image
1957 (package
1958 (name "python-multiscale-spatial-image")
1959 (version "1.0.0")
1960 (source
1961 (origin
1962 (method url-fetch)
1963 (uri (pypi-uri "multiscale_spatial_image" version))
1964 (sha256
1965 (base32 "01kcagjy797hbz5an9cp8wcl5krgp21yb7ibfimvpidb3jp5lfhb"))))
1966 (build-system pyproject-build-system)
1967 ;; All interesting tests require file downloads over IPFS.
1968 (arguments (list #:tests? #false))
1969 (propagated-inputs
1970 (list `(,insight-toolkit "python")
1971 python-dask
1972 python-dask-image
1973 python-numpy
1974 python-spatial-image
1975 python-xarray
1976 python-xarray-datatree))
1977 (native-inputs
1978 (list python-fsspec
1979 python-hatchling
1980 python-ipfsspec
1981 python-jsonschema
1982 python-nbmake
1983 python-pooch
1984 python-pytest
1985 python-pytest-mypy
1986 python-urllib3
1987 python-zarr))
1988 (home-page "https://github.com/spatial-image/multiscale-spatial-image")
1989 (synopsis "Multi-dimensional spatial image data structure")
1990 (description
1991 "This package lets you generate a multiscale, chunked, multi-dimensional
1992spatial image data structure that can serialized to OME-NGFF. Each scale is a
1993scientific Python Xarray spatial-image Dataset, organized into nodes of an
1994Xarray Datatree.")
1995 (license license:asl2.0)))
1996
1997(define-public python-narwhals
1998 (package
1999 (name "python-narwhals")
2000 (version "1.44.0")
2001 (source
2002 (origin
2003 (method url-fetch)
2004 (uri (pypi-uri "narwhals" version))
2005 (sha256
2006 (base32 "07fk7b1via9a81ig38316l10avdbrjbdxz2n7ddj48bg9xnn3w4c"))))
2007 (build-system pyproject-build-system)
2008 (arguments
2009 (list
2010 #:test-flags
2011 #~(list "--numprocesses" (number->string (parallel-job-count))
2012 ;; Run a minimal portion of tests, the complete test suite
2013 ;; requires Polars, PySpark and SqlFrame packages.
2014 "--constructors=pandas"
2015 "-k" (string-join
2016 ;; XXX: ValueError: Minimum version of modin supported by Narwhals is
2017 ;; (0, 8, 2), found: (0,)
2018 (list "not test_allow_series"
2019 "test_cross_join_non_pandas"
2020 "test_eager_only_eager"
2021 "test_from_native_roundtrip_identity"
2022 "test_namespace_series_from_iterable"
2023 "test_series_only"
2024 "test_to_native_namespace")
2025 " and not "))))
2026 (native-inputs
2027 (list python-pytest
2028 python-pytest-xdist
2029 python-duckdb
2030 python-pytest-env
2031 python-hatchling))
2032 (propagated-inputs
2033 (list python-pandas
2034 python-dask
2035 python-modin
2036 python-pyarrow))
2037 (home-page "https://narwhals-dev.github.io/narwhals/")
2038 (synopsis "Compatibility layer between dataframe libraries")
2039 (description
2040 "This package provides an extremely lightweight compatibility layer
2041between dataframe libraries.
2042@itemize
2043@item full API support: cuDF, Modin, pandas, Polars, PyArrow
2044@item lazy-only support: Dask, DuckDB, Ibis, PySpark, SQLFrame
2045@end itemize")
2046 (license license:expat)))
2047
2048(define-public python-ndindex
2049 (package
2050 (name "python-ndindex")
2051 (version "1.7") ;newer versions require a newer numpy
2052 (source
2053 (origin
2054 (method url-fetch)
2055 (uri (pypi-uri "ndindex" version))
2056 (sha256
2057 (base32 "1lpgsagmgxzsas7g8yiv6wmyss8q57w92h70fn11rnpadsvx16xz"))))
2058 (build-system pyproject-build-system)
2059 (arguments
2060 (list
2061 #:test-flags
2062 #~(list "-c" "/dev/null" ;avoid coverage
2063 "-k" "not test_iter_indices_matmul"))) ; flaky
2064 (native-inputs
2065 (list python-cython
2066 python-numpy
2067 python-pytest
2068 python-setuptools
2069 python-wheel))
2070 (home-page "https://quansight-labs.github.io/ndindex/")
2071 (synopsis "Python library for manipulating indices of ndarrays")
2072 (description "This package provides a Python library for manipulating
2073indices of @code{ndarrays}.")
2074 (license license:expat)))
2075
2076(define-public python-nibabel
2077 (package
2078 (name "python-nibabel")
2079 (version "5.3.2")
2080 (source
2081 (origin
2082 (method url-fetch)
2083 (uri (pypi-uri "nibabel" version))
2084 (sha256
2085 (base32 "16snprwgp7qzp51j3mx0zdn7brvx6r14ankldi24ny0w7d8adp0b"))))
2086 (build-system pyproject-build-system)
2087 (arguments
2088 (list
2089 ;; AttributeError: 'dict' object has no attribute 'add'.
2090 #:test-flags #~(list "-k" "not test_first and not test_second")))
2091 (propagated-inputs (list python-importlib-resources python-numpy
2092 python-packaging python-typing-extensions))
2093 (native-inputs (list python-hatch-vcs
2094 python-hatchling
2095 python-pytest
2096 python-pytest-httpserver
2097 python-pytest-xdist))
2098 (home-page "https://nipy.org/nibabel/")
2099 (synopsis "Read and write access to common neuroimaging file formats")
2100 (description
2101 "@code{nibabel} is a library that provides read and write access to
2102common neuroimaging file formats, including: ANALYZE (plain, SPM99, SPM2
2103and later), GIFTI, NIfTI1, NIfTI2, CIFTI-2, MINC1, MINC2, AFNI BRIK/HEAD,
2104ECAT and Philips PAR/REC. In addition, NiBabel also supports FreeSurfer’s
2105MGH, geometry, annotation and morphometry files, and provides some limited
2106support for DICOM.")
2107 (license license:expat))) ; and other non-copyleft licenses
2108
2109(define-public python-numba-stats
2110 (package
2111 (name "python-numba-stats")
2112 (version "1.11.0")
2113 (source
2114 (origin
2115 (method url-fetch)
2116 (uri (pypi-uri "numba_stats" version))
2117 (sha256
2118 (base32 "1m5gwrc3liqydpix5ckyc7s5ysvgvinbznnkcvk2xjz13lwfy2s8"))))
2119 (build-system pyproject-build-system)
2120 (native-inputs
2121 (list python-pytest
2122 python-setuptools
2123 python-setuptools-scm))
2124 (propagated-inputs
2125 (list python-numba
2126 python-numpy
2127 python-scipy))
2128 (home-page "https://github.com/scikit-hep/numba-stats")
2129 (synopsis "Accelerated implementations of SciPy probability distributions")
2130 (description
2131 "This package provides Numba-accelerated implementations of common SciPy
2132probability distributions and others used in particle physics.
2133
2134The supported distributions are:
2135
2136@itemize
2137@item Uniform
2138@item (Truncated) Normal
2139@item Log-normal
2140@item Poisson
2141@item Binomial
2142@item (Truncated) Exponential
2143@item Student's t
2144@item Voigtian
2145@item Crystal Ball
2146@item Generalised double-sided Crystal Ball
2147@item Tsallis-Hagedorn, a model for the minimum bias pT distribution
2148@item Q-Gaussian
2149@item Bernstein density (not normalized to unity)
2150@item Cruijff density (not normalized to unity)
2151@item CMS-Shape
2152@item Generalized Argus
2153@end itemize")
2154 (license license:expat)))
2155
2156(define-public python-numdifftools
2157 (package
2158 (name "python-numdifftools")
2159 (version "0.9.41")
2160 (source
2161 (origin
2162 (method url-fetch)
2163 (uri (pypi-uri "numdifftools" version))
2164 (sha256
2165 (base32 "1d49wd5jqnl0500jyws0vb7nv4dy4bb5ml4z9qx1n8867k6hbxsf"))))
2166 (build-system pyproject-build-system)
2167 (arguments
2168 (list
2169 #:test-flags
2170 #~(list "--pyargs" "numdifftools"
2171 "-k" (string-join
2172 ;; Tests failing with error: TypeError: a must be an array
2173 ;; of real numbers, see
2174 ;; <https://github.com/pbrod/numdifftools/issues/72>.
2175 (list "not test_high_order_derivative"
2176 "test_low_order_derivative_on_example_functions"
2177 "test_sinx_div_x"
2178 "test_complex_hessian_issue_35"
2179
2180 "numdifftools.fornberg.Taylor"
2181 "numdifftools.fornberg.derivative"
2182 "numdifftools.fornberg.taylor")
2183 " and not "))
2184 #:phases
2185 #~(modify-phases %standard-phases
2186 (add-after 'unpack 'relax-requirements
2187 (lambda _
2188 (substitute* "setup.py"
2189 ;; We can run tests without deprecated pytest-runner.
2190 (("setup_requires.*") "")))))))
2191 (native-inputs
2192 (list python-algopy
2193 python-line-profiler
2194 python-pytest
2195 python-setuptools
2196 python-setuptools-scm
2197 python-statsmodels
2198 python-wheel))
2199 (propagated-inputs
2200 (list python-numpy
2201 python-scipy))
2202 (home-page "https://github.com/pbrod/numdifftools")
2203 (synopsis "Solves automatic numerical differentiation problems")
2204 (description
2205 "This package implements a functionality to solve automatic numerical
2206differentiation problems in one or more variables. Finite differences are
2207used in an adaptive manner, coupled with a Richardson extrapolation
2208methodology to provide a maximally accurate result. The user can configure
2209many options like; changing the order of the method or the extrapolation, even
2210allowing the user to specify whether complex-step, central, forward or
2211backward differences are used.")
2212 (license license:bsd-3)))
2213
2214(define-public python-numpoly
2215 (package
2216 (name "python-numpoly")
2217 (version "1.2.11")
2218 (source (origin
2219 (method git-fetch) ;; PyPI is missing some Pytest fixtures
2220 (uri (git-reference
2221 (url "https://github.com/jonathf/numpoly")
2222 (commit (string-append "v" version))))
2223 (file-name (git-file-name name version))
2224 (sha256
2225 (base32
2226 "01g21v91f4d66xd0bvap0n6d6485w2fnq1636gx6h2s42550rlbd"))))
2227 (build-system pyproject-build-system)
2228 (propagated-inputs (list python-importlib-metadata python-numpy))
2229 (native-inputs (list python-pytest python-setuptools python-sympy
2230 python-wheel))
2231 (home-page "https://numpoly.readthedocs.io/en/master/")
2232 (synopsis "Polynomials as a numpy datatype")
2233 (description "Numpoly is a generic library for creating, manipulating and
2234evaluating arrays of polynomials based on @code{numpy.ndarray objects}.")
2235 ;; Tests fail with dtype mismatches on 32-bit architectures, suggesting
2236 ;; that numpoly only supports 64 bit platforms.
2237 (supported-systems '("x86_64-linux" "aarch64-linux" "powerpc64le-linux"))
2238 (license license:bsd-2)))
2239
2240(define-public python-numpy-groupies
2241 (package
2242 (name "python-numpy-groupies")
2243 (version "0.9.14")
2244 (source
2245 (origin
2246 (method url-fetch)
2247 (uri (pypi-uri "numpy_groupies" version))
2248 (sha256
2249 (base32 "000qz0z78rs3l6y0dd2vzvd2lx3mczm2762whwsdnhz6c35axdq1"))))
2250 (build-system python-build-system)
2251 (native-inputs
2252 (list python-pytest
2253 python-pytest-runner
2254 python-numba
2255 python-numpy))
2256 (home-page "https://github.com/ml31415/numpy-groupies")
2257 (synopsis "Tools for group-indexing operations: aggregated sum and more")
2258 (description
2259 "This package provides optimized tools for group-indexing operations:
2260aggregated sum and more.")
2261 (license license:bsd-3)))
2262
2263(define-public python-opt-einsum
2264 (package
2265 (name "python-opt-einsum")
2266 (version "3.3.0")
2267 (source (origin
2268 (method url-fetch)
2269 (uri (pypi-uri "opt_einsum" version))
2270 (sha256
2271 (base32
2272 "0jb5lia0q742d1713jk33vlj41y61sf52j6pgk7pvhxvfxglgxjr"))))
2273 (build-system pyproject-build-system)
2274 (propagated-inputs (list python-numpy))
2275 (native-inputs
2276 (list python-pytest python-pytest-cov python-setuptools python-wheel))
2277 (home-page "https://github.com/dgasmith/opt_einsum")
2278 (synopsis "Optimizing numpys einsum function")
2279 (description
2280 "Optimized einsum can significantly reduce the overall execution time of
2281einsum-like expressions by optimizing the expression's contraction order and
2282dispatching many operations to canonical BLAS, cuBLAS, or other specialized
2283routines. Optimized einsum is agnostic to the backend and can handle NumPy,
2284Dask, PyTorch, Tensorflow, CuPy, Sparse, Theano, JAX, and Autograd arrays as
2285well as potentially any library which conforms to a standard API. See the
2286documentation for more information.")
2287 (license license:expat)))
2288
2289(define-public python-osqp
2290 (package
2291 (name "python-osqp")
2292 (version "0.6.5")
2293 (source
2294 (origin
2295 (method git-fetch)
2296 (uri (git-reference
2297 (url "https://github.com/osqp/osqp-python")
2298 (commit (string-append "v" version))
2299 (recursive? #true)))
2300 (file-name (git-file-name name version))
2301 (sha256
2302 (base32 "0s1nbzkfsi2h4ji3v0k14pfcrvinakrwy4xdbz320lbaq3yb0b65"))))
2303 (build-system pyproject-build-system)
2304 (arguments
2305 (list
2306 #:test-flags
2307 ;; Some of these test failures are explained by
2308 ;; https://github.com/osqp/osqp-python/issues/121.
2309 ;; These tests require the module "vec_emosqp", which we don't have.
2310 '(list "--ignore=src/osqp/tests/codegen_vectors_test.py"
2311 ;; These tests need "mat_emosqp".
2312 "--ignore=src/osqp/tests/codegen_matrices_test.py"
2313 ;; These fail with accuracy differences
2314 "--ignore=src/osqp/tests/update_matrices_test.py"
2315 "--ignore=src/osqp/tests/feasibility_test.py"
2316 "--ignore=src/osqp/tests/polishing_test.py"
2317 ;; This requires the nonfree MKL.
2318 "--ignore=src/osqp/tests/mkl_pardiso_test.py")
2319 #:phases
2320 #~(modify-phases %standard-phases
2321 ;; It looks like the upgrade to scipy 1.12.0 only broke the test
2322 ;; suite, not the features of this library. See
2323 ;; https://github.com/osqp/osqp-python/issues/121.
2324 (add-after 'unpack 'relax-requirements
2325 (lambda _
2326 (substitute* "requirements.txt"
2327 (("scipy.*1.12.0") "scipy <= 1.12.0"))))
2328 (add-before 'build 'set-version
2329 (lambda _
2330 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
2331 (propagated-inputs (list python-numpy python-qdldl python-scipy))
2332 ;; We need setuptools-scm only for the version number. Without it the
2333 ;; version number will be "0.0.0" and downstream packages will complain.
2334 (native-inputs
2335 (list cmake-minimal
2336 python-pytest
2337 python-setuptools-scm
2338 python-setuptools
2339 python-wheel))
2340 (home-page "https://osqp.org/")
2341 (synopsis "OSQP: operator splitting QP solver")
2342 (description "The OSQP (Operator Splitting Quadratic Program) solver is a
2343numerical optimization package.")
2344 (license license:asl2.0)))
2345
2346(define-public python-particle
2347 (package
2348 (name "python-particle")
2349 (version "0.25.3")
2350 (source
2351 (origin
2352 (method url-fetch)
2353 (uri (pypi-uri "particle" version))
2354 (sha256
2355 (base32 "0as50k5hinxszsm6lnghnmx2cyjy77c0i2gvzf2q64g2x5b7xkvq"))))
2356 (build-system pyproject-build-system)
2357 (propagated-inputs (list python-attrs
2358 python-hepunits
2359 python-typing-extensions))
2360 (native-inputs (list python-hatch-vcs
2361 python-hatchling
2362 python-pandas
2363 python-pytest
2364 python-pytest-benchmark
2365 python-tabulate))
2366 (home-page "https://github.com/scikit-hep/particle")
2367 (synopsis "Extended PDG particle data and MC identification codes")
2368 (description
2369 "@code{Particle} provides a pythonic interface to the Particle Data Group
2370(PDG) particle data tables and particle identification codes, with extended
2371particle information and extra goodies.")
2372 (license license:bsd-3)))
2373
2374(define-public python-pint
2375 (package
2376 (name "python-pint")
2377 (version "0.24.4")
2378 (source
2379 (origin
2380 (method url-fetch)
2381 (uri (pypi-uri "pint" version))
2382 (sha256
2383 (base32 "100vp5jg2sqj5wxaflj1rqjv2pk4fd55l2h2sdn7m0vlnlwm89rm"))))
2384 (build-system pyproject-build-system)
2385 (arguments
2386 (list
2387 #:test-flags #~(list "--ignore=pint/testsuite/benchmarks")
2388 #:phases
2389 #~(modify-phases %standard-phases
2390 (add-before 'check 'pre-check
2391 (lambda _
2392 ;; PermissionError: [Errno 13] Permission denied:
2393 ;; '/homeless-shelter'
2394 (setenv "HOME" "/tmp"))))))
2395 (native-inputs
2396 (list python-pytest
2397 python-pytest-mpl
2398 python-pytest-subtests
2399 python-setuptools
2400 python-setuptools-scm
2401 python-wheel))
2402 (propagated-inputs
2403 (list python-flexcache
2404 python-flexparser
2405 python-platformdirs
2406 python-typing-extensions))
2407 (home-page "https://github.com/hgrecco/pint")
2408 (synopsis "Physical quantities module")
2409 (description
2410 "Pint is a Python package to define, operate and manipulate physical
2411quantities: the product of a numerical value and a unit of measurement. It
2412allows arithmetic operations between them and conversions from and to
2413different units.")
2414 (license license:bsd-3)))
2415
2416(define-public python-pyamg
2417 (package
2418 (name "python-pyamg")
2419 (version "5.0.1")
2420 (source (origin
2421 (method url-fetch)
2422 (uri (pypi-uri "pyamg" version))
2423 (modules '((guix build utils)))
2424 (snippet
2425 ;; Delete autogenerated files, regenerate in a phase.
2426 #~(begin
2427 (for-each
2428 (lambda (file)
2429 (delete-file (string-append "pyamg/amg_core/" file)))
2430 '("air_bind.cpp"
2431 "evolution_strength_bind.cpp"
2432 "graph_bind.cpp"
2433 "krylov_bind.cpp"
2434 "linalg_bind.cpp"
2435 "relaxation_bind.cpp"
2436 "ruge_stuben_bind.cpp"
2437 "smoothed_aggregation_bind.cpp"
2438 "tests/bind_examples_bind.cpp"))))
2439 (sha256
2440 (base32
2441 "0l3dliwynxyjvbgpmi2k8jqvkkw6fc00c8w69h6swhrkfh0ql12z"))))
2442 (arguments
2443 (list
2444 #:test-flags
2445 ;; Test installed package in order to find C++ modules.
2446 #~(list "--pyargs" "pyamg.tests")
2447 #:phases
2448 #~(modify-phases %standard-phases
2449 ;; Regenerate the autogenerated files.
2450 (add-after 'unpack 'amg-core-bind-them
2451 (lambda _
2452 ;; bindthem.py heavily depends on location to produce *_bind.cpp
2453 ;; file, make it available in tests as well.
2454 (copy-file "pyamg/amg_core/bindthem.py"
2455 "pyamg/amg_core/tests/bindthem.py")
2456 (with-directory-excursion "pyamg/amg_core"
2457 (substitute* "bindthem.py"
2458 (("/usr/bin/env python3") (which "python3")))
2459 (invoke "sh" "generate.sh"))
2460 (with-directory-excursion "pyamg/amg_core/tests"
2461 (invoke "python" "bindthem.py" "bind_examples.h")))))))
2462 (build-system pyproject-build-system)
2463 (native-inputs
2464 (list pybind11
2465 python-cppheaderparser
2466 python-pytest
2467 python-pyyaml
2468 python-setuptools
2469 python-setuptools-scm
2470 python-wheel))
2471 (propagated-inputs (list python-numpy python-scipy))
2472 (home-page "https://github.com/pyamg/pyamg")
2473 (synopsis "Algebraic Multigrid Solvers in Python")
2474 (description "PyAMG is a Python library of Algebraic Multigrid
2475(AMG) solvers. It features implementations of:
2476@itemize
2477@item Ruge-Stuben (RS) or Classical AMG
2478@item AMG based on Smoothed Aggregation (SA)
2479@item Adaptive Smoothed Aggregation (αSA)
2480@item Compatible Relaxation (CR)
2481@item Krylov methods such as CG, GMRES, FGMRES, BiCGStab, MINRES, etc.
2482@end itemize")
2483 (license license:expat)))
2484
2485(define-public python-pyet
2486 (package
2487 (name "python-pyet")
2488 (version "1.3.1")
2489 (source
2490 (origin
2491 (method url-fetch)
2492 (uri (pypi-uri "pyet" version))
2493 (sha256
2494 (base32 "1dblsx0bv1g453hcx5vwij1zgankwgwvhwllqkn47k578h038xvy"))))
2495 (build-system pyproject-build-system)
2496 (native-inputs
2497 (list python-mock
2498 python-pytest
2499 python-setuptools
2500 python-wheel))
2501 (propagated-inputs
2502 (list python-pandas
2503 python-xarray))
2504 (home-page "https://github.com/pyet-org/pyet")
2505 (synopsis "Python package for evapotranspiration calculation")
2506 (description
2507 "This package provides a Python library for calculating
2508Evapotranspiration using various standard methods.")
2509 (license license:expat)))
2510
2511(define-public python-pykdtree
2512 (package
2513 (name "python-pykdtree")
2514 (version "1.4.2")
2515 (source
2516 (origin
2517 (method url-fetch)
2518 (uri (pypi-uri "pykdtree" version))
2519 (sha256
2520 (base32 "1xb5xdp32s5ffcbbb6vlrj4i70hdknajvr9yhzx0wld52rx9caxx"))))
2521 (build-system pyproject-build-system)
2522 (arguments
2523 (list
2524 ;; FIXME: Tests are unable to import properly, but it seems to work in
2525 ;; real conditions.
2526 #:tests? #f
2527 #:phases
2528 #~(modify-phases %standard-phases
2529 (add-after 'install 'fix-site-packages
2530 (lambda* (#:key inputs outputs #:allow-other-keys)
2531 (with-directory-excursion (site-packages inputs outputs)
2532 (for-each delete-file (find-files "." "test*"))))))))
2533 (native-inputs
2534 (list python-cython python-pytest python-setuptools python-wheel))
2535 (propagated-inputs
2536 (list python-numpy))
2537 (home-page "https://github.com/storpipfugl/pykdtree")
2538 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
2539 (description
2540 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
2541search in Python.")
2542 (license license:lgpl3+)))
2543
2544(define-public python-pynetdicom
2545 (package
2546 (name "python-pynetdicom")
2547 (version "2.1.1")
2548 (source (origin
2549 (method url-fetch)
2550 (uri (pypi-uri "pynetdicom" version))
2551 (sha256
2552 (base32
2553 "1smzrnc93nmv8jz4np9knas74a46b1nhb3hjpf8n9vfpxypgnwcn"))))
2554 (build-system pyproject-build-system)
2555 (arguments
2556 (list
2557 #:test-flags
2558 ;; Tests takes about 10-15min to complete.
2559 ;; Skip tests that require networking.
2560 #~(list "-k" (string-append
2561 " not TestFindSCP"
2562 " and not TestQRGetServiceClass"
2563 " and not TestQRMoveServiceClass"
2564 " and not TestStoreSCP"
2565 " and not test_ae.py"
2566 " and not test_echoscp.py"
2567 " and not test_qrscp_echo.py"
2568 " and not test_storescp.py"
2569 " and not test_pr_level_patient"
2570 " and not test_pr_level_series"
2571 " and not test_scp_cancelled"))))
2572 (native-inputs (list python-codespell
2573 python-coverage
2574 python-poetry-core
2575 python-pytest
2576 python-pytest-cov
2577 python-pytest-xdist
2578 python-sphinx
2579 python-sphinx-rtd-theme))
2580 (propagated-inputs (list python-mypy
2581 python-numpydoc
2582 python-pydicom
2583 python-pyfakefs
2584 python-sqlalchemy))
2585 (home-page "https://github.com/pydicom/pynetdicom")
2586 (synopsis "Python implementation of the DICOM networking protocol")
2587 (description
2588 "@code{pynetdicom} is a Python package that implements the DICOM
2589networking protocol. It allows the easy creation of DICOM
2590@acronym{SCUs,Service Class Users} and @acronym{SCPs,Service Class
2591Providers}.")
2592 (license license:expat)))
2593
2594(define-public python-pyzx
2595 (package
2596 (name "python-pyzx")
2597 (version "0.9.0")
2598 (source
2599 (origin
2600 (method git-fetch) ; no tests in PyPI
2601 (uri (git-reference
2602 (url "https://github.com/zxcalc/pyzx")
2603 (commit (string-append "v" version))))
2604 (file-name (git-file-name name version))
2605 (sha256
2606 (base32 "1bnmz08w1bmipir1wnn1k3fw64rply7891xns22qfj6yh0j1n6rj"))))
2607 (build-system pyproject-build-system)
2608 (arguments (list #:test-flags
2609 #~(list
2610 ;; Ignore long running tests
2611 "--ignore=tests/long_test.py"
2612 "--ignore=tests/long_scalar_test.py")
2613 #:phases
2614 #~(modify-phases %standard-phases
2615 (add-before 'check 'pre-check
2616 (lambda* (#:key inputs outputs #:allow-other-keys)
2617 (setenv "HOME" "/tmp")
2618 ;; Matplotlib needs to be able to write its
2619 ;; configuration file somewhere.
2620 (setenv "MPLCONFIGDIR" "/tmp"))))))
2621 (native-inputs (list python-pytest
2622 python-setuptools
2623 python-wheel))
2624 (propagated-inputs (list python-ipywidgets
2625 python-lark
2626 python-numpy
2627 python-pyperclip
2628 python-tqdm))
2629 (home-page "https://github.com/zxcalc/pyzx")
2630 (synopsis "Quantum circuit rewriting and optimisation using the ZX-calculus")
2631 (description
2632 "PyZX is a Python tool implementing the theory of ZX-calculus for the
2633creation, visualisation, and automated rewriting of large-scale quantum
2634circuits. PyZX currently allows you to:
2635
2636@itemize
2637@item Read in quantum circuits in the file format of QASM, Quipper or Quantomatic;
2638@item Rewrite circuits into a pseudo-normal form using the ZX-calculus;
2639@item Extract new simplified circuits from these reduced graphs;
2640@item Visualise the ZX-graphs and rewrites using either Matplotlib, Quantomatic
2641or as a TikZ file for use in LaTeX documents;
2642@item Output the optimised circuits in QASM, QC or QUIPPER format.
2643@end itemize")
2644 (license license:asl2.0)))
2645
2646(define-public python-qdldl
2647 (package
2648 (name "python-qdldl")
2649 (version "0.1.7.post5")
2650 (source
2651 (origin
2652 (method url-fetch)
2653 (uri (pypi-uri "qdldl" version))
2654 (sha256
2655 (base32 "0vi8dgrw32qj03z2dd3zqd0d625pibq3xmlgmidfsnwvqkhrj4qb"))))
2656 (build-system pyproject-build-system)
2657 (native-inputs
2658 (list cmake-minimal
2659 pybind11
2660 python-pytest
2661 python-setuptools))
2662 (propagated-inputs (list python-numpy python-scipy))
2663 (home-page "https://github.com/oxfordcontrol/qdldl-python/")
2664 (synopsis "QDLDL LDL factorization routine")
2665 (description "This package provides a Python interface to the QDLDL LDL
2666factorization routine for quasi-definite linear system.")
2667 (license license:asl2.0)))
2668
2669(define-public python-qutip
2670 (package
2671 (name "python-qutip")
2672 (version "5.2.0")
2673 (source
2674 (origin
2675 (method url-fetch)
2676 (uri (pypi-uri "qutip" version))
2677 (sha256
2678 (base32 "0yjv04q68jqh769shlsm31zzg2v23r64rbzs8gawpj12pip1h9cp"))
2679 (modules '((guix build utils)))
2680 (snippet
2681 #~(begin
2682 (use-modules (ice-9 string-fun))
2683 ;; Delete cythonized files. Not all cpp files are generated
2684 ;; by Cython, delete only those with accompanying Cython
2685 ;; file extensions (.pyx, .pxd).
2686 (for-each (lambda (file)
2687 (when (or-map
2688 (lambda (cython-ext)
2689 (file-exists? (string-replace-substring
2690 file ".cpp" cython-ext)))
2691 (list ".pyx" ".pxd"))
2692 (delete-file file)))
2693 (find-files "." ".cpp"))))))
2694 (build-system pyproject-build-system)
2695 (arguments
2696 (list
2697 #:test-flags
2698 #~(list "-m" "not flaky and not slow" ;; Ignore flaky and slow tests.
2699 ;; All tests below fail with:
2700 ;; _flapack.error: (lrwork>=max(24*n,1)||lrwork==-1) failed for
2701 ;; 10th keyword lrwork: zheevr:lrwork=1
2702 "-k" (string-append
2703 "not " (string-join
2704 (list "test_dicke_function_trace"
2705 "test_create"
2706 "test_terminator"
2707 "test_krylov"
2708 "test_krylovsolve")
2709 " and not ")))
2710 #:phases
2711 #~(modify-phases %standard-phases
2712 (replace 'check
2713 ;; Run tests in the output to avoid 'partially imported' errors.
2714 (lambda* (#:key tests? test-flags #:allow-other-keys)
2715 (when tests?
2716 (with-directory-excursion #$output
2717 (apply invoke "pytest" "-vv" test-flags))))))))
2718 (propagated-inputs (list python-numpy python-packaging python-scipy))
2719 (native-inputs (list python-cython
2720 python-numpy
2721 python-packaging
2722 python-pytest
2723 python-scipy
2724 python-setuptools
2725 python-wheel))
2726 (home-page "https://qutip.org")
2727 (synopsis "Quantum Toolbox in Python")
2728 (description
2729 "QuTiP is a library for simulating the dynamics of closed and open quantum
2730systems. It aims to provide numerical simulations of a wide variety of quantum
2731mechanical problems, including those with Hamiltonians and/or collapse operators
2732with arbitrary time-dependence, commonly found in a wide range of physics
2733applications.")
2734 (license license:bsd-3)))
2735
2736(define-public python-ruffus
2737 (package
2738 (name "python-ruffus")
2739 (version "2.8.4")
2740 (source
2741 (origin
2742 (method url-fetch)
2743 (uri (pypi-uri "ruffus" version))
2744 (sha256
2745 (base32
2746 "1ai673k1s94s8b6pyxai8mk17p6zvvyi87rl236fs6ls8mpdklvc"))))
2747 (build-system python-build-system)
2748 (arguments
2749 `(#:phases
2750 (modify-phases %standard-phases
2751 (delete 'check)
2752 (add-after 'install 'check
2753 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
2754 (when tests?
2755 (add-installed-pythonpath inputs outputs)
2756 (with-directory-excursion "ruffus/test"
2757 (invoke "bash" "run_all_unit_tests3.cmd"))))))))
2758 (native-inputs
2759 (list python-pytest))
2760 (home-page "http://www.ruffus.org.uk")
2761 (synopsis "Light-weight computational pipeline management")
2762 (description
2763 "Ruffus is designed to allow scientific and other analyses to be
2764automated with the minimum of fuss and the least effort.")
2765 (license license:expat)))
2766
2767(define-public python-salib
2768 (package
2769 (name "python-salib")
2770 (version "1.4.7")
2771 (source (origin
2772 (method git-fetch)
2773 (uri (git-reference
2774 (url "https://github.com/SALib/SALib")
2775 (commit (string-append "v" version))))
2776 (file-name (git-file-name name version))
2777 (sha256
2778 (base32
2779 "18xfyzircsx2q2lmfc9lxb6xvkxicnc83qzghd7df1jsprr5ymch"))))
2780 (build-system pyproject-build-system)
2781 (propagated-inputs (list python-matplotlib
2782 python-multiprocess
2783 python-numpy
2784 python-pandas
2785 python-scipy))
2786 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
2787 (home-page "https://salib.readthedocs.io/en/latest/")
2788 (synopsis "Tools for global sensitivity analysis")
2789 (description "SALib provides tools for global sensitivity analysis. It
2790contains Sobol', Morris, FAST, DGSM, PAWN, HDMR, Moment Independent and
2791fractional factorial methods.")
2792 (license license:expat)))
2793
2794(define-public python-scikit-allel
2795 (package
2796 (name "python-scikit-allel")
2797 (version "1.3.13")
2798 (source
2799 (origin
2800 (method url-fetch)
2801 (uri (pypi-uri "scikit_allel" version))
2802 (sha256
2803 (base32 "0d9yadzhsjjqkh6rz273f53iwczk0c7pv9dajzcrmfnk036b8f4s"))))
2804 (build-system pyproject-build-system)
2805 (arguments
2806 (list
2807 #:test-flags
2808 '(list "-k"
2809 (string-append
2810 ;; AttributeError: 'Dataset' object has no attribute 'asstr'
2811 "not test_vcf_to_hdf5"
2812 " and not test_vcf_to_hdf5_exclude"
2813 " and not test_vcf_to_hdf5_rename"
2814 " and not test_vcf_to_hdf5_group"
2815 " and not test_vcf_to_hdf5_ann"
2816 ;; Does not work with recent hmmlearn
2817 " and not test_roh_mhmm_0pct"
2818 " and not test_roh_mhmm_100pct"))
2819 #:phases
2820 '(modify-phases %standard-phases
2821 (add-before 'check 'build-ext
2822 (lambda _
2823 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
2824 (propagated-inputs
2825 (list python-dask python-numpy))
2826 (native-inputs
2827 (list htslib
2828 python-cython
2829 python-h5py
2830 python-hmmlearn
2831 python-numexpr
2832 python-numpy
2833 python-pytest
2834 python-setuptools
2835 python-setuptools-scm
2836 python-wheel
2837 python-zarr))
2838 (home-page "https://github.com/cggh/scikit-allel")
2839 (synopsis "Explore and analyze genetic variation data")
2840 (description
2841 "This package provides utilities for exploratory analysis of large scale
2842genetic variation data.")
2843 (license license:expat)))
2844
2845(define-public python-scikit-build-core
2846 (package
2847 (name "python-scikit-build-core")
2848 (version "0.11.2")
2849 (source
2850 (origin
2851 (method url-fetch)
2852 (uri (pypi-uri "scikit_build_core" version))
2853 (sha256
2854 (base32 "0baaava7jvc69r5j803vjxvf2cnx0f3gjhqalipp7l4d1cgwg3vp"))))
2855 (build-system pyproject-build-system)
2856 ;; Tests are aborted with the admonition: "setup.py install is
2857 ;; deprecated. Use build and pip and other standards-based tools."
2858 (arguments (list #:tests? #false))
2859 (propagated-inputs (list python-exceptiongroup
2860 python-importlib-metadata
2861 python-importlib-resources
2862 python-packaging
2863 python-pathspec
2864 python-tomli
2865 python-typing-extensions))
2866 (native-inputs (list pybind11
2867 python-cattrs
2868 python-fastjsonschema
2869 python-hatch-fancy-pypi-readme
2870 python-hatch-vcs
2871 python-hatchling
2872 python-numpy
2873 python-pip
2874 python-pypa-build
2875 python-pytest
2876 python-pytest-subprocess
2877 python-rich
2878 python-setuptools
2879 python-setuptools-scm
2880 python-virtualenv
2881 python-wheel))
2882 (home-page "https://github.com/scikit-build/scikit-build-core")
2883 (synopsis "Build backend for CMake based projects")
2884 (description "Scikit-build-core is a build backend for Python that uses
2885CMake to build extension modules. It has a simple yet powerful static
2886configuration system in pyproject.toml, and supports almost unlimited
2887flexibility via CMake. It was initially developed to support the demanding
2888needs of scientific users, but can build any sort of package that uses
2889CMake.")
2890 (license license:asl2.0)))
2891
2892(define-public python-scikit-fem
2893 (package
2894 (name "python-scikit-fem")
2895 (version "11.0.0")
2896 (source
2897 (origin
2898 (method git-fetch) ; no tests in PyPI
2899 (uri (git-reference
2900 (url "https://github.com/kinnala/scikit-fem")
2901 (commit version)))
2902 (file-name (git-file-name name version))
2903 (sha256
2904 (base32 "13zh57raz2qcdfhsvpdlyiba5q0s0lh5b3gmsmh4cfrncrkdh6mh"))))
2905 (build-system pyproject-build-system)
2906 (arguments
2907 (list
2908 #:test-flags #~(list
2909 ;; Tests require Jax.
2910 "--ignore=tests/test_autodiff.py"
2911 "--ignore=tests/test_examples.py")))
2912 (native-inputs
2913 (list python-autograd
2914 python-pyamg
2915 ;; python-jax ; not packed yet
2916 python-pytest
2917 python-shapely
2918 python-setuptools))
2919 (propagated-inputs
2920 (list python-meshio
2921 python-numpy
2922 python-matplotlib
2923 python-scipy))
2924 (home-page "https://scikit-fem.readthedocs.io/en/latest/")
2925 (synopsis "Library for performing finite element assembly")
2926 (description
2927 "@code{scikit-fem} is a library for performing finite element assembly.
2928Its main purpose is the transformation of bilinear forms into sparse matrices
2929and linear forms into vectors.")
2930 (license license:bsd-3)))
2931
2932(define-public python-scikit-fuzzy
2933 (package
2934 (name "python-scikit-fuzzy")
2935 (version "0.5.0")
2936 (source
2937 (origin
2938 (method url-fetch)
2939 (uri (pypi-uri "scikit_fuzzy" version))
2940 (sha256
2941 (base32 "0zsfyd8cpd2l82fwh3smxbwhb3bkqwlq17cbav53axma4c2k9r9f"))))
2942 (build-system pyproject-build-system)
2943 (arguments
2944 (list
2945 #:test-flags #~(list "--pyargs" "skfuzzy")))
2946 (native-inputs
2947 (list python-pytest python-setuptools python-wheel))
2948 (propagated-inputs
2949 (list python-networkx python-numpy python-scipy))
2950 (home-page "https://github.com/scikit-fuzzy/scikit-fuzzy")
2951 (synopsis "Fuzzy logic toolkit for SciPy")
2952 (description
2953 "This package implements many useful tools for projects involving fuzzy
2954logic, also known as grey logic.")
2955 (license license:bsd-3)))
2956
2957(define-public python-scikit-image
2958 (package
2959 (name "python-scikit-image")
2960 (version "0.23.2")
2961 (source
2962 (origin
2963 (method git-fetch)
2964 (uri (git-reference
2965 (url "https://github.com/scikit-image/scikit-image")
2966 (commit (string-append "v" version))))
2967 (file-name (git-file-name name version))
2968 (sha256
2969 (base32 "1bc8i57sjk44vd9k1ilr6fpvfq1zbq9yfi22lz22k26mzrlisym3"))))
2970 (build-system pyproject-build-system)
2971 (arguments
2972 (list
2973 #:test-flags
2974 ;; To make sure we test compiled and installed module.
2975 #~(list (string-append #$output "/lib/python"
2976 #$(version-major+minor (package-version python))
2977 "/site-packages")
2978 "--pyargs" "skimage"
2979 ;; Disable flaky test
2980 "-k" (string-join
2981 (list "not test_ellipse_parameter_stability"
2982 ;; ValueError: Cannot call len() on object with unknown chunk size.
2983 "test_thresholds_dask_compatibility[threshold_triangle-41-43]")
2984 " and not "))
2985 #:phases
2986 #~(modify-phases %standard-phases
2987 (add-before 'build 'change-home-dir
2988 (lambda _
2989 ;; Change from /homeless-shelter to /tmp for write permission.
2990 (setenv "HOME" "/tmp")))
2991 (add-before 'check 'pre-check
2992 (lambda _
2993 ;; To prevent loading tests twise.
2994 ;; 16277 passed, 240 skipped, 4 deselected
2995 (delete-file-recursively "skimage")))
2996 (add-before 'check 'post-check
2997 (lambda _
2998 (for-each delete-file-recursively
2999 (find-files #$output "__pycache__" #:directories? #t)))))))
3000 ;; See requirements/ for the list of build and run time requirements.
3001 ;; NOTE: scikit-image has an optional dependency on python-pooch, however
3002 ;; propagating it would enable many more tests that require online data.
3003 (propagated-inputs
3004 (list python-cloudpickle
3005 python-dask
3006 python-imageio
3007 python-lazy-loader
3008 python-matplotlib
3009 python-networkx
3010 python-numpy
3011 python-pillow
3012 python-pythran
3013 python-pywavelets
3014 python-scipy
3015 python-tifffile))
3016 (native-inputs
3017 (list meson-python
3018 python-cython
3019 python-numpydoc
3020 python-packaging
3021 python-pytest
3022 python-pytest-localserver
3023 python-wheel))
3024 (home-page "https://scikit-image.org/")
3025 (synopsis "Image processing in Python")
3026 (description
3027 "Scikit-image is a collection of algorithms for image processing.")
3028 (license license:bsd-3)))
3029
3030;; TODO: Port simplified test steps to python-scikit on the next refresh round.
3031(define-public python-scikit-image-next
3032 (package
3033 (inherit python-scikit-image)
3034 (name "python-scikit-image")
3035 (version "0.25.2")
3036 (source
3037 (origin
3038 (method git-fetch)
3039 (uri (git-reference
3040 (url "https://github.com/scikit-image/scikit-image")
3041 (commit (string-append "v" version))))
3042 (file-name (git-file-name name version))
3043 (sha256
3044 (base32 "1cr3ki47z9g8kylnff1nrmv5fr3lrgmibl41q0v98pldghnslxdv"))))
3045 (arguments
3046 (list
3047 ;; tests: 8489 passed, 128 skipped
3048 #:test-flags
3049 #~(list "--ignore=benchmarks"
3050 "--pyargs" "skimage")
3051 #:phases
3052 #~(modify-phases %standard-phases
3053 (add-before 'check 'remove-local-skimage
3054 (lambda _
3055 ;; This would otherwise interfere with finding the installed
3056 ;; skimage when running tests.
3057 (delete-file-recursively "skimage")))
3058 (add-before 'check 'post-check
3059 (lambda _
3060 (for-each delete-file-recursively
3061 (find-files #$output "__pycache__" #:directories? #t)))))))))
3062
3063(define-public python-scikit-misc
3064 (package
3065 (name "python-scikit-misc")
3066 (version "0.5.1")
3067 (source
3068 (origin
3069 (method url-fetch)
3070 (uri (pypi-uri "scikit_misc" version))
3071 (sha256
3072 (base32 "18sj7qa3kk4pqh3rzg2c64lf03nciv9cf985yh1h2kpqqndgdhf5"))))
3073 (build-system pyproject-build-system)
3074 (arguments
3075 (list
3076 #:test-flags
3077 '(list "--pyargs" "skmisc")
3078 #:phases
3079 #~(modify-phases %standard-phases
3080 (add-after 'unpack 'fix-pytest-config
3081 (lambda _
3082 ;; Drop test coverage requirements.
3083 (substitute* "pyproject.toml"
3084 (("--cov(-[^ ]*)?=[^ ]*") ""))))
3085 (add-after 'unpack 'fix-version
3086 (lambda _
3087 (call-with-output-file "skmisc/_version.py"
3088 (lambda (port)
3089 (display (string-append "__version__ = \"" #$version "\"")
3090 port)))
3091 (substitute* "meson.build"
3092 (("^ version: run_command.*")
3093 (string-append " version: '" #$version "',\n")))
3094 (substitute* "pyproject.toml"
3095 (("dynamic = \\['version'\\]")
3096 (string-append "version = \"" #$version "\""))))))))
3097 (propagated-inputs (list meson-python
3098 python-numpy
3099 python-numpydoc
3100 python-spin))
3101 (native-inputs (list gfortran
3102 pkg-config
3103 python-cython
3104 python-meson-python
3105 python-numpy
3106 python-pytest
3107 python-setuptools
3108 python-wheel))
3109 (home-page "https://has2k1.github.io/scikit-misc/stable")
3110 (synopsis "Miscellaneous tools for scientific computing.")
3111 (description "This package provides miscellaneous tools for data analysis
3112and scientific computing.")
3113 (license license:bsd-3)))
3114
3115(define-public python-scikit-opt
3116 (package
3117 (name "python-scikit-opt")
3118 (version "0.6.6")
3119 (source
3120 (origin
3121 (method url-fetch)
3122 (uri (pypi-uri "scikit-opt" version))
3123 (sha256
3124 (base32 "0ycqizgsj7q57asc1bphzhf1fx9zqn0vx5rli7q541bas64hfqiy"))))
3125 (build-system pyproject-build-system)
3126 (native-inputs
3127 (list python-pytest
3128 python-setuptools))
3129 (propagated-inputs
3130 (list python-numpy
3131 python-pytorch
3132 python-scipy))
3133 (home-page "https://github.com/guofei9987/scikit-opt")
3134 (synopsis "Swarm intelligence algorithms in Python")
3135 (description
3136 "Scikit-opt (or sko) is a Python module implementing @dfn{swarm
3137intelligence} algorithms: genetic algorithm, particle swarm optimization,
3138simulated annealing, ant colony algorithm, immune algorithm, artificial fish
3139swarm algorithm.")
3140 (license license:expat)))
3141
3142(define-public python-scikit-optimize
3143 ;; XXX: The project might be not maintained, see
3144 ;; <https://github.com/holgern/scikit-optimize/issues/6>.
3145 (package
3146 (name "python-scikit-optimize")
3147 (version "0.10.2")
3148 (source
3149 (origin
3150 (method git-fetch)
3151 (uri (git-reference
3152 (url "https://github.com/holgern/scikit-optimize")
3153 (commit (string-append "v" version))))
3154 (file-name (git-file-name name version))
3155 (sha256
3156 (base32 "0pc6avzxz8l32km5jvv3maih0a5x2akxybvxl2hdg04qz2l0kz8b"))))
3157 (build-system pyproject-build-system)
3158 (arguments
3159 (list
3160 ;; tests: 398 passed, 1 skipped, 179 warnings
3161 #:test-flags
3162 #~(list "--numprocesses" (number->string (parallel-job-count))
3163 "-k" (string-join
3164 ;; XXX: As the project is not actively maintained, review
3165 ;; failing test when a fresh release is available.
3166 (list "not test_acq_optimizer"
3167 "test_acq_optimizer_with_time_api"
3168 "test_categorical_init_vals"
3169 "test_consistent_x_iter_dimensions"
3170 "test_early_stopping_delta_x"
3171 "test_early_stopping_delta_x_empty_result_object"
3172 "test_early_stopping_delta_y"
3173 "test_early_stopping_delta_y_with_x0"
3174 "test_exhaust_initial_calls"
3175 "test_fixed_random_states"
3176 "test_init_points_and_models"
3177 "test_init_vals"
3178 "test_init_vals_and_models"
3179 "test_minimizer_api"
3180 "test_minimizer_api_random_only"
3181 "test_minimizer_space_constraint"
3182 "test_minimizer_with_space"
3183 "test_mixed_spaces"
3184 "test_optimizer_base_estimator_string_smoke"
3185 "test_optimizer_base_estimator_string_smoke_njobs"
3186 "test_per_second_api"
3187 "test_repeated_x"
3188 "test_tree_based_minimize")
3189 " and not "))))
3190 (native-inputs
3191 (list python-pytest
3192 python-pytest-xdist
3193 python-setuptools))
3194 (propagated-inputs
3195 (list python-joblib
3196 python-matplotlib
3197 python-numpy
3198 python-pyaml
3199 python-scikit-learn
3200 python-scipy))
3201 (home-page "https://scikit-optimize.github.io/")
3202 (synopsis "Sequential model-based optimization toolbox")
3203 (description
3204 "Scikit-Optimize, or @code{skopt}, is a simple and efficient library to
3205minimize (very) expensive and noisy black-box functions. It implements
3206several methods for sequential model-based optimization. @code{skopt} aims to
3207be accessible and easy to use in many contexts.")
3208 (license license:bsd-3)))
3209
3210(define-public python-scikit-surprise
3211 (package
3212 (name "python-scikit-surprise")
3213 (version "1.1.4")
3214 (source
3215 (origin
3216 (method git-fetch)
3217 (uri (git-reference
3218 (url "https://github.com/NicolasHug/Surprise")
3219 (commit (string-append "v" version))))
3220 (file-name (git-file-name name version))
3221 (sha256
3222 (base32 "15ckx2i41vs21sa3yqyj12zr0h4zrcdf3lrwcy2c1cq2bjq7mnvz"))))
3223 (build-system pyproject-build-system)
3224 (arguments
3225 (list
3226 #:phases
3227 #~(modify-phases %standard-phases
3228 (add-before 'check 'set-home
3229 (lambda _
3230 ;; Change from /homeless-shelter to /tmp for write
3231 ;; permission.
3232 (setenv "HOME" "/tmp"))))))
3233 (native-inputs
3234 (list python-cython
3235 python-pandas
3236 python-pytest
3237 python-setuptools
3238 python-wheel))
3239 (propagated-inputs
3240 (list python-joblib
3241 python-numpy
3242 python-scikit-learn))
3243 (home-page "https://surpriselib.com/")
3244 (synopsis "Recommender system library for Scikit-learn")
3245 (description
3246 "This package provides a Python library for building and analyzing
3247recommender systems that deal with explicit rating data. It was designed with
3248the following purposes in mind:
3249@itemize
3250@item Provide tools to handle downloaded or user-provided datasets.
3251@item Provide ready-to-use prediction algorithms and similarity measures.
3252@item Provide a base for creating custom algorithms.
3253@item Provide tools to evaluate, analyse and compare algorithm performance.
3254@item Provide documentation with precise details regarding library algorithms.
3255@end itemize")
3256 (license license:bsd-3)))
3257
3258(define-public python-scikit-survival
3259 (let ((revision "0")
3260 ;; We need a later commit for support of a more recent sklearn and
3261 ;; NumPy 2.
3262 (commit "bc4a8914e8337c3be1b98371a3c26382696215a9"))
3263 (package
3264 (name "python-scikit-survival")
3265 (version (git-version "0.25.0" revision commit))
3266 (source
3267 (origin
3268 (method git-fetch)
3269 (uri (git-reference
3270 (url "https://github.com/sebp/scikit-survival")
3271 (commit commit)
3272 ;; This package contains a copy of Eigen. It would be good to
3273 ;; figure out how to use our own Eigen package.
3274 (recursive? #true)))
3275 (file-name (git-file-name name version))
3276 (sha256
3277 (base32 "001w73sz55vszp18h25dha74r34bbfzl02yh4d6zbli9zvr36hy4"))))
3278 (build-system pyproject-build-system)
3279 (arguments
3280 (list
3281 #:phases
3282 #~(modify-phases %standard-phases
3283 (add-before 'build 'set-version
3284 (lambda _
3285 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
3286 #$(version-major+minor version)))))))
3287 (propagated-inputs
3288 (list python-ecos
3289 python-joblib
3290 python-numexpr
3291 python-numpy
3292 python-osqp
3293 python-pandas
3294 python-scikit-learn
3295 python-scipy))
3296 (native-inputs
3297 (list python-cython
3298 python-packaging
3299 python-pytest
3300 python-setuptools
3301 python-setuptools-scm))
3302 (home-page "https://github.com/sebp/scikit-survival")
3303 (synopsis "Survival analysis built on top of scikit-learn")
3304 (description "Scikit-survival is a Python module for survival analysis
3305built on top of scikit-learn. It allows doing survival analysis while
3306utilizing the power of scikit-learn, e.g., for pre-processing or doing
3307cross-validation.")
3308 (license license:gpl3+))))
3309
3310(define-public python-scipy
3311 (package
3312 (name "python-scipy")
3313 (version "1.12.0")
3314 (source
3315 (origin
3316 (method url-fetch)
3317 (uri (pypi-uri "scipy" version))
3318 (sha256
3319 (base32 "18rn15wg3lp58z204fbjjhy0h79c53yg3c4qqs9h3liniamspxab"))))
3320 (build-system pyproject-build-system)
3321 (arguments
3322 (list
3323 #:phases
3324 #~(modify-phases %standard-phases
3325 #$@(if (target-x86-32?)
3326 #~((add-after 'unpack 'apply-i686-patch
3327 (lambda _
3328 (let ((patch-file
3329 #$(local-file
3330 (search-patch "python-scipy-i686.patch"))))
3331 (invoke "patch" "--force" "-p1" "-i"
3332 patch-file)))))
3333 #~())
3334 (replace 'check
3335 (lambda* (#:key tests? #:allow-other-keys)
3336 (when tests?
3337 ;; Step out of the source directory to avoid interference.
3338 (with-directory-excursion "/tmp"
3339 (invoke "python" "-c"
3340 (string-append
3341 "import scipy; scipy.test('fast', parallel="
3342 (number->string (parallel-job-count))
3343 ", verbose=2)")))))))))
3344 (native-inputs
3345 (list gfortran
3346 ;; XXX: Adding gfortran shadows GCC headers, causing a compilation
3347 ;; failure. Somehow also providing GCC works around it ...
3348 gcc
3349 meson-python
3350 pkg-config
3351 python-click
3352 python-cython-0
3353 python-doit
3354 python-mpmath
3355 python-numpydoc
3356 python-pooch
3357 python-pycodestyle
3358 python-pydevtool
3359 python-pytest
3360 python-pytest-timeout
3361 python-pytest-xdist
3362 python-pythran
3363 python-rich-click
3364 python-threadpoolctl
3365 python-typing-extensions))
3366 (inputs
3367 (list openblas
3368 pybind11-2.10))
3369 (propagated-inputs
3370 (list python-numpy))
3371 (home-page "https://scipy.org/")
3372 (synopsis "The Scipy library provides efficient numerical routines")
3373 (description "The SciPy library is one of the core packages that make up
3374the SciPy stack. It provides many user-friendly and efficient numerical
3375routines such as routines for numerical integration and optimization.")
3376 (license license:bsd-3)))
3377
3378(define-public python-simple-pid
3379 (package
3380 (name "python-simple-pid")
3381 (version "2.0.1")
3382 (source (origin
3383 (method url-fetch)
3384 (uri (pypi-uri "simple_pid" version))
3385 (sha256
3386 (base32
3387 "17p9bgka5yv5lbnbk374yjccrlizm572wv3xb479072lahf7cwap"))))
3388 (build-system pyproject-build-system)
3389 (native-inputs
3390 (list python-pytest python-setuptools python-wheel))
3391 (home-page "https://github.com/m-lundberg/simple-pid")
3392 (synopsis "Easy to use PID controller")
3393 (description "This package provides a simple and easy-to-use @acronym{PID,
3394proportional-integral-derivative} controller.")
3395 (license license:expat)))
3396
3397(define-public python-snakemake-interface-common
3398 (package
3399 (name "python-snakemake-interface-common")
3400 (version "1.17.4")
3401 (source
3402 (origin
3403 (method git-fetch)
3404 (uri (git-reference
3405 (url "https://github.com/snakemake/snakemake-interface-common")
3406 (commit (string-append "v" version))))
3407 (file-name (git-file-name name version))
3408 (sha256
3409 (base32 "19fyqs048zdvrmq5sdayzch850kwsyv2x6xn57cjjzcm4zpjrh9w"))))
3410 (build-system pyproject-build-system)
3411 (arguments
3412 (list #:phases
3413 #~(modify-phases %standard-phases
3414 (replace 'check
3415 (lambda* (#:key tests? #:allow-other-keys)
3416 (when tests?
3417 (invoke "python3" "tests/tests.py")))))))
3418 (native-inputs (list python-poetry-core python-pytest))
3419 (propagated-inputs (list python-argparse-dataclass python-configargparse))
3420 (home-page "https://github.com/snakemake/snakemake-interface-common")
3421 (synopsis "Common functions and classes for Snakemake and its plugins")
3422 (description "This package provides common functions and classes
3423for Snakemake and its plugins.")
3424 (license license:expat)))
3425
3426(define-public python-snakemake-interface-executor-plugins
3427 (package
3428 (name "python-snakemake-interface-executor-plugins")
3429 (version "9.3.3")
3430 (source
3431 (origin
3432 (method git-fetch)
3433 (uri (git-reference
3434 (url (string-append "https://github.com/snakemake/"
3435 "snakemake-interface-executor-plugins"))
3436 (commit (string-append "v" version))))
3437 (file-name (git-file-name name version))
3438 (sha256
3439 (base32 "1kjjcgkk1rbavb687x5ayw35ayhsnhpg9262k317x911wqpsj2fm"))))
3440 (build-system pyproject-build-system)
3441 (arguments
3442 (list
3443 #:phases
3444 #~(modify-phases %standard-phases
3445 (replace 'check
3446 (lambda* (#:key tests? #:allow-other-keys)
3447 (when tests?
3448 (invoke "python3" "tests/tests.py")))))))
3449 (propagated-inputs (list python-argparse-dataclass
3450 python-snakemake-interface-common
3451 python-throttler))
3452 (native-inputs (list python-poetry-core python-pytest))
3453 (home-page (string-append "https://github.com/snakemake/"
3454 "python-snakemake-interface-executor-plugins"))
3455 (synopsis "Interface for Snakemake executor plugins")
3456 (description
3457 "This package provides a stable interface for interactions between Snakemake and
3458its executor plugins.")
3459 (license license:expat)))
3460
3461(define-public python-snakemake-interface-report-plugins
3462 (package
3463 (name "python-snakemake-interface-report-plugins")
3464 (version "1.1.0")
3465 (source
3466 (origin
3467 (method git-fetch)
3468 (uri (git-reference
3469 (url (string-append "https://github.com/snakemake/"
3470 "snakemake-interface-report-plugins"))
3471 (commit (string-append "v" version))))
3472 (file-name (git-file-name name version))
3473 (sha256
3474 (base32 "0i6z9vk6nv2m3jsym0glrb7h9isdlfza2yq14vbqcslybdi9ykfa"))))
3475 (build-system pyproject-build-system)
3476 (arguments
3477 (list
3478 #:tests? #f ;circular dependency on snakemake
3479 #:phases
3480 #~(modify-phases %standard-phases
3481 (replace 'check
3482 (lambda* (#:key tests? #:allow-other-keys)
3483 (when tests?
3484 (invoke "python3" "tests/tests.py")))))))
3485 (propagated-inputs (list python-snakemake-interface-common python-pytest))
3486 (native-inputs (list python-poetry-core))
3487 (home-page (string-append "https://github.com/snakemake/"
3488 "python-snakemake-interface-report-plugins"))
3489 (synopsis "Interface for Snakemake report plugins")
3490 (description "This package provides a stable interface for interactions
3491between Snakemake and its report plugins.")
3492 (license license:expat)))
3493
3494(define-public python-snakemake-interface-software-deployment-plugins
3495 (package
3496 (name "python-snakemake-interface-software-deployment-plugins")
3497 (version "0.6.1")
3498 (source
3499 (origin
3500 (method git-fetch)
3501 (uri (git-reference
3502 (url (string-append "https://github.com/snakemake/"
3503 "snakemake-interface-software-deployment-plugins"))
3504 (commit (string-append "v" version))))
3505 (file-name (git-file-name name version))
3506 (sha256
3507 (base32 "0b4kkznfyfck9f92pkimhyl13ljisfn67rsilm1a5inq2ywpmxba"))))
3508 (build-system pyproject-build-system)
3509 (arguments
3510 (list
3511 #:phases
3512 #~(modify-phases %standard-phases
3513 (replace 'check
3514 (lambda* (#:key tests? #:allow-other-keys)
3515 (when tests?
3516 (invoke "python3" "tests/tests.py")))))))
3517 (propagated-inputs (list python-argparse-dataclass
3518 python-snakemake-interface-common))
3519 (native-inputs (list python-poetry-core))
3520 (home-page (string-append "https://github.com/snakemake/"
3521 "snakemake-interface-software-deployment-plugins"))
3522 (synopsis "Interface for Snakemake software deployment plugins")
3523 (description
3524 "This package provides a stable interface for interactions between Snakemake and
3525its software deployment plugins.")
3526 (license license:expat)))
3527
3528(define-public python-snakemake-interface-storage-plugins
3529 (package
3530 (name "python-snakemake-interface-storage-plugins")
3531 (version "3.3.0")
3532 (source
3533 (origin
3534 (method git-fetch)
3535 (uri (git-reference
3536 (url (string-append "https://github.com/snakemake/"
3537 "snakemake-interface-storage-plugins"))
3538 (commit (string-append "v" version))))
3539 (file-name (git-file-name name version))
3540 (sha256
3541 (base32 "05n5xgwagb01nyzi8xfvp0nvdfl24lxidgksm7k86p68n1rijd5a"))))
3542 (build-system pyproject-build-system)
3543 (arguments
3544 (list
3545 #:tests? #f ;circular dependency on snakemake
3546 #:phases
3547 #~(modify-phases %standard-phases
3548 (replace 'check
3549 (lambda* (#:key tests? #:allow-other-keys)
3550 (when tests?
3551 (invoke "python3" "tests/tests.py")))))))
3552 (propagated-inputs (list python-reretry python-snakemake-interface-common
3553 python-throttler python-wrapt))
3554 (native-inputs (list python-poetry-core python-pytest))
3555 (home-page (string-append "https://github.com/snakemake/"
3556 "snakemake-interface-storage-plugins"))
3557 (synopsis "Interface for Snakemake storage plugins")
3558 (description
3559 "This package provides a stable interface for interactions between
3560Snakemake and its storage plugins.")
3561 (license license:expat)))
3562
3563(define-public python-snakemake-executor-plugin-slurm-jobstep
3564 (package
3565 (name "python-snakemake-executor-plugin-slurm-jobstep")
3566 (version "0.3.0")
3567 (home-page "https://github.com/snakemake/snakemake-executor-plugin-slurm-jobstep")
3568 (source
3569 (origin
3570 (method git-fetch)
3571 (uri (git-reference
3572 (url home-page)
3573 (commit (string-append "v" version))))
3574 (file-name (git-file-name name version))
3575 (sha256
3576 (base32 "0ly15ywmbfcm5z7jy7dxiidpw3immsdd2k80vrm4pza721irxcar"))))
3577 (build-system pyproject-build-system)
3578 (arguments
3579 (list #:phases
3580 #~(modify-phases %standard-phases
3581 (replace 'check
3582 (lambda* (#:key tests? #:allow-other-keys)
3583 (when tests?
3584 (invoke "python3" "tests/tests.py")))))))
3585 (native-inputs (list python-poetry-core
3586 snakemake))
3587 (synopsis "Snakemake executor plugin: slurm-jobstep")
3588 (description "A Snakemake executor plugin for running srun jobs inside of
3589SLURM jobs (meant for internal use by python-snakemake-executor-plugin-slurm).")
3590 (license license:expat)))
3591
3592(define-public python-snakemake-executor-plugin-slurm
3593 (package
3594 (name "python-snakemake-executor-plugin-slurm")
3595 (version "1.7.0")
3596 (home-page "https://github.com/snakemake/snakemake-executor-plugin-slurm/")
3597 (source
3598 (origin
3599 (method git-fetch)
3600 (uri (git-reference
3601 (url home-page)
3602 (commit (string-append "v" version))))
3603 (file-name (git-file-name name version))
3604 (sha256
3605 (base32 "0x7ghrkvmxqbcjl69hxp5axa1av3s0mdc0i9xjg8qjnd3hgd82r3"))))
3606 (build-system pyproject-build-system)
3607 (arguments
3608 (list #:phases
3609 #~(modify-phases %standard-phases
3610 (replace 'check
3611 (lambda* (#:key tests? #:allow-other-keys)
3612 (when tests?
3613 (invoke "python3" "tests/tests.py")))))))
3614 (native-inputs (list python-pandas
3615 python-poetry-core
3616 python-pytest
3617 python-snakemake-executor-plugin-slurm-jobstep
3618 snakemake))
3619 (synopsis "Snakemake executor plugin: slurm")
3620 (description "A Snakemake executor plugin for running SLURM jobs.")
3621 (license license:expat)))
3622
3623(define-public python-sparse
3624 (package
3625 (name "python-sparse")
3626 (version "0.15.5")
3627 (source
3628 (origin
3629 (method url-fetch)
3630 (uri (pypi-uri "sparse" version))
3631 (sha256
3632 (base32
3633 "0rp29gp82qwwkq210pzh2qmlqhi2007nb7p7nwqmrkgmjq6cwxjc"))))
3634 (build-system pyproject-build-system)
3635 (propagated-inputs
3636 (list python-numba python-numpy python-scipy))
3637 (native-inputs
3638 (list python-dask
3639 python-pytest
3640 python-pytest-cov
3641 python-setuptools
3642 python-setuptools-scm
3643 python-wheel))
3644 (home-page "https://github.com/pydata/sparse/")
3645 (synopsis "Library for multi-dimensional sparse arrays")
3646 (description
3647 "This package implements sparse arrays of arbitrary dimension on top of
3648@code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
3649of the elements are zero. @code{python-sparse} generalizes the
3650@code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
3651extends beyond just rows and columns to an arbitrary number of dimensions.
3652Additionally, this project maintains compatibility with the
3653@code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
3654used in @code{scipy.sparse}. These differences make this project useful in
3655certain situations where @code{scipy.sparse} matrices are not well suited, but
3656it should not be considered a full replacement. It lacks layouts that are not
3657easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
3658depends on @code{scipy.sparse} for some computations.")
3659 (license license:bsd-3)))
3660
3661(define-public python-tdda
3662 (package
3663 (name "python-tdda")
3664 (version "2.2.17")
3665 (source
3666 (origin
3667 (method url-fetch)
3668 (uri (pypi-uri "tdda" version))
3669 (sha256
3670 (base32 "1l2ph60m20ii4ljgd81wccpp5p8p2m81irr97k7850s2l1qnikcw"))))
3671 (build-system pyproject-build-system)
3672 (arguments
3673 (list
3674 #:test-flags
3675 #~(list
3676 ;; One test fails with error: AssertionError: False is not true : 5
3677 ;; lines are different, starting at line 1
3678 "--deselect=tdda/test_tdda.py::TestOne::test_ddiff_values_output")
3679 #:phases
3680 #~(modify-phases %standard-phases
3681 ;; "datetime.UTC" is not availalbe in Python 3.10 but in
3682 ;; 3.11 it's present
3683 ;; <https://docs.python.org/3/library/datetime.html#datetime.UTC>.
3684 (add-after 'unpack 'fix-Python3.11-datetime.UTC
3685 (lambda _
3686 (substitute* (find-files "." "\\.py")
3687 (("datetime.UTC")
3688 "datetime.timezone.utc")))))))
3689 (native-inputs
3690 (list python-numpy
3691 python-chardet
3692 python-pandas
3693 python-pyarrow
3694 python-pytest
3695 python-rich
3696 python-setuptools
3697 python-wheel))
3698 (home-page "https://www.stochasticsolutions.com")
3699 (synopsis "Test-driven data analysis library for Python")
3700 (description
3701 "The TDDA Python module provides command-line and Python API support
3702for the overall process of data analysis, through tools that perform
3703reference testing, constraint discovery for data, automatic inference
3704of regular expressions from text data and automatic test generation.")
3705 (license license:expat))) ; MIT License
3706
3707(define-public python-traittypes
3708 (package
3709 (name "python-traittypes")
3710 (version "0.2.1")
3711 (source
3712 (origin
3713 (method url-fetch)
3714 (uri (pypi-uri "traittypes" version))
3715 (sha256
3716 (base32 "1mlv93irdrgxrhnhq3ksi9585d55bpi4mv9dha4p8gkkjiia4vxy"))))
3717 (build-system pyproject-build-system)
3718 (arguments
3719 (list
3720 ;; This one test fails because it doesn't raise an expected exception.
3721 #:test-flags '(list "-k" "not test_bad_values")
3722 #:phases
3723 '(modify-phases %standard-phases
3724 (add-after 'unpack 'numpy-compatibility
3725 (lambda _
3726 (substitute* "traittypes/tests/test_traittypes.py"
3727 (("np\\.int") "int")))))))
3728 (propagated-inputs (list python-traitlets))
3729 (native-inputs
3730 (list python-numpy
3731 python-pandas
3732 python-nose
3733 python-pytest
3734 python-setuptools
3735 python-xarray
3736 python-wheel))
3737 (home-page "https://github.com/jupyter-widgets/traittypes")
3738 (synopsis "Trait types for NumPy, SciPy and friends")
3739 (description "The goal of this package is to provide a reference
3740implementation of trait types for common data structures used in the scipy
3741stack such as numpy arrays or pandas and xarray data structures. These are
3742out of the scope of the main traitlets project but are a common requirement to
3743build applications with traitlets in combination with the scipy stack.")
3744 (license license:bsd-3)))
3745
3746(define-public python-trimesh
3747 (package
3748 (name "python-trimesh")
3749 (version "4.5.3")
3750 (source
3751 (origin
3752 (method git-fetch) ; no tests in PyPI
3753 (uri (git-reference
3754 (url "https://github.com/mikedh/trimesh")
3755 (commit version)))
3756 (file-name (git-file-name name version))
3757 (sha256
3758 (base32 "17fyapp8nffnnf95bmcvllvg41fjlpvlv6qndbm048hnyayixxld"))))
3759 (build-system pyproject-build-system)
3760 (arguments
3761 (list
3762 #:test-flags
3763 ;; XXX: When more optional modules are available review
3764 ;; disabled tests once again.
3765 ;;
3766 ;; Disable tests requiring optional, not packed modules.
3767 #~(list "-k" (string-join
3768 (list "not test_bezier_example"
3769 "test_discrete"
3770 "test_dxf"
3771 "test_ply_path_bezier"
3772 "test_ply_path_line"
3773 "test_ply_path_multi"
3774 "test_revolve"
3775 "test_screw"
3776 "test_simple_closed"
3777 "test_simple_extrude"
3778 "test_simple_open"
3779 "test_slice_onplane"
3780 "test_spline_3D"
3781 "test_svg"
3782 ;; Following tests require network:
3783 "test_fuze"
3784 "test_remote")
3785 " and not "))
3786 #:phases
3787 #~(modify-phases %standard-phases
3788 ;; XXX: It struggles to load and fails with error: AttributeError:
3789 ;; module 'trimesh' has no attribute '__main__'.
3790 (delete 'sanity-check))))
3791 (native-inputs
3792 (list python-coveralls
3793 python-pyinstrument
3794 python-pytest))
3795 (propagated-inputs
3796 (list ;; python-cascadio ; not packed yet, optional
3797 python-chardet
3798 python-colorlog
3799 python-httpx
3800 python-jsonschema
3801 python-lxml
3802 ;; python-mapbox-earcut ; not packed yet, optional
3803 ;; python-manifold3d ; not packed yet, optional
3804 python-meshio
3805 python-networkx
3806 python-numpy
3807 ;; python-openctm ; not packed yet, optional
3808 python-pillow
3809 python-psutil
3810 python-pycollada
3811 python-pyglet
3812 python-requests
3813 python-rtree
3814 python-scikit-image
3815 python-scipy
3816 python-setuptools
3817 python-shapely
3818 ;; python-svg-path ; not packed yet, optional
3819 python-sympy
3820 ;; python-vhacdx ; not packed yet, optional
3821 ;; python-xatlas ; not packed yet, optional
3822 python-xxhash))
3823 (home-page "https://github.com/mikedh/trimesh")
3824 (synopsis "Python library for loading and using triangular meshes")
3825 (description
3826 "Trimesh is a pure Python library for loading and using triangular meshes
3827with an emphasis on watertight surfaces. The goal of the library is to
3828provide a full featured and well tested Trimesh object which allows for easy
3829manipulation and analysis, in the style of the Polygon object in the Shapely
3830library.")
3831 (license license:expat)))
3832
3833(define-public python-tspex
3834 (package
3835 (name "python-tspex")
3836 (version "0.6.2")
3837 (source (origin
3838 (method url-fetch)
3839 (uri (pypi-uri "tspex" version))
3840 (sha256
3841 (base32
3842 "0x64ki1nzhms2nb8xpng92bzh5chs850dvapr93pkg05rk22m6mv"))))
3843 (build-system python-build-system)
3844 (propagated-inputs
3845 (list python-matplotlib python-numpy python-pandas python-xlrd))
3846 (home-page "https://apcamargo.github.io/tspex/")
3847 (synopsis "Calculate tissue-specificity metrics for gene expression")
3848 (description
3849 "This package provides a Python package for calculating
3850tissue-specificity metrics for gene expression.")
3851 (license license:gpl3+)))
3852
3853(define-public python-pandas-2
3854 (package
3855 (name "python-pandas")
3856 (version "2.2.3")
3857 (source
3858 (origin
3859 (method git-fetch)
3860 (uri (git-reference
3861 (url "https://github.com/pandas-dev/pandas")
3862 (commit (string-append "v" version))))
3863 (file-name (git-file-name name version))
3864 (sha256
3865 (base32 "00f6jnplwg7iffnxdm4hpfls0ncbarc23933xq1rm5nk5g8dcldx"))
3866 (patches (search-patches "python-pandas-2-no-pytz_datetime.patch"))))
3867 (build-system pyproject-build-system)
3868 (arguments
3869 (list
3870 #:test-flags
3871 #~(list "--pyargs" "pandas"
3872 ;; "--exitfirst"
3873 ;; XXX The tests won't even start on my 16 core laptop, but they
3874 ;; start with 4 processes.
3875 "--numprocesses" (number->string (min 4 (parallel-job-count)))
3876 "-m" "not slow and not network and not db"
3877 ;; All tests errored.
3878 "--ignore=pandas/tests/io/test_clipboard.py"
3879 "-k" (string-join
3880 (list
3881 "not test_git_version"
3882 "test_show_versions_console"
3883 ;; Not testing ~ expansion.
3884 "test_expand_user"
3885 "test_get_handle_with_path"
3886 ;; These test access the internet (see:
3887 ;; https://github.com/pandas-dev/pandas/issues/45085).:
3888 ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
3889 ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
3890 "test_wrong_url"
3891 ;; TODO: Missing input
3892 "TestS3"
3893 "s3"
3894 ;; This test fails when run with pytest-xdist
3895 ;; (see: https://github.com/pandas-dev/pandas/issues/39096).
3896 "test_memory_usage"
3897 "test_parsing_tzlocal_deprecated"
3898 ;; PyArrow is optional.
3899 "test_style_bar_with_pyarrow_NA_values"
3900 "test_very_negative_exponent"
3901 "test_usecols_no_header_pyarrow"
3902 "test_scientific_no_exponent[pyarrow-None]"
3903 "test_inspect_getmembers"
3904 ;; SciPy introduces cycle, optional.
3905 "test_savefig"
3906 ;; It requires a fresh python-tzdata, including new
3907 ;; timezones.
3908 "test_repr"
3909 ;; Fails with [email protected], fixed on main branch.
3910 ;; See: <https://github.com/pandas-dev/pandas/issues/61557>.
3911 "test_groupby_raises_category_on_category"
3912 ;; These tests should be skipped on 32bit systems:
3913 ;; Cannot cast array data from dtype('int64') to dtype('int32')
3914 #$@(if (not (target-64bit?))
3915 #~("test_inf_bound_infinite_recursion"
3916 "test_reindex_behavior_with_interval_index"
3917 "test_repeating_interval_index_with_infs")
3918 #~()))
3919 " and not "))
3920 #:phases
3921 #~(modify-phases %standard-phases
3922 (add-after 'unpack 'version-set-by-guix
3923 (lambda _
3924 (with-output-to-file "_version.py"
3925 (lambda _
3926 (display
3927 (string-append "__version__ = \""
3928 #$(package-version this-package)
3929 "\""))))))
3930 (add-before 'check 'pre-check
3931 (lambda _
3932 (setenv "HOME" ".")
3933 ;; Skip tests that require lots of resources.
3934 (setenv "PANDAS_CI" "1")))
3935 (add-after 'unpack 'patch-which
3936 (lambda _
3937 (substitute* "pandas/io/clipboard/__init__.py"
3938 (("^WHICH_CMD = .*")
3939 (string-append "WHICH_CMD = \""
3940 #$(this-package-input "which")
3941 "/bin/which\"\n")))))
3942 ;; The compiled libraries are only in the output at this point,
3943 ;; but they are needed to run tests.
3944 ;; FIXME: This should be handled by the pyargs pytest argument,
3945 ;; but is not for some reason.
3946 (add-before 'check 'pre-check
3947 (lambda _
3948 (copy-recursively
3949 (string-append #$output
3950 "/lib/python3.11/site-packages/pandas/_libs")
3951 "pandas/_libs"))))))
3952 (propagated-inputs
3953 (list python-dateutil
3954 python-jinja2
3955 python-matplotlib
3956 python-numpy
3957 python-openpyxl
3958 python-pytz
3959 python-tzdata
3960 python-xlrd
3961 python-xlsxwriter))
3962 (inputs
3963 (list which xclip xsel))
3964 (native-inputs
3965 (list meson-python
3966 python-beautifulsoup4
3967 python-cython
3968 python-html5lib
3969 python-lxml
3970 python-matplotlib
3971 python-openpyxl
3972 python-pytest-asyncio
3973 python-pytest
3974 python-pytest-localserver
3975 python-pytest-mock
3976 python-pytest-xdist
3977 python-versioneer))
3978 (home-page "https://pandas.pydata.org")
3979 (synopsis "Data structures for data analysis, time series, and statistics")
3980 (description
3981 "Pandas is a Python package providing fast, flexible, and expressive data
3982structures designed to make working with structured (tabular,
3983multidimensional, potentially heterogeneous) and time series data both easy
3984and intuitive. It aims to be the fundamental high-level building block for
3985doing practical, real world data analysis in Python.")
3986 (license license:bsd-3)))
3987
3988(define-public python-pandas python-pandas-2)
3989
3990(define-public python-pandas-stubs
3991 (package
3992 (name "python-pandas-stubs")
3993 ;; The versioning follows that of Pandas and uses the date of the
3994 ;; python-pandas-stubs release.
3995 (version "2.2.3.241126")
3996 (source
3997 (origin
3998 ;; No tests in the PyPI tarball.
3999 (method git-fetch)
4000 (uri (git-reference
4001 (url "https://github.com/pandas-dev/pandas-stubs")
4002 (commit (string-append "v" version))))
4003 (file-name (git-file-name name version))
4004 (sha256
4005 (base32 "0xbvin2l7h8vq9g24n4n2l49pdxbi15qghq7zkhh567p3pbmvsyb"))))
4006 (build-system pyproject-build-system)
4007 (arguments
4008 (list
4009 #:test-flags #~(list "--ignore=tests/test_io.py" ;requires python-calamine
4010 "-k"
4011 (string-append
4012 ;; The python-pyarrow package in Guix is built
4013 ;; with ORC integration, but these tests fail with
4014 ;; an abort in ORC because a timezone file is not
4015 ;; in the expected location:
4016 ;; https://github.com/apache/arrow/issues/40633
4017 "not test_orc"
4018 " and not test_orc_path"
4019 " and not test_orc_buffer"
4020 " and not test_orc_columns"
4021 " and not test_orc_bytes"
4022 " and not test_all_read_without_lxml_dtype_backend"
4023
4024 ;; Apparently "numpy.bool_" is not the same as the
4025 ;; expected "bool".
4026 " and not test_timedelta_cmp"
4027 " and not test_timedelta_cmp_rhs"
4028 " and not test_timestamp_cmp"
4029 " and not test_timestamp_eq_ne_rhs"))
4030 #:phases
4031 '(modify-phases %standard-phases
4032 ;; We cannot yet upgrade numpy to 1.26 because numba needs numpy
4033 ;; >1.24.
4034 (add-after 'unpack 'relax-requirements
4035 (lambda _
4036 (substitute* "pyproject.toml"
4037 (("numpy = \\{ version = \">=1.26.0\", python = \"<3.13\" \\}")
4038 "numpy = { version = \">=1.23.0\", python = \"<3.13\" }"))))
4039 (add-before 'check 'prepare-x
4040 (lambda _
4041 (system "Xvfb &")
4042 (setenv "DISPLAY" ":0")
4043 ;; xsel needs to write a log file.
4044 (setenv "HOME" (getcwd)))))))
4045 (propagated-inputs (list python-types-pytz))
4046 ;; Add python-fastparquet to native inputs once it has been packaged. Its
4047 ;; tests will be skipped for now.
4048 (native-inputs (list python-lxml
4049 python-matplotlib
4050 python-odfpy
4051 python-pandas
4052 python-poetry-core
4053 python-pyarrow
4054 python-pyreadstat
4055 python-pytest
4056 python-scipy
4057 python-sqlalchemy-2
4058 python-tables
4059 python-tabulate
4060 python-xarray
4061 ;; Needed to test clipboard support.
4062 which
4063 xclip
4064 xorg-server-for-tests
4065 xsel))
4066 (home-page "https://pandas.pydata.org")
4067 (synopsis "Type annotations for pandas")
4068 (description
4069 "This package contains public type stubs for @code{python-pandas},
4070following the convention of providing stubs in a separate package, as
4071specified in @acronym{PEP, Python Enhancement Proposal} 561. The stubs cover
4072the most typical use cases of @code{python-pandas}. In general, these stubs
4073are narrower than what is possibly allowed by @code{python-pandas}, but follow
4074a convention of suggesting best recommended practices for using
4075@code{python-pandas}.")
4076 (license license:bsd-3)))
4077
4078(define-public python-pandarallel
4079 (package
4080 (name "python-pandarallel")
4081 (version "1.6.5")
4082 (source
4083 (origin
4084 (method git-fetch) ; no tests in PyPI
4085 (uri (git-reference
4086 (url "https://github.com/nalepae/pandarallel/")
4087 (commit (string-append "v" version))))
4088 (file-name (git-file-name name version))
4089 (sha256
4090 (base32 "0r2wlxlwp4wia0vm15k4cp421mwa20k4k5g2ml01inprj8bl1p0p"))))
4091 (build-system pyproject-build-system)
4092 (arguments
4093 (list
4094 #:test-flags #~(list "-n" (number->string (parallel-job-count)))))
4095 (propagated-inputs
4096 (list python-dill
4097 python-pandas
4098 python-psutil))
4099 (native-inputs
4100 (list python-mkdocs-material
4101 python-numpy
4102 python-pytest
4103 python-pytest-cov
4104 python-pytest-xdist
4105 python-setuptools
4106 python-wheel))
4107 (home-page "https://nalepae.github.io/pandarallel/")
4108 (synopsis "Tool to parallelize Pandas operations across CPUs")
4109 (description
4110 "@code{pandarallel} allows any Pandas user to take advantage of their
4111multi-core computer, while Pandas uses only one core. @code{pandarallel} also
4112offers nice progress bars (available on Notebook and terminal) to get an rough
4113idea of the remaining amount of computation to be done.")
4114 (license license:bsd-3)))
4115
4116(define-public python-pandera
4117 (package
4118 (name "python-pandera")
4119 (version "0.26.1")
4120 (source
4121 (origin
4122 (method url-fetch)
4123 (uri (pypi-uri "pandera" version))
4124 (sha256
4125 (base32 "10px2wy3rb8gg2jyry8962yrd0m3jq88wgjcpyrk23bp55j5m9c1"))))
4126 (build-system pyproject-build-system)
4127 (arguments
4128 (list
4129 ;; tests: 3093 passed, 48 skipped, 21 xfailed, 8232 warnings
4130 #:test-flags
4131 ;; With higher threads count tests randomly fail during collection.
4132 #~(list "--numprocesses" (number->string (min 4 (parallel-job-count)))
4133 ;; TODO: Ignore tests for not packaged python-ibis-framework,
4134 ;; python-polars, and python-pyspark.
4135 "--ignore=tests/ibis"
4136 "--ignore=tests/polars"
4137 "--ignore=tests/pyspark"
4138 "-k" (string-join
4139 ;; Network access is required.
4140 (list "not test_items_endpoint"
4141 "test_transactions_endpoint"
4142 "test_upload_file_endpoint"
4143 ;; AssertionError: assert dtype('bool') == 'object'
4144 "test_index_dtypes[dask-Index-True-bool]"
4145 "test_index_dtypes[dask-Index-False-bool]"
4146 ;; TypeError: __class__ assignment: 'GeoDataFrame'
4147 ;; object layout differs from 'DataFrame'
4148 "test_schema_model[data0-True]"
4149 "test_schema_from_dataframe[data1-True]"
4150 "test_schema_no_geometry")
4151 " and not "))))
4152 (native-inputs
4153 (list python-joblib
4154 python-pytest
4155 python-pytest-asyncio
4156 python-pytest-xdist
4157 python-setuptools
4158 python-setuptools-scm
4159 python-uvicorn))
4160 (inputs
4161 ;; [optional]
4162 ;; Pandera comes with a lot of extras. We test as many as possible, but do
4163 ;; not include all of them in the propagated-inputs. Currently, we have to
4164 ;; skip the pyspark and io tests due to missing packages python-pyspark
4165 ;; and python-frictionless.
4166 (list python-dask
4167 python-distributed
4168 python-geopandas
4169 python-hypothesis
4170 ;; python-ibis-framework ;missing from Guix
4171 python-modin
4172 python-numpy
4173 python-pandas
4174 ;; python-polars ;missing from Guix
4175 ;; python-pyspark ;missing from Guix
4176 ;; python-ray ;missing from Guix
4177 python-scipy
4178 python-shapely))
4179 (propagated-inputs
4180 (list python-packaging
4181 python-pydantic-2
4182 python-typeguard
4183 python-typing-extensions
4184 python-typing-inspect))
4185 (home-page "https://github.com/unionai-oss/pandera")
4186 (synopsis "Perform data validation on dataframe-like objects")
4187 (description
4188 "@code{python-pandera} provides a flexible and expressive API for
4189performing data validation on dataframe-like objects to make data processing
4190pipelines more readable and robust. Dataframes contain information that
4191@code{python-pandera} explicitly validates at runtime. This is useful in
4192production-critical data pipelines or reproducible research settings. With
4193@code{python-pandera}, you can:
4194
4195@itemize
4196@item Define a schema once and use it to validate different dataframe types.
4197@item Check the types and properties of columns.
4198@item Perform more complex statistical validation like hypothesis testing.
4199@item Seamlessly integrate with existing data pipelines via function decorators.
4200@item Define dataframe models with the class-based API with pydantic-style syntax.
4201@item Synthesize data from schema objects for property-based testing.
4202@item Lazily validate dataframes so that all validation rules are executed.
4203@item Integrate with a rich ecosystem of tools like @code{python-pydantic},
4204@code{python-fastapi} and @code{python-mypy}.
4205@end itemize")
4206 (license license:expat)))
4207
4208(define-public python-pyjanitor
4209 (package
4210 (name "python-pyjanitor")
4211 (version "0.31.0")
4212 (source
4213 (origin
4214 ;; The build requires the mkdocs directory for the description in
4215 ;; setup.py. This is not included in the PyPI tarball.
4216 (method git-fetch)
4217 (uri (git-reference
4218 (url "https://github.com/pyjanitor-devs/pyjanitor")
4219 (commit (string-append "v" version))))
4220 (file-name (git-file-name name version))
4221 (sha256
4222 (base32 "06y6fvydrsjqdpbd20icd194693x127qhb19fgw248jfjyg5ga44"))))
4223 (build-system pyproject-build-system)
4224 ;; Pyjanitor has an extensive test suite. For quick debugging, the tests
4225 ;; marked turtle can be skipped using "-m" "not turtle".
4226 (arguments
4227 (list
4228 ;; tests: 1042 passed, 2 skipped, 2 deselected, 45 xfailed, 6 xpassed,
4229 ;; 735 warnings
4230 #:test-flags
4231 ;; The tests take quite long, so consider adding the "-n" line and
4232 ;; adding python-pytest-xdist to the native-inputs when testing.
4233 ;; However, the tests are not deterministic when ran with -n, so
4234 ;; disable again before committing.
4235 #~(list ;; "-n" (number->string (parallel-job-count))
4236 ;; Test files are not included.
4237 "--ignore=tests/io/test_read_csvs.py"
4238 ;; Polars has not been packaged yet.
4239 "--ignore=tests/polars"
4240 ;; PySpark has not been packaged yet.
4241 "--ignore=tests/spark/functions/test_clean_names_spark.py"
4242 "--ignore=tests/spark/functions/test_update_where_spark.py"
4243 ;; Tries to connect to the internet.
4244 "-k" (string-append "not test_is_connected"
4245 ;; Test files are not included.
4246 " and not test_read_commandline_bad_cmd"))
4247 #:phases
4248 #~(modify-phases %standard-phases
4249 (add-before 'check 'set-env-ci
4250 (lambda _
4251 ;; Some tests are skipped if the JANITOR_CI_MACHINE
4252 ;; variable is not set.
4253 (setenv "JANITOR_CI_MACHINE" "1"))))))
4254 ;; TODO: Remove python-requests and inject its target data to make the
4255 ;; package behaviour reproducible.
4256 (propagated-inputs (list python-multipledispatch
4257 python-natsort
4258 python-pandas-flavor
4259 python-requests
4260 python-scipy
4261 ;; Optional imports.
4262 python-biopython ;biology submodule
4263 python-unyt)) ;engineering submodule
4264 (native-inputs (list python-pytest
4265 ;;python-pytest-xdist ;only for -n when testing
4266 python-setuptools
4267 ;; Optional imports. We do not propagate them due to
4268 ;; their size.
4269 python-numba ;speedup of joins
4270 rdkit)) ;chemistry submodule
4271 (home-page "https://github.com/pyjanitor-devs/pyjanitor")
4272 (synopsis "Tools for cleaning and transforming pandas DataFrames")
4273 (description
4274 "@code{pyjanitor} provides a set of data cleaning routines for
4275@code{pandas} DataFrames. These routines extend the method chaining API
4276defined by @code{pandas} for a subset of its methods. Originally, this
4277package was a port of the R package by the same name and it is inspired by the
4278ease-of-use and expressiveness of the @code{dplyr} package.")
4279 (license license:expat)))
4280
4281(define-public python-pymcubes
4282 (package
4283 (name "python-pymcubes")
4284 (version "0.1.6")
4285 (source
4286 (origin
4287 (method git-fetch) ; no tests in PyPI
4288 (uri (git-reference
4289 (url "https://github.com/pmneila/PyMCubes")
4290 (commit (string-append "v" version))))
4291 (file-name (git-file-name name version))
4292 (sha256
4293 (base32 "1v2qhc4pwanx6a8k843mbh45yk77n3w63sy5lzk5c3q4pkvfj1b9"))))
4294 (build-system pyproject-build-system)
4295 (arguments
4296 (list
4297 #:phases
4298 #~(modify-phases %standard-phases
4299 (add-before 'check 'prepare-test-environment
4300 (lambda _
4301 ;; FileNotFoundError: [Errno 2] No such file or directory:
4302 ;; 'output/test.obj'
4303 (mkdir "output")
4304 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4305 (native-inputs
4306 (list python-cython
4307 python-pytest
4308 python-setuptools
4309 python-wheel))
4310 (propagated-inputs
4311 (list python-pycollada
4312 python-numpy
4313 python-scipy))
4314 (home-page "https://github.com/pmneila/PyMCubes")
4315 (synopsis "Marching cubes for Python")
4316 (description
4317 "@code{PyMCubes} is an implementation of the marching cubes algorithm to
4318extract iso-surfaces from volumetric data. The volumetric data can be given
4319as a three-dimensional @code{NumPy} array or as a Python function @code{f(x,
4320y, z)}.")
4321 (license license:bsd-3)))
4322
4323(define-public python-pythran
4324 (package
4325 (name "python-pythran")
4326 (version "0.17.0")
4327 (home-page "https://github.com/serge-sans-paille/pythran")
4328 (source (origin
4329 (method git-fetch)
4330 (uri (git-reference (url home-page) (commit version)))
4331 (file-name (git-file-name name version))
4332 (sha256
4333 (base32 "1rm9lfbz5qvah1m0rr5gaaahkf1gzwlw1ysvym2l2yh0clglav94"))))
4334 (build-system pyproject-build-system)
4335 (arguments
4336 (list
4337 ;; FIXME: find more reliable tests file(s), all tests from
4338 ;; test_typing.py fail with error: ModuleNotFoundError: No module named
4339 ;; 'distutils.msvccompiler'.
4340 #:tests? #f
4341 #:test-flags
4342 '(list (string-append "--numprocesses=" (number->string
4343 (parallel-job-count)))
4344 ;; XXX There are lots of tests of the format
4345 ;; pythran/tests/test_*.py, but they cannot easily be selected.
4346 "pythran/tests/test_typing.py")
4347 #:phases
4348 #~(modify-phases %standard-phases
4349 (add-before 'check 'pre-check
4350 (lambda* (#:key tests? #:allow-other-keys)
4351 (when tests?
4352 ;; Remove compiler flag that trips newer GCC:
4353 ;; https://github.com/serge-sans-paille/pythran/issues/908
4354 (substitute* "pythran/tests/__init__.py"
4355 (("'-Wno-absolute-value',") ""))
4356 (setenv "HOME" (getcwd))
4357 ;; This setup is modelled after the upstream CI system.
4358 (call-with-output-file ".pythranrc"
4359 (lambda (port)
4360 (format port "[compiler]\nblas=openblas~%")))))))))
4361 (native-inputs
4362 ;; For tests.
4363 (list openblas
4364 python-pytest
4365 python-pytest-xdist
4366 python-setuptools
4367 python-wheel))
4368 (propagated-inputs
4369 (list boost xsimd ;headers need to be available
4370 python-beniget python-gast python-numpy python-ply))
4371 (synopsis "Ahead of Time compiler for numeric kernels")
4372 (description
4373 "Pythran is an ahead of time compiler for a subset of the Python
4374language, with a focus on scientific computing. It takes a Python module
4375annotated with a few interface descriptions and turns it into a native
4376Python module with the same interface, but (hopefully) faster.")
4377 (license license:bsd-3)))
4378
4379(define-public python-pyts
4380 (package
4381 (name "python-pyts")
4382 (version "0.13.0")
4383 (source (origin
4384 (method url-fetch)
4385 (uri (pypi-uri "pyts" version))
4386 (sha256
4387 (base32
4388 "00pdzfkl0b4vhfdm8zas7b904jm2hhivdwv3wcmpik7l2p1yr85c"))))
4389 (build-system pyproject-build-system)
4390 (propagated-inputs
4391 (list python-joblib python-numba python-numpy
4392 python-scikit-learn
4393 python-scipy))
4394 (native-inputs
4395 (list python-pytest python-pytest-cov python-setuptools
4396 python-wheel))
4397 (home-page "https://github.com/johannfaouzi/pyts")
4398 (synopsis "Python package for time series classification")
4399 (description
4400 "This package provides a Python package for time series classification.")
4401 (license license:bsd-3)))
4402
4403(define-public python-spin
4404 (package
4405 (name "python-spin")
4406 (version "0.8")
4407 (source
4408 (origin
4409 (method url-fetch)
4410 (uri (pypi-uri "spin" version))
4411 (sha256
4412 (base32 "0ff48nagfaai3j26g1db4zq2bwdv6kj5l7xhcs2l9kzg7qzrmhr7"))))
4413 (build-system pyproject-build-system)
4414 (propagated-inputs (list python-click python-colorama python-tomli))
4415 (native-inputs (list python-pytest python-setuptools python-wheel))
4416 (home-page "https://github.com/scientific-python/spin")
4417 (synopsis "Developer tool for scientific Python libraries")
4418 (description "@code{spin} is a simple interface for common development
4419tasks. It comes with a few common build commands out the box, but can
4420easily be customized per project.
4421
4422The impetus behind developing the tool was the mass migration of scientific
4423Python libraries (SciPy, scikit-image, and NumPy, etc.) to Meson, after
4424distutils was deprecated. When many of the build and installation commands
4425changed, it made sense to abstract away the nuisance of having to re-learn
4426them.")
4427 (license license:bsd-3)))
4428
4429;; XXX: Not maintained since 2019. The project was archived by the owner on
4430;; Nov 2, 2020. It is now read-only.
4431(define-public python-fbpca
4432 (package
4433 (name "python-fbpca")
4434 (version "1.0")
4435 (source (origin
4436 (method url-fetch)
4437 (uri (pypi-uri "fbpca" version))
4438 (sha256
4439 (base32
4440 "1lbjqhqsdmqk86lb86q3ywf7561zmdny1dfvgwqkyrkr4ij7f1hm"))))
4441 (build-system pyproject-build-system)
4442 (arguments
4443 (list #:test-flags #~(list "fbpca.py")))
4444 (native-inputs (list python-pytest python-setuptools))
4445 (propagated-inputs
4446 (list python-numpy python-scipy))
4447 (home-page "https://fbpca.readthedocs.io/")
4448 (synopsis "Functions for principal component analysis and accuracy checks")
4449 (description
4450 "This package provides fast computations for @dfn{principal component
4451analysis} (PCA), SVD, and eigendecompositions via randomized methods")
4452 (license license:bsd-3)))
4453
4454(define-public python-einops
4455 (package
4456 (name "python-einops")
4457 (version "0.8.1")
4458 (source
4459 (origin
4460 (method git-fetch) ;PyPI misses .ipynb files required for tests
4461 (uri (git-reference
4462 (url "https://github.com/arogozhnikov/einops")
4463 (commit (string-append "v" version))))
4464 (file-name (git-file-name name version))
4465 (sha256
4466 (base32 "07xd5a4sya3mr003f17hxykcbq3zf3mnr51qagv7fy55qcnbkn97"))))
4467 (build-system pyproject-build-system)
4468 (arguments
4469 (list
4470 #:test-flags
4471 ;; Skip optional dependency on Jupyter during tests.
4472 #~(list "--ignore=scripts/test_notebooks.py")
4473 #:phases
4474 #~(modify-phases %standard-phases
4475 (add-after 'unpack 'set-backend
4476 (lambda _
4477 ;; Einops supports different backends, but we test
4478 ;; only NumPy for availability and simplicity.
4479 (setenv "EINOPS_TEST_BACKENDS" "numpy"))))))
4480 (native-inputs
4481 (list python-hatchling
4482 python-nbconvert
4483 python-nbformat
4484 python-parameterized
4485 python-pytest))
4486 (propagated-inputs
4487 (list python-numpy))
4488 (home-page "https://einops.rocks/")
4489 (synopsis "Tensor operations for different backends")
4490 (description
4491 "Einops provides a set of tensor operations for NumPy and multiple deep
4492learning frameworks.")
4493 (license license:expat)))
4494
4495(define-public python-uhi
4496 (package
4497 (name "python-uhi")
4498 (version "0.5.0")
4499 (source
4500 (origin
4501 (method url-fetch)
4502 (uri (pypi-uri "uhi" version))
4503 (sha256
4504 (base32 "0753b7yw0zi06g4azafnk3w8i3q6js9i6wwg3pya464gygrbnncm"))))
4505 (build-system pyproject-build-system)
4506 (propagated-inputs (list python-numpy))
4507 (native-inputs (list python-boost-histogram
4508 python-fastjsonschema
4509 python-hatch-vcs
4510 python-hatchling
4511 python-pytest))
4512 (home-page "https://github.com/scikit-hep/uhi")
4513 (synopsis "Universal Histogram Interface")
4514 (description "This is a package meant primarily for documenting histogram
4515indexing and the PlottableHistogram Protocol and any future cross-library
4516standards. It also contains the code for the PlottableHistogram Protocol, to
4517be used in type checking libraries wanting to conform to the protocol. It is
4518not usually a runtime dependency, but only a type checking, testing, and/or
4519docs dependency in support of other libraries.")
4520 (license license:bsd-3)))
4521
4522(define-public python-unyt
4523 (package
4524 (name "python-unyt")
4525 (version "3.0.3")
4526 (source
4527 (origin
4528 (method url-fetch)
4529 (uri (pypi-uri "unyt" version))
4530 (sha256
4531 (base32 "0jrq2vhan2h280h6cw1sm5hys2nzmf19w4py64k3nrkc320z9mni"))))
4532 (build-system pyproject-build-system)
4533 (arguments
4534 ;; This is a Numpy DeprecationWarning, remove it on next update.
4535 (list #:test-flags ''("-k" "not test_h5_io")))
4536 ;; Pint is optional, but we do not propagate it due to its size.
4537 (native-inputs
4538 (list python-pint
4539 python-pytest
4540 python-setuptools
4541 python-setuptools-scm
4542 python-wheel))
4543 ;; Astropy is an optional import, but we do not include it as it creates a
4544 ;; module cycle: astronomy->python-science->astronomy.
4545 (propagated-inputs
4546 (list python-h5py ; optional import
4547 python-matplotlib ; optional import
4548 python-numpy
4549 python-sympy))
4550 (home-page "https://unyt.readthedocs.io")
4551 (synopsis "Library for working with data that has physical units")
4552 (description
4553 "@code{unyt} is a Python library working with data that has physical
4554units. It defines the @code{unyt.array.unyt_array} and
4555@code{unyt.array.unyt_quantity} classes (subclasses of NumPy’s ndarray class)
4556for handling arrays and scalars with units,respectively")
4557 (license license:bsd-3)))
4558
4559(define-public python-uproot
4560 (package
4561 (name "python-uproot")
4562 (version "5.6.4")
4563 (source
4564 (origin
4565 (method url-fetch)
4566 (uri (pypi-uri "uproot" version))
4567 (sha256
4568 (base32 "024k5kjwcd2nw5hfxhpl0x9p5aq0qrg0nlh9v24vr39rcqadh52a"))))
4569 (build-system pyproject-build-system)
4570 (arguments
4571 (list
4572 #:test-flags
4573 #~(list
4574 ;; conftest.py is not required and it imports modules we do not use.
4575 "--noconftest"
4576 ;; There is no easy way to skip tests that require the network, so
4577 ;; just run a handful of tests that pass.
4578 "tests/test_0351_write_TList.py"
4579 "tests/test_0352_write_THashList.py"
4580 "tests/test_0439_check_awkward_before_numpy.py"
4581 "tests/test_0976_path_object_split.py"
4582 "tests/test_1198_coalesce.py"
4583 "tests/test_1264_write_NumPy_array_of_strings.py"
4584 "tests/test_1318_dont_compare_big_endian_in_awkward.py")
4585 #:phases
4586 #~(modify-phases %standard-phases
4587 (add-after 'unpack 'set-version
4588 (lambda _
4589 ;; Version is determined dynamically from .git.
4590 (substitute* "pyproject.toml"
4591 (("\\[project\\]")
4592 (string-append "[project]" "\n" "version = \""
4593 #$version "\""))
4594 (("\"version\"") "")))))))
4595 (native-inputs
4596 (list python-hatch-vcs
4597 python-pytest
4598 python-pytest-timeout
4599 python-setuptools))
4600 (propagated-inputs
4601 (list python-awkward
4602 python-cramjam
4603 python-fsspec
4604 python-numpy
4605 python-packaging
4606 python-xxhash))
4607 (home-page "https://uproot.readthedocs.io")
4608 (synopsis "ROOT I/O in Python using NumPy")
4609 (description
4610 "Uproot is a Python library for reading and writing ROOT files. It uses
4611NumPy and does not depend on C++ ROOT.")
4612 (license license:bsd-3)))
4613
4614(define-public python-upsetplot
4615 (package
4616 (name "python-upsetplot")
4617 (version "0.9.0")
4618 (source
4619 (origin
4620 (method url-fetch)
4621 (uri (pypi-uri "UpSetPlot" version))
4622 (sha256
4623 (base32
4624 "14l5gcj88cclkj1mf74bcy1pxq1hgsiy27fa3vxrsk32ik1nmdwm"))))
4625 (build-system pyproject-build-system)
4626 (propagated-inputs
4627 (list python-matplotlib python-pandas))
4628 (native-inputs
4629 (list python-pytest-runner python-pytest-cov
4630 python-setuptools python-wheel))
4631 (home-page "https://upsetplot.readthedocs.io")
4632 (synopsis "Draw UpSet plots with Pandas and Matplotlib")
4633 (description
4634 "This is a Python implementation of UpSet plots by Lex et al.
4635UpSet plots are used to visualize set overlaps; like Venn diagrams but more
4636readable.")
4637 (license license:bsd-3)))
4638
4639(define-public python-vaex-core
4640 (package
4641 (name "python-vaex-core")
4642 (version "4.18.1")
4643 (source
4644 (origin
4645 (method git-fetch)
4646 (uri (git-reference
4647 (url "https://www.github.com/maartenbreddels/vaex")
4648 (commit (string-append "core-v" version))))
4649 (file-name (git-file-name name version))
4650 (sha256
4651 (base32 "1sp096msbzgjlwi8c1ink2bp4pjff9pvikqz1y1li8d3in4gpgdr"))
4652 (patches
4653 (search-patches "python-vaex-core-fix-tsl-use.patch"))
4654 (modules '((guix build utils)
4655 (ice-9 ftw)))
4656 (snippet
4657 #~(begin
4658 ;; Delete everything except for vaex-core itself:
4659 (define (delete-except exception)
4660 (lambda (file)
4661 (unless (member file `("." ".." ,exception))
4662 (delete-file-recursively file))))
4663 (for-each (delete-except "packages") (scandir "."))
4664 (with-directory-excursion "packages"
4665 (for-each (delete-except "vaex-core") (scandir ".")))
4666 (for-each (lambda (file)
4667 (unless (member file '("." ".."))
4668 (rename-file
4669 (string-append "packages/vaex-core/" file)
4670 file)))
4671 (scandir "packages/vaex-core"))
4672 (delete-file-recursively "packages")
4673 (delete-file-recursively "vendor")))))
4674 (build-system pyproject-build-system)
4675 (arguments
4676 (list
4677 #:tests? #f ; require vaex.server and others, which require vaex-core.
4678 #:phases
4679 #~(modify-phases %standard-phases
4680 (add-after 'unpack 'relax-requirements
4681 (lambda _
4682 (substitute* "setup.py"
4683 ;; "dask!=2022.4.0,<2024.9"; there is a note "fingerprinting
4684 ;; in no longer deterministic as of 2024.9.0" which may be
4685 ;; resolved in 2024.12.1.
4686 ((",<2024.9") ""))))
4687 (add-before 'build 'patch-missing-include
4688 (lambda _
4689 ;; See: <https://github.com/vaexio/vaex/issues/2382>.
4690 ;; TODO: Update to the latest version including the fix.
4691 (substitute* "src/string_utils.hpp"
4692 (("#include <nonstd/string_view.hpp>")
4693 "#include <cstdint>\n#include <nonstd/string_view.hpp>")))))))
4694 (inputs
4695 (list boost pcre pybind11 string-view-lite tsl-hopscotch-map))
4696 (propagated-inputs
4697 (list python-aplus
4698 python-blake3
4699 python-click ;XXX for dask
4700 python-cloudpickle
4701 python-dask
4702 python-filelock
4703 python-frozendict
4704 python-future
4705 python-nest-asyncio
4706 python-numpy
4707 python-pandas
4708 python-progressbar2
4709 python-pyarrow
4710 python-pydantic-2
4711 python-pydantic-settings
4712 python-pyyaml
4713 python-requests
4714 python-rich
4715 python-six
4716 python-tabulate))
4717 (native-inputs
4718 (list python-pytest python-cython python-setuptools python-wheel))
4719 (home-page "https://www.github.com/maartenbreddels/vaex")
4720 (synopsis "Core of Vaex library for exploring tabular datasets")
4721 (description "Vaex is a high performance Python library for lazy
4722Out-of-Core DataFrames (similar to Pandas), to visualize and explore big
4723tabular datasets. This package provides the core modules of Vaex.")
4724 (license license:expat)))
4725
4726(define-public python-vector
4727 (package
4728 (name "python-vector")
4729 (version "1.6.2")
4730 (source
4731 (origin
4732 (method url-fetch)
4733 (uri (pypi-uri "vector" version))
4734 (sha256
4735 (base32 "1jhfgx54a6l1cz9as2wlwrph86f8s1882biaakx1cl31igdxjnbf"))))
4736 (build-system pyproject-build-system)
4737 (arguments
4738 (list
4739 ;; This file requires python-papermill (not yet packaged).
4740 #:test-flags #~(list "--ignore" "tests/test_notebooks.py")))
4741 (propagated-inputs (list python-numpy python-packaging))
4742 (native-inputs (list python-awkward
4743 python-hatch-vcs
4744 python-hatchling
4745 python-pytest
4746 python-sympy))
4747 (home-page "https://github.com/scikit-hep/vector")
4748 (synopsis "Arrays of 2D, 3D, and Lorentz vectors")
4749 (description "Vector is a Python library for 2D and 3D spatial vectors, as
4750well as 4D space-time vectors. It is especially intended for performing
4751geometric calculations on arrays of vectors, rather than one vector at a time
4752in a Python @code{for} loop.")
4753 (license license:bsd-3)))
4754
4755(define-public python-vedo
4756 (package
4757 (name "python-vedo")
4758 (version "2025.5.3")
4759 (source
4760 (origin
4761 (method git-fetch)
4762 (uri (git-reference
4763 (url "https://github.com/marcomusy/vedo")
4764 (commit (string-append "v" version))))
4765 (file-name (git-file-name name version))
4766 (sha256
4767 (base32 "0hrqyvcxxbc1wz0cnafc8rvsi5mj19kck4b6pmddh25rlhdcr5qb"))))
4768 (build-system pyproject-build-system)
4769 (arguments
4770 (list
4771 ;; XXX: The whole test suite depends on the data from
4772 ;; <https://vedo.embl.es/examples> providing samples which need to be
4773 ;; downloaded during tests, find the way how to enable it.
4774 #:tests? #f
4775 #:phases
4776 #~(modify-phases %standard-phases
4777 (add-after 'unpack 'relax-requirements
4778 ;; vtk does not provide Python metadata.
4779 ;;
4780 ;; ...checking requirements: ERROR: vedo==2025.5.3
4781 ;; DistributionNotFound(Requirement.parse('vtk'), {'vedo'})
4782 (lambda _
4783 (substitute* "pyproject.toml"
4784 (("\"vtk\",") "")))))))
4785 (native-inputs
4786 (list pkg-config
4787 python-pkgconfig
4788 python-setuptools
4789 python-wheel))
4790 (propagated-inputs
4791 (list python-deprecated
4792 python-matplotlib
4793 python-numpy
4794 python-pygments
4795 vtk))
4796 (home-page "https://github.com/marcomusy/vedo")
4797 (synopsis
4798 "Analysis and visualization of 3D objects and point clouds")
4799 (description
4800 "@code{vedo} is a fast and lightweight python module for
4801scientific analysis and visualization. The package provides a wide
4802range of functionalities for working with three-dimensional meshes and
4803point clouds. It can also be used to generate high quality
4804two-dimensional renderings such as scatter plots and histograms.
4805@code{vedo} is based on @code{vtk} and @code{numpy}.")
4806 ;; vedo is released under the Expat license. Included fonts are
4807 ;; covered by the OFL license and textures by the CC0 license.
4808 ;; The earth images are in the public domain.
4809 (license (list license:expat
4810 license:silofl1.1
4811 license:cc0
4812 license:public-domain))))
4813
4814(define-public python-xarray
4815 (package
4816 (name "python-xarray")
4817 (version "2023.12.0")
4818 (source (origin
4819 (method url-fetch)
4820 (uri (pypi-uri "xarray" version))
4821 (sha256
4822 (base32
4823 "0cyldwchcrmbm1y7l1ry70kk8zdh7frxci3c6iwf4iyyj34dnra5"))))
4824 (build-system pyproject-build-system)
4825 (arguments
4826 (list
4827 #:test-flags
4828 ;; This needs a more recent version of python-hypothesis
4829 '(list "--ignore=xarray/tests/test_strategies.py"
4830 ;; These are known to fail with Pandas 2
4831 "-k"
4832 (string-append "not test_datetime_conversion_warning"
4833 " and not test_timedelta_conversion_warning"
4834 ;; These expect deprecation warnings that are not
4835 ;; emitted in our case.
4836 " and not test_drop_index_labels"
4837 " and not test_rename_multiindex"))))
4838 (native-inputs
4839 (list python-setuptools python-setuptools-scm python-pytest python-wheel))
4840 (propagated-inputs
4841 (list python-numpy python-packaging python-pandas))
4842 (home-page "https://github.com/pydata/xarray")
4843 (synopsis "N-D labeled arrays and datasets")
4844 (description "Xarray (formerly xray) makes working with labelled
4845multi-dimensional arrays simple, efficient, and fun!
4846
4847Xarray introduces labels in the form of dimensions, coordinates and attributes
4848on top of raw NumPy-like arrays, which allows for a more intuitive, more
4849concise, and less error-prone developer experience. The package includes a
4850large and growing library of domain-agnostic functions for advanced analytics
4851and visualization with these data structures.")
4852 (license license:asl2.0)))
4853
4854(define-public python-xarray-dataclasses
4855 (package
4856 (name "python-xarray-dataclasses")
4857 (version "1.7.0")
4858 (source
4859 (origin
4860 (method git-fetch)
4861 (uri (git-reference
4862 (url "https://github.com/astropenguin/xarray-dataclasses/")
4863 (commit (string-append "v" version))))
4864 (file-name (git-file-name name version))
4865 (sha256
4866 (base32 "043lc1hadr5y0y16g682viiafy0hfsa7q18lqmndpyvnmcgm893z"))))
4867 (build-system pyproject-build-system)
4868 (propagated-inputs (list python-numpy python-typing-extensions
4869 python-xarray))
4870 (native-inputs (list python-pytest python-poetry-core))
4871 (home-page "https://github.com/astropenguin/xarray-dataclasses/")
4872 (synopsis "Data creation made easy by dataclass")
4873 (description "@code{xarray-dataclasses} is a Python package that makes it
4874easy to create @code{xarray}'s @code{DataArray} and @code{Datase} objects that
4875are \"typed\" (i.e. fixed dimensions, data type, coordinates, attributes, and
4876name) using the Python's @code{dataclass}.")
4877 (license license:expat)))
4878
4879;; Note that this package will be folded into xarray eventually. See
4880;; https://github.com/pydata/xarray/issues/8572 for details.
4881(define-public python-xarray-datatree
4882 (package
4883 (name "python-xarray-datatree")
4884 (version "0.0.14")
4885 (source
4886 (origin
4887 (method url-fetch)
4888 (uri (pypi-uri "xarray-datatree" version))
4889 (sha256
4890 (base32 "1x1s25s6dp1f2hck9qw8vl8hgkyy23rcwag2a9vd3w0dbgrrl5i6"))))
4891 (build-system pyproject-build-system)
4892 (propagated-inputs (list python-packaging python-xarray))
4893 ;; We need setuptools-scm to correctly record the version string.
4894 (native-inputs
4895 (list python-pytest
4896 python-setuptools
4897 python-setuptools-scm
4898 python-wheel
4899 python-zarr))
4900 (home-page "https://github.com/xarray-contrib/datatree")
4901 (synopsis "Hierarchical tree-like data structures for xarray")
4902 (description "Datatree is a prototype implementation of a tree-like
4903hierarchical data structure for @code{xarray}. Datatree is in the process of
4904being merged upstream into @code{xarray}.")
4905 (license license:asl2.0)))
4906
4907(define-public python-xarray-einstats
4908 (package
4909 (name "python-xarray-einstats")
4910 (version "0.7.0")
4911 (source (origin
4912 (method git-fetch) ; no tests in PyPI
4913 (uri (git-reference
4914 (url "https://github.com/arviz-devs/xarray-einstats")
4915 (commit (string-append "v" version))))
4916 (file-name (git-file-name name version))
4917 (sha256
4918 (base32
4919 "14c424swpdginaz4pm3nmkizxy34x19q6xq3d4spx9s9031f6n3a"))))
4920 (build-system pyproject-build-system)
4921 (native-inputs (list python-einops python-flit-core python-numba
4922 python-pytest))
4923 (propagated-inputs (list python-numpy python-scipy python-xarray))
4924 (home-page "https://einstats.python.arviz.org/en/latest/")
4925 (synopsis "Stats, linear algebra and einops for xarray")
4926 (description
4927 "@code{xarray_einstats} provides wrappers around some NumPy and SciPy
4928functions and around einops with an API and features adapted to xarray.")
4929 (license license:asl2.0)))
4930
4931(define-public python-xarray-schema
4932 (package
4933 (name "python-xarray-schema")
4934 (version "0.0.3")
4935 (source
4936 (origin
4937 (method url-fetch)
4938 (uri (pypi-uri "xarray-schema" version))
4939 (sha256
4940 (base32 "08194629696z98dkc74i6c9zmy1jicvd2ajb75q0lsf0i427cv4w"))))
4941 (build-system pyproject-build-system)
4942 (propagated-inputs (list python-numpy python-xarray))
4943 (native-inputs
4944 (list python-pytest
4945 python-setuptools
4946 python-setuptools-scm
4947 python-wheel))
4948 (home-page "https://github.com/carbonplan/xarray-schema")
4949 (synopsis "Schema validation for Xarray objects")
4950 (description "This package implements schema validation for Xarray
4951objects.")
4952 (license license:expat)))
4953
4954(define-public python-pytensor
4955 (package
4956 (name "python-pytensor")
4957 (version "2.28.3") ; the minimal version supporting SciPy 1.12.0
4958 (source (origin
4959 (method git-fetch)
4960 (uri (git-reference
4961 (url "https://github.com/pymc-devs/pytensor")
4962 (commit (string-append "rel-" version))))
4963 (file-name (git-file-name name version))
4964 (sha256
4965 (base32
4966 "1yz1yslms6kdmy4sgnvbnghhclcpkc80z3vaw9c2y3b3j1fs9b4v"))))
4967 (build-system pyproject-build-system)
4968 (arguments
4969 (list
4970 #:test-flags
4971 ;; XXX: Full test suite takes about 20-30min to complete in single
4972 ;; thread, attempt to run tests in parallel with pytest-xdist fails even
4973 ;; so upstream provides a support for that, try to figure out how to
4974 ;; improve it.
4975 ;;
4976 ;; Upstream implements a script, showing slow tests which may be used to
4977 ;; exclude even more hanging/slow ones, see
4978 ;; <scripts/slowest_tests/extract-slow-tests.py>.
4979 ;;
4980 ;; Skip computationally intensive tests.
4981 #~(list "--ignore" "tests/scan/"
4982 "--ignore" "tests/tensor/"
4983 "--ignore" "tests/sandbox/"
4984 "--ignore" "tests/sparse/sandbox/"
4985 ;; Tests hang while running from these files.
4986 "--ignore" "tests/compile/test_compilelock.py"
4987 "--ignore" "tests/link/jax/test_tensor_basic.py"
4988 ;; XXX: Tests finish with error in these files, check why.
4989 "--ignore" "tests/compile/function/test_types.py"
4990 "--ignore" "tests/link/numba/test_basic.py"
4991 "--ignore" "tests/link/numba/test_blockwise.py"
4992 "--ignore" "tests/link/numba/test_elemwise.py"
4993 "-k" (string-join
4994 ;; Skip benchmark tests.
4995 (list "not test_elemwise_speed"
4996 "test_logsumexp_benchmark"
4997 "test_fused_elemwise_benchmark"
4998 "test_scan_multiple_output"
4999 "test_vector_taps_benchmark"
5000 "test_cython_performance"
5001 ;; Assertion fails in tests.
5002 "test_choose_signature"
5003 "test_fgraph_to_python_names")
5004 " and not ")
5005 ;; Tests collection selects pytensor, which does not contain
5006 ;; tests and fails to pass; manually provide a test directory
5007 ;; instead.
5008 "tests")
5009 #:phases
5010 #~(modify-phases %standard-phases
5011 ;; Replace version manually because pytensor uses
5012 ;; versioneer, which requires git metadata.
5013 (add-after 'unpack 'versioneer
5014 (lambda _
5015 (invoke "versioneer" "install")
5016 (substitute* "setup.py"
5017 (("version=versioneer.get_version\\(),")
5018 (format #f "version=~s," #$version)))))
5019 (add-before 'check 'pre-check
5020 (lambda _
5021 ;; It is required for most tests.
5022 (setenv "HOME" "/tmp")
5023 ;; Cython extensions have to be built before running the tests.
5024 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5025 (native-inputs (list python-cython
5026 python-pytest
5027 python-pytest-mock
5028 python-versioneer
5029 python-setuptools
5030 python-wheel))
5031 (propagated-inputs (list python-cons
5032 python-etuples
5033 python-filelock
5034 python-logical-unification
5035 python-minikanren
5036 python-numba
5037 python-numpy
5038 python-scipy
5039 python-typing-extensions))
5040 (home-page "https://pytensor.readthedocs.io/en/latest/")
5041 (synopsis
5042 "Library for mathematical expressions in multi-dimensional arrays")
5043 (description
5044 "PyTensor is a Python library that allows one to define, optimize, and
5045efficiently evaluate mathematical expressions involving multi-dimensional
5046arrays. It is a fork of the Aesara library.")
5047 (license license:bsd-3)))
5048
5049(define-public python-scs
5050 (package
5051 (name "python-scs")
5052 (version "3.2.4")
5053 (source
5054 (origin
5055 (method git-fetch)
5056 (uri (git-reference
5057 (url "https://github.com/bodono/scs-python")
5058 (commit "3.2.4")
5059 (recursive? #true)))
5060 (file-name (git-file-name name version))
5061 (sha256
5062 (base32 "06wd8m3ri0gaddl7qq6243g25zjlnh3da915b73jnrfh7sg1nqsj"))))
5063 (build-system pyproject-build-system)
5064 (native-inputs
5065 (list pkg-config
5066 python-pytest
5067 meson-python))
5068 (inputs
5069 (list openblas))
5070 (propagated-inputs
5071 (list python-numpy
5072 python-scipy))
5073 (home-page "https://github.com/bodono/scs-python")
5074 (synopsis "Splitting conic solver")
5075 (description "This package provides a Python interface for the
5076SCS (Splitting conic solver) library.")
5077 (license license:expat)))
5078
5079(define-public python-statannot
5080 (package
5081 (name "python-statannot")
5082 (version "0.2.3")
5083 (source
5084 (origin
5085 (method url-fetch)
5086 (uri (pypi-uri "statannot" version))
5087 (sha256
5088 (base32
5089 "1f8c2sylzr7lpjbyqxsqlp9xi8rj3d8c9hfh98x4jbb83zxc4026"))))
5090 (build-system python-build-system)
5091 (propagated-inputs
5092 (list python-numpy python-seaborn python-matplotlib python-pandas
5093 python-scipy))
5094 (home-page
5095 "https://github.com/webermarcolivier/statannot")
5096 (synopsis "Add annotations to existing plots generated by seaborn")
5097 (description
5098 "This is a Python package to compute statistical test and add statistical
5099annotations on an existing boxplots and barplots generated by seaborn.")
5100 (license license:expat)))
5101
5102(define-public python-pandas-flavor
5103 (package
5104 (name "python-pandas-flavor")
5105 (version "0.7.0")
5106 (source
5107 (origin
5108 (method url-fetch)
5109 (uri (pypi-uri "pandas_flavor" version))
5110 (sha256
5111 (base32
5112 "0zmgxnrxlvjgsr5f6yiwdn093kibb48zd16jkgy7l082d7wzjyv1"))))
5113 (build-system pyproject-build-system)
5114 (native-inputs
5115 (list python-pytest))
5116 (propagated-inputs
5117 (list python-lazy-loader python-packaging python-pandas python-xarray))
5118 (home-page "https://github.com/pyjanitor-devs/pandas_flavor")
5119 (synopsis "Write your own flavor of Pandas")
5120 (description "Pandas 0.23 added a simple API for registering accessors
5121with Pandas objects. Pandas-flavor extends Pandas' extension API by
5122
5123@itemize
5124@item adding support for registering methods as well
5125@item making each of these functions backwards compatible with older versions
5126of Pandas
5127@end itemize")
5128 (license license:expat)))
5129
5130(define-public python-pingouin
5131 (package
5132 (name "python-pingouin")
5133 (version "0.5.5")
5134 (source
5135 (origin
5136 (method git-fetch) ; no tests in PyPI tarball
5137 (uri (git-reference
5138 (url "https://github.com/raphaelvallat/pingouin")
5139 (commit (string-append "v" version))))
5140 (file-name (git-file-name name version))
5141 (sha256
5142 (base32
5143 "0i3yzdlj08di3mzi69ci57jm5myl123hp8c5vn1g35k77m4zpgvd"))))
5144 (build-system pyproject-build-system)
5145 (arguments
5146 (list
5147 ;; _flapack.error: (liwork>=max(1,10*n)||liwork==-1)
5148 ;; failed for 10th keyword liwork: dsyevr:liwork=1
5149 #:test-flags #~(list "-k" (string-append
5150 "not test_box_m"
5151 " and not test_linear_regression"))))
5152 (native-inputs
5153 (list python-pytest python-pytest-cov))
5154 (propagated-inputs
5155 (list python-matplotlib
5156 python-mpmath
5157 python-numpy
5158 python-pandas
5159 python-pandas-flavor
5160 python-scikit-learn
5161 python-scipy
5162 python-seaborn
5163 python-statsmodels
5164 python-tabulate))
5165 (home-page "https://pingouin-stats.org/")
5166 (synopsis "Statistical package for Python")
5167 (description "Pingouin is a statistical package written in Python 3 and
5168based mostly on Pandas and NumPy. Its features include
5169
5170@itemize
5171@item ANOVAs: N-ways, repeated measures, mixed, ancova
5172@item Pairwise post-hocs tests (parametric and non-parametric) and pairwise
5173correlations
5174@item Robust, partial, distance and repeated measures correlations
5175@item Linear/logistic regression and mediation analysis
5176@item Bayes Factors
5177@item Multivariate tests
5178@item Reliability and consistency
5179@item Effect sizes and power analysis
5180@item Parametric/bootstrapped confidence intervals around an effect size or a
5181correlation coefficient
5182@item Circular statistics
5183@item Chi-squared tests
5184@item Plotting: Bland-Altman plot, Q-Q plot, paired plot, robust correlation,
5185and more
5186@end itemize")
5187 (license license:gpl3)))
5188
5189(define-public python-plotly
5190 (package
5191 (name "python-plotly")
5192 (version "5.20.0")
5193 (source
5194 (origin
5195 (method git-fetch)
5196 (uri (git-reference
5197 (url "https://github.com/plotly/plotly.py")
5198 (commit (string-append "v" version))))
5199 (file-name (git-file-name name version))
5200 (sha256
5201 (base32 "0i22sv8p3kl84nkldbv1253kld85rbwp2pdxivxn64wwflfpqvx6"))))
5202 (build-system pyproject-build-system)
5203 (arguments
5204 (list
5205 #:test-flags
5206 ;; 2658 passed, 18 skipped, 38 deselected, 574 warnings
5207 #~(list "-k" (string-join
5208 ;; python-polars is not packaged yet.
5209 (list "not test_build_df_from_vaex_and_polars"
5210 "test_build_df_with_hover_data_from_vaex_and_polars"
5211 ;; ValueError
5212 "test_bytesio"
5213 "test_ensure_orca_ping_and_proc"
5214 "test_kaleido_engine_to_image_returns_bytes"
5215 "test_kaleido_fulljson"
5216 "test_latex_fig_to_image[eps]"
5217 "test_mimetype_combination"
5218 "test_orca_version_number"
5219 "test_pdf_renderer_show_override"
5220 "test_png_renderer_mimetype"
5221 "test_problematic_environment_variables[eps]"
5222 "test_server_timeout_shutdown"
5223 "test_simple_to_image[eps]"
5224 "test_svg_renderer_show"
5225 "test_to_image_default[eps]"
5226 "test_topojson_fig_to_image[eps]"
5227 "test_validate_orca"
5228 "test_write_image_string[eps]"
5229 "test_write_image_string_bad_extension_override"
5230 "test_write_image_string_format_inference[eps]"
5231 "test_write_image_writeable[eps]"
5232 ;; XXX: check why these tests fail
5233 "test_dependencies_not_imported"
5234 "test_external_server_url"
5235 "test_invalid_figure_json"
5236 "test_lazy_imports"
5237 "test_legend_dots"
5238 "test_linestyle"
5239 "test_orca_executable_path"
5240 "test_sanitize_json[auto]"
5241 "test_sanitize_json[json]"
5242 "test_scraper"
5243 "test_write_image_string_bad_extension_failure")
5244 " and not "))
5245 #:phases
5246 #~(modify-phases %standard-phases
5247 (add-before 'build 'skip-npm
5248 ;; npm is not packaged so build without it
5249 (lambda _
5250 (setenv "SKIP_NPM" "T")))
5251 (add-after 'unpack 'fix-version
5252 ;; TODO: Versioneer in Guix gets its release version from the
5253 ;; parent directory, but the plotly package is located inside a
5254 ;; depth 3 subdirectory. Try to use versioneer if possible.
5255 (lambda _
5256 (substitute* "packages/python/plotly/setup.py"
5257 (("version=versioneer.get_version\\(),")
5258 (format #f "version=~s," #$version)))
5259 (substitute* "packages/python/plotly/plotly/version.py"
5260 (("__version__ = get_versions\\(\\)\\[\"version\"\\]")
5261 (format #f "__version__ = ~s" #$version)))))
5262 (add-after 'fix-version 'chdir
5263 (lambda _
5264 (chdir "packages/python/plotly"))))))
5265 (native-inputs
5266 (list python-ipywidgets
5267 python-nbformat
5268 python-pytest
5269 python-setuptools
5270 python-xarray))
5271 (propagated-inputs
5272 (list python-ipython
5273 python-pandas
5274 python-pillow
5275 ;; python-polars
5276 python-requests
5277 python-retrying
5278 python-scikit-image
5279 python-statsmodels
5280 python-tenacity
5281 python-vaex-core))
5282 (home-page "https://plotly.com/python/")
5283 (synopsis "Interactive plotting library for Python")
5284 (description
5285 "Plotly's Python graphing library makes interactive,publication-quality
5286graphs online. Examples of how to make line plots, scatter plots, area
5287charts, bar charts, error bars, box plots, histograms, heatmaps, subplots,
5288multiple-axes, polar charts, and bubble charts.")
5289 (license license:expat)))
5290
5291(define-public python-plotnine
5292 (package
5293 (name "python-plotnine")
5294 (version "0.14.5")
5295 (source
5296 (origin
5297 (method git-fetch)
5298 (uri (git-reference
5299 (url "https://github.com/has2k1/plotnine")
5300 (commit (string-append "v" version))))
5301 (file-name (git-file-name name version))
5302 (sha256
5303 (base32 "02ph0h312qn5a9ivh2qhv0x9sybccgbidzvb8im1hikwcqp8v2fw"))))
5304 (build-system pyproject-build-system)
5305 (arguments
5306 (list
5307 #:test-flags
5308 ;; XXX: Check for any new failing tests during next update cycle.
5309 ;; These all fail because the images are considered to be too different,
5310 ;; though they really do look fine.
5311 ;; See https://github.com/has2k1/plotnine/issues/627
5312 `(list ,@(map (lambda (file) (string-append "--ignore=" file))
5313 (list "tests/test_aes.py"
5314 "tests/test_annotation_logticks.py"
5315 "tests/test_coords.py"
5316 "tests/test_facet_labelling.py"
5317 "tests/test_facets.py"
5318 "tests/test_geom_bar_col_histogram.py"
5319 "tests/test_geom_bin_2d.py"
5320 "tests/test_geom_boxplot.py"
5321 "tests/test_geom_count.py"
5322 "tests/test_geom_density_2d.py"
5323 "tests/test_geom_density.py"
5324 "tests/test_geom_dotplot.py"
5325 "tests/test_geom_freqpoly.py"
5326 "tests/test_geom_map.py"
5327 "tests/test_geom_path_line_step.py"
5328 "tests/test_geom_point.py"
5329 "tests/test_geom_raster.py"
5330 "tests/test_geom_rect_tile.py"
5331 "tests/test_geom_ribbon_area.py"
5332 "tests/test_geom_sina.py"
5333 "tests/test_geom_smooth.py"
5334 "tests/test_geom_text_label.py"
5335 "tests/test_geom_violin.py"
5336 "tests/test_layout.py"
5337 "tests/test_position.py"
5338 "tests/test_qplot.py"
5339 "tests/test_scale_internals.py"
5340 "tests/test_scale_labelling.py"
5341 "tests/test_stat_ecdf.py"
5342 "tests/test_stat_function.py"
5343 "tests/test_stat_summary.py"
5344 "tests/test_theme.py"))
5345 "-k"
5346 (string-append "not "
5347 (string-join
5348 (list
5349 ;; This triggers an unexpected but harmless
5350 ;; warning.
5351 "test_save_method"
5352 ;; This test fails to set the locale.
5353 "test_no_after_scale_warning"
5354 ;; Missing optional modules
5355 "test_non_linear_smooth"
5356 "test_non_linear_smooth_no_ci")
5357 " and not "
5358 'infix)))
5359 #:phases
5360 #~(modify-phases %standard-phases
5361 (add-before 'build 'pretend-version
5362 ;; The version string is usually derived via setuptools-scm, but
5363 ;; without the git metadata available, the version string is set to
5364 ;; '999'.
5365 (lambda _
5366 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
5367 (add-before 'check 'pre-check
5368 (lambda* (#:key inputs outputs #:allow-other-keys)
5369 ;; The data files are referenced by the tests but they are not
5370 ;; installed.
5371 (copy-recursively "plotnine/data"
5372 (string-append (site-packages inputs
5373 outputs)
5374 "/plotnine/data"))
5375 (setenv "CI" "1") ;skip tests that are known to fail on CI.
5376 ;; Matplotlib needs to be able to write its configuration file
5377 ;; somewhere.
5378 (setenv "MPLCONFIGDIR" "/tmp")
5379 (setenv "TZ" "UTC")
5380 (setenv "TZDIR"
5381 (search-input-directory inputs "share/zoneinfo")))))))
5382 (propagated-inputs (list python-adjusttext
5383 python-matplotlib
5384 python-mizani
5385 python-numpy
5386 python-patsy
5387 python-scipy
5388 python-statsmodels))
5389 (native-inputs (list python-geopandas
5390 python-mock
5391 python-pandas
5392 python-pytest
5393 python-pytest-cov
5394 python-setuptools
5395 python-setuptools-scm
5396 python-wheel
5397 tzdata-for-tests))
5398 (home-page "https://github.com/has2k1/plotnine")
5399 (synopsis "Grammar of Graphics for Python")
5400 (description
5401 "Plotnine is a Python implementation of the Grammar of Graphics.
5402It is a powerful graphics concept for creating plots and visualizations in a
5403structured and declarative manner. It is inspired by the R package ggplot2
5404and aims to provide a similar API and functionality in Python.")
5405 (license license:expat)))
5406
5407(define-public python-pyvista
5408 (package
5409 (name "python-pyvista")
5410 (version "0.44.2")
5411 (source
5412 (origin
5413 (method git-fetch)
5414 (uri (git-reference
5415 (url "https://github.com/pyvista/pyvista")
5416 (commit (string-append "v" version))))
5417 (file-name (git-file-name name version))
5418 (sha256
5419 (base32 "0lnh4cvf6wld7hm293015d80ny0vnsk96ckfvc2crzd1b79ch1v5"))))
5420 (build-system pyproject-build-system)
5421 (arguments
5422 (list
5423 ;; tests: 5891 passed, 623 skipped, 355 deselected, 3 xfailed, 167 warnings
5424 #:test-flags
5425 ;; TODO: Find out what's going on with skipped tests.
5426 #~(list "--ignore=tests/plotting/test_charts.py"
5427 "--ignore=tests/examples/test_download_files.py"
5428 "--ignore=tests/examples/test_downloads.py"
5429 "--ignore=tests/plotting/test_texture.py"
5430 "-k" (string-join
5431 (list "not test_actor_texture"
5432 "test_add_multiple"
5433 "test_add_timer_event"
5434 "test_avsucd_reader"
5435 "test_binarymarchingcubesreader"
5436 "test_bmpreader"
5437 "test_box_axes"
5438 "test_byureader"
5439 "test_cast_to_numpy_raises"
5440 "test_compute_boundary_mesh_quality"
5441 "test_connectivity_"
5442 "test_dataset_loader_cubemap"
5443 "test_dataset_loader_dicom"
5444 "test_dataset_loader_from_nested_files_and_directory"
5445 "test_dataset_loader_from_nested_multiblock"
5446 "test_dataset_loader_one_file"
5447 "test_dataset_loader_two_files_both_loadable"
5448 "test_dataset_loader_two_files_one_loadable"
5449 "test_dcmreader"
5450 "test_demreader"
5451 "test_ensight_multi_block_io"
5452 "test_ensightreader_arrays"
5453 "test_ensightreader_time_sets"
5454 "test_ensightreader_timepoints"
5455 "test_facetreader"
5456 "test_fluentcffreader"
5457 "test_gambitreader"
5458 "test_gaussian_cubes_reader"
5459 "test_gesignareader"
5460 "test_gif_reader"
5461 "test_hdf_reader"
5462 "test_hdr_reader"
5463 "test_init_cmap"
5464 "test_interpolate"
5465 "test_jpegreader"
5466 "test_legend_"
5467 "test_load_dataset_no_reader"
5468 "test_load_theme"
5469 "test_meta_image_reader"
5470 "test_multiblockplot3dreader"
5471 "test_nifti_reader"
5472 "test_nrrd_reader"
5473 "test_objreader"
5474 "test_only_screenshots_flag"
5475 "test_openfoam_case_type"
5476 "test_openfoam_cell_to_point_default"
5477 "test_openfoam_patch_arrays"
5478 "test_openfoam_skip_zero_time"
5479 "test_openfoamreader_active_time"
5480 "test_openfoamreader_arrays_time"
5481 "test_openfoamreader_read_data_time_point"
5482 "test_openfoamreader_read_data_time_value"
5483 "test_particle_reader"
5484 "test_partition"
5485 "test_pdbreader"
5486 "test_plot3dmetareader"
5487 "test_plot_return_img_with_cpos"
5488 "test_plot_return_img_without_cpos"
5489 "test_png_reader"
5490 "test_pnm_reader"
5491 "test_prostar_reader"
5492 "test_protein_ribbon"
5493 "test_pvdreader"
5494 "test_pvdreader_no_part_group"
5495 "test_pvdreader_no_time_group"
5496 "test_read_cgns"
5497 "test_repr"
5498 "test_save_before_close_callback"
5499 "test_slc_reader"
5500 "test_stlreader"
5501 "test_tecplotreader"
5502 "test_tiff_reader"
5503 "test_timer"
5504 "test_translate_direction_collinear"
5505 "test_user_logo"
5506 "test_xdmf_reader")
5507 " and not "))
5508 #:phases
5509 #~(modify-phases %standard-phases
5510 ;; vtk check fails in sanity-check, comment out
5511 (add-after 'unpack 'patch-pyproject
5512 (lambda _
5513 (substitute* "pyproject.toml"
5514 (("'vtk<9\\.4\\.0'," all) (string-append "#" all)))))
5515 (add-after 'unpack 'fix-failing-tests
5516 (lambda _
5517 (substitute* "tests/plotting/test_plotting.py"
5518 (("\"\"\"Determine if using mesa.\"\"\"" all)
5519 (string-append all "\n return False")))
5520 (substitute* "tests/test_meshio.py"
5521 (("cow = .*$" all) (string-append "#" all "\n"))
5522 ((", cow") ""))))
5523 ;; test phase writes files to $HOME
5524 (add-before 'check 'redirect-HOME
5525 (lambda _
5526 (setenv "HOME" "/tmp"))))))
5527 (native-inputs
5528 (list python-ipython
5529 python-pytest
5530 python-scipy
5531 python-tqdm
5532 python-trimesh))
5533 (propagated-inputs
5534 (list python-imageio
5535 python-matplotlib
5536 python-meshio
5537 python-numpy
5538 python-pillow
5539 python-pooch
5540 python-scooby
5541 vtk))
5542 (home-page "https://docs.pyvista.org/")
5543 (synopsis "3D plotting and mesh analysis through VTK")
5544 (description
5545 "PyVista is...
5546
5547@itemize
5548@item @emph{Pythonic VTK}: a high-level API to the Visualization
5549Toolkit (VTK);
5550@item mesh data structures and filtering methods for spatial datasets;
5551@item 3D plotting made simple and built for large/complex data geometries.
5552@end itemize
5553
5554This package provides a Pythonic, well-documented interface exposing VTK's
5555powerful visualization backend to facilitate rapid prototyping, analysis, and
5556visual integration of spatially referenced datasets.")
5557 (license license:expat)))
5558
5559(define-public python-pyvistaqt
5560 (package
5561 (name "python-pyvistaqt")
5562 (version "0.11.3")
5563 (source
5564 (origin
5565 (method git-fetch)
5566 (uri (git-reference
5567 (url "https://github.com/pyvista/pyvistaqt")
5568 (commit version)))
5569 (file-name (git-file-name name version))
5570 (sha256
5571 (base32 "04f9cd98k463pdrpi8jby411x9mc0ih62gl0nv0h9w3r7pwl61yl"))))
5572 (build-system pyproject-build-system)
5573 (arguments
5574 (list
5575 #:phases
5576 #~(modify-phases %standard-phases
5577 (add-after 'unpack 'fix-pytest
5578 (lambda _
5579 (substitute* "tests/conftest.py"
5580 (("pytest.skip")
5581 "pytest.mark.skipif"))))
5582 (add-before 'check 'before-check
5583 (lambda _
5584 ;; Testing requires write access.
5585 (setenv "HOME" "/tmp")
5586 ;; Testing requires a running xorg server.
5587 (system "Xvfb :99 -screen 0 1024x768x24 &")
5588 (setenv "DISPLAY" ":99.0"))))))
5589 (propagated-inputs (list python-pyvista python-qtpy))
5590 (native-inputs (list python-ipython
5591 python-matplotlib
5592 python-numpy
5593 python-pyqt-6
5594 python-pytest
5595 python-pytest-cov
5596 python-pytest-qt
5597 python-setuptools
5598 python-sphinx-gallery
5599 xorg-server))
5600 (home-page "https://github.com/pyvista/pyvistaqt")
5601 (synopsis "Qt support for PyVista")
5602 (description
5603 "@code{pyvistaqt} is a helper module for @code{pyvista} to enable you to
5604plot using Qt by placing a vtk-widget into a background renderer. This can be
5605quite useful when you desire to update your plot in real-time.")
5606 (license license:expat)))
5607
5608(define-public python-simplespectral
5609 (package
5610 (name "python-simplespectral")
5611 (version "1.0.0")
5612 (source
5613 (origin
5614 (method url-fetch)
5615 (uri (pypi-uri "SimpleSpectral" version))
5616 (sha256
5617 (base32 "0qh3xwdv9cwcqdamvglrhm586p4yaq1hd291py1fvykhk2a2d4w6"))))
5618 (build-system python-build-system)
5619 (propagated-inputs
5620 (list python-numpy python-scipy))
5621 (home-page "https://github.com/xmikos/simplespectral")
5622 (synopsis "FFT module for Python")
5623 (description
5624 "This package provides a simplified @code{scipy.signal.spectral} module
5625to do spectral analysis in Python.")
5626 (license license:expat)))
5627
5628(define-public python-paramz
5629 (package
5630 (name "python-paramz")
5631 (version "0.9.6")
5632 (source
5633 (origin
5634 (method git-fetch)
5635 (uri (git-reference
5636 (url "https://github.com/sods/paramz")
5637 (commit (string-append "v" version))))
5638 (file-name (git-file-name name version))
5639 (sha256
5640 (base32 "1ywc2jzj40m6wmq227j3snxvp4434s0m1xk1abg6v6mr87pv2sa9"))))
5641 (build-system pyproject-build-system)
5642 (arguments
5643 (list
5644 #:test-flags
5645 #~(list "-k"
5646 ;; Two tests fail with error: TypeError: arrays to stack must be
5647 ;; passed as a "sequence" type such as list or tuple.
5648 (string-append "not test_raveled_index"
5649 " and not test_regular_expression_misc")
5650 "paramz/tests/array_core_tests.py"
5651 "paramz/tests/cacher_tests.py"
5652 "paramz/tests/examples_tests.py"
5653 "paramz/tests/index_operations_tests.py"
5654 "paramz/tests/init_tests.py"
5655 "paramz/tests/lists_and_dicts_tests.py"
5656 "paramz/tests/model_tests.py"
5657 "paramz/tests/observable_tests.py"
5658 "paramz/tests/parameterized_tests.py"
5659 "paramz/tests/pickle_tests.py"
5660 "paramz/tests/verbose_optimize_tests.py")))
5661 (native-inputs
5662 (list python-pytest
5663 python-setuptools
5664 python-wheel))
5665 (propagated-inputs
5666 (list python-decorator
5667 python-numpy
5668 python-scipy
5669 python-six))
5670 (home-page "https://github.com/sods/paramz")
5671 (synopsis "The Parameterization Framework")
5672 (description
5673 "@command{paramz} is a lightweight parameterization framework
5674for parameterized model creation and handling. Its features include:
5675
5676@itemize
5677 @item Easy model creation with parameters.
5678 @item Fast optimized access of parameters for optimization routines.
5679 @item Memory efficient storage of parameters (only one copy in memory).
5680 @item Renaming of parameters.
5681 @item Intuitive printing of models and parameters.
5682 @item Gradient saving directly inside parameters.
5683 @item Gradient checking of parameters.
5684 @item Optimization of parameters.
5685 @item Jupyter notebook integration.
5686 @item Efficient storage of models, for reloading.
5687 @item Efficient caching.
5688@end itemize")
5689 (license license:bsd-3)))
5690
5691(define-public python-pods
5692 (package
5693 (name "python-pods")
5694 (version "0.1.17")
5695 (source
5696 (origin
5697 (method url-fetch)
5698 (uri (pypi-uri "pods" version))
5699 (sha256
5700 (base32 "1z57jdwml2jzr2dq20p7pzx3ayhajgfd2d0xqjvgzx576hp2z1ac"))))
5701 (build-system pyproject-build-system)
5702 ;; Tests depend on Nose framework and try to download test data from
5703 ;; <https://github.com/SheffieldML/GPmat>.
5704 (arguments (list #:tests? #f))
5705 (native-inputs
5706 (list python-poetry-core))
5707 (propagated-inputs
5708 (list python-pandas
5709 python-pyyaml
5710 python-scipy
5711 python-tables))
5712 (home-page "https://github.com/lawrennd/ods")
5713 (synopsis "Python software for Open Data Science")
5714 (description "This package provides utilities and tools for open data
5715science including tools for accessing data sets in Python.")
5716 (license license:bsd-3)))
5717
5718(define-public python-pyfma
5719 (package
5720 (name "python-pyfma")
5721 (version "0.1.6")
5722 (source (origin
5723 (method git-fetch) ;for tests
5724 (uri (git-reference
5725 (url "https://github.com/nschloe/pyfma")
5726 (commit version)))
5727 (file-name (git-file-name name version))
5728 (sha256
5729 (base32
5730 "12i68jj9n1qj9phjnj6f0kmfhlsd3fqjlk9p6d4gs008azw5m8yn"))))
5731 (build-system pyproject-build-system)
5732 (propagated-inputs (list python-numpy))
5733 (native-inputs (list pybind11 python-pytest python-setuptools python-wheel))
5734 (home-page "https://github.com/nschloe/pyfma")
5735 (synopsis "Fused multiply-add for Python")
5736 (description "@code{pyfma} provides an implementation of fused
5737multiply-add which computes @code{(x*y) + z} with a single rounding.
5738This is useful for dot products, matrix multiplications, polynomial
5739evaluations (e.g., with Horner's rule), Newton's method for evaluating
5740functions, convolutions, artificial neural networks etc.")
5741 (license license:expat)))
5742
5743(define-public python-pydicom
5744 (package
5745 (name "python-pydicom")
5746 (version "2.4.4")
5747 (source (origin
5748 (method git-fetch)
5749 (uri (git-reference
5750 (url "https://github.com/pydicom/pydicom")
5751 (commit (string-append "v" version))))
5752 (file-name (git-file-name name version))
5753 (sha256
5754 (base32
5755 "0ksyyc1hbhyqy289a2frn84ss29fb7czirx3dkxx56f4ia33b4c8"))))
5756 (build-system pyproject-build-system)
5757 (arguments
5758 (list
5759 #:test-flags
5760 ;; Skip tests that require networking.
5761 #~(list "-k" (string-append
5762 "not test_jpeg_ls_pixel_data.py"
5763 " and not test_gdcm_pixel_data.py"
5764 " and not test_pillow_pixel_data.py"
5765 " and not test_rle_pixel_data.py"
5766 " and not Test_JPEG_LS_Lossless_transfer_syntax"
5767 " and not test_numpy_pixel_data.py"
5768 " and not test_data_manager.py"
5769 " and not test_handler_util.py"
5770 " and not test_overlay_np.py"
5771 " and not test_encoders_pydicom.py"
5772 " and not test_encaps.py"
5773 " and not test_reading_ds_with_known_tags_with_UN_VR"
5774 " and not TestDatasetOverlayArray"
5775 " and not TestReader"
5776 " and not test_filewriter.py"))))
5777 (native-inputs (list python-pytest python-flit-core))
5778 (inputs (list gdcm libjpeg-turbo))
5779 (propagated-inputs (list python-numpy python-pillow))
5780 (home-page "https://github.com/pydicom/pydicom")
5781 (synopsis "Python library for reading and writing DICOM data")
5782 (description "@code{python-pydicom} is a Python library for reading and
5783writing DICOM medical imaging data. It can read, modify and write DICOM
5784data.")
5785 (license license:expat)))
5786
5787(define-public python-supersmoother
5788 ;; 0.4 was release in 2017, there a lot of changes on master branch
5789 ;; providing tests fixtures.
5790 (let ((commit "0a81544ac6bb33bdb08deeba69e97a4ceebcebcf")
5791 (revision "0"))
5792 (package
5793 (name "python-supersmoother")
5794 (version (git-version "0.4" revision commit))
5795 (source
5796 (origin
5797 (method git-fetch) ; no package in PyPI
5798 (uri (git-reference
5799 (url "https://github.com/jakevdp/supersmoother")
5800 (commit commit)))
5801 (file-name (git-file-name name version))
5802 (sha256
5803 (base32 "1r79nssw4a44zizvqg8y685nv3asdfj440s227phfww6kz33s3la"))))
5804 (build-system pyproject-build-system)
5805 (native-inputs
5806 (list python-pytest
5807 python-scipy
5808 python-setuptools))
5809 (propagated-inputs
5810 (list python-numpy))
5811 (home-page "http://github.com/jakevdp/supersmoother")
5812 (synopsis "Python implementation of Friedman's Supersmoother")
5813 (description
5814 "This package provides an efficient implementation of
5815@url{https://www.slac.stanford.edu/pubs/slacpubs/3250/slac-pub-3477.pdf,
5816Friedman's SuperSmoother} based in Python. It makes use of numpy for fast
5817numerical computation.")
5818 (license license:bsd-2))))
5819
5820(define-public python-pylems
5821 (package
5822 (name "python-pylems")
5823 (version "0.6.0")
5824 (source (origin
5825 (method url-fetch)
5826 (uri (pypi-uri "PyLEMS" version))
5827 (sha256
5828 (base32
5829 "074azbyivjbwi61fs5p8z9n6d8nk8xw6fmln1www13z1dccb3740"))))
5830 (build-system python-build-system)
5831 (propagated-inputs (list python-lxml))
5832 (home-page "https://github.com/LEMS/pylems")
5833 (synopsis
5834 "Python support for the Low Entropy Model Specification language (LEMS)")
5835 (description
5836 "A LEMS simulator written in Python which can be used to run
5837NeuroML2 models.")
5838 (license license:lgpl3)))
5839
5840(define-public python-pynrrd
5841 (package
5842 (name "python-pynrrd")
5843 (version "1.0.0")
5844 (source (origin
5845 (method git-fetch)
5846 (uri (git-reference
5847 (url "https://github.com/mhe/pynrrd")
5848 (commit (string-append "v" version))))
5849 (file-name (git-file-name name version))
5850 (sha256
5851 (base32
5852 "09gdyi4kbi3512ydgqxkgr4j7b9a95qh83fk2n9s41bns4id9xj7"))))
5853 (build-system python-build-system)
5854 (propagated-inputs
5855 (list python-nptyping python-numpy python-typing-extensions))
5856 (home-page "https://github.com/mhe/pynrrd")
5857 (synopsis "Python module for reading and writing NRRD files")
5858 (description
5859 "@code{pynrrd} is a Python module for reading and writing @acronym{NRRD,
5860Nearly Raw Raster Data} files (format designed to support scientific
5861visualization and image processing involving N-dimensional raster data) into
5862and from numpy arrays.")
5863 (license license:expat)))
5864
5865(define-public python-pynsee
5866 (package
5867 (name "python-pynsee")
5868 (version "0.1.8")
5869 (source
5870 (origin
5871 (method url-fetch)
5872 (uri (pypi-uri "pynsee" version))
5873 (sha256
5874 (base32 "1w084ynwdd9f4wpcnakqc0nxcbj9gr8vppv4rd258i3dp1qq4sw5"))))
5875 (build-system pyproject-build-system)
5876 (arguments (list #:tests? #f)) ; XXX: Tests require network access.
5877 (native-inputs
5878 (list python-setuptools
5879 python-wheel))
5880 (propagated-inputs
5881 (list python-appdirs
5882 python-openpyxl
5883 python-pandas
5884 python-platformdirs
5885 python-pyarrow
5886 python-requests
5887 python-shapely
5888 python-tqdm
5889 python-unidecode
5890 python-urllib3
5891 python-xlrd))
5892 (home-page "https://pynsee.readthedocs.io")
5893 (synopsis
5894 "Tools to Easily Search and Download French Data From INSEE and IGN APIs")
5895 (description
5896 "This package provides tools to easily search and download French data
5897from INSEE and IGN APIs. This data includes more than 150 000 macroeconomic
5898series, a dozen datasets of local french data, numerous sources available on
5899@url{insee.fr}, geographical limits of administrative areas taken from IGN as
5900well as key metadata and SIRENE database containing data on all French
5901compagnies.")
5902 (license license:expat)))
5903
5904(define-public python-dvc-objects
5905 (package
5906 (name "python-dvc-objects")
5907 (version "5.1.1")
5908 (home-page "https://github.com/iterative/dvc-objects")
5909 (source
5910 (origin
5911 (method url-fetch)
5912 (uri (pypi-uri "dvc_objects" version))
5913 (sha256
5914 (base32 "1amx5z8k2v2hbsajg0dcd5dxmmlv9bnbchpas95s8sj86cm8yc4y"))))
5915 (build-system pyproject-build-system)
5916 (propagated-inputs (list python-fsspec
5917 python-funcy-1.14))
5918 (native-inputs
5919 (list python-mypy
5920 python-pytest
5921 python-pytest-asyncio
5922 python-pytest-benchmark
5923 python-pytest-cov
5924 python-pytest-mock
5925 python-pytest-sugar
5926 python-reflink
5927 python-setuptools
5928 python-setuptools-scm
5929 python-wheel))
5930 (synopsis "Filesystem and object-db level abstractions for DVC")
5931 (description "Dvc objects provides a filesystem and object-db level
5932abstractions to use in dvc and dvc-data.")
5933 (license license:asl2.0)))
5934
5935(define-public python-dvc-data
5936 (package
5937 (name "python-dvc-data")
5938 (version "3.16.12")
5939 (home-page "https://github.com/iterative/dvc-data")
5940 (source (origin
5941 (method url-fetch)
5942 (uri (pypi-uri "dvc_data" version))
5943 (sha256
5944 (base32
5945 "156iwdn7v5jhwbpwz92n28qiasgcbmcqv9vxg8xbvdfxzlzw0b7r"))))
5946 (build-system pyproject-build-system)
5947 (propagated-inputs
5948 (list python-attrs
5949 python-dictdiffer
5950 python-diskcache
5951 python-dvc-objects
5952 python-fsspec
5953 python-funcy-1.14
5954 python-orjson
5955 python-pygtrie
5956 python-sqltrie
5957 python-tqdm))
5958 (native-inputs
5959 (list python-click
5960 python-pytest
5961 python-pytest-benchmark
5962 python-pytest-cov
5963 python-pytest-mock
5964 ;; python-pytest-servers is not packaged in Guix yet
5965 python-setuptools
5966 python-setuptools-scm
5967 python-typer
5968 python-wheel))
5969 (arguments
5970 (list
5971 #:test-flags
5972 ;; TODO: package python-pytest-server with its transitive dependencies
5973 #~(list "--ignore=tests/hashfile/test_db.py"
5974 "--ignore=tests/hashfile/test_db_index.py"
5975 "--ignore=tests/hashfile/test_obj.py"
5976 "--ignore=tests/index/test_build.py"
5977 "--ignore=tests/index/test_checkout.py"
5978 "--ignore=tests/index/test_fs.py"
5979 "--ignore=tests/index/test_index.py"
5980 "--ignore=tests/index/test_storage.py")
5981 #:phases
5982 #~(modify-phases %standard-phases
5983 (add-after 'unpack 'patch-pyproject
5984 (lambda _
5985 ;; setuptools cannot handle both license and license-files
5986 (substitute* "pyproject.toml"
5987 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
5988 (("^license-files = .*") "")))))))
5989 (synopsis "DVC's data management subsystem")
5990 (description "Dvc data is DVC's data management subsystem.")
5991 (license license:asl2.0)))
5992
5993(define-public python-pyqtgraph
5994 (package
5995 (name "python-pyqtgraph")
5996 (version "0.13.7")
5997 (source
5998 (origin
5999 (method url-fetch)
6000 (uri (pypi-uri "pyqtgraph" version))
6001 (sha256
6002 (base32 "1qyr461hcvhgy02slfkgrbip2xwa8zz6dvmi1476v6f66lclzy34"))))
6003 (build-system pyproject-build-system)
6004 (arguments
6005 ;; tests: 949 passed, 1356 skipped, 2 deselected, 8 xfailed, 130 warnings
6006 (list #:test-flags
6007 ;; Failed: CALL ERROR: Exceptions caught in Qt event loop.
6008 #~(list "--deselect=tests/exporters/test_svg.py::test_plotscene"
6009 ;; The test_reload test fails. It suggests to disable
6010 ;; assert rewriting in Pytest, but it still doesn't pass.
6011 "-k" "not test_reload"
6012 ;; Run unit tets only.
6013 "tests")
6014 #:phases
6015 #~(modify-phases %standard-phases
6016 (add-before 'check 'set-qpa
6017 (lambda _
6018 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
6019 (native-inputs
6020 (list python-pytest
6021 ;; Do not propagate Qt5/Qt6 let the user of the package to select
6022 ;; any supported one, see
6023 ;; <https://pyqtgraph.readthedocs.io/en/pyqtgraph-0.13.7>
6024 ;; </getting_started/how_to_use.html#pyqt-and-pyside>.
6025 python-pyqt-6
6026 python-pytest-qt
6027 python-setuptools))
6028 (propagated-inputs
6029 (list python-h5py
6030 python-numpy
6031 python-pyopengl
6032 python-scipy))
6033 (home-page "https://www.pyqtgraph.org")
6034 (synopsis "Scientific graphics and GUI library for Python")
6035 (description
6036 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
6037and PySide6. It is intended for use in mathematics, scientific or engineering
6038applications.")
6039 (license license:expat)))
6040
6041(define-public pyzo
6042 (package
6043 (name "pyzo")
6044 (version "4.20.0")
6045 (source
6046 (origin
6047 (method git-fetch)
6048 (uri (git-reference
6049 (url "https://github.com/pyzo/pyzo")
6050 (commit (string-append "v" version))))
6051 (file-name (git-file-name name version))
6052 (sha256
6053 (base32 "1a82k7hjmv20lrwiwsdrvczrm21wq16m4snwsirwhj0jh5k1x9iw"))))
6054 (build-system pyproject-build-system)
6055 (arguments
6056 (list
6057 #:test-flags
6058 #~(list "--ignore-glob=pyzo/yoton/tests/*" ; XXX: yoton is outdated.
6059 "--ignore=pyzo/codeeditor/_test.py"))) ; XXX: cannot import qt.
6060 (native-inputs
6061 (list python-flit-core
6062 python-pytest
6063 python-setuptools))
6064 (inputs (list python-pyside-6))
6065 (home-page "https://pyzo.org")
6066 (synopsis "Python IDE for scientific computing")
6067 (description
6068 "Pyzo is a Python IDE focused on interactivity and introspection,which
6069makes it very suitable for scientific computing. Its practical design is
6070aimed at simplicity and efficiency.
6071
6072It consists of two main components, the editor and the shell, and uses a set
6073of pluggable tools to help the programmer in various ways. Some example tools
6074are source structure, project manager, interactive help, workspace...")
6075 (license license:bsd-2)))
6076
6077(define-public snakemake
6078 (package
6079 (name "snakemake")
6080 (version "8.29.2")
6081 (source
6082 (origin
6083 (method url-fetch)
6084 (uri (pypi-uri "snakemake" version))
6085 (sha256
6086 (base32 "1ilpmrjmnc529p4gw2x23ik1d8b5pm6k1dhq08dknvfjsf3vgyjr"))))
6087 (build-system pyproject-build-system)
6088 (arguments
6089 (list
6090 #:test-flags
6091 #~(list
6092 ;; XXX: Unclear why these tests fail.
6093 "--ignore=tests/test_report_href/test_script.py"
6094 "--ignore=tests/test_script_py/scripts/test_explicit_import.py"
6095 "--ignore=tests/test_output_index.py"
6096 ;; We don't care about testing old [email protected] on Guix.
6097 "--ignore=tests/test_conda_python_3_7_script/test_script.py"
6098 ;; Those require additional snakemake plugins.
6099 "--ignore=tests/test_api.py"
6100 "--ignore=tests/test_executor_test_suite.py"
6101 ;; We don't care about lints.
6102 "--ignore=tests/test_linting.py"
6103 ;; These tests attempt to change S3 buckets on AWS and fail
6104 ;; because there are no AWS credentials.
6105 "--ignore=tests/test_tibanna"
6106 ;; It's a similar story with this test, which requires access
6107 ;; to the Google Storage service.
6108 "--ignore=tests/test_google_lifesciences")
6109 #:phases
6110 #~(modify-phases %standard-phases
6111 (add-after 'unpack 'avoid-assets-download
6112 (lambda _
6113 (substitute* "setup.py"
6114 (("^from assets import Assets") "")
6115 (("^Assets\\.deploy\\(\\)") ""))))
6116 ;; For cluster execution Snakemake will call Python. Since there is
6117 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
6118 ;; fix this by calling the snakemake wrapper instead.
6119 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6120 (lambda _
6121 (substitute* "snakemake/executors/__init__.py"
6122 (("self\\.get_python_executable\\(\\),")
6123 "")
6124 (("\"-m snakemake\"")
6125 (string-append "\"" #$output
6126 "/bin/snakemake" "\""))
6127 ;; The snakemake command produced by format_job_exec contains
6128 ;; references to /gnu/store. Prior to patching above that's
6129 ;; just a reference to Python; after patching it's a reference
6130 ;; to the snakemake executable.
6131 ;;
6132 ;; In Tibanna execution mode Snakemake arranges for a certain
6133 ;; Docker image to be deployed to AWS. It then passes its own
6134 ;; command line to Tibanna. This is misguided because it only
6135 ;; ever works if the local Snakemake command was run inside
6136 ;; the same Docker image. In the case of using Guix this is
6137 ;; never correct, so we need to replace the store reference.
6138 (("tibanna_args.command = command")
6139 (string-append
6140 "tibanna_args.command = command.replace('"
6141 #$output "/bin/snakemake', 'python3 -m snakemake')")))))
6142 (add-after 'unpack 'patch-version
6143 (lambda _
6144 (substitute* "setup.py"
6145 (("version=versioneer.get_version\\(\\)")
6146 (format #f "version=~s" #$version)))
6147 (substitute* '("snakemake/_version.py"
6148 "versioneer.py")
6149 (("0\\+unknown") #$version))))
6150 (add-before 'check 'pre-check
6151 (lambda* (#:key tests? #:allow-other-keys)
6152 (when tests?
6153 (setenv "HOME" "/tmp")))))))
6154 (propagated-inputs
6155 (list python-appdirs
6156 python-conda-inject
6157 python-configargparse
6158 python-connection-pool
6159 python-dpath
6160 python-gitpython
6161 python-humanfriendly
6162 python-immutables
6163 python-jinja2
6164 python-jsonschema
6165 python-nbformat
6166 python-packaging
6167 python-psutil
6168 python-pulp
6169 python-pyyaml
6170 python-requests
6171 python-reretry
6172 python-smart-open
6173 python-snakemake-interface-common
6174 python-snakemake-interface-executor-plugins
6175 python-snakemake-interface-report-plugins
6176 python-snakemake-interface-storage-plugins
6177 python-tabulate
6178 python-throttler
6179 python-wrapt
6180 python-yte))
6181 (native-inputs
6182 (list python-docutils
6183 python-numpy
6184 python-pandas
6185 python-setuptools
6186 python-tomli
6187 python-wheel))
6188 (home-page "https://snakemake.readthedocs.io")
6189 (synopsis "Python-based execution environment for make-like workflows")
6190 (description
6191 "Snakemake aims to reduce the complexity of creating workflows by
6192providing a clean and modern domain specific specification language (DSL) in
6193Python style, together with a fast and comfortable execution environment.")
6194 (license license:expat)))
6195
6196(define-public snakemake-5
6197 (package
6198 (name "snakemake")
6199 (version "5.32.2")
6200 (source
6201 (origin
6202 (method git-fetch)
6203 (uri (git-reference
6204 (url "https://github.com/snakemake/snakemake")
6205 (commit (string-append "v" version))))
6206 (file-name (git-file-name name version))
6207 (sha256
6208 (base32 "0nxp4z81vykv07kv2b6zrwk7ns8s10zqsb7vcignp8695yq3nlcm"))))
6209 (build-system pyproject-build-system)
6210 (arguments
6211 (list
6212 #:test-flags
6213 '(list
6214 ;; We have no TES support.
6215 "--ignore=tests/test_tes.py"
6216 ;; This test attempts to change S3 buckets on AWS and fails
6217 ;; because there are no AWS credentials.
6218 "--ignore=tests/test_tibanna.py"
6219 ;; It's a similar story with this test, which requires access
6220 ;; to the Google Storage service.
6221 "--ignore=tests/test_google_lifesciences.py"
6222 ;; Unclear failure.
6223 "-k" "not test_lint[long_run-positive]")
6224 #:phases
6225 #~(modify-phases %standard-phases
6226 (add-after 'unpack 'tabulate-compatibility
6227 (lambda _
6228 (substitute* "snakemake/dag.py"
6229 (("\"job\": rule,")
6230 "\"job\": rule.name,"))))
6231 (add-after 'unpack 'patch-version
6232 (lambda _
6233 (substitute* "setup.py"
6234 (("version=versioneer.get_version\\(\\)")
6235 (format #f "version=~s" #$version)))
6236 (substitute* '("snakemake/_version.py"
6237 "versioneer.py")
6238 (("0\\+unknown") #$version))))
6239 ;; For cluster execution Snakemake will call Python. Since there is
6240 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
6241 ;; this by calling the snakemake wrapper instead.
6242 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6243 (lambda _
6244 (substitute* "snakemake/executors/__init__.py"
6245 (("\\{sys.executable\\} -m snakemake")
6246 (string-append #$output "/bin/snakemake")))))
6247 (add-before 'check 'pre-check
6248 (lambda _ (setenv "HOME" "/tmp"))))))
6249 (propagated-inputs
6250 (list python-appdirs
6251 python-configargparse
6252 python-datrie
6253 python-docutils
6254 python-gitpython
6255 python-jinja2
6256 python-jsonschema
6257 python-nbformat
6258 python-networkx
6259 python-psutil
6260 python-pulp
6261 python-pyyaml
6262 python-ratelimiter
6263 python-requests
6264 python-toposort
6265 python-wrapt))
6266 (native-inputs
6267 (list git-minimal
6268 python-wrapper
6269 python-pytest
6270 python-pandas
6271 python-requests-mock
6272 python-setuptools
6273 python-wheel))
6274 (home-page "https://snakemake.readthedocs.io")
6275 (synopsis "Python-based execution environment for make-like workflows")
6276 (description
6277 "Snakemake aims to reduce the complexity of creating workflows by
6278providing a clean and modern domain specific specification language (DSL) in
6279Python style, together with a fast and comfortable execution environment.")
6280 (license license:expat)))
6281
6282(define-public snakemake-6
6283 (package
6284 (inherit snakemake-5)
6285 (name "snakemake")
6286 (version "6.15.5")
6287 (source
6288 (origin
6289 (method git-fetch)
6290 (uri (git-reference
6291 (url "https://github.com/snakemake/snakemake")
6292 (commit (string-append "v" version))))
6293 (file-name (git-file-name name version))
6294 (sha256
6295 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
6296 (build-system pyproject-build-system)
6297 (arguments
6298 (list
6299 #:test-flags
6300 '(list
6301 ;; This test attempts to change S3 buckets on AWS and fails
6302 ;; because there are no AWS credentials.
6303 "--ignore=tests/test_tibanna.py"
6304 ;; E ModuleNotFoundError: No module named 'google'
6305 "--ignore=tests/test_google_lifesciences.py"
6306 ;; Unclear failure.
6307 "-k" "not test_lint[long_run-positive]")
6308 #:phases
6309 #~(modify-phases %standard-phases
6310 ;; For cluster execution Snakemake will call Python. Since there is
6311 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
6312 ;; fix this by calling the snakemake wrapper instead.
6313
6314 ;; XXX: There is another instance of sys.executable on line 692, but
6315 ;; it is not clear how to patch it.
6316 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6317 (lambda* (#:key outputs #:allow-other-keys)
6318 (substitute* "snakemake/executors/__init__.py"
6319 (("\\{sys.executable\\} -m snakemake")
6320 (string-append #$output "/bin/snakemake")))))
6321 (add-after 'unpack 'tabulate-compatibility
6322 (lambda _
6323 (substitute* "snakemake/dag.py"
6324 (("\"job\": rule,")
6325 "\"job\": rule.name,"))))
6326 (add-after 'unpack 'patch-version
6327 (lambda _
6328 (substitute* "setup.py"
6329 (("version=versioneer.get_version\\(\\)")
6330 (format #f "version=~s" #$version)))
6331 (substitute* '("snakemake/_version.py"
6332 "versioneer.py")
6333 (("0\\+unknown") #$version))))
6334 (add-before 'check 'pre-check
6335 (lambda _ (setenv "HOME" "/tmp"))))))
6336 (propagated-inputs
6337 (list python-appdirs
6338 python-configargparse
6339 python-connection-pool
6340 python-datrie
6341 python-docutils
6342 python-filelock
6343 python-gitpython
6344 python-jinja2
6345 python-jsonschema
6346 python-nbformat
6347 python-networkx
6348 python-psutil
6349 python-pulp
6350 python-pyyaml
6351 python-py-tes
6352 python-ratelimiter
6353 python-requests
6354 python-smart-open
6355 python-stopit
6356 python-tabulate
6357 python-toposort
6358 python-wrapt))
6359 (native-inputs
6360 (list git-minimal
6361 python-wrapper
6362 python-pytest
6363 python-pandas
6364 python-requests-mock
6365 python-setuptools
6366 python-wheel))))
6367
6368(define-public snakemake-7
6369 (package
6370 (inherit snakemake-6)
6371 (name "snakemake")
6372 (version "7.32.4")
6373 (source
6374 (origin
6375 (method git-fetch)
6376 (uri (git-reference
6377 (url "https://github.com/snakemake/snakemake")
6378 (commit (string-append "v" version))))
6379 (file-name (git-file-name name version))
6380 (sha256
6381 (base32 "1d5hizai89k1glfqfkvf1ghj0l7wm8il6gl5pfwk2gkza87yka6d"))))
6382 (build-system pyproject-build-system)
6383 (arguments
6384 (list
6385 #:test-flags
6386 ;; This test attempts to change S3 buckets on AWS and fails
6387 ;; because there are no AWS credentials.
6388 '(list "--ignore=tests/test_tibanna.py"
6389 ;; It's a similar story with this test, which requires access to
6390 ;; the Google Storage service.
6391 "--ignore=tests/test_google_lifesciences.py"
6392 "--ignore-glob=tests/test_conda_python_3_7_script/*"
6393 ;; We don't have a slurm installation in the build environment
6394 "--ignore=tests/test_slurm.py")
6395 #:phases
6396 #~(modify-phases %standard-phases
6397 ;; For cluster execution Snakemake will call Python. Since there is
6398 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
6399 ;; fix this by calling the snakemake wrapper instead.
6400 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6401 (lambda* (#:key outputs #:allow-other-keys)
6402 (substitute* "snakemake/executors/__init__.py"
6403 (("self\\.get_python_executable\\(\\),")
6404 "")
6405 (("\"-m snakemake\"")
6406 (string-append "\"" #$output
6407 "/bin/snakemake" "\""))
6408 ;; The snakemake command produced by format_job_exec contains
6409 ;; references to /gnu/store. Prior to patching above that's
6410 ;; just a reference to Python; after patching it's a reference
6411 ;; to the snakemake executable.
6412 ;;
6413 ;; In Tibanna execution mode Snakemake arranges for a certain
6414 ;; Docker image to be deployed to AWS. It then passes its own
6415 ;; command line to Tibanna. This is misguided because it only
6416 ;; ever works if the local Snakemake command was run inside
6417 ;; the same Docker image. In the case of using Guix this is
6418 ;; never correct, so we need to replace the store reference.
6419 (("tibanna_args.command = command")
6420 (string-append
6421 "tibanna_args.command = command.replace('"
6422 #$output "/bin/snakemake', 'python3 -m snakemake')")))))
6423 (add-after 'unpack 'patch-version
6424 (lambda _
6425 (substitute* "setup.py"
6426 (("version=versioneer.get_version\\(\\)")
6427 (format #f "version=~s" #$version)))
6428 (substitute* '("snakemake/_version.py"
6429 "versioneer.py")
6430 (("0\\+unknown") #$version))))
6431 (add-before 'check 'pre-check
6432 (lambda _ (setenv "HOME" "/tmp"))))))
6433 (propagated-inputs
6434 (list python-appdirs
6435 python-configargparse
6436 python-connection-pool
6437 python-datrie
6438 python-docutils
6439 python-filelock
6440 python-gitpython
6441 python-humanfriendly
6442 python-jinja2
6443 python-jsonschema
6444 python-nbformat
6445 python-networkx
6446 python-psutil
6447 python-pulp
6448 python-pyyaml
6449 python-py-tes
6450 python-requests
6451 python-retry
6452 python-reretry
6453 python-smart-open
6454 python-stopit
6455 python-tabulate
6456 python-throttler
6457 python-toposort
6458 python-wrapt
6459 python-yte))
6460 (native-inputs
6461 (list git-minimal
6462 python-wrapper
6463 python-pytest
6464 python-pandas
6465 python-requests-mock
6466 python-setuptools
6467 python-wheel))))
6468
6469;;;
6470;;; Avoid adding new packages to the end of this file. To reduce the chances
6471;;; of a merge conflict, place them above by existing packages with similar
6472;;; functionality or similar names.
6473;;;