From 67030c9f0d70e79e9b7f2b4146424080444cf26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6lzer?= Date: Tue, 9 Dec 2025 17:10:43 +0100 Subject: [PATCH] Create Ensemble Datasets --- .gitignore | 3 + pixi.lock | 1019 ++++++++++++++++++----------------- pyproject.toml | 12 +- scripts/01darts.sh | 18 +- scripts/02alphaearth.sh | 22 +- src/entropice/alphaearth.py | 30 +- src/entropice/codecs.py | 21 + src/entropice/darts.py | 61 ++- src/entropice/dataset.py | 271 ++++++---- src/entropice/paths.py | 8 +- 10 files changed, 839 insertions(+), 626 deletions(-) diff --git a/.gitignore b/.gitignore index 6d5c3d5..d10035f 100755 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ playground.ipynb # pixi environments .pixi *.egg-info + +# Disable all notebook for now +notebooks/*.ipynb \ No newline at end of file diff --git a/pixi.lock b/pixi.lock index 591f7f6..728d021 100644 --- a/pixi.lock +++ b/pixi.lock @@ -11,12 +11,12 @@ environments: channel-priority: disabled packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.2-py313h321d83c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py313h07c4f96_2.conda @@ -47,13 +47,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-h41a2e66_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hf2c8021_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313h09d1b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.22.0-h4cfbee9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.22.0-hc31b594_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 @@ -107,7 +107,7 @@ environments: - conda: https://conda.anaconda.org/rapidsai/linux-64/custreamz-25.10.00-cuda12_py313_251008_f4e35ca0.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/cuvs-25.10.00-cuda12_py313_251008_f245c152.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/cuxfilter-25.10.00-cuda12_py313_251008_aa53656f.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py313h07c4f96_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.9.1-pyhcf101f3_0.conda @@ -120,11 +120,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/rapidsai/noarch/distributed-ucxx-0.46.00-py_251008_64355220_h9c9281c.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dlpack-0.8-h59595ed_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fastrlock-0.8.3-py313h5d5ffb9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.60.1-py313h3dea7bd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.0-py313h3dea7bd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda @@ -139,12 +140,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpix-geo-0.0.8-py313h843e2db_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/holoviews-1.22.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.11.11-py313h2d3cd63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.11.11-py313hf092b87_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda @@ -170,7 +172,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-h1aa0949_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda @@ -181,12 +183,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-21.0.0-hb826db4_12_cuda.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-21.0.0-h9d9f3f8_12_cuda.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h6395336_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-1_h5875eb1_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h09219d5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hd53d788_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h02bd7ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-2_h5875eb1_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-1_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-2_hfef963f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.9.1.4-h676940d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-dev-12.9.1.4-h676940d_1.conda @@ -219,11 +221,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.0-habacd5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.0-h6049c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_14.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-hdb79228_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.73.1-h3288cfb_1.conda @@ -234,9 +236,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-hf08fa70_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/libkvikio-25.10.00-cuda12_9_251008_fb6220c4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-1_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-2_h5e43f62_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-ha7672b3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-ha7672b3_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda @@ -252,7 +254,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hb9b0907_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-21.0.0-h31208bf_12_cuda.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.51-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/libraft-25.10.00-cuda12_251008_521611f8.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/libraft-headers-25.10.00-cuda12_251008_521611f8.conda @@ -263,17 +265,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h46dd2a8_20.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h454ac66_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.8.0-cuda129_mkl_hf53477d_302.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.9.1-cuda129_mkl_hce6efb5_300.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/libucxx-0.46.00-cuda12_251008_64355220.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.1-hfe17d71_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.2-hfe17d71_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda @@ -316,7 +318,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-24.9.0-heeeca48_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py313hd8e3f9f_2.conda @@ -334,10 +336,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py313h08cd8bf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/panel-1.8.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/param-2.3.0-pyhc455866_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/param-2.3.1-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py313h50355cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py313h80991f8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.32.3-default_h3512890_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-default-1.32.3-py39hf521cc8_0.conda @@ -351,16 +353,16 @@ environments: - conda: https://conda.anaconda.org/rapidsai/noarch/py-xgboost-3.0.5-rapidsai_pyh4bd9c9a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-21.0.0-py313h78bf25f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-21.0.0-py313hc6b0d6e_1_cuda.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyct-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/pylibcudf-25.10.00-cuda12_py313_251008_f4e35ca0.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/pylibcugraph-25.10.01-cuda12_py313_251013_741f9105.conda - conda: https://conda.anaconda.org/rapidsai/linux-64/pylibraft-25.10.00-cuda12_py313_251008_521611f8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.1-py313hae45665_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.12.1-py313hae45665_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py313h77f6078_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda @@ -372,8 +374,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.8.0-cuda129_mkl_py313_h7947483_302.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.8.0-cuda129_mkl_h43a4b0b_302.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.9.1-cuda129_mkl_py313_ha91d441_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.9.1-cuda129_mkl_h0d04637_300.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyviz_comms-3.0.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py313h29aa505_2.conda @@ -408,10 +410,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.51.0-heff268d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.51.1-hbc0de68_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/streamz-0.6.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda @@ -427,7 +428,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/treelite-4.4.1-py313ha8a5e75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.4.0-cuda129py313h246eb7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.5.1-cuda129py313h246eb7c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda @@ -446,19 +447,19 @@ environments: - conda: https://conda.anaconda.org/rapidsai/noarch/xgboost-3.0.5-rapidsai_pyh13f938f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py313h3dea7bd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.1-hde8ca8f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313h54dd161_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-h3691f8a_4.conda - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/f3/0b6ced594e51cc95d8c1fc1640d3623770d01e4969d29c0bd09945fafefa/altair-5.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/a7/a597ff7dd1e1603abd94991ce242f93979d5f10b0d45ed23976dfb22bf64/altair_tiles-0.4.0-py3-none-any.whl @@ -466,19 +467,19 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/03/c17464bbf682ea87e7e3de2ddc63395e359a78ae9c01f55fc78759ecbd79/anywidget-0.9.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/17/8a7503c9dc3f8cc2868c632291e5d224822b05ae62f1279c529c459368d2/array_api_extra-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/05/2709750ddb088eb2fc5053ba214b4f54334d15d4cb28217e2956b5507bac/array_api_extra-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fb/1f/2903ef412cb82ba1f2211692f7339fd7c5aeb2764f2a97f0b6a9a18bbf52/arro3_compute-0.6.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/4a/72dc383d1a0d14f1d453e334e3461e229762edb1bf3f75b3ab977e9386ed/arro3_core-0.6.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1b/df/2a5a1306dc1699b51b02c1c38c55f3564a8c4f84087c23c61e7e7ae37dfa/arro3_io-0.6.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0e/37/0fd95850cc52939498b861501bef8d7dc496c2ec6217c1b85a3d2c34940a/astropy-7.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d3/9d/51b958a9f8474f04462923550641ccbef9a50566a63c87d691bec443a7d0/astropy_iers_data-0.2025.11.10.0.38.31-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c3/1c/f06ad85180e7dd9855aa5ede901bfc2be858d7bee17d4e978a14c0ecec14/astropy-7.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/cf/b80563290409eb01febdf0715b7f8be03172c153a7a3859807936e2f7bbd/astropy_iers_data-0.2025.11.24.0.39.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/3c/b90d5afc2e47c4a45f4bba00f9c3193b0417fad5ad3bb07869f9d12832aa/azure_core-1.36.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/9e/1c90a122ea6180e8c72eb7294adc92531b0e08eb3d2324c2ba70d37f4802/azure_storage_blob-12.27.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/9a/663251dfb35aaddcbdbef78802ea5a9d3fad9d5fadde8774eacd9e1bfbb7/boost_histogram-1.6.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/22/05555a9752357e24caa1cd92324d1a7fdde6386aab162fcc451f8f8eedc2/bottleneck-1.6.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/73/03/6b5370fc626e6f480c4a0b4cb25b3459d390745010618b21b4b573423a53/bqplot-0.12.45-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/0d/669d4bbeb36b87ba504409d85c68ec297e6f434ea6525424f8aa5f14abac/cartopy-0.25.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl @@ -489,10 +490,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/4b/cf05ed9d934cc30e5ae22f97c8272face420a476090e736615d9a6b53de0/crc32c-2.8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fa/25/0be9314cd72fe2ee2ef89ceb1f438bc156428a12177d684040456eee4a56/cupy_xarray-0.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/b2/fabcd6020b63b9d9f7a79cfc61b9c03c4e08ccb54f9cf9db9791be5669ef/cyclopts-4.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/e8/77a231ae531cf38765b75ddf27dae28bb5f70b41d8bb4f15ce1650e93f57/cyclopts-4.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl @@ -509,7 +509,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/ee/cd1f7e29979d0d71c8fabf5090a759b8d338bddf96aab286e39c7a7b2c0a/flox-0.10.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/4f/16e34c39f1840203216a79084d92aed6722ba00d34815807bc3e04d58c9f/geemap-0.36.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/2f/82b12527cc80391889c3236aa8b26239cb043e98e82bfe0c0a089b60e135/geoarrow_rust_core-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a9/fb/c1e92716ee5aa00d48b650f0cb43220a1bf4088c8d572dfc21d400b16723/geoarrow_rust_core-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4f/6b/13166c909ad2f2d76b929a4227c952630ebaf0d729f6317eb09cbceccbab/geocoder-1.38.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/c6/a9341239e2e2953537b9e90a46ebc59f2e122247a3fe22373cc37520fc44/geocube-0.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/b3/802576f2ea5dcb48501bb162e4c7b7b3ca5654a42b2c968ef98a797a4c79/geographiclib-2.1-py3-none-any.whl @@ -530,7 +530,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d6/49/1f35189c1ca136b2f041b72402f2eb718bdcb435d9e88729fe6f6909c45d/h5netcdf-1.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/22/790c83ec40f63f8b508f0e0b039c3c70bdb27e56565257e57a796f4a1cca/icechunk-1.1.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2b/74/c335456c500cda9e67ab88064b89b1e92a5a11b6203dbb309e00ddc58d50/icechunk-1.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4c/0f/b66d63d4a5426c09005d3713b056e634e00e69788fdc88d1ffe40e5b7654/ipycytoscape-1.3.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/d3/642a6dc3db8ea558a9b5fbc83815b197861868dc98f98a789b85c7660670/ipyevents-2.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/00/60/249e3444fcd9c833704741769981cd02fe2c7ce94126b1394e7a3b26e543/ipyfilechooser-0.6.0-py3-none-any.whl @@ -553,13 +553,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/1a/78b19893197ed7525edfa7f124a461626541e82aec694a468ba97755c24e/netcdf4-1.7.3-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/93/f7/616963e354a30290b281af99ad9ead977bd60281ccb82daf32b75cc1b7d9/numbagg-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/46/320d960aff884bc63abaaf846ffa3de4803e83e8070b6f84c5688464839c/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/e6/d359fdd37498e74d26a167f7a51e54542e642ea47181eb4e643a69a066c3/numcodecs-0.16.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b0/e0/760e73c111193db5ca37712a148e4807d1b0c60302ab31e4ada6528ca34d/numpy_groupies-0.11.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/4e/44dbb46b3d1b0ec61afda8e84837870f2f9ace33c564317d59b70bc19d3e/nvidia_nccl_cu12-2.28.9-py3-none-manylinux_2_18_x86_64.whl - pypi: https://files.pythonhosted.org/packages/53/20/08c6dc0f20c1394e2324b9344838e4e7af770cdcb52c30757a475f50daeb/obstore-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/e2/311fb383d9534eef7bfbe858fad931b6e3dbe85843c50592f50063c3bc83/odc_geo-0.4.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/48/d45d414b8228325051b0a09f68322ef26717eb9b6517579ae395adf2fbfc/odc_loader-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/21/05c243c9b563519ae5b7442a73424ad0537c7d312cf8969bdf9d0fa31c00/odc_stac-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/0e/3f555b37a4e9da2aa37655b71e83792401958dc4078e77ffd4fa2616934f/odc_stac-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl @@ -575,7 +575,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ab/4c/b888e6cf58bd9db9c93f40d1c6be8283ff49d88919231afe93a6bcf61626/pydeck-0.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/e0/050018d855d26d3c0b4a7d1b2ed692be758ce276d8289e2a2b44ba1014a5/pyerfa-2.0.1.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/92/a8ad817864a560b96ac1c817f9c56bb7eacc1a7d522e2d39afe9e9c77d7b/pyshp-3.0.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/06/cad54e8ce758bd836ee5411691cbd49efeb9cc611b374670fce299519334/pyshp-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/01/eb465e19137b36ba683417e982907aa9c7df1fb0b968e1424e5d678ba0dc/pystac-1.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/d2/5f6367b14c9f250d1a6725d18bd1e9584f5ab1587e292f3a847e59189598/pystac_client-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/ae/baf3a8057d8129896a7e02619df43ea0d918fc5b2bb66eb6e2470595fbac/python_box-7.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -586,10 +586,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/d6/e5/4f4fc949e7eb8415a57091767969e1d314dcf06b74b85bbbf29991395af4/rioxarray-0.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/e1/5ef25f52973aa12a19cf4e1375d00932d7fb354ffd310487ba7d44225c1a/s3transfer-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/bb/bbae36d06c0fd670e8373da67096cd57058b57c9bad7d92969b5e3b730af/scooby-0.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/4c/a023ef569bb20969ede7f33eba40eecb9edd7dc81a7c93d4c55a103625f7/smart_geocubes-0.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/6c/1d4db72c5dbbb9ea2fbc323a40986917cca84ca098f6fcf80624370979e7/smart_geocubes-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/ec/8bdccea3ff7d557601183581340c3768b7bb7b1e32c8991f1130f0c1e2c4/spectate-1.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/30/09/cd7134f1ed5074a7d456640e7ba9a8c8e68a831837b4e7bfd9f29e5700a4/st_theme-1.2.3-py3-none-any.whl @@ -598,10 +598,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/39/60/868371b6482ccd9ef423c6f62650066cf8271fdb2ee84f192695ad6b7a96/streamlit-1.51.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/35/d3cdab8cff94971714f866181abb1aa84ad976f6e7b6218a0499197465e4/streamlit_folium-0.25.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/b3/95ab646b0c908823d71e49ab8b5949ec9f33346cee3897d1af6be28a8d91/textual-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/67/f2dc967db68b984dd71fc0092dc906ddf5d09eea8c22830e02267ce18e19/textual-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/c0/fdf9d3ee103ce66a55f0532835ad5e154226c5222423c6636ba049dc42fc/traittypes-0.2.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/af/413f6b172f9d4c4943b980a9fd96bb4d915680ce8f79c07de6f697b45c8b/ultraplot-1.65.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/20/92e3083b0e854943015bc8a7866e284ead9efadf9bf6809e6fce3b7ded61/ultraplot-1.66.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/9f/ca52771fe972e0dcc5167fedb609940e01516066938ff2ee28b273ae4f29/vega_datasets-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/d5/81d1403788f072e7d0e2b2fe539a0ae4410f27886ff52df094e5348c99ea/vegafusion-2.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -613,25 +613,25 @@ environments: - pypi: git+https://github.com/davbyr/xAnimate#750e03e480db309407e09f4ffe5f49522a4c4f9b - pypi: git+https://github.com/relativityhd/xarray-spatial#3a3120981dc910cbfc824bd03d1c1f8637efaf2d - pypi: https://files.pythonhosted.org/packages/14/38/d1a8b0c8b7749fde76daa12ec3e63aa052cf37cacc2e9715377ce0197a99/xarray_histogram-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/ad/8f9ff43ff49ef02c7b8202a42c32a1fe8de1276bba0e6f55609e19ff7585/xdggs-0.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/b0/e3efafd9c97ed931f6453bd71aa8feaffc9217e6121af65fda06cf32f608/xgboost-3.1.1-py3-none-manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/relativityhd/xdggs?branch=feature%2Fmake-plotting-useful#d85688e638350804dac37d05725709a9c909e5be + - pypi: https://files.pythonhosted.org/packages/5e/ab/c60fcc137fa685533bb31e721de3ecc88959d393830d59d0204c5cbd2c85/xgboost-3.1.2-py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/05/b9/b6a9cf72aef69c3e6db869dcc130e19452a658366dac9377f9cd32a76b80/xproj-0.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/9e/bb060b9c922e55cd069453401525e1e7b62edf59352c334f1035a906f602/xpystac-0.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/78/55c7ed1be12286c1245fbc0a7c01fe6ebbae4f67276e0d1f7b57ef2ea22e/xvec-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/b4/b3161f856c704938d69c10680abaaf4a24783fa58a9f95590f2a0b63dd09/xvec-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda - build_number: 6 - sha256: 2425bafa327e15e4ff5faa17671ecdae658284ff52ebbd2ad24d1c51622d2300 - md5: 197811678264cb9da0d2ea0726a70661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: c0cddb66070dd6355311f7667ce2acccf70d1013edaa6e97f22859502fefdb22 + md5: 887b70e1d607fba7957aa02f9ee0d939 depends: - llvm-openmp >=9.0.1 license: BSD-3-Clause license_family: BSD purls: [] - size: 8298 - timestamp: 1762822449517 + size: 8244 + timestamp: 1764092331208 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 md5: aaa2a381ccc56eac91d63b6c1240312f @@ -654,20 +654,20 @@ packages: - pytest>=4.6 ; extra == 'test' - pytest-cov ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl name: aiobotocore - version: 2.25.2 - sha256: 0cec45c6ba7627dd5e5460337291c86ac38c3b512ec4054ce76407d0f7f2a48f + version: 2.26.0 + sha256: a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec requires_dist: - aiohttp>=3.9.2,<4.0.0 - aioitertools>=0.5.1,<1.0.0 - - botocore>=1.40.46,<1.40.71 + - botocore>=1.41.0,<1.41.6 - python-dateutil>=2.1,<3.0.0 - jmespath>=0.7.1,<2.0.0 - multidict>=6.0.0,<7.0.0 - wrapt>=1.10.10,<2.0.0 - - awscli>=1.42.46,<1.42.71 ; extra == 'awscli' - - boto3>=1.40.46,<1.40.71 ; extra == 'boto3' + - awscli>=1.43.0,<1.43.6 ; extra == 'awscli' + - boto3>=1.41.0,<1.41.6 ; extra == 'boto3' - httpx>=0.25.1,<0.29 ; extra == 'httpx' requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda @@ -799,25 +799,24 @@ packages: - shapely>=2.0 - click>=8.1.6 ; extra == 'cli' requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - sha256: 7378b5b9d81662d73a906fabfc2fb81daddffe8dc0680ed9cda7a9562af894b0 - md5: 814472b61da9792fae28156cb9ee54f5 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.0-pyhcf101f3_0.conda + sha256: 830fc81970cd9d19869909b9b16d241f4d557e4f201a1030aa6ed87c6aa8b930 + md5: 9958d4a1ee7e9c768fe8f4fb51bd07ea depends: - exceptiongroup >=1.0.2 - idna >=2.8 - python >=3.10 - - sniffio >=1.1 - typing_extensions >=4.5 - python constrains: - - trio >=0.31.0 + - trio >=0.32.0 - uvloop >=0.21 license: MIT license_family: MIT purls: - pkg:pypi/anyio?source=hash-mapping - size: 138159 - timestamp: 1758634638734 + size: 144702 + timestamp: 1764375386926 - pypi: https://files.pythonhosted.org/packages/5b/03/c17464bbf682ea87e7e3de2ddc63395e359a78ae9c01f55fc78759ecbd79/anywidget-0.9.21-py3-none-any.whl name: anywidget version: 0.9.21 @@ -900,10 +899,10 @@ packages: - sparse>=0.15.1 ; extra == 'dev' - ndonnx ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8c/17/8a7503c9dc3f8cc2868c632291e5d224822b05ae62f1279c529c459368d2/array_api_extra-0.9.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/1d/05/2709750ddb088eb2fc5053ba214b4f54334d15d4cb28217e2956b5507bac/array_api_extra-0.9.1-py3-none-any.whl name: array-api-extra - version: 0.9.0 - sha256: 36b34e29380b678007f151511be950cb2ea199606fe4a7ad466efc5044ea9e44 + version: 0.9.1 + sha256: 78b3e6605d1cdc9a66bb49e340e1bb620f045f1809a4e146d74500c3cb813b74 requires_dist: - array-api-compat>=1.12.0,<2 requires_python: '>=3.10' @@ -942,41 +941,40 @@ packages: - pkg:pypi/arrow?source=hash-mapping size: 113854 timestamp: 1760831179410 -- pypi: https://files.pythonhosted.org/packages/0e/37/0fd95850cc52939498b861501bef8d7dc496c2ec6217c1b85a3d2c34940a/astropy-7.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c3/1c/f06ad85180e7dd9855aa5ede901bfc2be858d7bee17d4e978a14c0ecec14/astropy-7.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: astropy - version: 7.1.1 - sha256: fed17a4895edf118e1348560de9deb0596596a41f33314c0d05edce02eb3d1e8 + version: 7.2.0 + sha256: 2f39ce2c80211fbceb005d377a5478cd0d66c42aa1498d252f2239fe5a025c24 requires_dist: - - numpy>=1.23.2 + - numpy>=1.24 - pyerfa>=2.0.1.1 - - astropy-iers-data>=0.2025.9.29.0.35.48 + - astropy-iers-data>=0.2025.10.27.0.39.10 - pyyaml>=6.0.0 - packaging>=22.0.0 - scipy>=1.9.2 ; extra == 'recommended' - - matplotlib>=3.6.0 ; extra == 'recommended' + - matplotlib>=3.8.0 ; extra == 'recommended' + - narwhals>=1.42.0 ; extra == 'recommended' - ipython>=8.0.0 ; extra == 'ipython' - astropy[ipython] ; extra == 'jupyter' - ipywidgets>=7.7.3 ; extra == 'jupyter' - ipykernel>=6.16.0 ; extra == 'jupyter' - ipydatagrid>=1.1.13 ; extra == 'jupyter' - jupyter-core>=4.11.2 ; extra == 'jupyter' - - pandas>=1.5.0 ; extra == 'jupyter' + - pandas>=2.0.0 ; extra == 'jupyter' - astropy[recommended] ; extra == 'all' - astropy[ipython] ; extra == 'all' - astropy[jupyter] ; extra == 'all' - certifi>=2022.6.15.1 ; extra == 'all' - - dask[array]>=2022.5.1 ; extra == 'all' - - h5py>=3.8.0 ; extra == 'all' - - pyarrow>=10.0.1 ; extra == 'all' + - dask[dataframe]>=2024.8.0 ; extra == 'all' + - h5py>=3.9.0 ; extra == 'all' + - pyarrow>=14.0.2 ; extra == 'all' - beautifulsoup4>=4.9.3 ; extra == 'all' - html5lib>=1.1 ; extra == 'all' - bleach>=3.2.1 ; extra == 'all' - - pandas>=2.0 ; extra == 'all' - - sortedcontainers>=1.5.7 ; extra == 'all' + - sortedcontainers>=2.1.0 ; extra == 'all' - pytz>=2016.10 ; extra == 'all' - - jplephem>=2.6 ; extra == 'all' + - jplephem>=2.17.0 ; extra == 'all' - mpmath>=1.2.1 ; extra == 'all' - - asdf>=2.8.3 ; extra == 'all' - asdf-astropy>=0.3 ; extra == 'all' - bottleneck>=1.3.3 ; extra == 'all' - fsspec[http]>=2023.4.0 ; extra == 'all' @@ -992,18 +990,19 @@ packages: - threadpoolctl>=3.0.0 ; extra == 'test' - astropy[all] ; extra == 'test-all' - astropy[test] ; extra == 'test-all' - - objgraph>=1.6.0 ; extra == 'test-all' - - skyfield>=1.20 ; extra == 'test-all' + - objgraph>=3.1.2 ; extra == 'test-all' + - skyfield>=1.42.0 ; extra == 'test-all' - sgp4>=2.3 ; extra == 'test-all' - array-api-strict>=1.0 ; extra == 'test-all' - array-api-strict<2.4 ; python_full_version < '3.12' and extra == 'test-all' - - pandas-stubs>=2.0 ; extra == 'typing' + - pandas-stubs>=2.0.0 ; extra == 'typing' + - narwhals>=1.42.0 ; extra == 'typing' - astropy[recommended] ; extra == 'docs' - - sphinx ; extra == 'docs' + - sphinx>=8.2.0 ; extra == 'docs' - sphinx-astropy[confv2]>=1.9.1 ; extra == 'docs' - pytest>=8.0.0 ; extra == 'docs' - sphinx-changelog>=1.2.0 ; extra == 'docs' - - sphinx-design ; extra == 'docs' + - sphinx-design>=0.6.1 ; extra == 'docs' - jinja2>=3.1.3 ; extra == 'docs' - sphinxcontrib-globalsubs>=0.1.1 ; extra == 'docs' - matplotlib>=3.9.1 ; extra == 'docs' @@ -1011,14 +1010,14 @@ packages: - astropy[test] ; extra == 'dev' - astropy[docs] ; extra == 'dev' - astropy[typing] ; extra == 'dev' - - tox ; extra == 'dev-all' + - tox>=4.22.0 ; extra == 'dev-all' - astropy[dev] ; extra == 'dev-all' - astropy[test-all] ; extra == 'dev-all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/d3/9d/51b958a9f8474f04462923550641ccbef9a50566a63c87d691bec443a7d0/astropy_iers_data-0.2025.11.10.0.38.31-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/6a/cf/b80563290409eb01febdf0715b7f8be03172c153a7a3859807936e2f7bbd/astropy_iers_data-0.2025.11.24.0.39.11-py3-none-any.whl name: astropy-iers-data - version: 0.2025.11.10.0.38.31 - sha256: 620155a3f04d7c96e7f4aaa498dc4571e15449f23963574106d29d8959d4c66f + version: 0.2025.11.24.0.39.11 + sha256: 219a9fa61ba454e7413b5e3165ecfa9affed8433549df2ca1bb11cb3f590cc2f requires_dist: - pytest ; extra == 'docs' - hypothesis ; extra == 'test' @@ -1430,26 +1429,26 @@ packages: requires_dist: - numpy requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl name: boto3 - version: 1.40.70 - sha256: e8c2f4f4cb36297270f1023ebe5b100333e0e88ab6457a9687d80143d2e15bf9 + version: 1.41.5 + sha256: bb278111bfb4c33dca8342bda49c9db7685e43debbfa00cc2a5eb854dd54b745 requires_dist: - - botocore>=1.40.70,<1.41.0 + - botocore>=1.41.5,<1.42.0 - jmespath>=0.7.1,<2.0.0 - - s3transfer>=0.14.0,<0.15.0 + - s3transfer>=0.15.0,<0.16.0 - botocore[crt]>=1.21.0,<2.0a0 ; extra == 'crt' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl name: botocore - version: 1.40.70 - sha256: 4a394ad25f5d9f1ef0bed610365744523eeb5c22de6862ab25d8c93f9f6d295c + version: 1.41.5 + sha256: 3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a requires_dist: - jmespath>=0.7.1,<2.0.0 - python-dateutil>=2.1,<3.0.0 - urllib3>=1.25.4,<1.27 ; python_full_version < '3.10' - urllib3>=1.25.4,!=2.2.0,<3 ; python_full_version >= '3.10' - - awscrt==0.27.6 ; extra == 'crt' + - awscrt==0.29.0 ; extra == 'crt' requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/bd/22/05555a9752357e24caa1cd92324d1a7fdde6386aab162fcc451f8f8eedc2/bottleneck-1.6.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: bottleneck @@ -1484,36 +1483,36 @@ packages: - pkg:pypi/branca?source=hash-mapping size: 30176 timestamp: 1759755695447 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-h41a2e66_0.conda - sha256: 33239a07f7685917cac25646dd33798ee93e61f83504a0c938d86c507e05d7c9 - md5: 4ddfd44e473c676cb8e80548ba4aa704 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 depends: - __glibc >=2.17,<3.0.a0 - - brotli-bin 1.2.0 hf2c8021_0 - - libbrotlidec 1.2.0 hd53d788_0 - - libbrotlienc 1.2.0 h02bd7ab_0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 19964 - timestamp: 1761592234411 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hf2c8021_0.conda - sha256: b4aa87fa7658c79e9334c607ad399a964ff75ec8241b9b744b8dc8fc84b55dd0 - md5: 5304333319a6124a2737d9f128cbc4ed + size: 20103 + timestamp: 1764017231353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 depends: - __glibc >=2.17,<3.0.a0 - - libbrotlidec 1.2.0 hd53d788_0 - - libbrotlienc 1.2.0 h02bd7ab_0 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 20993 - timestamp: 1761592224816 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313h09d1b84_0.conda - sha256: 93eeadb5ef4ae211edb01f4a4d837e4b5ceba8ddaefdd68a0c982503c8cc86d1 - md5: dfd94363b679c74937b3926731ee861a + size: 21021 + timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda + sha256: dadec2879492adede0a9af0191203f9b023f788c18efd45ecac676d424c458ae + md5: 6c4d3597cf43f3439a51b2b13e29a4ba depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -1521,13 +1520,13 @@ packages: - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 constrains: - - libbrotlicommon 1.2.0 h09219d5_0 + - libbrotlicommon 1.2.0 hb03c661_1 license: MIT license_family: MIT purls: - pkg:pypi/brotli?source=hash-mapping - size: 367767 - timestamp: 1761592405814 + size: 367721 + timestamp: 1764017371123 - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda sha256: b4831ac06bb65561342cedf3d219cf9b096f20b8d62cda74f0177dffed79d4d5 md5: 5948f4fead433c6e5c46444dbfb01162 @@ -1565,21 +1564,21 @@ packages: purls: [] size: 206884 timestamp: 1744127994291 -- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.22.0-h4cfbee9_0.conda - sha256: c558bce3c6d1707528a9b54b1af321e3d6968e4db3e5addc9dcb906422026490 - md5: bede98a38485d588b3ec7e4ba2e46532 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.22.0-hc31b594_1.conda + sha256: efe06a982fe7f4e483a2043c4b43fc3598a538a66ed11364ee5b25d3400ef415 + md5: 52019609422a72ec80c32bbc16a889d8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - lz4-c >=1.10.0,<1.11.0a0 - - zlib-ng >=2.2.5,<2.3.0a0 + - zlib-ng >=2.3.1,<2.4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 349963 - timestamp: 1761677903850 + size: 352332 + timestamp: 1764291444176 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda sha256: b986ba796d42c9d3265602bc038f6f5264095702dd546c14bc684e60c385e773 md5: f0991f0f84902f6b6009b4d2350a83aa @@ -1831,11 +1830,6 @@ packages: purls: [] size: 48397 timestamp: 1761175097707 -- pypi: https://files.pythonhosted.org/packages/06/4b/cf05ed9d934cc30e5ae22f97c8272face420a476090e736615d9a6b53de0/crc32c-2.8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: crc32c - version: '2.8' - sha256: 086f64793c5ec856d1ab31a026d52ad2b895ac83d7a38fce557d74eb857f0a82 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl name: cryptography version: 46.0.3 @@ -2488,21 +2482,22 @@ packages: license: Apache-2.0 size: 167944 timestamp: 1759963324846 -- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c - md5: 44600c4667a319d67dbe0681fc0bc833 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 depends: - - python >=3.9 + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/cycler?source=hash-mapping - size: 13399 - timestamp: 1733332563512 -- pypi: https://files.pythonhosted.org/packages/d2/b2/fabcd6020b63b9d9f7a79cfc61b9c03c4e08ccb54f9cf9db9791be5669ef/cyclopts-4.2.4-py3-none-any.whl + - pkg:pypi/cycler?source=compressed-mapping + size: 14778 + timestamp: 1764466758386 +- pypi: https://files.pythonhosted.org/packages/7a/e8/77a231ae531cf38765b75ddf27dae28bb5f70b41d8bb4f15ce1650e93f57/cyclopts-4.3.0-py3-none-any.whl name: cyclopts - version: 4.2.4 - sha256: 41054f5e921a4f2b8ab9c839f12a274dec06a19560dc4898ce37cb775ca68ca4 + version: 4.3.0 + sha256: 91a30b69faf128ada7cfeaefd7d9649dc222e8b2a8697f1fc99e4ee7b7ca44f3 requires_dist: - attrs>=23.1.0 - docstring-parser>=0.15,<4.0 @@ -2842,7 +2837,7 @@ packages: - pypi: ./ name: entropice version: 0.1.0 - sha256: c335ffb8f5ffc53929fcd9d656087692b6e9918938384df60d136124ca5365bc + sha256: 72e09b4a23d5df42ba5da66301f1d2fd0cf8d83c413b35b7b92c1f622fe24e24 requires_dist: - aiohttp>=3.12.11 - bokeh>=3.7.3 @@ -2883,7 +2878,7 @@ packages: - ultraplot>=1.63.0 - xanimate @ git+https://github.com/davbyr/xAnimate - xarray>=2025.9.0 - - xdggs>=0.2.1 + - xdggs @ git+https://github.com/relativityhd/xdggs@feature/make-plotting-useful - xvec>=0.5.1 - zarr[remote]>=3.1.3 - geocube>=0.7.1,<0.8 @@ -2911,17 +2906,17 @@ packages: - array-api-compat>=1.12.0,<2 - array-api-extra>=0.9.0,<0.10 requires_python: '>=3.11,<3.14' -- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca - md5: 72e42d28960d875c7654614f8b50939a +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab depends: - - python >=3.9 + - python >=3.10 - typing_extensions >=4.6.0 license: MIT and PSF-2.0 purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 21284 - timestamp: 1746947398083 + - pkg:pypi/exceptiongroup?source=compressed-mapping + size: 21333 + timestamp: 1763918099466 - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl name: executing version: 2.2.1 @@ -2995,6 +2990,18 @@ packages: - sphinx-copybutton ; extra == 'docs' - pyarrow ; extra == 'docs' requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + sha256: b546c4eb5e11c2d8eab0685593e078fd0cd483e467d5d6e307d60d887488230f + md5: d90bf58b03d9a958cb4f9d3de539af17 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 197164 + timestamp: 1760369692240 - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda sha256: 782fa186d7677fd3bc1ff7adb4cc3585f7d2c7177c30bcbce21f8c177135c520 md5: a6997a7dcd6673c0692c61dfeaea14ab @@ -3011,9 +3018,9 @@ packages: - pkg:pypi/folium?source=hash-mapping size: 82665 timestamp: 1750113928159 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.60.1-py313h3dea7bd_0.conda - sha256: 063df49ae505478a6904f137a49ca4caf1afeccdc582133be231b0bc15601427 - md5: 904860fc0d57532d28e9c6c4501f19a9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.0-py313h3dea7bd_0.conda + sha256: edea7e66bb068551cab49335776e26e4003af3acec78d643d7142cd39a8db670 + md5: 92f09729a821c52943d4b0b3749a2380 depends: - __glibc >=2.17,<3.0.a0 - brotli @@ -3025,8 +3032,8 @@ packages: license_family: MIT purls: - pkg:pypi/fonttools?source=hash-mapping - size: 2927817 - timestamp: 1759187293931 + size: 2956476 + timestamp: 1764353003818 - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 md5: d3549fd50d450b6d9e7dddff25dd2110 @@ -3238,10 +3245,10 @@ packages: - geedim ; extra == 'workshop' - geopandas ; extra == 'workshop' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0a/2f/82b12527cc80391889c3236aa8b26239cb043e98e82bfe0c0a089b60e135/geoarrow_rust_core-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/a9/fb/c1e92716ee5aa00d48b650f0cb43220a1bf4088c8d572dfc21d400b16723/geoarrow_rust_core-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: geoarrow-rust-core - version: 0.6.0 - sha256: 0eb5bf1393f3c53997c5dab2cdc26807680ef23237b2836dc27d1ef9b849a056 + version: 0.6.1 + sha256: 5e505312f2761393fe5158242f3f2d77e9daa5cca63badd8d66e6d1d69fc17bf requires_dist: - arro3-core>=0.4 - pyproj @@ -3649,6 +3656,23 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/healpix-geo-0.0.8-py313h843e2db_0.conda + sha256: 2233915e63812a4cceaaf60d9dfa590f2317f360a65f343377fbfb8fb42375cd + md5: 571278b40e5263854046cf5ea07bd1c0 + depends: + - python + - numpy + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/healpix-geo?source=hash-mapping + size: 787636 + timestamp: 1764259419680 - conda: https://conda.anaconda.org/conda-forge/noarch/holoviews-1.22.0-pyhd8ed1ab_1.conda sha256: 67716e71734339a9347d47b13a3688944a939cb8ebfeafc3ff76075d7cafbad1 md5: f3bffed58d51d53e38f308a035f14509 @@ -3700,10 +3724,10 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- pypi: https://files.pythonhosted.org/packages/2e/22/790c83ec40f63f8b508f0e0b039c3c70bdb27e56565257e57a796f4a1cca/icechunk-1.1.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2b/74/c335456c500cda9e67ab88064b89b1e92a5a11b6203dbb309e00ddc58d50/icechunk-1.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: icechunk - version: 1.1.12 - sha256: 478082cb5ca220cd16a8060c284f6ca57d1e4731da361fb3a3c0d44ac050140b + version: 1.1.13 + sha256: 763b1d1ec69d3f365dd82832fad70673e812dfd231c067073ad5729792340fa7 requires_dist: - zarr>=3,!=3.0.3 - boto3 ; extra == 'test' @@ -3788,9 +3812,9 @@ packages: - pkg:pypi/idna?source=hash-mapping size: 50721 timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.11.11-py313h2d3cd63_0.conda - sha256: 5d5f00f8ba119b0a8c129dd0dae1a24f97cc558e1d74748c7aca831095fcf2aa - md5: e663a117d7c92ec541736d3f59a1eaac +- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.11.11-py313hf092b87_1.conda + sha256: ca5acabb4f0a7453b05ea15fa269282e11f1f5073d67332b0f8a3d83f69ec944 + md5: 5e7a22009e354b90af41a2f9d935d8b4 depends: - __glibc >=2.17,<3.0.a0 - blosc >=1.21.6,<2.0a0 @@ -3812,7 +3836,7 @@ packages: - libjpeg-turbo >=3.1.2,<4.0a0 - libjxl >=0.11,<0.12.0a0 - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 + - libpng >=1.6.51,<1.7.0a0 - libstdcxx >=14 - libtiff >=4.7.1,<4.8.0a0 - libwebp-base >=1.6.0,<2.0a0 @@ -3825,14 +3849,14 @@ packages: - python_abi 3.13.* *_cp313 - snappy >=1.2.2,<1.3.0a0 - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.5,<2.3.0a0 + - zlib-ng >=2.3.1,<2.4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/imagecodecs?source=hash-mapping - size: 1892880 - timestamp: 1762835914605 + size: 1896062 + timestamp: 1764308929734 - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe md5: b5577bc2212219566578fd5af9993af6 @@ -4418,9 +4442,9 @@ packages: purls: [] size: 248046 timestamp: 1739160907615 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-h1aa0949_0.conda - sha256: 32321d38b8785ef8ddcfef652ee370acee8d944681014d47797a18637ff16854 - md5: 1450224b3e7d17dfeb985364b77a4d47 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda + sha256: 9e191baf2426a19507f1d0a17be0fdb7aa155cdf0f61d5a09c808e0a69464312 + md5: a6abd2796fc332536735f68ba23f7901 depends: - __glibc >=2.17,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 @@ -4429,8 +4453,8 @@ packages: license: GPL-3.0-only license_family: GPL purls: [] - size: 753744 - timestamp: 1763060439129 + size: 725545 + timestamp: 1764007826689 - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff md5: 9344155d33912347b37f0ae6c410a835 @@ -4621,60 +4645,60 @@ packages: purls: [] size: 139399 timestamp: 1756124751131 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-1_h5875eb1_mkl.conda - build_number: 1 - sha256: 10a14ae5401a5bc4401c562ad866158dde555e045e3e50d83271564b420e0100 - md5: 8d0533045ab59d6df0c498eacd17d1f2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-2_h5875eb1_mkl.conda + build_number: 2 + sha256: f539ae2aa405175a6dc5781e7d40ed5ecea44340904c834bf4a789785b0e9eac + md5: 6a1a4ec47263069b2dae3cfba106320c depends: - mkl >=2025.3.0,<2026.0a0 constrains: - - blas 2.301 mkl - - liblapack 3.11.0 1*_mkl - - liblapacke 3.11.0 1*_mkl - - libcblas 3.11.0 1*_mkl + - liblapack 3.11.0 2*_mkl + - liblapacke 3.11.0 2*_mkl + - blas 2.302 mkl + - libcblas 3.11.0 2*_mkl track_features: - blas_mkl - blas_mkl_2 license: BSD-3-Clause license_family: BSD purls: [] - size: 18906 - timestamp: 1763447015697 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h09219d5_0.conda - sha256: fbbcd11742bb8c96daa5f4f550f1804a902708aad2092b39bec3faaa2c8ae88a - md5: 9b3117ec960b823815b02190b41c0484 + size: 18948 + timestamp: 1763828429422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 79664 - timestamp: 1761592192478 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hd53d788_0.conda - sha256: f7f357c33bd10afd58072ad4402853a8522d52d00d7ae9adb161ecf719f63574 - md5: c183787d2b228775dece45842abbbe53 + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 h09219d5_0 + - libbrotlicommon 1.2.0 hb03c661_1 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 34445 - timestamp: 1761592202559 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h02bd7ab_0.conda - sha256: 1370c8b1a215751c4592bf95d4b5d11bac91c577770efcb237e3a0f35c326559 - md5: b7a924e3e9ebc7938ffc7d94fe603ed3 + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 h09219d5_0 + - libbrotlicommon 1.2.0 hb03c661_1 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 298252 - timestamp: 1761592214576 + size: 298378 + timestamp: 1764017210931 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda sha256: 9517cce5193144af0fcbf19b7bd67db0a329c2cc2618f28ffecaa921a1cbe9d3 md5: 09c264d40c67b82b49a3f3b89037bd2e @@ -4687,23 +4711,23 @@ packages: purls: [] size: 121429 timestamp: 1762349484074 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-1_hfef963f_mkl.conda - build_number: 1 - sha256: 74ec850a6eefdb4c99e0b3abc86db11ae8d40653e28a6d697f5457f52a8fdec2 - md5: 49100ed7a1077c413a086f2e38a8dd38 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-2_hfef963f_mkl.conda + build_number: 2 + sha256: 9c232b9527e8861fb708e30a0c51750ee3f33be393ab3f67b621287a53e456d6 + md5: 62ffd188ee5c953c2d6ac54662c158a7 depends: - - libblas 3.11.0 1_h5875eb1_mkl + - libblas 3.11.0 2_h5875eb1_mkl constrains: - - blas 2.301 mkl - - liblapack 3.11.0 1*_mkl - - liblapacke 3.11.0 1*_mkl + - liblapack 3.11.0 2*_mkl + - liblapacke 3.11.0 2*_mkl + - blas 2.302 mkl track_features: - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 18522 - timestamp: 1763447024182 + size: 18557 + timestamp: 1763828437220 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 md5: c965a5aa0d5c1c37ffc62dff36e28400 @@ -5182,33 +5206,33 @@ packages: purls: [] size: 386739 timestamp: 1757945416744 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda - sha256: 08f9b87578ab981c7713e4e6a7d935e40766e10691732bba376d4964562bcb45 - md5: c0374badb3a5d4b1372db28d19462c53 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_14.conda + sha256: 947bfbe5e47cd5d0cbdb0926d4baadb3e9be25caca7c6c6ef516f7ef85052cec + md5: 550dceb769d23bcf0e2f97fd4062d720 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgomp 15.2.0 h767d61c_7 - - libgcc-ng ==15.2.0=*_7 + - libgomp 15.2.0 he0feb66_14 + - libgcc-ng ==15.2.0=*_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 822552 - timestamp: 1759968052178 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda - sha256: 2045066dd8e6e58aaf5ae2b722fb6dfdbb57c862b5f34ac7bfb58c40ef39b6ad - md5: 280ea6eee9e2ddefde25ff799c4f0363 + size: 1041047 + timestamp: 1764277103389 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda + sha256: 48a77fde940b4b877c0ed24efd562c135170a46d100c07cd2d7b67e842e30642 + md5: 6c13aaae36d7514f28bd5544da1a7bb8 depends: - - libgcc 15.2.0 h767d61c_7 + - libgcc 15.2.0 he0feb66_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 29313 - timestamp: 1759968065504 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.0-habacd5f_0.conda - sha256: 67fa52ebefdb71ea27b6f9a9f84536fbafefbf5c9a947860514c25d71d77e8fa - md5: b63bc11f6e58c80c542d2c4a5cc82b50 + size: 27157 + timestamp: 1764277114484 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.0-h6049c3a_1.conda + sha256: 6e943311d588bb9c099a58906289bdba8b80fe1bcfd67c3a058e45774b0a17ac + md5: 791c1603173b9d650ef5efc9e1c27624 depends: - __glibc >=2.17,<3.0.a0 - blosc >=1.21.6,<2.0a0 @@ -5219,7 +5243,7 @@ packages: - libarchive >=3.8.2,<3.9.0a0 - libcurl >=8.17.0,<9.0a0 - libdeflate >=1.25,<1.26.0a0 - - libexpat >=2.7.1,<3.0a0 + - libexpat >=2.7.3,<3.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - libjpeg-turbo >=3.1.2,<4.0a0 @@ -5237,7 +5261,7 @@ packages: - lz4-c >=1.10.0,<1.11.0a0 - muparser >=2.3.5,<2.4.0a0 - openssl >=3.5.4,<4.0a0 - - pcre2 >=10.46,<10.47.0a0 + - pcre2 >=10.47,<10.48.0a0 - proj >=9.7.0,<9.8.0a0 - xerces-c >=3.3.0,<3.4.0a0 - zstd >=1.5.7,<1.6.0a0 @@ -5246,23 +5270,23 @@ packages: license: MIT license_family: MIT purls: [] - size: 12899818 - timestamp: 1762607555707 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda - sha256: 9ca24328e31c8ef44a77f53104773b9fe50ea8533f4c74baa8489a12de916f02 - md5: 8621a450add4e231f676646880703f49 + size: 12907462 + timestamp: 1763757161364 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_14.conda + sha256: 8112c883156c256e26f15cba033b1b7c3de747bc3823497498d34b9fcd2187b6 + md5: fa9d91abc5a9db36fa8dcd1b9a602e61 depends: - - libgfortran5 15.2.0 hcd61629_7 + - libgfortran5 15.2.0 h68bc16d_14 constrains: - - libgfortran-ng ==15.2.0=*_7 + - libgfortran-ng ==15.2.0=*_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 29275 - timestamp: 1759968110483 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda - sha256: e93ceda56498d98c9f94fedec3e2d00f717cbedfc97c49be0e5a5828802f2d34 - md5: f116940d825ffc9104400f0d7f1a4551 + size: 27090 + timestamp: 1764277154740 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_14.conda + sha256: a32c45c9652dfd832fb860898f818fb34e6ad47933fcce24cf323bf0b6914f24 + md5: 3078a2a9a58566a54e579b41b9e88c84 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15.2.0 @@ -5271,8 +5295,8 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1572758 - timestamp: 1759968082504 + size: 2480588 + timestamp: 1764277129524 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-hdb79228_0.conda sha256: d3341cf69cb02c07bbd1837968f993da01b7bd467e816b1559a3ca26c1ff14c5 md5: a2e30ccd49f753fd30de0d30b1569789 @@ -5427,23 +5451,23 @@ packages: license: Apache-2.0 size: 389724 timestamp: 1759941253520 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-1_h5e43f62_mkl.conda - build_number: 1 - sha256: f68405cf156e66df3ff19a81c05f6aa2f4efee405872783bf9be3e50898e5b70 - md5: f90dad3e92d406b2c06450d8234a0498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-2_h5e43f62_mkl.conda + build_number: 2 + sha256: 18166b664d39650d3482420a7349082d4a8d79cee5ca69562160795ab6b0a808 + md5: 4f33d79eda3c82c95a54e8c2981adddb depends: - - libblas 3.11.0 1_h5875eb1_mkl + - libblas 3.11.0 2_h5875eb1_mkl constrains: - - blas 2.301 mkl - - liblapacke 3.11.0 1*_mkl - - libcblas 3.11.0 1*_mkl + - liblapacke 3.11.0 2*_mkl + - blas 2.302 mkl + - libcblas 3.11.0 2*_mkl track_features: - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 18531 - timestamp: 1763447031969 + size: 18542 + timestamp: 1763828444709 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 md5: 1a580f7796c7bf6393fddb8bbbde58dc @@ -5456,9 +5480,9 @@ packages: purls: [] size: 112894 timestamp: 1749230047870 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-ha7672b3_3.conda - sha256: 5db0df0dc49c175518836bf8179f703e26339434b884f6e5771b9af31566f3ae - md5: ff5dd3ba5b518a77efe5a8e3c6f01cb3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-ha7672b3_4.conda + sha256: 34da7d270ee89143679afcc1f6b8f32289b954bfadfb621482d6d8e23113b108 + md5: 7bbb8b3e5530cc049b2e2b2e2797e09d depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 @@ -5473,8 +5497,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 463855014 - timestamp: 1757966310384 + size: 554495629 + timestamp: 1764086162638 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee md5: c7e925f37e3b40d893459e625f6a53f1 @@ -5659,17 +5683,17 @@ packages: purls: [] size: 1277346 timestamp: 1763230873506 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda - sha256: e75a2723000ce3a4b9fd9b9b9ce77553556c93e475a4657db6ed01abc02ea347 - md5: 7af8e91b0deb5f8e25d1a595dea79614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.51-h421ea60_0.conda + sha256: 1eb769c0f2778d07428947f64272592cc2d3b9bce63b41600abe5dc2b683d829 + md5: d8b81203d08435eb999baa249427884e depends: - libgcc >=14 - __glibc >=2.17,<3.0.a0 - libzlib >=1.3.1,<2.0a0 license: zlib-acknowledgement purls: [] - size: 317390 - timestamp: 1753879899951 + size: 317576 + timestamp: 1763764145606 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda sha256: 1679f16c593d769f3dab219adb1117cbaaddb019080c5a59f79393dc9f45b84f md5: 94cb88daa0892171457d9fdc69f43eca @@ -5827,18 +5851,17 @@ packages: purls: [] size: 4097449 timestamp: 1761681679109 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda - sha256: 4c992dcd0e34b68f843e75406f7f303b1b97c248d18f3c7c330bdc0bc26ae0b3 - md5: 729a572a3ebb8c43933b30edcc628ceb +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda + sha256: 6f0e8a812e8e33a4d8b7a0e595efe28373080d27b78ee4828aa4f6649a088454 + md5: 2e1b84d273b01835256e53fd938de355 depends: - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 945576 - timestamp: 1762299687230 + size: 938979 + timestamp: 1764359444435 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -5852,29 +5875,29 @@ packages: purls: [] size: 304790 timestamp: 1745608545575 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda - sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 - md5: 5b767048b1b3ee9a954b06f4084f93dc +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_14.conda + sha256: bbeb7cf8b7eff000b2cb5ffb9a40d98fbb8f39c94768afaec38408c3097cde0d + md5: 8e96fe9b17d5871b5cf9d312cab832f6 depends: - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 h767d61c_7 + - libgcc 15.2.0 he0feb66_14 constrains: - - libstdcxx-ng ==15.2.0=*_7 + - libstdcxx-ng ==15.2.0=*_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 3898269 - timestamp: 1759968103436 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda - sha256: 024fd46ac3ea8032a5ec3ea7b91c4c235701a8bf0e6520fe5e6539992a6bd05f - md5: f627678cf829bd70bccf141a19c3ad3e + size: 5856715 + timestamp: 1764277148231 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda + sha256: 63336f51b88029a9557a430aecbb08a11365aa03ec47ec8d14e542fec5dc80fb + md5: 9531f671a13eec0597941fa19e489b96 depends: - - libstdcxx 15.2.0 h8f9b012_7 + - libstdcxx 15.2.0 h934c35e_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 29343 - timestamp: 1759968157195 + size: 27200 + timestamp: 1764277193585 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda sha256: b30c06f60f03c2cf101afeb3452f48f12a2553b4cb631c9460c8a8ccf0813ae5 md5: b04e0a2163a72588a40cde1afd6f2d18 @@ -5919,9 +5942,9 @@ packages: purls: [] size: 435273 timestamp: 1762022005702 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.8.0-cuda129_mkl_hf53477d_302.conda - sha256: cefb16d5f87c0e99cfc940c465c0384620d2fc4934b408c73ac74be540f82673 - md5: 9e7f8bdbfb88efa1d74fd16dc6723f16 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.9.1-cuda129_mkl_hce6efb5_300.conda + sha256: 333ff0887b4013b6045a11395aa22e73f65606d3d86c77c7dffdf2417aa077f9 + md5: 161b53b1fb26d530dd1431676fe38f1a depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex * *_llvm @@ -5931,11 +5954,12 @@ packages: - cuda-nvrtc >=12.9.86,<13.0a0 - cuda-nvtx >=12.9.79,<13.0a0 - cuda-version >=12.9,<13 - - cudnn >=9.10.1.4,<10.0a0 + - cudnn >=9.10.2.21,<10.0a0 + - fmt >=12.0.0,<12.1.0a0 - libabseil * cxx17* - libabseil >=20250512.1,<20250513.0a0 - libblas * *mkl - - libcblas >=3.9.0,<4.0a0 + - libcblas >=3.11.0,<4.0a0 - libcublas >=12.9.1.4,<13.0a0 - libcudss >=0.7.1.4,<0.7.2.0a0 - libcufft >=11.4.1.4,<12.0a0 @@ -5949,20 +5973,20 @@ packages: - libstdcxx >=14 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=21.1.4 + - llvm-openmp >=21.1.6 - mkl >=2025.3.0,<2026.0a0 - - nccl >=2.28.7.1,<3.0a0 - - pybind11-abi 4 + - nccl >=2.28.9.1,<3.0a0 + - pybind11-abi 11 - sleef >=3.9.0,<4.0a0 constrains: - - pytorch 2.8.0 cuda129_mkl_*_302 + - pytorch 2.9.1 cuda129_mkl_*_300 + - pytorch-gpu 2.9.1 - pytorch-cpu <0.0a0 - - pytorch-gpu 2.8.0 license: BSD-3-Clause license_family: BSD purls: [] - size: 876816719 - timestamp: 1762140104716 + size: 884635431 + timestamp: 1764069527305 - conda: https://conda.anaconda.org/rapidsai/linux-64/libucxx-0.46.00-cuda12_251008_64355220.conda build_number: 0 sha256: eb613f385a1cf7fdf873958709e401879f65f3e0d5730d8901f90a3df5419459 @@ -5988,17 +6012,17 @@ packages: purls: [] size: 144395 timestamp: 1763011330153 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.1-hfe17d71_0.conda - sha256: c05bb2ea574dd09876ece0494213d5a8b817cf515413feee92f880287635de5c - md5: 765c7e0005659d5154cdd33dc529e0a5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.2-hfe17d71_0.conda + sha256: 98812901f52df746f89e1fda2a65494dd30de9e826f89b49ebad5d53e5fc424d + md5: 5641725dfad698909ec71dac80d16736 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 86230 - timestamp: 1763377698026 + size: 85985 + timestamp: 1764062044259 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 md5: 80c07c68d2f6870250959dcc95b209d1 @@ -6718,23 +6742,23 @@ packages: - typing-extensions>=4.15.0 ; extra == 'tests' - mpi4py ; extra == 'parallel' requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - sha256: 02019191a2597865940394ff42418b37bc585a03a1c643d7cea9981774de2128 - md5: 16bff3d37a4f99e3aa089c36c2b8d650 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda + sha256: 57b0bbb72ed5647438a81e7caf4890075390f80030c1333434467f9366762db7 + md5: 6725bfdf8ea7a8bf6415f096f3f1ffa5 depends: - python >=3.11 - python constrains: - numpy >=1.25 - scipy >=1.11.2 - - matplotlib >=3.8 + - matplotlib-base >=3.8 - pandas >=2.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/networkx?source=hash-mapping - size: 1564462 - timestamp: 1749078300258 + - pkg:pypi/networkx?source=compressed-mapping + size: 1584885 + timestamp: 1763962034867 - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda sha256: fd2cbd8dfc006c72f45843672664a8e4b99b2f8137654eaae8c3d46dca776f63 md5: 16c2a0e9c4a166e53632cfca4f68d020 @@ -6813,13 +6837,18 @@ packages: - numpy - numba requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ff/46/320d960aff884bc63abaaf846ffa3de4803e83e8070b6f84c5688464839c/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c4/e6/d359fdd37498e74d26a167f7a51e54542e642ea47181eb4e643a69a066c3/numcodecs-0.16.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: numcodecs - version: 0.16.3 - sha256: 010d628c95be1214536fb22c0df4ced58da954b404b1fcb25ddebf64e4a3f7f3 + version: 0.16.5 + sha256: 84230b4b9dad2392f2a84242bd6e3e659ac137b5a1ce3571d6965fca673e0903 requires_dist: - numpy>=1.24 - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' - sphinx ; extra == 'docs' - sphinx-issues ; extra == 'docs' - pydata-sphinx-theme ; extra == 'docs' @@ -6829,10 +6858,7 @@ packages: - pytest-cov ; extra == 'test' - pyzstd ; extra == 'test' - importlib-metadata ; extra == 'test-extras' - - msgpack ; extra == 'msgpack' - - zfpy>=1.0.0 ; extra == 'zfpy' - - pcodec>=0.3,<0.4 ; extra == 'pcodec' - - crc32c>=2.7 ; extra == 'crc32c' + - crc32c ; extra == 'test-extras' requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda sha256: 7da9ebd80a7311e0482c4c6393be0eddf0012b3846df528e375037409b3d2b3d @@ -6979,14 +7005,14 @@ packages: - botocore ; extra == 'botocore' - zarr>=2.18.3,<3 ; extra == 'zarr' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ef/21/05c243c9b563519ae5b7442a73424ad0537c7d312cf8969bdf9d0fa31c00/odc_stac-0.4.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/fd/0e/3f555b37a4e9da2aa37655b71e83792401958dc4078e77ffd4fa2616934f/odc_stac-0.4.1-py3-none-any.whl name: odc-stac - version: 0.4.0 - sha256: a76b9d96d7aea53cabcd7ba99b0cf467a6eab6d2ad6a52802af36b5c407c5952 + version: 0.4.1 + sha256: e3910f6c8e06a609d981d38843861076617ec49d41034c22a081690182cea39c requires_dist: - affine - odc-geo>=0.4.7 - - odc-loader>=0.5.1 + - odc-loader>=0.5.1,<0.6.0 - rasterio>=1.0.0,!=1.3.0,!=1.3.1 - dask[array] - numpy>=1.20.0 @@ -7003,7 +7029,6 @@ packages: - matplotlib-inline ; extra == 'docs' - pandas ; extra == 'docs' - distributed ; extra == 'docs' - - datacube>=1.8.8 ; extra == 'docs' - ipython ; extra == 'docs' - ipykernel ; extra == 'docs' - pytest ; extra == 'test' @@ -7018,9 +7043,8 @@ packages: - pystac-client ; extra == 'test-all' - distributed ; extra == 'test-all' - geopandas ; extra == 'test-all' - - datacube ; extra == 'test-all' - stackstac ; extra == 'test-all' - requires_python: '>=3.8' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d md5: 11b3379b191f63139e29c0d19dee24cd @@ -7201,17 +7225,17 @@ packages: - pkg:pypi/panel?source=hash-mapping size: 22903699 timestamp: 1762779744606 -- conda: https://conda.anaconda.org/conda-forge/noarch/param-2.3.0-pyhc455866_1.conda - sha256: fa1a4d3988c81fa24213fb08f20b9754164f37625c897388eedeb096d6f26655 - md5: 3933d9964fc0549f547e3a6bff0cce64 +- conda: https://conda.anaconda.org/conda-forge/noarch/param-2.3.1-pyhc455866_0.conda + sha256: 9ad91e71f9c987ff0c304d8a3895bb1b8ded42a20993fc62446070c9f3c5e841 + md5: 2e540782a41d649a290659ca8e50fec0 depends: - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/param?source=hash-mapping - size: 180208 - timestamp: 1763308263806 + - pkg:pypi/param?source=compressed-mapping + size: 180024 + timestamp: 1764091166101 - pypi: https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl name: parso version: 0.8.5 @@ -7236,9 +7260,9 @@ packages: - pkg:pypi/partd?source=hash-mapping size: 20884 timestamp: 1715026639309 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda - sha256: 5c7380c8fd3ad5fc0f8039069a45586aa452cf165264bc5a437ad80397b32934 - md5: 7fa07cb0fb1b625a089ccc01218ee5b1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -7247,37 +7271,37 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 1209177 - timestamp: 1756742976157 + size: 1222481 + timestamp: 1763655398280 - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl name: pexpect version: 4.9.0 sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 requires_dist: - ptyprocess>=0.5 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py313h50355cd_0.conda - sha256: f4f7554212aa3ca89ff2336f6312dc61c81b9f7364073fe74374d96fc81391b7 - md5: 8a96eab78687362de3e102a15c4747a8 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py313h80991f8_2.conda + sha256: 5319da7c24f4f876c966fc6e83789aa4530779d4454c37c4169f79050555bc26 + md5: 37ca27d2f726f29a068230d8f6917ce4 depends: - python - libgcc >=14 - __glibc >=2.17,<3.0.a0 + - libwebp-base >=1.6.0,<2.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - lcms2 >=2.17,<3.0a0 - libxcb >=1.17.0,<2.0a0 - python_abi 3.13.* *_cp313 - - lcms2 >=2.17,<3.0a0 - - tk >=8.6.13,<8.7.0a0 + - zlib-ng >=2.3.1,<2.4.0a0 - libfreetype >=2.14.1 - libfreetype6 >=2.14.1 - openjpeg >=2.5.4,<3.0a0 - - zlib-ng >=2.2.5,<2.3.0a0 - libtiff >=4.7.1,<4.8.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 + - tk >=8.6.13,<8.7.0a0 license: HPND purls: - - pkg:pypi/pillow?source=compressed-mapping - size: 1040440 - timestamp: 1761655794834 + - pkg:pypi/pillow?source=hash-mapping + size: 1040806 + timestamp: 1764330106863 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.0-pyhcf101f3_0.conda sha256: 7efd51b48d908de2d75cbb3c4a2e80dd9454e1c5bb8191b261af3136f7fa5888 md5: 5c7a868f8241e64e1cf5fdf4962f23e2 @@ -7577,42 +7601,44 @@ packages: requires_dist: - pyasn1>=0.6.1,<0.7.0 requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda - sha256: d429f6f255fbe49f09b9ae1377aa8cbc4d9285b8b220c17ae2ad9c4894c91317 - md5: 1594696beebf1ecb6d29a1136f859a74 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be + md5: 70ece62498c769280f791e836ac53fff depends: - - pybind11-global 2.13.6 *_3 - - python >=3.9 + - python >=3.8 + - pybind11-global ==3.0.1 *_0 + - python constrains: - - pybind11-abi ==4 + - pybind11-abi ==11 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pybind11?source=hash-mapping - size: 186821 - timestamp: 1747935138653 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 - sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0 - md5: 878f923dd6acc8aeb47a75da6c4098be + size: 232875 + timestamp: 1755953378112 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda + sha256: 9e7fe12f727acd2787fb5816b2049cef4604b7a00ad3e408c5e709c298ce8bf1 + md5: f0599959a2447c1e544e216bddf393fa license: BSD-3-Clause license_family: BSD purls: [] - size: 9906 - timestamp: 1610372835205 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - sha256: c044cfcbe6ef0062d0960e9f9f0de5f8818cec84ed901219ff9994b9a9e57237 - md5: 730a5284e26d6bdb73332dafb26aec82 + size: 14671 + timestamp: 1752769938071 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + sha256: f11a5903879fe3a24e0d28329cb2b1945127e85a4cdb444b45545cf079f99e2d + md5: fe10b422ce8b5af5dab3740e4084c3f9 depends: + - python >=3.8 - __unix - - python >=3.9 + - python constrains: - - pybind11-abi ==4 + - pybind11-abi ==11 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pybind11-global?source=hash-mapping - size: 180116 - timestamp: 1747934418811 + size: 228871 + timestamp: 1755953338243 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 md5: 12c566707c80111f9799308d9e265aef @@ -7738,9 +7764,9 @@ packages: license: Apache-2.0 size: 250975 timestamp: 1759951774204 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.1-py313hae45665_2.conda - sha256: 636ee88b9a748171adda59bd530c6d49d105c42c42e487f526cd7c6c7ed839c2 - md5: e36b8c7a4a4fce71743f69ff855ceda2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.12.1-py313hae45665_0.conda + sha256: 36d91e089f7c6fa3466a07e9c2167a64b97837433c09b6f3ba632c978cce22a3 + md5: fa543477ad16de26ce5f2fd5bcd249fa depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -7754,8 +7780,8 @@ packages: license_family: MIT purls: - pkg:pypi/pyogrio?source=hash-mapping - size: 626396 - timestamp: 1762681224112 + size: 665424 + timestamp: 1764402539337 - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda sha256: 6814b61b94e95ffc45ec539a6424d8447895fef75b0fec7e1be31f5beee883fb md5: 6c8979be6d7a17692793114fa26916e8 @@ -7788,14 +7814,15 @@ packages: - pkg:pypi/pyproj?source=hash-mapping size: 534602 timestamp: 1757954997735 -- pypi: https://files.pythonhosted.org/packages/51/92/a8ad817864a560b96ac1c817f9c56bb7eacc1a7d522e2d39afe9e9c77d7b/pyshp-3.0.2.post1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/82/06/cad54e8ce758bd836ee5411691cbd49efeb9cc611b374670fce299519334/pyshp-3.0.3-py3-none-any.whl name: pyshp - version: 3.0.2.post1 - sha256: b0aec66bc55f7cd3a846f6b02c5a9eec1fc1d2cff16ccfcf6493a6773c7eb602 + version: 3.0.3 + sha256: 28c8fac8c0c25bb0fecbbfd10ead7f319c2ff2f3b0b44a94f22bd2c93510ad42 requires_dist: - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' - ruff ; extra == 'dev' + - pyshp-stubs ; extra == 'stubs' - pytest ; extra == 'test' requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda @@ -7957,9 +7984,9 @@ packages: purls: [] size: 7002 timestamp: 1752805902938 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.8.0-cuda129_mkl_py313_h7947483_302.conda - sha256: 079a049266603ea51a4d8c669707df94b8b274ef8f2dce758c7415c2d8fde292 - md5: 04c0be1fd4b1aa41286b5a44fdeecf3c +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.9.1-cuda129_mkl_py313_ha91d441_300.conda + sha256: 3268a34dc6867739dfda86dbfa4dbae0d69c50f21530505812292c55f475b0e2 + md5: 04bc7be2119962e799c5c718980fafbe depends: - __cuda - __glibc >=2.17,<3.0.a0 @@ -7970,14 +7997,15 @@ packages: - cuda-nvrtc >=12.9.86,<13.0a0 - cuda-nvtx >=12.9.79,<13.0a0 - cuda-version >=12.9,<13 - - cudnn >=9.10.1.4,<10.0a0 + - cudnn >=9.10.2.21,<10.0a0 - filelock + - fmt >=12.0.0,<12.1.0a0 - fsspec - jinja2 - libabseil * cxx17* - libabseil >=20250512.1,<20250513.0a0 - libblas * *mkl - - libcblas >=3.9.0,<4.0a0 + - libcblas >=3.11.0,<4.0a0 - libcublas >=12.9.1.4,<13.0a0 - libcudss >=0.7.1.4,<0.7.2.0a0 - libcufft >=11.4.1.4,<12.0a0 @@ -7989,43 +8017,43 @@ packages: - libmagma >=2.9.0,<2.9.1.0a0 - libprotobuf >=6.31.1,<6.31.2.0a0 - libstdcxx >=14 - - libtorch 2.8.0 cuda129_mkl_hf53477d_302 + - libtorch 2.9.1 cuda129_mkl_hce6efb5_300 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=21.1.4 + - llvm-openmp >=21.1.6 - mkl >=2025.3.0,<2026.0a0 - - nccl >=2.28.7.1,<3.0a0 + - nccl >=2.28.9.1,<3.0a0 - networkx - numpy >=1.23,<3 - optree >=0.13.0 - pybind11 - - pybind11-abi 4 + - pybind11-abi 11 - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - setuptools - sleef >=3.9.0,<4.0a0 - sympy >=1.13.3 - - triton 3.4.0 + - triton 3.5.1 - typing_extensions >=4.10.0 constrains: + - pytorch-gpu 2.9.1 - pytorch-cpu <0.0a0 - - pytorch-gpu 2.8.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 25020901 - timestamp: 1762144959813 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.8.0-cuda129_mkl_h43a4b0b_302.conda - sha256: 8781dfd1df1f1a80b28aa87ac34574c1841a533a88c721cb31591fa011eae3f6 - md5: 8f435becd46ff815cf48773bfdeeb699 + size: 25815390 + timestamp: 1764071643421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.9.1-cuda129_mkl_h0d04637_300.conda + sha256: 240bd935df8947cb162da99e747f09a22d972fee1365485eb358913b1458a2fd + md5: 5f21c7b2922f8fd7d1bb0717efa38804 depends: - - pytorch 2.8.0 cuda*_mkl*302 + - pytorch 2.9.1 cuda*_mkl*300 license: BSD-3-Clause license_family: BSD purls: [] - size: 47651 - timestamp: 1762145032202 + size: 50630 + timestamp: 1764075406397 - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 md5: bc8e3267d44011051f2eb14d22fb0960 @@ -8407,7 +8435,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/rich?source=compressed-mapping + - pkg:pypi/rich?source=hash-mapping size: 200840 timestamp: 1760026188268 - pypi: https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl @@ -8495,10 +8523,10 @@ packages: - aiobotocore[awscli]>=2.5.4,<3.0.0 ; extra == 'awscli' - aiobotocore[boto3]>=2.5.4,<3.0.0 ; extra == 'boto3' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/5f/e1/5ef25f52973aa12a19cf4e1375d00932d7fb354ffd310487ba7d44225c1a/s3transfer-0.15.0-py3-none-any.whl name: s3transfer - version: 0.14.0 - sha256: ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456 + version: 0.15.0 + sha256: 6f8bf5caa31a0865c4081186689db1b2534cef721d104eb26101de4b9d6a5852 requires_dist: - botocore>=1.37.4,<2.0a0 - botocore[crt]>=1.37.4,<2.0a0 ; extra == 'crt' @@ -8653,7 +8681,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/shapely?source=compressed-mapping + - pkg:pypi/shapely?source=hash-mapping size: 648024 timestamp: 1762523698473 - conda: https://conda.anaconda.org/conda-forge/noarch/simpervisor-1.0.0-pyhd8ed1ab_1.conda @@ -8691,10 +8719,10 @@ packages: purls: [] size: 1951720 timestamp: 1756274576844 -- pypi: https://files.pythonhosted.org/packages/8b/4c/a023ef569bb20969ede7f33eba40eecb9edd7dc81a7c93d4c55a103625f7/smart_geocubes-0.1.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/ab/6c/1d4db72c5dbbb9ea2fbc323a40986917cca84ca098f6fcf80624370979e7/smart_geocubes-0.1.2-py3-none-any.whl name: smart-geocubes - version: 0.1.0 - sha256: 3aae54f6d3a60f582b7213bfdd0c105907bf0388ef6ea0ef003b8c1b6adf0a4d + version: 0.1.2 + sha256: aa6440636cc08352fd1052a3719cd9d76d264fde919e11cc554feef0e8360a72 requires_dist: - geopandas>=1.0.0 - icechunk>=1.1,<2 @@ -8738,17 +8766,6 @@ packages: purls: [] size: 45829 timestamp: 1762948049098 -- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad - md5: 03fe290994c5e4ec17293cfb6bdce520 - depends: - - python >=3.10 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/sniffio?source=compressed-mapping - size: 15698 - timestamp: 1762941572482 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 md5: 0401a17ae845fa72c7210e206ec5647d @@ -8776,21 +8793,20 @@ packages: version: 1.0.1 sha256: c4585194c238979f953fbf2ecf9f94c84d9d0a929432c7104e39984f52c9e718 requires_python: '>=3.6' -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.51.0-heff268d_0.conda - sha256: 5cece58ca7353705ea47bbe44088baee70d2dfa8bdf2bbcd211698f60ab5e7cd - md5: 5422f0e1b59d2aa29329d5b3e36d57e5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.51.1-hbc0de68_0.conda + sha256: f74f6e1302086d84cb62b2bca74950763378054008c77b0a62ac637bcf25b3c1 + md5: 968f50847d17c74a428fc47a2c70fd6f depends: - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - libgcc >=14 - - libsqlite 3.51.0 hee844dc_0 + - libsqlite 3.51.1 h0c1763c_0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - readline >=8.2,<9.0a0 license: blessing purls: [] - size: 182985 - timestamp: 1762299697693 + size: 183775 + timestamp: 1764359463938 - pypi: https://files.pythonhosted.org/packages/30/09/cd7134f1ed5074a7d456640e7ba9a8c8e68a831837b4e7bfd9f29e5700a4/st_theme-1.2.3-py3-none-any.whl name: st-theme version: 1.2.3 @@ -8956,10 +8972,10 @@ packages: - pkg:pypi/terminado?source=hash-mapping size: 22452 timestamp: 1710262728753 -- pypi: https://files.pythonhosted.org/packages/53/b3/95ab646b0c908823d71e49ab8b5949ec9f33346cee3897d1af6be28a8d91/textual-6.6.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/8c/67/f2dc967db68b984dd71fc0092dc906ddf5d09eea8c22830e02267ce18e19/textual-6.7.0-py3-none-any.whl name: textual - version: 6.6.0 - sha256: 5a9484bd15ee8a6fd8ac4ed4849fb25ee56bed2cecc7b8a83c4cd7d5f19515e5 + version: 6.7.0 + sha256: c5ed36840187c0bdfeb9bd46217d18fe26dca3befcdc695edc848cf24b3133a4 requires_dist: - markdown-it-py[linkify]>=2.1.0 - mdit-py-plugins @@ -9018,6 +9034,7 @@ packages: - webencodings >=0.4 - python license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/tinycss2?source=compressed-mapping size: 30906 @@ -9117,9 +9134,9 @@ packages: - pkg:pypi/treelite?source=hash-mapping size: 608632 timestamp: 1732330357758 -- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.4.0-cuda129py313h246eb7c_1.conda - sha256: 80530a0960ee17295741f1fd5e2d08aa2141aced75bdde242fc00c142d4e391f - md5: 0b2c519abbcf6b5aa57678bf87e8f212 +- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.5.1-cuda129py313h246eb7c_0.conda + sha256: 65c2df246c4aa3609e4cb88317318806578e8249438f54098e12695fbc3fc6d9 + md5: 82cbc41815de5c665ddadd85438129c2 depends: - python - setuptools @@ -9127,20 +9144,20 @@ packages: - cuda-cuobjdump - cuda-cudart - cuda-cupti - - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<13 - libstdcxx >=14 - libgcc >=14 - - cuda-version >=12.9,<13 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 - zstd >=1.5.7,<1.6.0a0 - python_abi 3.13.* *_cp313 - - libzlib >=1.3.1,<2.0a0 - cuda-cupti >=12.9.79,<13.0a0 license: MIT license_family: MIT purls: - pkg:pypi/triton?source=hash-mapping - size: 189201951 - timestamp: 1759344524413 + size: 223243524 + timestamp: 1763015352210 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -9234,10 +9251,10 @@ packages: license: BSD-3-Clause size: 486438 timestamp: 1759944577626 -- pypi: https://files.pythonhosted.org/packages/06/af/413f6b172f9d4c4943b980a9fd96bb4d915680ce8f79c07de6f697b45c8b/ultraplot-1.65.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/95/20/92e3083b0e854943015bc8a7866e284ead9efadf9bf6809e6fce3b7ded61/ultraplot-1.66.0-py3-none-any.whl name: ultraplot - version: 1.65.1 - sha256: f659448c75f115934f7db0ad293ced7115aeff71333b8b8d8b1e237f6bb62faa + version: 1.66.0 + sha256: 87fecb897ca5c7d54b76ac81e5b8635be45d9c9d42d629469f1d283e6405f9e1 requires_dist: - numpy>=1.26.0 - matplotlib>=3.9,<3.11 @@ -9464,21 +9481,21 @@ packages: - pytest ; extra == 'tests' - pytest-cov ; extra == 'tests' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/65/ad/8f9ff43ff49ef02c7b8202a42c32a1fe8de1276bba0e6f55609e19ff7585/xdggs-0.2.1-py3-none-any.whl +- pypi: git+https://github.com/relativityhd/xdggs?branch=feature%2Fmake-plotting-useful#d85688e638350804dac37d05725709a9c909e5be name: xdggs - version: 0.2.1 - sha256: 792832757558ad553db4ddbcc2b89d9113e2da816b3cfb1204becca5a9cb6778 + version: 0.1.dev158+gd85688e63 requires_dist: - - xarray + - arro3-core>=0.4.0 - cdshealpix - h3ronpy - - typing-extensions + - healpix-geo>=0.0.6 - lonboard>=0.9.3 - - pyproj>=3.3 - matplotlib - - arro3-core>=0.4.0 + - numpy>=2.0 - pooch - requires_python: '>=3.10' + - pyproj>=3.3 + - xarray + requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-h988505b_0.conda sha256: dbed30e56bea060c8b077773138f388144686c24793172ee3d39b69aa0628165 md5: eeecd6ccca69409a39ac99721a72f387 @@ -9493,10 +9510,10 @@ packages: purls: [] size: 1637176 timestamp: 1728975948928 -- pypi: https://files.pythonhosted.org/packages/56/b0/e3efafd9c97ed931f6453bd71aa8feaffc9217e6121af65fda06cf32f608/xgboost-3.1.1-py3-none-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/5e/ab/c60fcc137fa685533bb31e721de3ecc88959d393830d59d0204c5cbd2c85/xgboost-3.1.2-py3-none-manylinux_2_28_x86_64.whl name: xgboost - version: 3.1.1 - sha256: 405e48a201495fe9474f7aa27419f937794726a1bc7d2c2f3208b351c816580a + version: 3.1.2 + sha256: 24879ac75c0ee21acae0101f791bc43303f072a86d70fdfc89dae10a0008767f requires_dist: - numpy - nvidia-nccl-cu12 ; platform_machine != 'aarch64' and sys_platform == 'linux' @@ -9561,10 +9578,10 @@ packages: - xarray - pystac>=1.0.1 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/9e/78/55c7ed1be12286c1245fbc0a7c01fe6ebbae4f67276e0d1f7b57ef2ea22e/xvec-0.5.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/9e/b4/b3161f856c704938d69c10680abaaf4a24783fa58a9f95590f2a0b63dd09/xvec-0.5.2-py3-none-any.whl name: xvec - version: 0.5.1 - sha256: d285aab6266b50d5496da5d9f664820e3ef286bc21f5c4e8bb218be48737a1ad + version: 0.5.2 + sha256: 757243b9ad8d66922111b16f51d157560cf11916fe790a20b9e955a44efb8e8d requires_dist: - xarray>=2022.12.0 - pyproj>=3.0.0 @@ -9575,17 +9592,17 @@ packages: - matplotlib ; extra == 'all' - geopandas ; extra == 'all' requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.10.0-pyhd8ed1ab_0.conda - sha256: c1b83ca08b11b5e8fa610e5e9721cf62bc67300fb951b7a189a0882565e2b391 - md5: c98904dfa356df2e386db8af043be202 +- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.11.0-pyhd8ed1ab_0.conda + sha256: b194a1fbc38f29c563b102ece9d006f7a165bf9074cdfe50563d3bce8cae9f84 + md5: 16933322051fa260285f1a44aae91dd6 depends: - python >=3.8 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/xyzservices?source=hash-mapping - size: 50234 - timestamp: 1761842339966 + size: 51128 + timestamp: 1763813786075 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad md5: a77f85f77be52ff59391544bfe73390a @@ -9614,31 +9631,32 @@ packages: - pkg:pypi/yarl?source=hash-mapping size: 150462 timestamp: 1761337228350 -- pypi: https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl name: zarr - version: 3.1.3 - sha256: 45f67f87f65f14fa453f99dd8110a5936b7ac69f3a21981d33e90407c80c302a + version: 3.1.5 + sha256: 29cd905afb6235b94c09decda4258c888fcb79bb6c862ef7c0b8fe009b5c8563 requires_dist: - donfig>=0.8 - - numcodecs[crc32c]>=0.14 + - google-crc32c>=1.5 + - numcodecs>=0.14 - numpy>=1.26 - packaging>=22.0 - typing-extensions>=4.9 - typer ; extra == 'cli' - astroid<4 ; extra == 'docs' + - griffe-inherited-docstrings ; extra == 'docs' + - markdown-exec[ansi] ; extra == 'docs' + - mike>=2.1.3 ; extra == 'docs' + - mkdocs-material[imaging]>=9.6.14 ; extra == 'docs' + - mkdocs-redirects>=1.2.0 ; extra == 'docs' + - mkdocs>=1.6.1 ; extra == 'docs' + - mkdocstrings-python>=1.16.10 ; extra == 'docs' + - mkdocstrings>=0.29.1 ; extra == 'docs' - numcodecs[msgpack] ; extra == 'docs' - - numpydoc ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - pytest ; extra == 'docs' - rich ; extra == 'docs' + - ruff ; extra == 'docs' - s3fs>=2023.10.0 ; extra == 'docs' - - sphinx-autoapi==3.4.0 ; extra == 'docs' - - sphinx-autobuild>=2021.3.14 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-design ; extra == 'docs' - - sphinx-issues ; extra == 'docs' - - sphinx-reredirects ; extra == 'docs' - - sphinx==8.1.3 ; extra == 'docs' - towncrier ; extra == 'docs' - cupy-cuda12x ; extra == 'gpu' - rich ; extra == 'optional' @@ -9704,17 +9722,18 @@ packages: - pkg:pypi/zict?source=hash-mapping size: 36341 timestamp: 1733261642963 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad - md5: df5e78d904988eb55042c0c97446079f +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 depends: - - python >=3.9 + - python >=3.10 + - python license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=hash-mapping - size: 22963 - timestamp: 1749421737203 + - pkg:pypi/zipp?source=compressed-mapping + size: 24194 + timestamp: 1764460141901 - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 @@ -9727,9 +9746,9 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda - sha256: 3a8e7798deafd0722b6b5da50c36b7f361a80b30165d600f7760d569a162ff95 - md5: 1920c3502e7f6688d650ab81cd3775fd +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.1-hde8ca8f_0.conda + sha256: 51194892b30adc20d8bfac8518e82cff811c62cb996527e1caf8c7814786e792 + md5: 49c832bff803d95a56190e7992b4b230 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -9737,8 +9756,8 @@ packages: license: Zlib license_family: Other purls: [] - size: 110843 - timestamp: 1754587144298 + size: 120872 + timestamp: 1764268364314 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313h54dd161_1.conda sha256: e6921de3669e1bbd5d050a3b771b46a887e7f4ffeb1ddd5e4d9fb01062a2f6e9 md5: 710d4663806d0f72b2fb414e936223b5 @@ -9756,16 +9775,14 @@ packages: - pkg:pypi/zstandard?source=hash-mapping size: 471496 timestamp: 1762512679097 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb - md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-h3691f8a_4.conda + sha256: 58e0344d81520c8734533fff64a28a5be7edf84618341fc70d3e20bd0a1fdc3e + md5: af7715829219de9043fcc5575e66d22e depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 567578 - timestamp: 1742433379869 + size: 559888 + timestamp: 1764431250718 diff --git a/pyproject.toml b/pyproject.toml index 4f0379c..c15b7cf 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ dependencies = [ "ultraplot>=1.63.0", "xanimate", "xarray>=2025.9.0", - "xdggs>=0.2.1", + "xdggs", "xvec>=0.5.1", "zarr[remote]>=3.1.3", "geocube>=0.7.1,<0.8", @@ -57,12 +57,16 @@ dependencies = [ "xgboost>=3.1.1,<4", "s3fs>=2025.10.0,<2026", "xarray-spatial", - "cupy-xarray>=0.1.4,<0.2", "memray>=1.19.1,<2", "xarray-histogram>=0.2.2,<0.3", "antimeridian>=0.4.5,<0.5", "duckdb>=1.4.2,<2", + "cupy-xarray>=0.1.4,<0.2", + "memray>=1.19.1,<2", + "xarray-histogram>=0.2.2,<0.3", + "antimeridian>=0.4.5,<0.5", + "duckdb>=1.4.2,<2", ] [project.scripts] create-grid = "entropice.grids:main" -darts = "entropice.darts:main" +darts = "entropice.darts:cli" alpha-earth = "entropice.alphaearth:main" era5 = "entropice.era5:cli" arcticdem = "entropice.arcticdem:cli" @@ -86,6 +90,7 @@ entropyc = { git = "ssh://git@github.com/AlbertEMC2Stein/entropyc", branch = "re entropy = { git = "ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git" } xanimate = { git = "https://github.com/davbyr/xAnimate" } xdem = { git = "https://github.com/GlacioHack/xdem" } +xdggs = { git = "https://github.com/relativityhd/xdggs", branch = "feature/make-plotting-useful" } xarray-spatial = { git = "https://github.com/relativityhd/xarray-spatial" } cudf-cu12 = { index = "nvidia" } cuml-cu12 = { index = "nvidia" } @@ -136,3 +141,4 @@ cudnn = ">=9.13.1.26,<10" cusparselt = ">=0.8.1.1,<0.9" cuda-version = "12.9.*" rapids = ">=25.10.0,<26" +healpix-geo = ">=0.0.6" diff --git a/scripts/01darts.sh b/scripts/01darts.sh index 8003fc0..e363b45 100644 --- a/scripts/01darts.sh +++ b/scripts/01darts.sh @@ -1,11 +1,11 @@ #! /bin/bash -pixi run darts --grid hex --level 3 -pixi run darts --grid hex --level 4 -pixi run darts --grid hex --level 5 -pixi run darts --grid hex --level 6 -pixi run darts --grid healpix --level 6 -pixi run darts --grid healpix --level 7 -pixi run darts --grid healpix --level 8 -pixi run darts --grid healpix --level 9 -pixi run darts --grid healpix --level 10 +pixi run darts extract_darts_mllabels --grid hex --level 3 +pixi run darts extract_darts_mllabels --grid hex --level 4 +pixi run darts extract_darts_mllabels --grid hex --level 5 +pixi run darts extract_darts_mllabels --grid hex --level 6 +pixi run darts extract_darts_mllabels --grid healpix --level 6 +pixi run darts extract_darts_mllabels --grid healpix --level 7 +pixi run darts extract_darts_mllabels --grid healpix --level 8 +pixi run darts extract_darts_mllabels --grid healpix --level 9 +pixi run darts extract_darts_mllabels --grid healpix --level 10 \ No newline at end of file diff --git a/scripts/02alphaearth.sh b/scripts/02alphaearth.sh index c8d32af..3eefca8 100644 --- a/scripts/02alphaearth.sh +++ b/scripts/02alphaearth.sh @@ -1,21 +1,21 @@ #!/bin/bash -pixi run alpha-earth download --grid hex --level 3 -pixi run alpha-earth download --grid hex --level 4 -pixi run alpha-earth download --grid hex --level 5 -pixi run alpha-earth download --grid hex --level 6 -pixi run alpha-earth download --grid healpix --level 6 -pixi run alpha-earth download --grid healpix --level 7 -pixi run alpha-earth download --grid healpix --level 8 -pixi run alpha-earth download --grid healpix --level 9 -pixi run alpha-earth download --grid healpix --level 10 +# pixi run alpha-earth download --grid hex --level 3 +# pixi run alpha-earth download --grid hex --level 4 +# pixi run alpha-earth download --grid hex --level 5 +# pixi run alpha-earth download --grid hex --level 6 +# pixi run alpha-earth download --grid healpix --level 6 +# pixi run alpha-earth download --grid healpix --level 7 +# pixi run alpha-earth download --grid healpix --level 8 +# pixi run alpha-earth download --grid healpix --level 9 +# pixi run alpha-earth download --grid healpix --level 10 pixi run alpha-earth combine-to-zarr --grid hex --level 3 pixi run alpha-earth combine-to-zarr --grid hex --level 4 pixi run alpha-earth combine-to-zarr --grid hex --level 5 -pixi run alpha-earth combine-to-zarr --grid hex --level 6 +# pixi run alpha-earth combine-to-zarr --grid hex --level 6 pixi run alpha-earth combine-to-zarr --grid healpix --level 6 pixi run alpha-earth combine-to-zarr --grid healpix --level 7 pixi run alpha-earth combine-to-zarr --grid healpix --level 8 pixi run alpha-earth combine-to-zarr --grid healpix --level 9 -pixi run alpha-earth combine-to-zarr --grid healpix --level 10 +# pixi run alpha-earth combine-to-zarr --grid healpix --level 10 diff --git a/src/entropice/alphaearth.py b/src/entropice/alphaearth.py index d568cf9..9a149f6 100644 --- a/src/entropice/alphaearth.py +++ b/src/entropice/alphaearth.py @@ -5,14 +5,18 @@ Date: October 2025 """ import warnings +from collections.abc import Generator from typing import Literal +import cudf +import cuml.cluster import cyclopts import ee import geemap import geopandas as gpd import numpy as np import pandas as pd +import sklearn.cluster import xarray as xr import xdggs from rich import pretty, print, traceback @@ -33,6 +37,22 @@ cli = cyclopts.App(name="alpha-earth") # 7454521782,230147807,10000000. +def _batch_grid(grid_gdf: gpd.GeoDataFrame, n_partitions: int) -> Generator[pd.DataFrame]: + # Simple partitioning by splitting the GeoDataFrame into n_partitions parts + centroids = pd.DataFrame({"x": grid_gdf.geometry.centroid.x, "y": grid_gdf.geometry.centroid.y}) + + # use cuml and cudf if len of centroids is larger than 100000 + if len(centroids) > 100000: + print(f"Using cuML KMeans for partitioning {len(centroids)} centroids") + centroids_cudf = cudf.DataFrame.from_pandas(centroids) + kmeans = cuml.cluster.KMeans(n_clusters=n_partitions, random_state=42) + labels = kmeans.fit_predict(centroids_cudf).to_pandas().to_numpy() + else: + labels = sklearn.cluster.KMeans(n_clusters=n_partitions, random_state=42).fit_predict(centroids) + for i in range(n_partitions): + yield grid_gdf.iloc[np.where(labels == i)[0]] + + @cli.command() def download(grid: Literal["hex", "healpix"], level: int): """Extract satellite embeddings from Google Earth Engine and map them to a grid. @@ -77,11 +97,11 @@ def download(grid: Literal["hex", "healpix"], level: int): return feature.set(mean_dict) # Process grid in batches of 100 - batch_size = 50 + batch_size = 25 all_results = [] n_batches = len(grid_gdf) // batch_size - for batch_num, batch_grid in track( - enumerate(np.array_split(grid_gdf, n_batches)), + for batch_grid in track( + _batch_grid(grid_gdf, n_batches), description="Processing batches...", total=n_batches, ): @@ -121,6 +141,7 @@ def combine_to_zarr(grid: Literal["hex", "healpix"], level: int): np.nan, dims=("year", "cell_ids", "band", "agg"), coords={"year": years, "cell_ids": cell_ids, "band": bands, "agg": aggs}, + name="embeddings", ).astype(np.float32) # ? These attributes are needed for xdggs @@ -141,8 +162,9 @@ def combine_to_zarr(grid: Literal["hex", "healpix"], level: int): a = xdggs.decode(a) + a = a.chunk({"year": 1, "cell_ids": 100000, "band": 64, "agg": 12}) zarr_path = get_embeddings_store(grid, level) - a.to_zarr(zarr_path, consolidated=False, mode="w", encoding=codecs.from_ds(a)) + a.to_zarr(zarr_path, consolidated=False, mode="w", encoding=codecs.from_da(a)) print(f"Saved combined embeddings to {zarr_path}.") diff --git a/src/entropice/codecs.py b/src/entropice/codecs.py index b8db1e6..c2f0282 100644 --- a/src/entropice/codecs.py +++ b/src/entropice/codecs.py @@ -36,3 +36,24 @@ def from_ds( if ds[var].dtype == "float64": encoding[var]["dtype"] = "float32" return encoding + + +def from_da(da: xr.DataArray, store_floats_as_float32: bool = True) -> dict: + """Create compression encoding for zarr DataArray storage. + + Creates Blosc compression configuration for the DataArray + using zstd compression with level 5. + + Args: + da (xr.DataArray): The xarray DataArray to create encoding for. + store_floats_as_float32 (bool, optional): Whether to store floating point data as float32. + Defaults to True. + + Returns: + dict: Encoding dictionary with compression settings. + + """ + encoding = {"compressors": BloscCodec(cname="zstd", clevel=5)} + if store_floats_as_float32 and da.dtype == "float64": + encoding["dtype"] = "float32" + return {da.name: encoding} diff --git a/src/entropice/darts.py b/src/entropice/darts.py index 07d6ac5..f45e415 100644 --- a/src/entropice/darts.py +++ b/src/entropice/darts.py @@ -10,17 +10,21 @@ from typing import Literal import cyclopts import geopandas as gpd +import pandas as pd from rich import pretty, print, traceback from rich.progress import track from stopuhr import stopwatch from entropice import grids -from entropice.paths import dartsl2_cov_file, dartsl2_file, get_darts_rts_file +from entropice.paths import darts_ml_training_labels_repo, dartsl2_cov_file, dartsl2_file, get_darts_rts_file traceback.install() pretty.install() +cli = cyclopts.App(name="darts-rts") + +@cli.command() def extract_darts_rts(grid: Literal["hex", "healpix"], level: int): """Extract RTS labels from DARTS dataset. @@ -81,8 +85,61 @@ def extract_darts_rts(grid: Literal["hex", "healpix"], level: int): stopwatch.summary() +@cli.command() +def extract_darts_mllabels(grid: Literal["hex", "healpix"], level: int): + with stopwatch("Load data"): + grid_gdf = grids.open(grid, level) + darts_mllabels = ( + gpd.GeoDataFrame( + pd.concat([gpd.read_file(f) for f in darts_ml_training_labels_repo.glob("**/TrainingLabel*.gpkg")]) + ) + .reset_index(drop=True) + .to_crs(grid_gdf.crs) + ) + # Filter out invalid labels + darts_mllabels = darts_mllabels[darts_mllabels.geometry.is_valid] + # Remove overlapping labels by dissolving + darts_mllabels = darts_mllabels[["geometry"]].dissolve().explode() + + darts_cov_mllabels = ( + gpd.GeoDataFrame( + pd.concat([gpd.read_file(f) for f in darts_ml_training_labels_repo.glob("**/ImageFootprints*.gpkg")]) + ) + .reset_index(drop=True) + .to_crs(grid_gdf.crs) + ) + darts_cov_mllabels = darts_cov_mllabels[["geometry"]].dissolve().explode() + with stopwatch("Extract RTS labels"): + grid_mllabels = grid_gdf.overlay(darts_mllabels.to_crs(grid_gdf.crs), how="intersection") + grid_cov_mllabels = grid_gdf.overlay(darts_cov_mllabels.to_crs(grid_gdf.crs), how="intersection") + + with stopwatch("Processing RTS"): + counts = grid_mllabels.groupby("cell_id").size() + grid_gdf["dartsml_rts_count"] = grid_gdf.cell_id.map(counts) + + areas = grid_mllabels.groupby("cell_id").apply(lambda x: x.geometry.area.sum(), include_groups=False) + grid_gdf["dartsml_rts_area"] = grid_gdf.cell_id.map(areas) + + areas_cov = grid_cov_mllabels.groupby("cell_id").apply(lambda x: x.geometry.area.sum(), include_groups=False) + grid_gdf["dartsml_covered_area"] = grid_gdf.cell_id.map(areas_cov) + grid_gdf["dartsml_coverage"] = grid_gdf["dartsml_covered_area"] / grid_gdf.geometry.area + grid_gdf["dartsml_rts_density"] = grid_gdf["dartsml_rts_area"] / grid_gdf["dartsml_covered_area"] + + # Apply corrections to NaNs + covered = ~grid_gdf["dartsml_coverage"].isna() + grid_gdf.loc[covered, "dartsml_rts_count"] = grid_gdf.loc[covered, "dartsml_rts_count"].fillna(0.0) + + grid_gdf["darts_has_coverage"] = ~grid_gdf["dartsml_coverage"].isna() + grid_gdf["darts_has_rts"] = ~grid_gdf["dartsml_rts_count"].isna() + + output_path = get_darts_rts_file(grid, level, labels=True) + grid_gdf.to_parquet(output_path) + print(f"Saved RTS labels to {output_path}") + stopwatch.summary() + + def main(): # noqa: D103 - cyclopts.run(extract_darts_rts) + cli() if __name__ == "__main__": diff --git a/src/entropice/dataset.py b/src/entropice/dataset.py index 464399d..75d695c 100644 --- a/src/entropice/dataset.py +++ b/src/entropice/dataset.py @@ -1,8 +1,19 @@ -"""Training dataset preparation and model training.""" +"""Training dataset preparation and model training. +Naming conventions: + +- Ensemble Dataset + - Member-Datasets: selection based on config +- L2-Datasets: ready to use XDGGS Xarray Datasets + - Currently implemented: embeddings (alpha-earth), ERA5-seasonal, ERA5-shoulder, ERA5-yearly, Arcticdem32m + - All L2 Datasets can be multidimensional, but all having at least the cell_ids dimension + - All L2 Datasets have at least one data variable + - Dimensions of L2 Datasets are e.g. time or aggregation +""" + +from dataclasses import dataclass, field from typing import Literal -import cyclopts import geopandas as gpd import pandas as pd import seaborn as sns @@ -11,12 +22,7 @@ from rich import pretty, traceback from sklearn import set_config from stopuhr import stopwatch -from entropice.paths import ( - get_darts_rts_file, - get_embeddings_store, - get_era5_stores, - get_train_dataset_file, -) +import entropice.paths traceback.install() pretty.install() @@ -26,105 +32,182 @@ set_config(array_api_dispatch=True) sns.set_theme("talk", "whitegrid") -shoulder_seasons = {10: "OND", 1: "JFM", 4: "AMJ", 7: "JAS"} -seasons = {10: "winter", 4: "summer"} - - -@stopwatch.f("Prepare ERA5 data", print_kwargs=["temporal"]) -def _prep_era5( - rts: gpd.GeoDataFrame, - temporal: Literal["yearly", "seasonal", "shoulder"], - grid: Literal["hex", "healpix"], - level: int, -) -> pd.DataFrame: - era5_df = [] - era5_store = get_era5_stores(temporal, grid=grid, level=level) - era5 = xr.open_zarr(era5_store, consolidated=False) - era5 = era5.sel(cell_ids=rts["cell_id"].values) - - for var in era5.data_vars: - df = era5[var].drop_vars("spatial_ref").to_dataframe() - if temporal == "yearly": - df["t"] = df.index.get_level_values("time").year - elif temporal == "seasonal": - df["t"] = ( - df.index.get_level_values("time") - .month.map(lambda x: seasons.get(x)) - .str.cat(df.index.get_level_values("time").year.astype(str), sep="_") - ) - elif temporal == "shoulder": - df["t"] = ( - df.index.get_level_values("time") - .month.map(lambda x: shoulder_seasons.get(x)) - .str.cat(df.index.get_level_values("time").year.astype(str), sep="_") - ) - df = ( - df.pivot_table(index="cell_ids", columns="t", values=var) - .rename(columns=lambda x: f"{var}_{x}") - .rename_axis(None, axis=1) +def _get_era5_tempus(df: pd.DataFrame, temporal: Literal["yearly", "seasonal", "shoulder"]): + if temporal == "yearly": + return df.index.get_level_values("time").year + elif temporal == "seasonal": + seasons = {10: "winter", 4: "summer"} + return ( + df.index.get_level_values("time") + .month.map(lambda x: seasons.get(x)) + .str.cat(df.index.get_level_values("time").year.astype(str), sep="_") + ) + elif temporal == "shoulder": + shoulder_seasons = {10: "OND", 1: "JFM", 4: "AMJ", 7: "JAS"} + return ( + df.index.get_level_values("time") + .month.map(lambda x: shoulder_seasons.get(x)) + .str.cat(df.index.get_level_values("time").year.astype(str), sep="_") ) - era5_df.append(df) - era5_df = pd.concat(era5_df, axis=1) - era5_df = era5_df.rename(columns={col: f"era5_{col}" for col in era5_df.columns if col != "cell_id"}) - return era5_df -@stopwatch("Prepare embeddings data") -def _prep_embeddings(rts: gpd.GeoDataFrame, grid: Literal["hex", "healpix"], level: int) -> pd.DataFrame: - embs_store = get_embeddings_store(grid=grid, level=level) - embeddings = xr.open_zarr(embs_store, consolidated=False).__xarray_dataarray_variable__ - embeddings = embeddings.sel(cell=rts["cell_id"].values) - - embeddings_df = embeddings.to_dataframe(name="value") - embeddings_df = embeddings_df.pivot_table(index="cell", columns=["year", "agg", "band"], values="value") - embeddings_df.columns = [f"{agg}_{band}_{year}" for year, agg, band in embeddings_df.columns] - - embeddings_df = embeddings_df.rename( - columns={col: f"embeddings_{col}" for col in embeddings_df.columns if col != "cell_id"} - ) - return embeddings_df +type L2Dataset = Literal["AlphaEarth", "ArcticDEM", "ERA5-yearly", "ERA5-seasonal", "ERA5-shoulder"] -def prepare_dataset(grid: Literal["hex", "healpix"], level: int, filter_target: bool = False): - """Prepare training dataset by combining DARTS RTS labels, ERA5 data, and embeddings. +@dataclass +class DatasetEnsemble: + grid: Literal["hex", "healpix"] + level: int + target: Literal["darts_rts", "darts_mllabels"] + members: list[L2Dataset] + dimension_filters: dict[L2Dataset, dict[str, list]] = field(default_factory=dict) + variable_filters: dict[L2Dataset, list[str]] = field(default_factory=dict) + filter_target: str | Literal[False] = False + add_lonlat: bool = True - Args: - grid (Literal["hex", "healpix"]): The grid type to use. - level (int): The grid level to use. + def _read_member(self, member: L2Dataset, targets: gpd.GeoDataFrame, lazy: bool = False) -> xr.Dataset: + if member == "AlphaEarth": + store = entropice.paths.get_embeddings_store(grid=self.grid, level=self.level) + elif member in ["ERA5-yearly", "ERA5-seasonal", "ERA5-shoulder"]: + store = entropice.paths.get_era5_stores(member.split("-")[1], grid=self.grid, level=self.level) + elif member == "ArcticDEM": + store = entropice.paths.get_arcticdem_stores(grid=self.grid, level=self.level) + else: + raise NotImplementedError(f"Member {member} not implemented.") - """ - rts = gpd.read_parquet(get_darts_rts_file(grid=grid, level=level)) - # Filter to coverage - if filter_target: - rts = rts[rts["darts_has_coverage"]] - # Convert hex cell_id to int - if grid == "hex": - rts["cell_id"] = rts["cell_id"].apply(lambda x: int(x, 16)) + ds = xr.open_zarr(store, consolidated=False) - # Add the lat / lon of the cell centers - rts["lon"] = rts.geometry.centroid.x - rts["lat"] = rts.geometry.centroid.y + # Apply variable filters + if member in self.variable_filters: + assert isinstance(self.variable_filters[member], list) and len(self.variable_filters[member]) >= 1, ( + f"Invalid variable filter for {member=}: {self.variable_filters[member]}" + " Variable filter values must be a list with one or more entries." + ) + ds = ds[self.variable_filters[member]] - # Get era5 data - era5_yearly = _prep_era5(rts, "yearly", grid, level) - era5_seasonal = _prep_era5(rts, "seasonal", grid, level) - era5_shoulder = _prep_era5(rts, "shoulder", grid, level) + # Apply dimension filters + if member in self.dimension_filters: + for dim, values in self.dimension_filters[member].items(): + assert isinstance(values, list) and len(values) >= 1, ( + f"Invalid dimension filter for {dim=}: {values}" + " Dimension filter values must be a list with one or more entries." + ) + ds = ds.sel({dim: values}) - # Get embeddings data - embeddings = _prep_embeddings(rts, grid, level) + # Delete all coordinates which are not in the dimension + for coord in ds.coords: + if coord not in ds.dims: + ds = ds.drop_vars(coord) - # Combine datasets by cell id / cell - with stopwatch("Combine datasets"): - dataset = rts.set_index("cell_id").join(era5_yearly).join(era5_seasonal).join(era5_shoulder).join(embeddings) - print(f"Prepared dataset with {len(dataset)} samples and {len(dataset.columns)} features.") + # Only load target cell ids + intersecting_cell_ids = set(ds["cell_ids"].values).intersection(set(targets["cell_id"].values)) + ds = ds.sel(cell_ids=list(intersecting_cell_ids)) - dataset_file = get_train_dataset_file(grid=grid, level=level) - dataset.reset_index().to_parquet(dataset_file) + # Actually read data into memory + if not lazy: + ds.load() + return ds + @stopwatch("Loading targets") + def _read_target(self) -> gpd.GeoDataFrame: + if self.target == "darts_rts": + target_store = entropice.paths.get_darts_rts_file(grid=self.grid, level=self.level) + elif self.target == "darts_mllabels": + target_store = entropice.paths.get_darts_rts_file(grid=self.grid, level=self.level, labels=True) + else: + raise NotImplementedError(f"Target {self.target} not implemented.") + targets = gpd.read_parquet(target_store) -def main(): - cyclopts.run(prepare_dataset) + # Filter to coverage + if self.filter_target: + targets = targets[targets[self.filter_target]] + # Convert hex cell_id to int + if self.grid == "hex": + targets["cell_id"] = targets["cell_id"].apply(lambda x: int(x, 16)) + # Add the lat / lon of the cell centers + if self.add_lonlat: + targets["lon"] = targets.geometry.centroid.x + targets["lat"] = targets.geometry.centroid.y -if __name__ == "__main__": - main() + return targets + + @stopwatch.f("Prepare ERA5 data", print_kwargs=["temporal"]) + def _prep_era5( + self, targets: gpd.GeoDataFrame, temporal: Literal["yearly", "seasonal", "shoulder"] + ) -> pd.DataFrame: + era5_df = [] + era5 = self._read_member(f"ERA5-{temporal}", targets) + + for var in era5.data_vars: + df = era5[var].to_dataframe() + df["t"] = _get_era5_tempus(df, temporal) + # If aggregations is not in dims, we can pivot directly + if "aggregations" not in era5.dims: + df = ( + df.pivot_table(index="cell_ids", columns="t", values=var) + .rename(columns=lambda x: f"era5_{var}_{x}") + .rename_axis(None, axis=1) + ) + else: + df = df.pivot_table(index="cell_ids", columns=["t", "aggregations"], values=var) + df.columns = [f"era5_{var}_{t}_{agg}" for t, agg in df.columns] + era5_df.append(df) + era5_df = pd.concat(era5_df, axis=1) + return era5_df + + @stopwatch("Prepare embeddings data") + def _prep_embeddings(self, targets: gpd.GeoDataFrame) -> pd.DataFrame: + embeddings = self._read_member("AlphaEarth", targets)["embeddings"] + + embeddings_df = embeddings.to_dataframe(name="value") + embeddings_df = embeddings_df.pivot_table(index="cell_ids", columns=["year", "agg", "band"], values="value") + embeddings_df.columns = [f"embeddings_{agg}_{band}_{year}" for year, agg, band in embeddings_df.columns] + return embeddings_df + + @stopwatch("Prepare arcticdem data") + def _prep_arcticdem(self, targets: gpd.GeoDataFrame) -> pd.DataFrame: + arcticdem = self._read_member("ArcticDEM", targets) + + arcticdem_df = arcticdem.to_dataframe().pivot_table(index="cell_ids", columns="aggregations") + arcticdem_df.columns = [f"arcticdem_{var}_{agg}" for var, agg in arcticdem_df.columns] + return arcticdem_df + + def print_stats(self): + targets = self._read_target() + print(f"=== Target: {self.target}") + print(f"\tNumber of target samples: {len(targets)}") + + n_cols = 2 if self.add_lonlat else 0 # Lat and Lon + for member in self.members: + ds = self._read_member(member, targets, lazy=True) + print(f"=== Member: {member}") + print(f"\tVariables ({len(ds.data_vars)}): {list(ds.data_vars)}") + print(f"\tDimensions: {dict(ds.sizes)}") + print(f"\tCoordinates: {list(ds.coords)}") + n_cols_member = len(ds.data_vars) + for dim in ds.sizes: + if dim != "cell_ids": + n_cols_member *= ds.sizes[dim] + print(f"\tNumber of features from member: {n_cols_member}") + n_cols += n_cols_member + print(f"=== Total number of features in dataset: {n_cols}") + + def create(self) -> pd.DataFrame: + targets = self._read_target() + + member_dfs = [] + for member in self.members: + if member.startswith("ERA5"): + member_dfs.append(self._prep_era5(targets, member.split("-")[1])) + elif member == "AlphaEarth": + member_dfs.append(self._prep_embeddings(targets)) + elif member == "ArcticDEM": + member_dfs.append(self._prep_arcticdem(targets)) + else: + raise NotImplementedError(f"Member {member} not implemented.") + + with stopwatch("Combine datasets"): + dataset = targets.set_index("cell_id").join(member_dfs) + print(f"Prepared dataset with {len(dataset)} samples and {len(dataset.columns)} features.") + return dataset diff --git a/src/entropice/paths.py b/src/entropice/paths.py index f2f1602..5c5fa76 100644 --- a/src/entropice/paths.py +++ b/src/entropice/paths.py @@ -34,6 +34,7 @@ watermask_file = WATERMASK_DIR / "simplified_water_polygons.shp" dartsl2_file = DARTS_DIR / "DARTS_NitzeEtAl_v1-2_features_2018-2023_level2.parquet" dartsl2_cov_file = DARTS_DIR / "DARTS_NitzeEtAl_v1-2_coverage_2018-2023_level2.parquet" +darts_ml_training_labels_repo = DARTS_DIR / "ML_training_labels" / "retrogressive_thaw_slumps" def _get_gridname(grid: Literal["hex", "healpix"], level: int) -> str: @@ -52,9 +53,12 @@ def get_grid_viz_file(grid: Literal["hex", "healpix"], level: int) -> Path: return vizfile -def get_darts_rts_file(grid: Literal["hex", "healpix"], level: int) -> Path: +def get_darts_rts_file(grid: Literal["hex", "healpix"], level: int, labels: bool = False) -> Path: gridname = _get_gridname(grid, level) - rtsfile = DARTS_DIR / f"{gridname}_darts.parquet" + if labels: + rtsfile = DARTS_DIR / f"{gridname}_darts-mllabels.parquet" + else: + rtsfile = DARTS_DIR / f"{gridname}_darts.parquet" return rtsfile