projects/guix·blob python-team · refs

7470 lines · 283.6 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-2026 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-2026 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-2026 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;;; Copyright © 2026 Reza Housseini <[email protected]>
43;;; Copyright © 2026 Spencer King <[email protected]>
44;;;
45;;; This file is part of GNU Guix.
46;;;
47;;; GNU Guix is free software; you can redistribute it and/or modify it
48;;; under the terms of the GNU General Public License as published by
49;;; the Free Software Foundation; either version 3 of the License, or (at
50;;; your option) any later version.
51;;;
52;;; GNU Guix is distributed in the hope that it will be useful, but
53;;; WITHOUT ANY WARRANTY; without even the implied warranty of
54;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
55;;; GNU General Public License for more details.
56;;;
57;;; You should have received a copy of the GNU General Public License
58;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
59
60(define-module (gnu packages python-science)
61 #:use-module ((guix licenses) #:prefix license:)
62 #:use-module (gnu packages)
63 #:use-module (gnu packages algebra)
64 #:use-module (gnu packages base)
65 #:use-module (gnu packages bash)
66 #:use-module (gnu packages bioinformatics)
67 #:use-module (gnu packages boost)
68 #:use-module (gnu packages build-tools)
69 #:use-module (gnu packages check)
70 #:use-module (gnu packages chemistry)
71 #:use-module (gnu packages cmake)
72 #:use-module (gnu packages compression)
73 #:use-module (gnu packages containers)
74 #:use-module (gnu packages cpp)
75 #:use-module (gnu packages cross-base)
76 #:use-module (gnu packages crypto)
77 #:use-module (gnu packages databases)
78 #:use-module (gnu packages digest)
79 #:use-module (gnu packages duckdb)
80 #:use-module (gnu packages elf)
81 #:use-module (gnu packages gcc)
82 #:use-module (gnu packages geo)
83 #:use-module (gnu packages gl)
84 #:use-module (gnu packages graphviz)
85 #:use-module (gnu packages image)
86 #:use-module (gnu packages image-processing)
87 #:use-module (gnu packages javascript)
88 #:use-module (gnu packages jemalloc)
89 #:use-module (gnu packages jupyter)
90 #:use-module (gnu packages machine-learning)
91 #:use-module (gnu packages maths)
92 #:use-module (gnu packages mpi)
93 #:use-module (gnu packages networking)
94 #:use-module (gnu packages nss)
95 #:use-module (gnu packages pcre)
96 #:use-module (gnu packages perl)
97 #:use-module (gnu packages physics)
98 #:use-module (gnu packages pkg-config)
99 #:use-module (gnu packages protobuf)
100 #:use-module (gnu packages python)
101 #:use-module (gnu packages python-build)
102 #:use-module (gnu packages python-check)
103 #:use-module (gnu packages python-compression)
104 #:use-module (gnu packages python-crypto)
105 #:use-module (gnu packages python-graphics)
106 #:use-module (gnu packages python-web)
107 #:use-module (gnu packages python-xyz)
108 #:use-module (gnu packages qt)
109 #:use-module (gnu packages rust)
110 #:use-module (gnu packages serialization)
111 #:use-module (gnu packages simulation)
112 #:use-module (gnu packages sphinx)
113 #:use-module (gnu packages ssh)
114 #:use-module (gnu packages statistics)
115 #:use-module (gnu packages tbb)
116 #:use-module (gnu packages time)
117 #:use-module (gnu packages tls)
118 #:use-module (gnu packages version-control)
119 #:use-module (gnu packages xdisorg)
120 #:use-module (gnu packages xml)
121 #:use-module (gnu packages xorg)
122 #:use-module (guix packages)
123 #:use-module (guix gexp)
124 #:use-module (guix deprecation)
125 #:use-module (guix download)
126 #:use-module (guix git-download)
127 #:use-module (guix utils)
128 #:use-module (guix build-system cargo)
129 #:use-module (guix build-system cmake)
130 #:use-module (guix build-system meson)
131 #:use-module (guix build-system pyproject)
132 #:use-module (guix build-system qt))
133
134(define-public pyre
135 (package
136 (name "pyre")
137 (version "1.12.5")
138 (source
139 (origin
140 (method git-fetch)
141 (uri (git-reference
142 (url "https://github.com/pyre/pyre")
143 (commit (string-append "v" version))))
144 (file-name (git-file-name name version))
145 (sha256
146 (base32
147 "0crmssga481q2ggwcmj40nj5n9975wri14p609jdr9hwg4vdyvj2"))))
148 (build-system cmake-build-system)
149 (arguments
150 (list
151 #:imported-modules (append %cmake-build-system-modules
152 %pyproject-build-system-modules)
153 #:modules '((guix build cmake-build-system)
154 ((guix build pyproject-build-system) #:prefix py:)
155 (guix build utils))
156 #:configure-flags
157 #~(list (string-append "-DPYRE_VERSION=" #$version)
158 (string-append "-DPYRE_DEST_PACKAGES="
159 (py:site-packages %build-inputs %outputs)))
160 #:phases
161 #~(modify-phases %standard-phases
162 (add-after 'unpack 'enable-bytecode-determinism
163 (assoc-ref py:%standard-phases 'enable-bytecode-determinism))
164 ;; Move the check phase after the Python 'pyre' module
165 ;; is installed and made available.
166 (delete 'check)
167 (add-after 'install 'add-to-pythonpath
168 (lambda* (#:key inputs outputs #:allow-other-keys)
169 (py:add-installed-pythonpath inputs outputs)))
170 (add-after 'add-to-pythonpath 'wrap
171 (assoc-ref py:%standard-phases 'wrap))
172 (add-after 'add-to-pythonpath 'check
173 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
174 (when tests?
175 (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
176 (let ((ignored-tests
177 (list
178 ;; The MPI tests are failing for unknown reasons (see:
179 ;; https://github.com/pyre/pyre/issues/126).
180 "tests.mpi"
181 ;; These tests have a cleanup phase that fails
182 ;; non-deterministically (see:
183 ;; https://github.com/pyre/pyre/issues/125).
184 "tests.pyre.lib.viz.flow"
185 ;; This test expects a TCP port 22 to be listening.
186 "tests.pyre.pkg.ipc.tcp.py"
187 ;; These postgres tests require a running postgresql
188 ;; daemon; they are also skipped in upstream CI.
189 "tests.postgres.ext"
190 ;; This test fails due to pre-1980 timestamps, not
191 ;; supported by ZIP.
192 "tests.pyre.pkg.filesystem.zip_open.py"
193 ;; This one trips on the patched python3 shebang.
194 "tests.pyre.pkg.filesystem.local_open.py")))
195 (invoke "ctest"
196 "-j" (if parallel-tests?
197 (number->string (parallel-job-count))
198 "1")
199 "-E" (string-join ignored-tests "|")))))))))
200 (native-inputs (list openssh-sans-x python python-numpy pybind11-2 zip))
201 (inputs (list gsl hdf5 openmpi postgresql))
202 (propagated-inputs (list python-pyyaml)) ;for the Python bindings
203 (home-page "http://pyre.orthologue.com/")
204 (synopsis "Framework for building Scientific applications")
205 (description
206 "This package provides a framework for building scientific applications.
207It aims to bring state of the art software design practices to scientific
208computing, with the goal of providing a strong skeleton on which to build
209scientific codes by steering the implementation towards usability and
210maintainability.")
211 (license license:bsd-3)))
212
213(define-public python-adjusttext
214 (package
215 (name "python-adjusttext")
216 (version "1.4.0")
217 (source
218 (origin
219 (method git-fetch)
220 (uri (git-reference
221 (url "https://github.com/Phlya/adjustText")
222 (commit (string-append "v" version))))
223 (file-name (git-file-name name version))
224 (sha256
225 (base32 "1cw9cfvrwimf1b3mvbdb8snj8shy1rzdpmb9d1j8vjwaj5ip4d9k"))))
226 (build-system pyproject-build-system)
227 (arguments
228 (list #:tests? #false)) ;there are none
229 (native-inputs
230 (list python-setuptools))
231 (propagated-inputs
232 (list python-matplotlib
233 python-numpy
234 python-scipy))
235 (home-page "https://github.com/Phlya/adjustText")
236 (synopsis "Adjust text position in matplotlib plots to minimize overlaps")
237 (description
238 "Often when we want to label multiple points on a graph the text will
239start heavily overlapping with both other labels and data points. This can be
240a major problem requiring manual solution. However this can be largely
241automated by smart placing of the labels (difficult) or iterative adjustment
242of their positions to minimize overlaps (relatively easy). This library
243implements the latter option to help with matplotlib graphs.")
244 (license license:expat)))
245
246(define-public python-algopy
247 (package
248 (name "python-algopy")
249 (version "0.7.2")
250 (source
251 (origin
252 (method url-fetch)
253 (uri (pypi-uri "algopy" version))
254 (sha256
255 (base32 "0l9d4pkbal6m6q8v6w5zr9wlij4sfycc8i2w7irk0i4n8hyvm0ja"))))
256 (build-system pyproject-build-system)
257 (native-inputs
258 (list python-pytest
259 python-setuptools))
260 (propagated-inputs
261 (list python-numpy
262 python-scipy))
263 (home-page "https://pythonhosted.org/algopy")
264 (synopsis "Algorithmic Differentation in Python")
265 (description
266 "AlgoPy provides a functionality to differentiate functions implemented
267as computer programs by using Algorithmic Differentiation (AD) techniques in
268the forward and reverse mode.
269
270The forward mode propagates univariate Taylor polynomials of arbitrary order.
271Hence it is also possible to use AlgoPy to evaluate higher-order derivative
272tensors. The reverse mode is also known as backpropagation and can be found
273in similar form in tools like PyTorch. Speciality of AlgoPy is the
274possibility to differentiate functions that contain matrix functions as
275+,-,*,/, dot, solve, qr, eigh, cholesky.")
276 (license license:bsd-3)))
277
278(define-public python-anndata
279 (package
280 (name "python-anndata")
281 (version "0.13.0rc3")
282 (source
283 (origin
284 (method git-fetch)
285 (uri (git-reference
286 (url "https://github.com/theislab/anndata")
287 (commit version)))
288 (file-name (git-file-name name version))
289 (sha256
290 (base32 "0hbnp4pw8wpn2lcds0wa92kb8x4bdkiv76dijg7g4pj0v86qm034"))))
291 (build-system pyproject-build-system)
292 (arguments
293 (list
294 ;; tests: 6677 passed, 1842 skipped, 195 xfailed, 4842 warnings, 98
295 ;; subtests passed
296 #:test-flags
297 #~(list "-m" "not gpu"
298 "--numprocesses" (number->string (min 8 (parallel-job-count)))
299 ;; XXX: AttributeError: module 'pyarrow.lib' has no attribute
300 ;; 'PyExtensionType'
301 "--ignore=tests/test_awkward.py")
302 #:phases
303 #~(modify-phases %standard-phases
304 ;; Doctests require scanpy from (gnu packages bioinformatics)
305 (add-after 'unpack 'disable-doctests
306 (lambda _
307 (substitute* "pyproject.toml"
308 (("--doctest-modules") ""))))
309 ;; Numba needs a writable dir to cache functions.
310 (add-before 'check 'set-numba-cache-dir
311 (lambda _
312 (setenv "NUMBA_CACHE_DIR" "/tmp"))))))
313 (native-inputs
314 (list hdf5 ;for h5diff, tests/test_io_backwards_compat.py
315 python-awkward
316 python-boltons
317 python-dask
318 python-distributed
319 python-filelock
320 python-hatch-vcs
321 python-hatchling
322 python-joblib
323 python-jsonschema
324 python-loompy
325 python-matplotlib
326 python-openpyxl
327 python-pyarrow
328 python-pytest
329 python-pytest-mock
330 python-pytest-randomly
331 python-pytest-xdist
332 python-scikit-learn
333 python-setuptools-scm))
334 (propagated-inputs
335 (list python-array-api-compat
336 python-h5py
337 python-legacy-api-wrap
338 python-natsort
339 python-numpy
340 python-packaging
341 python-pandas
342 python-scipy
343 python-scverse-misc
344 python-typing-extensions ;Python version < 3.13
345 python-zarr))
346 (home-page "https://github.com/theislab/anndata")
347 (synopsis "Annotated data for data analysis pipelines")
348 (description "Anndata is a package for simple (functional) high-level APIs
349for data analysis pipelines. In this context, it provides an efficient,
350scalable way of keeping track of data together with learned annotations and
351reduces the code overhead typically encountered when using a mostly
352object-oriented library such as @code{scikit-learn}.")
353 (license license:bsd-3)))
354
355;; A bare minimal package, mainly to use in tests and reduce closure
356;; size. Tests are left out in the main package to slim down native-inputs.
357(define-public python-anndata-minimal
358 (package/inherit python-anndata
359 (name "python-anndata-minimal")
360 (arguments
361 (substitute-keyword-arguments arguments
362 ((#:tests? _ #t) #f)))
363 (native-inputs
364 (list python-hatch-vcs
365 python-hatchling
366 python-setuptools-scm))))
367
368;; XXX: See: <https://codeberg.org/guix/guix/issues/3093>.
369(define-public python-aplus
370 ;; PyPI release lacks the latest version, Git has no tags.
371 (let ((commit "1ab8ebec987fb7213766784aad02cbf4410d9036")
372 (revision "0"))
373 (package
374 (name "python-aplus")
375 (version (git-version "0.11.1" revision commit))
376 (source
377 (origin
378 (method git-fetch)
379 (uri (git-reference
380 (url "https://github.com/xogeny/aplus")
381 (commit commit)))
382 (file-name (git-file-name name version))
383 (sha256
384 (base32 "02jcfj7dywvs0sd60c85pxwh0mwsj9p1q27445pba6j489x3dffj"))))
385 (build-system pyproject-build-system)
386 (arguments
387 (list #:tests? #f)) ;they depend on Nose test runner
388 (native-inputs
389 (list python-setuptools))
390 (home-page "https://github.com/xogeny/aplus")
391 (synopsis "Promises/A+ for Python")
392 (description
393 "This package is an implementation of the Promises/A+ specification and
394test suite in Python.")
395 (license license:expat))))
396
397(define-public python-apted
398 ;; PyPI release lacks tests and there is no Git tag.
399 (let ((commit "828b3e3f4c053f7d35f0b55b0d5597e8041719ac")
400 (revision "0"))
401 (package
402 (name "python-apted")
403 (version (git-version "1.0.3" revision commit))
404 (source
405 (origin
406 (method git-fetch)
407 (uri (git-reference
408 (url "https://github.com/JoaoFelipe/apted")
409 (commit commit)))
410 (file-name (git-file-name name version))
411 (sha256
412 (base32 "1vw1sbn41cysmhr4ib58cw3hzs1xjxwb1d8r1yhrqgjk5q6ckjw7"))))
413 (build-system pyproject-build-system)
414 (arguments
415 (list
416 #:test-flags
417 #~(list "--deselect=apted/tests/test_chained.py::test_factory"
418 "--deselect=apted/tests/test_correctness.py::test_factory"
419 "--deselect=apted/tests/test_per_edit_operation_correctness.py::test_factory")))
420 (native-inputs
421 (list python-pytest
422 python-setuptools
423 python-wheel))
424 (home-page "https://github.com/JoaoFelipe/apted")
425 (synopsis "Algorithm for the tree edit distance")
426 (description
427 "This is a Python implementation of the APTED algorithm,which
428supersedes the RTED algorithm for computing the tree edit distance.")
429 (license license:expat))))
430
431(define-public python-asap3
432 (package
433 (name "python-asap3")
434 (version "3.13.10")
435 (source
436 (origin
437 (method url-fetch)
438 (uri (pypi-uri "asap3" version))
439 (sha256
440 (base32 "1qpy9nnwv692hd3cg70n2zwjank25mlsfvvirklijwis3m4lfqg4"))))
441 (build-system pyproject-build-system)
442 (native-inputs
443 (list python-pytest
444 python-setuptools
445 which)) ;for build
446 (propagated-inputs
447 (list python-ase
448 python-numpy))
449 (home-page "https://wiki.fysik.dtu.dk/asap")
450 (synopsis "ASAP - classical potentials for Molecular Dynamics with ASE.")
451 (description "This package provides accelerated simulations and potentials
452of solids.")
453 (license license:lgpl3)))
454
455(define-public python-ase
456 (package
457 (name "python-ase")
458 (version "3.26.0")
459 (source
460 (origin
461 (method url-fetch)
462 (uri (pypi-uri "ase" version))
463 (sha256
464 (base32 "0xahqqyxkxrjh1g23icydngrvc8iv3lnd4iys9i802jvfxas6wd0"))))
465 (build-system pyproject-build-system)
466 (arguments
467 (list
468 ;; tests: 2 failed, 2999 passed, 566 skipped, 5 xfailed, 47 warnings
469 #:test-flags
470 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
471 ;; DeprecationWarning.
472 "--deselect"
473 "ase/test/fio/test_espresso.py::test_pw_input_write_nested_flat"
474 ;; UserWarning.
475 "--deselect"
476 "ase/test/fio/test_espresso.py::TestConstraints::test_fix_scaled")))
477 (native-inputs
478 (list python-pytest
479 python-pytest-xdist
480 python-setuptools))
481 (inputs (list spglib))
482 (propagated-inputs
483 (list python-matplotlib
484 python-numpy
485 python-scipy))
486 (home-page "https://wiki.fysik.dtu.dk/ase/")
487 (synopsis "Atomic Simulation Environment")
488 (description "This package provides a set of tools and Python modules for
489setting up, manipulating, running, visualizing and analyzing atomistic
490simulations.")
491 (license license:lgpl2.1+)))
492
493(define-public python-autoray
494 (package
495 (name "python-autoray")
496 (version "0.8.10")
497 (source
498 (origin
499 (method git-fetch)
500 (uri (git-reference
501 (url "https://github.com/jcmgray/autoray")
502 (commit (string-append "v" version))))
503 (file-name (git-file-name name version))
504 (sha256
505 (base32 "1gqfkpdng09l804xm9r1r098w10gr1bc5ax2xmhrpz9niybv71f5"))))
506 (build-system pyproject-build-system)
507 ;; tests: 1758 passed, 1483 skipped, 96 xfailed, 4 warnings
508 (native-inputs
509 (list python-hatch-vcs
510 python-hatchling
511 python-pytest))
512 (propagated-inputs
513 (list python-dask
514 python-matplotlib
515 python-networkx
516 python-numpy
517 python-opt-einsum
518 python-scipy
519 python-sparse))
520 (home-page "https://github.com/jcmgray/autoray")
521 (synopsis "Library for abstracting tensor operations")
522 (description
523 "This package provides a lightweight Python library for
524abstracting tensor operations. It provides an automatic dispatch mechanism
525that means you can write backend agnostic code that works for any library
526that provides a @code{numpy} compatible API.")
527 (license license:asl2.0)))
528
529(define-public python-baycomp
530 (package
531 (name "python-baycomp")
532 (version "1.0.3")
533 (source
534 (origin
535 (method url-fetch)
536 (uri (pypi-uri "baycomp" version))
537 (sha256
538 (base32 "1v6s4mfr6xzjbv9a2v89hywm6fbv5nii0qczvcfjanvdn7bmmcij"))))
539 (build-system pyproject-build-system)
540 (native-inputs
541 (list python-pytest python-setuptools python-wheel))
542 (propagated-inputs
543 (list python-matplotlib python-numpy python-scipy))
544 (home-page "https://github.com/janezd/baycomp")
545 (synopsis "Library for comparison of Bayesian classifiers")
546 (description
547 "Baycomp is a library for Bayesian comparison of classifiers. Functions
548in the library compare two classifiers on one or on multiple data sets. They
549compute three probabilities: the probability that the first classifier has
550higher scores than the second, the probability that differences are within the
551region of practical equivalence (rope), or that the second classifier has
552higher scores.")
553 (license license:expat)))
554
555(define-public python-boost-histogram
556 (package
557 (name "python-boost-histogram")
558 (version "1.7.1")
559 (source
560 (origin
561 (method url-fetch)
562 (uri (pypi-uri "boost_histogram" version))
563 (sha256
564 (base32 "06av8lxvvfafn4xbqakx2fbdcq0djbs7w6j4vn4ji8wgd39dglvf"))))
565 (build-system pyproject-build-system)
566 ;; This package bundles files from Boost::Histogram and doesn't provide
567 ;; a way to use a system library.
568 (propagated-inputs (list python-numpy))
569 (native-inputs (list cmake-minimal
570 pybind11-2
571 python-pytest
572 python-pytest-benchmark
573 python-scikit-build-core
574 python-setuptools-scm))
575 (home-page "https://boost-histogram.readthedocs.io/en/latest/")
576 (synopsis "Python bindings for the Boost::Histogram library")
577 (description
578 "This package provides Python bindings for the Boost::Histogram library,
579one of the fastest libraries for histogramming.")
580 (license license:bsd-3)))
581
582(define-public python-bottleneck
583 (package
584 (name "python-bottleneck")
585 (version "1.6.0")
586 (source
587 (origin
588 (method git-fetch)
589 (uri (git-reference
590 (url "https://github.com/pydata/bottleneck")
591 (commit (string-append "v" version))))
592 (file-name (git-file-name name version))
593 (sha256
594 (base32 "1p2ixxwdll1bhaqg68iywrb6n8kwscbnbx08q47fjslwzy8vkh7i"))))
595 (build-system pyproject-build-system)
596 (arguments
597 (list
598 #:test-flags #~(list "--pyargs" "bottleneck")
599 #:phases
600 #~(modify-phases %standard-phases
601 (add-before 'check 'remove-local-source
602 (lambda _
603 (delete-file-recursively "bottleneck"))))))
604 (native-inputs
605 (list python-pytest
606 python-setuptools
607 python-versioneer))
608 (propagated-inputs
609 (list python-numpy))
610 (home-page "https://github.com/pydata/bottleneck")
611 (synopsis "Fast NumPy array functions written in C")
612 (description
613 "Bottleneck is a collection of fast, NaN-aware NumPy array functions
614written in C.")
615 (license license:bsd-2)))
616
617(define-public python-clarabel
618 (package
619 (name "python-clarabel")
620 (version "0.7.1")
621 (source
622 (origin
623 (method url-fetch)
624 (uri (pypi-uri "clarabel" version))
625 (sha256
626 (base32 "15k32ynvh45n9q905bxwamh5w5cia9bxzmwz69wbribmyhsv22m3"))
627 (patches
628 (search-patches "python-clarabel-blas.patch"))))
629 (build-system cargo-build-system)
630 (arguments
631 (list
632 #:imported-modules `(,@%cargo-build-system-modules
633 ,@%pyproject-build-system-modules)
634 #:modules '((guix build cargo-build-system)
635 ((guix build pyproject-build-system) #:prefix py:)
636 (guix build utils))
637 #:phases
638 #~(modify-phases %standard-phases
639 (add-after 'build 'build-python-module
640 (assoc-ref py:%standard-phases 'build))
641 (add-after 'build-python-module 'install-python-module
642 (assoc-ref py:%standard-phases 'install)))
643 #:features '(list "python")
644 #:install-source? #false))
645 (inputs
646 (cons maturin (cargo-inputs 'python-clarabel)))
647 (native-inputs
648 (list python-wrapper))
649 (propagated-inputs (list python-numpy python-scipy))
650 (home-page "https://github.com/oxfordcontrol/Clarabel.rs")
651 (synopsis "Interior-point solver for convex conic optimisation problems")
652 (description "Clarabel.rs is a Rust implementation of an interior point
653numerical solver for convex optimization problems using a novel homogeneous
654embedding.")
655 (license license:asl2.0)))
656
657(define-public python-cmasher
658 (package
659 (name "python-cmasher")
660 (version "1.9.2")
661 (source
662 (origin
663 (method url-fetch)
664 (uri (pypi-uri "cmasher" version))
665 (sha256
666 (base32 "1xbzyla0l5i5vv86q4vwv33qmqzfzhhj6zry1lhy6ikir37c543c"))))
667 (build-system pyproject-build-system)
668 ;; tests: 65 passed, 2 skipped
669 (native-inputs
670 (list python-pytest
671 python-hatchling))
672 (propagated-inputs
673 (list python-colorspacious
674 python-matplotlib
675 python-numpy))
676 (home-page "https://cmasher.readthedocs.io")
677 (synopsis "Scientific colormaps utilities")
678 (description
679 "The CMasher package provides a collection of scientific colormaps and utility
680functions to be used by different Python packages and projects, mainly in
681combination with Matplotlib. It offers several alternatives to commonly used
682colormaps, like chroma and rainforest for jet; sunburst for hot; neutral for
683binary; and fusion and redshift for coolwarm.")
684 (license license:bsd-3)))
685
686(define-public python-cmcrameri
687 (package
688 (name "python-cmcrameri")
689 (version "1.9")
690 (source
691 (origin
692 (method git-fetch)
693 (uri (git-reference
694 (url "https://github.com/callumrollo/cmcrameri")
695 (commit (string-append "v" version))))
696 (file-name (git-file-name name version))
697 (sha256
698 (base32 "0wvqld65c1p3iqxmidfsavpp1nkjc1f4z6riqv0lmafpxrz2snbi"))))
699 (build-system pyproject-build-system)
700 (propagated-inputs (list python-matplotlib python-numpy python-packaging))
701 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
702 (home-page "https://github.com/callumrollo/cmcrameri")
703 (synopsis "Perceptually uniform colormaps by Fabio Crameri")
704 (description "This package provides a Python wrapper around Fabio
705Crameri's perceptually uniform colormaps for scientific data visualization.")
706 (license license:expat)))
707
708(define-public python-cmocean
709 (package
710 (name "python-cmocean")
711 (version "4.0.3")
712 (source
713 (origin
714 (method url-fetch)
715 (uri (pypi-uri "cmocean" version))
716 (sha256
717 (base32 "0z0d4ma6i228gwpgnkai8scs9bmzz41rirlnqpmb8hazzfcq71ip"))))
718 (build-system pyproject-build-system)
719 (native-inputs
720 (list python-pytest
721 python-setuptools
722 python-wheel))
723 (propagated-inputs
724 (list python-matplotlib
725 python-numpy
726 python-packaging))
727 (home-page "https://github.com/matplotlib/cmocean")
728 (synopsis "Colormaps for Oceanography")
729 (description
730 "This package contains colormaps for commonly-used oceanographic
731variables. Most of the colormaps started from @code{matplotlib} colormaps,
732but have now been adjusted using the viscm tool to be perceptually uniform.")
733 (license license:expat)))
734
735(define-public python-corner
736 (package
737 (name "python-corner")
738 (version "2.2.2")
739 (source
740 (origin
741 (method git-fetch) ;no tests in PyPi archive
742 (uri (git-reference
743 (url "https://github.com/dfm/corner.py")
744 (commit (string-append "v" version))))
745 (file-name (git-file-name name version))
746 (sha256
747 (base32 "1i4dk4jxh0saysya2cnsfwlxwpldbdl174i9pwi4qj82av9jr2ii"))))
748 (build-system pyproject-build-system)
749 (arguments
750 (list
751 #:test-flags
752 #~(list
753 ;; XXX: Disable tests which failed with mismatched images, check why.
754 "-k" (string-append "not test_labels[png]"
755 " and not test_title_quantiles[png]"
756 " and not test_title_quantiles_default[png]"
757 " and not test_title_quantiles_raises[png]"
758 " and not test_bins[png]"
759 " and not test_bins_log[png]"
760 " and not test_titles1[png]"
761 " and not test_titles2[png]"
762 " and not test_pandas[png]"
763 " and not test_tight[png]"
764 " and not test_extended_overplotting[png]"
765 " and not test_reverse_overplotting[png]"
766 " and not test_arviz[png]"
767 " and not test_range_fig_arg[png]"))))
768 (propagated-inputs
769 (list python-matplotlib))
770 (native-inputs
771 (list python-arviz python-pytest python-scipy python-setuptools-scm))
772 (home-page "http://corner.readthedocs.io/")
773 (synopsis "Make some beautiful corner plots")
774 (description
775 "This Python module uses @code{matplotlib} to visualize multidimensional
776samples using a scatterplot matrix. In these visualizations, each one- and
777two-dimensional projection of the sample is plotted to reveal covariances.
778corner was originally conceived to display the results of Markov Chain Monte
779Carlo simulations and the defaults are chosen with this application in mind but
780it can be used for displaying many qualitatively different samples.")
781 (license license:bsd-2)))
782
783(define-public python-cotengra
784 (package
785 (name "python-cotengra")
786 (version "0.8.0")
787 (source
788 (origin
789 (method git-fetch)
790 (uri (git-reference
791 (url "https://github.com/jcmgray/cotengra")
792 (commit (string-append "v" version))))
793 (file-name (git-file-name name version))
794 (sha256
795 (base32 "000z233s6nr2qmpjyn4sl1gym8a980xh2vf1jkvfjxfnrv40zl73"))))
796 (build-system pyproject-build-system)
797 (native-inputs
798 (list python-hatch-vcs
799 python-hatchling
800 python-pytest))
801 (propagated-inputs
802 (list python-autoray
803 python-matplotlib
804 python-seaborn))
805 (home-page "https://cotengra.readthedocs.io")
806 (synopsis
807 "Hyper optimized contraction trees")
808 (description
809 "This library allows for contracting tensor networks or einsum expressions
810involving large numbers of tensors. It includes drop-in replacements for
811@code{einsum} and @code{ncon}, an explicit contraction tree object, a hyper
812optimizer that samples trees while tuning the generating meta-parameters,
813dynamic slicing for massive memory savings and parallelism, simulated annealing
814as an alternative strategy for optimizing and slicing, and integrations with
815other libraries such as @code{numpy}, @code{opt_einsum}, @code{quimb}, and
816others.")
817 (license license:asl2.0)))
818
819(define-public python-cvxpy
820 (package
821 (name "python-cvxpy")
822 (version "1.7.5")
823 (source
824 (origin
825 (method git-fetch)
826 (uri (git-reference
827 (url "https://github.com/cvxpy/cvxpy")
828 (commit (string-append "v" version))))
829 (file-name (git-file-name name version))
830 (sha256
831 (base32 "0xawcpkfvp29wfb8g2dj8vnv6aslbs9mc03ddcdhpz0vdafp7vyd"))))
832 (build-system pyproject-build-system)
833 (arguments
834 (list
835 ;; tests: 1361 passed, 373 skipped, 5 deselected, 239 warnings, 29
836 ;; subtests passed
837 #:test-flags
838 #~(list #$@(map (lambda (test) (string-append "--deselect="
839 "cvxpy/tests/"
840 "test_cone2cone.py::"
841 test))
842 ;; cvxpy.error.SolverError: Either candidate conic
843 ;; solvers (['GLPK_MI', 'SCIPY']) do not support the
844 ;; cones output by the problem (SOC, NonNeg, Zero), or
845 ;; there are not enough constraints in the problem.
846 (list "TestSlacks::test_mi_socp_2"
847 ;; cvxpy.error.SolverError: Solver 'CVXOPT'
848 ;; failed. Try another solver, or solve with
849 ;; verbose=True for more information.
850 "TestOpRelConeQuad::test_oprelcone_1_m1_k3_complex"
851 "TestOpRelConeQuad::test_oprelcone_1_m3_k1_complex"
852 ;; cvxpy.error.SolverError: Solver 'CVXOPT'
853 ;; failed. Try another solver, or solve with
854 ;; verbose=True for more information.
855 "TestOpRelConeQuad::test_oprelcone_2"))
856 ;; TypeError: Array must be contiguous. A non-contiguous array
857 ;; was given.
858 "--deselect=cvxpy/tests/test_complex.py::TestComplex::test_sparse")
859 #:phases
860 #~(modify-phases %standard-phases
861 (add-before 'check 'set-ci-environment
862 (lambda _
863 ;; Activate hypothesis CI profile to suppress
864 ;; HealthCheck.too_slow which fails on slow build machines.
865 (setenv "CI" "1"))))))
866 (native-inputs
867 (list pybind11
868 python-pytest
869 python-setuptools))
870 (propagated-inputs
871 (list python-clarabel
872 python-numpy
873 python-osqp
874 python-scipy
875 python-scs
876 ;; [optional]
877 ;; python-cuopt-cu12
878 python-cvxopt
879 python-cylp
880 ;; python-daqp
881 ;; python-diffcp
882 python-ecos
883 ;; python-gurobipy
884 ;; python-highspy
885 ;; python-mosek
886 ;; python-nvidia-cuda-runtime-cu12
887 ;; python-ortools
888 ;; python-piqp
889 ;; python-proxsuite
890 ;; python-pyscipopt
891 ;; python-qoco
892 #;python-xpress))
893 (home-page "https://github.com/cvxpy/cvxpy")
894 (synopsis "DSL for modeling convex optimization problems")
895 (description
896 "This package provides a domain-specific language for modeling convex
897optimization problems in Python.")
898 (license license:asl2.0)))
899
900;; Note: Remember to update python-distributed when updating dask.
901(define-public python-dask
902 (package
903 (name "python-dask")
904 (version "2026.3.0")
905 (source
906 (origin
907 (method git-fetch)
908 (uri (git-reference
909 (url "https://github.com/dask/dask/")
910 (commit version)))
911 (file-name (git-file-name name version))
912 (sha256
913 (base32 "10w6ipxhx9gg14489gka4r0isp55xz3szgrx9f59424j240a5w15"))))
914 (build-system pyproject-build-system)
915 (arguments
916 (list
917 ;; tests: 15272 passed, 765 skipped, 313 xfailed, 280 xpassed, 7 warnings
918 #:test-flags
919 #~(list "-m" "not gpu and not slow and not network"
920 "--pyargs" "dask"
921 "--numprocesses" (number->string (min 4 (parallel-job-count)))
922 "--reruns=3"
923 "-k" (string-join
924 ;; This one cannot be interrupted.
925 (list "not test_interrupt"
926 ;; AttributeError: 'Array' object has no attribute
927 ;; 'expr'
928 "test_blockwise"
929 "test_is_dask_collection_doesnt_materialize"
930 ;; FileNotFoundError: [Errno 2] No such file or
931 ;; directory: 'taskset'
932 "test_cpu_affinity_taskset[affinity0]"
933 "test_cpu_affinity_taskset[affinity1]"
934 "test_cpu_affinity_taskset[affinity2]"
935 "test_cpu_affinity_taskset[affinity3]")
936 " and not "))
937 #:phases
938 #~(modify-phases %standard-phases
939 (add-before 'check 'remove-local-source
940 (lambda _
941 (delete-file-recursively "dask"))))))
942 (native-inputs
943 (list python-pytest
944 python-pytest-mock
945 python-pytest-rerunfailures
946 python-pytest-timeout
947 python-pytest-xdist
948 python-setuptools
949 python-setuptools-scm-next
950 tzdata-for-tests))
951 (propagated-inputs
952 (list python-click
953 python-cloudpickle
954 python-fsspec
955 python-packaging
956 python-partd
957 python-pyyaml
958 python-toolz
959 ;; [optional]
960 python-lz4
961 python-numpy
962 python-pandas
963 python-pyarrow))
964 (home-page "https://www.dask.org/")
965 (synopsis "Parallel computing with task scheduling")
966 (description
967 "Dask is a flexible parallel computing library for analytics. It
968consists of two components: dynamic task scheduling optimized for computation,
969and large data collections like parallel arrays, dataframes, and lists that
970extend common interfaces like NumPy, Pandas, or Python iterators to
971larger-than-memory or distributed environments. These parallel collections
972run on top of the dynamic task schedulers.")
973 (license license:bsd-3)))
974
975(define-public python-dask-gateway
976 (package
977 (name "python-dask-gateway")
978 (version "2026.3.0")
979 (source
980 (origin
981 (method git-fetch)
982 (uri (git-reference
983 (url "https://github.com/dask/dask-gateway")
984 (commit version)))
985 (file-name (git-file-name name version))
986 (sha256
987 (base32 "030693nl1rbsc9mpbny4hvx4rp44gw9cq242jwc6m97rj0n0cb5d"))))
988 (build-system pyproject-build-system)
989 (arguments
990 (list
991 #:tests? #f ;no tests
992 #:phases
993 #~(modify-phases %standard-phases
994 (add-after 'unpack 'chdir
995 (lambda _
996 (chdir "dask-gateway"))))))
997 (native-inputs
998 (list python-hatchling
999 python-pytest))
1000 (propagated-inputs
1001 (list python-aiohttp
1002 python-click
1003 python-dask
1004 python-distributed
1005 python-pyyaml
1006 python-tornado))
1007 (home-page "https://gateway.dask.org/")
1008 (synopsis "Client library for interacting with a dask-gateway server")
1009 (description
1010 "This package provides a client library for interacting with a
1011dask-gateway server.")
1012 (license license:bsd-3)))
1013
1014(define-public python-dask-image
1015 (package
1016 (name "python-dask-image")
1017 (version "2026.5.0")
1018 (source
1019 (origin
1020 (method git-fetch)
1021 (uri (git-reference
1022 (url "https://github.com/dask/dask-image")
1023 (commit (string-append "v" version))))
1024 (file-name (git-file-name name version))
1025 (sha256
1026 (base32 "0vz4f7c3fhj6lw4nvskdkjif13ymzibpvww8w21fzqkifrnxlij8"))))
1027 (build-system pyproject-build-system)
1028 ;; tests: 2171 passed, 178 skipped, 119 warnings
1029 (native-inputs
1030 (list python-pytest
1031 python-pytest-timeout
1032 python-setuptools
1033 python-setuptools-scm-next))
1034 (propagated-inputs
1035 (list python-dask
1036 python-numpy
1037 python-pims
1038 python-scipy
1039 python-tifffile
1040 ;; [optional]
1041 python-pandas))
1042 (home-page "https://github.com/dask/dask-image")
1043 (synopsis "Distributed image processing")
1044 (description "This is a package for image processing with Dask arrays.
1045Features:
1046
1047@itemize
1048@item Provides support for loading image files.
1049@item Implements commonly used N-D filters.
1050@item Includes a few N-D Fourier filters.
1051@item Provides some functions for working with N-D label images.
1052@item Supports a few N-D morphological operators.
1053@end itemize")
1054 (license license:bsd-3)))
1055
1056;; A bare minimal package, mainly to use in tests and reduce closure size.
1057;; Tests are left out in the main package to slim down native-inputs and
1058;; propagated-inputs.
1059(define-public python-dask-minimal
1060 (package/inherit python-dask
1061 (name "python-dask-minimal")
1062 (arguments
1063 (substitute-keyword-arguments arguments
1064 ((#:tests? _ #t) #f)))
1065 (native-inputs
1066 (list python-setuptools
1067 python-setuptools-scm-next))
1068 (propagated-inputs
1069 (list python-click
1070 python-cloudpickle
1071 python-fsspec
1072 python-packaging
1073 python-partd
1074 python-pyyaml
1075 python-toolz))))
1076
1077(define-public python-decaylanguage
1078 (package
1079 (name "python-decaylanguage")
1080 (version "1.0.0")
1081 (source
1082 (origin
1083 (method url-fetch)
1084 (uri (pypi-uri "decaylanguage" version))
1085 (sha256
1086 (base32 "14gam45rs90xg8qgng94fdava2rr17r9ps6mijsw925xdiwljpyh"))))
1087 (build-system pyproject-build-system)
1088 (arguments
1089 (list
1090 ;; This file fails to be collected with "DeprecationWarning: setDaemon()
1091 ;; is deprecated, set the daemon attribute instead".
1092 #:test-flags #~(list "--ignore" "tests/test_convert.py")))
1093 (propagated-inputs (list python-attrs
1094 python-graphviz
1095 python-hepunits
1096 python-lark
1097 python-numpy
1098 python-pandas
1099 python-particle
1100 python-plumbum))
1101 (native-inputs (list python-hatch-vcs
1102 python-hatchling
1103 python-pytest
1104 python-pytest-benchmark))
1105 (home-page "https://decaylanguage.readthedocs.io/en/latest/")
1106 (synopsis "Language to describe, manipulate and convert particle decays")
1107 (description "DecayLanguage implements a language to describe and convert
1108particle decays between digital representations, effectively making it
1109possible to interoperate several fitting programs. Particular interest is
1110given to programs dedicated to amplitude analyses.")
1111 (license license:bsd-3)))
1112
1113(define-public python-distributed
1114 (package
1115 (name "python-distributed")
1116 (version "2026.3.0")
1117 (source
1118 (origin
1119 (method git-fetch)
1120 (uri (git-reference
1121 (url "https://github.com/dask/distributed")
1122 (commit version)))
1123 (file-name (git-file-name name version))
1124 (sha256
1125 (base32 "1pdf3misfd9iycrd03prajmyvzp9j9p74nxk4zp27fz1jv04jawm"))))
1126 (build-system pyproject-build-system)
1127 (arguments
1128 (list
1129 ;; TODO: Test suite requires networking for most of the tests or special
1130 ;; care, find a way to enable some unit tests, see:
1131 ;; <.github/workflows/tests.yaml>.
1132 #:tests? #f))
1133 (native-inputs
1134 (list python-setuptools
1135 python-setuptools-scm-next))
1136 (propagated-inputs
1137 (list python-click
1138 python-cloudpickle
1139 python-dask
1140 python-jinja2
1141 python-locket
1142 python-msgpack
1143 python-packaging
1144 python-psutil
1145 python-pyyaml
1146 python-sortedcontainers
1147 python-tblib
1148 python-toolz
1149 python-tornado
1150 python-urllib3
1151 python-zict))
1152 (home-page "https://distributed.dask.org")
1153 (synopsis "Distributed scheduler for Dask")
1154 (description "Dask.distributed is a lightweight library for distributed
1155computing in Python. It extends both the @code{concurrent.futures} and
1156@code{dask} APIs to moderate sized clusters.")
1157 (license license:bsd-3)))
1158
1159(define-public python-dvc-data
1160 (package
1161 (name "python-dvc-data")
1162 (version "3.16.12")
1163 (home-page "https://github.com/iterative/dvc-data")
1164 (source (origin
1165 (method url-fetch)
1166 (uri (pypi-uri "dvc_data" version))
1167 (sha256
1168 (base32
1169 "156iwdn7v5jhwbpwz92n28qiasgcbmcqv9vxg8xbvdfxzlzw0b7r"))))
1170 (build-system pyproject-build-system)
1171 (propagated-inputs
1172 (list python-attrs
1173 python-dictdiffer
1174 python-diskcache
1175 python-dvc-objects
1176 python-fsspec
1177 python-funcy-1.14
1178 python-orjson
1179 python-pygtrie
1180 python-sqltrie
1181 python-tqdm))
1182 (native-inputs
1183 (list python-click
1184 python-pytest
1185 python-pytest-benchmark
1186 python-pytest-mock
1187 ;; python-pytest-servers is not packaged in Guix yet
1188 python-setuptools
1189 python-setuptools-scm
1190 python-typer
1191 python-wheel))
1192 (arguments
1193 (list
1194 #:test-flags
1195 ;; TODO: package python-pytest-server with its transitive dependencies
1196 #~(list "--ignore=tests/hashfile/test_db.py"
1197 "--ignore=tests/hashfile/test_db_index.py"
1198 "--ignore=tests/hashfile/test_obj.py"
1199 "--ignore=tests/index/test_build.py"
1200 "--ignore=tests/index/test_checkout.py"
1201 "--ignore=tests/index/test_fs.py"
1202 "--ignore=tests/index/test_index.py"
1203 "--ignore=tests/index/test_storage.py")
1204 #:phases
1205 #~(modify-phases %standard-phases
1206 (add-after 'unpack 'patch-pyproject
1207 (lambda _
1208 ;; setuptools cannot handle both license and license-files
1209 (substitute* "pyproject.toml"
1210 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
1211 (("^license-files = .*") "")))))))
1212 (synopsis "DVC's data management subsystem")
1213 (description "Dvc data is DVC's data management subsystem.")
1214 (license license:asl2.0)))
1215
1216(define-public python-dvc-objects
1217 (package
1218 (name "python-dvc-objects")
1219 (version "5.1.1")
1220 (home-page "https://github.com/iterative/dvc-objects")
1221 (source
1222 (origin
1223 (method url-fetch)
1224 (uri (pypi-uri "dvc_objects" version))
1225 (sha256
1226 (base32 "1amx5z8k2v2hbsajg0dcd5dxmmlv9bnbchpas95s8sj86cm8yc4y"))))
1227 (build-system pyproject-build-system)
1228 (propagated-inputs (list python-fsspec
1229 python-funcy-1.14))
1230 (native-inputs
1231 (list python-mypy
1232 python-pytest
1233 python-pytest-asyncio
1234 python-pytest-benchmark
1235 python-pytest-mock
1236 python-pytest-sugar
1237 python-reflink
1238 python-setuptools
1239 python-setuptools-scm
1240 python-wheel))
1241 (synopsis "Filesystem and object-db level abstractions for DVC")
1242 (description "Dvc objects provides a filesystem and object-db level
1243abstractions to use in dvc and dvc-data.")
1244 (license license:asl2.0)))
1245
1246(define-public python-ecos
1247 (package
1248 (name "python-ecos")
1249 (version "2.0.13")
1250 (source
1251 (origin
1252 (method git-fetch)
1253 (uri (git-reference
1254 (url "https://github.com/embotech/ecos-python")
1255 (commit (string-append "v" version))
1256 (recursive? #true)))
1257 (file-name (git-file-name name version))
1258 (sha256
1259 (base32 "16ljq8maflfkgbw16rldg6cy14vgz2pb3b2iga60i7yzkq2ikmyw"))))
1260 (build-system pyproject-build-system)
1261 (propagated-inputs (list python-numpy python-scipy))
1262 (native-inputs (list python-pytest python-setuptools python-wheel))
1263 (home-page "https://github.com/embotech/ecos")
1264 (synopsis "Embedded Cone Solver")
1265 (description
1266 "This is the Python package for ECOS: Embedded Cone Solver. ECOS is
1267numerical software for solving convex second-order cone programs (SOCPs).")
1268 (license license:gpl3)))
1269
1270(define-public python-efficient-apriori
1271 (package
1272 (name "python-efficient-apriori")
1273 (version "2.0.6")
1274 (source
1275 (origin
1276 (method url-fetch)
1277 (uri (pypi-uri "efficient_apriori" version))
1278 (sha256
1279 (base32 "0vmdp8qkir7jrmwgpzajssyxh6q78m0q16pr1v657vla9x5wxn2s"))))
1280 (build-system pyproject-build-system)
1281 (arguments
1282 (list
1283 #:test-flags
1284 #~(list "--doctest-modules" "-vv" "efficient_apriori")))
1285 (native-inputs (list python-setuptools python-pytest))
1286 (home-page "https://github.com/tommyod/Efficient-Apriori")
1287 (synopsis "An efficient Python implementation of the Apriori algorithm.")
1288 (description "An efficient Python implementation of the Apriori algorithm,
1289which uncovers hidden structures in categorical data")
1290 (license license:expat)))
1291
1292(define-public python-einops
1293 (package
1294 (name "python-einops")
1295 (version "0.8.1")
1296 (source
1297 (origin
1298 (method git-fetch) ;PyPI misses .ipynb files required for tests
1299 (uri (git-reference
1300 (url "https://github.com/arogozhnikov/einops")
1301 (commit (string-append "v" version))))
1302 (file-name (git-file-name name version))
1303 (sha256
1304 (base32 "07xd5a4sya3mr003f17hxykcbq3zf3mnr51qagv7fy55qcnbkn97"))))
1305 (build-system pyproject-build-system)
1306 (arguments
1307 (list
1308 #:test-flags
1309 ;; Skip optional dependency on Jupyter during tests.
1310 #~(list "--ignore=scripts/test_notebooks.py")
1311 #:phases
1312 #~(modify-phases %standard-phases
1313 (add-after 'unpack 'set-backend
1314 (lambda _
1315 ;; Einops supports different backends, but we test
1316 ;; only NumPy for availability and simplicity.
1317 (setenv "EINOPS_TEST_BACKENDS" "numpy"))))))
1318 (native-inputs
1319 (list python-hatchling
1320 python-nbconvert
1321 python-nbformat
1322 python-parameterized
1323 python-pytest))
1324 (propagated-inputs
1325 (list python-numpy))
1326 (home-page "https://einops.rocks/")
1327 (synopsis "Tensor operations for different backends")
1328 (description
1329 "Einops provides a set of tensor operations for NumPy and multiple deep
1330learning frameworks.")
1331 (license license:expat)))
1332
1333(define-public python-fast-array-utils
1334 (package
1335 (name "python-fast-array-utils")
1336 (version "1.4.1")
1337 (source
1338 (origin
1339 (method git-fetch)
1340 (uri (git-reference
1341 (url "https://github.com/scverse/fast-array-utils")
1342 (commit (string-append "v" version))))
1343 (file-name (git-file-name name version))
1344 (sha256
1345 (base32 "07qbsbsmzycxa5nib39zp7rfwcj3cvqyg4mpfkdn7xg2bmqprl7n"))))
1346 (build-system pyproject-build-system)
1347 (arguments
1348 ;; tests: 1455 passed, 1621 skipped, 232 deselected
1349 (list #:test-flags #~(list "-m" "not benchmark")))
1350 (native-inputs
1351 (list python-dask-minimal
1352 python-hatch-docstring-description
1353 python-hatch-fancy-pypi-readme
1354 python-hatch-vcs
1355 python-hatchling
1356 python-numba
1357 python-packaging
1358 python-pytest
1359 python-pytest-doctestplus
1360 python-scipy-minimal))
1361 (propagated-inputs
1362 (list python-numpy))
1363 (home-page "https://fast-array-utils.scverse.org/")
1364 (synopsis "Fast array utilities")
1365 (description
1366 "This package provides fast array utilities with minimal dependencies.")
1367 (license license:mpl2.0)))
1368
1369(define-public python-fast-histogram
1370 (package
1371 (name "python-fast-histogram")
1372 (properties '((commit . "92ed2049a2e24b15993bb770e96a5d21f4736be3")
1373 (revision . "0")))
1374 (version (git-version "0.14"
1375 (assoc-ref properties 'revision)
1376 (assoc-ref properties 'commit)))
1377 (source
1378 (origin
1379 (method git-fetch)
1380 (uri (git-reference
1381 (url "https://github.com/astrofrog/fast-histogram")
1382 (commit (assoc-ref properties 'commit))))
1383 (file-name (git-file-name name version))
1384 (sha256
1385 (base32 "0iqgrnzs2w0v36iyp9782lxc8nji2v7fvs1k90pnrrf6r3w98p0v"))))
1386 (build-system pyproject-build-system)
1387 (arguments
1388 (list
1389 #:test-flags
1390 ;; XXX: Too many bins for data range.
1391 #~(list "-k" "not test_1d_compare_with_numpy")
1392 #:phases
1393 #~(modify-phases %standard-phases
1394 (add-before 'check 'build-extensions
1395 (lambda _
1396 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
1397 (native-inputs
1398 (list python-hypothesis
1399 python-pytest
1400 python-setuptools
1401 python-setuptools-scm
1402 python-wheel))
1403 (propagated-inputs
1404 (list python-numpy))
1405 (home-page "https://github.com/astrofrog/fast-histogram")
1406 (synopsis "Fast simple 1D and 2D histograms")
1407 (description
1408 "The fast-histogram mini-package aims to provide simple and fast
1409histogram functions for regular bins that don't compromise on performance. It
1410doesn't do anything complicated - it just implements a simple histogram
1411algorithm in C and keeps it simple. The aim is to have functions that are
1412fast but also robust and reliable. The result is a 1D histogram function here
1413that is 7-15x faster than @code{numpy.histogram}, and a 2D histogram function
1414that is 20-25x faster than @code{numpy.histogram2d}.")
1415 (license license:bsd-3)))
1416
1417(define-public python-fastcluster
1418 (package
1419 (name "python-fastcluster")
1420 (version "1.3.0")
1421 (source
1422 (origin
1423 (method url-fetch)
1424 (uri (pypi-uri "fastcluster" version))
1425 (sha256
1426 (base32 "00nzjrk8cp3kwm0qax5xxg61dxq9b8s3jspsqx4skyn3lpmkl8ym"))))
1427 (build-system pyproject-build-system)
1428 (native-inputs
1429 (list python-pytest
1430 python-scipy
1431 python-setuptools))
1432 (propagated-inputs
1433 (list python-numpy))
1434 (home-page "https://danifold.net/fastcluster.html")
1435 (synopsis "Fast hierarchical clustering routines for R and Python")
1436 (description "The fastcluster package implements seven common hierarchical
1437clustering schemes efficiently. The package is made with two interfaces to
1438standard software: R and Python.")
1439 (license license:bsd-2)))
1440
1441;; XXX: Not maintained since 2019. The project was archived by the owner on
1442;; Nov 2, 2020. It is now read-only.
1443(define-public python-fbpca
1444 (package
1445 (name "python-fbpca")
1446 (version "1.0")
1447 (source (origin
1448 (method url-fetch)
1449 (uri (pypi-uri "fbpca" version))
1450 (sha256
1451 (base32
1452 "1lbjqhqsdmqk86lb86q3ywf7561zmdny1dfvgwqkyrkr4ij7f1hm"))))
1453 (build-system pyproject-build-system)
1454 (arguments
1455 (list
1456 #:test-flags
1457 ;; TypeError: 'dia_matrix' object is not subscriptable
1458 #~(list "--deselect=fbpca.py::TestPCA::test_sparse"
1459 "fbpca.py")))
1460 (native-inputs (list python-pytest python-setuptools))
1461 (propagated-inputs
1462 (list python-numpy python-scipy))
1463 (home-page "https://fbpca.readthedocs.io/")
1464 (synopsis "Functions for principal component analysis and accuracy checks")
1465 (description
1466 "This package provides fast computations for @dfn{principal component
1467analysis} (PCA), SVD, and eigendecompositions via randomized methods")
1468 (license license:bsd-3)))
1469
1470(define-public python-fgivenx
1471 (package
1472 (name "python-fgivenx")
1473 ;; See: https://github.com/handley-lab/fgivenx/issues/30
1474 (properties '((commit . "cf51dbf8b7efdd8d84f055740a069a5b882dcf77")
1475 (revision . "0")))
1476 (version (git-version "2.4.2"
1477 (assoc-ref properties 'revision)
1478 (assoc-ref properties 'commit)))
1479 (source
1480 (origin
1481 (method git-fetch)
1482 (uri (git-reference
1483 (url "https://github.com/handley-lab/fgivenx")
1484 (commit (assoc-ref properties 'commit))))
1485 (file-name (git-file-name name version))
1486 (sha256
1487 (base32 "1z9lwrjvz977gk6z7zqj8d21yi0xcz67mj1737yzzdc8c03nzg9w"))))
1488 (build-system pyproject-build-system)
1489 ;; tests: 25 passed, 1 warning
1490 (native-inputs
1491 (list python-pytest
1492 python-pytest-mpl
1493 python-setuptools))
1494 (propagated-inputs
1495 (list python-matplotlib
1496 python-numpy
1497 python-scipy
1498 ;; [optional]
1499 python-getdist
1500 python-joblib
1501 python-tqdm))
1502 (home-page "https://github.com/handley-lab/fgivenx")
1503 (synopsis "Functional Posterior Plotter")
1504 (description
1505 "@code{fgivenx} is a Python package for plotting posteriors of functions.
1506It is currently used in astronomy, but will be of use to any scientists
1507performing Bayesian analyses which have predictive posteriors that are
1508functions.
1509
1510This package allows one to plot a predictive posterior of a function,
1511dependent on sampled parameters. It assumes one has a Bayesian posterior
1512@code{Post(theta|D,M)} described by a set of posterior samples
1513@code{{theta_i}~Post}. If there is a function parameterised by theta
1514@code{y=f(x;theta)}, then this script will produce a contour plot of the
1515conditional posterior @code{P(y|x,D,M)} in the @code{(x,y)} plane.")
1516 (license license:expat)))
1517
1518(define-public python-findiff
1519 (package
1520 (name "python-findiff")
1521 (version "0.13.1")
1522 (source
1523 (origin
1524 (method url-fetch)
1525 (uri (pypi-uri "findiff" version))
1526 (sha256
1527 (base32 "1zrfls5azm724a9c93dl9cc529zmq6dzcdrc1lqpaxkhbvd6xb9s"))))
1528 (build-system pyproject-build-system)
1529 (native-inputs
1530 (list python-pytest
1531 python-setuptools
1532 python-setuptools-scm))
1533 (propagated-inputs
1534 (list python-numpy
1535 python-scipy
1536 python-sympy))
1537 (home-page "https://github.com/maroba/findiff")
1538 (synopsis "Numerical derivatives and partial differential equations")
1539 (description
1540 "This package provides a Python package for finite difference derivatives
1541in any number of dimensions.")
1542 (license license:expat)))
1543
1544(define-public python-flox
1545 (package
1546 (name "python-flox")
1547 ;; 0.11.2 (2026-02-26); the latest changes provide tests fixtures.
1548 (properties '((commit . "d2857f323a3f5b7c737b34e8cfc09492cc9ef2bf")
1549 (revision . "0")))
1550 (version (git-version "0.11.2"
1551 (assoc-ref properties 'revision)
1552 (assoc-ref properties 'commit)))
1553 (source
1554 (origin
1555 (method git-fetch)
1556 (uri (git-reference
1557 (url "https://github.com/xarray-contrib/flox")
1558 (commit (assoc-ref properties 'commit))))
1559 (file-name (git-file-name name version))
1560 (sha256
1561 (base32 "1m0svx2pdrfc8zps1kkzg12i9ncpz1mah9k8q467p6jjl8a5y7yc"))))
1562 (build-system pyproject-build-system)
1563 (arguments
1564 (list
1565 ;; tests: 10998 passed, 8264 skipped, 156 xfailed, 3 xpassed, 1376
1566 ;; warnings
1567 #:test-flags
1568 #~(list "--numprocesses" (number->string (parallel-job-count))
1569 ;; These are benchmark tests.
1570 "--ignore" "tests/test_asv.py"
1571 ;; Failed with DeadlineExceeded exeption.
1572 "--deselect=tests/test_properties.py::test_first_last"
1573 #$@(map (lambda (test)
1574 (string-append "--deselect=tests/test_cohorts.py"
1575 test))
1576 ;; Failed to compare snapshoted arrays.
1577 (list "::test_snapshot_cohorts[ERA5DayOfYear]"
1578 "::test_snapshot_cohorts[ERA5Google]"
1579 "::test_snapshot_cohorts[ERA5MonthHour]"
1580 "::test_snapshot_cohorts[ERA5MonthHourRechunked]"
1581 "::test_snapshot_cohorts[OISST]"
1582 "::test_snapshot_cohorts[PerfectBlockwiseResampling]"
1583 "::test_snapshot_cohorts[PerfectMonthly]"
1584 "::test_snapshot_cohorts[RandomBigArray]"
1585 "::test_snapshot_cohorts[SingleChunk]"
1586 "::test_snapshot_cohorts[NWMMidwest]")))))
1587 (native-inputs
1588 (list python-netcdf4
1589 python-pytest
1590 python-pytest-snapshot
1591 python-pytest-xdist
1592 python-setuptools
1593 python-setuptools-scm))
1594 (propagated-inputs
1595 (list python-numpy
1596 python-numpy-groupies
1597 python-packaging
1598 python-pandas
1599 python-scipy
1600 python-toolz
1601 ;; [optional]
1602 ;; python-asv ;not packaged yet in Guix
1603 python-cachey
1604 python-cftime
1605 ;; python-cubed ;not packaged yet in Guix
1606 python-dask
1607 python-lxml
1608 python-matplotlib
1609 python-numba
1610 python-numbagg
1611 python-sparse
1612 python-xarray
1613 python-zarr))
1614 (home-page "https://github.com/xarray-contrib/flox")
1615 (synopsis "GroupBy operations for @code{dask.array}")
1616 (description
1617 "@code{flox} mainly provides strategies for fast GroupBy reductions with
1618@code{dask.array}. It uses the MapReduce paradigm (or a \"tree reduction\")
1619to run the GroupBy operation in a parallel-native way totally avoiding a sort
1620or shuffle operation. @code{flox} can use either @code{dask} or @code{cubed}
1621as its backend.")
1622 (license license:asl2.0)))
1623
1624(define-public python-formulaic
1625 (package
1626 (name "python-formulaic")
1627 (version "1.2.2")
1628 (source
1629 (origin
1630 (method git-fetch)
1631 (uri (git-reference
1632 (url "https://github.com/matthewwardrop/formulaic")
1633 (commit (string-append "v" version))))
1634 (file-name (git-file-name name version))
1635 (sha256
1636 (base32 "0iifwsbsqwg4lx8m9b2rclr9jzpg7zgnly0iaf1nsva15jxi90hb"))))
1637 (build-system pyproject-build-system)
1638 (native-inputs
1639 (list python-hatchling
1640 python-hatch-vcs
1641 python-pytest
1642 python-sympy))
1643 (propagated-inputs
1644 (list python-interface-meta
1645 python-narwhals
1646 python-numpy
1647 python-pandas
1648 python-scipy
1649 python-typing-extensions
1650 python-wrapt))
1651 (home-page "https://github.com/matthewwardrop/formulaic")
1652 (synopsis "Implementation of Wilkinson formulas")
1653 (description "Formulaic is a high-performance implementation of Wilkinson
1654formulas for Python.")
1655 (license license:expat)))
1656
1657(define-public python-geosketch
1658 (package
1659 (name "python-geosketch")
1660 (version "1.3")
1661 (source
1662 (origin
1663 (method git-fetch)
1664 (uri (git-reference
1665 (url "https://github.com/brianhie/geosketch")
1666 (commit (string-append "v" version))))
1667 (file-name (git-file-name name version))
1668 (sha256
1669 (base32 "0lnynk4r87zqck5mmj33axmly34hh7lrlmfy1qidrw7xihy28g5a"))))
1670 (build-system pyproject-build-system)
1671 ;; XXX: Avoid circular dependency on python-scanorama.
1672 (arguments (list #:tests? #f))
1673 (native-inputs (list python-setuptools))
1674 (propagated-inputs (list python-fbpca python-numpy python-scikit-learn))
1675 (home-page "https://github.com/brianhie/geosketch")
1676 (synopsis "Geometry-preserving random sampling")
1677 (description "geosketch is a Python package that implements the geometric
1678sketching algorithm described by Brian Hie, Hyunghoon Cho, Benjamin DeMeo,
1679Bryan Bryson, and Bonnie Berger in \"Geometric sketching compactly summarizes
1680the single-cell transcriptomic landscape\", Cell Systems (2019). This package
1681provides an example implementation of the algorithm as well as scripts
1682necessary for reproducing the experiments in the paper.")
1683 (license license:expat)))
1684
1685(define-public python-hepunits
1686 (package
1687 (name "python-hepunits")
1688 (version "2.4.6")
1689 (source
1690 (origin
1691 (method git-fetch)
1692 (uri (git-reference
1693 (url "https://github.com/scikit-hep/hepunits")
1694 (commit (string-append "v" version))))
1695 (file-name (git-file-name name version))
1696 (sha256
1697 (base32 "0xkgaf7kmj1zrr8vd65xnam43xb9bd70q3kg7fvlshmd51k8z35r"))))
1698 (build-system pyproject-build-system)
1699 (native-inputs
1700 (list python-hatch-vcs
1701 python-hatchling
1702 python-pint
1703 python-pytest))
1704 (home-page "https://github.com/scikit-hep/hepunits")
1705 (synopsis "Units and constants in the HEP system of units")
1706 (description "@code{hepunits} collects the most commonly used units and
1707constants in the HEP System of Units, as derived from the basic units
1708originally defined by the CLHEP project.")
1709 (license license:bsd-3)))
1710
1711(define-public python-hist
1712 (package
1713 (name "python-hist")
1714 (version "2.10.1")
1715 (source
1716 (origin
1717 (method url-fetch)
1718 (uri (pypi-uri "hist" version))
1719 (sha256
1720 (base32 "0bhv8bf7zizxf7nsps5hyfppjk1ry0z6pwrwhz44xmm6g6nfdj6y"))))
1721 (build-system pyproject-build-system)
1722 (propagated-inputs (list python-boost-histogram
1723 python-histoprint
1724 python-numpy
1725 python-typing-extensions))
1726 (native-inputs (list python-hatch-vcs
1727 python-hatchling
1728 python-pytest
1729 python-pytest-mpl))
1730 (home-page "https://hist.readthedocs.io/en/latest/")
1731 (synopsis "Hist classes and utilities")
1732 (description
1733 "Hist is an analyst-friendly front-end for @code{boost-histogram}.")
1734 (license license:bsd-3)))
1735
1736(define-public python-histoprint
1737 (package
1738 (name "python-histoprint")
1739 (version "2.7.1")
1740 (source
1741 (origin
1742 (method git-fetch)
1743 (uri (git-reference
1744 (url "https://github.com/scikit-hep/histoprint")
1745 (commit (string-append "v" version))))
1746 (file-name (git-file-name name version))
1747 (sha256
1748 (base32 "03ydf3g5y6w7jx1ai7kg4fsdbjf2bjrr3dmv05wrbq7hb8ccb0y9"))))
1749 (build-system pyproject-build-system)
1750 (native-inputs
1751 (list python-hatch-vcs
1752 python-hatchling
1753 python-pytest))
1754 (propagated-inputs
1755 (list python-click
1756 python-numpy
1757 python-uhi
1758 ;; [optional]
1759 python-awkward
1760 python-boost-histogram
1761 python-rich
1762 python-uproot))
1763 (home-page "https://github.com/scikit-hep/histoprint")
1764 (synopsis "Pretty print histograms to the console")
1765 (description "Histoprint uses a mix of terminal color codes and Unicode
1766trickery (i.e. combining characters) to plot overlaying histograms.")
1767 (license license:expat)))
1768
1769(define-public python-imagehash
1770 (package
1771 (name "python-imagehash")
1772 (version "4.3.2")
1773 (source
1774 (origin
1775 (method git-fetch) ;no tests in PyPI
1776 (uri (git-reference
1777 ;; It's an effective and maintained fork of
1778 ;; <https://github.com/bunchesofdonald/photohash> project, which
1779 ;; has the latest release in 2016.
1780 (url "https://github.com/JohannesBuchner/imagehash")
1781 (commit (string-append "v" version))))
1782 (file-name (git-file-name name version))
1783 (sha256
1784 (base32 "1rz1fpwhcx0cbln189bcs61wlwgngcjcn77jvm0yji5s7lshhipy"))))
1785 (build-system pyproject-build-system)
1786 (arguments
1787 (list
1788 #:phases
1789 #~(modify-phases %standard-phases
1790 ;; Upstream plans to remove Python 2 compatibility:
1791 ;; https://github.com/JohannesBuchner/imagehash/pull/223
1792 (add-after 'unpack 'remove-six
1793 (lambda _
1794 (substitute* (find-files "." ".py$")
1795 (("import six") "")
1796 (("six\\.assertRaisesRegex\\(self, ")
1797 "self.assertRaisesRegex(")
1798 (("six\\.exec_") "")))))))
1799 (native-inputs
1800 (list python-pytest
1801 python-setuptools
1802 python-wheel))
1803 (propagated-inputs
1804 (list python-numpy
1805 python-pillow
1806 python-pywavelets
1807 python-scipy))
1808 (home-page "https://github.com/JohannesBuchner/imagehash")
1809 (synopsis "Perceptual Image Hashing library")
1810 (description
1811 "This package implements a functionality to tell whether two images look
1812nearly identical. The image hash algorithms (average, perceptual, difference,
1813wavelet) analyse the image structure on luminance (without color information).
1814The color hash algorithm analyses the color distribution and black & gray
1815fractions (without position information).
1816
1817Features:
1818@itemize
1819@item average hashing
1820@item perceptual hashing
1821@item difference hashing
1822@item wavelet hashing
1823@item HSV color hashing (colorhash)
1824@item crop-resistant hashing
1825@end itemize")
1826 (license license:bsd-2)))
1827
1828(define-public python-iminuit
1829 (package
1830 (name "python-iminuit")
1831 ;; TODO: PyPI archive bundles https://github.com/root-project/root which
1832 ;; is shipped as a git submodule in "extern/root", it would be nice to have
1833 ;; Root on board in Guix.
1834 (version "2.32.0")
1835 (source
1836 (origin
1837 (method url-fetch)
1838 (uri (pypi-uri "iminuit" version))
1839 (sha256
1840 (base32 "1lpprnn6h1f065b4aay6cr2bk6s5h3fv3gfnbbkrp5b5hv8k8ax3"))))
1841 (build-system pyproject-build-system)
1842 (native-inputs
1843 (list python-pytest
1844 python-scikit-build-core
1845 python-scipy-minimal))
1846 (propagated-inputs
1847 (list python-numpy))
1848 (home-page "https://github.com/scikit-hep/iminuit")
1849 (synopsis "Python interface for MINUIT2")
1850 (description
1851 "@code{iminuit} is a Jupyter-friendly Python interface for the @code{Minuit2}
1852C++ library maintained by CERN's ROOT team.
1853
1854Minuit was designed to optimize statistical cost functions, for
1855maximum-likelihood and least-squares fits. It provides the best-fit
1856parameters and error estimates from likelihood profile analysis.
1857
1858Optionally, Iminuit supports SciPy minimizers as alternatives to Minuit's
1859MIGRAD algorithm and Numba accelerated functions.")
1860 ;; Python interface under MIT Expat, Iminuit C++ library under LGPL v2.1+.
1861 (license (list license:expat license:lgpl2.1+))))
1862
1863(define-public python-jacobi
1864 (package
1865 (name "python-jacobi")
1866 (version "0.9.2")
1867 (source
1868 (origin
1869 (method url-fetch)
1870 (uri (pypi-uri "jacobi" version))
1871 (sha256
1872 (base32 "0a08680q6rnl6b1azq0lzd8r08pgnjd9ynwivb1g2vi4ccb4h7y1"))))
1873 (build-system pyproject-build-system)
1874 (arguments
1875 (list
1876 #:phases
1877 #~(modify-phases %standard-phases
1878 (add-after 'unpack 'fix-pytest-config
1879 (lambda _
1880 (substitute* "pyproject.toml"
1881 ;; AttributeError: module 'numpy' has no attribute
1882 ;; 'VisibleDeprecationWarning'
1883 ((".*error::numpy.VisibleDeprecationWarning.*") "")))))))
1884 (native-inputs
1885 (list python-pytest
1886 python-pytest-benchmark
1887 python-setuptools
1888 python-setuptools-scm))
1889 (propagated-inputs
1890 (list python-numpy))
1891 (home-page "https://github.com/hdembinski/jacobi")
1892 (synopsis "Compute numerical derivatives")
1893 (description
1894 "This package provides fast numerical derivatives for analytic
1895functions with arbitrary round-off error and error propagation.")
1896 (license license:expat)))
1897
1898(define-public python-janitor-rs
1899 (package
1900 (name "python-janitor-rs")
1901 (version "0.6.1")
1902 (source
1903 (origin
1904 ;; The upstream git source has no tags.
1905 (method url-fetch)
1906 (uri (pypi-uri "janitor_rs" version))
1907 (sha256
1908 (base32 "0xicxplz8vngbj4s6c7d08gpivns5bda85020yf1wjs8788g9m2l"))))
1909 (build-system pyproject-build-system)
1910 (arguments
1911 (list
1912 #:tests? #f ; No tests.
1913 #:imported-modules `(,@%cargo-build-system-modules
1914 ,@%pyproject-build-system-modules)
1915 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1916 (guix build pyproject-build-system)
1917 (guix build utils))
1918 #:phases
1919 #~(modify-phases %standard-phases
1920 (add-after 'unpack 'prepare-cargo-build-system
1921 (lambda args
1922 (for-each
1923 (lambda (phase)
1924 (format #t "Running cargo phase: ~a~%" phase)
1925 (apply (assoc-ref cargo:%standard-phases phase)
1926 #:vendor-dir ".cargo/vendor"
1927 #:cargo-target #$(cargo-triplet)
1928 args))
1929 '(unpack-rust-crates
1930 configure
1931 check-for-pregenerated-files
1932 patch-cargo-checksums)))))))
1933 (native-inputs (append
1934 (list maturin
1935 rust
1936 `(,rust "cargo"))
1937 (or (and=> (%current-target-system)
1938 (compose list make-rust-sysroot))
1939 '())))
1940 (inputs (cargo-inputs 'janitor-rs))
1941 (home-page "https://github.com/pyjanitor-devs/janitor-rs")
1942 (synopsis "Rust library for faster pyjanitor")
1943 (description
1944 "This package provides a Rust library to improve the performance of
1945@code{python-pyjanitor}.")
1946 (license license:expat)))
1947
1948(define-public python-legendkit
1949 (package
1950 (name "python-legendkit")
1951 (version "0.3.6")
1952 (source
1953 (origin
1954 (method git-fetch) ;no tests in PyPI archive
1955 (uri (git-reference
1956 (url "https://github.com/Marsilea-viz/legendkit")
1957 (commit (string-append "v" version))))
1958 (file-name (git-file-name name version))
1959 (sha256
1960 (base32 "03xdhh95w4zydwa4ahp3gyfa6i60c9s5arfcj366knckb1bnpnn9"))))
1961 (build-system pyproject-build-system)
1962 (native-inputs
1963 (list python-hatchling
1964 python-pytest))
1965 (propagated-inputs
1966 (list python-matplotlib))
1967 (home-page "https://github.com/Marsilea-viz/legendki")
1968 (synopsis "Legend creation and manipulation for matplotlib")
1969 (description
1970 "This package implements a functionality to create and manipulate plot
1971legends for @code{matplotlib}.")
1972 (license license:expat)))
1973
1974(define-public python-libneuroml
1975 (package
1976 (name "python-libneuroml")
1977 (version "0.6.7")
1978 (source
1979 (origin
1980 (method git-fetch)
1981 (uri (git-reference
1982 (url "https://github.com/NeuralEnsemble/libNeuroML.git")
1983 (commit (string-append "v" version))))
1984 (file-name (git-file-name name version))
1985 (sha256
1986 (base32 "1x5sgm0250zdfnw16cbmgl45hz2kfmww5lghpyhlcadgnbzyq3dx"))))
1987 (build-system pyproject-build-system)
1988 ;; tests: 116 passed, 5 xfailed, 5 warnings
1989 (native-inputs
1990 (list python-pytest
1991 python-numpy
1992 python-setuptools
1993 python-tables))
1994 (propagated-inputs
1995 (list python-lxml
1996 python-natsort
1997 python-networkx))
1998 (home-page "https://libneuroml.readthedocs.org/en/latest/")
1999 (synopsis
2000 "Python library for working with NeuroML descriptions of neuronal models")
2001 (description
2002 "This package provides a Python library for working with NeuroML descriptions of
2003neuronal models")
2004 (license license:bsd-3)))
2005
2006(define-public python-marsilea
2007 (package
2008 (name "python-marsilea")
2009 (version "0.6.2")
2010 (source
2011 (origin
2012 (method git-fetch)
2013 (uri (git-reference
2014 (url "https://github.com/Marsilea-viz/marsilea")
2015 (commit (string-append "v" version))))
2016 (file-name (git-file-name name version))
2017 (sha256
2018 (base32 "0i7n44fzy8qibdk8jc6f1g356xa10cc7fr64dhpqkrsp9sz6kx70"))))
2019 (build-system pyproject-build-system)
2020 (arguments
2021 (list
2022 #:phases
2023 #~(modify-phases %standard-phases
2024 (add-before 'build 'set-version
2025 (lambda _
2026 (substitute* "pyproject.toml"
2027 ((".*uv-dynamic-versioning>.*") "")
2028 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")))))))
2029 (native-inputs
2030 (list python-hatch-vcs
2031 python-hatchling
2032 python-pytest))
2033 (propagated-inputs
2034 (list python-legendkit
2035 python-matplotlib
2036 python-numpy
2037 python-pandas
2038 python-platformdirs
2039 python-scipy
2040 python-seaborn
2041 ;; [optional]
2042 python-fastcluster
2043 python-pyarrow)) ;extra == "parquet"
2044 (home-page "https://github.com/Marsilea-viz/marsilea")
2045 (synopsis "Declarative creation of composable visualizations")
2046 (description
2047 "Marsilea is a Python library for creating composable visualizations in a
2048declarative way. It is built on top of Matplotlib and provides a high-level
2049API for you to puzzle different visualizations together like logo.")
2050 (license license:expat)))
2051
2052(define-public python-maxent-disaggregation
2053 (package
2054 (name "python-maxent-disaggregation")
2055 (version "1.3.1")
2056 (source
2057 (origin
2058 (method git-fetch)
2059 (uri (git-reference
2060 (url "https://github.com/jakobsarthur/maxent_disaggregation")
2061 (commit (string-append "v" version))))
2062 (file-name (git-file-name name version))
2063 (sha256
2064 (base32 "0iqvgm5vcaj34wgbiyq6f7kqqyyvvj8wlc2fjanrsgnyp7imnvjd"))))
2065 (build-system pyproject-build-system)
2066 (native-inputs
2067 (list python-corner
2068 python-matplotlib
2069 python-pytest
2070 python-setuptools))
2071 (propagated-inputs
2072 (list nlopt python-numpy
2073 python-scipy))
2074 (home-page "https://github.com/jakobsarthur/maxent_disaggregation")
2075 (synopsis "Propagate uncertainty when disaggregating data")
2076 (description
2077 "This package provides tooling to help with the propagation of
2078uncertainty when disaggregating data, using the maximum entropy principle.")
2079 (license license:expat)))
2080
2081(define-public python-meshzoo
2082 (package
2083 (name "python-meshzoo")
2084 (version "0.9.4")
2085 (source
2086 (origin
2087 (method git-fetch)
2088 (uri (git-reference
2089 (url "https://github.com/diego-hayashi/meshzoo")
2090 (commit (string-append "v" version))))
2091 (file-name (git-file-name name version))
2092 (sha256
2093 (base32 "107byfppbq16fqyp2hw7ydcvvahspzq0hzvlvzqg2zxi1aigbr68"))))
2094 (build-system pyproject-build-system)
2095 (propagated-inputs
2096 (list python-numpy))
2097 (native-inputs (list python-flit-core python-matplotlib python-pytest))
2098 (home-page "https://github.com/diego-hayashi/meshzoo")
2099 (synopsis "Mesh generator for simple geometries")
2100 (description
2101 "@code{meshzoo} is a mesh generator for finite element or finite
2102volume computations for simple domains like regular polygons, disks,
2103spheres, cubes, etc.")
2104 (license license:gpl3+)))
2105
2106(define-public python-modin
2107 (package
2108 (name "python-modin")
2109 (version "0.37.1")
2110 (source
2111 (origin
2112 (method git-fetch)
2113 (uri (git-reference
2114 (url "https://github.com/modin-project/modin")
2115 (commit version)))
2116 (file-name (git-file-name name version))
2117 (sha256
2118 (base32 "1kqdx3b7sb3895ynypb6swf2jly26xvdghqqrm9ahqps16cn9dx9"))))
2119 (build-system pyproject-build-system)
2120 (arguments
2121 (list
2122 ;; tests:
2123 ;; - api: 5 passed
2124 ;; - dask: 269 passed, 2 skipped, 93 xfailed, 191 warnings
2125 ;; - python: 269 passed, 2 skipped, 93 xfailed, 197 warnings
2126 #:test-flags
2127 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2128 ;; AssertionError: assert 'array <...>
2129 "-k" (string-join
2130 (list "not test_repr[100]"
2131 "test_repr[size1]"
2132 "test_repr[size2]"
2133 "test_repr[size3]"
2134 "test_repr[size4]"
2135 "test_repr[size5]"
2136 "test_repr[size6]"
2137 "test_repr[size7]"
2138 "test_repr[size8]"
2139 "test_repr[size9]")
2140 " and not ")
2141 "modin/tests/numpy")
2142 #:phases
2143 #~(modify-phases %standard-phases
2144 (add-after 'unpack 'fix-pytest-config
2145 (lambda _
2146 (substitute* "setup.cfg"
2147 ((" --cov-.*--cov-report=") ""))))
2148 (replace 'check
2149 (lambda* (#:key tests? test-flags #:allow-other-keys)
2150 (when tests?
2151 ;; API basic tests
2152 (invoke "pytest" "-vv"
2153 "modin/tests/test_executions_api.py"
2154 "modin/tests/test_headers.py"
2155 "modin/tests/core/test_dispatcher.py::test_add_option")
2156 ;; More complex engine tests, the complete set up requires
2157 ;; database access and AWS credentials, see:
2158 ;; <.github/workflows/ci.yml >.
2159 (setenv "MODIN_ENGINE" "dask")
2160 (apply invoke "pytest" "-vv" test-flags)
2161 (setenv "MODIN_ENGINE" "python")
2162 (apply invoke "pytest" "-vv" test-flags)))))))
2163 (native-inputs
2164 (list python-boto3
2165 python-pytest
2166 python-pytest-xdist
2167 python-s3fs
2168 python-setuptools
2169 python-versioneer))
2170 (propagated-inputs
2171 (list python-fsspec
2172 python-numpy
2173 python-packaging
2174 ;; Modin is not ready for Pandas 3 yet, see:
2175 ;; <https://codeberg.org/guix/guix/issues/9336>.
2176 python-pandas-2
2177 python-psutil
2178 python-typing-extensions
2179 ;; [optinoal]
2180 python-dask
2181 python-distributed))
2182 (home-page "https://github.com/modin-project/modin")
2183 (synopsis "Make your pandas code run faster")
2184 (description
2185 "Modin uses Ray or Dask to provide an effortless way to speed up your
2186pandas notebooks, scripts, and libraries. Unlike other distributed DataFrame
2187libraries, Modin provides seamless integration and compatibility with existing
2188pandas code.")
2189 (license license:asl2.0)))
2190
2191(define-public python-mpl-scatter-density
2192 (package
2193 (name "python-mpl-scatter-density")
2194 (version "0.8")
2195 (source
2196 (origin
2197 (method url-fetch)
2198 (uri (pypi-uri "mpl_scatter_density" version))
2199 (sha256
2200 (base32 "0cynk1rk6k2xklgv69difphrz6id77x3xb58kbs4mc4q7z6bvfid"))))
2201 (build-system pyproject-build-system)
2202 (arguments
2203 (list
2204 ;; See <https://github.com/astrofrog/mpl-scatter-density/issues/42>.
2205 #:test-flags #~(list "-k" "not test_default_dpi")))
2206 (native-inputs
2207 (list python-pytest
2208 python-pytest-mpl
2209 python-setuptools
2210 python-setuptools-scm
2211 python-wheel))
2212 (propagated-inputs
2213 (list python-fast-histogram
2214 python-matplotlib
2215 python-numpy))
2216 (home-page "https://github.com/astrofrog/mpl-scatter-density")
2217 (synopsis "Matplotlib helpers to make density scatter plots")
2218 (description
2219 "This package provides functionality to make it easy to make scatter
2220density maps, both for interactive and non-interactive use.")
2221 (license license:bsd-2)))
2222
2223(define-public python-mpsplines
2224 ;; No release on PyPI no git tag, use the latest commit.
2225 (let ((commit "4967655fca8f4d0fc0685486c8ec2f1fe2f199d2")
2226 (revision "0"))
2227 (package
2228 (name "python-mpsplines")
2229 (version (git-version "0.0.0" revision commit))
2230 (source
2231 (origin
2232 (method git-fetch)
2233 (uri (git-reference
2234 (url "https://github.com/jararias/mpsplines")
2235 (commit commit)))
2236 (file-name (git-file-name name version))
2237 (sha256
2238 (base32 "1wqfvjp1d6xzb07qnq72h76f0mx7za9pasgw3qp3ciaycmlkvdr3"))))
2239 (build-system pyproject-build-system)
2240 (arguments
2241 (list #:tests? #f)) ; no tests provided
2242 (native-inputs
2243 (list python-setuptools
2244 python-wheel))
2245 (propagated-inputs
2246 (list python-scipy
2247 python-numpy
2248 python-loguru))
2249 (home-page "https://github.com/jararias/mpsplines")
2250 (synopsis "Mean preserving interpolation with splines")
2251 (description
2252 "This package implements a functionality for mean-preserving
2253interpolation of 1D data (for example, time series) with splines.")
2254 (license license:bsd-3))))
2255
2256(define-public python-msgpack-numpy
2257 (package
2258 (name "python-msgpack-numpy")
2259 (version "0.4.8")
2260 (source
2261 (origin
2262 (method url-fetch)
2263 (uri (pypi-uri "msgpack-numpy" version))
2264 (sha256
2265 (base32
2266 "0sbfanbkfs6c77np4vz0ayrwnv99bpn5xgj5fnf2yhhk0lcd6ry6"))))
2267 (build-system pyproject-build-system)
2268 (arguments
2269 (list #:test-backend #~'unittest))
2270 (native-inputs
2271 (list python-setuptools))
2272 (propagated-inputs
2273 (list python-msgpack python-numpy))
2274 (home-page "https://github.com/lebedov/msgpack-numpy")
2275 (synopsis
2276 "Numpy data serialization using msgpack")
2277 (description
2278 "This package provides encoding and decoding routines that enable the
2279serialization and deserialization of numerical and array data types provided
2280by numpy using the highly efficient @code{msgpack} format. Serialization of
2281Python's native complex data types is also supported.")
2282 (license license:bsd-3)))
2283
2284(define-public python-multiscale-spatial-image
2285 (package
2286 (name "python-multiscale-spatial-image")
2287 (version "2.0.3")
2288 (source
2289 (origin
2290 (method url-fetch)
2291 (uri (pypi-uri "multiscale_spatial_image" version))
2292 (sha256
2293 (base32 "1avcc7hrgyza793i02vjfvyn2bg0ag50h1pagapbpj65hl3v4whb"))))
2294 (build-system pyproject-build-system)
2295 ;; All interesting tests require file downloads over IPFS.
2296 (arguments (list #:tests? #false))
2297 (propagated-inputs
2298 (list python-dask
2299 python-numpy
2300 python-dateutil
2301 python-spatial-image
2302 python-xarray
2303 python-xarray-dataclass
2304 python-zarr))
2305 (native-inputs
2306 (list python-hatchling))
2307 (home-page "https://github.com/spatial-image/multiscale-spatial-image")
2308 (synopsis "Multi-dimensional spatial image data structure")
2309 (description
2310 "This package lets you generate a multiscale, chunked, multi-dimensional
2311spatial image data structure that can serialized to OME-NGFF. Each scale is a
2312scientific Python Xarray spatial-image Dataset, organized into nodes of an
2313Xarray Datatree.")
2314 (license license:asl2.0)))
2315
2316(define-public python-narwhals
2317 (package
2318 (name "python-narwhals")
2319 (version "2.22.1")
2320 (source
2321 (origin
2322 (method git-fetch)
2323 (uri (git-reference
2324 (url "https://github.com/narwhals-dev/narwhals")
2325 (commit (string-append "v" version))))
2326 (file-name (git-file-name name version))
2327 (sha256
2328 (base32 "0rq7asql365iv40jdbdnp05jja3y304pr2xd85ng83ly24h2bidx"))))
2329 (build-system pyproject-build-system)
2330 (arguments
2331 (list
2332 #:build-backend "hatchling.build" ; recent versions use uv-build
2333 ;; tests: 3557 passed, 118 skipped, 79 xfailed
2334 #:test-flags
2335 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2336 ;; Run a minimal portion of tests, the complete test suite
2337 ;; requires Polars, PySpark and SqlFrame packages.
2338 "--constructors=pandas")))
2339 (native-inputs
2340 (list python-hatchling
2341 python-pytest
2342 python-pytest-env
2343 python-pytest-xdist
2344 tzdata-for-tests))
2345 (propagated-inputs
2346 ;; [core]
2347 (list python-duckdb
2348 python-pandas
2349 python-polars
2350 python-pyarrow
2351 ;; python-sqlframe
2352 ;; [optional]
2353 ;; python-cudf
2354 python-dask
2355 ;; python-ibis-framework
2356 ;; python-modin ;blocked by guix/guix#9336
2357 python-packaging
2358 ;; python-pyarrow-hotfix
2359 ;; python-pyspark
2360 python-rich))
2361 (home-page "https://narwhals-dev.github.io/narwhals/")
2362 (synopsis "Compatibility layer between dataframe libraries")
2363 (description
2364 "This package provides an extremely lightweight compatibility layer
2365between dataframe libraries.
2366@itemize
2367@item full API support: cuDF, Modin, pandas, Polars, PyArrow
2368@item lazy-only support: Dask, DuckDB, Ibis, PySpark, SQLFrame
2369@end itemize")
2370 (license license:expat)))
2371
2372;; A bare minimal package, mainly to use in tests and reduce closure
2373;; size. Tests are left out in the main package to slim down native-inputs.
2374(define-public python-narwhals-minimal
2375 (package/inherit python-narwhals
2376 (name "python-narwhals-minimal")
2377 (arguments
2378 (substitute-keyword-arguments arguments
2379 ((#:tests? _ #t) #f)))
2380 (native-inputs
2381 (list python-hatchling))
2382 ;; All Narwals dependencies are optional.
2383 (propagated-inputs '())))
2384
2385(define-public python-ndindex
2386 (package
2387 (name "python-ndindex")
2388 (version "1.10.1")
2389 (source
2390 (origin
2391 (method url-fetch)
2392 (uri (pypi-uri "ndindex" version))
2393 (sha256
2394 (base32 "048gc4pwvsyxkz7brph1fwmlgjd35alimvnb3248y91iy30i6q8g"))))
2395 (build-system pyproject-build-system)
2396 (arguments
2397 (list
2398 ;; tests: 121 passed, 1 deselected, 3 warnings
2399 #:test-flags
2400 #~(list "--pyargs" "ndindex"
2401 "--numprocesses" (number->string (min 8 (parallel-job-count)))
2402 "-p" "no:cov"
2403 "-W" "ignore:Unknown pytest.mark.no_cover:pytest.PytestUnknownMarkWarning"
2404 "-k" "not test_iter_indices_matmul") ; flaky
2405 #:phases
2406 #~(modify-phases %standard-phases
2407 (add-before 'check 'remove-local-source
2408 (lambda _
2409 (delete-file-recursively "ndindex"))))))
2410 (native-inputs
2411 (list python-cython
2412 python-numpy
2413 python-pytest
2414 python-pytest-xdist
2415 python-setuptools
2416 python-sympy))
2417 (home-page "https://quansight-labs.github.io/ndindex/")
2418 (synopsis "Python library for manipulating indices of ndarrays")
2419 (description "This package provides a Python library for manipulating
2420indices of @code{ndarrays}.")
2421 (license license:expat)))
2422
2423(define-public python-nestcheck
2424 (package
2425 (name "python-nestcheck")
2426 ;; 0.2.1 was placed in 2019, there are a lot of changes providing
2427 ;; comparability with Python 3.11, use the latest commit from master's
2428 ;; HEAD.
2429 (properties '((commit . "513ef962ef7b0d66377686f9fe0a9e354dad48b3")
2430 (revision . "0")))
2431 (version (git-version "0.2.1"
2432 (assoc-ref properties 'revision)
2433 (assoc-ref properties 'commit)))
2434 (source
2435 (origin
2436 (method git-fetch)
2437 (uri (git-reference
2438 (url "https://github.com/ejhigson/nestcheck")
2439 (commit (assoc-ref properties 'commit))))
2440 (file-name (git-file-name name version))
2441 (sha256
2442 (base32 "0zzms2jkiapawnjyr5i7c61m7pmg6yd3nmpv23bdx51glz2fmglc"))))
2443 (build-system pyproject-build-system)
2444 (arguments
2445 (list
2446 ;; tests: 58 passed, 6 deselected, 10 warnings
2447 #:test-flags
2448 ;; TypeError: MultiIndex.set_levels() got an unexpected keyword argument
2449 ;; 'inplace'
2450 #~(list "-k" (string-append "not test_run_list_error_summary"
2451 ;; AttributeError: 'Series' object has no
2452 ;; attribute 'iteritems'
2453 " and not test_kde_plot_df"
2454 ;; Test is not deterministic and fails with
2455 ;; assertion not equal for DF array.
2456 " and not test_summary_df"))
2457 #:phases
2458 #~(modify-phases %standard-phases
2459 (add-after 'unpack 'use-pytest
2460 (lambda _
2461 (substitute* "tests/test_core.py"
2462 (("'nose'") "'pytest'")))))))
2463 (native-inputs
2464 (list python-pytest
2465 python-setuptools))
2466 (propagated-inputs
2467 (list python-fgivenx
2468 python-matplotlib
2469 python-numpy
2470 python-pandas
2471 python-scipy
2472 python-tqdm))
2473 (home-page "https://github.com/ejhigson/nestcheck")
2474 (synopsis "Nested sampling calculations utilities")
2475 (description
2476 "This package implements a functionality to work with
2477@url{https://en.wikipedia.org/wiki/Nested_sampling_algorithm, Nested
2478sampling}, a popular numerical method for Bayesian computation, which
2479simultaneously generates samples from the posterior distribution and an
2480estimate of the Bayesian evidence for a given likelihood and prior.
2481@code{nestcheck} provides Python utilities for analysing samples produced by
2482nested sampling, and estimating uncertainties on nested sampling
2483calculations (which have different statistical properties to calculations
2484using other numerical methods).")
2485 (license license:expat)))
2486
2487(define-public python-nibabel
2488 (package
2489 (name "python-nibabel")
2490 (version "5.3.2")
2491 (source
2492 (origin
2493 (method url-fetch)
2494 (uri (pypi-uri "nibabel" version))
2495 (sha256
2496 (base32 "16snprwgp7qzp51j3mx0zdn7brvx6r14ankldi24ny0w7d8adp0b"))))
2497 (build-system pyproject-build-system)
2498 (arguments
2499 (list
2500 ;; AttributeError: 'dict' object has no attribute 'add'.
2501 #:test-flags #~(list "-k" "not test_first and not test_second")))
2502 (propagated-inputs (list python-importlib-resources python-numpy
2503 python-packaging python-typing-extensions))
2504 (native-inputs (list python-hatch-vcs
2505 python-hatchling
2506 python-pytest
2507 python-pytest-httpserver
2508 python-pytest-xdist))
2509 (home-page "https://nipy.org/nibabel/")
2510 (synopsis "Read and write access to common neuroimaging file formats")
2511 (description
2512 "@code{nibabel} is a library that provides read and write access to
2513common neuroimaging file formats, including: ANALYZE (plain, SPM99, SPM2
2514and later), GIFTI, NIfTI1, NIfTI2, CIFTI-2, MINC1, MINC2, AFNI BRIK/HEAD,
2515ECAT and Philips PAR/REC. In addition, NiBabel also supports FreeSurfer’s
2516MGH, geometry, annotation and morphometry files, and provides some limited
2517support for DICOM.")
2518 (license license:expat))) ; and other non-copyleft licenses
2519
2520(define-public python-numba-stats
2521 (package
2522 (name "python-numba-stats")
2523 (version "1.14.0")
2524 (source
2525 (origin
2526 (method git-fetch)
2527 (uri (git-reference
2528 (url "https://github.com/scikit-hep/numba-stats")
2529 (commit (string-append "v" version))))
2530 (file-name (git-file-name name version))
2531 (sha256
2532 (base32 "1raa5rlm3mdj25mhrvpnlvzj3c2r1gq378hy9xpxhdbyz061vzg0"))))
2533 (build-system pyproject-build-system)
2534 (native-inputs
2535 (list python-pytest
2536 python-setuptools
2537 python-setuptools-scm))
2538 (propagated-inputs
2539 (list python-numba
2540 python-numpy
2541 python-scipy))
2542 (home-page "https://github.com/scikit-hep/numba-stats")
2543 (synopsis "Accelerated implementations of SciPy probability distributions")
2544 (description
2545 "This package provides Numba-accelerated implementations of common SciPy
2546probability distributions and others used in particle physics.
2547
2548The supported distributions are:
2549
2550@itemize
2551@item Uniform
2552@item (Truncated) Normal
2553@item Log-normal
2554@item Poisson
2555@item Binomial
2556@item (Truncated) Exponential
2557@item Student's t
2558@item Voigtian
2559@item Crystal Ball
2560@item Generalised double-sided Crystal Ball
2561@item Tsallis-Hagedorn, a model for the minimum bias pT distribution
2562@item Q-Gaussian
2563@item Bernstein density (not normalized to unity)
2564@item Cruijff density (not normalized to unity)
2565@item CMS-Shape
2566@item Generalized Argus
2567@end itemize")
2568 (license license:expat)))
2569
2570(define-public python-numbagg
2571 (package
2572 (name "python-numbagg")
2573 (version "0.9.4")
2574 (source
2575 (origin
2576 (method git-fetch)
2577 (uri (git-reference
2578 (url "https://github.com/numbagg/numbagg")
2579 (commit (string-append "v" version))))
2580 (file-name (git-file-name name version))
2581 (sha256
2582 (base32 "1frx10rdyklp0zbd8bckl63i0vmj0z93nkx1i7dylbv99iw27215"))))
2583 (build-system pyproject-build-system)
2584 (arguments
2585 (list
2586 ;; tests: 613 passed, 1543 skipped, 1 xfailed, 1 warning
2587 #:test-flags
2588 #~(cons* "--benchmark-disable"
2589 "--benchmark-skip"
2590 "--durations=10"
2591 ;; pandas 3.0 raises instead of returning NaN for idxmax/idxmin on
2592 ;; all-NA groups; breaks these tests' pandas comparison, not numbagg
2593 ;; itself: https://github.com/numbagg/numbagg/issues/725
2594 (map
2595 (lambda (test)
2596 (string-append "--deselect=numbagg/test/test_grouped.py::test_"
2597 test))
2598 (list "group_pandas_comparison[float64-group_nanargmax-<lambda>-nanargmax]"
2599 "group_pandas_comparison[float64-group_nanargmin-<lambda>-nanargmin]"
2600 "all_nan_for_label[group_nanargmax-<lambda>-nanargmax]"
2601 "all_nan_for_label[group_nanargmin-<lambda>-nanargmin]"
2602 "single_nan_for_label[group_nanargmax-<lambda>-nanargmax]"
2603 "single_nan_for_label[group_nanargmin-<lambda>-nanargmin]"
2604 "all_values_are_nan[group_nanargmax-<lambda>-nanargmax]"
2605 "all_values_are_nan[group_nanargmin-<lambda>-nanargmin]"
2606 "groupby_empty_numeric_operations[group_nanargmin-<lambda>-nan]")))))
2607 (native-inputs
2608 (list python-bottleneck
2609 python-pandas-minimal ;to slim down closure size
2610 python-pytest
2611 python-pytest-benchmark
2612 python-setuptools
2613 python-setuptools-scm
2614 python-tabulate))
2615 (propagated-inputs
2616 (list python-numba
2617 python-numpy))
2618 (home-page "https://github.com/numbagg/numbagg")
2619 (synopsis "Fast N-dimensional aggregation functions with Numba")
2620 (description
2621 "Numbagg provides high-performance implementations for moving window,
2622aggregation, and grouping functions. It leverages Numba's JIT compilation and
2623is especially performant on multi-core parallelism.")
2624 (license license:bsd-3)))
2625
2626(define-public python-numdifftools
2627 (package
2628 (name "python-numdifftools")
2629 (version "0.9.42")
2630 (source
2631 (origin
2632 (method url-fetch)
2633 (uri (pypi-uri "numdifftools" version))
2634 (sha256
2635 (base32 "1hgv3jhf4y9qrizkwfryj2b56zd0i2dvzig1y7r4ng193wbparl6"))))
2636 (build-system pyproject-build-system)
2637 (arguments
2638 (list
2639 ;; tests: 171 passed, 3 skipped, 8 deselected, 374 warnings
2640 #:test-flags
2641 #~(list "-m" "not benchmark and not slow"
2642 ;; ValueError: setting an array element with a sequence.
2643 "-k" (string-append
2644 "not test_scalar_to_vector and "
2645 "not test_fun_with_additional_parameters"))))
2646 (native-inputs
2647 (list python-algopy
2648 python-line-profiler
2649 python-pdm-backend
2650 python-pytest
2651 python-statsmodels))
2652 (propagated-inputs
2653 (list python-numpy
2654 python-scipy
2655 ;; [optional]
2656 python-matplotlib))
2657 (home-page "https://github.com/pbrod/numdifftools")
2658 (synopsis "Solves automatic numerical differentiation problems")
2659 (description
2660 "This package implements a functionality to solve automatic numerical
2661differentiation problems in one or more variables. Finite differences are
2662used in an adaptive manner, coupled with a Richardson extrapolation
2663methodology to provide a maximally accurate result. The user can configure
2664many options like; changing the order of the method or the extrapolation, even
2665allowing the user to specify whether complex-step, central, forward or
2666backward differences are used.")
2667 (license license:bsd-3)))
2668
2669(define-public python-numpoly
2670 (package
2671 (name "python-numpoly")
2672 (version "1.3.9")
2673 (source
2674 (origin
2675 (method git-fetch)
2676 (uri (git-reference
2677 (url "https://github.com/jonathf/numpoly")
2678 (commit version)))
2679 (file-name (git-file-name name version))
2680 (sha256
2681 (base32 "1abz6ch2bzghbzwkvrr2yrg6zkkaz4wn7qqc5810szryrv0is3ih"))))
2682 (build-system pyproject-build-system)
2683 (arguments
2684 (list
2685 ;; tests: 221 passed, 4 warnings
2686 #:phases
2687 #~(modify-phases %standard-phases
2688 (add-after 'unpack 'set-version
2689 ;; Version is hardcoded.
2690 (lambda _
2691 (substitute* "pyproject.toml"
2692 (("0.1.0")
2693 #$version))))
2694 (add-before 'check 'remove-local-source
2695 (lambda _
2696 (delete-file-recursively "numpoly"))))))
2697 (native-inputs
2698 (list python-cython
2699 python-pytest
2700 python-setuptools
2701 python-sympy))
2702 (propagated-inputs
2703 (list python-importlib-metadata
2704 python-numpy))
2705 (home-page "https://numpoly.readthedocs.io/en/master/")
2706 (synopsis "Polynomials as a numpy datatype")
2707 (description "Numpoly is a generic library for creating, manipulating and
2708evaluating arrays of polynomials based on @code{numpy.ndarray objects}.")
2709 ;; Tests fail with dtype mismatches on 32-bit architectures, suggesting
2710 ;; that numpoly only supports 64 bit platforms.
2711 (supported-systems '("x86_64-linux" "aarch64-linux" "powerpc64le-linux"))
2712 (license license:bsd-2)))
2713
2714(define-public python-numpy-groupies
2715 (package
2716 (name "python-numpy-groupies")
2717 (version "0.11.3")
2718 (source
2719 (origin
2720 (method url-fetch)
2721 (uri (pypi-uri "numpy_groupies" version))
2722 (sha256
2723 (base32 "1q13gi0018maifhn6dkwi0pprr3p7ikv9r3zffg6p1ayspdazm5f"))))
2724 (build-system pyproject-build-system)
2725 (native-inputs
2726 (list python-numba
2727 python-pandas
2728 python-pytest
2729 python-setuptools
2730 python-setuptools-scm))
2731 (propagated-inputs
2732 (list python-numpy))
2733 (home-page "https://github.com/ml31415/numpy-groupies")
2734 (synopsis "Tools for group-indexing operations: aggregated sum and more")
2735 (description
2736 "This package provides optimized tools for group-indexing operations:
2737aggregated sum and more.")
2738 (license license:bsd-3)))
2739
2740(define-public python-openpmd-api
2741 (package
2742 (name "python-openpmd-api")
2743 ;; This can be removed when version 0.17.1 is released.
2744 (properties '((commit . "ec8251eaa80ecc7182f83de2180d020f42978046")
2745 (revision . "0")))
2746 (version (git-version "0.17.0"
2747 (assoc-ref properties 'revision)
2748 (assoc-ref properties 'commit)))
2749 (source
2750 (origin
2751 (method git-fetch)
2752 (uri (git-reference
2753 (url "https://github.com/openPMD/openPMD-api")
2754 (commit (assoc-ref properties 'commit))))
2755 (file-name (git-file-name name version))
2756 (sha256
2757 (base32 "1y9jz1igjwcrxh5w31q0dmzb9hpizbmg4yzma14ca3pcs0na4mqc"))))
2758 (build-system cmake-build-system)
2759 (arguments
2760 (list
2761 #:configure-flags
2762 #~(list "-DopenPMD_SUPERBUILD=OFF")))
2763 (native-inputs
2764 (list catch2-2
2765 python-numpy))
2766 (inputs
2767 (list hdf5
2768 nlohmann-json
2769 openmpi
2770 pybind11
2771 python
2772 toml11))
2773 (propagated-inputs
2774 (list python-mpi4py))
2775 (home-page "https://openpmd-api.readthedocs.io/")
2776 (synopsis "C++ & Python API for Scientific I/O")
2777 (description
2778 "openPMD is an open meta-data schema that provides meaning and
2779self-description for data sets in science and engineering. See the
2780@url{https://github.com/openPMD/openPMD-standard, openPMD standard} for
2781details of this schema.
2782
2783This library provides a reference API for openPMD data handling. Since
2784openPMD is a schema (or markup) on top of portable, hierarchical file formats,
2785this library implements various backends such as HDF5, ADIOS2 and JSON.
2786Writing & reading through those backends and their associated files are
2787supported for serial and @url{https://www.mpi-forum.org/docs/, MPI-parallel}
2788workflows.")
2789 (license (list license:gpl3 license:lgpl3))))
2790
2791(define-public python-opt-einsum
2792 (package
2793 (name "python-opt-einsum")
2794 (version "3.4.0")
2795 (source
2796 (origin
2797 (method git-fetch)
2798 (uri (git-reference
2799 (url "https://github.com/dgasmith/opt_einsum")
2800 (commit (string-append "v" version))))
2801 (file-name (git-file-name name version))
2802 (sha256
2803 (base32 "14p8rncba295w1bfnmn27fxi6mjas31y7yawvbiwj7d7ci196kx4"))))
2804 (build-system pyproject-build-system)
2805 ;; tests: 7752 passed, 139 skipped, 6 warnings
2806 (native-inputs
2807 (list python-hatch-fancy-pypi-readme
2808 python-hatch-vcs
2809 python-hatchling
2810 python-pytest))
2811 (propagated-inputs
2812 (list python-dask
2813 ;; python-jax
2814 python-numpy
2815 python-sparse
2816 #;python-torch))
2817 (home-page "https://github.com/dgasmith/opt_einsum")
2818 (synopsis "Optimizing numpys einsum function")
2819 (description
2820 "Optimized einsum can significantly reduce the overall execution time of
2821einsum-like expressions by optimizing the expression's contraction order and
2822dispatching many operations to canonical BLAS, cuBLAS, or other specialized
2823routines. Optimized einsum is agnostic to the backend and can handle NumPy,
2824Dask, PyTorch, Tensorflow, CuPy, Sparse, Theano, JAX, and Autograd arrays as
2825well as potentially any library which conforms to a standard API. See the
2826documentation for more information.")
2827 (license license:expat)))
2828
2829(define-public python-orsopy
2830 (package
2831 (name "python-orsopy")
2832 (version "1.2.1")
2833 (source
2834 (origin
2835 (method git-fetch)
2836 (uri (git-reference
2837 (url "https://github.com/reflectivity/orsopy")
2838 (commit (string-append "v" version))))
2839 (file-name (git-file-name name version))
2840 (sha256
2841 (base32 "15av7b38h9x0f09dzxb111r2kxm6an461l9ajb01r8r7mv7m5bw9"))))
2842 (build-system pyproject-build-system)
2843 (arguments
2844 (list
2845 #:test-flags
2846 ;; These tests require network access.
2847 #~(cons* "--ignore=orsopy/slddb/tests/test_webapi.py"
2848 (map (lambda (test)
2849 (string-append "--deselect=orsopy/fileio/tests/"
2850 "test_model_language.py::" test))
2851 (list "TestSubStack::test_resolve_layers"
2852 "TestMaterial::test_density_lookup_elements"
2853 "TestSampleModel::test_resolve_to_layers")))))
2854 (propagated-inputs
2855 (list python-numpy python-pyyaml python-jsonschema python-h5py))
2856 (native-inputs
2857 (list python-pint python-pytest python-setuptools))
2858 (home-page "https://github.com/reflectivity/orsopy")
2859 (synopsis "Open Reflectometry Standards Organization Python tools")
2860 (description
2861 "This package provides Python tools for the Open Reflectometry Standards
2862Organization (ORSO). It includes utilities for working with reflectometry
2863data files and the ORSO file format.")
2864 (license license:expat)))
2865
2866(define-public python-osfclient
2867 (package
2868 (name "python-osfclient")
2869 (version "0.0.5")
2870 (source
2871 (origin
2872 (method git-fetch)
2873 (uri (git-reference
2874 (url "https://github.com/osfclient/osfclient")
2875 (commit version)))
2876 (file-name (git-file-name name version))
2877 (sha256
2878 (base32 "1ympjh028xgwkzvhwqa31rack1h8nni7zzn2alp1819m4pm8hysn"))))
2879 (build-system pyproject-build-system)
2880 (arguments
2881 (list
2882 #:test-flags
2883 ;; 2 tests fail with assertion not equal:
2884 ;; AssertionError: assert 16 == (4 + (4 * 2))
2885 ;; See: <https://github.com/osfclient/osfclient/issues/214>.
2886 #~(list "-k"
2887 (string-append "not test_recursive_upload"
2888 " and not nottest_recursive_upload_with_subdir"))))
2889 (native-inputs
2890 (list python-pytest
2891 python-mock
2892 python-setuptools))
2893 (propagated-inputs
2894 (list python-requests
2895 python-six
2896 python-tqdm))
2897 (home-page "https://github.com/osfclient/osfclient")
2898 (synopsis "Python library and command-line client for file storage on OSF")
2899 (description
2900 "The @code{osfclient} is a python library and a command-line client for
2901up- and downloading files to and from @url{https://osf.io/, Open Science
2902Framework} projects. The @acronym{OSF, Open Science Framework} is an open
2903source project which facilitates the open collaboration of researchers on the
2904web, by sharing data and other research outputs.")
2905 (license license:bsd-3)))
2906
2907(define-public python-osqp
2908 (package
2909 (name "python-osqp")
2910 (version "1.0.5")
2911 (source
2912 (origin
2913 (method git-fetch)
2914 (uri (git-reference
2915 (url "https://github.com/osqp/osqp-python")
2916 (commit (string-append "v" version))
2917 (recursive? #true)))
2918 (file-name (git-file-name name version))
2919 (sha256
2920 (base32 "0b5j0hv6dlbs3dm9xvs2ijnjr2r8xnchs4jyk3dx16qhcp85wklb"))))
2921 (build-system pyproject-build-system)
2922 (arguments
2923 (list
2924 ;; tests: 47 passed, 3 skipped, 1027 warnings
2925 #:test-flags
2926 ;; These tests require the module "vec_emosqp", which we don't have.
2927 #~(list "--ignore=src/osqp/tests/codegen_vectors_test.py"
2928 ;; These tests need "mat_emosqp".
2929 "--ignore=src/osqp/tests/codegen_matrices_test.py")
2930 #:phases
2931 #~(modify-phases %standard-phases
2932 (add-after 'unpack 'fix-osqp-source-location
2933 ;; XXX: Maybe implement it as CMake configure flags, otherwise
2934 ;; each package depending on osqp needs to have this phase?
2935 (lambda _
2936 (copy-recursively #$(package-source
2937 (this-package-native-input "osqp"))
2938 "osqp")
2939 (substitute* "osqp/algebra/_common/lin_sys/qdldl/qdldl.cmake"
2940 (("Fetching/configuring QDLDL solver")
2941 (format #f "Adding/configuring QDLDL solver from: ~a"
2942 #$(package-source
2943 (this-package-native-input "qdldl"))))
2944 (("GIT_REPOSITORY https://github.com/osqp/qdldl\\.git")
2945 (format #f "SOURCE_DIR ~a"
2946 #$(package-source
2947 (this-package-native-input "qdldl"))))
2948 (("GIT_TAG v0.1.8")
2949 ""))
2950 (substitute* "CMakeLists.txt"
2951 (("Fetching/configuring OSQP")
2952 (format #f "Adding/configuring OSQP: ~a"
2953 (string-append (getcwd) "/osqp")))
2954 (("GIT_REPOSITORY https://github.com/osqp/osqp\\.git")
2955 (format #f "SOURCE_DIR ~a"
2956 (string-append (getcwd) "/osqp")))
2957 (("GIT_TAG v1.0.0")
2958 "")))))))
2959 (native-inputs
2960 (list cmake-minimal
2961 osqp
2962 pybind11-2
2963 python-pytest
2964 python-pytorch
2965 python-scikit-build-core
2966 python-setuptools-scm
2967 qdldl))
2968 (propagated-inputs
2969 (list python-jinja2
2970 python-joblib
2971 python-numpy
2972 python-scipy
2973 python-setuptools))
2974 (home-page "https://osqp.org/")
2975 (synopsis "OSQP: operator splitting QP solver")
2976 (description "The OSQP (Operator Splitting Quadratic Program) solver is a
2977numerical optimization package.")
2978 (license license:asl2.0)))
2979
2980(define-public python-pandarallel
2981 (package
2982 (name "python-pandarallel")
2983 (version "1.6.5")
2984 (source
2985 (origin
2986 (method git-fetch) ; no tests in PyPI
2987 (uri (git-reference
2988 (url "https://github.com/nalepae/pandarallel/")
2989 (commit (string-append "v" version))))
2990 (file-name (git-file-name name version))
2991 (sha256
2992 (base32 "0r2wlxlwp4wia0vm15k4cp421mwa20k4k5g2ml01inprj8bl1p0p"))
2993 (patches
2994 (search-patches "python-pandarallel-fix-df-applymap.patch"
2995 "python-pandarallel-fix-parallel_apply.patch"))))
2996 (build-system pyproject-build-system)
2997 (arguments
2998 (list
2999 #:test-flags #~(list "-n" (number->string (parallel-job-count)))))
3000 (propagated-inputs
3001 (list python-dill
3002 python-pandas
3003 python-psutil))
3004 (native-inputs
3005 (list python-mkdocs-material
3006 python-numpy
3007 python-pytest
3008 python-pytest-xdist
3009 python-setuptools
3010 python-wheel))
3011 (home-page "https://nalepae.github.io/pandarallel/")
3012 (synopsis "Tool to parallelize Pandas operations across CPUs")
3013 (description
3014 "@code{pandarallel} allows any Pandas user to take advantage of their
3015multi-core computer, while Pandas uses only one core. @code{pandarallel} also
3016offers nice progress bars (available on Notebook and terminal) to get an rough
3017idea of the remaining amount of computation to be done.")
3018 (license license:bsd-3)))
3019
3020(define-public python-pandas
3021 (package
3022 (name "python-pandas")
3023 (version "3.0.3")
3024 (source
3025 (origin
3026 (method git-fetch)
3027 (uri (git-reference
3028 (url "https://github.com/pandas-dev/pandas")
3029 (commit (string-append "v" version))))
3030 (file-name (git-file-name name version))
3031 (sha256
3032 (base32 "1qagfjf4rrpx4xdw0bwg3q9g4k5vjplvifnx6k2frm8z2ws9hgds"))))
3033 (build-system pyproject-build-system)
3034 (arguments
3035 (list
3036 ;; tests: 185854 passed, 12827 skipped, 776 xfailed, 86 xpassed
3037 #:test-flags
3038 #~(list "-m" (string-join
3039 (list "not db" "network" "single_cpu" "slow" "slow_arm")
3040 " and not ")
3041 "-vv"
3042 ;; See: <https://github.com/pandas-dev/pandas/issues/54907>.
3043 "--no-strict-data-files"
3044 "--numprocesses" (number->string (min 4 (parallel-job-count)))
3045 "-k" (string-join
3046 (list "not test_git_version"
3047 "test_show_versions_console"
3048 ;; DeprecationWarning: Bitwise inversion '~' on bool
3049 ;; is deprecated and will be removed in Python 3.16.
3050 "test_scalar_unary[numexpr-pandas]"
3051 ;; AssertionError: Series are different.
3052 #$@(if (target-64bit?)
3053 '()
3054 '("test_rolling_var_numerical_issues")))
3055 " and not "))
3056 #:phases
3057 #~(modify-phases %standard-phases
3058 (add-after 'unpack 'patch-generate-version
3059 (lambda _
3060 ;; See: <https://github.com/pandas-dev/pandas/issues/59459>.
3061 (substitute* "generate_version.py"
3062 (("version =.*")
3063 (format #f "version = ~s~%" #$version))
3064 (("git_version =.*")
3065 (format #f "git_version = ~s~%" #$version)))))
3066 (replace 'check
3067 (lambda* (#:key test-flags tests? #:allow-other-keys)
3068 (when tests?
3069 ;; Tests don't work with "--pyargs pandas" or changing
3070 ;; directory to output, script is taken from pyproject.toml
3071 ;; file.
3072 (setenv "HOME" "/tmp")
3073 (delete-file-recursively "pandas")
3074 (invoke "python" "-c" (format #f "~a; ~a=[~{'~a', ~}]);"
3075 "import pandas as pd"
3076 "pd.test(extra_args"
3077 test-flags))))))))
3078 (propagated-inputs
3079 (list python-numpy
3080 python-dateutil
3081 ;; XXX: Pandas lists a lot of optional dependencies which are not
3082 ;; hard requirements, leave them listed here and commented out for
3083 ;; the reference purpose. Try to keep closure as bare minimal as
3084 ;; possible.
3085 ;;
3086 ;; [optional]
3087 ;; python-adbc-driver-postgresql
3088 ;; python-adbc-driver-sqlite
3089 ;; python-beautifulsoup4
3090 python-bottleneck
3091 ;; python-fastparquet
3092 ;; python-fsspec
3093 ;; python-gcsfs
3094 ;; python-html5lib
3095 ;; python-hypothesis
3096 ;; python-jinja2
3097 python-lxml
3098 ;; python-matplotlib
3099 python-numba
3100 python-numexpr
3101 ;; python-odfpy
3102 ;; python-openpyxl
3103 ;; python-psycopg2
3104 ;; python-pyarrow
3105 ;; python-pyiceberg
3106 ;; python-pymysql
3107 ;; python-pyqt5
3108 ;; python-pyreadstat
3109 ;; python-python-calamine
3110 ;; python-pyxlsb
3111 ;; python-qtpy
3112 ;; python-s3fs
3113 ;; python-scipy
3114 ;; python-sqlalchemy
3115 ;; python-tables
3116 ;; python-tabulate
3117 ;; python-xarray
3118 ;; python-xlrd
3119 ;; python-xlsxwriter
3120 #;python-zstandard))
3121 (inputs
3122 (list xclip xsel))
3123 (native-inputs
3124 (list python-hypothesis
3125 python-meson
3126 python-pytest
3127 python-pytest-localserver
3128 python-pytest-xdist
3129 python-pytz
3130 python-versioneer
3131 tzdata-for-tests))
3132 (home-page "https://pandas.pydata.org")
3133 (synopsis "Data structures for data analysis, time series, and statistics")
3134 (description
3135 "Pandas is a Python package providing fast, flexible, and expressive data
3136structures designed to make working with structured (tabular,
3137multidimensional, potentially heterogeneous) and time series data both easy
3138and intuitive. It aims to be the fundamental high-level building block for
3139doing practical, real world data analysis in Python.")
3140 (license license:bsd-3)))
3141
3142(define-public python-pandas-2
3143 (package
3144 (inherit python-pandas)
3145 (name "python-pandas")
3146 (version "2.3.3")
3147 (source
3148 (origin
3149 (method git-fetch)
3150 (uri (git-reference
3151 (url "https://github.com/pandas-dev/pandas")
3152 (commit (string-append "v" version))))
3153 (file-name (git-file-name name version))
3154 (sha256
3155 (base32 "0qf4frgj31kd9i544n8v03a0bv9mgml3f7n9n1rik187q3r8ygfg"))
3156 (patches (search-patches "python-pandas-2-no-pytz_datetime.patch"))))
3157 (build-system pyproject-build-system)
3158 (arguments
3159 (list
3160 ;; tests: 173093 passed, 24265 skipped, 990 xfailed, 77 xpassed, 110 warnings
3161 #:test-flags
3162 #~(list "-m" (string-join
3163 (list "not db" "network" "single_cpu" "slow" "slow_arm")
3164 " and not ")
3165 "--numprocesses" (number->string (min 4 (parallel-job-count)))
3166 "-k" (string-join
3167 (list "not test_git_version"
3168 "test_parsing_tzlocal_deprecated"
3169 "test_show_versions_console"
3170 ;; XXX: Introduced by NumPy 2.4.6 and Cython 3.2.5:
3171 ;; NotImplementedError
3172 ;; See:
3173 ;; <https://github.com/pandas-dev/pandas/issues/62820>,
3174 ;; <https://github.com/pandas-dev/pandas/issues/63078>.
3175 "test_categorical_block_pickle"
3176 "test_pickle"
3177 "test_pickle_freq"
3178 "test_pickle_preserves_block_ndim"
3179 "test_pickle_preserves_name"
3180 "test_pickle_round_trip"
3181 "test_pickle_roundtrip"
3182 "test_pickle_roundtrip_containers"
3183 "test_round_trip_current"
3184 ;; AssertionError: Series are different.
3185 #$@(if (target-64bit?)
3186 '()
3187 '("test_rolling_var_numerical_issues")))
3188 " and not "))
3189 #:phases
3190 #~(modify-phases %standard-phases
3191 (add-after 'unpack 'patch-generate-version
3192 (lambda _
3193 ;; See: <https://github.com/pandas-dev/pandas/issues/59459>.
3194 (substitute* "generate_version.py"
3195 (("version =.*")
3196 (format #f "version = ~s~%" #$version))
3197 (("git_version =.*")
3198 (format #f "git_version = ~s~%" #$version)))))
3199 (replace 'check
3200 (lambda* (#:key inputs outputs test-flags tests? #:allow-other-keys)
3201 (when tests?
3202 (setenv "HOME" "/tmp")
3203 (with-directory-excursion
3204 (string-append (string-append (site-packages inputs outputs)
3205 "/pandas"))
3206 (apply invoke "pytest" "-vv" test-flags))))))))
3207 (propagated-inputs
3208 (list python-numpy
3209 python-dateutil
3210 python-pytz
3211 python-tzdata))
3212 (inputs
3213 (list xclip xsel))
3214 (native-inputs
3215 (list python-meson
3216 python-lxml
3217 python-pytest
3218 python-pytest-asyncio
3219 python-pytest-xdist
3220 python-versioneer
3221 tzdata-for-tests))))
3222
3223(define-public python-pandas-flavor
3224 (package
3225 (name "python-pandas-flavor")
3226 (version "0.8.1")
3227 (source
3228 (origin
3229 (method url-fetch)
3230 (uri (pypi-uri "pandas_flavor" version))
3231 (sha256
3232 (base32
3233 "0rn3pnracv8013j3f737qal3isf1brbc3mpxqhr03vik322sapr5"))))
3234 (build-system pyproject-build-system)
3235 (native-inputs
3236 (list python-pytest
3237 python-setuptools
3238 python-setuptools-scm))
3239 (propagated-inputs
3240 (list python-pandas
3241 python-xarray))
3242 (home-page "https://github.com/pyjanitor-devs/pandas_flavor")
3243 (synopsis "Write your own flavor of Pandas")
3244 (description "Pandas 0.23 added a simple API for registering accessors
3245with Pandas objects. Pandas-flavor extends Pandas' extension API by
3246
3247@itemize
3248@item adding support for registering methods as well
3249@item making each of these functions backwards compatible with older versions
3250of Pandas
3251@end itemize")
3252 (license license:expat)))
3253
3254;; A bare minimal package, mainly to use in tests and reduce closure size.
3255;; Tests are left out in the main package to slim down native-inputs and
3256;; propagated-inputs.
3257(define-public python-pandas-minimal
3258 (package/inherit python-pandas
3259 (name "python-pandas-minimal")
3260 (arguments
3261 (substitute-keyword-arguments arguments
3262 ((#:tests? _ #t) #f)))
3263 (native-inputs
3264 (list python-meson
3265 python-versioneer))
3266 (propagated-inputs
3267 (list python-numpy
3268 python-dateutil
3269 python-pytz))))
3270
3271(define-public python-pandas-stubs
3272 (package
3273 (name "python-pandas-stubs")
3274 ;; The versioning follows that of Pandas and uses the date of the
3275 ;; python-pandas-stubs release.
3276 (version "3.0.3.260530")
3277 (source
3278 (origin
3279 (method git-fetch)
3280 (uri (git-reference
3281 (url "https://github.com/pandas-dev/pandas-stubs")
3282 (commit (string-append "v" version))))
3283 (file-name (git-file-name name version))
3284 (sha256
3285 (base32 "0r79bbblf2rkbw2min9x231c0h74rmir0aay0wv52v6d4vig7xdw"))))
3286 (build-system pyproject-build-system)
3287 (arguments
3288 (list
3289 ;; tests: 3184 passed, 6 skipped, 21 deselected
3290 #:test-flags
3291 #~(list
3292 ;; Expected type '<class 'numpy.[...]'>' but got '<class '[...]'>'
3293 "--deselect=tests/frame/test_frame.py::test_types_median"
3294 "--deselect=tests/frame/test_frame.py::test_types_min"
3295 "--deselect=tests/frame/test_frame.py::test_types_max"
3296 "--deselect=tests/frame/test_indexing.py::test_getset_untyped"
3297 "--deselect=tests/series/test_agg.py::test_agg_any_float"
3298 "--deselect=tests/series/test_agg.py::test_agg_int"
3299 "--deselect=tests/series/test_agg.py::test_agg_float"
3300 "--deselect=tests/series/test_agg.py::test_agg_complex"
3301 "--deselect=tests/series/test_series.py::test_types_min"
3302 "--deselect=tests/series/test_series.py::test_types_max"
3303 "--deselect=tests/series/test_series.py::test_types_var"
3304 "--deselect=tests/series/test_series.py::test_types_agg"
3305 "--deselect=tests/series/test_series.py::test_types_aggregate"
3306 ;; ModuleNotFoundError: No module named 'pyiceberg'
3307 "--deselect=tests/test_io.py::test_iceberg"
3308 ;; ImportError: Missing optional dependency 'python-calamine'.
3309 "--deselect=tests/test_io.py::test_read_excel"
3310 "--deselect=tests/test_io.py::test_excel_reader")))
3311 (native-inputs
3312 (list python-beautifulsoup4
3313 python-fsspec
3314 python-html5lib
3315 python-jinja2
3316 python-loguru
3317 python-lxml
3318 python-matplotlib
3319 python-mypy
3320 python-numexpr
3321 python-odfpy
3322 python-openpyxl
3323 python-pandas
3324 python-poetry-core
3325 python-pyarrow
3326 python-pyreadstat
3327 python-pytest
3328 python-pytz
3329 python-scipy
3330 python-sqlalchemy-2
3331 python-tables
3332 python-tabulate
3333 python-typing-extensions
3334 python-xarray
3335 python-xlrd
3336 python-xlsxwriter
3337 ;; Not packaged yet
3338 ;;
3339 ;; python-calamine
3340 ;; python-poethepoet
3341 ;; python-pyarrow-stubs
3342 ;; python-pyiceberg
3343 ;; python-pyrefly
3344 ;; python-python-calamine
3345 ;; python-pyxlsb
3346 ;; python-scipy-stubs
3347 ;; python-ty
3348 ;; python-types-python-dateutil
3349 tzdata-for-tests))
3350 (propagated-inputs
3351 (list python-numpy
3352 python-types-pytz))
3353 (home-page "https://pandas.pydata.org")
3354 (synopsis "Type annotations for pandas")
3355 (description
3356 "This package contains public type stubs for @code{python-pandas}, following
3357the convention of providing stubs in a separate package, as specified in
3358@acronym{PEP, Python Enhancement Proposal} 561. The stubs cover the most
3359typical use cases of @code{python-pandas}. In general, these stubs are
3360narrower than what is possibly allowed by @code{python-pandas}, but follow a
3361convention of suggesting best recommended practices for using
3362@code{python-pandas}.")
3363 (license license:bsd-3)))
3364
3365(define-public python-pandera
3366 (package
3367 (name "python-pandera")
3368 (version "0.31.1")
3369 (source
3370 (origin
3371 ;; XXX: Sanity-check fails to load when switched to git-fetch.
3372 (method url-fetch)
3373 (uri (pypi-uri "pandera" version))
3374 (sha256
3375 (base32 "04qgmcfvw78ccfnmidhy3zw1i99nyjkz3b0klsd4ypgiia3a6nn7"))))
3376 (build-system pyproject-build-system)
3377 (arguments
3378 (list
3379 ;; tests: 3810 passed, 22 skipped, 21 xfailed, 5923 warnings
3380 #:test-flags
3381 ;; With higher threads count tests randomly fail during collection.
3382 #~(list "--numprocesses" (number->string (min 2 (parallel-job-count)))
3383 ;; TODO: Ignore tests for not packaged python-ibis-framework,
3384 ;; and python-pyspark.
3385 "--ignore=tests/ibis"
3386 "--ignore=tests/pyspark"
3387 ;; Not compatible with Pandas 3 yet.
3388 "--ignore=tests/modin"
3389 ;; Tests fail to connect to 127.0.0.1:52245, connection refused.
3390 "--deselect=tests/fastapi/test_app.py::test_items_endpoint"
3391 "--deselect=tests/fastapi/test_app.py::test_transactions_endpoint"
3392 "--deselect=tests/fastapi/test_app.py::test_upload_file_endpoint"
3393 ;; frictionless is not packaged yet.
3394 "-k" "not test_frictionless_schema_")))
3395 (native-inputs
3396 (list python-joblib
3397 python-black ;some tets depent on it
3398 python-mypy-for-tests
3399 python-pytest
3400 python-pytest-asyncio
3401 python-pytest-xdist
3402 python-pytz
3403 python-setuptools
3404 python-setuptools-scm
3405 python-sphinx ;some tets depent on it
3406 python-uvicorn
3407 tzdata-for-tests))
3408 (inputs
3409 ;; [optional]
3410 ;; Pandera comes with a lot of extras. We test as many as possible, but do
3411 ;; not include all of them in the propagated-inputs. Currently, we have to
3412 ;; skip the pyspark and io tests due to missing packages python-pyspark
3413 ;; and python-frictionless.
3414 (list python-dask
3415 python-distributed
3416 python-geopandas
3417 python-hypothesis
3418 ;; python-ibis-framework ;missing from Guix
3419 ;; python-modin ;blocked by guix/guix#9336
3420 python-numpy
3421 python-pandas
3422 python-polars
3423 ;; python-pyspark ;missing from Guix
3424 ;; python-ray ;missing from Guix
3425 python-scipy
3426 python-shapely))
3427 (propagated-inputs
3428 (list python-packaging
3429 python-pydantic
3430 python-typeguard
3431 python-typing-extensions
3432 python-typing-inspect))
3433 (home-page "https://github.com/unionai-oss/pandera")
3434 (synopsis "Perform data validation on dataframe-like objects")
3435 (description
3436 "@code{python-pandera} provides a flexible and expressive API for
3437performing data validation on dataframe-like objects to make data processing
3438pipelines more readable and robust. Dataframes contain information that
3439@code{python-pandera} explicitly validates at runtime. This is useful in
3440production-critical data pipelines or reproducible research settings. With
3441@code{python-pandera}, you can:
3442
3443@itemize
3444@item Define a schema once and use it to validate different dataframe types.
3445@item Check the types and properties of columns.
3446@item Perform more complex statistical validation like hypothesis testing.
3447@item Seamlessly integrate with existing data pipelines via function decorators.
3448@item Define dataframe models with the class-based API with pydantic-style syntax.
3449@item Synthesize data from schema objects for property-based testing.
3450@item Lazily validate dataframes so that all validation rules are executed.
3451@item Integrate with a rich ecosystem of tools like @code{python-pydantic},
3452@code{python-fastapi} and @code{python-mypy}.
3453@end itemize")
3454 (license license:expat)))
3455
3456(define-public python-particle
3457 (package
3458 (name "python-particle")
3459 (version "1.0.1")
3460 (source
3461 (origin
3462 (method git-fetch)
3463 (uri (git-reference
3464 (url "https://github.com/scikit-hep/particle")
3465 (commit (string-append "v" version))))
3466 (file-name (git-file-name name version))
3467 (sha256
3468 (base32 "0sfv7d5l1f6vgv4aliq0swvswpz580zk0zp7frbkq786jmx9zxs7"))))
3469 (build-system pyproject-build-system)
3470 (native-inputs
3471 (list python-hatch-vcs
3472 python-hatchling
3473 python-pandas-minimal
3474 python-pytest
3475 python-pytest-benchmark))
3476 (propagated-inputs
3477 (list python-attrs
3478 python-hepunits))
3479 (home-page "https://github.com/scikit-hep/particle")
3480 (synopsis "Extended PDG particle data and MC identification codes")
3481 (description
3482 "@code{Particle} provides a pythonic interface to the Particle Data Group
3483(PDG) particle data tables and particle identification codes, with extended
3484particle information and extra goodies.")
3485 (license license:bsd-3)))
3486
3487(define-public python-pingouin
3488 (package
3489 (name "python-pingouin")
3490 (version "0.6.1")
3491 (source
3492 (origin
3493 (method git-fetch)
3494 (uri (git-reference
3495 (url "https://github.com/raphaelvallat/pingouin")
3496 (commit (string-append "v" version))))
3497 (file-name (git-file-name name version))
3498 (sha256
3499 (base32 "14hxs2w51qgg67kqkxpy02kd4q8gb7vayj85kcp8qvda1q1xasfv"))))
3500 (build-system pyproject-build-system)
3501 (arguments
3502 (list
3503 ;; tests: 85 passed, 3 deselected, 43 warnings
3504 #:test-flags
3505 #~(list
3506 ;; These tests failed with the python-pandas update.
3507 "--deselect=tests/test_parametric.py::TestParametric::test_ancova"
3508 "--deselect=tests/test_parametric.py::TestParametric::test_anova"
3509 "--deselect=tests/test_pandas.py::TestParametric::test_pandas")))
3510 (native-inputs
3511 (list python-pytest
3512 python-setuptools))
3513 (propagated-inputs
3514 (list python-matplotlib
3515 python-mpmath
3516 python-numpy
3517 python-pandas
3518 python-pandas-flavor
3519 python-scikit-learn
3520 python-scipy
3521 python-seaborn
3522 python-statsmodels
3523 python-tabulate))
3524 (home-page "https://pingouin-stats.org/")
3525 (synopsis "Statistical package for Python")
3526 (description "Pingouin is a statistical package written in Python 3 and
3527based mostly on Pandas and NumPy. Its features include
3528
3529@itemize
3530@item ANOVAs: N-ways, repeated measures, mixed, ancova
3531@item Pairwise post-hocs tests (parametric and non-parametric) and pairwise
3532correlations
3533@item Robust, partial, distance and repeated measures correlations
3534@item Linear/logistic regression and mediation analysis
3535@item Bayes Factors
3536@item Multivariate tests
3537@item Reliability and consistency
3538@item Effect sizes and power analysis
3539@item Parametric/bootstrapped confidence intervals around an effect size or a
3540correlation coefficient
3541@item Circular statistics
3542@item Chi-squared tests
3543@item Plotting: Bland-Altman plot, Q-Q plot, paired plot, robust correlation,
3544and more
3545@end itemize")
3546 (license license:gpl3)))
3547
3548(define-public python-pint
3549 (package
3550 (name "python-pint")
3551 (version "0.25.3")
3552 (source
3553 (origin
3554 (method git-fetch)
3555 (uri (git-reference
3556 (url "https://github.com/hgrecco/pint")
3557 (commit version)))
3558 (file-name (git-file-name name version))
3559 (sha256
3560 (base32 "0ra25yfvjm5fpc47wm2dk8vicpdblvjjizbs0n1ak5d65mqinv4p"))))
3561 (build-system pyproject-build-system)
3562 (arguments
3563 (list
3564 ;; tests: 2191 passed, 142 skipped, 11 xfailed, 9 warnings, 298 subtests
3565 ;; passed
3566 #:test-flags #~(list "--ignore=pint/testsuite/benchmarks")
3567 #:phases
3568 #~(modify-phases %standard-phases
3569 (add-before 'check 'pre-check
3570 (lambda _
3571 (setenv "HOME" "/tmp"))))))
3572 (native-inputs
3573 (list python-hatch-vcs
3574 python-hatchling
3575 python-pytest
3576 python-pytest-mpl))
3577 (propagated-inputs
3578 (list python-flexcache
3579 python-flexparser
3580 python-platformdirs
3581 python-typing-extensions))
3582 (home-page "https://github.com/hgrecco/pint")
3583 (synopsis "Physical quantities module")
3584 (description
3585 "Pint is a Python package to define, operate and manipulate physical
3586quantities: the product of a numerical value and a unit of measurement. It
3587allows arithmetic operations between them and conversions from and to
3588different units.")
3589 (license license:bsd-3)))
3590
3591(define-public python-plotly
3592 (package
3593 (name "python-plotly")
3594 (version "6.8.0")
3595 (source
3596 (origin
3597 (method git-fetch)
3598 (uri (git-reference
3599 (url "https://github.com/plotly/plotly.py")
3600 (commit (string-append "v" version))))
3601 (file-name (git-file-name name version))
3602 (sha256
3603 (base32 "147vgm22zrg4wcjc427mxszbb8v6vhs7hgchcm8678cy304hawvd"))))
3604 (build-system pyproject-build-system)
3605 (arguments
3606 (list
3607 ;; tests: 3039 passed, 24 skipped, 292 deselected, 4 xfailed, 556 warnings
3608 #:test-flags
3609 ;; Missing dependencies.
3610 #~(list "--ignore=plotly/matplotlylib/mplexporter/tests/test_basic.py"
3611 "--ignore=plotly/matplotlylib/mplexporter/tests/test_utils.py"
3612 "--ignore=plotly/matplotlylib/tests/test_renderer.py"
3613 "--ignore=tests/test_io/test_renderers.py"
3614 "--ignore=tests/test_optional/test_kaleido/test_kaleido.py"
3615 ;; XXX: Combination of missing packages and assertion errors.
3616 "-k" (string-join
3617 (list "not test_acceptance_named"
3618 "test_colorscale_and_levels_same_length"
3619 "test_correct_order_param"
3620 "test_date_in_hover"
3621 "test_dependencies_not_imported"
3622 "test_fips_values_same_length"
3623 "test_from_json_output_type"
3624 "test_get_module_exists_submodule"
3625 "test_iplot_mpl_works"
3626 "test_iplot_works_after_you_call_init_notebook_mode"
3627 "test_iplot_works_without_init_notebook_mode"
3628 "test_lazy_imports"
3629 "test_ols_trendline_slopes"
3630 "test_overall_trendline"
3631 "test_read_json_from_file_string"
3632 "test_read_json_from_filelike"
3633 "test_read_json_from_pathlib"
3634 "test_render_mode"
3635 "test_scope_is_not_list"
3636 "test_trendline_enough_values"
3637 "test_trendline_nan_values"
3638 "test_trendline_on_timeseries"
3639 "test_trendline_results_passthrough")
3640 " and not "))
3641 #:phases
3642 #~(modify-phases %standard-phases
3643 (add-before 'build 'skip-npm
3644 ;; npm is not packaged so build without it
3645 (lambda _
3646 (setenv "SKIP_NPM" "T"))))))
3647 ;; XXX: Plotly requires a long list of test only packages, do not
3648 ;; propagate them, see:
3649 ;; <https://github.com/plotly/plotly.py/blob/v6.8.0/pyproject.toml#L56>.
3650 (native-inputs
3651 (list ;; python-anywidget ;not packaged yet in Guix
3652 python-colorcet
3653 python-geopandas
3654 python-hatchling
3655 python-inflect
3656 ;; python-kaleido ;not packaged yet in Guix
3657 python-numpy
3658 python-orjson
3659 python-pandas-minimal
3660 ;; python-pdfrw ;not packaged yet in Guix
3661 python-pillow
3662 ;; python-plotly-geo ;not packaged yet in Guix
3663 python-polars
3664 python-pyarrow
3665 python-pyshp
3666 python-pytest
3667 python-pytz
3668 python-scikit-image
3669 python-scipy-minimal
3670 python-shapely
3671 python-statsmodels
3672 python-xarray
3673 tzdata-for-tests))
3674 (propagated-inputs
3675 (list python-narwhals
3676 python-packaging))
3677 (home-page "https://plotly.com/python/")
3678 (synopsis "Interactive plotting library for Python")
3679 (description
3680 "Plotly's Python graphing library makes interactive,publication-quality
3681graphs online. Examples of how to make line plots, scatter plots, area
3682charts, bar charts, error bars, box plots, histograms, heatmaps, subplots,
3683multiple-axes, polar charts, and bubble charts.")
3684 (license license:expat)))
3685
3686(define-public python-plotnine
3687 (package
3688 (name "python-plotnine")
3689 (version "0.15.7")
3690 (source
3691 (origin
3692 (method git-fetch)
3693 (uri (git-reference
3694 (url "https://github.com/has2k1/plotnine")
3695 (commit (string-append "v" version))))
3696 (file-name (git-file-name name version))
3697 (sha256
3698 (base32 "0cf8bv9cjjdd0qa77kq6kpspwmbg8px6s5s5zplrns9awlskn8zg"))))
3699 (build-system pyproject-build-system)
3700 (arguments
3701 (list
3702 #:test-flags
3703 ;; XXX: Check for any new failing tests during next update cycle.
3704 ;; These all fail because the images are considered to be too different,
3705 ;; though they really do look fine.
3706 ;; See https://github.com/has2k1/plotnine/issues/627
3707 `(list ,@(map (lambda (file) (string-append "--ignore=" file))
3708 (list "tests/test_aes.py"
3709 "tests/test_annotation_logticks.py"
3710 "tests/test_coords.py"
3711 "tests/test_facet_labelling.py"
3712 "tests/test_facets.py"
3713 "tests/test_layout.py"
3714 "tests/test_position.py"
3715 "tests/test_qplot.py"
3716 "tests/test_plot_composition.py"
3717 "tests/test_scale_internals.py"
3718 "tests/test_scale_labelling.py"
3719 "tests/test_theme.py"))
3720 "--ignore-glob=tests/test_geom*.py"
3721 "--ignore-glob=tests/test_stat*.py"
3722 "-k" ; Other failures
3723 (string-append "not "
3724 (string-join
3725 (list
3726 ;; This triggers an unexpected but harmless
3727 ;; warning.
3728 "test_save_method"
3729 ;; This test fails to set the locale.
3730 "test_no_after_scale_warning"
3731 ;; Missing optional modules
3732 "test_non_linear_smooth"
3733 "test_non_linear_smooth_no_ci")
3734 " and not "
3735 'infix)))
3736 #:phases
3737 #~(modify-phases %standard-phases
3738 (add-before 'check 'pre-check
3739 (lambda* (#:key inputs outputs #:allow-other-keys)
3740 ;; The data files are referenced by the tests but they are not
3741 ;; installed.
3742 (copy-recursively "plotnine/data"
3743 (string-append (site-packages inputs
3744 outputs)
3745 "/plotnine/data"))
3746 (setenv "CI" "1") ;skip tests that are known to fail on CI.
3747 ;; Matplotlib needs to be able to write its configuration file
3748 ;; somewhere.
3749 (setenv "MPLCONFIGDIR" "/tmp")
3750 (setenv "TZ" "UTC")
3751 (setenv "TZDIR"
3752 (search-input-directory inputs "share/zoneinfo")))))))
3753 (propagated-inputs (list python-adjusttext
3754 python-matplotlib
3755 python-mizani
3756 python-numpy
3757 python-patsy
3758 python-scipy
3759 python-statsmodels))
3760 (native-inputs (list python-geopandas
3761 python-mock
3762 python-pandas
3763 python-pytest
3764 python-setuptools
3765 python-setuptools-scm
3766 python-wheel
3767 tzdata-for-tests))
3768 (home-page "https://github.com/has2k1/plotnine")
3769 (synopsis "Grammar of Graphics for Python")
3770 (description
3771 "Plotnine is a Python implementation of the Grammar of Graphics.
3772It is a powerful graphics concept for creating plots and visualizations in a
3773structured and declarative manner. It is inspired by the R package ggplot2
3774and aims to provide a similar API and functionality in Python.")
3775 (license license:expat)))
3776
3777(define-public python-pods
3778 (package
3779 (name "python-pods")
3780 (version "0.1.17")
3781 (source
3782 (origin
3783 (method url-fetch)
3784 (uri (pypi-uri "pods" version))
3785 (sha256
3786 (base32 "1z57jdwml2jzr2dq20p7pzx3ayhajgfd2d0xqjvgzx576hp2z1ac"))))
3787 (build-system pyproject-build-system)
3788 ;; Tests depend on Nose framework and try to download test data from
3789 ;; <https://github.com/SheffieldML/GPmat>.
3790 (arguments (list #:tests? #f))
3791 (native-inputs
3792 (list python-poetry-core))
3793 (propagated-inputs
3794 (list python-pandas
3795 python-pyyaml
3796 python-scipy
3797 python-tables))
3798 (home-page "https://github.com/lawrennd/ods")
3799 (synopsis "Python software for Open Data Science")
3800 (description "This package provides utilities and tools for open data
3801science including tools for accessing data sets in Python.")
3802 (license license:bsd-3)))
3803
3804(define-public python-polars
3805 (package
3806 (name "python-polars")
3807 (version "1.38.1")
3808 (source
3809 (origin
3810 (method url-fetch)
3811 (uri (pypi-uri "polars" version))
3812 (sha256
3813 (base32 "0fc2fx2p72g01nhhhfs1fzbwz58rcj7zppascanq1y2f6kjjnfl0"))))
3814 (build-system pyproject-build-system)
3815 ;; The wheel doesn't have tests.
3816 ;; TODO On the next update, hopefully if delete-all-but has made it
3817 ;; into guix, switch to a git-source and keep src/polars and tests
3818 ;; subdirectories.
3819 (arguments (list #:tests? #f))
3820 (propagated-inputs (list python-polars-runtime-32))
3821 (native-inputs (list python-setuptools))
3822 (home-page "https://pola.rs/")
3823 (synopsis "Blazingly fast DataFrame library")
3824 (description
3825 "Polars is a DataFrame library for manipulating structured data.")
3826 (license license:expat)))
3827
3828(define-public python-polars-runtime-32
3829 (package
3830 (name "python-polars-runtime-32")
3831 (version "1.38.1")
3832 (source
3833 (origin
3834 (method url-fetch)
3835 (uri (pypi-uri "polars_runtime_32" version))
3836 (sha256
3837 (base32 "1v72zkyhcziiizpymjlh2d5rwnkmvhlp18ln8brp31y5yp8hxwh4"))))
3838 (build-system pyproject-build-system)
3839 (arguments
3840 (list
3841 #:imported-modules `(,@%cargo-build-system-modules
3842 ,@%pyproject-build-system-modules)
3843 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3844 (guix build pyproject-build-system)
3845 (guix build utils))
3846 ;; There are rust tests which would be costly to run, but no python ones.
3847 #:tests? #f
3848 #:phases
3849 #~(modify-phases %standard-phases
3850 (add-after 'unpack 'build-without-rust-nightly
3851 (lambda _
3852 ;; Add cargo flags that allow compilation without Rust nightly.
3853 (substitute* "pyproject.toml"
3854 ((".*tool.maturin.*" all)
3855 (string-append all "no-default-features = true\n"
3856 "features = [\"full\"]\n")))))
3857 (add-after 'unpack 'fix-tikv-jemallocator
3858 (lambda _
3859 ;; removes a patch.crates-io option that is packaged in
3860 ;; gnu/packages/rust-sources: rust-tikv-jemallocator-for-polars
3861 (substitute* "Cargo.toml"
3862 (("^tikv-jemallocator.*") ""))))
3863 ;; jemalloc needs unbundling for tikv-jemallocator-sys
3864 (add-before 'build 'override-jemalloc
3865 (lambda* (#:key inputs #:allow-other-keys)
3866 (let ((jemalloc (assoc-ref inputs "jemalloc")))
3867 ;; This flag is needed when not using the bundled jemalloc.
3868 ;; https://github.com/tikv/jemallocator/issues/19
3869 (setenv "CARGO_FEATURE_UNPREFIXED_MALLOC_ON_SUPPORTED_PLATFORMS" "1")
3870 (setenv "JEMALLOC_OVERRIDE"
3871 (string-append jemalloc "/lib/libjemalloc_pic.a")))))
3872 (add-after 'unpack 'prepare-cargo-build-system
3873 (lambda args
3874 (for-each
3875 (lambda (phase)
3876 (format #t "Running cargo phase: ~a~%" phase)
3877 (apply (assoc-ref cargo:%standard-phases phase)
3878 #:cargo-target #$(cargo-triplet)
3879 args))
3880 '(prepare-rust-crates
3881 unpack-rust-crates
3882 configure
3883 check-for-pregenerated-files
3884 patch-cargo-checksums)))))))
3885 (inputs
3886 (cons* jemalloc
3887 lz4
3888 (list zstd "lib")
3889 (cargo-inputs 'python-polars-runtime-32)))
3890 (native-inputs
3891 (append
3892 (list maturin
3893 pkg-config
3894 rust
3895 `(,rust "cargo"))
3896 (or (and=> (%current-target-system)
3897 (compose list make-rust-sysroot))
3898 '())))
3899 (home-page "https://pola.rs/")
3900 (synopsis "Blazingly fast DataFrame library")
3901 (description "Polars is an analytical query engine written for DataFrames.
3902It is designed to be fast, easy to use and expressive.")
3903 (properties '(("upstream-name" . "polars-runtime-32")
3904 (tunable? . #true)))
3905 (license license:expat)))
3906
3907(define-public python-pyamg
3908 (package
3909 (name "python-pyamg")
3910 (version "5.3.0")
3911 (source (origin
3912 (method url-fetch)
3913 (uri (pypi-uri "pyamg" version))
3914 (modules '((guix build utils)))
3915 (snippet
3916 ;; Delete autogenerated files, regenerate in a phase.
3917 #~(begin
3918 (for-each
3919 (lambda (file)
3920 (delete-file (string-append "pyamg/amg_core/" file)))
3921 '("air_bind.cpp"
3922 "evolution_strength_bind.cpp"
3923 "graph_bind.cpp"
3924 "krylov_bind.cpp"
3925 "linalg_bind.cpp"
3926 "relaxation_bind.cpp"
3927 "ruge_stuben_bind.cpp"
3928 "smoothed_aggregation_bind.cpp"
3929 "tests/bind_examples_bind.cpp"))))
3930 (sha256
3931 (base32
3932 "02w6xy3i0qcpsfc64zw8k15mi6qykq65h3d98vi9p6fdlkqx08sk"))))
3933 (arguments
3934 (list
3935 ;; tests: 40 passed, 1 skipped
3936 #:phases
3937 #~(modify-phases %standard-phases
3938 ;; Regenerate the autogenerated files.
3939 (add-after 'unpack 'amg-core-bind-them
3940 (lambda _
3941 ;; bindthem.py heavily depends on location to produce *_bind.cpp
3942 ;; file, make it available in tests as well.
3943 (copy-file "pyamg/amg_core/bindthem.py"
3944 "pyamg/amg_core/tests/bindthem.py")
3945 (with-directory-excursion "pyamg/amg_core"
3946 (substitute* "bindthem.py"
3947 (("/usr/bin/env python3") (which "python3")))
3948 (invoke "sh" "generate.sh"))
3949 (with-directory-excursion "pyamg/amg_core/tests"
3950 (invoke "python" "bindthem.py" "bind_examples.h"))))
3951 (add-before 'check 'pre-check
3952 (lambda _
3953 (copy-recursively "pyamg/tests" "tests")
3954 (delete-file-recursively "pyamg"))))))
3955 (build-system pyproject-build-system)
3956 (native-inputs
3957 (list pybind11-2
3958 python-cppheaderparser
3959 python-pytest
3960 python-pyyaml
3961 python-setuptools
3962 python-setuptools-scm))
3963 (propagated-inputs
3964 (list python-numpy
3965 python-scipy))
3966 (home-page "https://github.com/pyamg/pyamg")
3967 (synopsis "Algebraic Multigrid Solvers in Python")
3968 (description "PyAMG is a Python library of Algebraic Multigrid
3969(AMG) solvers. It features implementations of:
3970@itemize
3971@item Ruge-Stuben (RS) or Classical AMG
3972@item AMG based on Smoothed Aggregation (SA)
3973@item Adaptive Smoothed Aggregation (αSA)
3974@item Compatible Relaxation (CR)
3975@item Krylov methods such as CG, GMRES, FGMRES, BiCGStab, MINRES, etc.
3976@end itemize")
3977 (license license:expat)))
3978
3979(define-public python-pydicom
3980 (package
3981 (name "python-pydicom")
3982 (version "2.4.4")
3983 (source (origin
3984 (method git-fetch)
3985 (uri (git-reference
3986 (url "https://github.com/pydicom/pydicom")
3987 (commit (string-append "v" version))))
3988 (file-name (git-file-name name version))
3989 (sha256
3990 (base32
3991 "0ksyyc1hbhyqy289a2frn84ss29fb7czirx3dkxx56f4ia33b4c8"))))
3992 (build-system pyproject-build-system)
3993 (arguments
3994 (list
3995 #:test-flags
3996 ;; Skip tests that require networking.
3997 #~(list "-k" (string-append
3998 "not test_jpeg_ls_pixel_data.py"
3999 " and not test_gdcm_pixel_data.py"
4000 " and not test_pillow_pixel_data.py"
4001 " and not test_rle_pixel_data.py"
4002 " and not Test_JPEG_LS_Lossless_transfer_syntax"
4003 " and not test_numpy_pixel_data.py"
4004 " and not test_data_manager.py"
4005 " and not test_handler_util.py"
4006 " and not test_overlay_np.py"
4007 " and not test_encoders_pydicom.py"
4008 " and not test_encaps.py"
4009 " and not test_reading_ds_with_known_tags_with_UN_VR"
4010 " and not TestDatasetOverlayArray"
4011 " and not TestReader"
4012 " and not test_filewriter.py"))))
4013 (native-inputs (list python-pytest python-flit-core))
4014 (inputs (list gdcm libjpeg-turbo))
4015 (propagated-inputs (list python-numpy python-pillow))
4016 (home-page "https://github.com/pydicom/pydicom")
4017 (synopsis "Python library for reading and writing DICOM data")
4018 (description "@code{python-pydicom} is a Python library for reading and
4019writing DICOM medical imaging data. It can read, modify and write DICOM
4020data.")
4021 (license license:expat)))
4022
4023(define-public python-pydoe
4024 (package
4025 (name "python-pydoe")
4026 (version "1.5.0")
4027 (source
4028 (origin
4029 (method url-fetch)
4030 (uri (pypi-uri "pydoe" version))
4031 (sha256
4032 (base32 "1jr0dal2sibj6y5qr0i7h1b52x73c06pl5q20ad4zam93n7hpadi"))))
4033 (build-system pyproject-build-system)
4034 (arguments
4035 (list
4036 #:test-flags
4037 #~(list "--pyargs" "pydoe"
4038 "tests")
4039 #:phases
4040 #~(modify-phases %standard-phases
4041 (add-before 'check 'remove-local-source
4042 (lambda _
4043 (delete-file-recursively "pydoe"))))))
4044 (native-inputs
4045 (list python-hatch-vcs
4046 python-hatchling
4047 python-pytest))
4048 (propagated-inputs
4049 (list python-numpy
4050 python-scipy))
4051 (home-page "https://pydoe.github.io/pydoe/")
4052 (synopsis "Design of Experiments for Python")
4053 (description
4054 "PyDOE is a Python package for design of experiments (DOE),
4055 enabling scientists, engineers, and statisticians to efficiently construct
4056experimental designs.")
4057 (license license:bsd-3)))
4058
4059(define-public python-pyet
4060 (package
4061 (name "python-pyet")
4062 (version "1.3.1")
4063 (source
4064 (origin
4065 (method url-fetch)
4066 (uri (pypi-uri "pyet" version))
4067 (sha256
4068 (base32 "1dblsx0bv1g453hcx5vwij1zgankwgwvhwllqkn47k578h038xvy"))))
4069 (build-system pyproject-build-system)
4070 (native-inputs
4071 (list python-mock
4072 python-pytest
4073 python-setuptools
4074 python-wheel))
4075 (propagated-inputs
4076 (list python-pandas
4077 python-xarray))
4078 (home-page "https://github.com/pyet-org/pyet")
4079 (synopsis "Python package for evapotranspiration calculation")
4080 (description
4081 "This package provides a Python library for calculating
4082Evapotranspiration using various standard methods.")
4083 (license license:expat)))
4084
4085(define-public python-pyjanitor
4086 (package
4087 (name "python-pyjanitor")
4088 (version "0.32.23")
4089 (source
4090 (origin
4091 (method git-fetch)
4092 (uri (git-reference
4093 (url "https://github.com/pyjanitor-devs/pyjanitor")
4094 (commit (string-append "v" version))))
4095 (file-name (git-file-name name version))
4096 (sha256
4097 (base32 "1mvgabsn5jl2aidh2mcqdmh60p2g514nb5sxwskhz1q57pk4m0w9"))))
4098 (build-system pyproject-build-system)
4099 ;; Pyjanitor has an extensive test suite. For quick debugging, the tests
4100 ;; marked turtle can be skipped using "-m" "not turtle".
4101 (arguments
4102 (list
4103 ;; tests: 1030 passed, 2 skipped, 42 xfailed, 6 xpassed, 594 warnings
4104 #:test-flags
4105 ;; The tests take quite long, so consider adding the "-n" line and
4106 ;; adding python-pytest-xdist to the native-inputs when testing.
4107 ;; However, the tests are not deterministic, enen they are enabled in
4108 ;; project's CI (.github/workflows/tests.yml), when ran with "-n,
4109 ;; --numprocesses" , so disable again before committing.
4110 #~(list ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
4111 ;; Test files are not included.
4112 "--ignore=tests/io/test_read_csvs.py"
4113 ;; Polars has not been packaged yet.
4114 "--ignore=tests/polars/"
4115 ;; PySpark has not been packaged yet.
4116 "--ignore=tests/spark/"
4117 ;; Flaky test (fails for performance reasons)
4118 "--deselect=tests/math/test_ecdf.py::test_ecdf_string"
4119 ;; Tries to connect to the internet.
4120 "-k" (string-append "not test_is_connected"
4121 ;; Test files are not included.
4122 " and not test_read_commandline_bad_cmd"
4123 ;; XXX: Fatal Python error: Segmentation fault
4124 " and not test_maccs_keys_fingerprint"
4125 " and not test_morgan_fingerprint_counts"
4126 " and not test_morgan_fingerprint_bits"
4127 ;; AssertionError: DataFrame.iloc[:, 1]
4128 ;; (column name="cities") are different
4129 " and not test_various_sorted"))
4130 #:phases
4131 #~(modify-phases %standard-phases
4132 (add-before 'check 'set-env-ci
4133 (lambda _
4134 ;; Some tests are skipped if the JANITOR_CI_MACHINE
4135 ;; variable is not set.
4136 (setenv "JANITOR_CI_MACHINE" "1"))))))
4137 (propagated-inputs (list python-janitor-rs
4138 python-multipledispatch
4139 python-natsort
4140 python-pandas-flavor
4141 python-scipy
4142 ;; [optional]
4143 python-biopython
4144 python-unyt))
4145 (native-inputs (list python-numba
4146 python-openpyxl
4147 python-pytest
4148 ;;python-pytest-xdist ;only for -n when testing
4149 ;; TODO: Remove python-requests and inject its target
4150 ;; data to make the package behaviour reproducible.
4151 python-requests
4152 python-setuptools
4153 rdkit))
4154 (home-page "https://github.com/pyjanitor-devs/pyjanitor")
4155 (synopsis "Tools for cleaning and transforming Pandas DataFrames")
4156 (description
4157 "@code{pyjanitor} provides a set of data cleaning routines for
4158@code{pandas} DataFrames. These routines extend the method chaining API
4159defined by @code{pandas} for a subset of its methods. Originally, this
4160package was a port of the R package by the same name and it is inspired by the
4161ease-of-use and expressiveness of the @code{dplyr} package.")
4162 (license license:expat)))
4163
4164(define-public python-pykdtree
4165 (package
4166 (name "python-pykdtree")
4167 (version "1.4.2")
4168 (source
4169 (origin
4170 (method url-fetch)
4171 (uri (pypi-uri "pykdtree" version))
4172 (sha256
4173 (base32 "1xb5xdp32s5ffcbbb6vlrj4i70hdknajvr9yhzx0wld52rx9caxx"))))
4174 (build-system pyproject-build-system)
4175 (arguments
4176 (list
4177 ;; FIXME: Tests are unable to import properly, but it seems to work in
4178 ;; real conditions.
4179 #:tests? #f
4180 #:phases
4181 #~(modify-phases %standard-phases
4182 (add-after 'install 'fix-site-packages
4183 (lambda* (#:key inputs outputs #:allow-other-keys)
4184 (with-directory-excursion (site-packages inputs outputs)
4185 (for-each delete-file (find-files "." "test*"))))))))
4186 (native-inputs
4187 (list python-cython python-pytest python-setuptools python-wheel))
4188 (propagated-inputs
4189 (list python-numpy))
4190 (home-page "https://github.com/storpipfugl/pykdtree")
4191 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
4192 (description
4193 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
4194search in Python.")
4195 (license license:lgpl3+)))
4196
4197(define-public python-pylems
4198 (package
4199 (name "python-pylems")
4200 (version "0.6.9")
4201 (source
4202 (origin
4203 (method git-fetch)
4204 (uri (git-reference
4205 (url "https://github.com/LEMS/pylems")
4206 (commit (string-append "v" version))))
4207 (file-name (git-file-name name version))
4208 (sha256
4209 (base32 "0gimdx89cdla1b6zzkdrmj979nn2zy2475qvpwxxas0iv27ql0vj"))))
4210 (build-system pyproject-build-system)
4211 (arguments
4212 ;; Disable tests that require networking
4213 (list #:test-flags #~(list "./lems/test" "-k" "not test_load_write_xml")))
4214 (native-inputs (list python-setuptools python-pytest))
4215 (propagated-inputs (list python-lxml python-matplotlib))
4216 (home-page "https://github.com/LEMS/pylems")
4217 (synopsis
4218 "Python support for the Low Entropy Model Specification language (LEMS)")
4219 (description "A @acronym{LEMS, Low Entropy Model Specification} simulator
4220written in Python which can be used to run NeuroML2 models.")
4221 (license license:lgpl3)))
4222
4223(define-public python-pymcubes
4224 (package
4225 (name "python-pymcubes")
4226 (version "0.1.6")
4227 (source
4228 (origin
4229 (method git-fetch) ; no tests in PyPI
4230 (uri (git-reference
4231 (url "https://github.com/pmneila/PyMCubes")
4232 (commit (string-append "v" version))))
4233 (file-name (git-file-name name version))
4234 (sha256
4235 (base32 "1v2qhc4pwanx6a8k843mbh45yk77n3w63sy5lzk5c3q4pkvfj1b9"))))
4236 (build-system pyproject-build-system)
4237 (arguments
4238 (list
4239 #:phases
4240 #~(modify-phases %standard-phases
4241 (add-before 'check 'prepare-test-environment
4242 (lambda _
4243 ;; FileNotFoundError: [Errno 2] No such file or directory:
4244 ;; 'output/test.obj'
4245 (mkdir "output")
4246 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4247 (native-inputs
4248 (list python-cython
4249 python-pytest
4250 python-setuptools
4251 python-wheel))
4252 (propagated-inputs
4253 (list python-pycollada
4254 python-numpy
4255 python-scipy))
4256 (home-page "https://github.com/pmneila/PyMCubes")
4257 (synopsis "Marching cubes for Python")
4258 (description
4259 "@code{PyMCubes} is an implementation of the marching cubes algorithm to
4260extract iso-surfaces from volumetric data. The volumetric data can be given
4261as a three-dimensional @code{NumPy} array or as a Python function @code{f(x,
4262y, z)}.")
4263 (license license:bsd-3)))
4264
4265(define-public python-pynetdicom
4266 (package
4267 (name "python-pynetdicom")
4268 (version "2.1.1")
4269 (source (origin
4270 (method url-fetch)
4271 (uri (pypi-uri "pynetdicom" version))
4272 (sha256
4273 (base32
4274 "1smzrnc93nmv8jz4np9knas74a46b1nhb3hjpf8n9vfpxypgnwcn"))))
4275 (build-system pyproject-build-system)
4276 (arguments
4277 (list
4278 #:test-flags
4279 ;; Tests takes about 10-15min to complete, and not thread save.
4280 ;; Skip tests that require networking.
4281 #~(list "-k" (string-append
4282 " not TestFindSCP"
4283 " and not TestQRGetServiceClass"
4284 " and not TestQRMoveServiceClass"
4285 " and not TestStoreSCP"
4286 " and not test_ae.py"
4287 " and not test_echoscp.py"
4288 " and not test_qrscp_echo.py"
4289 " and not test_storescp.py"
4290 " and not test_pr_level_patient"
4291 " and not test_pr_level_series"
4292 " and not test_scp_cancelled"))))
4293 (native-inputs (list python-numpydoc
4294 python-poetry-core
4295 python-pytest))
4296 (propagated-inputs (list python-pydicom
4297 python-pyfakefs
4298 python-sqlalchemy))
4299 (home-page "https://github.com/pydicom/pynetdicom")
4300 (synopsis "Python implementation of the DICOM networking protocol")
4301 (description
4302 "@code{pynetdicom} is a Python package that implements the DICOM
4303networking protocol. It allows the easy creation of DICOM
4304@acronym{SCUs,Service Class Users} and @acronym{SCPs,Service Class
4305Providers}.")
4306 (license license:expat)))
4307
4308(define-public python-pynrrd
4309 (package
4310 (name "python-pynrrd")
4311 (version "1.1.3")
4312 (source (origin
4313 (method git-fetch)
4314 (uri (git-reference
4315 (url "https://github.com/mhe/pynrrd")
4316 (commit (string-append "v" version))))
4317 (file-name (git-file-name name version))
4318 (sha256
4319 (base32
4320 "1l0hjbqzf5i1bmpxpblpyyqkhci3mb5n07x6hqf2a91hggfyrvda"))))
4321 (build-system pyproject-build-system)
4322 (native-inputs
4323 (list python-pytest python-setuptools))
4324 (propagated-inputs
4325 (list python-numpy))
4326 (home-page "https://github.com/mhe/pynrrd")
4327 (synopsis "Python module for reading and writing NRRD files")
4328 (description
4329 "@code{pynrrd} is a Python module for reading and writing @acronym{NRRD,
4330Nearly Raw Raster Data} files (format designed to support scientific
4331visualization and image processing involving N-dimensional raster data) into
4332and from numpy arrays.")
4333 (license license:expat)))
4334
4335(define-public python-pynsee
4336 (package
4337 (name "python-pynsee")
4338 (version "0.1.8")
4339 (source
4340 (origin
4341 (method url-fetch)
4342 (uri (pypi-uri "pynsee" version))
4343 (sha256
4344 (base32 "1w084ynwdd9f4wpcnakqc0nxcbj9gr8vppv4rd258i3dp1qq4sw5"))))
4345 (build-system pyproject-build-system)
4346 (arguments (list #:tests? #f)) ; XXX: Tests require network access.
4347 (native-inputs
4348 (list python-setuptools
4349 python-wheel))
4350 (propagated-inputs
4351 (list python-appdirs
4352 python-openpyxl
4353 python-pandas
4354 python-platformdirs
4355 python-pyarrow
4356 python-requests
4357 python-shapely
4358 python-tqdm
4359 python-unidecode
4360 python-urllib3
4361 python-xlrd))
4362 (home-page "https://pynsee.readthedocs.io")
4363 (synopsis
4364 "Tools to Easily Search and Download French Data From INSEE and IGN APIs")
4365 (description
4366 "This package provides tools to easily search and download French data
4367from INSEE and IGN APIs. This data includes more than 150 000 macroeconomic
4368series, a dozen datasets of local french data, numerous sources available on
4369@url{insee.fr}, geographical limits of administrative areas taken from IGN as
4370well as key metadata and SIRENE database containing data on all French
4371compagnies.")
4372 (license license:expat)))
4373
4374(define-public python-pyqtgraph
4375 (package
4376 (name "python-pyqtgraph")
4377 (version "0.13.7")
4378 (source
4379 (origin
4380 (method url-fetch)
4381 (uri (pypi-uri "pyqtgraph" version))
4382 (sha256
4383 (base32 "1qyr461hcvhgy02slfkgrbip2xwa8zz6dvmi1476v6f66lclzy34"))))
4384 (build-system pyproject-build-system)
4385 (arguments
4386 ;; tests: 949 passed, 1356 skipped, 2 deselected, 8 xfailed, 130 warnings
4387 (list #:test-flags
4388 ;; Failed: CALL ERROR: Exceptions caught in Qt event loop.
4389 #~(list "--deselect=tests/exporters/test_svg.py::test_plotscene"
4390 ;; The test_reload test fails. It suggests to disable
4391 ;; assert rewriting in Pytest, but it still doesn't pass.
4392 "-k" "not test_reload"
4393 ;; Run unit tets only.
4394 "tests")
4395 #:phases
4396 #~(modify-phases %standard-phases
4397 (add-before 'check 'set-qpa
4398 (lambda _
4399 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
4400 (native-inputs
4401 (list python-pytest
4402 ;; Do not propagate Qt5/Qt6 let the user of the package to select
4403 ;; any supported one, see
4404 ;; <https://pyqtgraph.readthedocs.io/en/pyqtgraph-0.13.7>
4405 ;; </getting_started/how_to_use.html#pyqt-and-pyside>.
4406 python-pyqt-6
4407 python-pytest-qt
4408 python-setuptools))
4409 (propagated-inputs
4410 (list python-h5py
4411 python-numpy
4412 python-pyopengl
4413 python-scipy))
4414 (home-page "https://www.pyqtgraph.org")
4415 (synopsis "Scientific graphics and GUI library for Python")
4416 (description
4417 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
4418and PySide6. It is intended for use in mathematics, scientific or engineering
4419applications.")
4420 (license license:expat)))
4421
4422(define-public python-pytensor
4423 (package
4424 (name "python-pytensor")
4425 (version "3.2.4")
4426 (source (origin
4427 (method git-fetch)
4428 (uri (git-reference
4429 (url "https://github.com/pymc-devs/pytensor")
4430 (commit (string-append "rel-" version))))
4431 (file-name (git-file-name name version))
4432 (sha256
4433 (base32
4434 "0wqklzah9rysxnmf34zrj4njc1k79r9n9kbi1cnm6qj2dds6bm3d"))))
4435 (build-system pyproject-build-system)
4436 (arguments
4437 (list
4438 ;; tests: 1906 passed, 2581 skipped, 34 deselected, 12 xfailed, 274 warnings
4439 #:test-flags
4440 ;; XXX: Full test suite takes about 20-30min to complete in single
4441 ;; thread, attempt to run tests in parallel with pytest-xdist fails even
4442 ;; so upstream provides a support for that, try to figure out how to
4443 ;; improve it.
4444 ;;
4445 ;; Upstream implements a script, showing slow tests which may be used to
4446 ;; exclude even more hanging/slow ones, see:
4447 ;; <scripts/slowest_tests/extract-slow-tests.py>.
4448 ;;
4449 #~(list "--benchmark-disable"
4450 "--benchmark-skip"
4451 "--durations=50"
4452 ;; Skip computationally intensive tests.
4453 "--ignore=tests/scan/"
4454 "--ignore=tests/tensor/"
4455 "--ignore=tests/sandbox/"
4456 "--ignore=tests/sparse/sandbox/"
4457 ;; A mixture of assertions are not equal in these tests.
4458 "--deselect=tests/link/numba/test_nlinalg.py::test_Eigh[x0-L-None]"
4459 #$@(map (lambda (test)
4460 (string-append "--deselect=tests/graph/rewriting/"
4461 "test_basic.py::"
4462 test))
4463 ;; Tests fail with similar errors: AssertionError:
4464 ;; assert 'FunctionGraph(Op1(Op2(x, y), z))' ==
4465 ;; 'FunctionGraph(Op4(z, y))'
4466 (list "TestPatternNodeRewriter::test_replace_output"
4467 "TestPatternNodeRewriter::test_nested_out_pattern"
4468 "TestPatternNodeRewriter::test_unification_1"
4469 "TestPatternNodeRewriter::test_replace_subgraph"
4470 "TestPatternNodeRewriter::test_no_recurse"
4471 "TestPatternNodeRewriter::test_multiple"
4472 "TestPatternNodeRewriter::test_nested_even"
4473 "TestPatternNodeRewriter::test_nested_odd"
4474 "TestPatternNodeRewriter::test_expand"
4475 "TestPatternNodeRewriter::test_ambiguous"
4476 "TestPatternNodeRewriter::test_constant"
4477 "TestPatternNodeRewriter::test_constraints"
4478 "TestPatternNodeRewriter::test_match_same"
4479 "TestPatternNodeRewriter::test_eq"
4480 "TestEquilibrium::test_1"
4481 "TestEquilibrium::test_2"
4482 "TestEquilibrium::test_low_use_ratio"
4483 ;; A mixture of assertions are not equal:
4484 "TestPatternNodeRewriter::test_allow_multiple_clients"
4485 "TestPatternNodeRewriter::test_op_pattern"
4486 "test_patternsub_values_eq_approx[out_pattern0-True]"
4487 "test_patternsub_values_eq_approx[out_pattern0-False]"
4488 "test_patternsub_values_eq_approx[x-True]"
4489 "test_patternsub_values_eq_approx[x-False]"
4490 "test_patternsub_multi_output_nodes"))
4491 #$@(map (lambda (test)
4492 (string-append "--deselect=tests/graph/" test))
4493 (list "rewriting/test_kanren.py::test_kanren_basic"
4494 "rewriting/test_kanren.py::test_KanrenRelationSub_filters"
4495 "rewriting/test_kanren.py::test_KanrenRelationSub_dot"
4496 "rewriting/test_unify.py::test_unify_Variable"
4497 "rewriting/test_unify.py::test_ConstrainedVar"
4498 "rewriting/test_unify.py::test_unify_OpPattern"
4499 "test_destroyhandler.py::test_misc")))
4500 #:phases
4501 #~(modify-phases %standard-phases
4502 (add-before 'check 'pre-check
4503 (lambda _
4504 ;; It is required for most tests.
4505 (setenv "HOME" "/tmp")
4506 ;; This would otherwise interfere with finding the installed
4507 ;; pytensor when running tests.
4508 (delete-file-recursively "pytensor"))))))
4509 (native-inputs (list python-cython
4510 python-pytest
4511 python-pytest-benchmark
4512 python-pytest-mock
4513 python-pytest-xdist
4514 python-versioneer
4515 python-setuptools))
4516 (propagated-inputs (list python-cons
4517 python-etuples
4518 python-filelock
4519 python-logical-unification
4520 python-minikanren
4521 python-numba
4522 python-numpy
4523 python-scipy
4524 ;; [optional]
4525 ;; python-jaxlib
4526 ;; python-jax
4527 #;python-llvmlite))
4528 (home-page "https://pytensor.readthedocs.io/en/latest/")
4529 (synopsis
4530 "Library for mathematical expressions in multi-dimensional arrays")
4531 (description
4532 "PyTensor is a Python library that allows one to define, optimize, and
4533efficiently evaluate mathematical expressions involving multi-dimensional
4534arrays. It is a fork of the Aesara library.")
4535 (license license:bsd-3)))
4536
4537(define-public python-pytest-pyvista
4538 (package
4539 (name "python-pytest-pyvista")
4540 (version "0.3.2")
4541 (source
4542 (origin
4543 (method url-fetch)
4544 (uri (pypi-uri "pytest_pyvista" version))
4545 (sha256
4546 (base32 "0hgk3a5wwymk3k7ih4lsmkd44dfnsd842zv5859izqxkw74j2xpn"))))
4547 (build-system pyproject-build-system)
4548 (arguments
4549 (list
4550 ;; No tests included in the PyPI tarball.
4551 #:tests? #f))
4552 (propagated-inputs (list python-numpy python-pillow python-pytest-8))
4553 (native-inputs (list python-flit-core))
4554 (home-page "https://github.com/pyvista/pytest-pyvista")
4555 (synopsis "Pytest plugin for comparing PyVista plot images")
4556 (description "This package provides a Pytest plugin that facilitates
4557the comparison of images produced by PyVista, generating cached images from
4558tests and comparing subsequent results against that cache.")
4559 (license license:expat)))
4560
4561(define-public python-pythran
4562 (package
4563 (name "python-pythran")
4564 ;; 0.18.1 (2025-11-15), released version does not support gast 0.7.0 and
4565 ;; beniget 0.5.0.
4566 (properties '((commit . "1159b80a09ece110a369729507ba5d0bc8e895b2")
4567 (revision . "0")))
4568 (version (git-version "0.18.1"
4569 (assoc-ref properties 'revision)
4570 (assoc-ref properties 'commit)))
4571 (source
4572 (origin
4573 (method git-fetch)
4574 (uri (git-reference
4575 (url "https://github.com/serge-sans-paille/pythran")
4576 (commit (assoc-ref properties 'commit))))
4577 (file-name (git-file-name name version))
4578 (sha256
4579 (base32 "0w9vbfqsazrl7zv4b7mh8alib4kihk9gn6xmxp2w39jg5wpk2bdi"))))
4580 (build-system pyproject-build-system)
4581 (arguments
4582 (list
4583 ;; FIXME: find more reliable tests file(s), all tests from
4584 ;; test_typing.py fail with error: ModuleNotFoundError: No module named
4585 ;; 'distutils.msvccompiler'.
4586 #:tests? #f
4587 #:phases
4588 #~(modify-phases %standard-phases
4589 (add-before 'build 'unvendor-xsimd
4590 (lambda _
4591 (delete-file-recursively "pythran/xsimd")
4592 (symlink #$(package-source
4593 (this-package-input "xsimd"))
4594 "pythran/xsimd"))))))
4595 (native-inputs
4596 (list python-setuptools))
4597 (propagated-inputs
4598 (list boost ;headers need to be available
4599 xsimd
4600 python-beniget
4601 python-gast
4602 python-numpy
4603 python-ply))
4604 (home-page "https://github.com/serge-sans-paille/pythran")
4605 (synopsis "Ahead of Time compiler for numeric kernels")
4606 (description
4607 "Pythran is an ahead of time compiler for a subset of the Python
4608language, with a focus on scientific computing. It takes a Python module
4609annotated with a few interface descriptions and turns it into a native
4610Python module with the same interface, but (hopefully) faster.")
4611 (license license:bsd-3)))
4612
4613(define-public python-pyts
4614 (let ((commit "4f3d97bcb1016d33dbfaef68c0931756a4552410")
4615 (revision "0"))
4616 (package
4617 (name "python-pyts")
4618 (version (git-version "0.13.0" revision commit))
4619 (source
4620 (origin
4621 (method git-fetch)
4622 (uri (git-reference
4623 (url "https://github.com/johannfaouzi/pyts")
4624 (commit commit)))
4625 (file-name (git-file-name name version))
4626 (sha256
4627 (base32 "16hlxwajdz44qs8vi7bhiania2b3201fv3pqiwsx79rb554bvl66"))))
4628 (build-system pyproject-build-system)
4629 (arguments
4630 (list
4631 #:test-flags
4632 #~(list "--pyargs" "pyts"
4633 ;; Most likely a flaky test.
4634 "--deselect=preprocessing/transformer.py::\
4635pyts.preprocessing.transformer.QuantileTransformer")
4636 #:phases
4637 #~(modify-phases %standard-phases
4638 ;; See https://github.com/johannfaouzi/pyts/issues/168
4639 (add-after 'unpack 'fix-scikit-learn-compat
4640 (lambda _
4641 (substitute* (list "pyts/metrics/dtw.py"
4642 "pyts/preprocessing/imputer.py"
4643 "pyts/preprocessing/transformer.py")
4644 (("force_all_finite=")
4645 "ensure_all_finite=")))))))
4646 (propagated-inputs
4647 (list python-joblib
4648 python-numba
4649 python-numpy
4650 python-scikit-learn
4651 python-scipy))
4652 (native-inputs
4653 (list python-pytest python-setuptools))
4654 (home-page "https://github.com/johannfaouzi/pyts")
4655 (synopsis "Python package for time series classification")
4656 (description
4657 "pyts is a Python package for time series classification. It aims to
4658make time series classification easily accessible by providing preprocessing
4659and utility tools, and implementations of state-of-the-art algorithms. Most
4660of these algorithms transform time series, thus pyts provides several tools to
4661perform these transformations.")
4662 (license license:bsd-3))))
4663
4664(define-public python-pyvista
4665 (package
4666 (name "python-pyvista")
4667 (version "0.46.5")
4668 (source
4669 (origin
4670 (method git-fetch)
4671 (uri (git-reference
4672 (url "https://github.com/pyvista/pyvista")
4673 (commit (string-append "v" version))))
4674 (file-name (git-file-name name version))
4675 (sha256
4676 (base32 "0553bp4fhbar9z0ybjv1mw1jhb5rhrr4v6q2bzmia0ww0dn8fc69"))))
4677 (build-system pyproject-build-system)
4678 (arguments
4679 (list
4680 ;; tests: 5891 passed, 623 skipped, 355 deselected, 3 xfailed, 167 warnings
4681 #:test-flags
4682 ;; TODO: Find out what's going on with skipped tests.
4683 #~(list "--ignore=tests/plotting/test_charts.py"
4684 "--ignore=tests/examples/test_download_files.py"
4685 "--ignore=tests/examples/test_downloads.py"
4686 "--ignore=tests/plotting/test_texture.py"
4687 ;; Tries to download data from GitHub at collection time.
4688 "--ignore=tests/core/test_dataobject_filters.py"
4689 ;; Tries to download data from GitHub at collection time.
4690 "--ignore=tests/core/test_dataset_filters.py"
4691 ;; Tries to download data from GitHub at collection time.
4692 "--ignore=tests/plotting/test_plotter.py"
4693 "-k" (string-join
4694 (list "not test_actor_texture"
4695 "test_add_multiple"
4696 "test_add_timer_event"
4697 "test_avsucd_reader"
4698 "test_binarymarchingcubesreader"
4699 "test_bmpreader"
4700 "test_box_axes"
4701 "test_byureader"
4702 "test_cast_to_numpy_raises"
4703 "test_compute_boundary_mesh_quality"
4704 "test_connectivity_"
4705 "test_dataset_loader_cubemap"
4706 "test_dataset_loader_dicom"
4707 "test_dataset_loader_from_nested_files_and_directory"
4708 "test_dataset_loader_from_nested_multiblock"
4709 "test_dataset_loader_one_file"
4710 "test_dataset_loader_two_files_both_loadable"
4711 "test_dataset_loader_two_files_one_loadable"
4712 "test_dcmreader"
4713 "test_demreader"
4714 "test_ensight_multi_block_io"
4715 "test_ensightreader_arrays"
4716 "test_ensightreader_time_sets"
4717 "test_ensightreader_timepoints"
4718 "test_facetreader"
4719 "test_fluentcffreader"
4720 "test_gambitreader"
4721 "test_gaussian_cubes_reader"
4722 "test_gesignareader"
4723 "test_gif_reader"
4724 "test_hdf_reader"
4725 "test_hdr_reader"
4726 "test_init_cmap"
4727 "test_interpolate"
4728 "test_jpegreader"
4729 "test_legend_"
4730 "test_load_dataset_no_reader"
4731 "test_load_theme"
4732 "test_meta_image_reader"
4733 "test_multiblockplot3dreader"
4734 "test_nifti_reader"
4735 "test_nrrd_reader"
4736 "test_objreader"
4737 "test_only_screenshots_flag"
4738 "test_openfoam_case_type"
4739 "test_openfoam_cell_to_point_default"
4740 "test_openfoam_patch_arrays"
4741 "test_openfoam_skip_zero_time"
4742 "test_openfoamreader_active_time"
4743 "test_openfoamreader_arrays_time"
4744 "test_openfoamreader_read_data_time_point"
4745 "test_openfoamreader_read_data_time_value"
4746 "test_particle_reader"
4747 "test_partition"
4748 "test_pdbreader"
4749 "test_plot3dmetareader"
4750 "test_plot_return_img_with_cpos"
4751 "test_plot_return_img_without_cpos"
4752 "test_png_reader"
4753 "test_pnm_reader"
4754 "test_prostar_reader"
4755 "test_protein_ribbon"
4756 "test_pvdreader"
4757 "test_pvdreader_no_part_group"
4758 "test_pvdreader_no_time_group"
4759 "test_read_cgns"
4760 "test_repr"
4761 "test_save_before_close_callback"
4762 "test_slc_reader"
4763 "test_stlreader"
4764 "test_tecplotreader"
4765 "test_tiff_reader"
4766 "test_timer"
4767 "test_translate_direction_collinear"
4768 "test_user_logo"
4769 "test_xdmf_reader"
4770 ;; XXX: incompatible with Numpy@2
4771 ;; Drop when updating along with vtk.
4772 "test_check_subdtype_changes_type"
4773 ;; These tests try to download data from GitHub.
4774 "test_read_exodus"
4775 "test_nek5000_reader"
4776 "test_exodus_reader_ext"
4777 "test_exodus_reader_core"
4778 "test_exodus_blocks"
4779 "test_download_dataset_texture"
4780 "test_structured_grid_cast_to_explicit_structured_grid"
4781 "test_pad_image_multi_component_with_scalar"
4782 "test_pad_image_raises"
4783 "test_points_to_cells_and_cells_to_points_dimensions"
4784 ;; These tests download cow.vtp from GitHub.
4785 "test_meshio[cow_ugrid]"
4786 "test_meshio[points_only]"
4787 ;; Looks for pyproject.toml in installed package.
4788 "test_max_positional_args_matches_pyproject")
4789 " and not "))
4790 #:phases
4791 #~(modify-phases %standard-phases
4792 ;; vtk check fails in sanity-check, comment out
4793 (add-after 'unpack 'patch-pyproject
4794 (lambda _
4795 (substitute* "pyproject.toml"
4796 (("'vtk[^']*'," all) (string-append "#" all)))))
4797 (add-after 'unpack 'fix-failing-tests
4798 (lambda _
4799 (substitute* "tests/plotting/test_plotting.py"
4800 (("\"\"\"Determine if using mesa.\"\"\"" all)
4801 (string-append all "\n return False")))
4802 (substitute* "tests/test_meshio.py"
4803 (("cow = .*$" all) (string-append "#" all "\n"))
4804 ((", cow") ""))))
4805 ;; test phase writes files to $HOME
4806 (add-before 'check 'redirect-HOME
4807 (lambda _
4808 (setenv "HOME" "/tmp"))))))
4809 (native-inputs
4810 (list nss-certs-for-test
4811 python-aiohttp
4812 python-ipython
4813 python-mypy
4814 python-pandas-2
4815 python-pytest-8
4816 python-pytest-cases
4817 python-pytest-mock
4818 python-pytest-pyvista
4819 python-scipy
4820 python-tqdm
4821 python-trimesh
4822 which
4823 xorg-server-for-tests))
4824 (propagated-inputs
4825 (list python-cmcrameri
4826 python-cmocean
4827 python-colorcet
4828 python-imageio
4829 python-matplotlib
4830 python-meshio
4831 python-numpy
4832 python-pillow
4833 python-pooch
4834 python-scooby
4835 vtk-9.5))
4836 (home-page "https://docs.pyvista.org/")
4837 (synopsis "3D plotting and mesh analysis through VTK")
4838 (description
4839 "PyVista is...
4840
4841@itemize
4842@item @emph{Pythonic VTK}: a high-level API to the Visualization
4843Toolkit (VTK);
4844@item mesh data structures and filtering methods for spatial datasets;
4845@item 3D plotting made simple and built for large/complex data geometries.
4846@end itemize
4847
4848This package provides a Pythonic, well-documented interface exposing VTK's
4849powerful visualization backend to facilitate rapid prototyping, analysis, and
4850visual integration of spatially referenced datasets.")
4851 (license license:expat)))
4852
4853(define-public python-pyvistaqt
4854 (package
4855 (name "python-pyvistaqt")
4856 (version "0.11.3")
4857 (source
4858 (origin
4859 (method git-fetch)
4860 (uri (git-reference
4861 (url "https://github.com/pyvista/pyvistaqt")
4862 (commit version)))
4863 (file-name (git-file-name name version))
4864 (sha256
4865 (base32 "04f9cd98k463pdrpi8jby411x9mc0ih62gl0nv0h9w3r7pwl61yl"))))
4866 (build-system pyproject-build-system)
4867 (arguments
4868 (list
4869 #:phases
4870 #~(modify-phases %standard-phases
4871 (add-after 'unpack 'fix-pytest
4872 (lambda _
4873 (substitute* "tests/conftest.py"
4874 (("pytest.skip")
4875 "pytest.mark.skipif"))))
4876 (add-before 'check 'before-check
4877 (lambda _
4878 ;; Testing requires write access.
4879 (setenv "HOME" "/tmp")
4880 ;; Testing requires a running xorg server.
4881 (system "Xvfb :99 -screen 0 1024x768x24 &")
4882 (setenv "DISPLAY" ":99.0"))))))
4883 (propagated-inputs (list python-pyvista python-qtpy))
4884 (native-inputs (list python-ipython
4885 python-matplotlib
4886 python-numpy
4887 python-pyqt-6
4888 python-pytest
4889 python-pytest-qt
4890 python-setuptools
4891 python-sphinx-gallery
4892 xorg-server))
4893 (home-page "https://github.com/pyvista/pyvistaqt")
4894 (synopsis "Qt support for PyVista")
4895 (description
4896 "@code{pyvistaqt} is a helper module for @code{pyvista} to enable you to
4897plot using Qt by placing a vtk-widget into a background renderer. This can be
4898quite useful when you desire to update your plot in real-time.")
4899 (license license:expat)))
4900
4901(define-public python-pyzx
4902 (package
4903 (name "python-pyzx")
4904 (version "0.9.0")
4905 (source
4906 (origin
4907 (method git-fetch) ; no tests in PyPI
4908 (uri (git-reference
4909 (url "https://github.com/zxcalc/pyzx")
4910 (commit (string-append "v" version))))
4911 (file-name (git-file-name name version))
4912 (sha256
4913 (base32 "1bnmz08w1bmipir1wnn1k3fw64rply7891xns22qfj6yh0j1n6rj"))))
4914 (build-system pyproject-build-system)
4915 (arguments (list #:test-flags
4916 #~(list
4917 ;; Ignore long running tests
4918 "--ignore=tests/long_test.py"
4919 "--ignore=tests/long_scalar_test.py")
4920 #:phases
4921 #~(modify-phases %standard-phases
4922 (add-before 'check 'pre-check
4923 (lambda* (#:key inputs outputs #:allow-other-keys)
4924 (setenv "HOME" "/tmp")
4925 ;; Matplotlib needs to be able to write its
4926 ;; configuration file somewhere.
4927 (setenv "MPLCONFIGDIR" "/tmp"))))))
4928 (native-inputs (list python-pytest
4929 python-setuptools
4930 python-wheel))
4931 (propagated-inputs (list python-ipywidgets
4932 python-lark
4933 python-numpy
4934 python-pyperclip
4935 python-tqdm))
4936 (home-page "https://github.com/zxcalc/pyzx")
4937 (synopsis "Quantum circuit rewriting and optimisation using the ZX-calculus")
4938 (description
4939 "PyZX is a Python tool implementing the theory of ZX-calculus for the
4940creation, visualisation, and automated rewriting of large-scale quantum
4941circuits. PyZX currently allows you to:
4942
4943@itemize
4944@item Read in quantum circuits in the file format of QASM, Quipper or Quantomatic;
4945@item Rewrite circuits into a pseudo-normal form using the ZX-calculus;
4946@item Extract new simplified circuits from these reduced graphs;
4947@item Visualise the ZX-graphs and rewrites using either Matplotlib, Quantomatic
4948or as a TikZ file for use in LaTeX documents;
4949@item Output the optimised circuits in QASM, QC or QUIPPER format.
4950@end itemize")
4951 (license license:asl2.0)))
4952
4953(define-public python-qdldl
4954 (package
4955 (name "python-qdldl")
4956 (version "0.1.7.post5")
4957 (source
4958 (origin
4959 (method url-fetch)
4960 (uri (pypi-uri "qdldl" version))
4961 (sha256
4962 (base32 "0vi8dgrw32qj03z2dd3zqd0d625pibq3xmlgmidfsnwvqkhrj4qb"))))
4963 (build-system pyproject-build-system)
4964 (native-inputs
4965 (list cmake-minimal
4966 pybind11-2
4967 python-pytest
4968 python-setuptools))
4969 (propagated-inputs (list python-numpy python-scipy))
4970 (home-page "https://github.com/oxfordcontrol/qdldl-python/")
4971 (synopsis "QDLDL LDL factorization routine")
4972 (description "This package provides a Python interface to the QDLDL LDL
4973factorization routine for quasi-definite linear system.")
4974 (license license:asl2.0)))
4975
4976(define-public python-quantities
4977 (package
4978 (name "python-quantities")
4979 (version "0.16.4")
4980 (source
4981 (origin
4982 (method url-fetch)
4983 (uri (pypi-uri "quantities" version))
4984 (sha256
4985 (base32 "0dmzk17hd0c6lzjlipjpc52jdifknpvxq15javn19n3f9yvxxdpm"))))
4986 (build-system pyproject-build-system)
4987 (arguments
4988 (list
4989 #:phases
4990 #~(modify-phases %standard-phases
4991 (add-before 'check 'pre-check
4992 (lambda _
4993 (setenv "PY_IGNORE_IMPORTMISMATCH" "1"))))))
4994 (native-inputs
4995 (list python-pytest
4996 python-setuptools
4997 python-setuptools-scm))
4998 (propagated-inputs
4999 (list python-numpy))
5000 (home-page "https://github.com/python-quantities/python-quantities")
5001 (synopsis "Support for physical quantities with units, based on NumPy")
5002 (description
5003 "Quantities is designed to handle arithmetic and conversions of physical
5004quantities, which have a magnitude, dimensionality specified by various units,
5005and possibly an uncertainty. It builds on the NumPy library and is designed
5006to work with @code{numpy.ufuncs}, many of which are already supported.")
5007 ;; OSI approved, BSD like, see doc/user/license.rst.
5008 (license license:bsd-3)))
5009
5010;; XXX: Deprecated on <2026-06-08>.
5011(define-deprecated/public-alias hugs (@ (gnu packages physiscs) python-qutip))
5012
5013(define-public python-ruffus
5014 (package
5015 (name "python-ruffus")
5016 (version "2.8.4")
5017 (source
5018 (origin
5019 (method url-fetch)
5020 (uri (pypi-uri "ruffus" version))
5021 (sha256
5022 (base32 "1ai673k1s94s8b6pyxai8mk17p6zvvyi87rl236fs6ls8mpdklvc"))))
5023 (build-system pyproject-build-system)
5024 (arguments
5025 (list
5026 #:phases
5027 #~(modify-phases %standard-phases
5028 (replace 'check
5029 (lambda* (#:key tests? #:allow-other-keys)
5030 (when tests?
5031 (with-directory-excursion "ruffus/test"
5032 (invoke "bash" "run_all_unit_tests3.cmd"))))))))
5033 (native-inputs (list python-pytest python-setuptools))
5034 (home-page "http://www.ruffus.org.uk")
5035 (synopsis "Light-weight computational pipeline management")
5036 (description
5037 "Ruffus is designed to allow scientific and other analyses to be
5038automated with the minimum of fuss and the least effort.")
5039 (license license:expat)))
5040
5041(define-public python-salib
5042 (package
5043 (name "python-salib")
5044 (version "1.5.2")
5045 (source
5046 (origin
5047 (method git-fetch)
5048 (uri (git-reference
5049 (url "https://github.com/SALib/SALib")
5050 (commit (string-append "v" version))))
5051 (file-name (git-file-name name version))
5052 (sha256
5053 (base32 "0v7l6qbxgclz644fq1vmakfasxcdhg1g019b5w47hlxqw8fx0ipl"))))
5054 (build-system pyproject-build-system)
5055 ;; tests: 190 passed, 1 xfailed, 28 warnings
5056 (arguments
5057 (list
5058 #:phases
5059 #~(modify-phases %standard-phases
5060 ;; Remove this phase on the next update, it is already in master.
5061 (add-before 'build 'fix-for-pandas-3
5062 (lambda _
5063 (substitute* "src/SALib/analyze/sobol.py"
5064 (("np\\.array\\(\\[0\\.0\\]\\)")
5065 "np.float64(0.0)")))))))
5066 (native-inputs
5067 (list python-hatch-vcs
5068 python-hatchling
5069 python-pytest))
5070 (propagated-inputs
5071 (list python-matplotlib
5072 python-multiprocess
5073 python-numpy
5074 python-pandas
5075 python-scipy))
5076 (home-page "https://salib.readthedocs.io/en/latest/")
5077 (synopsis "Tools for global sensitivity analysis")
5078 (description "SALib provides tools for global sensitivity analysis. It
5079contains Sobol', Morris, FAST, DGSM, PAWN, HDMR, Moment Independent and
5080fractional factorial methods.")
5081 (license license:expat)))
5082
5083(define-public python-scikit-allel
5084 (package
5085 (name "python-scikit-allel")
5086 (version "1.3.13")
5087 (source
5088 (origin
5089 (method url-fetch)
5090 (uri (pypi-uri "scikit_allel" version))
5091 (sha256
5092 (base32 "0d9yadzhsjjqkh6rz273f53iwczk0c7pv9dajzcrmfnk036b8f4s"))))
5093 (build-system pyproject-build-system)
5094 (arguments
5095 (list
5096 #:test-flags
5097 '(list "-k"
5098 (string-append
5099 ;; AttributeError: 'Dataset' object has no attribute 'asstr'
5100 "not test_vcf_to_hdf5"
5101 " and not test_vcf_to_hdf5_exclude"
5102 " and not test_vcf_to_hdf5_rename"
5103 " and not test_vcf_to_hdf5_group"
5104 " and not test_vcf_to_hdf5_ann"
5105 ;; Does not work with recent hmmlearn
5106 " and not test_roh_mhmm_0pct"
5107 " and not test_roh_mhmm_100pct"))
5108 #:phases
5109 '(modify-phases %standard-phases
5110 (add-before 'check 'build-ext
5111 (lambda _
5112 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5113 (propagated-inputs
5114 (list python-dask python-numpy))
5115 (native-inputs
5116 (list htslib
5117 python-cython
5118 python-h5py
5119 python-hmmlearn
5120 python-numexpr
5121 python-numpy
5122 python-pytest
5123 python-setuptools
5124 python-setuptools-scm
5125 python-wheel
5126 python-zarr))
5127 (home-page "https://github.com/cggh/scikit-allel")
5128 (synopsis "Explore and analyze genetic variation data")
5129 (description
5130 "This package provides utilities for exploratory analysis of large scale
5131genetic variation data.")
5132 (license license:expat)))
5133
5134(define-public python-scikit-base
5135 (package
5136 (name "python-scikit-base")
5137 (version "1.0.2")
5138 (source
5139 (origin
5140 (method git-fetch)
5141 (uri (git-reference
5142 (url "https://github.com/sktime/skbase")
5143 (commit (string-append "v" version))))
5144 (file-name (git-file-name name version))
5145 (sha256
5146 (base32 "1436l0jr6avyhz2dg3driykn6rwskwyf57aig7x3pwak6w3il6rv"))))
5147 (build-system pyproject-build-system)
5148 (native-inputs
5149 (list python-numpy
5150 python-pandas-minimal
5151 python-pytest
5152 python-scikit-learn
5153 python-scipy-minimal
5154 python-setuptools
5155 python-toml))
5156 (home-page "https://github.com/sktime/skbase")
5157 (synopsis "Base classes for sklearn-like parametric objects")
5158 (description
5159 "@code{skbase} provides base classes for creating scikit-learn-like
5160parametric objects, along with tools to make it easier to build your own
5161packages that follow these design patterns.")
5162 (license license:bsd-3)))
5163
5164(define-public python-scikit-build-core
5165 (package
5166 (name "python-scikit-build-core")
5167 (version "0.12.2")
5168 (source
5169 (origin
5170 (method git-fetch)
5171 (uri (git-reference
5172 (url "https://github.com/scikit-build/scikit-build-core")
5173 (commit (string-append "v" version))))
5174 (file-name (git-file-name name version))
5175 (sha256
5176 (base32 "18xh572ndd0dww7czic775p6n8y5kxd072fj7xdhxwykdxr0bl2g"))))
5177 (build-system pyproject-build-system)
5178 (arguments
5179 (list
5180 ;; tests: 414 passed, 63 skipped, 75 deselected, 1 xfailed
5181 #:test-flags #~(list "-m" "not isolated and not network")))
5182 (native-inputs
5183 (list python-cattrs-minimal
5184 python-hatch-vcs
5185 python-hatchling
5186 python-pypa-build
5187 python-pytest
5188 python-pytest-subprocess
5189 python-virtualenv))
5190 (propagated-inputs
5191 (list cmake-minimal
5192 pybind11
5193 python-packaging
5194 python-pathspec))
5195 (home-page "https://github.com/scikit-build/scikit-build-core")
5196 (synopsis "Build backend for CMake based projects")
5197 (description "Scikit-build-core is a build backend for Python that uses
5198CMake to build extension modules. It has a simple yet powerful static
5199configuration system in pyproject.toml, and supports almost unlimited
5200flexibility via CMake. It was initially developed to support the demanding
5201needs of scientific users, but can build any sort of package that uses
5202CMake.")
5203 (license license:asl2.0)))
5204
5205(define-public python-scikit-build-core-bootstrap
5206 (hidden-package
5207 (package/inherit python-scikit-build-core
5208 (arguments
5209 (list #:tests? #f))
5210 (native-inputs
5211 (list python-hatch-vcs
5212 python-hatchling))
5213 (propagated-inputs
5214 (list python-packaging
5215 python-pathspec)))))
5216
5217(define-public python-scikit-fem
5218 (package
5219 (name "python-scikit-fem")
5220 (version "11.0.0")
5221 (source
5222 (origin
5223 (method git-fetch) ; no tests in PyPI
5224 (uri (git-reference
5225 (url "https://github.com/kinnala/scikit-fem")
5226 (commit version)))
5227 (file-name (git-file-name name version))
5228 (sha256
5229 (base32 "13zh57raz2qcdfhsvpdlyiba5q0s0lh5b3gmsmh4cfrncrkdh6mh"))))
5230 (build-system pyproject-build-system)
5231 (arguments
5232 (list
5233 #:test-flags #~(list
5234 ;; Tests require Jax.
5235 "--ignore=tests/test_autodiff.py"
5236 "--ignore=tests/test_examples.py")))
5237 (native-inputs
5238 (list python-autograd
5239 python-pyamg
5240 ;; python-jax ; not packed yet
5241 python-pytest
5242 python-shapely
5243 python-setuptools))
5244 (propagated-inputs
5245 (list python-meshio
5246 python-numpy
5247 python-matplotlib
5248 python-scipy))
5249 (home-page "https://scikit-fem.readthedocs.io/en/latest/")
5250 (synopsis "Library for performing finite element assembly")
5251 (description
5252 "@code{scikit-fem} is a library for performing finite element assembly.
5253Its main purpose is the transformation of bilinear forms into sparse matrices
5254and linear forms into vectors.")
5255 (license license:bsd-3)))
5256
5257(define-public python-scikit-fuzzy
5258 (package
5259 (name "python-scikit-fuzzy")
5260 (version "0.5.0")
5261 (source
5262 (origin
5263 (method url-fetch)
5264 (uri (pypi-uri "scikit_fuzzy" version))
5265 (sha256
5266 (base32 "0zsfyd8cpd2l82fwh3smxbwhb3bkqwlq17cbav53axma4c2k9r9f"))))
5267 (build-system pyproject-build-system)
5268 (arguments
5269 (list
5270 #:test-flags #~(list "--pyargs" "skfuzzy")))
5271 (native-inputs
5272 (list python-pytest python-setuptools python-wheel))
5273 (propagated-inputs
5274 (list python-networkx python-numpy python-scipy))
5275 (home-page "https://github.com/scikit-fuzzy/scikit-fuzzy")
5276 (synopsis "Fuzzy logic toolkit for SciPy")
5277 (description
5278 "This package implements many useful tools for projects involving fuzzy
5279logic, also known as grey logic.")
5280 (license license:bsd-3)))
5281
5282(define-public python-scikit-image
5283 (package
5284 (name "python-scikit-image")
5285 (version "0.26.0")
5286 (source
5287 (origin
5288 (method git-fetch)
5289 (uri (git-reference
5290 (url "https://github.com/scikit-image/scikit-image")
5291 (commit (string-append "v" version))))
5292 (file-name (git-file-name name version))
5293 ;; TODO: Remove patch when refreshing python-scikit-image.
5294 ;; Prevent deprecation warning from python-pillow 12.1.1.
5295 (patches
5296 (search-patches "python-scikit-image-fix-python-pillow.patch"))
5297 (sha256
5298 (base32 "1x90jad3jqin8ws1j1i89zrajpcbn1h87nl5yxxf5cs3b7ha13rf"))))
5299 (build-system pyproject-build-system)
5300 (arguments
5301 (list
5302 #:test-flags
5303 #~(list "--ignore=benchmarks/"
5304 ;; RuntimeWarning: divide by zero encountered in scalar divide
5305 ;; (see:
5306 ;; <https://github.com/scikit-image/scikit-image/issues/7348>).
5307 "-k" "not test_ellipse_parameter_stability")))
5308 (propagated-inputs
5309 (list python-imageio
5310 python-lazy-loader
5311 python-networkx
5312 python-numpy
5313 python-packaging
5314 python-pillow
5315 python-scipy
5316 python-tifffile
5317 ;; [optional]
5318 ;; python-astropy
5319 ;; python-cloudpickle
5320 ;; python-dask
5321 ;; python-matplotlib
5322 ;; python-pooch
5323 ;; python-pyamg
5324 ;; python-pywavelets
5325 ;; python-scikit-learn
5326 #;python-simpleitk))
5327 (native-inputs
5328 (list python-meson
5329 python-pytest
5330 python-pytest-localserver
5331 python-pytest-pretty
5332 python-pythran))
5333 (home-page "https://scikit-image.org/")
5334 (synopsis "Image processing in Python")
5335 (description
5336 "Scikit-image is a collection of algorithms for image processing.")
5337 (license license:bsd-3)))
5338
5339(define-public python-scikit-misc
5340 (package
5341 (name "python-scikit-misc")
5342 (version "0.5.1")
5343 (source
5344 (origin
5345 (method url-fetch)
5346 (uri (pypi-uri "scikit_misc" version))
5347 (sha256
5348 (base32 "18sj7qa3kk4pqh3rzg2c64lf03nciv9cf985yh1h2kpqqndgdhf5"))))
5349 (build-system pyproject-build-system)
5350 (arguments
5351 (list
5352 #:test-flags
5353 '(list "--pyargs" "skmisc")
5354 #:phases
5355 #~(modify-phases %standard-phases
5356 (add-after 'unpack 'fix-version
5357 (lambda _
5358 (call-with-output-file "skmisc/_version.py"
5359 (lambda (port)
5360 (display (string-append "__version__ = \"" #$version "\"")
5361 port)))
5362 (substitute* "meson.build"
5363 (("^ version: run_command.*")
5364 (string-append " version: '" #$version "',\n")))
5365 (substitute* "pyproject.toml"
5366 (("dynamic = \\['version'\\]")
5367 (string-append "version = \"" #$version "\""))))))))
5368 (native-inputs
5369 (list gfortran
5370 python-meson
5371 python-spin
5372 python-pytest
5373 python-setuptools))
5374 (propagated-inputs
5375 (list python-numpy))
5376 (home-page "https://has2k1.github.io/scikit-misc/stable")
5377 (synopsis "Miscellaneous tools for scientific computing.")
5378 (description "This package provides miscellaneous tools for data analysis
5379and scientific computing.")
5380 (license license:bsd-3)))
5381
5382(define-public python-scikit-opt
5383 (package
5384 (name "python-scikit-opt")
5385 (version "0.6.6")
5386 (source
5387 (origin
5388 (method url-fetch)
5389 (uri (pypi-uri "scikit-opt" version))
5390 (sha256
5391 (base32 "0ycqizgsj7q57asc1bphzhf1fx9zqn0vx5rli7q541bas64hfqiy"))))
5392 (build-system pyproject-build-system)
5393 (native-inputs
5394 (list python-pytest
5395 python-setuptools))
5396 (propagated-inputs
5397 (list python-numpy
5398 python-pytorch
5399 python-scipy))
5400 (home-page "https://github.com/guofei9987/scikit-opt")
5401 (synopsis "Swarm intelligence algorithms in Python")
5402 (description
5403 "Scikit-opt (or sko) is a Python module implementing @dfn{swarm
5404intelligence} algorithms: genetic algorithm, particle swarm optimization,
5405simulated annealing, ant colony algorithm, immune algorithm, artificial fish
5406swarm algorithm.")
5407 (license license:expat)))
5408
5409(define-public python-scikit-optimize
5410 ;; XXX: The project might be not maintained, see
5411 ;; <https://github.com/holgern/scikit-optimize/issues/6>.
5412 (package
5413 (name "python-scikit-optimize")
5414 (version "0.10.2")
5415 (source
5416 (origin
5417 (method git-fetch)
5418 (uri (git-reference
5419 (url "https://github.com/holgern/scikit-optimize")
5420 (commit (string-append "v" version))))
5421 (file-name (git-file-name name version))
5422 (sha256
5423 (base32 "0pc6avzxz8l32km5jvv3maih0a5x2akxybvxl2hdg04qz2l0kz8b"))))
5424 (build-system pyproject-build-system)
5425 (arguments
5426 (list
5427 ;; tests: 398 passed, 1 skipped, 179 warnings
5428 #:test-flags
5429 #~(list "--numprocesses" (number->string (parallel-job-count))
5430 "-k" (string-join
5431 ;; XXX: As the project is not actively maintained, review
5432 ;; failing test when a fresh release is available.
5433 (list "not test_acq_optimizer"
5434 "test_acq_optimizer_with_time_api"
5435 "test_categorical_init_vals"
5436 "test_consistent_x_iter_dimensions"
5437 "test_early_stopping_delta_x"
5438 "test_early_stopping_delta_x_empty_result_object"
5439 "test_early_stopping_delta_y"
5440 "test_early_stopping_delta_y_with_x0"
5441 "test_exhaust_initial_calls"
5442 "test_fixed_random_states"
5443 "test_init_points_and_models"
5444 "test_init_vals"
5445 "test_init_vals_and_models"
5446 "test_minimizer_api"
5447 "test_minimizer_api_random_only"
5448 "test_minimizer_space_constraint"
5449 "test_minimizer_with_space"
5450 "test_mixed_spaces"
5451 "test_optimizer_base_estimator_string_smoke"
5452 "test_optimizer_base_estimator_string_smoke_njobs"
5453 "test_per_second_api"
5454 "test_repeated_x"
5455 "test_tree_based_minimize")
5456 " and not "))))
5457 (native-inputs
5458 (list python-pytest
5459 python-pytest-xdist
5460 python-setuptools))
5461 (propagated-inputs
5462 (list python-joblib
5463 python-matplotlib
5464 python-numpy
5465 python-pyaml
5466 python-scikit-learn
5467 python-scipy))
5468 (home-page "https://scikit-optimize.github.io/")
5469 (synopsis "Sequential model-based optimization toolbox")
5470 (description
5471 "Scikit-Optimize, or @code{skopt}, is a simple and efficient library to
5472minimize (very) expensive and noisy black-box functions. It implements
5473several methods for sequential model-based optimization. @code{skopt} aims to
5474be accessible and easy to use in many contexts.")
5475 (license license:bsd-3)))
5476
5477(define-public python-scikit-surprise
5478 (package
5479 (name "python-scikit-surprise")
5480 (version "1.1.5")
5481 (source
5482 (origin
5483 (method git-fetch)
5484 (uri (git-reference
5485 (url "https://github.com/NicolasHug/Surprise")
5486 (commit (string-append "v" version))))
5487 (file-name (git-file-name name version))
5488 (sha256
5489 (base32 "1jw05xb8w7d5vx0v8gjd51a5bp1zwqy5adcpaf8fy5mfrdjn6hpp"))))
5490 (build-system pyproject-build-system)
5491 (arguments
5492 (list
5493 ;; tests: 82 passed
5494 #:phases
5495 #~(modify-phases %standard-phases
5496 (add-before 'sanity-check 'set-home
5497 (lambda _
5498 ;; Change from /homeless-shelter to /tmp for write
5499 ;; permission.
5500 (setenv "HOME" "/tmp"))))))
5501 (native-inputs
5502 (list python-cython
5503 python-pandas-minimal
5504 python-pytest
5505 python-setuptools))
5506 (propagated-inputs
5507 (list python-joblib
5508 python-numpy
5509 python-scikit-learn))
5510 (home-page "https://surpriselib.com/")
5511 (synopsis "Recommender system library for Scikit-learn")
5512 (description
5513 "This package provides a Python library for building and analyzing
5514recommender systems that deal with explicit rating data. It was designed with
5515the following purposes in mind:
5516@itemize
5517@item Provide tools to handle downloaded or user-provided datasets.
5518@item Provide ready-to-use prediction algorithms and similarity measures.
5519@item Provide a base for creating custom algorithms.
5520@item Provide tools to evaluate, analyse and compare algorithm performance.
5521@item Provide documentation with precise details regarding library algorithms.
5522@end itemize")
5523 (license license:bsd-3)))
5524
5525(define-public python-scikit-survival
5526 (package
5527 (name "python-scikit-survival")
5528 (version "0.26.0")
5529 (source
5530 (origin
5531 (method git-fetch)
5532 (uri (git-reference
5533 (url "https://github.com/sebp/scikit-survival")
5534 (commit (string-append "v" version))
5535 ;; TODO: This package contains a copy of Eigen in
5536 ;; sksurv/linear_model/src. It would be good to figure out
5537 ;; how to use our own Eigen package.
5538 (recursive? #true)))
5539 (file-name (git-file-name name version))
5540 (sha256
5541 (base32 "0r0xi9saz247ph6bgrc3iknq0m60d8rs4sl4mdv4s1zja80w1cp8"))))
5542 (build-system pyproject-build-system)
5543 (arguments
5544 (list
5545 ;; tests: 1013 passed, 105 warnings
5546 #:test-flags
5547 #~(list "--durations=10" ;to help in spotting long running tests
5548 "--numprocesses" (number->string (min 4 (parallel-job-count))))))
5549 (propagated-inputs
5550 (list python-ecos
5551 python-joblib
5552 python-numexpr
5553 python-numpy
5554 python-osqp
5555 python-pandas
5556 python-scikit-learn
5557 python-scipy))
5558 (native-inputs
5559 (list python-cython
5560 python-packaging
5561 python-pytest
5562 python-pytest-xdist
5563 python-setuptools
5564 python-setuptools-scm))
5565 (home-page "https://github.com/sebp/scikit-survival")
5566 (synopsis "Survival analysis built on top of scikit-learn")
5567 (description "Scikit-survival is a Python module for survival analysis
5568built on top of scikit-learn. It allows doing survival analysis while
5569utilizing the power of scikit-learn, e.g., for pre-processing or doing
5570cross-validation.")
5571 (license license:gpl3+)))
5572
5573(define-public python-scipy
5574 (package
5575 (name "python-scipy")
5576 (version "1.17.1")
5577 ;; TODO: PyPI archive bundles extra in subprojects:
5578 ;; - https://github.com/boostorg/math
5579 ;; - https://github.com/scipy/HiGHS
5580 ;; - https://github.com/scipy/xsf
5581 ;; - qhull
5582 (source
5583 (origin
5584 (method url-fetch)
5585 (uri (pypi-uri "scipy" version))
5586 (sha256
5587 (base32 "1h4pn8i33cf5jzlh6hs6sjg10i8x1ch35y5f4v11d26bv09f1n4m"))))
5588 (build-system pyproject-build-system)
5589 (arguments
5590 (list
5591 ;; tests: 81362 passed, 7493 skipped, 313 xfailed, 28 xpassed, 225 warnings
5592 #:configure-flags
5593 ''(("setup-args" . #("-Duse-system-libraries=all")))
5594 #:test-flags
5595 #~(list "--durations=10"
5596 "--numprocesses" (number->string (min 8 (parallel-job-count)))
5597 "--pyargs" "scipy"
5598 "-k" (string-join
5599 ;; Network access is required.
5600 (list "not test_ascent"
5601 "test_electrocardiogram"
5602 "test_existence_all"
5603 "test_face"
5604 ;; pycparser.ply.yacc.YaccError: Unable to build parser
5605 "test_callbacks"
5606 "test_bad_callbacks"
5607 ;; AssertionError: Items are not equal: ACTUAL:
5608 ;; np.complex128(inf+nanj) DESIRED: (inf+0j)
5609 "test_expm1_complex"
5610 ;; Bad results (X out of Y) for the following points
5611 ;; (in output 0):
5612 "test_spherical_in_complex"
5613 "test_spherical_jn_complex"
5614 "test_spherical_kn"
5615 "test_spherical_yn_complex"
5616 ;; Not equal to tolerance <...>
5617 "test_log1p_complex"
5618 "test_negative_real_gh14582[spherical_in-False]"
5619 "test_negative_real_gh14582[spherical_in-True]"
5620 "test_negative_real_gh14582[spherical_jn-False"
5621 "test_negative_real_gh14582[spherical_jn-True]"
5622 "test_negative_real_gh14582[spherical_yn-False]"
5623 "test_negative_real_gh14582[spherical_yn-True]")
5624 " and not "))
5625 #:phases
5626 #~(modify-phases %standard-phases
5627 (add-after 'set-paths 'hide-gfortran
5628 ;; See: <https://issues.guix.gnu.org/73439#45>.
5629 (lambda* (#:key inputs #:allow-other-keys)
5630 (let ((gfortran #$(this-package-native-input "gfortran")))
5631 (setenv "CPLUS_INCLUDE_PATH"
5632 (string-join
5633 (delete (string-append gfortran "/include/c++")
5634 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
5635 ":")))))
5636 (replace 'check
5637 (lambda* (#:key test-flags tests? #:allow-other-keys)
5638 (when tests?
5639 ;; Step out of the source directory to avoid interference.
5640 ;; See: <.github/workflows/linux.yml> for any other possible
5641 ;; tests setup.
5642 (with-directory-excursion "/tmp"
5643 (setenv "HOME" "/tmp")
5644 (setenv "PYTHONOPTIMIZE" "2")
5645 (apply invoke "pytest" "-vv" test-flags))))))))
5646 (native-inputs
5647 (list gfortran
5648 pkg-config
5649 python-hypothesis
5650 python-meson
5651 python-mpmath
5652 python-pooch
5653 python-pytest
5654 python-pytest-timeout
5655 python-pytest-xdist
5656 python-pythran
5657 python-threadpoolctl))
5658 (inputs
5659 (list boost
5660 openblas
5661 pybind11
5662 qhull
5663 xsimd))
5664 (propagated-inputs
5665 (list python-numpy))
5666 (home-page "https://scipy.org/")
5667 (synopsis "The Scipy library provides efficient numerical routines")
5668 (description "The SciPy library is one of the core packages that make up
5669the SciPy stack. It provides many user-friendly and efficient numerical
5670routines such as routines for numerical integration and optimization.")
5671 (license license:bsd-3)))
5672
5673;; A bare minimal package, mainly to use in tests and reduce closure
5674;; size. Tests are left out in the main package to slim down native-inputs.
5675(define-public python-scipy-minimal
5676 (package/inherit python-scipy
5677 (name "python-scipy-minimal")
5678 (arguments
5679 (substitute-keyword-arguments arguments
5680 ((#:tests? _ #t) #f)))
5681 (native-inputs
5682 (list gfortran
5683 pkg-config
5684 python-meson
5685 python-pythran))))
5686
5687(define-public python-scs
5688 (package
5689 (name "python-scs")
5690 (version "3.2.10")
5691 (source
5692 (origin
5693 (method git-fetch)
5694 (uri (git-reference
5695 (url "https://github.com/bodono/scs-python")
5696 (commit version)))
5697 (file-name (git-file-name name version))
5698 (sha256
5699 (base32 "1wg1g6das5hs53z3sjn2m8646023d14q9shmwfb38n23baqi468g"))))
5700 (build-system pyproject-build-system)
5701 (arguments
5702 (list
5703 ;; tests: 26 passed
5704 #:phases
5705 #~(modify-phases %standard-phases
5706 (add-after 'ensure-no-mtimes-pre-1980 'substitute-git-submodules
5707 (lambda _
5708 (rmdir "scs_source")
5709 (symlink #$(package-source
5710 (this-package-native-input "scs"))
5711 "scs_source")
5712 (rmdir "scs/pythoncapi-compat")
5713 (symlink #$(package-source
5714 (this-package-native-input "pythoncapi-compat"))
5715 "scs/pythoncapi-compat"))))))
5716 (native-inputs
5717 (list pkg-config
5718 python-meson
5719 python-pytest
5720 pythoncapi-compat
5721 scs))
5722 (inputs
5723 (list lapack
5724 openblas))
5725 (propagated-inputs
5726 (list python-numpy
5727 python-scipy))
5728 (home-page "https://github.com/bodono/scs-python")
5729 (synopsis "Splitting conic solver")
5730 (description "This package provides a Python interface for the
5731SCS (Splitting conic solver) library.")
5732 (license license:expat)))
5733
5734(define-public python-simple-pid
5735 (package
5736 (name "python-simple-pid")
5737 (version "2.0.1")
5738 (source (origin
5739 (method url-fetch)
5740 (uri (pypi-uri "simple_pid" version))
5741 (sha256
5742 (base32
5743 "17p9bgka5yv5lbnbk374yjccrlizm572wv3xb479072lahf7cwap"))))
5744 (build-system pyproject-build-system)
5745 (native-inputs
5746 (list python-pytest python-setuptools python-wheel))
5747 (home-page "https://github.com/m-lundberg/simple-pid")
5748 (synopsis "Easy to use PID controller")
5749 (description "This package provides a simple and easy-to-use @acronym{PID,
5750proportional-integral-derivative} controller.")
5751 (license license:expat)))
5752
5753(define-public python-simplespectral
5754 (package
5755 (name "python-simplespectral")
5756 (version "1.0.0")
5757 (source
5758 (origin
5759 (method url-fetch)
5760 (uri (pypi-uri "SimpleSpectral" version))
5761 (sha256
5762 (base32 "0qh3xwdv9cwcqdamvglrhm586p4yaq1hd291py1fvykhk2a2d4w6"))))
5763 (build-system pyproject-build-system)
5764 (arguments
5765 (list #:tests? #f)) ;No tests, also not in git repository.
5766 (native-inputs
5767 (list python-setuptools))
5768 (propagated-inputs
5769 (list python-numpy python-scipy))
5770 (home-page "https://github.com/xmikos/simplespectral")
5771 (synopsis "FFT module for Python")
5772 (description
5773 "This package provides a simplified @code{scipy.signal.spectral} module
5774to do spectral analysis in Python.")
5775 (license license:expat)))
5776
5777(define-public python-snakemake-executor-plugin-slurm
5778 (package
5779 (name "python-snakemake-executor-plugin-slurm")
5780 (version "1.7.0")
5781 (home-page "https://github.com/snakemake/snakemake-executor-plugin-slurm/")
5782 (source
5783 (origin
5784 (method git-fetch)
5785 (uri (git-reference
5786 (url home-page)
5787 (commit (string-append "v" version))))
5788 (file-name (git-file-name name version))
5789 (sha256
5790 (base32 "0x7ghrkvmxqbcjl69hxp5axa1av3s0mdc0i9xjg8qjnd3hgd82r3"))))
5791 (build-system pyproject-build-system)
5792 (arguments
5793 (list #:phases
5794 #~(modify-phases %standard-phases
5795 (replace 'check
5796 (lambda* (#:key tests? #:allow-other-keys)
5797 (when tests?
5798 (invoke "python3" "tests/tests.py")))))))
5799 (native-inputs (list python-pandas
5800 python-poetry-core
5801 python-pytest
5802 python-snakemake-executor-plugin-slurm-jobstep
5803 snakemake))
5804 (synopsis "Snakemake executor plugin: slurm")
5805 (description "A Snakemake executor plugin for running SLURM jobs.")
5806 (license license:expat)))
5807
5808(define-public python-snakemake-executor-plugin-slurm-jobstep
5809 (package
5810 (name "python-snakemake-executor-plugin-slurm-jobstep")
5811 (version "0.3.0")
5812 (home-page "https://github.com/snakemake/snakemake-executor-plugin-slurm-jobstep")
5813 (source
5814 (origin
5815 (method git-fetch)
5816 (uri (git-reference
5817 (url home-page)
5818 (commit (string-append "v" version))))
5819 (file-name (git-file-name name version))
5820 (sha256
5821 (base32 "0ly15ywmbfcm5z7jy7dxiidpw3immsdd2k80vrm4pza721irxcar"))))
5822 (build-system pyproject-build-system)
5823 (arguments
5824 (list #:phases
5825 #~(modify-phases %standard-phases
5826 (replace 'check
5827 (lambda* (#:key tests? #:allow-other-keys)
5828 (when tests?
5829 (invoke "python3" "tests/tests.py")))))))
5830 (native-inputs (list python-poetry-core
5831 python-pytest
5832 snakemake))
5833 (synopsis "Snakemake executor plugin: slurm-jobstep")
5834 (description "A Snakemake executor plugin for running srun jobs inside of
5835SLURM jobs (meant for internal use by python-snakemake-executor-plugin-slurm).")
5836 (license license:expat)))
5837
5838(define-public python-snakemake-interface-common
5839 (package
5840 (name "python-snakemake-interface-common")
5841 ;; This commit fixes a python-packaging sanity-check failure.
5842 (properties '((commit . "d585b5c0c7c0ec0df60a1a26d5d413f3ee88e63f")
5843 (revision . "0")))
5844 (version (git-version "1.23.0"
5845 (assoc-ref properties 'revision)
5846 (assoc-ref properties 'commit)))
5847 (source
5848 (origin
5849 (method git-fetch)
5850 (uri (git-reference
5851 (url "https://github.com/snakemake/snakemake-interface-common")
5852 (commit (assoc-ref properties 'commit))))
5853 (file-name (git-file-name name version))
5854 (sha256
5855 (base32 "1zxks3jjwc5addx5wxgfb5zn2y2jzxz53n739b9w8qba3nwnzyj2"))))
5856 (build-system pyproject-build-system)
5857 (arguments
5858 (list
5859 #:test-backend #~'custom
5860 #:test-flags #~(list "tests/tests.py")))
5861 (propagated-inputs
5862 (list python-argparse-dataclass
5863 python-configargparse
5864 python-packaging))
5865 (native-inputs
5866 (list python-pytest
5867 python-setuptools))
5868 (home-page "https://github.com/snakemake/snakemake-interface-common")
5869 (synopsis "Common functions and classes for Snakemake and its plugins")
5870 (description "This package provides common functions and classes
5871for Snakemake and its plugins.")
5872 (license license:expat)))
5873
5874(define-public python-snakemake-interface-executor-plugins
5875 (package
5876 (name "python-snakemake-interface-executor-plugins")
5877 (version "9.4.0")
5878 (source
5879 (origin
5880 (method git-fetch)
5881 (uri (git-reference
5882 (url (string-append "https://github.com/snakemake/"
5883 "snakemake-interface-executor-plugins"))
5884 (commit (string-append "v" version))))
5885 (file-name (git-file-name name version))
5886 (sha256
5887 (base32 "1qz4cl5wyinhk191ivkxn0ghjjdicyvg6wq97b1bgn01qqfdvxkq"))))
5888 (build-system pyproject-build-system)
5889 (arguments
5890 (list
5891 #:test-backend #~'custom
5892 #:test-flags #~(list "tests/tests.py")))
5893 (propagated-inputs (list python-snakemake-interface-common))
5894 (native-inputs (list python-poetry-core python-pytest))
5895 (home-page (string-append "https://github.com/snakemake/"
5896 "python-snakemake-interface-executor-plugins"))
5897 (synopsis "Interface for Snakemake executor plugins")
5898 (description
5899 "This package provides a stable interface for interactions between Snakemake and
5900its executor plugins.")
5901 (license license:expat)))
5902
5903(define-public python-snakemake-interface-logger-plugins
5904 (package
5905 (name "python-snakemake-interface-logger-plugins")
5906 (version "2.0.1")
5907 (source
5908 (origin
5909 (method git-fetch)
5910 (uri (git-reference
5911 (url (string-append "https://github.com/snakemake/"
5912 "snakemake-interface-logger-plugins"))
5913 (commit (string-append "v" version))))
5914 (file-name (git-file-name name version))
5915 (sha256
5916 (base32 "138z6i810v374h27gj9jxg5jwdz6ccyirgv2f2l313j1iivj7wfa"))))
5917 (build-system pyproject-build-system)
5918 (arguments
5919 (list
5920 #:test-flags #~(list "tests/tests.py")))
5921 (propagated-inputs (list python-snakemake-interface-common))
5922 (native-inputs
5923 (list python-hatchling
5924 python-snakemake-logger-plugin-rich-bootstrap
5925 python-pytest))
5926 (home-page (string-append "https://github.com/snakemake/"
5927 "python-snakemake-interface-logger-plugins"))
5928 (synopsis "Interface for Snakemake logger plugins")
5929 (description
5930 "This package provides a stable interface for interactions between Snakemake and
5931its logger plugins.")
5932 (license license:expat)))
5933
5934(define-public python-snakemake-interface-logger-plugins-bootstrap
5935 (package/inherit python-snakemake-interface-logger-plugins
5936 (name "python-snakemake-interface-logger-plugins-bootstrap")
5937 (arguments (list #:tests? #f))
5938 (native-inputs (list python-hatchling))))
5939
5940(define-public python-snakemake-interface-report-plugins
5941 (package
5942 (name "python-snakemake-interface-report-plugins")
5943 (version "1.3.0")
5944 (source
5945 (origin
5946 (method git-fetch)
5947 (uri (git-reference
5948 (url (string-append "https://github.com/snakemake/"
5949 "snakemake-interface-report-plugins"))
5950 (commit (string-append "v" version))))
5951 (file-name (git-file-name name version))
5952 (sha256
5953 (base32 "0i16ia88ym2y9092c9z1jxgmfmnfdha69hbm56ncnxdmsfch9s6y"))))
5954 (build-system pyproject-build-system)
5955 (arguments
5956 (list
5957 #:tests? #f ;circular dependency on snakemake
5958 #:test-backend #~'custom
5959 #:test-flags #~(list "tests/tests.py")))
5960 (propagated-inputs (list python-snakemake-interface-common))
5961 (native-inputs (list python-poetry-core))
5962 (home-page (string-append "https://github.com/snakemake/"
5963 "python-snakemake-interface-report-plugins"))
5964 (synopsis "Interface for Snakemake report plugins")
5965 (description "This package provides a stable interface for interactions
5966between Snakemake and its report plugins.")
5967 (license license:expat)))
5968
5969(define-public python-snakemake-interface-scheduler-plugins
5970 (package
5971 (name "python-snakemake-interface-scheduler-plugins")
5972 (version "2.0.2")
5973 (source
5974 (origin
5975 (method git-fetch)
5976 (uri (git-reference
5977 (url (string-append "https://github.com/snakemake/"
5978 "snakemake-interface-scheduler-plugins"))
5979 (commit (string-append "v" version))))
5980 (file-name (git-file-name name version))
5981 (sha256
5982 (base32 "0bz33dl90cblzs9gki8kmklv9zkdh22883455541y5b5k70hr306"))))
5983 (build-system pyproject-build-system)
5984 (arguments
5985 (list
5986 ;; XXX: Tests collect but snakemake.scheduler is missing.
5987 #:tests? #f
5988 #:test-flags #~(list "tests/tests.py")))
5989 (propagated-inputs (list python-snakemake-interface-common))
5990 (native-inputs
5991 (list python-hatchling
5992 python-pytest))
5993 (home-page (string-append "https://github.com/snakemake/"
5994 "python-snakemake-interface-scheduler-plugins"))
5995 (synopsis "Interface for Snakemake scheduler plugins")
5996 (description
5997 "This package provides a stable interface for interactions between Snakemake and
5998its scheduler plugins.")
5999 (license license:expat)))
6000
6001(define-public python-snakemake-interface-software-deployment-plugins
6002 (package
6003 (name "python-snakemake-interface-software-deployment-plugins")
6004 (version "0.18.6")
6005 (source
6006 (origin
6007 (method git-fetch)
6008 (uri (git-reference
6009 (url (string-append "https://github.com/snakemake/"
6010 "snakemake-interface-software-deployment-plugins"))
6011 (commit (string-append "v" version))))
6012 (file-name (git-file-name name version))
6013 (sha256
6014 (base32 "10dv8317ryxa05bdfyy6hqlwjxl0crnhfy66zvsl662zvzcb2hm6"))))
6015 (build-system pyproject-build-system)
6016 (arguments
6017 (list
6018 #:test-flags #~(list "--ignore=tests/test_py37.py")))
6019 (propagated-inputs (list python-argparse-dataclass
6020 python-snakemake-interface-common))
6021 (native-inputs
6022 (list python-hatchling
6023 python-pytest
6024 python-snakemake-software-deployment-plugin-envmodules-bootstrap))
6025 (home-page (string-append "https://github.com/snakemake/"
6026 "snakemake-interface-software-deployment-plugins"))
6027 (synopsis "Interface for Snakemake software deployment plugins")
6028 (description
6029 "This package provides a stable interface for interactions between Snakemake and
6030its software deployment plugins.")
6031 (license license:expat)))
6032
6033(define-public python-snakemake-interface-storage-plugins
6034 (package
6035 (name "python-snakemake-interface-storage-plugins")
6036 (version "4.4.1")
6037 (source
6038 (origin
6039 (method git-fetch)
6040 (uri (git-reference
6041 (url (string-append "https://github.com/snakemake/"
6042 "snakemake-interface-storage-plugins"))
6043 (commit (string-append "v" version))))
6044 (file-name (git-file-name name version))
6045 (sha256
6046 (base32 "0nv6zldqspjvy27g94rz4cpnk34jrh6gyfb2zkqk7y1mflk8i95n"))))
6047 (build-system pyproject-build-system)
6048 (arguments
6049 (list
6050 #:tests? #f ;circular dependency on snakemake
6051 #:phases
6052 #~(modify-phases %standard-phases
6053 (add-after 'unpack 'relax-requirements
6054 (lambda _
6055 (substitute* "pyproject.toml"
6056 (("wrapt = \".*\"")
6057 "wrapt = \"*\""))))
6058 (replace 'check
6059 (lambda* (#:key tests? #:allow-other-keys)
6060 (when tests?
6061 (invoke "python3" "tests/tests.py")))))))
6062 (propagated-inputs
6063 (list python-humanfriendly
6064 python-snakemake-interface-common
6065 python-tenacity
6066 python-throttler
6067 python-wrapt))
6068 (native-inputs (list python-poetry-core python-pytest))
6069 (home-page (string-append "https://github.com/snakemake/"
6070 "snakemake-interface-storage-plugins"))
6071 (synopsis "Interface for Snakemake storage plugins")
6072 (description
6073 "This package provides a stable interface for interactions between
6074Snakemake and its storage plugins.")
6075 (license license:expat)))
6076
6077(define-public python-snakemake-logger-plugin-rich
6078 (package
6079 (name "python-snakemake-logger-plugin-rich")
6080 (version "0.4.1")
6081 (source
6082 (origin
6083 (method git-fetch)
6084 (uri (git-reference
6085 (url "https://github.com/cademirch/snakemake-logger-plugin-rich")
6086 (commit (string-append "v" version))))
6087 (file-name (git-file-name name version))
6088 (sha256
6089 (base32 "07r2gqhxqs5ijqh4yjrdcwj60aqr66iglm6jvdwkgr9x0dmg7j4h"))))
6090 (build-system pyproject-build-system)
6091 (arguments
6092 (list
6093 ;; XXX: --logger argument is not recognized.
6094 #:tests? #f))
6095 (propagated-inputs
6096 (list python-pydantic
6097 python-rich
6098 python-snakemake-interface-executor-plugins
6099 python-snakemake-interface-logger-plugins))
6100 (native-inputs
6101 (list python-hatchling))
6102 (home-page "https://github.com/cademirch/snakemake-logger-plugin-rich")
6103 (synopsis "Log plugin for snakemake using Rich")
6104 (description "This package provides a logging plugin for Snakemake
6105that utilizes @code{python-rich} for enhanced terminal styling and
6106progress bars.")
6107 (license license:expat)))
6108
6109(define-public python-snakemake-logger-plugin-rich-bootstrap
6110 (package/inherit python-snakemake-logger-plugin-rich
6111 (name "python-snakemake-logger-plugin-rich-bootstrap")
6112 (propagated-inputs
6113 (modify-inputs propagated-inputs
6114 (replace "python-snakemake-interface-logger-plugins"
6115 python-snakemake-interface-logger-plugins-bootstrap)))))
6116
6117(define-public python-snakemake-software-deployment-plugin-container
6118 (package
6119 (name "python-snakemake-software-deployment-plugin-container")
6120 (version "0.6.2")
6121 (source
6122 (origin
6123 (method git-fetch)
6124 (uri (git-reference
6125 (url (string-append "https://github.com/snakemake/"
6126 "snakemake-software-deployment-plugin-container"))
6127 (commit (string-append "v" version))))
6128 (file-name (git-file-name name version))
6129 (sha256
6130 (base32 "0izkmnr89cfd085z99bp4yf57djppb462n6k04fhi2k5mk93mzlm"))))
6131 (build-system pyproject-build-system)
6132 (arguments
6133 (list
6134 ;; Tests require network access.
6135 #:tests? #f))
6136 (propagated-inputs
6137 (list python-snakemake-interface-common
6138 python-snakemake-interface-software-deployment-plugins
6139 python-udocker))
6140 (native-inputs (list python-hatchling python-pytest))
6141 (home-page (string-append "https://github.com/snakemake/"
6142 "snakemake-software-deployment-plugin-container"))
6143 (synopsis "Run Snakemake within a rootless container")
6144 (description "This package provides a generic container plugin
6145implementing snakemake's software-deployment interface.")
6146 (license license:expat)))
6147
6148(define-public python-snakemake-software-deployment-plugin-envmodules
6149 (package
6150 (name "python-snakemake-software-deployment-plugin-envmodules")
6151 (version "0.2.0")
6152 (source
6153 (origin
6154 (method git-fetch)
6155 (uri (git-reference
6156 (url (string-append "https://github.com/snakemake/"
6157 "snakemake-software-deployment-plugin-envmodules"))
6158 (commit (string-append "v" version))))
6159 (file-name (git-file-name name version))
6160 (sha256
6161 (base32 "1764502r8vqg3k61wjc81rfi5v89rxj0njhpcfynxxx82rnda0vv"))))
6162 (build-system pyproject-build-system)
6163 (arguments
6164 (list
6165 #:test-backend #~'custom
6166 #:test-flags #~(list "tests/test_plugin.py")))
6167 (propagated-inputs
6168 (list python-snakemake-interface-common
6169 python-snakemake-interface-software-deployment-plugins))
6170 (native-inputs (list python-hatchling python-pytest))
6171 (home-page (string-append "https://github.com/snakemake/"
6172 "snakemake-software-deployment-plugin-envmodules"))
6173 (synopsis "Environment modules plugin for Snakemake")
6174 (description
6175 "This package provides a software deployment plugin for Snakemake
6176using environment modules.")
6177 (license license:expat)))
6178
6179(define-public python-snakemake-software-deployment-plugin-envmodules-bootstrap
6180 (package/inherit python-snakemake-software-deployment-plugin-envmodules
6181 (arguments
6182 (substitute-keyword-arguments
6183 (package-arguments python-snakemake-software-deployment-plugin-envmodules)
6184 ((#:tests? tests #t) #f)
6185 ((#:phases phases #~%standard-phases)
6186 #~(modify-phases #$phases
6187 (delete 'sanity-check)))))
6188 (propagated-inputs
6189 (modify-inputs
6190 (package-propagated-inputs python-snakemake-software-deployment-plugin-envmodules)
6191 (delete "python-snakemake-interface-software-deployment-plugins")))))
6192
6193(define-public python-snakemake-storage-plugin-http
6194 (package
6195 (name "python-snakemake-storage-plugin-http")
6196 (version "0.3.1")
6197 (source
6198 (origin
6199 (method git-fetch)
6200 (uri (git-reference
6201 (url (string-append "https://github.com/snakemake/"
6202 "snakemake-storage-plugin-http"))
6203 (commit (string-append "v" version))))
6204 (file-name (git-file-name name version))
6205 (sha256
6206 (base32 "0mlc1nkz9l06ahz6s90lxrxvw5gz7krgyd7acyd51srv6lx0ipk9"))))
6207 (build-system pyproject-build-system)
6208 (arguments
6209 (list
6210 #:test-backend #~'custom
6211 #:test-flags #~(list "tests/tests.py")))
6212 (propagated-inputs
6213 (list python-requests
6214 python-requests-oauthlib
6215 python-snakemake-interface-common
6216 python-snakemake-interface-storage-plugins))
6217 (native-inputs (list python-poetry-core snakemake))
6218 (home-page (string-append "https://github.com/snakemake/"
6219 "snakemake-storage-plugin-http"))
6220 (synopsis "Download input files from HTTP(s) in Snakemake")
6221 (description
6222 "This package provides a storage plugin for downloading input
6223files from HTTP(s) in Snakemake.")
6224 (license license:expat)))
6225
6226(define-public python-sparse
6227 (package
6228 (name "python-sparse")
6229 (version "0.18.0")
6230 (source
6231 (origin
6232 (method url-fetch)
6233 (uri (pypi-uri "sparse" version))
6234 (sha256
6235 (base32
6236 "1x5zkgbsgmpr6nis0k2y5vrsg7l61ly2zishnijcgh0fxdhjdyap"))))
6237 (build-system pyproject-build-system)
6238 (propagated-inputs
6239 (list python-numba python-numpy python-scipy))
6240 (native-inputs
6241 (list python-dask
6242 python-pytest
6243 python-setuptools
6244 python-setuptools-scm))
6245 (home-page "https://github.com/pydata/sparse/")
6246 (synopsis "Library for multi-dimensional sparse arrays")
6247 (description
6248 "This package implements sparse arrays of arbitrary dimension on top of
6249@code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
6250of the elements are zero. @code{python-sparse} generalizes the
6251@code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
6252extends beyond just rows and columns to an arbitrary number of dimensions.
6253Additionally, this project maintains compatibility with the
6254@code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
6255used in @code{scipy.sparse}. These differences make this project useful in
6256certain situations where @code{scipy.sparse} matrices are not well suited, but
6257it should not be considered a full replacement. It lacks layouts that are not
6258easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
6259depends on @code{scipy.sparse} for some computations.")
6260 (license license:bsd-3)))
6261
6262(define-public python-spin
6263 (package
6264 (name "python-spin")
6265 (version "0.8")
6266 (source
6267 (origin
6268 (method url-fetch)
6269 (uri (pypi-uri "spin" version))
6270 (sha256
6271 (base32 "0ff48nagfaai3j26g1db4zq2bwdv6kj5l7xhcs2l9kzg7qzrmhr7"))))
6272 (build-system pyproject-build-system)
6273 (propagated-inputs (list python-click python-colorama python-tomli))
6274 (native-inputs (list python-pytest python-setuptools python-wheel))
6275 (home-page "https://github.com/scientific-python/spin")
6276 (synopsis "Developer tool for scientific Python libraries")
6277 (description "@code{spin} is a simple interface for common development
6278tasks. It comes with a few common build commands out the box, but can
6279easily be customized per project.
6280
6281The impetus behind developing the tool was the mass migration of scientific
6282Python libraries (SciPy, scikit-image, and NumPy, etc.) to Meson, after
6283distutils was deprecated. When many of the build and installation commands
6284changed, it made sense to abstract away the nuisance of having to re-learn
6285them.")
6286 (license license:bsd-3)))
6287
6288(define-public python-supersmoother
6289 ;; 0.4 was release in 2017, there a lot of changes on master branch
6290 ;; providing tests fixtures.
6291 (let ((commit "0a81544ac6bb33bdb08deeba69e97a4ceebcebcf")
6292 (revision "0"))
6293 (package
6294 (name "python-supersmoother")
6295 (version (git-version "0.4" revision commit))
6296 (source
6297 (origin
6298 (method git-fetch) ; no package in PyPI
6299 (uri (git-reference
6300 (url "https://github.com/jakevdp/supersmoother")
6301 (commit commit)))
6302 (file-name (git-file-name name version))
6303 (sha256
6304 (base32 "1r79nssw4a44zizvqg8y685nv3asdfj440s227phfww6kz33s3la"))))
6305 (build-system pyproject-build-system)
6306 (native-inputs
6307 (list python-pytest
6308 python-scipy
6309 python-setuptools))
6310 (propagated-inputs
6311 (list python-numpy))
6312 (home-page "http://github.com/jakevdp/supersmoother")
6313 (synopsis "Python implementation of Friedman's Supersmoother")
6314 (description
6315 "This package provides an efficient implementation of
6316@url{https://www.slac.stanford.edu/pubs/slacpubs/3250/slac-pub-3477.pdf,
6317Friedman's SuperSmoother} based in Python. It makes use of numpy for fast
6318numerical computation.")
6319 (license license:bsd-2))))
6320
6321(define-public python-tdda
6322 (package
6323 (name "python-tdda")
6324 (version "3.2.03")
6325 (source
6326 (origin
6327 (method git-fetch)
6328 (uri (git-reference
6329 (url "https://github.com/tdda/tdda")
6330 (commit (string-append "v" version))))
6331 (file-name (git-file-name name version))
6332 (sha256
6333 (base32 "1rqh1pa17n5al0b3blqr4h9qn4x6wxnxw6ilc2lk72k027cxmv84"))))
6334 (build-system pyproject-build-system)
6335 (arguments
6336 (list
6337 #:test-flags
6338 #~(list
6339 ;; Failures probably due to a dependency mismatch (e.g. pandas).
6340 ;; Not investigated further as this is a leaf package.
6341 ;; tdda is actively maintained, so will probably be fixed.
6342 (string-append "--deselect=tdda/test_tdda.py::"
6343 "TestCommonConstraints::"
6344 "testSimpleAllCorrectVerificationFromCSVFile")
6345 (string-append "--deselect=tdda/test_tdda.py::"
6346 "TestCommonConstraints::"
6347 "testSimpleAllNotCorrectVerificationFromCSVFile")
6348 ;; Not further investigated, results in: AssertionError:
6349 ;; '~homeless-shelter/foo.csv' != '/homeless-shelter/foo.csv'
6350 (string-append "--deselect=tdda/test_tdda.py::"
6351 "TestTDDAUtils::test_handle_tilde_strings"))))
6352 (native-inputs
6353 (list python-pytest
6354 python-setuptools
6355 tzdata-for-tests))
6356 (propagated-inputs
6357 (list python-chardet
6358 python-numpy
6359 python-pandas
6360 python-polars
6361 python-pyarrow
6362 python-pyyaml
6363 python-regex
6364 python-requests
6365 python-rich
6366 python-tomli
6367 python-tomli-w))
6368 (home-page "https://tdda.readthedocs.io/en/stable")
6369 (synopsis "Test-driven data analysis library for Python")
6370 (description
6371 "The TDDA Python module provides command-line and Python API support
6372for the overall process of data analysis, through tools that perform
6373reference testing, constraint discovery for data, automatic inference
6374of regular expressions from text data and automatic test generation.")
6375 (license license:expat)))
6376
6377(define-public python-traittypes
6378 (package
6379 (name "python-traittypes")
6380 (version "0.2.1")
6381 (source
6382 (origin
6383 (method url-fetch)
6384 (uri (pypi-uri "traittypes" version))
6385 (sha256
6386 (base32 "1mlv93irdrgxrhnhq3ksi9585d55bpi4mv9dha4p8gkkjiia4vxy"))))
6387 (build-system pyproject-build-system)
6388 (arguments
6389 (list
6390 ;; This one test fails because it doesn't raise an expected exception.
6391 #:test-flags '(list "-k" "not test_bad_values")
6392 #:phases
6393 '(modify-phases %standard-phases
6394 (add-after 'unpack 'numpy-compatibility
6395 (lambda _
6396 (substitute* "traittypes/tests/test_traittypes.py"
6397 (("np\\.int") "int")))))))
6398 (propagated-inputs (list python-traitlets))
6399 (native-inputs
6400 (list python-numpy
6401 python-pandas
6402 python-pynose
6403 python-pytest
6404 python-setuptools
6405 python-xarray))
6406 (home-page "https://github.com/jupyter-widgets/traittypes")
6407 (synopsis "Trait types for NumPy, SciPy and friends")
6408 (description "The goal of this package is to provide a reference
6409implementation of trait types for common data structures used in the scipy
6410stack such as numpy arrays or pandas and xarray data structures. These are
6411out of the scope of the main traitlets project but are a common requirement to
6412build applications with traitlets in combination with the scipy stack.")
6413 (license license:bsd-3)))
6414
6415(define-public python-trimesh
6416 (package
6417 (name "python-trimesh")
6418 (version "4.5.3")
6419 (source
6420 (origin
6421 (method git-fetch) ; no tests in PyPI
6422 (uri (git-reference
6423 (url "https://github.com/mikedh/trimesh")
6424 (commit version)))
6425 (file-name (git-file-name name version))
6426 (sha256
6427 (base32 "17fyapp8nffnnf95bmcvllvg41fjlpvlv6qndbm048hnyayixxld"))))
6428 (build-system pyproject-build-system)
6429 (arguments
6430 (list
6431 #:test-flags
6432 ;; XXX: When more optional modules are available review
6433 ;; disabled tests once again.
6434 ;;
6435 ;; Disable tests requiring optional, not packed modules.
6436 #~(list "-k" (string-join
6437 (list "not test_bezier_example"
6438 "test_discrete"
6439 "test_dxf"
6440 "test_ply_path_bezier"
6441 "test_ply_path_line"
6442 "test_ply_path_multi"
6443 "test_revolve"
6444 "test_screw"
6445 "test_simple_closed"
6446 "test_simple_extrude"
6447 "test_simple_open"
6448 "test_slice_onplane"
6449 "test_spline_3D"
6450 "test_svg"
6451 ;; Following tests require network:
6452 "test_fuze"
6453 "test_remote")
6454 " and not "))
6455 #:phases
6456 #~(modify-phases %standard-phases
6457 ;; XXX: It struggles to load and fails with error: AttributeError:
6458 ;; module 'trimesh' has no attribute '__main__'.
6459 (delete 'sanity-check))))
6460 (native-inputs
6461 (list python-pyinstrument
6462 python-pytest))
6463 (propagated-inputs
6464 (list ;; python-cascadio ; not packed yet, optional
6465 python-chardet
6466 python-colorlog
6467 python-httpx
6468 python-jsonschema
6469 python-lxml
6470 ;; python-mapbox-earcut ; not packed yet, optional
6471 ;; python-manifold3d ; not packed yet, optional
6472 python-meshio
6473 python-networkx
6474 python-numpy
6475 ;; python-openctm ; not packed yet, optional
6476 python-pillow
6477 python-psutil
6478 python-pycollada
6479 python-pyglet
6480 python-requests
6481 python-rtree
6482 python-scikit-image
6483 python-scipy
6484 python-setuptools
6485 python-shapely
6486 ;; python-svg-path ; not packed yet, optional
6487 python-sympy
6488 ;; python-vhacdx ; not packed yet, optional
6489 ;; python-xatlas ; not packed yet, optional
6490 python-xxhash))
6491 (home-page "https://github.com/mikedh/trimesh")
6492 (synopsis "Python library for loading and using triangular meshes")
6493 (description
6494 "Trimesh is a pure Python library for loading and using triangular meshes
6495with an emphasis on watertight surfaces. The goal of the library is to
6496provide a full featured and well tested Trimesh object which allows for easy
6497manipulation and analysis, in the style of the Polygon object in the Shapely
6498library.")
6499 (license license:expat)))
6500
6501(define-public python-tspex
6502 (package
6503 (name "python-tspex")
6504 ;; 0.6.3 is not tagged; must be this one, as it is the latest, from the
6505 ;; day of the release, and the commit message is "Bump to 0.6.3".
6506 (properties '((commit . "d393ff497b7c14d673e792bd6c84ddd734be1239")
6507 (revision . "0")))
6508 (version (git-version "0.6.3"
6509 (assoc-ref properties 'revision)
6510 (assoc-ref properties 'commit)))
6511 (source
6512 (origin
6513 (method git-fetch)
6514 (uri (git-reference
6515 (url "https://github.com/apcamargo/tspex")
6516 (commit (assoc-ref properties 'commit))))
6517 (file-name (git-file-name name version))
6518 (sha256
6519 (base32 "0khhnahhn0jp9y14q6wgq0xqadqszwn1iq3y562bhfmv09f4j1ik"))))
6520 (build-system pyproject-build-system)
6521 (arguments
6522 (list
6523 #:phases
6524 #~(modify-phases %standard-phases
6525 ;; The seaborn styles have different names.
6526 (add-after 'unpack 'fix-seaborn
6527 (lambda _
6528 (substitute* (find-files "." ".py$")
6529 (("seaborn-") "seaborn-v0_8-")))))))
6530 (native-inputs
6531 (list python-pytest
6532 python-setuptools))
6533 (propagated-inputs
6534 (list python-matplotlib
6535 python-numpy
6536 python-pandas
6537 python-seaborn
6538 python-xlrd))
6539 (home-page "https://apcamargo.github.io/tspex/")
6540 (synopsis "Calculate tissue-specificity metrics for gene expression")
6541 (description
6542 "This package provides a Python package for calculating
6543tissue-specificity metrics for gene expression.")
6544 (license license:gpl3+)))
6545
6546(define-public python-typedunits
6547 (package
6548 (name "python-typedunits")
6549 (version "0.0.2")
6550 (source
6551 (origin
6552 (method git-fetch)
6553 (uri (git-reference
6554 (url "https://github.com/quantumlib/TypedUnits")
6555 (commit (string-append "v" version))))
6556 (file-name (git-file-name name version))
6557 (sha256
6558 (base32 "0ir7xciv4inlsc6wvafwlbb4ij8i1a8pn76q7p1rgckh63vws03l"))))
6559 (build-system pyproject-build-system)
6560 (arguments
6561 (list
6562 #:phases
6563 #~(modify-phases %standard-phases
6564 (add-after 'unpack 'patch-requirements
6565 (lambda* (#:key inputs #:allow-other-keys)
6566 (substitute* "requirements.txt"
6567 (("^cython.*\n") "")))))))
6568 (native-inputs
6569 (list python-cython
6570 python-pytest
6571 python-setuptools))
6572 (propagated-inputs
6573 (list python-attrs
6574 python-numpy
6575 python-protobuf-6
6576 python-pyparsing))
6577 (home-page "https://github.com/quantumlib/TypedUnits")
6578 (synopsis "Fast units and dimensions library")
6579 (description
6580 "This package provides a fast units and dimensions library with support
6581for static dimensionality checking and protobuffer serialization.")
6582 (license license:asl2.0)))
6583
6584(define-public python-uhi
6585 (package
6586 (name "python-uhi")
6587 (version "1.1.1")
6588 (source
6589 (origin
6590 (method git-fetch)
6591 (uri (git-reference
6592 (url "https://github.com/scikit-hep/uhi")
6593 (commit (string-append "v" version))))
6594 (file-name (git-file-name name version))
6595 (sha256
6596 (base32 "1hrk39w6mim91kk70vclh7k3fpwn8d1h6g9gh0jx16f5ii8py8i6"))))
6597 (build-system pyproject-build-system)
6598 (arguments
6599 (list
6600 #:test-flags
6601 ;; Tests introduce cycle with python-hist.
6602 #~(list "--ignore=tests/test_hdf5.py"
6603 "--ignore=tests/test_json.py"
6604 "--ignore=tests/test_zip.py")))
6605 (native-inputs
6606 (list python-boost-histogram
6607 python-dependency-groups
6608 python-hatch-vcs
6609 python-hatchling
6610 python-packaging
6611 python-pytest
6612 python-setuptools))
6613 (propagated-inputs
6614 (list python-numpy
6615 ;; [optional]
6616 python-fastjsonschema
6617 python-h5py))
6618 (home-page "https://github.com/scikit-hep/uhi")
6619 (synopsis "Universal Histogram Interface")
6620 (description "This is a package meant primarily for documenting histogram
6621indexing and the PlottableHistogram Protocol and any future cross-library
6622standards. It also contains the code for the PlottableHistogram Protocol, to
6623be used in type checking libraries wanting to conform to the protocol. It is
6624not usually a runtime dependency, but only a type checking, testing, and/or
6625docs dependency in support of other libraries.")
6626 (license license:bsd-3)))
6627
6628(define-public python-unyt
6629 (package
6630 (name "python-unyt")
6631 (version "3.1.0")
6632 (source
6633 (origin
6634 (method url-fetch)
6635 (uri (pypi-uri "unyt" version))
6636 (sha256
6637 (base32 "07g5rasgikp8a4x0cylz8xxzgh3536djdjppcadiqlhygyl845bp"))))
6638 (build-system pyproject-build-system)
6639 ;; tests: 764 passed, 37 skipped, 2 xfailed
6640 (native-inputs
6641 (list python-flit-core
6642 python-pytest))
6643 (propagated-inputs
6644 (list python-numpy
6645 python-packaging
6646 python-sympy))
6647 (home-page "https://unyt.readthedocs.io")
6648 (synopsis "Library for working with data that has physical units")
6649 (description
6650 "@code{unyt} is a Python library working with data that has physical
6651units. It defines the @code{unyt.array.unyt_array} and
6652@code{unyt.array.unyt_quantity} classes (subclasses of NumPy’s ndarray class)
6653for handling arrays and scalars with units,respectively")
6654 (license license:bsd-3)))
6655
6656(define-public python-uproot
6657 (package
6658 (name "python-uproot")
6659 (version "5.6.4")
6660 (source
6661 (origin
6662 (method url-fetch)
6663 (uri (pypi-uri "uproot" version))
6664 (sha256
6665 (base32 "024k5kjwcd2nw5hfxhpl0x9p5aq0qrg0nlh9v24vr39rcqadh52a"))))
6666 (build-system pyproject-build-system)
6667 (arguments
6668 (list
6669 #:test-flags
6670 #~(list
6671 ;; conftest.py is not required and it imports modules we do not use.
6672 "--noconftest"
6673 ;; There is no easy way to skip tests that require the network, so
6674 ;; just run a handful of tests that pass.
6675 "tests/test_0351_write_TList.py"
6676 "tests/test_0352_write_THashList.py"
6677 "tests/test_0439_check_awkward_before_numpy.py"
6678 "tests/test_0976_path_object_split.py"
6679 "tests/test_1198_coalesce.py"
6680 "tests/test_1264_write_NumPy_array_of_strings.py"
6681 "tests/test_1318_dont_compare_big_endian_in_awkward.py")
6682 #:phases
6683 #~(modify-phases %standard-phases
6684 (add-after 'unpack 'set-version
6685 (lambda _
6686 ;; Version is determined dynamically from .git.
6687 (substitute* "pyproject.toml"
6688 (("\\[project\\]")
6689 (string-append "[project]" "\n" "version = \""
6690 #$version "\""))
6691 (("\"version\"") "")))))))
6692 (native-inputs
6693 (list python-hatch-vcs
6694 python-pytest
6695 python-pytest-timeout
6696 python-setuptools))
6697 (propagated-inputs
6698 (list python-awkward
6699 python-cramjam
6700 python-fsspec
6701 python-numpy
6702 python-packaging
6703 python-xxhash))
6704 (home-page "https://uproot.readthedocs.io")
6705 (synopsis "ROOT I/O in Python using NumPy")
6706 (description
6707 "Uproot is a Python library for reading and writing ROOT files. It uses
6708NumPy and does not depend on C++ ROOT.")
6709 (license license:bsd-3)))
6710
6711(define-public python-upsetplot
6712 (package
6713 (name "python-upsetplot")
6714 ;; Latest release is incompatible with Pandas 3 and NumPy 2.4.
6715 (properties '((commit . "e9603da19d321c047f88d404f687e82be415e52c")
6716 (revision . "1")))
6717 (version (git-version "0.9.0"
6718 (assoc-ref properties 'revision)
6719 (assoc-ref properties 'commit)))
6720 (source
6721 (origin
6722 (method git-fetch)
6723 (uri (git-reference
6724 ;; Using a fork of https://github.com/jnothman/UpSetPlot
6725 ;; original source that is updated for Pandas 3 compatibility,
6726 ;; see <https://github.com/kevinpetersavage/UpSetPlot/pull/1>.
6727 (url "https://github.com/kevinpetersavage/UpSetPlot")
6728 (commit (assoc-ref properties 'commit))))
6729 (file-name (git-file-name name version))
6730 (sha256
6731 (base32 "155g0x4z0zdfri528spws5mad4d24vadsc827iy92f5br7vbf3j3"))))
6732 (build-system pyproject-build-system)
6733 (propagated-inputs
6734 (list python-matplotlib python-pandas))
6735 (native-inputs
6736 (list python-pytest python-setuptools))
6737 (home-page "https://upsetplot.readthedocs.io")
6738 (synopsis "Draw UpSet plots with Pandas and Matplotlib")
6739 (description
6740 "This is a Python implementation of UpSet plots by Lex et al.
6741UpSet plots are used to visualize set overlaps; like Venn diagrams but more
6742readable.")
6743 (license license:bsd-3)))
6744
6745(define-public python-vaex-core
6746 (package
6747 (name "python-vaex-core")
6748 (version "4.19.0")
6749 (source
6750 (origin
6751 (method git-fetch)
6752 (uri (git-reference
6753 (url "https://www.github.com/maartenbreddels/vaex")
6754 (commit (string-append "core-v" version))))
6755 (file-name (git-file-name name version))
6756 (sha256
6757 (base32 "1m6h6m0vm8vdx2nk26nvlbyfvlj0g9ph8cdh38258gn18fd2db0l"))
6758 (patches
6759 (search-patches "python-vaex-core-fix-tsl-use.patch"))
6760 (modules '((guix build utils)))
6761 (snippet #~(begin
6762 (delete-all-but "." "packages")
6763 (delete-all-but "packages" "vaex-core")
6764 (delete-file-recursively "packages/vaex-core/vendor")))))
6765 (build-system pyproject-build-system)
6766 (arguments
6767 (list
6768 ;; TODO: Require vaex.server and others, which require vaex-core;
6769 ;; implement bootstrapping.
6770 #:tests? #f
6771 #:phases
6772 #~(modify-phases %standard-phases
6773 (add-after 'unpack 'chdir
6774 (lambda _
6775 (chdir "packages/vaex-core")))
6776 (add-after 'chdir 'relax-requirements
6777 (lambda _
6778 (substitute* "setup.py"
6779 ;; "dask!=2022.4.0,<2024.9"; there is a note "fingerprinting
6780 ;; in no longer deterministic as of 2024.9.0" which may be
6781 ;; resolved in 2024.12.1.
6782 ((",<2024.9") "")
6783 ;; There is no a fresh version supporting Pandas 3 yet, built
6784 ;; has passed but sanity-check fails.
6785 (("pandas>=1.0,<3") "pandas>=1.0"))))
6786 (add-before 'build 'patch-missing-include
6787 (lambda _
6788 ;; See: <https://github.com/vaexio/vaex/issues/2382>.
6789 ;; TODO: Update to the latest version including the fix.
6790 (substitute* "src/string_utils.hpp"
6791 (("#include <nonstd/string_view.hpp>")
6792 "#include <cstdint>\n#include <nonstd/string_view.hpp>")))))))
6793 (native-inputs
6794 (list pybind11
6795 python-cython
6796 python-setuptools))
6797 (inputs
6798 (list boost
6799 pcre
6800 string-view-lite
6801 tsl-hopscotch-map))
6802 (propagated-inputs
6803 (list python-aplus
6804 python-blake3
6805 python-cloudpickle
6806 python-dask
6807 python-filelock
6808 python-frozendict
6809 python-future
6810 python-nest-asyncio
6811 python-numpy
6812 python-pandas
6813 python-pyarrow
6814 python-pydantic
6815 python-pyyaml
6816 python-rich
6817 python-six ;hard dependency
6818 python-tabulate
6819 ;; [optional]
6820 python-diskcache
6821 python-fsspec
6822 ;; python-gcsfs ;not packaged yet in Guix
6823 python-graphviz
6824 python-h5py
6825 python-httpx
6826 ;; python-ipyvolume ;not packaged yet in Guix
6827 python-psutil
6828 python-s3fs))
6829 (home-page "https://www.github.com/maartenbreddels/vaex")
6830 (synopsis "Core of Vaex library for exploring tabular datasets")
6831 (description "Vaex is a high performance Python library for lazy
6832Out-of-Core DataFrames (similar to Pandas), to visualize and explore big
6833tabular datasets. This package provides the core modules of Vaex.")
6834 (license license:expat)))
6835
6836(define-public python-vector
6837 (package
6838 (name "python-vector")
6839 (version "1.8.1")
6840 (source
6841 (origin
6842 (method git-fetch)
6843 (uri (git-reference
6844 (url "https://github.com/scikit-hep/vector")
6845 (commit (string-append "v" version))))
6846 (file-name (git-file-name name version))
6847 (sha256
6848 (base32 "0gxcihgs2cxxhfayv9ixis4pgjnp45c33pqym6cdp0n8j4y6y6zm"))))
6849 (build-system pyproject-build-system)
6850 (native-inputs
6851 (list ;; python-dask-awkward ;not packaged yet in Guix
6852 python-hatch-vcs
6853 python-hatchling
6854 ;; python-jax ;not packaged yet in Guix
6855 python-notebook
6856 python-optree
6857 python-papermill
6858 python-pytest
6859 #;python-spark-parse)) ;not packaged yet in Guix
6860 (propagated-inputs
6861 (list python-numpy
6862 python-packaging
6863 ;; [optional]
6864 python-awkward
6865 python-numba
6866 python-sympy))
6867 (home-page "https://github.com/scikit-hep/vector")
6868 (synopsis "Arrays of 2D, 3D, and Lorentz vectors")
6869 (description "Vector is a Python library for 2D and 3D spatial vectors, as
6870well as 4D space-time vectors. It is especially intended for performing
6871geometric calculations on arrays of vectors, rather than one vector at a time
6872in a Python @code{for} loop.")
6873 (license license:bsd-3)))
6874
6875(define-public python-vedo
6876 (package
6877 (name "python-vedo")
6878 (version "2025.5.4")
6879 (source
6880 (origin
6881 (method git-fetch)
6882 (uri (git-reference
6883 (url "https://github.com/marcomusy/vedo")
6884 (commit (string-append "v" version))))
6885 (file-name (git-file-name name version))
6886 (sha256
6887 (base32 "17lrx30pdag0d3d5a2cycfylsbhad4ywikza784h2fg95w77y1va"))))
6888 (build-system pyproject-build-system)
6889 (arguments
6890 (list
6891 ;; XXX: The whole test suite depends on the data from
6892 ;; <https://vedo.embl.es/examples> providing samples which need to be
6893 ;; downloaded during tests, find the way how to enable it.
6894 #:tests? #f
6895 #:phases
6896 #~(modify-phases %standard-phases
6897 (add-after 'unpack 'relax-requirements
6898 ;; vtk does not provide Python metadata.
6899 ;;
6900 ;; ...checking requirements: ERROR: vedo==2025.5.4
6901 ;; DistributionNotFound(Requirement.parse('vtk'), {'vedo'})
6902 (lambda _
6903 (substitute* "pyproject.toml"
6904 (("\"vtk\",") "")))))))
6905 (native-inputs
6906 (list pkg-config
6907 python-pkgconfig
6908 python-setuptools
6909 python-wheel))
6910 (propagated-inputs
6911 (list python-deprecated
6912 python-matplotlib
6913 python-numpy
6914 python-pygments
6915 vtk))
6916 (home-page "https://github.com/marcomusy/vedo")
6917 (synopsis
6918 "Analysis and visualization of 3D objects and point clouds")
6919 (description
6920 "@code{vedo} is a fast and lightweight python module for
6921scientific analysis and visualization. The package provides a wide
6922range of functionalities for working with three-dimensional meshes and
6923point clouds. It can also be used to generate high quality
6924two-dimensional renderings such as scatter plots and histograms.
6925@code{vedo} is based on @code{vtk} and @code{numpy}.")
6926 ;; vedo is released under the Expat license. Included fonts are
6927 ;; covered by the OFL license and textures by the CC0 license.
6928 ;; The earth images are in the public domain.
6929 (license (list license:expat
6930 license:silofl1.1
6931 license:cc0
6932 license:public-domain))))
6933
6934(define-public python-xarray
6935 (package
6936 (name "python-xarray")
6937 (version "2026.04.0")
6938 (source
6939 (origin
6940 (method git-fetch)
6941 (uri (git-reference
6942 (url "https://github.com/pydata/xarray")
6943 (commit (string-append "v" version))))
6944 (file-name (git-file-name name version))
6945 (sha256
6946 (base32 "1ma0k5gw5frldms4zrgp5ww0l1m5h5620ks5sdljbjz4wqbsf9di"))))
6947 (build-system pyproject-build-system)
6948 (arguments
6949 (list
6950 ;; tests: 7500 passed, 9135 skipped, 24 xfailed, 6 xpassed, 45 warnings
6951 #:test-flags
6952 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
6953 ;; Regression in Pandas 3.0.3.
6954 ;; See: <https://github.com/pydata/xarray/issues/11359>.
6955 (string-append "--deselect=properties/test_pandas_roundtrip.py"
6956 "::test_roundtrip_pandas_dataframe_datetime")
6957 ;; See: <https://github.com/pydata/xarray/issues/10548>.
6958 (string-append "--deselect=xarray/tests/test_dataset.py"
6959 "::TestDataset::test_repr"))
6960 #:phases
6961 #~(modify-phases %standard-phases
6962 (add-after 'unpack 'fix-pytest-config
6963 (lambda _
6964 (substitute* "pyproject.toml"
6965 ((".*--mypy-.*") "")))))))
6966 (native-inputs
6967 (list python-pytest
6968 python-pytest-asyncio
6969 python-pytest-xdist
6970 python-pytz
6971 python-setuptools
6972 python-setuptools-scm
6973 tzdata-for-tests))
6974 (propagated-inputs
6975 (list python-numpy
6976 python-packaging
6977 python-pandas
6978 ;; [optional]
6979 python-bottleneck
6980 ;; python-cartopy
6981 ;; python-cftime
6982 ;; python-dask
6983 ;; python-flox
6984 ;; python-fsspec
6985 ;; python-h5netcdf
6986 ;; python-matplotlib
6987 ;; python-nc-time-axis
6988 ;; python-netcdf4
6989 python-numba
6990 ;; python-numbagg ;blocked by guix/guix#9344
6991 ;; python-opt-einsum
6992 ;; python-pooch
6993 ;; python-pydap
6994 python-scipy-minimal ;to slim down closure size
6995 ;; python-seaborn
6996 ;; python-sparse
6997 #;python-zarr))
6998 (home-page "https://github.com/pydata/xarray")
6999 (synopsis "N-D labeled arrays and datasets")
7000 (description "Xarray (formerly xray) makes working with labelled
7001multi-dimensional arrays simple, efficient, and fun!
7002
7003Xarray introduces labels in the form of dimensions, coordinates and attributes
7004on top of raw NumPy-like arrays, which allows for a more intuitive, more
7005concise, and less error-prone developer experience. The package includes a
7006large and growing library of domain-agnostic functions for advanced analytics
7007and visualization with these data structures.")
7008 (license license:asl2.0)))
7009
7010(define-public python-xarray-dataclass
7011 (package
7012 (name "python-xarray-dataclass")
7013 (version "3.0.0")
7014 (source
7015 (origin
7016 (method git-fetch)
7017 (uri (git-reference
7018 (url "https://github.com/xarray-contrib/xarray-dataclass/")
7019 (commit (string-append "v" version))))
7020 (file-name (git-file-name name version))
7021 (sha256
7022 (base32 "1q3y9gbzrp1mh48y7gggqgggwnarxdn32h907mfax1hi9ap6ywil"))))
7023 (build-system pyproject-build-system)
7024 (native-inputs
7025 (list python-pytest
7026 python-hatchling))
7027 (propagated-inputs
7028 (list python-numpy
7029 python-typing-extensions
7030 python-xarray))
7031 (home-page "https://github.com/xarray-contrib/xarray-dataclass/")
7032 (synopsis "Xarray data creation by data classes")
7033 (description
7034 "xarray-dataclass is a Python package that makes it easy to create
7035@url{https://xarray.pydata.org/en/stable/index.html, xarray}'s DataArray and
7036Dataset objects that are \"typed\" (i.e. fixed dimensions, data type,
7037coordinates, attributes, and name) using
7038@url{https://docs.python.org/3/library/dataclasses.html, the Python's
7039dataclass}. It's a successor of not maintained
7040https://github.com/astropenguin/xarray-dataclasses.")
7041 (license license:expat)))
7042
7043(define-public python-xarray-dataclasses
7044 (package
7045 (name "python-xarray-dataclasses")
7046 (version "1.7.0")
7047 (source
7048 (origin
7049 (method git-fetch)
7050 (uri (git-reference
7051 (url "https://github.com/astropenguin/xarray-dataclasses/")
7052 (commit (string-append "v" version))))
7053 (file-name (git-file-name name version))
7054 (sha256
7055 (base32 "043lc1hadr5y0y16g682viiafy0hfsa7q18lqmndpyvnmcgm893z"))))
7056 (build-system pyproject-build-system)
7057 (propagated-inputs (list python-numpy python-typing-extensions
7058 python-xarray))
7059 (native-inputs (list python-pytest python-poetry-core))
7060 (home-page "https://github.com/astropenguin/xarray-dataclasses/")
7061 (synopsis "Data creation made easy by dataclass")
7062 (description "@code{xarray-dataclasses} is a Python package that makes it
7063easy to create @code{xarray}'s @code{DataArray} and @code{Datase} objects that
7064are \"typed\" (i.e. fixed dimensions, data type, coordinates, attributes, and
7065name) using the Python's @code{dataclass}.")
7066 (license license:expat)))
7067
7068(define-public python-xarray-einstats
7069 (package
7070 (name "python-xarray-einstats")
7071 (version "0.9.1")
7072 (source
7073 (origin
7074 (method git-fetch)
7075 (uri (git-reference
7076 (url "https://github.com/arviz-devs/xarray-einstats")
7077 (commit (string-append "v" version))))
7078 (file-name (git-file-name name version))
7079 (sha256
7080 (base32 "11crz1l6swabwzmwbrxypfw8gbbp81higzgi5nsxzfigcrrqq30a"))))
7081 (build-system pyproject-build-system)
7082 ;; tests: 317 passed, 48 skipped
7083 (native-inputs
7084 (list python-flit-core
7085 python-pytest))
7086 (propagated-inputs
7087 (list python-numpy
7088 python-scipy
7089 python-xarray
7090 ;; [optinoal]
7091 python-einops
7092 python-numba))
7093 (home-page "https://einstats.python.arviz.org/en/latest/")
7094 (synopsis "Stats, linear algebra and einops for xarray")
7095 (description
7096 "@code{xarray_einstats} provides wrappers around some NumPy and SciPy
7097functions and around einops with an API and features adapted to xarray.")
7098 (license license:asl2.0)))
7099
7100(define-public python-xarray-schema
7101 (package
7102 (name "python-xarray-schema")
7103 (version "0.0.3")
7104 (source
7105 (origin
7106 (method url-fetch)
7107 (uri (pypi-uri "xarray-schema" version))
7108 (sha256
7109 (base32 "08194629696z98dkc74i6c9zmy1jicvd2ajb75q0lsf0i427cv4w"))))
7110 (build-system pyproject-build-system)
7111 (propagated-inputs (list python-numpy python-xarray))
7112 (native-inputs
7113 (list python-pytest
7114 python-setuptools
7115 python-setuptools-scm
7116 python-wheel))
7117 (home-page "https://github.com/carbonplan/xarray-schema")
7118 (synopsis "Schema validation for Xarray objects")
7119 (description "This package implements schema validation for Xarray
7120objects.")
7121 (license license:expat)))
7122
7123(define-public python-xyzpy
7124 (package
7125 (name "python-xyzpy")
7126 (version "1.3.5")
7127 (source
7128 (origin
7129 (method url-fetch)
7130 (uri (pypi-uri "xyzpy" version))
7131 (sha256
7132 (base32 "128v4124yvhdwcw86pbbsgia0301x9nvjnyccvdqqsjlmw4am82b"))))
7133 (build-system pyproject-build-system)
7134 (arguments
7135 (list
7136 ;; tests: 508 passed, 12 skipped, 1 deselected, 1 xpassed, 845 warnings
7137 #:test-flags
7138 #~(list (string-append
7139 ;; FileNotFoundError: [Errno 2] No such file or directory:
7140 ;; 'taskset'
7141 "--deselect=tests/test_gen/test_cropping.py"
7142 "::TestGrowSubprocessResources"
7143 "::test_grow_subprocess_with_affinities_and_gpus"))))
7144 (propagated-inputs
7145 (list python-cloudpickle
7146 python-h5netcdf
7147 python-h5py
7148 python-joblib
7149 python-numpy
7150 python-pandas
7151 python-tqdm
7152 python-xarray
7153 ;; [optional]
7154 python-bokeh
7155 python-matplotlib))
7156 (native-inputs
7157 (list python-dask
7158 python-hatch-vcs
7159 python-hatchling
7160 python-pytest))
7161 (home-page "https://xyzpy.readthedocs.io/en/latest/")
7162 (synopsis "Easily generate large parameter space data")
7163 (description
7164 "@code{xyzpy} is Python library for efficiently generating, manipulating
7165and plotting data with a lot of dimensions, of the type that often occurs in
7166numerical simulations. It stands wholly atop the labelled N-dimensional array
7167library @code{xarray}.")
7168 (license license:expat)))
7169
7170(define-public pyzo
7171 (package
7172 (name "pyzo")
7173 (version "4.20.0")
7174 (source
7175 (origin
7176 (method git-fetch)
7177 (uri (git-reference
7178 (url "https://github.com/pyzo/pyzo")
7179 (commit (string-append "v" version))))
7180 (file-name (git-file-name name version))
7181 (sha256
7182 (base32 "1a82k7hjmv20lrwiwsdrvczrm21wq16m4snwsirwhj0jh5k1x9iw"))))
7183 (build-system pyproject-build-system)
7184 (arguments
7185 (list
7186 #:test-flags
7187 #~(list "--ignore-glob=pyzo/yoton/tests/*" ; XXX: yoton is outdated.
7188 "--ignore=pyzo/codeeditor/_test.py"))) ; XXX: cannot import qt.
7189 (native-inputs
7190 (list python-flit-core
7191 python-pytest
7192 python-setuptools))
7193 (inputs (list python-pyside-6))
7194 (home-page "https://pyzo.org")
7195 (synopsis "Python IDE for scientific computing")
7196 (description
7197 "Pyzo is a Python IDE focused on interactivity and introspection,which
7198makes it very suitable for scientific computing. Its practical design is
7199aimed at simplicity and efficiency.
7200
7201It consists of two main components, the editor and the shell, and uses a set
7202of pluggable tools to help the programmer in various ways. Some example tools
7203are source structure, project manager, interactive help, workspace...")
7204 (license license:bsd-2)))
7205
7206(define-public snakemake
7207 (package
7208 (name "snakemake")
7209 (version "9.25.1")
7210 (source
7211 (origin
7212 (method git-fetch)
7213 (uri (git-reference
7214 (url "https://github.com/snakemake/snakemake")
7215 (commit (string-append "v" version))))
7216 (file-name (git-file-name name version))
7217 (sha256
7218 (base32 "15xic0m0pyhakyzvi9r2hlm9rvfnws53ngxnwkp9l9x47xqfgh7v"))))
7219 (build-system pyproject-build-system)
7220 (arguments
7221 (list
7222 #:test-flags
7223 #~(list
7224 ;; Conda is ignored, see
7225 ;; github.com/snakemake/snakemake/pull/3339#issuecomment-5241768006
7226 "--ignore=tests/test_software_directive.py"
7227 ;; These tests require snakemake-executor-plugin-cluster-generic.
7228 "--ignore=tests/test_executor_test_suite.py"
7229 "--deselect=tests/test_logging.py::test_group_job_failure_events"
7230 ;; Those require additional snakemake plugins.
7231 "--ignore=tests/test_api.py"
7232 ;; XXX: Unclear why these tests fail.
7233 "--ignore=tests/test_jupyter_notebook_pathlike.py"
7234 "--ignore=tests/test_persistence.py"
7235 "--deselect=tests/test_script.py::TestBashEncoder"
7236 "--deselect=tests/test_sourcecache.py::test_github_file_fetch"
7237 "--ignore=tests/test_report_href/test_script.py"
7238 "--ignore=tests/test_script_py/scripts/test_explicit_import.py"
7239 "--ignore=tests/test_output_index.py"
7240 ;; We don't care about testing old [email protected] on Guix.
7241 "--ignore=tests/test_conda_python_3_7_script/test_script_python_3_7.py"
7242 ;; We don't care about lints.
7243 "--ignore=tests/test_linting.py"
7244 ;; These tests attempt to change S3 buckets on AWS and fail
7245 ;; because there are no AWS credentials.
7246 "--ignore=tests/test_tibanna"
7247 ;; It's a similar story with this test, which requires access
7248 ;; to the Google Storage service.
7249 "--ignore=tests/test_google_lifesciences")
7250 #:phases
7251 #~(modify-phases %standard-phases
7252 (add-after 'unpack 'relax-requirements
7253 (lambda _
7254 (substitute* "pyproject.toml"
7255 (("\"pip\",")
7256 "")
7257 (("\"packaging.*\",")
7258 "\"packaging\","))))
7259 (add-after 'unpack 'avoid-assets-download
7260 (lambda _
7261 (substitute* "setup.py"
7262 (("^from assets import Assets") "")
7263 (("^Assets\\.deploy\\(\\)") ""))))
7264 (add-before 'check 'pre-check
7265 (lambda* (#:key tests? #:allow-other-keys)
7266 (when tests?
7267 (setenv "HOME" "/tmp")))))))
7268 (propagated-inputs
7269 (list python-appdirs
7270 python-conda-inject
7271 python-configargparse
7272 python-connection-pool
7273 python-docutils
7274 python-dpath
7275 python-gitpython
7276 python-humanfriendly
7277 python-immutables
7278 python-jinja2
7279 python-jsonschema
7280 python-nbformat
7281 python-packaging
7282 python-psutil
7283 python-pulp
7284 python-pyyaml
7285 python-requests
7286 python-reretry
7287 python-smart-open
7288 python-snakemake-interface-common
7289 python-snakemake-interface-executor-plugins
7290 python-snakemake-interface-logger-plugins
7291 python-snakemake-interface-report-plugins
7292 python-snakemake-interface-scheduler-plugins
7293 python-snakemake-interface-software-deployment-plugins
7294 python-snakemake-interface-storage-plugins
7295 python-sqlmodel
7296 python-tabulate
7297 python-throttler
7298 python-wrapt
7299 python-yte))
7300 (native-inputs
7301 (list python-numpy
7302 python-pandas
7303 python-pytest
7304 python-setuptools
7305 python-setuptools-scm
7306 python-snakemake-software-deployment-plugin-container
7307 python-snakemake-software-deployment-plugin-envmodules
7308 python-tomli))
7309 (home-page "https://snakemake.readthedocs.io")
7310 (synopsis "Python-based execution environment for make-like workflows")
7311 (description
7312 "Snakemake aims to reduce the complexity of creating workflows by
7313providing a clean and modern domain specific specification language (DSL) in
7314Python style, together with a fast and comfortable execution environment.")
7315 (license license:expat)))
7316
7317(define-public spyder
7318 (package
7319 (name "spyder")
7320 (version "6.1.7")
7321 (source
7322 (origin
7323 (method git-fetch)
7324 (uri (git-reference
7325 (url "https://github.com/spyder-ide/spyder")
7326 (commit (string-append "v" version))))
7327 (file-name (git-file-name name version))
7328 (modules '((guix build utils)))
7329 (snippet
7330 #~(begin
7331 ;; Delete bundles and use our own packages.
7332 (delete-file-recursively "spyder/plugins/help/utils/js/mathjax")
7333 (delete-file-recursively "external-deps")))
7334 (sha256
7335 (base32 "1bzr9n3x29xvhq3cqdpclnvqawqrpxnj49zbb344f7i3lx261k7j"))))
7336 (build-system pyproject-build-system)
7337 (arguments
7338 (list
7339 #:imported-modules (append %qt-build-system-modules
7340 %pyproject-build-system-modules)
7341 #:modules '((guix build pyproject-build-system)
7342 ((guix build qt-build-system) #:prefix qt:)
7343 (guix build utils))
7344 #:test-flags
7345 ;; The 'plugins' tests takes a long time to run and contains timeouts
7346 ;; and segfaults along the way. Many more files and individual tests
7347 ;; would have to be skipped to test that directory. Run only the base
7348 ;; tests then.
7349 #~(list
7350 "--ignore" "spyder/plugins"
7351 "-k" (string-append
7352 "not "
7353 (string-join
7354 (list
7355 "flaky"
7356 "test_file_gid"
7357 "test_get_user_environment_variables"
7358 "test_is_module_installed_with_custom_interpreter"
7359 "test_get_installed_apps_and_icons"
7360 "test_environ"
7361 "test_debug_selection"
7362 "test_store_user_credentials"
7363 "test_profiler"
7364 "test_secure_options"
7365 ;; Test below could be reintroduced once bcrypt is updated
7366 "test_dependencies_for_spyder_setup_install_requires_in_sync"
7367 "test_plot_from_collectioneditor")
7368 " and not ")))
7369 #:phases
7370 #~(modify-phases %standard-phases
7371 ;; TODO: Update python-bcrypt on python-team to pass this check.
7372 (add-after 'unpack 'relax-bcrypt
7373 (lambda _
7374 (setenv "SPYDER_QT_BINDING" "pyqt6")
7375 (substitute* "setup.py"
7376 (("bcrypt>=4.3.0") "bcrypt"))))
7377 (add-after 'install 'install-mathjax
7378 (lambda* (#:key inputs outputs #:allow-other-keys)
7379 (symlink (string-append #$(this-package-input "js-mathjax")
7380 "/share/javascript/mathjax")
7381 (string-append (site-packages inputs outputs)
7382 "/spyder/plugins/help/utils/js/mathjax"))))
7383 (add-before 'check 'pre-check
7384 (lambda _
7385 (setenv "HOME" "/tmp") ; tests need a writable home
7386 (setenv "QT_QPA_PLATFORM" "offscreen")))
7387 (add-after 'wrap 'qt-wrap
7388 (lambda args
7389 (apply (assoc-ref qt:%standard-phases 'qt-wrap)
7390 `(,@args #:qtbase #$(this-package-input "qtbase"))))))))
7391 (propagated-inputs (list python-aiohttp
7392 python-asyncssh
7393 python-atomicwrites
7394 python-bcrypt
7395 python-chardet
7396 python-cloudpickle
7397 python-cookiecutter
7398 python-diff-match-patch
7399 python-intervaltree
7400 python-ipython
7401 python-ipython-pygments-lexers
7402 python-jedi
7403 python-jellyfish
7404 python-jsonschema
7405 python-keyring
7406 python-markdown-it-py
7407 python-nbconvert
7408 python-numpydoc
7409 python-packaging
7410 python-parso
7411 python-pexpect
7412 python-pickleshare
7413 python-psutil
7414 python-pygithub
7415 python-pygments
7416 python-pylint
7417 python-pylint-venv
7418 python-pyls-spyder
7419 python-pyqt-6
7420 python-pyqtwebengine-6
7421 python-lsp-black
7422 python-lsp-ruff
7423 python-lsp-server
7424 python-pyuca
7425 python-pyzmq
7426 python-qdarkstyle
7427 python-qstylizer
7428 python-qtawesome
7429 python-qtconsole
7430 python-qtpy
7431 python-rtree
7432 python-sphinx
7433 python-spyder-kernels
7434 python-superqt
7435 python-textdistance
7436 python-three-merge
7437 python-watchdog
7438 python-yarl))
7439 (inputs (list bash-minimal js-mathjax qtbase qtsvg qtwayland))
7440 (native-inputs (list git-minimal/pinned
7441 python-cython
7442 python-flaky
7443 python-matplotlib
7444 python-packaging
7445 python-pandas
7446 python-pillow
7447 python-pytest
7448 python-pytest-mock
7449 python-pytest-order
7450 python-pytest-qt
7451 python-pytest-timeout
7452 python-pyyaml
7453 python-scipy
7454 python-setuptools
7455 python-sympy))
7456 (home-page "https://www.spyder-ide.org/")
7457 (synopsis "Scientific Python Development Environment")
7458 (description
7459 "Spyder is a scientific environment written in Python, for Python, and
7460designed by and for scientists, engineers and data analysts. It offers a
7461combination of the advanced editing, analysis, debugging, and profiling
7462functionality of a comprehensive development tool with the data exploration,
7463interactive execution, deep inspection, and visualization capabilities of a
7464scientific package.")
7465 (license license:expat)))
7466
7467;;;
7468;;; Avoid adding new packages to the end of this file. To reduce the chances
7469;;; of a merge conflict, place them above in alphabetical order.
7470;;;