diff options
Diffstat (limited to 'gnu/packages/python-science.scm')
-rw-r--r-- | gnu/packages/python-science.scm | 1366 |
1 files changed, 1221 insertions, 145 deletions
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm index 862e101f6a..05c6ac1fc1 100644 --- a/gnu/packages/python-science.scm +++ b/gnu/packages/python-science.scm @@ -20,10 +20,13 @@ ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com> ;;; Copyright © 2022 Wiktor Żelazny <wzelazny@vurv.cz> ;;; Copyright © 2022 Eric Bavier <bavier@posteo.net> -;;; Copyright © 2022 Antero Mejr <antero@mailbox.org> +;;; Copyright © 2022, 2024 Antero Mejr <antero@mailbox.org> ;;; Copyright © 2022 jgart <jgart@dismail.de> ;;; Copyright © 2023, 2024 Troy Figiel <troy@troyfigiel.com> ;;; Copyright © 2024 Sharlatan Hellseher <sharlatanus@gmail.com> +;;; Copyright © 2024 Marco Baggio <marco.baggio@mdc-berlin.de> +;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr> +;;; Copyright © 2024 Rick Huijzer <ikbenrickhuyzer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,7 +52,9 @@ #:use-module (gnu packages build-tools) #:use-module (gnu packages check) #:use-module (gnu packages chemistry) + #:use-module (gnu packages cmake) #:use-module (gnu packages cpp) + #:use-module (gnu packages crates-io) #:use-module (gnu packages crypto) #:use-module (gnu packages databases) #:use-module (gnu packages digest) @@ -65,10 +70,12 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-build) - #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-check) + #:use-module (gnu packages python-crypto) + #:use-module (gnu packages python-graphics) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages rust-apps) #:use-module (gnu packages simulation) #:use-module (gnu packages sphinx) #:use-module (gnu packages statistics) @@ -81,9 +88,160 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix utils) + #:use-module (guix build-system cargo) #:use-module (guix build-system python) #:use-module (guix build-system pyproject)) +(define-public python-cvxpy + (package + (name "python-cvxpy") + (version "1.4.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cvxpy" version)) + (sha256 + (base32 "0lyri9j5gyg6m1bvfy1a4q2sqdy3w45lp0bxiq9as8srq347ic5i")))) + (build-system pyproject-build-system) + ;; It's odd but cvxpy appears to need pybind11 at runtime according to its + ;; specification. Moving pybind11 to native-inputs would break downstream + ;; packages using cvxpy. + (propagated-inputs (list pybind11 + python-clarabel + python-ecos + python-numpy + python-osqp + python-scipy + python-scs)) + (native-inputs (list python-pytest python-setuptools)) + (home-page "https://github.com/cvxpy/cvxpy") + (synopsis "DSL for modeling convex optimization problems") + (description + "This package provides a domain-specific language for modeling convex +optimization problems in Python.") + (license license:asl2.0))) + +(define-public python-ecos + (package + (name "python-ecos") + (version "2.0.13") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/embotech/ecos-python") + (commit (string-append "v" version)) + (recursive? #true))) + (file-name (git-file-name name version)) + (sha256 + (base32 "16ljq8maflfkgbw16rldg6cy14vgz2pb3b2iga60i7yzkq2ikmyw")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-numpy python-scipy)) + (native-inputs (list python-pytest python-setuptools python-wheel)) + (home-page "https://github.com/embotech/ecos") + (synopsis "Embedded Cone Solver") + (description + "This is the Python package for ECOS: Embedded Cone Solver. ECOS is +numerical software for solving convex second-order cone programs (SOCPs).") + (license license:gpl3))) + +(define-public python-formulaic + (package + (name "python-formulaic") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "formulaic" version)) + (sha256 + (base32 "18gvd3f2x358jj0df8vx5fhhnvzw047rsrs03vmvqnxaly97kpb4")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-astor + python-cached-property + python-interface-meta + python-numpy + python-pandas + python-scipy + python-typing-extensions + python-wrapt)) + (native-inputs (list python-hatchling python-hatch-vcs python-pytest)) + (home-page "https://github.com/matthewwardrop/formulaic") + (synopsis "Implementation of Wilkinson formulas") + (description "Formulaic is a high-performance implementation of Wilkinson +formulas for Python.") + (license license:expat))) + +(define-public python-osqp + (package + (name "python-osqp") + (version "0.6.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/osqp/osqp-python") + (commit (string-append "v" version)) + (recursive? #true))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0s1nbzkfsi2h4ji3v0k14pfcrvinakrwy4xdbz320lbaq3yb0b65")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + ;; Some of these test failures are explained by + ;; https://github.com/osqp/osqp-python/issues/121. + ;; These tests require the module "vec_emosqp", which we don't have. + '(list "--ignore=src/osqp/tests/codegen_vectors_test.py" + ;; These tests need "mat_emosqp". + "--ignore=src/osqp/tests/codegen_matrices_test.py" + ;; These fail with accuracy differences + "--ignore=src/osqp/tests/update_matrices_test.py" + "--ignore=src/osqp/tests/feasibility_test.py" + "--ignore=src/osqp/tests/polishing_test.py" + ;; This requires the nonfree MKL. + "--ignore=src/osqp/tests/mkl_pardiso_test.py") + #:phases + #~(modify-phases %standard-phases + ;; It looks like the upgrade to scipy 1.12.0 only broke the test + ;; suite, not the features of this library. See + ;; https://github.com/osqp/osqp-python/issues/121. + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "requirements.txt" + (("scipy.*1.12.0") "scipy <= 1.12.0")))) + (add-before 'build 'set-version + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))) + (propagated-inputs (list python-numpy python-qdldl python-scipy)) + ;; We need setuptools-scm only for the version number. Without it the + ;; version number will be "0.0.0" and downstream packages will complain. + (native-inputs (list cmake-minimal python-pytest python-setuptools-scm)) + (home-page "https://osqp.org/") + (synopsis "OSQP: operator splitting QP solver") + (description "The OSQP (Operator Splitting Quadratic Program) solver is a +numerical optimization package.") + (license license:asl2.0))) + +(define-public python-qdldl + (package + (name "python-qdldl") + (version "0.1.7.post2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "qdldl" version)) + (sha256 + (base32 "1lspam0k8gnw1yglqxvdv350fq00nkgdfmkizmx7bk0hxjjkj5ab")))) + (build-system pyproject-build-system) + (native-inputs (list cmake-minimal pybind11)) + (propagated-inputs (list python-numpy python-scipy)) + (home-page "https://github.com/oxfordcontrol/qdldl-python/") + (synopsis "QDLDL LDL factorization routine") + (description "This package provides a Python interface to the QDLDL LDL +factorization routine for quasi-definite linear system.") + (license license:asl2.0))) + (define-public python-scipy (package (name "python-scipy") @@ -212,9 +370,12 @@ routines such as routines for numerical integration and optimization.") (invoke "python" "setup.py" "build_ext" "--inplace")))))) (propagated-inputs (list python-dask - python-numpy)) + python-numpy + python-click)) (native-inputs (list python-cython + python-setuptools + python-wheel ;; The following are all needed for the tests htslib python-h5py @@ -231,26 +392,84 @@ routines such as routines for numerical integration and optimization.") genetic variation data.") (license license:expat))) +(define-public python-scikit-build-core + (package + (name "python-scikit-build-core") + (version "0.9.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "scikit_build_core" version)) + (sha256 + (base32 "146k3w3kcamyyqassmsmp6h4f5lb3cdqnbjjcbf0jm1s8wz1279l")))) + (build-system pyproject-build-system) + ;; Tests are aborted with the admonition: "setup.py install is + ;; deprecated. Use build and pip and other standards-based tools." + (arguments (list #:tests? #false)) + (propagated-inputs (list python-exceptiongroup + python-importlib-metadata + python-importlib-resources + python-packaging + python-pathspec + python-tomli + python-typing-extensions)) + (native-inputs (list pybind11 + python-pypa-build + python-cattrs + python-fastjsonschema + python-hatch-fancy-pypi-readme + python-hatch-vcs + python-hatchling + python-numpy + python-pip + python-pytest + python-rich + python-setuptools + python-setuptools-scm + python-virtualenv + python-wheel)) + (home-page "https://github.com/scikit-build/scikit-build-core") + (synopsis "Build backend for CMake based projects") + (description "Scikit-build-core is a build backend for Python that uses +CMake to build extension modules. It has a simple yet powerful static +configuration system in pyproject.toml, and supports almost unlimited +flexibility via CMake. It was initially developed to support the demanding +needs of scientific users, but can build any sort of package that uses +CMake.") + (license license:asl2.0))) + (define-public python-scikit-fem (package (name "python-scikit-fem") - (version "9.0.1") - (source (origin - (method git-fetch) ; no tests in PyPI - (uri (git-reference - (url "https://github.com/kinnala/scikit-fem") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1r1c88rbaa7vjfnljbzx8paf36yzpy33bragl99ykn6i2srmjrd4")))) + (version "10.0.2") + (source + (origin + (method git-fetch) ; no tests in PyPI + (uri (git-reference + (url "https://github.com/kinnala/scikit-fem") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "10kvzm4fmazsrddd83m0903wan67fkj13vdp6w1iw6wm6a0b5h28")))) (build-system pyproject-build-system) - (propagated-inputs (list python-meshio python-numpy python-scipy)) + (arguments + (list + #:test-flags #~(list + ;; Tests require Jax. + "--ignore=tests/test_autodiff.py" + "--ignore=tests/test_examples.py"))) (native-inputs (list python-autograd python-pyamg + ;; python-jax ; not packed yet python-pytest - python-shapely)) + python-shapely + python-setuptools + python-wheel)) + (propagated-inputs + (list python-meshio + python-numpy + python-scipy)) (home-page "https://scikit-fem.readthedocs.io/en/latest/") (synopsis "Library for performing finite element assembly") (description @@ -262,17 +481,19 @@ and linear forms into vectors.") (define-public python-scikit-fuzzy (package (name "python-scikit-fuzzy") - (version "0.4.2") + (version "0.5.0") (source (origin (method url-fetch) - (uri (pypi-uri "scikit-fuzzy" version)) + (uri (pypi-uri "scikit_fuzzy" version)) (sha256 - (base32 "0bp1n771fj44kdp7a00bcvfwirvv2rc803b7g6yf3va7v0j29c8s")))) - (build-system python-build-system) - (arguments '(#:tests? #f)) ;XXX: not compatible with newer numpy.testing + (base32 "0zsfyd8cpd2l82fwh3smxbwhb3bkqwlq17cbav53axma4c2k9r9f")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags #~(list "--pyargs" "skfuzzy"))) (native-inputs - (list python-nose)) + (list python-pytest)) (propagated-inputs (list python-networkx python-numpy python-scipy)) (home-page "https://github.com/scikit-fuzzy/scikit-fuzzy") @@ -285,7 +506,7 @@ logic, also known as grey logic.") (define-public python-scikit-image (package (name "python-scikit-image") - (version "0.22.0") + (version "0.23.2") (source (origin (method git-fetch) @@ -294,10 +515,12 @@ logic, also known as grey logic.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "10fzyq2w1ldvfkmj374l375yrx33xrlw39xc9kmk8fxfi77jpykd")))) + (base32 "1bc8i57sjk44vd9k1ilr6fpvfq1zbq9yfi22lz22k26mzrlisym3")))) (build-system pyproject-build-system) (arguments (list + ;; Disable flaky test + #:test-flags #~(list "-k" "not test_ellipse_parameter_stability") #:phases #~(modify-phases %standard-phases (add-before 'build 'change-home-dir @@ -351,7 +574,7 @@ logic, also known as grey logic.") (sha256 (base32 "0ycqizgsj7q57asc1bphzhf1fx9zqn0vx5rli7q541bas64hfqiy")))) (build-system pyproject-build-system) - (propagated-inputs (list python-numpy python-scipy)) + (propagated-inputs (list python-numpy python-pytorch python-scipy)) (home-page "https://github.com/guofei9987/scikit-opt") (synopsis "Swarm intelligence algorithms in Python") (description @@ -364,29 +587,16 @@ swarm algorithm.") (define-public python-scikit-optimize (package (name "python-scikit-optimize") - (version "0.9.0") + (version "0.10.2") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/scikit-optimize/scikit-optimize") + (url "https://github.com/holgern/scikit-optimize") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 - "0hsq6pmryimxc275yrcy4bv217bx7ma6rz0q6m4138bv4zgq18d1")) - (patches - ;; These are for compatibility with more recent versions of - ;; numpy and scikit-learn. - (search-patches "python-scikit-optimize-1148.patch" - "python-scikit-optimize-1150.patch")) - (modules '((guix build utils))) - (snippet - ;; Since scikit-learn 1.3 max_features no longer supports - ;; 'auto', which is identical to 'sqrt' - '(substitute* '("skopt/learning/forest.py" - "skopt/learning/tests/test_forest.py") - (("max_features=['\"]auto['\"]") - "max_features='sqrt'"))))) + "0pc6avzxz8l32km5jvv3maih0a5x2akxybvxl2hdg04qz2l0kz8b")))) (build-system pyproject-build-system) (propagated-inputs (list python-joblib @@ -396,7 +606,7 @@ swarm algorithm.") python-scikit-learn python-scipy)) (native-inputs - (list python-pytest)) + (list python-pytest python-setuptools python-wheel)) (home-page "https://scikit-optimize.github.io/") (synopsis "Sequential model-based optimization toolbox") (description "Scikit-Optimize, or @code{skopt}, is a simple and efficient @@ -405,6 +615,111 @@ implements several methods for sequential model-based optimization. @code{skopt} aims to be accessible and easy to use in many contexts.") (license license:bsd-3))) +(define-public python-scikit-surprise + (package + (name "python-scikit-surprise") + (version "1.1.4") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/NicolasHug/Surprise") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "15ckx2i41vs21sa3yqyj12zr0h4zrcdf3lrwcy2c1cq2bjq7mnvz")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'set-home + (lambda _ + ;; Change from /homeless-shelter to /tmp for write + ;; permission. + (setenv "HOME" "/tmp")))))) + (native-inputs + (list python-cython-3 + python-pandas + python-pytest + python-setuptools + python-wheel)) + (propagated-inputs + (list python-joblib + python-numpy + python-scikit-learn)) + (home-page "https://surpriselib.com/") + (synopsis "Recommender system library for Scikit-learn") + (description + "This package provides a Python library for building and analyzing +recommender systems that deal with explicit rating data. It was designed with +the following purposes in mind: +@itemize +@item Provide tools to handle downloaded or user-provided datasets. +@item Provide ready-to-use prediction algorithms and similarity measures. +@item Provide a base for creating custom algorithims. +@item Provide tools to evaluate, analyse and compare algorithm performance. +@item Provide documentation with precise details regarding library algorithms. +@end itemize") + (license license:bsd-3))) + +(define-public python-scikit-survival + (let ((revision "1") + ;; We need a later commit for support of a more recent sklearn and + ;; numpy 2. + (commit "bceb53ebb8306f959c70fae2be9d552f33dd3f21")) + (package + (name "python-scikit-survival") + (version (git-version "0.22.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sebp/scikit-survival") + (commit commit) + ;; This package contains a copy of Eigen. It would be good to + ;; figure out how to use our own Eigen package. + (recursive? #true))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1m3z64nv4sgay0mdrrw4q4z5ylx63a9w2x43w1r4g8kpg7z9rdfc")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'set-version + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" + #$(version-major+minor version))))))) + (propagated-inputs + (list python-ecos + python-importlib-resources + python-joblib + python-numexpr + python-numpy + python-osqp + python-pandas + python-scikit-learn + python-scipy)) + (native-inputs + (list python-black + python-pypa-build + python-coverage + python-cython-3 + python-packaging + python-pytest + python-setuptools-scm + python-tomli + python-tox)) + (home-page "https://github.com/sebp/scikit-survival") + (synopsis "Survival analysis built on top of scikit-learn") + (description "Scikit-survival is a Python module for survival analysis +built on top of scikit-learn. It allows doing survival analysis while +utilizing the power of scikit-learn, e.g., for pre-processing or doing +cross-validation.") + (license license:gpl3+)))) + (define-public python-tdda (package (name "python-tdda") @@ -422,7 +737,11 @@ implements several methods for sequential model-based optimization. (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "tdda" "test"))))))) - (native-inputs (list python-numpy python-pandas)) + (native-inputs + (list python-numpy + python-pandas + python-setuptools + python-wheel)) (home-page "https://www.stochasticsolutions.com") (synopsis "Test-driven data analysis library for Python") (description @@ -435,7 +754,10 @@ of regular expressions from text data and automatic test generation.") (define-public python-trimesh (package (name "python-trimesh") - (version "4.0.10") + ;; XXX: The latest version fails on sanity check, requiring newer + ;; setuptools which is not yet available on master. Update when + ;; python-team is merged. + (version "4.1.8") (source (origin (method git-fetch) ; no tests in PyPI @@ -444,7 +766,7 @@ of regular expressions from text data and automatic test generation.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0ry04qaw0pb3hkxv4gmna87jwk97aqangd21wbr2dr4xshmkbyyb")))) + (base32 "1vkp7znrlsqaiyg16py3jcqspi6yq4wh48lzng4sg248hqzhzspa")))) (build-system pyproject-build-system) (arguments (list @@ -454,55 +776,67 @@ of regular expressions from text data and automatic test generation.") ;; disabled tests once again. ;; ;; Disable tests requiring optional, not packed modules. - "not test_material_round" - " and not test_bezier_example" + "not test_bezier_example" " and not test_discrete" " and not test_dxf" - " and not test_layer" - " and not test_multi_nodupe" - " and not test_obj_roundtrip" - " and not test_roundtrip" - " and not test_scene" + " and not test_ply_path_bezier" + " and not test_ply_path_line" + " and not test_ply_path_multi" + " and not test_revolve" + " and not test_screw" + " and not test_simple_closed" + " and not test_simple_extrude" + " and not test_simple_open" " and not test_slice_onplane" - " and not test_svg" + " and not test_spline_3D" " and not test_svg")) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'fix-build (lambda _ + ;; Reported upstream, see + ;; <https://github.com/mikedh/trimesh/pull/2314>. (substitute* "trimesh/resources/templates/blender_boolean.py.tmpl" (("\\$MESH_PRE") "'$MESH_PRE'"))))))) (native-inputs (list python-coveralls python-pyinstrument - python-pytest - python-pytest-cov)) + python-pytest)) (propagated-inputs - (list python-chardet + (list ;; python-cascadio ; not packed yet, optional + python-chardet python-colorlog python-httpx python-jsonschema python-lxml + ;; python-mapbox-earcut ; not packed yet, optional + ;; python-manifold3d ; not packed yet, optional + python-meshio python-networkx python-numpy + ;; python-openctm ; not packed yet, optional python-pillow - ;; python-pycollada ; not packed yet, optional - ;; python-pyglet ; not packed yet, optional + python-psutil + python-pycollada + python-pyglet python-requests python-rtree + python-scikit-image python-scipy python-setuptools python-shapely - ;; python-svg-path ; not packed yet, optional + ;; python-svg-path ; not packed yet, optional python-sympy + ;; python-vhacdx ; not packed yet, optional + ;; python-xatlas ; not packed yet, optional python-xxhash)) (home-page "https://github.com/mikedh/trimesh") (synopsis "Python library for loading and using triangular meshes") (description "Trimesh is a pure Python library for loading and using triangular meshes -with an emphasis on watertight surfaces. The goal of the library is to provide -a full featured and well tested Trimesh object which allows for easy +with an emphasis on watertight surfaces. The goal of the library is to +provide a full featured and well tested Trimesh object which allows for easy manipulation and analysis, in the style of the Polygon object in the Shapely library.") (license license:expat))) @@ -532,6 +866,37 @@ volume computations for simple domains like regular polygons, disks, spheres, cubes, etc.") (license license:gpl3+))) +(define-public python-mpl-scatter-density + (package + (name "python-mpl-scatter-density") + (version "0.7") + (source + (origin + (method url-fetch) + (uri (pypi-uri "mpl-scatter-density" version)) + (sha256 + (base32 "083n4xkwjmxvij9i1xhfnxz8vk39ay0baam4nf0khvcihw47bkna")))) + (build-system pyproject-build-system) + (arguments + (list + ;; See <https://github.com/astrofrog/mpl-scatter-density/issues/42>. + #:test-flags #~(list "-k" "not test_default_dpi"))) + (propagated-inputs + (list python-fast-histogram + python-matplotlib + python-numpy)) + (native-inputs + (list python-pytest + python-pytest-cov + python-pytest-mpl + python-setuptools-scm)) + (home-page "https://github.com/astrofrog/mpl-scatter-density") + (synopsis "Matplotlib helpers to make density scatter plots") + (description + "This package provides functionality to make it easy to make scatter +density maps, both for interactive and non-interactive use.") + (license license:bsd-2))) + (define-public python-pyamg (package (name "python-pyamg") @@ -584,7 +949,9 @@ spheres, cubes, etc.") python-cppheaderparser python-pytest python-pyyaml - python-setuptools-scm)) + python-setuptools + python-setuptools-scm + python-wheel)) (propagated-inputs (list python-numpy python-scipy)) (home-page "https://github.com/pyamg/pyamg") (synopsis "Algebraic Multigrid Solvers in Python") @@ -599,6 +966,32 @@ spheres, cubes, etc.") @end itemize") (license license:expat))) +(define-public python-pyet + (package + (name "python-pyet") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pyet" version)) + (sha256 + (base32 "1dblsx0bv1g453hcx5vwij1zgankwgwvhwllqkn47k578h038xvy")))) + (build-system pyproject-build-system) + (native-inputs + (list python-mock + python-pytest + python-setuptools + python-wheel)) + (propagated-inputs + (list python-pandas + python-xarray)) + (home-page "https://github.com/pyet-org/pyet") + (synopsis "Python package for evapotranspiration calculation") + (description + "This package provides a Python library for calculating +Evapotranspiration using various standard methods.") + (license license:expat))) + (define-public python-tspex (package (name "python-tspex") @@ -619,7 +1012,7 @@ spheres, cubes, etc.") tissue-specificity metrics for gene expression.") (license license:gpl3+))) -(define-public python-pandas +(define-public python-pandas-1 (package (name "python-pandas") (version "1.5.3") @@ -705,6 +1098,134 @@ tissue-specificity metrics for gene expression.") python-pytest python-pytest-mock python-pytest-xdist + python-setuptools + python-wheel + ;; Needed to test clipboard support. + xorg-server-for-tests)) + (home-page "https://pandas.pydata.org") + (synopsis "Data structures for data analysis, time series, and statistics") + (description + "Pandas is a Python package providing fast, flexible, and expressive data +structures designed to make working with structured (tabular, +multidimensional, potentially heterogeneous) and time series data both easy +and intuitive. It aims to be the fundamental high-level building block for +doing practical, real world data analysis in Python.") + (license license:bsd-3))) + +(define-public python-pandas-2 + (package + (name "python-pandas") + (version "2.2.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pandas-dev/pandas") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "00f6jnplwg7iffnxdm4hpfls0ncbarc23933xq1rm5nk5g8dcldx")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + #~(list "--pyargs" "pandas" + ;; "--exitfirst" + "--numprocesses" (number->string (parallel-job-count)) + "-m" "not slow and not network and not db" + ;; All tests errored. + "--ignore=pandas/tests/io/test_clipboard.py" + "-k" (string-join + (list + "not test_git_version" + "test_show_versions_console" + ;; Not testing ~ expansion. + "test_expand_user" + "test_get_handle_with_path" + ;; These test access the internet (see: + ;; https://github.com/pandas-dev/pandas/issues/45085).: + ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml] + ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree] + "test_wrong_url" + ;; TODO: Missing input + "TestS3" + "s3" + ;; This test fails when run with pytest-xdist + ;; (see: https://github.com/pandas-dev/pandas/issues/39096). + "test_memory_usage" + "test_parsing_tzlocal_deprecated" + ;; PyArrow is optional. + "test_style_bar_with_pyarrow_NA_values" + "test_very_negative_exponent" + "test_usecols_no_header_pyarrow" + "test_scientific_no_exponent[pyarrow-None]" + "test_inspect_getmembers" + ;; SciPy introduces cycle, optional. + "test_savefig" + ;; It requires a fresh python-tzdata, including new + ;; timezones. + "test_repr") + " and not ")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'version-set-by-guix + (lambda _ + (with-output-to-file "_version.py" + (lambda _ + (display + (string-append "__version__ = \"" + #$(package-version this-package) + "\"")))))) + (add-before 'check 'prepare-x + (lambda _ + (system "Xvfb &") + (setenv "DISPLAY" ":0") + (setenv "HOME" ".") + ;; Skip tests that require lots of resources. + (setenv "PANDAS_CI" "1"))) + (add-after 'unpack 'patch-which + (lambda _ + (substitute* "pandas/io/clipboard/__init__.py" + (("^WHICH_CMD = .*") + (string-append "WHICH_CMD = \"" + #$(this-package-input "which") + "/bin/which\"\n"))))) + ;; The compiled libraries are only in the output at this point, + ;; but they are needed to run tests. + ;; FIXME: This should be handled by the pyargs pytest argument, + ;; but is not for some reason. + (add-before 'check 'pre-check + (lambda _ + (copy-recursively + (string-append #$output + "/lib/python3.10/site-packages/pandas/_libs") + "pandas/_libs")))))) + (propagated-inputs + (list python-dateutil + python-jinja2 + python-matplotlib + python-numpy + python-openpyxl + python-pytz + python-tzdata + python-xlrd + python-xlsxwriter)) + (inputs + (list which xclip xsel)) + (native-inputs + (list meson-python + python-beautifulsoup4 + python-cython-3 + python-html5lib + python-lxml + python-matplotlib + python-openpyxl + python-pytest-asyncio + python-pytest + python-pytest-localserver + python-pytest-mock + python-pytest-xdist + python-versioneer ;; Needed to test clipboard support. xorg-server-for-tests)) (home-page "https://pandas.pydata.org") @@ -717,13 +1238,14 @@ and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python.") (license license:bsd-3))) +(define-public python-pandas python-pandas-2) + (define-public python-pandas-stubs (package (name "python-pandas-stubs") ;; The versioning follows that of Pandas and uses the date of the - ;; python-pandas-stubs release. This is the latest version of - ;; python-pandas-stubs for python-pandas 1.5.3. - (version "1.5.3.230321") + ;; python-pandas-stubs release. + (version "2.1.1.230928") (source (origin ;; No tests in the PyPI tarball. @@ -733,28 +1255,45 @@ doing practical, real world data analysis in Python.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1blwlq5053pxnmx721zdd6v8njiybz4azribx2ygq33jcpmknda6")))) + (base32 "13b6wcwf9ybxf492w1l8qqf2bcgch21xds5r88pfkmrvqhxwfpyr")))) (build-system pyproject-build-system) (arguments (list #:test-flags #~(list "-k" (string-append - ;; The python-pyarrow package in Guix is not built - ;; with ORC integration, causing these tests to - ;; fail. + ;; The python-pyarrow package in Guix is built + ;; with ORC integration, but these tests fail with + ;; an abort in ORC because a timezone file is not + ;; in the expected location: + ;; https://github.com/apache/arrow/issues/40633 "not test_orc" " and not test_orc_path" " and not test_orc_buffer" " and not test_orc_columns" - " and not test_orc_bytes")) - #:phases '(modify-phases %standard-phases - (add-before 'check 'prepare-x - (lambda _ - (system "Xvfb &") - (setenv "DISPLAY" ":0") - ;; xsel needs to write a log file. - (setenv "HOME" - (getcwd))))))) + " and not test_orc_bytes" + " and not test_all_read_without_lxml_dtype_backend" + + ;; Apparently "numpy.bool_" is not the same as the + ;; expected "bool". + " and not test_timedelta_cmp" + " and not test_timedelta_cmp_rhs" + " and not test_timestamp_cmp" + " and not test_timestamp_eq_ne_rhs")) + #:phases + '(modify-phases %standard-phases + ;; We cannot yet upgrade numpy to 1.26 because numba needs numpy + ;; >1.24. + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "pyproject.toml" + (("numpy = \\{ version = \">=1.26.0\", python = \"<3.13\" \\}") + "numpy = { version = \">=1.23.0\", python = \"<3.13\" }")))) + (add-before 'check 'prepare-x + (lambda _ + (system "Xvfb &") + (setenv "DISPLAY" ":0") + ;; xsel needs to write a log file. + (setenv "HOME" (getcwd))))))) (propagated-inputs (list python-types-pytz)) ;; Add python-fastparquet to native inputs once it has been packaged. Its ;; tests will be skipped for now. @@ -814,7 +1353,9 @@ a convention of suggesting best recommended practices for using python-numpy python-pytest python-pytest-cov - python-pytest-xdist)) + python-pytest-xdist + python-setuptools + python-wheel)) (home-page "https://nalepae.github.io/pandarallel/") (synopsis "Tool to parallelize Pandas operations across CPUs") (description @@ -827,7 +1368,7 @@ idea of the remaining amount of computation to be done.") (define-public python-pandera (package (name "python-pandera") - (version "0.17.2") + (version "0.18.0") (source (origin ;; No tests in the PyPI tarball. @@ -837,7 +1378,7 @@ idea of the remaining amount of computation to be done.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1mnqk583z90k1n0z3lfa4rd0ng40v7hqfk7phz5gjmxlzfjbxa1x")) + (base32 "14b5aij5zjkwvsimg0v00qvp59mhhq7ljim4qghcn432vkg9gh47")) (modules '((guix build utils))) ;; These tests require PySpark and Modin. We need to remove the entire ;; directory, since the conftest.py in these directories contain @@ -855,7 +1396,8 @@ idea of the remaining amount of computation to be done.") ;; positives. These tests currently fail. "not test_python_std_list_dict_generics" " and not test_python_std_list_dict_empty_and_none" - " and not test_pandas_modules_importable")))) + " and not test_pandas_modules_importable" + " and not test_check_groups")))) ;; Pandera comes with a lot of extras. We test as many as possible, but do ;; not include all of them in the propagated-inputs. Currently, we have to ;; skip the pyspark and io tests due to missing packages python-pyspark @@ -868,7 +1410,7 @@ idea of the remaining amount of computation to be done.") python-pandas-stubs ;mypy extra python-pydantic python-scipy ;hypotheses extra - python-typeguard-4 + python-typeguard python-typing-inspect python-wrapt)) (native-inputs (list python-dask ;dask extra @@ -877,8 +1419,10 @@ idea of the remaining amount of computation to be done.") python-pyarrow ;needed to run fastapi tests python-pytest python-pytest-asyncio + python-setuptools python-sphinx - python-uvicorn)) ;needed to run fastapi tests + python-uvicorn ;needed to run fastapi tests + python-wheel)) (home-page "https://github.com/unionai-oss/pandera") (synopsis "Perform data validation on dataframe-like objects") (description @@ -905,7 +1449,7 @@ production-critical data pipelines or reproducible research settings. With (define-public python-pyjanitor (package (name "python-pyjanitor") - (version "0.26.0") + (version "0.27.0") (source (origin ;; The build requires the mkdocs directory for the description in @@ -916,7 +1460,7 @@ production-critical data pipelines or reproducible research settings. With (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1f8xbl1k9l2z56bapp7v6bd3016zrk48igcaz6hb553r6yfl7vfx")))) + (base32 "04vsg189msv8frx4zhpcg61djl7wsfvibmz0zmiih4rvkgly2cdr")))) (build-system pyproject-build-system) ;; Pyjanitor has an extensive test suite. For quick debugging, the tests ;; marked turtle can be skipped using "-m" "not turtle". @@ -925,16 +1469,29 @@ production-critical data pipelines or reproducible research settings. With #:test-flags '(list "-n" (number->string (parallel-job-count)) ;; Tries to connect to the internet. - "-k" "not test_is_connected" + "-k" (string-append "not test_is_connected" + ;; Test files are not included + " and not test_read_commandline_bad_cmd" + ;; This fails due to differences in accuracy + " and not test_jitter_results") + ;; Test files are not included + "--ignore=tests/io/test_read_csvs.py" ;; PySpark has not been packaged yet. "--ignore=tests/spark/functions/test_clean_names_spark.py" "--ignore=tests/spark/functions/test_update_where_spark.py") - #:phases #~(modify-phases %standard-phases - (add-before 'check 'set-env-ci - (lambda _ - ;; Some tests are skipped if the JANITOR_CI_MACHINE - ;; variable is not set. - (setenv "JANITOR_CI_MACHINE" "1")))))) + #:phases + #~(modify-phases %standard-phases + ;; Pandas 2.1.1 does not offer the BME frequency. + (add-after 'unpack 'pandas-compat + (lambda _ + (substitute* '("tests/functions/test_select_rows.py" + "tests/functions/test_select_columns.py") + (("freq=\"BME\"") "freq=\"BM\"")))) + (add-before 'check 'set-env-ci + (lambda _ + ;; Some tests are skipped if the JANITOR_CI_MACHINE + ;; variable is not set. + (setenv "JANITOR_CI_MACHINE" "1")))))) (propagated-inputs (list python-multipledispatch python-natsort python-pandas-flavor @@ -947,6 +1504,8 @@ production-critical data pipelines or reproducible research settings. With ;; Optional imports. We do not propagate them due to ;; their size. python-numba ;speedup of joins + python-setuptools + python-wheel rdkit)) ;chemistry submodule (home-page "https://github.com/pyjanitor-devs/pyjanitor") (synopsis "Tools for cleaning and transforming pandas DataFrames") @@ -958,6 +1517,48 @@ package was a port of the R package by the same name and it is inspired by the ease-of-use and expressiveness of the @code{dplyr} package.") (license license:expat))) +(define-public python-pymcubes + (package + (name "python-pymcubes") + (version "0.1.6") + (source + (origin + (method git-fetch) ; no tests in PyPI + (uri (git-reference + (url "https://github.com/pmneila/PyMCubes") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1v2qhc4pwanx6a8k843mbh45yk77n3w63sy5lzk5c3q4pkvfj1b9")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'prepare-test-environment + (lambda _ + ;; FileNotFoundError: [Errno 2] No such file or directory: + ;; 'output/test.obj' + (mkdir "output") + (invoke "python" "setup.py" "build_ext" "--inplace")))))) + (native-inputs + (list python-cython + python-pytest + python-setuptools + python-wheel)) + (propagated-inputs + (list python-pycollada + python-numpy + python-scipy)) + (home-page "https://github.com/pmneila/PyMCubes") + (synopsis "Marching cubes for Python") + (description + "@code{PyMCubes} is an implementation of the marching cubes algorithm to +extract iso-surfaces from volumetric data. The volumetric data can be given +as a three-dimensional @code{NumPy} array or as a Python function @code{f(x, +y, z)}.") + (license license:bsd-3))) + (define-public python-pythran (package (name "python-pythran") @@ -1031,7 +1632,8 @@ Python module with the same interface, but (hopefully) faster.") python-scikit-learn python-scipy)) (native-inputs - (list python-pytest python-pytest-cov)) + (list python-pytest python-pytest-cov python-setuptools + python-wheel)) (home-page "https://github.com/johannfaouzi/pyts") (synopsis "Python package for time series classification") (description @@ -1082,7 +1684,8 @@ written in C.") "01g21v91f4d66xd0bvap0n6d6485w2fnq1636gx6h2s42550rlbd")))) (build-system pyproject-build-system) (propagated-inputs (list python-importlib-metadata python-numpy)) - (native-inputs (list python-pytest python-sympy)) + (native-inputs (list python-pytest python-setuptools python-sympy + python-wheel)) (home-page "https://numpoly.readthedocs.io/en/master/") (synopsis "Polynomials as a numpy datatype") (description "Numpoly is a generic library for creating, manipulating and @@ -1092,6 +1695,32 @@ evaluating arrays of polynomials based on @code{numpy.ndarray objects}.") (supported-systems '("x86_64-linux" "aarch64-linux" "powerpc64le-linux")) (license license:bsd-2))) +(define-public python-spin + (package + (name "python-spin") + (version "0.8") + (source + (origin + (method url-fetch) + (uri (pypi-uri "spin" version)) + (sha256 + (base32 "0ff48nagfaai3j26g1db4zq2bwdv6kj5l7xhcs2l9kzg7qzrmhr7")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-click python-colorama python-tomli)) + (native-inputs (list python-pytest)) + (home-page "https://github.com/scientific-python/spin") + (synopsis "Developer tool for scientific Python libraries") + (description "@code{spin} is a simple interface for common development +tasks. It comes with a few common build commands out the box, but can +easily be customized per project. + +The impetus behind developing the tool was the mass migration of scientific +Python libraries (SciPy, scikit-image, and NumPy, etc.) to Meson, after +distutils was deprecated. When many of the build and installation commands +changed, it made sense to abstract away the nuisance of having to re-learn +them.") + (license license:bsd-3))) + (define-public python-baycomp (package (name "python-baycomp") @@ -1116,6 +1745,64 @@ region of practical equivalence (rope), or that the second classifier has higher scores.") (license license:expat))) +(define-public python-fast-histogram + (package + (name "python-fast-histogram") + (version "0.14") + (source + (origin + (method url-fetch) + (uri (pypi-uri "fast_histogram" version)) + (sha256 + (base32 "1sk9xa85cgm4sylzblwv3qr2dmm0ic06zkwxqa2xlazjiawp629r")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'build-extensions + (lambda _ + (invoke "python" "setup.py" "build_ext" "--inplace")))))) + (native-inputs + (list python-hypothesis + python-pytest + python-setuptools + python-setuptools-scm + python-wheel)) + (propagated-inputs + (list python-numpy)) + (home-page "https://github.com/astrofrog/fast-histogram") + (synopsis "Fast simple 1D and 2D histograms") + (description + "The fast-histogram mini-package aims to provide simple and fast +histogram functions for regular bins that don't compromise on performance. It +doesn't do anything complicated - it just implements a simple histogram +algorithm in C and keeps it simple. The aim is to have functions that are +fast but also robust and reliable. The result is a 1D histogram function here +that is 7-15x faster than @code{numpy.histogram}, and a 2D histogram function +that is 20-25x faster than @code{numpy.histogram2d}.") + (license license:bsd-3))) + +(define-public python-fastcluster + (package + (name "python-fastcluster") + (version "1.2.6") + (source + (origin + (method url-fetch) + (uri (pypi-uri "fastcluster" version)) + (sha256 + (base32 "19labbgnq85p4r4jbli2p045lgh57larhi2g2anagfxnlzpqdf5a")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-numpy)) + (native-inputs (list python-scipy)) + (home-page "https://danifold.net/fastcluster.html") + (synopsis "Fast hierarchical clustering routines for R and Python") + (description "The fastcluster package implements seven common hierarchical +clustering schemes efficiently. The package is made with two interfaces to +standard software: R and Python.") + (license license:bsd-2))) + (define-public python-fbpca (package (name "python-fbpca") @@ -1205,10 +1892,20 @@ multiple deep learning frameworks.") "0cyldwchcrmbm1y7l1ry70kk8zdh7frxci3c6iwf4iyyj34dnra5")))) (build-system pyproject-build-system) (arguments - ;; This needs a more recent version of python-hypothesis - (list #:test-flags '(list "--ignore=xarray/tests/test_strategies.py"))) + (list + #:test-flags + ;; This needs a more recent version of python-hypothesis + '(list "--ignore=xarray/tests/test_strategies.py" + ;; These are known to fail with Pandas 2 + "-k" + (string-append "not test_datetime_conversion_warning" + " and not test_timedelta_conversion_warning" + ;; These expect deprecation warnings that are not + ;; emitted in our case. + " and not test_drop_index_labels" + " and not test_rename_multiindex")))) (native-inputs - (list python-setuptools-scm python-pytest)) + (list python-setuptools python-setuptools-scm python-pytest python-wheel)) (propagated-inputs (list python-numpy python-packaging python-pandas)) (home-page "https://github.com/pydata/xarray") @@ -1223,6 +1920,54 @@ large and growing library of domain-agnostic functions for advanced analytics and visualization with these data structures.") (license license:asl2.0))) +(define-public python-xarray-dataclasses + (package + (name "python-xarray-dataclasses") + (version "1.7.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/astropenguin/xarray-dataclasses/") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "043lc1hadr5y0y16g682viiafy0hfsa7q18lqmndpyvnmcgm893z")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-numpy python-typing-extensions + python-xarray)) + (native-inputs (list python-pytest python-poetry-core)) + (home-page "https://github.com/astropenguin/xarray-dataclasses/") + (synopsis "Data creation made easy by dataclass") + (description "@code{xarray-dataclasses} is a Python package that makes it +easy to create @code{xarray}'s @code{DataArray} and @code{Datase} objects that +are \"typed\" (i.e. fixed dimensions, data type, coordinates, attributes, and +name) using the Python's @code{dataclass}.") + (license license:expat))) + +;; Note that this package will be folded into xarray eventually. See +;; https://github.com/pydata/xarray/issues/8572 for details. +(define-public python-xarray-datatree + (package + (name "python-xarray-datatree") + (version "0.0.14") + (source + (origin + (method url-fetch) + (uri (pypi-uri "xarray-datatree" version)) + (sha256 + (base32 "1x1s25s6dp1f2hck9qw8vl8hgkyy23rcwag2a9vd3w0dbgrrl5i6")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-packaging python-xarray)) + ;; We need setuptools-scm to correctly record the version string. + (native-inputs (list python-pytest python-setuptools-scm python-zarr)) + (home-page "https://github.com/xarray-contrib/datatree") + (synopsis "Hierarchical tree-like data structures for xarray") + (description "Datatree is a prototype implementation of a tree-like +hierarchical data structure for @code{xarray}. Datatree is in the process of +being merged upstream into @code{xarray}.") + (license license:asl2.0))) + (define-public python-xarray-einstats (package (name "python-xarray-einstats") @@ -1247,6 +1992,25 @@ and visualization with these data structures.") functions and around einops with an API and features adapted to xarray.") (license license:asl2.0))) +(define-public python-xarray-schema + (package + (name "python-xarray-schema") + (version "0.0.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "xarray-schema" version)) + (sha256 + (base32 "08194629696z98dkc74i6c9zmy1jicvd2ajb75q0lsf0i427cv4w")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-numpy python-xarray)) + (native-inputs (list python-pytest python-setuptools-scm)) + (home-page "https://github.com/carbonplan/xarray-schema") + (synopsis "Schema validation for Xarray objects") + (description "This package implements schema validation for Xarray +objects.") + (license license:expat))) + (define-public python-pytensor (package (name "python-pytensor") @@ -1308,7 +2072,9 @@ parentdir_prefix = pytensor- (native-inputs (list python-cython python-pytest python-pytest-mock - python-versioneer)) + python-versioneer + python-setuptools + python-wheel)) (propagated-inputs (list python-cons python-etuples python-filelock @@ -1382,6 +2148,36 @@ Python's native complex data types is also supported.") automated with the minimum of fuss and the least effort.") (license license:expat))) +(define-public python-scs + (package + (name "python-scs") + (version "3.2.4") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/bodono/scs-python") + (commit "3.2.4") + (recursive? #true))) + (file-name (git-file-name name version)) + (sha256 + (base32 "06wd8m3ri0gaddl7qq6243g25zjlnh3da915b73jnrfh7sg1nqsj")))) + (build-system pyproject-build-system) + (native-inputs + (list pkg-config + python-pytest + meson-python)) + (inputs + (list openblas)) + (propagated-inputs + (list python-numpy + python-scipy)) + (home-page "https://github.com/bodono/scs-python") + (synopsis "Splitting conic solver") + (description "This package provides a Python interface for the +SCS (Splitting conic solver) library.") + (license license:expat))) + (define-public python-statannot (package (name "python-statannot") @@ -1416,14 +2212,20 @@ annotations on an existing boxplots and barplots generated by seaborn.") (sha256 (base32 "00900bw24rxgcgwgxp9xlx0l5im96r1n5hn0r3mxvbdgc3lyyq48")))) (build-system pyproject-build-system) + ;; Pint is optional, but we do not propagate it due to its size. + (native-inputs + (list python-pint + python-pytest + python-setuptools + python-setuptools-scm + python-wheel)) ;; Astropy is an optional import, but we do not include it as it creates a ;; module cycle: astronomy->python-science->astronomy. - (propagated-inputs (list python-h5py ; optional import - python-matplotlib ; optional import - python-numpy - python-sympy)) - ;; Pint is optional, but we do not propagate it due to its size. - (native-inputs (list python-pint python-pytest)) + (propagated-inputs + (list python-h5py ; optional import + python-matplotlib ; optional import + python-numpy + python-sympy)) (home-page "https://unyt.readthedocs.io") (synopsis "Library for working with data that has physical units") (description @@ -1554,7 +2356,7 @@ of Pandas (define-public python-pingouin (package (name "python-pingouin") - (version "0.5.2") + (version "0.5.4") (source ;; The PyPI tarball does not contain the tests. (origin @@ -1565,11 +2367,15 @@ of Pandas (file-name (git-file-name name version)) (sha256 (base32 - "0czy7cpn6xx9fs6wbz6rq2lpkb1a89bzxj1anf2f9in1m5qyrh83")))) - (build-system python-build-system) + "1j3qkgvyc31604ddl952h4hwza7schg8kwkycmxvpvx7xjj7nn68")))) + (build-system pyproject-build-system) (arguments - `(#:phases - (modify-phases %standard-phases + (list + #:test-flags + ;; This one fails due to minor differences in accuracy + '(list "-k" "not test_logistic_regression") + #:phases + '(modify-phases %standard-phases (add-after 'unpack 'loosen-requirements (lambda _ (substitute* '("requirements.txt" "setup.py") @@ -1587,10 +2393,11 @@ of Pandas (substitute* "pingouin/__init__.py" (("^from outdated[^\n]*") "") (("^warn_if_outdated[^\n]*") "")))) - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "pytest"))))))) + (add-after 'unpack 'sklearn-compatibility + (lambda _ + (substitute* "pingouin/regression.py" + (("kwargs\\[\"penalty\"\\] = \"none\"") + "kwargs[\"penalty\"] = None"))))))) (native-inputs (list python-pytest python-pytest-cov)) (propagated-inputs @@ -1654,10 +2461,63 @@ and more Mathematics (GLM) library to Python.") (license license:zlib))) +(define-public python-dask-expr + (package + (name "python-dask-expr") + (version "1.0.14") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dask/dask-expr") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0c2q8w8wl5d2hycbjp9vavkl5f36kaz390wxlis2d8d43jnqhf0d")))) + (build-system pyproject-build-system) + (arguments + (list + #:tests? #false ;need python-distributed, which needs dask-expr. + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'versioneer + (lambda _ + ;; Our version of versioneer needs setup.cfg. This is adapted + ;; from pyproject.toml. + (with-output-to-file "setup.cfg" + (lambda () + (display "\ +[versioneer] +VCS = git +style = pep440 +versionfile_source = dask_expr/_version.py +versionfile_build = dask_expr/_version.py +tag_prefix = +parentdir_prefix = dask_expr- +"))) + (invoke "versioneer" "install") + (substitute* "setup.py" + (("versioneer.get_version\\(\\)") + (string-append "\"" #$version "\"")))))))) + (propagated-inputs (list python-pandas python-pyarrow)) + (native-inputs + ;; We use python-dask/bootstrap so that python-dask can propagate this + ;; package without creating a mutually recursive dependency. + (list python-dask/bootstrap + python-pytest + python-setuptools + python-versioneer + python-wheel)) + (home-page "https://github.com/dask/dask-expr") + (synopsis "Dask DataFrames with query optimization") + (description "This is a rewrite of Dask DataFrame that includes query +optimization and generally improved organization.") + (license license:bsd-3))) + (define-public python-distributed (package (name "python-distributed") - (version "2023.7.0") + (version "2024.4.2") (source (origin ;; The test files are not included in the archive on pypi @@ -1668,12 +2528,12 @@ Mathematics (GLM) library to Python.") (file-name (git-file-name name version)) (sha256 (base32 - "0b93fpwz7kw31pkzfyihpkw8mzbqshzd6rw5vcwld7n3z2aaaxxb")))) + "0sy9mqa8qlxsagbz8xn304csrlxhxj4b6k84yrjxdcmkp9pkx166")))) (build-system pyproject-build-system) (arguments (list #:test-flags - '(list "-x" "-m" + '(list "-m" (string-append "not slow" " and not flaky" " and not gpu" @@ -1728,6 +2588,8 @@ Mathematics (GLM) library to Python.") "test_locked_comm_drop_in_replacement" "test_locked_comm_intercept_read" "test_locked_comm_intercept_write" + "test_messages_are_ordered_bsend" + "test_messages_are_ordered_raw" "test_mixing_clients_different_scheduler" "test_multiple_listeners" "test_no_dangling_asyncio_tasks" @@ -1736,6 +2598,7 @@ Mathematics (GLM) library to Python.") "test_plugin_multiple_exceptions" "test_ports" "test_preload_import_time" + "test_preload_manager_sequence" "test_queue_in_task" "test_quiet_client_close" "test_rebalance_sync" @@ -1775,9 +2638,12 @@ Mathematics (GLM) library to Python.") "test_variable_in_task" "test_worker_preload_text" "test_worker_uses_same_host_as_nanny" - "test_nanny_timeout") ; access to 127.0.0.1 + "test_nanny_timeout") ; access to 127.0.0.1 " and not ") + ;; This seems to want to use 64GB of memory. + " and not test_computation_object_code_dask_compute" + ;; These fail because it doesn't find dask[distributed] " and not test_quiet_close_process" @@ -1846,6 +2712,10 @@ parentdir_prefix = distributed- (add-before 'check 'pre-check (lambda _ (setenv "DISABLE_IPV6" "1") + ;; Disable job queueing + (setenv "DASK_DISTRIBUTED__SCHEDULER__WORKER_SATURATION" "inf") + ;; Do not use dask-expr + (setenv "DASK_DATAFRAME__QUERY_PLANNING" "False") ;; The integration tests are all problematic to some ;; degree. They either require network access or some ;; other setup. We only run the tests in @@ -1866,6 +2736,7 @@ parentdir_prefix = distributed- python-cloudpickle python-cryptography python-dask + python-dask-expr python-msgpack python-psutil python-pyyaml @@ -1881,7 +2752,8 @@ parentdir_prefix = distributed- python-importlib-metadata python-pytest python-pytest-timeout - python-versioneer)) + python-versioneer + python-wheel)) (home-page "https://distributed.dask.org") (synopsis "Distributed scheduler for Dask") (description "Dask.distributed is a lightweight library for distributed @@ -2038,6 +2910,10 @@ aggregated sum and more.") "test_stack_non_linear_scale" "test_uneven_num_of_lines" + ;; This triggers an unexpected but harmless + ;; warning. + "test_save_method" + ;; Missing optional modules "test_non_linear_smooth" "test_non_linear_smooth_no_ci") @@ -2070,6 +2946,9 @@ aggregated sum and more.") python-pandas python-pytest python-pytest-cov + python-setuptools + python-setuptools-scm + python-wheel tzdata-for-tests)) (home-page "https://github.com/has2k1/plotnine") (synopsis "Grammar of Graphics for Python") @@ -2173,7 +3052,9 @@ to do spectral analysis in Python.") python-pandas python-nose python-pytest - python-xarray)) + python-setuptools + python-xarray + python-wheel)) (home-page "https://github.com/jupyter-widgets/traittypes") (synopsis "Trait types for NumPy, SciPy and friends") (description "The goal of this package is to provide a reference @@ -2200,6 +3081,62 @@ build applications with traitlets in combination with the scipy stack.") specification and test suite in Python.") (license license:expat))) +(define-public python-clarabel + (package + (name "python-clarabel") + (version "0.7.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "clarabel" version)) + (sha256 + (base32 "15k32ynvh45n9q905bxwamh5w5cia9bxzmwz69wbribmyhsv22m3")) + (patches + (search-patches "python-clarabel-blas.patch")))) + (build-system cargo-build-system) + (arguments + (list + #:imported-modules `(,@%cargo-build-system-modules + ,@%pyproject-build-system-modules) + #:modules '((guix build cargo-build-system) + ((guix build pyproject-build-system) #:prefix py:) + (guix build utils)) + #:phases + #~(modify-phases %standard-phases + (add-after 'build 'build-python-module + (assoc-ref py:%standard-phases 'build)) + (add-after 'build-python-module 'install-python-module + (assoc-ref py:%standard-phases 'install))) + #:cargo-inputs + `(("rust-amd" ,rust-amd-0.2) + ("rust-blas" ,rust-blas-0.22) + ("rust-cfg-if" ,rust-cfg-if-1) + ("rust-derive-builder" ,rust-derive-builder-0.11) + ("rust-enum-dispatch" ,rust-enum-dispatch-0.3) ;0.3.8 + ("rust-itertools" ,rust-itertools-0.11) + ("rust-lapack" ,rust-lapack-0.19) + ("rust-lazy-static" ,rust-lazy-static-1) ;1.4 + ("rust-libc" ,rust-libc-0.2) + ("rust-num-derive" ,rust-num-derive-0.2) + ("rust-num-traits" ,rust-num-traits-0.2) + ("rust-pyo3" ,rust-pyo3-0.20) + ("rust-serde" ,rust-serde-1) + ("rust-serde-json" ,rust-serde-json-1) + ("rust-thiserror" ,rust-thiserror-1)) + #:features '(list "python") + #:install-source? #false)) + (inputs + (list maturin)) + (native-inputs + (list python-wrapper)) + (propagated-inputs (list python-numpy python-scipy)) + (home-page "https://github.com/oxfordcontrol/Clarabel.rs") + (synopsis "Interior-point solver for convex conic optimisation problems") + (description "Clarabel.rs is a Rust implementation of an interior point +numerical solver for convex optimization problems using a novel homogeneous +embedding.") + (license license:asl2.0))) + (define-public python-climin (package (name "python-climin") @@ -2221,19 +3158,80 @@ heavily biased to machine learning scenarios. It works on top of @command{numpy} and (partially) @command{gnumpy}.") (license license:bsd-3))) +(define-public python-corner + (package + (name "python-corner") + (version "2.2.2") + (source + (origin + (method git-fetch) ;no tests in PyPi archive + (uri (git-reference + (url "https://github.com/dfm/corner.py") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1i4dk4jxh0saysya2cnsfwlxwpldbdl174i9pwi4qj82av9jr2ii")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + #~(list + ;; XXX: Disable tests which failed with mismatched images, check why. + "-k" (string-append "not test_labels[png]" + " and not test_title_quantiles[png]" + " and not test_title_quantiles_default[png]" + " and not test_title_quantiles_raises[png]" + " and not test_bins[png]" + " and not test_bins_log[png]" + " and not test_titles1[png]" + " and not test_titles2[png]" + " and not test_pandas[png]" + " and not test_tight[png]" + " and not test_extended_overplotting[png]" + " and not test_reverse_overplotting[png]" + " and not test_arviz[png]" + " and not test_range_fig_arg[png]")) + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'pretend-version + ;; XXX: Make sure you're either building from a fully intact git + ;; repository or PyPI tarballs. Most other sources (such as GitHub's + ;; tarballs, a git checkout without the .git folder) don't contain + ;; the necessary metadata and will not work. + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))) + (propagated-inputs + (list python-matplotlib)) + (native-inputs + (list python-arviz python-pytest python-scipy python-setuptools-scm)) + (home-page "http://corner.readthedocs.io/") + (synopsis "Make some beautiful corner plots") + (description + "This Python module uses @code{matplotlib} to visualize multidimensional +samples using a scatterplot matrix. In these visualizations, each one- and +two-dimensional projection of the sample is plotted to reveal covariances. +corner was originally conceived to display the results of Markov Chain Monte +Carlo simulations and the defaults are chosen with this application in mind but +it can be used for displaying many qualitatively different samples.") + (license license:bsd-2))) + (define-public python-paramz (package (name "python-paramz") - (version "0.9.5") + (version "0.9.6") (source (origin - (method url-fetch) - (uri (pypi-uri "paramz" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/sods/paramz") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "16hbh97kj6b1c2gw22rqnr3w3nqkszh9gj8vgx738gq81wf225q9")))) - (build-system python-build-system) + "1ywc2jzj40m6wmq227j3snxvp4434s0m1xk1abg6v6mr87pv2sa9")))) + (build-system pyproject-build-system) (propagated-inputs (list python-decorator python-numpy python-scipy python-six)) + (native-inputs (list python-nose)) (home-page "https://github.com/sods/paramz") (synopsis "The Parameterization Framework") (description @@ -2258,27 +3256,35 @@ for parameterized model creation and handling. Its features include: (define-public python-gpy (package (name "python-gpy") - (version "1.10.0") + (version "1.13.1") (source (origin (method url-fetch) (uri (pypi-uri "GPy" version)) (sha256 (base32 - "1yx65ajrmqp02ykclhlb0n8s3bx5r0xj075swwwigiqaippr7dx2")) - (snippet - #~(begin (use-modules (guix build utils)) - (substitute* "GPy/models/state_space_main.py" - (("collections\\.Iterable") "collections.abc.Iterable")))))) - (build-system python-build-system) + "05d1ry4jpp0srsrmp3qd6s0p2bjc4c0z99450pzdr79vagbfvlk4")))) + (build-system pyproject-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (add-before 'check 'remove-plotting-tests - ;; These fail - (lambda _ - (delete-file "GPy/testing/plotting_tests.py")))))) - (native-inputs (list python-cython python-nose python-climin)) - (propagated-inputs (list python-numpy python-paramz python-scipy - python-six)) + (list + #:phases + '(modify-phases %standard-phases + (add-after 'unpack 'compatibility + (lambda _ + ;; This file uses Python 2 statements + (delete-file "GPy/testing/mpi_test__.py") + (substitute* "setup.py" + (("scipy>=1.3.0,<1.12.0") + "scipy>=1.3.0,<=1.13.0")) + ;; Use numpy.exp because scipy.ext no longer exists + (substitute* "GPy/kern/src/sde_standard_periodic.py" + (("sp\\.exp") "np.exp")) + (substitute* "GPy/kern/src/sde_stationary.py" + (("sp\\.poly1d") "np.poly1d") + (("sp\\.roots") "np.roots"))))))) + (native-inputs + (list python-cython python-matplotlib python-pods python-pytest)) + (propagated-inputs + (list python-numpy python-paramz python-scipy python-six)) (home-page "https://sheffieldml.github.io/GPy/") (synopsis "The Gaussian Process Toolbox") (description @@ -2322,7 +3328,7 @@ science including tools for accessing data sets in Python.") "12i68jj9n1qj9phjnj6f0kmfhlsd3fqjlk9p6d4gs008azw5m8yn")))) (build-system pyproject-build-system) (propagated-inputs (list python-numpy)) - (native-inputs (list pybind11 python-pytest)) + (native-inputs (list pybind11 python-pytest python-setuptools python-wheel)) (home-page "https://github.com/nschloe/pyfma") (synopsis "Fused multiply-add for Python") (description "@code{pyfma} provides an implementation of fused @@ -2366,7 +3372,7 @@ functions, convolutions, artificial neural networks etc.") " and not TestDatasetOverlayArray" " and not TestReader" " and not test_filewriter.py")))) - (native-inputs (list python-pytest)) + (native-inputs (list python-pytest python-flit-core)) (inputs (list gdcm libjpeg-turbo)) (propagated-inputs (list python-numpy python-pillow)) (home-page "https://github.com/pydicom/pydicom") @@ -2412,7 +3418,7 @@ data.") import six "))))))) (build-system pyproject-build-system) - (native-inputs (list python-pandas)) + (native-inputs (list python-pandas python-setuptools python-wheel)) (propagated-inputs (list python-numpy python-scipy python-six python-tables)) (home-page "https://github.com/uchicago-cs/deepdish") @@ -2449,6 +3455,31 @@ interoperability offered by HDF5.") proportional-integral-derivative} controller.") (license license:expat))) +(define-public python-supersmoother + (package + (name "python-supersmoother") + (version "0.4") + (source + (origin + (method git-fetch) ; no package in PyPI + (uri (git-reference + (url "https://github.com/jakevdp/supersmoother") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1lkj8l2mpki6x2pxcwlrplx63lhi8h9v2rzxgjfb0cppsfr8m1wp")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-numpy)) + (native-inputs (list python-scipy)) + (home-page "http://github.com/jakevdp/supersmoother") + (synopsis "Python implementation of Friedman's Supersmoother") + (description + "This package provides an efficient implementation of +@url{https://www.slac.stanford.edu/pubs/slacpubs/3250/slac-pub-3477.pdf, +Friedman's SuperSmoother} based in Python. It makes use of numpy for fast +numerical computation.") + (license license:bsd-2))) + (define-public python-opt-einsum (package (name "python-opt-einsum") @@ -2613,7 +3644,8 @@ NeuroML2 models.") " and not test_pr_level_patient" " and not test_pr_level_series" " and not test_scp_cancelled")))) - (native-inputs (list python-pyfakefs python-pytest)) + (native-inputs (list python-pyfakefs python-pytest python-setuptools + python-wheel)) (propagated-inputs (list python-pydicom python-sqlalchemy)) (home-page "https://github.com/pydicom/pynetdicom") (synopsis "Python implementation of the DICOM networking protocol") @@ -2649,6 +3681,45 @@ visualization and image processing involving N-dimensional raster data) into and from numpy arrays.") (license license:expat))) +(define-public python-pynsee + (package + (name "python-pynsee") + (version "0.1.8") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pynsee" version)) + (sha256 + (base32 "1w084ynwdd9f4wpcnakqc0nxcbj9gr8vppv4rd258i3dp1qq4sw5")))) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; XXX: Tests require network access. + (native-inputs + (list python-setuptools + python-wheel)) + (propagated-inputs + (list python-appdirs + python-openpyxl + python-pandas + python-platformdirs + python-pyarrow + python-requests + python-shapely + python-tqdm + python-unidecode + python-urllib3 + python-xlrd)) + (home-page "https://pynsee.readthedocs.io") + (synopsis + "Tools to Easily Search and Download French Data From INSEE and IGN APIs") + (description + "This package provides tools to easily search and download French data +from INSEE and IGN APIs. This data includes more than 150 000 macroeconomic +series, a dozen datasets of local french data, numerous sources available on +@url{insee.fr}, geographical limits of administrative areas taken from IGN as +well as key metadata and SIRENE database containing data on all French +compagnies.") + (license license:expat))) + (define-public python-libneuroml (package (name "python-libneuroml") @@ -2664,7 +3735,12 @@ and from numpy arrays.") "0mrm4rd6x1sm6hkvhk20mkqp9q53sl3lbvq6hqzyymkw1iqq6bhy")))) (build-system pyproject-build-system) (propagated-inputs (list python-lxml python-six)) - (native-inputs (list python-pytest python-numpy python-tables)) + (native-inputs + (list python-pytest + python-numpy + python-setuptools + python-tables + python-wheel)) (home-page "https://libneuroml.readthedocs.org/en/latest/") (synopsis "Python library for working with NeuroML descriptions of neuronal models") |