diff --git a/environment.yml b/environment.yml index 85bc933..434695e 100644 --- a/environment.yml +++ b/environment.yml @@ -7,15 +7,15 @@ dependencies: # These lines must match that spec exactly. Verify with: # dse-check-env environment.yml - python=3.14.6 - - numpy>=2.4.6,<2.5 # pymc -> pytensor 3.x -> numba<=0.65.1 -> numpy<2.5 + - numpy>=2.4.6,<2.5 # pymc -> pytensor 3.x -> numba -> numpy<2.5; numba 0.66.0 still pins <2.5, so lifting this needs a numba release that supports 2.5 - scipy>=1.18.0 - - pandas>=3.0.3 + - pandas>=3.0.5 - pyarrow>=24.0.0 # pandas 3.x's default `str` dtype is Arrow-backed; floor held at 24 by jaxlib's libabseil pin — see environment-core.yml - - numba>=0.58,<=0.65.1 # every pytensor 3.x caps numba here (verified 3.1.3, 3.2.1, 3.2.2); this is what pymc commits us to - - matplotlib>=3.11.0 + - numba>=0.58,<=0.65.1 # every pytensor 3.x caps numba here (verified 3.1.3, 3.2.1, 3.2.2, 3.2.3); this is what pymc commits us to + - matplotlib>=3.11.1 - scikit-learn>=1.9.0 - statsmodels>=0.14.6 - - pymc>=6.1.0 # pulls pytensor + a C toolchain from conda-forge; each pymc 6.x pins one pytensor 3.x minor (6.1 -> 3.1, 6.2 -> 3.2), which caps numba <=0.65.1 -> numpy <2.5. Floor is the minimum supported, not what solves: 6.2.0/pytensor 3.2.2 is current + - pymc>=6.2.0 # pulls pytensor + a C toolchain from conda-forge; each pymc 6.x admits one pytensor 3.x minor (6.1 -> 3.1, 6.2 -> >=3.2.2,<3.3), which caps numba <=0.65.1 -> numpy <2.5. Floor is the minimum supported, not what solves: 6.2.0/pytensor 3.2.3 is current - nutpie>=0.16.11 - numpyro>=0.21.0 - jax>=0.10.2 # CPU build; GPU acceleration via environment-gpu.yml @@ -23,19 +23,19 @@ dependencies: - arviz-base>=1.2.0 - arviz-stats>=1.2.0 - arviz-plots>=1.2.0 - - preliz>=0.27.0 - - h5py>=3.12.0 - - h5netcdf>=1.3.0 + - preliz>=0.27.1 + - h5py>=3.16.0 + - h5netcdf>=1.8.1 - graphviz>=14.1.2 - - python-graphviz>=0.20 + - python-graphviz>=0.21 # ── research add-ons (compiled / columnar data / system binaries) ───────── - - lightgbm>=4.6.0 + - lightgbm>=4.7.0 - xgboost>=3.3.0 - shap>=0.52.0 - - polars>=1.42.1 - - duckdb>=1.5.4 + - polars>=1.43.1 + - duckdb>=1.5.5 - pyreadstat>=1.3.5 - - xarray>=2026.4.0 + - xarray>=2026.7.0 - zarr - networkx - pandoc @@ -58,5 +58,5 @@ dependencies: - hatch - build - pytest>=9.1.1 - - ruff>=0.15.20 - - setuptools>=82.0.1 + - ruff>=0.16.1 + - setuptools>=83.0.0 diff --git a/src/python/pyproject.toml b/src/python/pyproject.toml index eac4f57..0941972 100644 --- a/src/python/pyproject.toml +++ b/src/python/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["hatchling>=1.30.1"] +requires = ["hatchling>=1.31.0"] build-backend = "hatchling.build" [project] @@ -14,13 +14,13 @@ dependencies = [ "arviz>=1.2.0", "azure-identity", "azure-storage-blob", - "matplotlib>=3.11.0", - "numpy>=2.4.6,<2.5", # numba 0.65.1 requires numpy <2.5; lift cap when numba supports 2.5 - "pandas>=3.0.3", - "preliz>=0.27.0", + "matplotlib>=3.11.1", + "numpy>=2.4.6,<2.5", # numba requires numpy <2.5 (still true of 0.66.0); lift cap when numba supports 2.5 + "pandas>=3.0.5", + "preliz>=0.27.1", "psutil>=7.2.2", "pyarrow>=24.0.0", # pandas 3.x's default `str` dtype is Arrow-backed; matches the conda core floor - "pyyaml>=6.0", # dse_research_utils.environment.check (dse-check-env console script) + "pyyaml>=6.0.3", # dse_research_utils.environment.check (dse-check-env console script) "rich>=15.0.0", "scikit-learn>=1.9.0", "scipy>=1.18.0", @@ -33,7 +33,7 @@ dependencies = [ # and raise a clear error when the extra is absent. viz = ["seaborn>=0.13"] # dse_research_utils.plot.grids (histogram grids) graphs = ["graphviz", "networkx"] # dse_research_utils.plot.graphs (needs system Graphviz) -notebook = ["jupyter>=1.1.0", "jupytext>=1.19.4"] # notebook/Jupyter stack (ipython drives plot.io.display_image) +notebook = ["jupyter>=1.1.1", "jupytext>=1.19.5"] # notebook/Jupyter stack (ipython drives plot.io.display_image) dependence = ["dcor"] # dse_research_utils.ml.feature_dependence.distance_corr_matrix # Shared pure-Python tail for consuming projects (the pip layer of the hybrid env # model); the compiled scientific core lives in conda-forge (data/environment-core.yml). diff --git a/src/python/src/dse_research_utils/__init__.py b/src/python/src/dse_research_utils/__init__.py index c1f390e..07b7d39 100644 --- a/src/python/src/dse_research_utils/__init__.py +++ b/src/python/src/dse_research_utils/__init__.py @@ -1,4 +1,4 @@ # Copyright (c) 2026 Down Syndrome Education International and contributors # SPDX-License-Identifier: AGPL-3.0-or-later -__version__ = "0.8.0" +__version__ = "0.9.0" diff --git a/src/python/src/dse_research_utils/data/environment-core.yml b/src/python/src/dse_research_utils/data/environment-core.yml index ae64f40..7675049 100644 --- a/src/python/src/dse_research_utils/data/environment-core.yml +++ b/src/python/src/dse_research_utils/data/environment-core.yml @@ -20,9 +20,14 @@ channels: dependencies: - python=3.14.6 # --- core numerics (compiled) --- - - numpy>=2.4.6,<2.5 # pymc -> pytensor 3.x -> numba<=0.65.1 -> numpy<2.5 + # numpy 2.5 is released but unreachable: pymc -> pytensor 3.x -> numba, and + # every numba that pytensor accepts pins numpy <2.5. Note the cap does not + # move when the numba cap below does — numba 0.66.0 still pins numpy <2.5 — + # so lifting this needs a numba release that supports 2.5, not merely a + # pytensor release that accepts a newer numba. + - numpy>=2.4.6,<2.5 - scipy>=1.18.0 - - pandas>=3.0.3 + - pandas>=3.0.5 # pandas 3.x's default `str` dtype is Arrow-backed, so PyArrow underpins every # string column. Declared explicitly because pandas only *constrains* pyarrow # (>=13.0.0) rather than depending on it — without this line its presence rests @@ -36,12 +41,19 @@ dependencies: # 0.10.2) still pins libabseil <20260108 — the two do not co-solve. Raise this # once jaxlib is rebuilt against the newer abseil. - pyarrow>=24.0.0 - - numba>=0.58,<=0.65.1 # every pytensor 3.x caps numba here (verified 3.1.3, 3.2.1, 3.2.2); this is what pymc commits us to - - matplotlib>=3.11.0 + # Cap holds even though numba 0.66.0 is released: every pytensor 3.x caps + # numba at 0.65.1 (verified 3.1.3, 3.2.1, 3.2.2, 3.2.3), and that is what pymc + # commits us to. + - numba>=0.58,<=0.65.1 + - matplotlib>=3.11.1 - scikit-learn>=1.9.0 - statsmodels>=0.14.6 # --- Bayesian modelling stack --- - - pymc>=6.1.0 # pulls pytensor + a C toolchain from conda-forge; each pymc 6.x pins one pytensor 3.x minor (6.1 -> 3.1, 6.2 -> 3.2), which caps numba <=0.65.1 -> numpy <2.5. Floor is the minimum supported, not what solves: 6.2.0/pytensor 3.2.2 is current + # pymc pulls pytensor + a C toolchain from conda-forge. Each pymc 6.x admits + # one pytensor 3.x minor (6.1 -> 3.1, 6.2 -> >=3.2.2,<3.3), which caps numba + # <=0.65.1 -> numpy <2.5. Floor is the minimum supported, not what solves: + # 6.2.0/pytensor 3.2.3 is current. + - pymc>=6.2.0 - nutpie>=0.16.11 - numpyro>=0.21.0 - jax>=0.10.2 # CPU build; GPU acceleration via environment-gpu.yml @@ -49,10 +61,10 @@ dependencies: - arviz-base>=1.2.0 - arviz-stats>=1.2.0 - arviz-plots>=1.2.0 - - preliz>=0.27.0 + - preliz>=0.27.1 # --- serialization / storage (system libraries) --- - - h5py>=3.12.0 - - h5netcdf>=1.3.0 + - h5py>=3.16.0 + - h5netcdf>=1.8.1 # --- graph rendering (system Graphviz) --- - graphviz>=14.1.2 - - python-graphviz>=0.20 + - python-graphviz>=0.21