From 3e0e6e0d2d6774a8b9200b57dfdff23515e2d6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6lzer?= Date: Fri, 7 Nov 2025 15:56:54 +0100 Subject: [PATCH] Add first training --- .gitattributes | 2 + .gitignore | 4 + pixi.lock | 4795 ++++++++++++++++++++++++++++++++++++ pyproject.toml | 43 +- src/entropice/darts.py | 9 + src/entropice/era5.py | 195 +- src/entropice/paths.py | 28 +- src/entropice/training.py | 295 +++ src/entropice/watermask.py | 2 +- src/entropice/xvec.py | 13 + uv.lock | 65 +- 11 files changed, 5368 insertions(+), 83 deletions(-) create mode 100644 .gitattributes create mode 100644 pixi.lock create mode 100644 src/entropice/training.py create mode 100644 src/entropice/xvec.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..887a2c1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true diff --git a/.gitignore b/.gitignore index 6f0e547..6d5c3d5 100755 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ pg.ipynb playground.ipynb *fix*.ipynb *debug*.ipynb + +# pixi environments +.pixi +*.egg-info diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..94c4ab6 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4795 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-5_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.9-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.1.109-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.1.105-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.1.105-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.1.105-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.1.105-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.1.105-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.1.105-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.1-h1d6eff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cudnn-9.13.1.26-hbcb9cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-13.6.0-py313h586c94b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-13.6.0-py313h28b6081_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cusparselt-0.8.1.1-h58dd1b1_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/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + - 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_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.1.3.1-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.13.1.26-hf7e9902_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-dev-9.13.1.26-h58dd1b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.0.2.54-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.2.106-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.4.5.107-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.1.0.106-hd3aeb46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - 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/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/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/libhwloc-2.12.1-default_h7f8ec31_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h47877c9_openblas.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.8.0-h0af6554_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.8.0-h0af6554_0.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/libnvjitlink-12.9.86-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_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/libtorch-2.5.1-cuda120_h6f417b9_303.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/libxml2-16-2.15.1-hf2a90c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h031cc0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.4-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_3.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/linux-64/numpy-2.3.4-py313hf6604e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.9-hc97d973_101_cp313.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.5.1-cuda120_py313h869cad7_303.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.5.1-cuda126hf7c78f0_303.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.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/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/f0/09a30ca0551af20c7cefa7464b7ccb6f5407a550b83c4dcb15c410814849/anywidget-0.9.18-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/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/90/a4/07b5137c03d264c6a71129f502d73ec2ca2315389ffe5e7ceb7e48cc9a2c/astropy_iers_data-0.2025.10.27.0.39.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-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/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9a/8e641b5415e12036d8a206147b8229d917a767b7d939521458d90feddcf5/bokeh-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/c2/27da558ceb90d17b1e4c0cca5dab29f8aea7f63242a1005a8f54230ce5e6/boto3-1.40.64-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/c5/70bec18aef3fe9af63847d8766f81864b20daacd1dc7bf0c1d1ad90c7e98/botocore-1.40.64-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/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-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 + - pypi: https://files.pythonhosted.org/packages/4f/f4/4a65460d5cb6784128019fd707a87993f378db25e796eba01400a0903f62/cdsapi-0.7.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/27/6414b1b7e5e151300c54e28ad1cf3e3b34fe66dc3256a989b031166b1ba3/cdshealpix-0.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/01/2e486a570e095869a153c12381cb2c143eb0ed187067c3199306b33e5c36/cf_xarray-0.10.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + - 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/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-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/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/1d/2b313e157c9c7bba319e42f464d15073d32a81ac4827bdc5b7de38832b3e/cyclopts-4.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/2b/36b8753d881ff8fcf9c57eadd2b9379815cbe08fde7ded4e52c4cbb4b227/dask-2025.10.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/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/86/7c764bef28f5183bd67e548c60afb9fe3eb7a6d58eb321b72c4c4d2be021/distributed-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/dd/f95350e853a4468ec37478414fc04ae2d61dad7a947b3015c3dcc51a09b9/docutils-0.22.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/4a/7f91cfa7eec420394137c4e52ce43bad1d1eac707403c2853f66d341c8e1/earthengine_api-1.6.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/c5/8c6ffcc8ed751c22540fb3c7deb92932e9d96c27a7acf2c1e1e4e2c9e6fb/ecmwf_datastores_client-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/54/5e3b0e41799e17e5eff1547fda4aab53878c0adb4243de6b95f8ddef899e/ee_extra-2025.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/98/3e22f4386f6c1957f5994c9aa9cedd8a442bb75766bd0b2e2c1c92854af9/eemont-2025.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/09/f92f3d87c967d80fb73fa45a7b8ce6048fcf6bc9ba04ef0fb04443e209d3/eerepr-0.1.2-py3-none-any.whl + - pypi: git+ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git#9ca1bdf4afc4ac9b0ea29ebbc060ffecb5cffcf7 + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/ee/cd1f7e29979d0d71c8fabf5090a759b8d338bddf96aab286e39c7a7b2c0a/flox-0.10.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/a8/5f764f333204db0390362a4356d03a43626997f26818a0e9396f1b3bd8c9/folium-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.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/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 + - pypi: https://files.pythonhosted.org/packages/0b/70/d5cd0696eff08e62fdbdebe5b46527facb4e7220eabe0ac6225efab50168/geopandas-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/15/cf2a69ade4b194aa524ac75112d5caac37414b20a3a03e6865dfe0bd1539/geopy-2.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/d4/90197b416cb61cefd316964fd9e7bd8324bcbafabf40eef14a9f20b81974/google_api_core-2.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/5a/b00b944eb9cd0f2e39daf3bcce006cb503a89532f507e87e038e04bbea8c/google_api_python_client-2.186.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/05/adeb6c495aec4f9d93f9e2fc29eeef6e14d452bba11d15bdb874ce1d5b10/google_auth-2.42.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/a7/ca23dd006255f70e2bc469d3f9f0c82ea455335bfd682ad4d677adc435de/google_auth_httplib2-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/20/bfa472e327c8edee00f04beecc80baeddd2ab33ee0e86fd7654da49d45e9/google_cloud_core-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/6e/b47d83d3a35231c6232566341b0355cce78fd4e6988a7343725408547b2c/google_cloud_storage-3.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c3/ca/1ea2fd13ff9f8955b85e7956872fdb7050c4ace8a2306a6d177edb9cf7fe/google_crc32c-1.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/e8/eba9fece11d57a71e3e22ea672742c8f3cf23b35730c9e96db768b295216/googleapis_common_protos-1.71.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/99/5efd413072428bf1973c34d76a2f476a621848da86cecd8392ef59ba7640/h3-4.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b6/08/b349ae3b7051b37155f40e09852193fc56f9aafe2edf6ef3e190eb329a2f/h3ronpy-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - 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/be/8c/7f110a76aa94e96ab70574a98f58b6d1a463447ff841f4da754eaa709230/icechunk-0.2.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/de/6c1cf78cc0ecc45d98a0eb0d8920df7b90719f8643c7ed9b1bb700f95890/imagecodecs-2025.8.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.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 + - pypi: https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/69/e9858f2c0b99bf9f036348d1c84b8026f438bb6875effe6a9bcd9883dada/ipyleaflet-0.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/c5/d5e07995077e48220269c28a221e168c91123ad5ceee44d548f54a057fc0/ipython-9.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/95/ffe543060eb3b1570d78c3f2c1948c640a6758ff5c6479c27e474819115b/jupyter_leaflet-0.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f7/97/ad1a907c0173a90dd4df7228f24a3ec61058bc1a9ff8a0caec20a0cc622e/llvmlite-0.45.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/86/30142987e19a0f9bb464ada0dad647fc39b81bac5eacefdcdfff0d14c41e/lonboard-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/12/a1f2f4fdc6b7159c0d12249456f9fe454665b6126e98dbee9f2bd3cf735c/lz4-4.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a7/5e/19fb53bd69379498c47bc234ca4d2851cfbca333d6d6929b10251916da25/mapclassify-2.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/22/ff/6425bf5c20d79aa5b959d1ce9e65f599632345391381c9a104133fe0b171/matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/cd/9481a199a086ac9f91eaa232b56cff90ca7fdc2cb6658de93825b1007094/narwhals-2.10.1-py3-none-any.whl + - 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/78/7e/bf2e3634993d57f95305c7cee4c9c6cb3c9c78404ee7b49569a0dfecfe33/numba-0.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_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/fa/91/d96999b41e3146b6c0ce6bddc5ad85803cb4d743c95394562c2a4bb8cded/numcodecs-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_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/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/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/57/755dbd06530a27a5ed74f8cb0a7a44a21722ebf318edbe67ddbd7fb28f88/pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/93/023955c26b0ce614342d11cc0652f1e45e32393b6ab9d11a664a60e9b7b7/plotly-6.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4e/6d/280c4c2ce28b1593a19ad5239c8b826871fc6ec275c21afc8e1820108039/proto_plus-1.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/51/0b1cbad62074439b867b4e04cc09b93f6699d78fd191bed2bbb44562e077/protobuf-6.33.0-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/7b/e9a6fa461ef266c5a23485004934b8f08a2a8ddc447802161ea56d9837dd/psygnal-0.15.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/8b/5362443737a5307a7b67c1017c42cd104213189b4970bf607e05faf9c525/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-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/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/a9/79eca15094f7806a3adcf0bb976ab4346b0fb1bd87956c1933df44546c14/pyogrio-0.11.1-cp313-cp313-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f8/85/c2b1706e51942de19076eff082f8495e57d5151364e78b5bef4af4a1d94a/pyproj-3.7.2-cp313-cp313-manylinux_2_28_x86_64.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/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 + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/05/19/94d6c66184c7d0f9374330c714f62c147dbb53eda9efdcc8fc6e2ac454c5/rasterio-1.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/98/7e6d147fd16a10a5f821db6e25f192265d6ecca3d82957a4fdd592cad49c/ratelim-0.1.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/e5/4f4fc949e7eb8415a57091767969e1d314dcf06b74b85bbbf29991395af4/rioxarray-0.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/ee/a324d3198da151820a326c1f988caaa4f37fc27955148a76fff7a2d787a9/rpds_py-0.28.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-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/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.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/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/72/739e042f3e8d61be242ec024a1eb5cde76f8ab29590ddadf143eaa844f91/smart_geocubes-0.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-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/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/31/7d601cc639b0362a213552a838af601105591598a4b08ec80666458083d2/stopuhr-0.0.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/cc/099fab5a73909a117e9689c7da4c39a248595187f0f30dd879ad1d2c34ce/tblib-3.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/5e/56c751afab61336cf0e7aa671b134255a30f15f59cd9e04f59c598a37ff5/tifffile-2025.10.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-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/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-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/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/5f/e4eabd0cc6684c5b208c2abc5c3459449c4d15be1694a9bbcf51e0e135fd/wrapt-2.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: git+https://github.com/davbyr/xAnimate#750e03e480db309407e09f4ffe5f49522a4c4f9b + - pypi: https://files.pythonhosted.org/packages/c3/78/4d6d68555a92cb97b4c192759c4ab585c5cb23490f64d4ddf12c66a3b051/xarray-2025.10.1-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/76/86/659f5b3c692d3813edcb373b9260e79303bc4a81234b80e5438194e0c5f2/xee-0.0.22-py3-none-any.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/5b/8f/447cc9cb57456d786204af0f450ffb920039104c5eff6626337c9f403bd1/xyzservices-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-5_kmp_llvm.conda + build_number: 5 + sha256: 261526e6bc3866db41ad32c6ccfb3694b07fe8a0ab91616a71fa90f8b365154b + md5: af759c8ce5aed7e5453dca614c5bb831 + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8250 + timestamp: 1760488483285 +- pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + name: affine + version: 2.4.0 + sha256: 8a3df80e2b2378aef598a83c1392efd47967afec4242021a0b06b4c7cbc61a92 + requires_dist: + - pydocstyle ; extra == 'dev' + - flake8 ; extra == 'dev' + - coveralls ; extra == 'dev' + - pytest>=4.6 ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + name: aiohappyeyeballs + version: 2.6.1 + sha256: f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: aiohttp + version: 3.13.2 + sha256: ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; extra == 'speedups' + - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + name: aiosignal + version: 1.4.0 + sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e + requires_dist: + - frozenlist>=1.1.0 + - typing-extensions>=4.2 ; python_full_version < '3.13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2b/f0/09a30ca0551af20c7cefa7464b7ccb6f5407a550b83c4dcb15c410814849/anywidget-0.9.18-py3-none-any.whl + name: anywidget + version: 0.9.18 + sha256: 944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8 + requires_dist: + - ipywidgets>=7.6.0 + - psygnal>=0.8.1 + - typing-extensions>=4.2.0 + - watchfiles>=0.18.0 ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl + name: appdirs + version: 1.4.4 + sha256: a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 +- pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + name: array-api-compat + version: 1.12.0 + sha256: a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b + requires_dist: + - cupy ; extra == 'cupy' + - dask>=2024.9.0 ; extra == 'dask' + - jax ; extra == 'jax' + - numpy>=1.22 ; extra == 'numpy' + - torch ; extra == 'pytorch' + - sparse>=0.15.1 ; extra == 'sparse' + - ndonnx ; extra == 'ndonnx' + - furo ; extra == 'docs' + - linkify-it-py ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - array-api-strict ; extra == 'dev' + - dask[array]>=2024.9.0 ; extra == 'dev' + - jax[cpu] ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - pytest ; extra == 'dev' + - torch ; extra == 'dev' + - 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 + name: array-api-extra + version: 0.9.0 + sha256: 36b34e29380b678007f151511be950cb2ea199606fe4a7ad466efc5044ea9e44 + requires_dist: + - array-api-compat>=1.12.0,<2 + requires_python: '>=3.10' +- 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 + name: arro3-compute + version: 0.6.5 + sha256: 5f097338954c7f9baa53dbb873c5932e6d62d413056fbd28d76bbd7f87646d73 + requires_dist: + - arro3-core + requires_python: '>=3.9' +- 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 + name: arro3-core + version: 0.6.5 + sha256: 5c3ee95603e375401a58ff763ce2c8aa858e0c4f757c1fb719f48fb070f540b2 + requires_dist: + - typing-extensions ; python_full_version < '3.12' + requires_python: '>=3.9' +- 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 + name: arro3-io + version: 0.6.5 + sha256: 258ba15788a25b55f3d8b0bf97e53a9bb70c8afce434238959660983d06ca552 + requires_dist: + - arro3-core + requires_python: '>=3.9' +- 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 + name: astropy + version: 7.1.1 + sha256: fed17a4895edf118e1348560de9deb0596596a41f33314c0d05edce02eb3d1e8 + requires_dist: + - numpy>=1.23.2 + - pyerfa>=2.0.1.1 + - astropy-iers-data>=0.2025.9.29.0.35.48 + - pyyaml>=6.0.0 + - packaging>=22.0.0 + - scipy>=1.9.2 ; extra == 'recommended' + - matplotlib>=3.6.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' + - 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' + - 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' + - pytz>=2016.10 ; extra == 'all' + - jplephem>=2.6 ; 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' + - s3fs>=2023.4.0 ; extra == 'all' + - uncompresspy>=0.4.0 ; extra == 'all' + - coverage>=6.4.4 ; extra == 'test' + - pre-commit>=2.9.3 ; extra == 'test' + - pytest>=8.0.0 ; extra == 'test' + - pytest-doctestplus>=1.4.0 ; extra == 'test' + - pytest-astropy-header>=0.2.1 ; extra == 'test' + - pytest-astropy>=0.10.0 ; extra == 'test' + - pytest-xdist>=2.5.0 ; extra == 'test' + - 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' + - 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' + - astropy[recommended] ; extra == 'docs' + - sphinx ; 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' + - jinja2>=3.1.3 ; extra == 'docs' + - sphinxcontrib-globalsubs>=0.1.1 ; extra == 'docs' + - matplotlib>=3.9.1 ; extra == 'docs' + - astropy[recommended] ; extra == 'dev' + - astropy[test] ; extra == 'dev' + - astropy[docs] ; extra == 'dev' + - astropy[typing] ; extra == 'dev' + - tox ; extra == 'dev-all' + - astropy[dev] ; extra == 'dev-all' + - astropy[test-all] ; extra == 'dev-all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/90/a4/07b5137c03d264c6a71129f502d73ec2ca2315389ffe5e7ceb7e48cc9a2c/astropy_iers_data-0.2025.10.27.0.39.10-py3-none-any.whl + name: astropy-iers-data + version: 0.2025.10.27.0.39.10 + sha256: aa91d24155eec2e7dafffd9ce0f046cd1fd6bcd995a76904aba3ef3f6836c4dc + requires_dist: + - pytest ; extra == 'docs' + - hypothesis ; extra == 'test' + - pytest ; extra == 'test' + - pytest-remotedata ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl + name: asttokens + version: 3.0.0 + sha256: e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2 + requires_dist: + - astroid>=2,<4 ; extra == 'astroid' + - astroid>=2,<4 ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + name: attrs + version: 25.4.0 + sha256: adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b1/3c/b90d5afc2e47c4a45f4bba00f9c3193b0417fad5ad3bb07869f9d12832aa/azure_core-1.36.0-py3-none-any.whl + name: azure-core + version: 1.36.0 + sha256: fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b + requires_dist: + - requests>=2.21.0 + - typing-extensions>=4.6.0 + - aiohttp>=3.0 ; extra == 'aio' + - opentelemetry-api~=1.26 ; extra == 'tracing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3d/9e/1c90a122ea6180e8c72eb7294adc92531b0e08eb3d2324c2ba70d37f4802/azure_storage_blob-12.27.1-py3-none-any.whl + name: azure-storage-blob + version: 12.27.1 + sha256: 65d1e25a4628b7b6acd20ff7902d8da5b4fde8e46e19c8f6d213a3abc3ece272 + requires_dist: + - azure-core>=1.30.0 + - cryptography>=2.1.4 + - typing-extensions>=4.6.0 + - isodate>=0.6.1 + - azure-core[aio]>=1.30.0 ; extra == 'aio' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl + name: beautifulsoup4 + version: 4.14.2 + sha256: 5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 + requires_dist: + - soupsieve>1.2 + - typing-extensions>=4.0.0 + - cchardet ; extra == 'cchardet' + - chardet ; extra == 'chardet' + - charset-normalizer ; extra == 'charset-normalizer' + - html5lib ; extra == 'html5lib' + - lxml ; extra == 'lxml' + requires_python: '>=3.7.0' +- pypi: https://files.pythonhosted.org/packages/96/9a/8e641b5415e12036d8a206147b8229d917a767b7d939521458d90feddcf5/bokeh-3.8.0-py3-none-any.whl + name: bokeh + version: 3.8.0 + sha256: 117c5e559231ad39fef87891a1a1b62b3bfefbaa47d536023537338f46015841 + requires_dist: + - jinja2>=2.9 + - contourpy>=1.2 + - narwhals>=1.13 + - numpy>=1.16 + - packaging>=16.8 + - pandas>=1.2 + - pillow>=7.1.0 + - pyyaml>=3.10 + - tornado>=6.2 ; sys_platform != 'emscripten' + - xyzservices>=2021.9.1 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/65/c2/27da558ceb90d17b1e4c0cca5dab29f8aea7f63242a1005a8f54230ce5e6/boto3-1.40.64-py3-none-any.whl + name: boto3 + version: 1.40.64 + sha256: 35ca3dd80dd90d5f4e8ed032440f28790696fdf50f48c0d16a09a75675f9112f + requires_dist: + - botocore>=1.40.64,<1.41.0 + - jmespath>=0.7.1,<2.0.0 + - s3transfer>=0.14.0,<0.15.0 + - botocore[crt]>=1.21.0,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/8f/c5/70bec18aef3fe9af63847d8766f81864b20daacd1dc7bf0c1d1ad90c7e98/botocore-1.40.64-py3-none-any.whl + name: botocore + version: 1.40.64 + sha256: 6902b3dadfba1fbacc9648171bef3942530d8f823ff2bdb0e585a332323f89fc + 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' + 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 + version: 1.6.0 + sha256: 456757c9525b0b12356f472e38020ed4b76b18375fd76e055f8d33fb62956f5e + requires_dist: + - numpy + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - gitpython ; extra == 'doc' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/73/03/6b5370fc626e6f480c4a0b4cb25b3459d390745010618b21b4b573423a53/bqplot-0.12.45-py2.py3-none-any.whl + name: bqplot + version: 0.12.45 + sha256: cf2e046adb401670902ab53a18d9f63540091279bc45c4ef281bfdadf6e7e92c + requires_dist: + - ipywidgets>=7.5.0,<9 + - traitlets>=4.3.0 + - traittypes>=0.0.6 + - numpy>=1.10.4 + - pandas>=1.0.0,<3.0.0 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl + name: branca + version: 0.8.2 + sha256: 2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c + requires_dist: + - jinja2>=3 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 + md5: 51a19bba1b8ebfb60df25cde030b7ebc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260341 + timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + sha256: 3b5ad78b8bb61b6cdc0978a6a99f8dfb2cc789a451378d054698441005ecbdb6 + md5: f9e5fbc24009179e8b0409624691758a + depends: + - __unix + license: ISC + purls: [] + size: 155907 + timestamp: 1759649036195 +- pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + name: cachetools + version: 6.2.1 + sha256: 09868944b6dde876dfd44e1d47e18484541eaf12f26f29b7af91b26cc892d701 + requires_python: '>=3.9' +- 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 + name: cartopy + version: 0.25.0 + sha256: 1c388824cb13e4fa9c2901dc4fbb2dbe9547acd2f4a6a3440983d4e6c6973ae3 + requires_dist: + - numpy>=1.23 + - matplotlib>=3.6 + - shapely>=2.0 + - packaging>=21 + - pyshp>=2.3 + - pyproj>=3.3.1 + - pydata-sphinx-theme ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-gallery ; extra == 'doc' + - pykdtree ; extra == 'speedups' + - fiona ; extra == 'speedups' + - owslib>=0.27.0 ; extra == 'ows' + - pillow>=9.1 ; extra == 'ows' + - pillow>=9.1 ; extra == 'plotting' + - scipy>=1.9 ; extra == 'plotting' + - beautifulsoup4 ; extra == 'srtm' + - pytest>=5.1.2 ; extra == 'test' + - pytest-mpl>=0.11 ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest-cov ; extra == 'test' + - coveralls ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4f/f4/4a65460d5cb6784128019fd707a87993f378db25e796eba01400a0903f62/cdsapi-0.7.7-py2.py3-none-any.whl + name: cdsapi + version: 0.7.7 + sha256: 384c1658572d6dc53f4111f6dd46fcdfe6fea54a688af9756d71f6fe9118b66d + requires_dist: + - ecmwf-datastores-client>=0.4.0 + - requests>=2.5.0 + - tqdm + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/27/27/6414b1b7e5e151300c54e28ad1cf3e3b34fe66dc3256a989b031166b1ba3/cdshealpix-0.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: cdshealpix + version: 0.7.2 + sha256: 55ec0d3733b0908968db5ed879718317602f00bf60cfaeebd2aa8e647a3b37b7 + requires_dist: + - astropy<5.3 ; python_full_version == '3.8.*' + - astropy ; python_full_version >= '3.9' + - matplotlib ; extra == 'plot' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl + name: certifi + version: 2025.10.5 + sha256: 0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/41/01/2e486a570e095869a153c12381cb2c143eb0ed187067c3199306b33e5c36/cf_xarray-0.10.9-py3-none-any.whl + name: cf-xarray + version: 0.10.9 + sha256: a41fa218e8f31b6c82c4687d92951f536186e288e5da6d56efd92a57b628eb18 + requires_dist: + - xarray>=2024.7.0 + - matplotlib ; extra == 'all' + - pint>=0.18,!=0.24.0 ; extra == 'all' + - shapely ; extra == 'all' + - regex ; extra == 'all' + - rich ; extra == 'all' + - pooch ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cffi + version: 2.0.0 + sha256: c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cftime + version: 1.6.5 + sha256: e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.4 + sha256: a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + name: click + version: 8.3.0 + sha256: 9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl + name: click-plugins + version: 1.1.1.2 + sha256: 008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6 + requires_dist: + - click>=4.0 + - pytest>=3.6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - wheel ; extra == 'dev' + - coveralls ; extra == 'dev' +- pypi: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl + name: cligj + version: 0.7.2 + sha256: c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df + requires_dist: + - click>=4.0 + - pytest-cov ; extra == 'test' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,<4' +- pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + name: cloudpickle + version: 3.1.1 + sha256: c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + name: comm + version: 0.2.3 + sha256: c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 + requires_dist: + - pytest ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.9-py313hd8ed1ab_101.conda + noarch: generic + sha256: 31da683e8a15e2062adfb29c9fb23d4253550a0b3c9be1cd45530f88796b4644 + md5: 367133808e89325690562099851529c8 + depends: + - python >=3.13,<3.14.0a0 + - python_abi * *_cp313 + license: Python-2.0 + 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 + sha256: a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec + requires_dist: + - cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' + - cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox[uv]>=2024.4.15 ; extra == 'nox' + - cryptography-vectors==46.0.3 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.11.11 ; extra == 'pep8test' + - mypy>=1.14 ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.8,!=3.9.0,!=3.9.1' +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.1.109-ha770c72_0.conda + sha256: 3a9888c614487ef04aa41ec4ea1305029553b0601df76c93e8772a41a0adba51 + md5: d640e026b9bddf5341a053cbf38aad7d + depends: + - cuda-version >=12.1,<12.2.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1140486 + timestamp: 1702587684223 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.1.105-hd3aeb46_0.conda + sha256: a5445de08c22aa6e6ee1ad45875d6dbb745a5757d246888d1fb7edd8e25804f1 + md5: e2ab3aeff4d18c82b3e7025a2ec3cecc + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart_linux-64 12.1.105 h59595ed_0 + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 22469 + timestamp: 1702599512006 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.1.105-h59595ed_0.conda + sha256: f93b346839bced489bb478dfc960de91cd88f8960c5d1e6043131eedb20b51f5 + md5: 62288e4d8c7ae6794a7989d62529e067 + depends: + - cuda-cccl_linux-64 + - cuda-cudart-static_linux-64 + - cuda-cudart_linux-64 + - cuda-version >=12.1,<12.2.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 329421 + timestamp: 1702599530225 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.1.105-h59595ed_0.conda + sha256: 0b3744f02967b1c8863eaac64ce79c403cdf71b3a34231385032d45102b1ef92 + md5: 37e192a1d033171e9a5830075825eb5f + depends: + - cuda-version >=12.1,<12.2.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 656806 + timestamp: 1702599459520 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.1.105-h59595ed_0.conda + sha256: 08283c44d3dcaeba7dfc6757705937366780885ec2e04d0b81394c1b0ca1a089 + md5: f8229a887df2311217d1528cc205073b + depends: + - cuda-version >=12.1,<12.2.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 182961 + timestamp: 1702599479531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.1.105-hd3aeb46_0.conda + sha256: 8ff7ac4a41f46c1a1ecaf414572280d1a1e87e93c0522f1b9087db51b18f5bd6 + md5: 361041b17b31f25e60ac43127f52bd3a + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 17973705 + timestamp: 1702588290719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.1.105-h59595ed_0.conda + sha256: d4175465d43790889d05a2c03e49c0c50cc552a697b1a6b1fd01d001b7bf761a + md5: a8e1192335156d6e0a8972794cd1da49 + depends: + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 31505 + timestamp: 1702588384714 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.1-h1d6eff3_3.conda + sha256: ecca7ab9f8ee23cb7a8b75f47e901d03b57adc7bc2d530ac0091dae31738c303 + md5: 913018efd4acd03c48f15cb60d2bbf97 + constrains: + - cudatoolkit 12.1|12.1.* + - __cuda >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 21055 + timestamp: 1709765863068 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cudnn-9.13.1.26-hbcb9cd8_0.conda + sha256: e7fee0538f05969ab3b33ac93d892ab777c8ce1a34b1ffd207aa339b82e18b49 + md5: 7ebbea86a820fdc69ffa044b7c9729cb + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn-dev 9.13.1.26 h58dd1b1_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - cudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 19353 + timestamp: 1759247527005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-13.6.0-py313h586c94b_2.conda + sha256: 8e1b0bf555b5ac78d620ccfd20d70c45b717eb6f074631b1a9e962c5d8f0e484 + md5: 0685ae3980f823b2ca78552f7d8d4033 + depends: + - cuda-cudart-dev_linux-64 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py313h28b6081_2 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: [] + size: 359537 + timestamp: 1757732883343 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-13.6.0-py313h28b6081_2.conda + sha256: 56b2ebb09c8a74746f1dbf660bb7a50af562e9416a2f9733d8e8715503cca81a + md5: 388fb72307f756f7f2c7f5928647bc6b + depends: + - __glibc >=2.17,<3.0.a0 + - fastrlock >=0.8.3,<0.9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - libcusolver >=11,<12.0a0 + - cuda-nvrtc >=12,<13.0a0 + - libcufft >=11,<12.0a0 + - libcurand >=10,<11.0a0 + - cupy >=13.6.0,<13.7.0a0 + - libcusparse >=12,<13.0a0 + - scipy >=1.7,<1.17 + - optuna ~=3.0 + - cutensor >=2.3.1.0,<3.0a0 + - __cuda >=12.0 + - cuda-version >=12,<13.0a0 + - nccl >=2.27.7.1,<3.0a0 + - libcublas >=12,<13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy?source=hash-mapping + size: 56733316 + timestamp: 1757732780713 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cusparselt-0.8.1.1-h58dd1b1_0.conda + sha256: 80432349a54d646c1f38abf1feb4b43c517a35794b56968952fa6a0f9a3d88c2 + md5: eb0b3131dbd80890db9d84d1dcabf768 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-cuSPARSELt-Software-License-Agreement + purls: [] + size: 150881343 + timestamp: 1757535886889 +- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + name: cycler + version: 0.12.1 + sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 + requires_dist: + - ipython ; extra == 'docs' + - matplotlib ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/4d/1d/2b313e157c9c7bba319e42f464d15073d32a81ac4827bdc5b7de38832b3e/cyclopts-4.2.1-py3-none-any.whl + name: cyclopts + version: 4.2.1 + sha256: 17a801faa814988b0307385ef8aaeb6b14b4d64473015a2d66bde9ea13f14d9c + requires_dist: + - attrs>=23.1.0 + - docstring-parser>=0.15,<4.0 + - rich-rst>=1.3.1,<2.0.0 + - rich>=13.6.0 + - tomli>=2.0.0 ; python_full_version < '3.11' + - typing-extensions>=4.8.0 ; python_full_version < '3.11' + - ipdb>=0.13.9 ; extra == 'debug' + - line-profiler>=3.5.1 ; extra == 'debug' + - coverage[toml]>=5.1 ; extra == 'dev' + - pre-commit>=2.16.0 ; extra == 'dev' + - pydantic>=2.11.2,<3.0.0 ; extra == 'dev' + - pytest-cov>=3.0.0 ; extra == 'dev' + - pytest-mock>=3.7.0 ; extra == 'dev' + - pytest>=8.2.0 ; extra == 'dev' + - pyyaml>=6.0.1 ; extra == 'dev' + - toml>=0.10.2,<1.0.0 ; extra == 'dev' + - trio>=0.10.0 ; extra == 'dev' + - gitpython>=3.1.31 ; extra == 'docs' + - myst-parser[linkify]>=3.0.1,<5.0.0 ; extra == 'docs' + - sphinx-autodoc-typehints>=1.25.2,<4.0.0 ; extra == 'docs' + - sphinx-copybutton>=0.5,<1.0 ; extra == 'docs' + - sphinx-rtd-dark-mode>=1.3.0,<2.0.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0,<4.0.0 ; extra == 'docs' + - sphinx>=7.4.7,<8.2.0 ; extra == 'docs' + - tomli>=2.0.0 ; python_full_version < '3.11' and extra == 'toml' + - trio>=0.10.0 ; extra == 'trio' + - pyyaml>=6.0.1 ; extra == 'yaml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/2b/36b8753d881ff8fcf9c57eadd2b9379815cbe08fde7ded4e52c4cbb4b227/dask-2025.10.0-py3-none-any.whl + name: dask + version: 2025.10.0 + sha256: 86c0a4aecbed3eae938f13a52bcc3fdc35852cce34d7d701590c15850b92506e + requires_dist: + - click>=8.1 + - cloudpickle>=3.0.0 + - fsspec>=2021.9.0 + - packaging>=20.0 + - partd>=1.4.0 + - pyyaml>=5.3.1 + - toolz>=0.10.0 + - importlib-metadata>=4.13.0 ; python_full_version < '3.12' + - numpy>=1.24 ; extra == 'array' + - dask[array] ; extra == 'dataframe' + - pandas>=2.0 ; extra == 'dataframe' + - pyarrow>=14.0.1 ; extra == 'dataframe' + - distributed==2025.10.0 ; extra == 'distributed' + - bokeh>=3.1.0 ; extra == 'diagnostics' + - jinja2>=2.10.3 ; extra == 'diagnostics' + - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete' + - pyarrow>=14.0.1 ; extra == 'complete' + - lz4>=4.3.2 ; extra == 'complete' + - pandas[test] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pre-commit ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl + name: debugpy + version: 1.8.17 + sha256: 60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl + name: decorator + version: 5.2.1 + sha256: d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + name: deprecated + version: 1.3.1 + sha256: 597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f + requires_dist: + - wrapt>=1.10,<3 + - inspect2 ; python_full_version < '3' + - tox ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - bump2version<1 ; extra == 'dev' + - setuptools ; python_full_version >= '3.12' and extra == 'dev' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/e6/86/7c764bef28f5183bd67e548c60afb9fe3eb7a6d58eb321b72c4c4d2be021/distributed-2025.10.0-py3-none-any.whl + name: distributed + version: 2025.10.0 + sha256: 613281c2796e4b3f349c9a1c0ef95b84a6b58f7a17d93206758a6902bd96913d + requires_dist: + - click>=8.0 + - cloudpickle>=3.0.0 + - dask==2025.10.0 + - jinja2>=2.10.3 + - locket>=1.0.0 + - msgpack>=1.0.2 + - packaging>=20.0 + - psutil>=5.8.0 + - pyyaml>=5.4.1 + - sortedcontainers>=2.0.5 + - tblib>=1.6.0 + - toolz>=0.11.2 + - tornado>=6.2.0 + - urllib3>=1.26.5 + - zict>=3.0.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + name: docstring-parser + version: 0.17.0 + sha256: cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 + requires_dist: + - pre-commit>=2.16.0 ; python_full_version >= '3.9' and extra == 'dev' + - pydoctor>=25.4.0 ; extra == 'dev' + - pytest ; extra == 'dev' + - pydoctor>=25.4.0 ; extra == 'docs' + - pytest ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/66/dd/f95350e853a4468ec37478414fc04ae2d61dad7a947b3015c3dcc51a09b9/docutils-0.22.2-py3-none-any.whl + name: docutils + version: 0.22.2 + sha256: b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + name: donfig + version: 0.8.1.post1 + sha256: 2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d + requires_dist: + - pyyaml + - sphinx>=4.0.0 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pytest ; extra == 'docs' + - cloudpickle ; extra == 'docs' + - pytest ; extra == 'test' + - cloudpickle ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e8/4a/7f91cfa7eec420394137c4e52ce43bad1d1eac707403c2853f66d341c8e1/earthengine_api-1.6.14-py3-none-any.whl + name: earthengine-api + version: 1.6.14 + sha256: f44d66cc65b86d63cc20d56187b20d12c0a69b8cd6a4020ff71bbce5e95fe789 + requires_dist: + - google-cloud-storage + - google-api-python-client>=1.12.1 + - google-auth>=1.4.1 + - google-auth-httplib2>=0.0.3 + - httplib2>=0.9.2,<1.dev0 + - requests + - absl-py ; extra == 'tests' + - geopandas ; extra == 'tests' + - numpy ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1b/c5/8c6ffcc8ed751c22540fb3c7deb92932e9d96c27a7acf2c1e1e4e2c9e6fb/ecmwf_datastores_client-0.4.0-py3-none-any.whl + name: ecmwf-datastores-client + version: 0.4.0 + sha256: 1c048dfff371912a72150e74726d5fb2bd30d9e5f165e503b58f367b58f7df91 + requires_dist: + - attrs + - multiurl>=0.3.7 + - requests + - typing-extensions + - cdsapi>=0.7.6 ; extra == 'legacy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/65/54/5e3b0e41799e17e5eff1547fda4aab53878c0adb4243de6b95f8ddef899e/ee_extra-2025.7.2-py3-none-any.whl + name: ee-extra + version: 2025.7.2 + sha256: facdde6309e14bdcb60991e61938da40af047c0848738c5ffb3b260577dc3cc7 + requires_dist: + - earthengine-api>=1.5.24 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/06/98/3e22f4386f6c1957f5994c9aa9cedd8a442bb75766bd0b2e2c1c92854af9/eemont-2025.7.1-py3-none-any.whl + name: eemont + version: 2025.7.1 + sha256: 38b73774f74c43afb4f981e92a219307a95f5bc8adc9897938f52111f64d11a6 + requires_dist: + - beautifulsoup4 + - ee-extra>=2025.7.2 + - numpy + - pandas + - python-box>=6.0.0 + - geopy + - requests + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/fa/09/f92f3d87c967d80fb73fa45a7b8ce6048fcf6bc9ba04ef0fb04443e209d3/eerepr-0.1.2-py3-none-any.whl + name: eerepr + version: 0.1.2 + sha256: f89731bde17de3d1e378b58a4cc9734f2c885014f56c2fe5eeab285d6eeb536c + requires_dist: + - earthengine-api + requires_python: '>=3.8' +- pypi: ./ + name: entropice + version: 0.1.0 + sha256: 5eafeeeb08de711ba0c2a37479ab529ba83b96cd42614cb400aa143140f64a93 + requires_dist: + - aiohttp>=3.12.11 + - bokeh>=3.7.3 + - bottleneck>=1.6.0 + - cartopy>=0.24.1 + - cdsapi>=0.7.6 + - cyclopts>=4.0.0 + - dask>=2025.5.1 + - distributed>=2025.5.1 + - earthengine-api>=1.6.9 + - eemont>=2025.7.1 + - entropy @ git+ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git + - flox>=0.10.4 + - folium>=0.19.7 + - geemap>=0.36.3 + - geopandas>=1.1.0 + - h3>=4.2.2 + - h5netcdf>=1.6.4 + - ipycytoscape>=1.3.3 + - ipykernel>=6.29.5 + - ipywidgets>=8.1.7 + - mapclassify>=2.9.0 + - matplotlib>=3.10.3 + - netcdf4>=1.7.2 + - numba>=0.62.1 + - numbagg>=0.9.3 + - numpy>=2.3.0 + - odc-geo[all]>=0.4.10 + - opt-einsum>=3.4.0 + - pyarrow>=20.0.0 + - rechunker>=0.5.2 + - requests>=2.32.3 + - rich>=14.0.0 + - rioxarray>=0.19.0 + - scipy>=1.15.3 + - seaborn>=0.13.2 + - smart-geocubes[gee,dask,stac,viz]>=0.0.9 + - stopuhr>=0.0.10 + - ultraplot>=1.63.0 + - xanimate @ git+https://github.com/davbyr/xAnimate + - xarray>=2025.9.0 + - xdggs>=0.2.1 + - xvec>=0.5.1 + - zarr[remote]>=3.1.3 + - geocube>=0.7.1,<0.8 + editable: true +- pypi: git+ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git#9ca1bdf4afc4ac9b0ea29ebbc060ffecb5cffcf7 + name: entropy + version: 0.1.0 + requires_dist: + - scikit-learn>=1.3.2 + - scipy>=1.10.1 + - array-api-compat>=1.12.0,<2 + - array-api-extra>=0.9.0,<0.10 + requires_python: '>=3.11,<3.14' +- pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + name: executing + version: 2.2.1 + sha256: 760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 + requires_dist: + - asttokens>=2.1.0 ; extra == 'tests' + - ipython ; extra == 'tests' + - pytest ; extra == 'tests' + - coverage ; extra == 'tests' + - coverage-enable-subprocess ; extra == 'tests' + - littleutils ; extra == 'tests' + - rich ; python_full_version >= '3.11' and extra == 'tests' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/fastrlock-0.8.3-py313h5d5ffb9_2.conda + sha256: 30498ed45133f457fd9ed14d5fac6512347f05d11fe1ed89842c7dfdb516f78f + md5: 9bcbd351966dc56a24fc0c368da5ad99 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastrlock?source=hash-mapping + size: 41201 + timestamp: 1756729160955 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e + md5: 66b8b26023b8efdf8fcb23bac4b6325d + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17976 + timestamp: 1759948208140 +- pypi: https://files.pythonhosted.org/packages/ed/ee/cd1f7e29979d0d71c8fabf5090a759b8d338bddf96aab286e39c7a7b2c0a/flox-0.10.7-py3-none-any.whl + name: flox + version: 0.10.7 + sha256: 645b58ffa64c6a0c4f855d6c2f9b1f377471e347aa67486086ad4e16e475d6da + requires_dist: + - pandas>=2.1 + - packaging>=21.3 + - numpy>=1.26 + - numpy-groupies>=0.9.19 + - toolz + - scipy>=1.12 + - cachey ; extra == 'all' + - dask ; extra == 'all' + - numba ; extra == 'all' + - numbagg ; extra == 'all' + - xarray ; extra == 'all' + - netcdf4 ; extra == 'test' + - cubed>=0.20.0 ; extra == 'docs' + - cubed-xarray ; extra == 'docs' + - dask ; extra == 'docs' + - xarray ; extra == 'docs' + - numpydoc ; extra == 'docs' + - matplotlib ; extra == 'docs' + - myst-parser ; extra == 'docs' + - myst-nb ; extra == 'docs' + - sparse ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-remove-toctrees ; extra == 'docs' + - furo>=2024.8 ; extra == 'docs' + - ipykernel ; extra == 'docs' + - jupyter ; extra == 'docs' + - sphinx-codeautolink ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pyarrow ; extra == 'docs' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/b5/a8/5f764f333204db0390362a4356d03a43626997f26818a0e9396f1b3bd8c9/folium-0.20.0-py2.py3-none-any.whl + name: folium + version: 0.20.0 + sha256: f0bc2a92acde20bca56367aa5c1c376c433f450608d058daebab2fc9bf8198bf + requires_dist: + - branca>=0.6.0 + - jinja2>=2.9 + - numpy + - requests + - xyzservices + - pytest ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + name: fonttools + version: 4.60.1 + sha256: b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: frozenlist + version: 1.8.0 + sha256: fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + sha256: df5cb57bb668cd5b2072d8bd66380ff7acb12e8c337f47dd4b9a75a6a6496a6d + md5: d18004c37182f83b9818b714825a7627 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fsspec?source=compressed-mapping + size: 146592 + timestamp: 1761840236679 +- pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl + name: future + version: 1.0.0 + sha256: 929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216 + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/0f/4f/16e34c39f1840203216a79084d92aed6722ba00d34815807bc3e04d58c9f/geemap-0.36.6-py3-none-any.whl + name: geemap + version: 0.36.6 + sha256: bdbaa610ea39a123bc841b43713e4a9f73fb2cd2bf30e7acb6b1a0215b7d786a + requires_dist: + - anywidget + - bqplot + - earthengine-api>=1.6.12 + - eerepr>=0.1.0 + - folium>=0.17.0 + - geocoder + - ipyevents + - ipyfilechooser>=0.6.0 + - ipyleaflet>=0.19.2 + - matplotlib + - numpy + - pandas + - plotly + - pyperclip + - pyshp>=2.3.1 + - python-box + - scooby + - google-api-core ; extra == 'ai' + - google-cloud-aiplatform ; extra == 'ai' + - google-cloud-storage ; extra == 'ai' + - google-generativeai ; extra == 'ai' + - iso8601 ; extra == 'ai' + - langchain ; extra == 'ai' + - langchain-community ; extra == 'ai' + - langchain-google-genai ; extra == 'ai' + - ee-extra>=0.0.15 ; extra == 'all' + - ffmpeg-python ; extra == 'all' + - gdown ; extra == 'all' + - geeadd>=0.5.1 ; extra == 'all' + - geedim ; extra == 'all' + - geojson ; extra == 'all' + - geopandas ; extra == 'all' + - google-api-core ; extra == 'all' + - google-cloud-aiplatform ; extra == 'all' + - google-cloud-storage ; extra == 'all' + - google-generativeai ; extra == 'all' + - gradio ; extra == 'all' + - h3 ; extra == 'all' + - ipygany ; extra == 'all' + - ipynb-py-convert ; extra == 'all' + - ipytree ; extra == 'all' + - ipyvtklink ; extra == 'all' + - ipyvuetify ; extra == 'all' + - iso8601 ; extra == 'all' + - jupyterlab ; extra == 'all' + - jupyterlab>=3 ; extra == 'all' + - keplergl ; extra == 'all' + - langchain ; extra == 'all' + - langchain-community ; extra == 'all' + - langchain-google-genai ; extra == 'all' + - laspy[lazrs] ; extra == 'all' + - localtileserver ; extra == 'all' + - localtileserver>=0.10.1 ; extra == 'all' + - mapclassify ; extra == 'all' + - mapclassify>=2.4.0 ; extra == 'all' + - maplibre ; extra == 'all' + - mss ; extra == 'all' + - netcdf4 ; extra == 'all' + - oeel ; extra == 'all' + - osmnx ; extra == 'all' + - owslib ; extra == 'all' + - palettable ; extra == 'all' + - panel ; extra == 'all' + - pmtiles ; extra == 'all' + - psycopg2 ; extra == 'all' + - pycrs ; extra == 'all' + - pydeck ; extra == 'all' + - pyntcloud[las] ; extra == 'all' + - pyvista ; extra == 'all' + - pyvista-xarray ; extra == 'all' + - rio-cogeo ; extra == 'all' + - rioxarray ; extra == 'all' + - sankee>=0.1.0 ; extra == 'all' + - solara ; extra == 'all' + - sqlalchemy ; extra == 'all' + - streamlit-folium ; extra == 'all' + - voila ; extra == 'all' + - watchfiles ; extra == 'all' + - whiteboxgui>=0.6.0 ; extra == 'all' + - xarray ; extra == 'all' + - xee ; extra == 'all' + - gradio ; extra == 'apps' + - solara ; extra == 'apps' + - streamlit-folium ; extra == 'apps' + - voila ; extra == 'apps' + - keplergl ; extra == 'backends' + - pydeck ; extra == 'backends' + - jupyterlab ; extra == 'dev' + - watchfiles ; extra == 'dev' + - ee-extra>=0.0.15 ; extra == 'extra' + - ffmpeg-python ; extra == 'extra' + - gdown ; extra == 'extra' + - geeadd>=0.5.1 ; extra == 'extra' + - geojson ; extra == 'extra' + - geopandas ; extra == 'extra' + - ipynb-py-convert ; extra == 'extra' + - ipytree ; extra == 'extra' + - jupyterlab>=3 ; extra == 'extra' + - mapclassify>=2.4.0 ; extra == 'extra' + - mss ; extra == 'extra' + - oeel ; extra == 'extra' + - owslib ; extra == 'extra' + - palettable ; extra == 'extra' + - pycrs ; extra == 'extra' + - sankee>=0.1.0 ; extra == 'extra' + - whiteboxgui>=0.6.0 ; extra == 'extra' + - xee ; extra == 'extra' + - ipygany ; extra == 'lidar' + - ipyvtklink ; extra == 'lidar' + - laspy[lazrs] ; extra == 'lidar' + - panel ; extra == 'lidar' + - pyntcloud[las] ; extra == 'lidar' + - pyvista ; extra == 'lidar' + - pyvista-xarray ; extra == 'lidar' + - rioxarray ; extra == 'lidar' + - geopandas ; extra == 'maplibre' + - h3 ; extra == 'maplibre' + - ipyvuetify ; extra == 'maplibre' + - localtileserver ; extra == 'maplibre' + - mapclassify ; extra == 'maplibre' + - maplibre ; extra == 'maplibre' + - pmtiles ; extra == 'maplibre' + - rioxarray ; extra == 'maplibre' + - xarray ; extra == 'maplibre' + - geedim ; extra == 'raster' + - localtileserver>=0.10.1 ; extra == 'raster' + - netcdf4 ; extra == 'raster' + - pyvista-xarray ; extra == 'raster' + - rio-cogeo ; extra == 'raster' + - rioxarray ; extra == 'raster' + - psycopg2 ; extra == 'sql' + - sqlalchemy ; extra == 'sql' + - geopandas ; extra == 'vector' + - osmnx ; extra == 'vector' + - ffmpeg-python ; extra == 'workshop' + - gdown ; extra == 'workshop' + - 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 + name: geoarrow-rust-core + version: 0.6.0 + sha256: 0eb5bf1393f3c53997c5dab2cdc26807680ef23237b2836dc27d1ef9b849a056 + requires_dist: + - arro3-core>=0.4 + - pyproj + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4f/6b/13166c909ad2f2d76b929a4227c952630ebaf0d729f6317eb09cbceccbab/geocoder-1.38.1-py2.py3-none-any.whl + name: geocoder + version: 1.38.1 + sha256: a733e1dfbce3f4e1a526cac03aadcedb8ed1239cf55bd7f3a23c60075121a834 + requires_dist: + - click + - future + - ratelim + - requests + - six +- pypi: https://files.pythonhosted.org/packages/31/c6/a9341239e2e2953537b9e90a46ebc59f2e122247a3fe22373cc37520fc44/geocube-0.7.1-py3-none-any.whl + name: geocube + version: 0.7.1 + sha256: 661a12c0b2106f27477290b5f18e76eb5855c9c50cac7fd19028fde4babca628 + requires_dist: + - appdirs + - click>=6.0 + - geopandas>=1 + - odc-geo + - rasterio>=1.3 + - rioxarray>=0.4 + - scipy + - xarray>=0.17 + - pyproj>=2 + - numpy>=1.20 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/31/b3/802576f2ea5dcb48501bb162e4c7b7b3ca5654a42b2c968ef98a797a4c79/geographiclib-2.1-py3-none-any.whl + name: geographiclib + version: '2.1' + sha256: e2a873b9b9e7fc38721ad73d5f4e6c9ed140d428a339970f505c07056997d40b + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/0b/70/d5cd0696eff08e62fdbdebe5b46527facb4e7220eabe0ac6225efab50168/geopandas-1.1.1-py3-none-any.whl + name: geopandas + version: 1.1.1 + sha256: 589e61aaf39b19828843df16cb90234e72897e2579be236f10eee0d052ad98e8 + requires_dist: + - numpy>=1.24 + - pyogrio>=0.7.2 + - packaging + - pandas>=2.0.0 + - pyproj>=3.5.0 + - shapely>=2.0.0 + - psycopg[binary]>=3.1.0 ; extra == 'all' + - sqlalchemy>=2.0 ; extra == 'all' + - geopy ; extra == 'all' + - matplotlib>=3.7 ; extra == 'all' + - mapclassify>=2.5 ; extra == 'all' + - xyzservices ; extra == 'all' + - folium ; extra == 'all' + - geoalchemy2 ; extra == 'all' + - pyarrow>=10.0.0 ; extra == 'all' + - scipy ; extra == 'all' + - pytest>=3.1.0 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - codecov ; extra == 'dev' + - pre-commit ; extra == 'dev' + - ruff ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/15/cf2a69ade4b194aa524ac75112d5caac37414b20a3a03e6865dfe0bd1539/geopy-2.4.1-py3-none-any.whl + name: geopy + version: 2.4.1 + sha256: ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7 + requires_dist: + - geographiclib>=1.52,<3 + - aiohttp ; extra == 'aiohttp' + - coverage ; extra == 'dev' + - flake8>=5.0,<5.1 ; extra == 'dev' + - isort>=5.10.0,<5.11.0 ; extra == 'dev' + - pytest-asyncio>=0.17 ; extra == 'dev' + - pytest>=3.10 ; extra == 'dev' + - readme-renderer ; extra == 'dev' + - sphinx-issues ; extra == 'dev' + - sphinx<=4.3.2 ; extra == 'dev' + - sphinx-rtd-theme>=0.5.0 ; extra == 'dev' + - readme-renderer ; extra == 'dev-docs' + - sphinx<=4.3.2 ; extra == 'dev-docs' + - sphinx-issues ; extra == 'dev-docs' + - sphinx-rtd-theme>=0.5.0 ; extra == 'dev-docs' + - flake8>=5.0,<5.1 ; extra == 'dev-lint' + - isort>=5.10.0,<5.11.0 ; extra == 'dev-lint' + - coverage ; extra == 'dev-test' + - pytest-asyncio>=0.17 ; extra == 'dev-test' + - pytest>=3.10 ; extra == 'dev-test' + - sphinx<=4.3.2 ; extra == 'dev-test' + - urllib3>=1.24.2 ; extra == 'requests' + - requests>=2.16.2 ; extra == 'requests' + - pytz ; extra == 'timezone' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c + md5: c94a5994ef49749880a8139cf9afcbe1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] + size: 460055 + timestamp: 1718980856608 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + sha256: b8b9c2f1b517ee9067ad74112a5b2c7d96b937bcbeea91161ea4cd6ca0e8bbc7 + md5: c9bc12b70b0c422e937945694e7cf6c0 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 215280 + timestamp: 1756739742130 +- pypi: https://files.pythonhosted.org/packages/ed/d4/90197b416cb61cefd316964fd9e7bd8324bcbafabf40eef14a9f20b81974/google_api_core-2.28.1-py3-none-any.whl + name: google-api-core + version: 2.28.1 + sha256: 4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c + requires_dist: + - googleapis-common-protos>=1.56.2,<2.0.0 + - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0 + - proto-plus>=1.22.3,<2.0.0 + - proto-plus>=1.25.0,<2.0.0 ; python_full_version >= '3.13' + - google-auth>=2.14.1,<3.0.0 + - requests>=2.18.0,<3.0.0 + - importlib-metadata>=1.4 ; python_full_version < '3.8' + - google-auth[aiohttp]>=2.35.0,<3.0.0 ; extra == 'async-rest' + - grpcio>=1.33.2,<2.0.0 ; extra == 'grpc' + - grpcio>=1.49.1,<2.0.0 ; python_full_version >= '3.11' and extra == 'grpc' + - grpcio>=1.75.1,<2.0.0 ; python_full_version >= '3.14' and extra == 'grpc' + - grpcio-status>=1.33.2,<2.0.0 ; extra == 'grpc' + - grpcio-status>=1.49.1,<2.0.0 ; python_full_version >= '3.11' and extra == 'grpc' + - grpcio-status>=1.75.1,<2.0.0 ; python_full_version >= '3.14' and extra == 'grpc' + - grpcio-gcp>=0.2.2,<1.0.0 ; extra == 'grpcgcp' + - grpcio-gcp>=0.2.2,<1.0.0 ; extra == 'grpcio-gcp' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/21/5a/b00b944eb9cd0f2e39daf3bcce006cb503a89532f507e87e038e04bbea8c/google_api_python_client-2.186.0-py3-none-any.whl + name: google-api-python-client + version: 2.186.0 + sha256: 2ea4beba93e193d3a632c7bf865b6ccace42b0017269a964566e39b7e1f3cf79 + requires_dist: + - httplib2>=0.19.0,<1.0.0 + - google-auth>=1.32.0,!=2.24.0,!=2.25.0,<3.0.0 + - google-auth-httplib2>=0.2.0,<1.0.0 + - google-api-core>=1.31.5,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0 + - uritemplate>=3.0.1,<5 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/92/05/adeb6c495aec4f9d93f9e2fc29eeef6e14d452bba11d15bdb874ce1d5b10/google_auth-2.42.1-py2.py3-none-any.whl + name: google-auth + version: 2.42.1 + sha256: eb73d71c91fc95dbd221a2eb87477c278a355e7367a35c0d84e6b0e5f9b4ad11 + requires_dist: + - cachetools>=2.0.0,<7.0 + - pyasn1-modules>=0.2.1 + - rsa>=3.1.4,<5 + - aiohttp>=3.6.2,<4.0.0 ; extra == 'aiohttp' + - requests>=2.20.0,<3.0.0 ; extra == 'aiohttp' + - cryptography ; extra == 'enterprise-cert' + - pyopenssl ; extra == 'enterprise-cert' + - pyopenssl>=20.0.0 ; extra == 'pyopenssl' + - cryptography>=38.0.3 ; extra == 'pyopenssl' + - cryptography<39.0.0 ; python_full_version < '3.8' and extra == 'pyopenssl' + - pyjwt>=2.0 ; extra == 'pyjwt' + - cryptography>=38.0.3 ; extra == 'pyjwt' + - cryptography<39.0.0 ; python_full_version < '3.8' and extra == 'pyjwt' + - pyu2f>=0.1.5 ; extra == 'reauth' + - requests>=2.20.0,<3.0.0 ; extra == 'requests' + - grpcio ; extra == 'testing' + - flask ; extra == 'testing' + - freezegun ; extra == 'testing' + - mock ; extra == 'testing' + - oauth2client ; extra == 'testing' + - pyjwt>=2.0 ; extra == 'testing' + - cryptography>=38.0.3 ; extra == 'testing' + - cryptography<39.0.0 ; python_full_version < '3.8' and extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-localserver ; extra == 'testing' + - pyopenssl>=20.0.0 ; extra == 'testing' + - cryptography>=38.0.3 ; extra == 'testing' + - cryptography<39.0.0 ; python_full_version < '3.8' and extra == 'testing' + - pyu2f>=0.1.5 ; extra == 'testing' + - responses ; extra == 'testing' + - urllib3 ; extra == 'testing' + - packaging ; extra == 'testing' + - aiohttp>=3.6.2,<4.0.0 ; extra == 'testing' + - requests>=2.20.0,<3.0.0 ; extra == 'testing' + - aioresponses ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - pyopenssl<24.3.0 ; extra == 'testing' + - aiohttp<3.10.0 ; extra == 'testing' + - urllib3 ; extra == 'urllib3' + - packaging ; extra == 'urllib3' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/44/a7/ca23dd006255f70e2bc469d3f9f0c82ea455335bfd682ad4d677adc435de/google_auth_httplib2-0.2.1-py3-none-any.whl + name: google-auth-httplib2 + version: 0.2.1 + sha256: 1be94c611db91c01f9703e7f62b0a59bbd5587a95571c7b6fade510d648bc08b + requires_dist: + - google-auth>=1.32.0,<3.0.0 + - httplib2>=0.19.0,<1.0.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/89/20/bfa472e327c8edee00f04beecc80baeddd2ab33ee0e86fd7654da49d45e9/google_cloud_core-2.5.0-py3-none-any.whl + name: google-cloud-core + version: 2.5.0 + sha256: 67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc + requires_dist: + - google-api-core>=1.31.6,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0 + - google-auth>=1.25.0,<3.0.0 + - importlib-metadata>1.0.0 ; python_full_version < '3.8' + - grpcio>=1.38.0,<2.0.0 ; python_full_version < '3.14' and extra == 'grpc' + - grpcio>=1.75.1,<2.0.0 ; python_full_version >= '3.14' and extra == 'grpc' + - grpcio-status>=1.38.0,<2.0.0 ; extra == 'grpc' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/83/6e/b47d83d3a35231c6232566341b0355cce78fd4e6988a7343725408547b2c/google_cloud_storage-3.4.1-py3-none-any.whl + name: google-cloud-storage + version: 3.4.1 + sha256: 972764cc0392aa097be8f49a5354e22eb47c3f62370067fb1571ffff4a1c1189 + requires_dist: + - google-auth>=2.26.1,<3.0.0 + - google-api-core>=2.15.0,<3.0.0 + - google-cloud-core>=2.4.2,<3.0.0 + - google-resumable-media>=2.7.2,<3.0.0 + - requests>=2.22.0,<3.0.0 + - google-crc32c>=1.1.3,<2.0.0 + - protobuf>=3.20.2,<7.0.0 ; extra == 'protobuf' + - opentelemetry-api>=1.1.0,<2.0.0 ; extra == 'tracing' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c3/ca/1ea2fd13ff9f8955b85e7956872fdb7050c4ace8a2306a6d177edb9cf7fe/google_crc32c-1.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: google-crc32c + version: 1.7.1 + sha256: 6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 + requires_dist: + - importlib-resources>=1.3 ; python_full_version < '3.9' and os_name == 'nt' + - pytest ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + name: google-resumable-media + version: 2.7.2 + sha256: 3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa + requires_dist: + - google-crc32c>=1.0,<2.0.dev0 + - aiohttp>=3.6.2,<4.0.0.dev0 ; extra == 'aiohttp' + - google-auth>=1.22.0,<2.0.dev0 ; extra == 'aiohttp' + - requests>=2.18.0,<3.0.0.dev0 ; extra == 'requests' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/25/e8/eba9fece11d57a71e3e22ea672742c8f3cf23b35730c9e96db768b295216/googleapis_common_protos-1.71.0-py3-none-any.whl + name: googleapis-common-protos + version: 1.71.0 + sha256: 59034a1d849dc4d18971997a72ac56246570afdd17f9369a0ff68218d50ab78c + requires_dist: + - protobuf>=3.20.2,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0 + - grpcio>=1.44.0,<2.0.0 ; extra == 'grpc' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1d/99/5efd413072428bf1973c34d76a2f476a621848da86cecd8392ef59ba7640/h3-4.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: h3 + version: 4.3.1 + sha256: 4b4885dd55ae5bc1848334981f1593eea098133c13bedc66bca1dac624cefe2c + requires_dist: + - numpy ; extra == 'numpy' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - ruff ; extra == 'test' + - numpy ; extra == 'test' + - h3[test] ; extra == 'all' + - jupyter-book ; extra == 'all' + - sphinx>=7.3.3 ; extra == 'all' + - jupyterlab ; extra == 'all' + - jupyterlab-geojson ; extra == 'all' + - geopandas ; extra == 'all' + - geodatasets ; extra == 'all' + - matplotlib ; extra == 'all' + - contextily ; extra == 'all' + - cartopy ; extra == 'all' + - geoviews ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b6/08/b349ae3b7051b37155f40e09852193fc56f9aafe2edf6ef3e190eb329a2f/h3ronpy-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: h3ronpy + version: 0.22.0 + sha256: 57aa53e335027932f0965e222b255e8004ad121adbe0791f1518f894dc5ba6fa + requires_dist: + - numpy + - arro3-core>=0.4 + - polars>=1 ; extra == 'polars' + - geopandas>=1 ; extra == 'pandas' + - pyarrow>=15 ; extra == 'pandas' + - rasterio>=1.4 ; extra == 'test' + - shapely>=1.7 ; extra == 'test' + - pytest>=6 ; extra == 'test' + - h3<4 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pyarrow>=15 ; extra == 'test' +- pypi: https://files.pythonhosted.org/packages/d6/49/1f35189c1ca136b2f041b72402f2eb718bdcb435d9e88729fe6f6909c45d/h5netcdf-1.7.3-py3-none-any.whl + name: h5netcdf + version: 1.7.3 + sha256: b1967678127d55009edd4c7e36cb322a7b66bdade37a2e229d857f5ecf375c01 + requires_dist: + - h5py + - packaging + - netcdf4 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- 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 + name: h5py + version: 3.15.1 + sha256: 121b2b7a4c1915d63737483b7bff14ef253020f617c2fb2811f67a4bed9ac5e8 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl + name: httplib2 + version: 0.31.0 + sha256: b9cd78abea9b4e43a7714c6e0f8b6b8561a6fc1e95d5dbd367f5bf0ef35f5d24 + requires_dist: + - pyparsing>=3.0.4,<4 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/be/8c/7f110a76aa94e96ab70574a98f58b6d1a463447ff841f4da754eaa709230/icechunk-0.2.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: icechunk + version: 0.2.18 + sha256: af3a24c730ebf9008b38a27adf72fe9a74693e452d029b39297f9cca58afca0f + requires_dist: + - zarr>=3,!=3.0.3 + - boto3 ; extra == 'test' + - coverage ; extra == 'test' + - mypy ; extra == 'test' + - object-store-python ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - pytest-xdist ; extra == 'test' + - ruff ; extra == 'test' + - dask>=2024.11.0 ; extra == 'test' + - distributed>=2024.11.0 ; extra == 'test' + - xarray>=2025.1.2 ; extra == 'test' + - hypothesis ; extra == 'test' + - pandas-stubs ; extra == 'test' + - boto3-stubs[s3] ; extra == 'test' + - termcolor ; extra == 'test' + - pytest-benchmark[histogram] ; extra == 'benchmark' + - pytest-xdist ; extra == 'benchmark' + - s3fs ; extra == 'benchmark' + - gcsfs ; extra == 'benchmark' + - h5netcdf ; extra == 'benchmark' + - pooch ; extra == 'benchmark' + - tqdm ; extra == 'benchmark' + - humanize ; extra == 'benchmark' + - platformdirs ; extra == 'benchmark' + - ipdb ; extra == 'benchmark' + - coiled ; extra == 'benchmark' + - scipy ; extra == 'docs' + - cftime ; extra == 'docs' + - pooch ; extra == 'docs' + - dask>=2024.11.0 ; extra == 'docs' + - distributed>=2024.11.0 ; extra == 'docs' + - xarray>=2025.1.2 ; extra == 'docs' + - myst-nb ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - mkdocs-awesome-pages-plugin ; extra == 'docs' + - mkdocs-mermaid2-plugin ; extra == 'docs' + - markdown-exec ; extra == 'docs' + - mkdocs-breadcrumbs-plugin ; extra == 'docs' + - mkdocs-minify-plugin ; extra == 'docs' + - mkdocs-open-in-new-tab ; extra == 'docs' + - mkdocs ; extra == 'docs' + - mkdocs-material[imaging] ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - mkdocs-jupyter ; extra == 'docs' + - mkdocs-git-revision-date-localized-plugin ; extra == 'docs' + - mkdocs-git-committers-plugin-2 ; extra == 'docs' + - mkdocs-macros-plugin ; extra == 'docs' + - mkdocs-include-markdown-plugin ; extra == 'docs' + - mkdocs-redirects ; extra == 'docs' + - mkdocs-git-authors-plugin ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - sphinx-togglebutton ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + name: idna + version: '3.11' + sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/8a/de/6c1cf78cc0ecc45d98a0eb0d8920df7b90719f8643c7ed9b1bb700f95890/imagecodecs-2025.8.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: imagecodecs + version: 2025.8.2 + sha256: 52230fcd0c331b0167ccd14d7ce764bb780006b65bf69761d8bde6863419fdbf + requires_dist: + - numpy + - matplotlib ; extra == 'all' + - tifffile ; extra == 'all' + - numcodecs ; extra == 'all' + - pytest ; extra == 'test' + - pytest-run-parallel ; extra == 'test' + - tifffile ; extra == 'test' + - czifile ; extra == 'test' + - blosc ; extra == 'test' + - blosc2 ; extra == 'test' + - brotli ; extra == 'test' + - zstd ; extra == 'test' + - lz4 ; extra == 'test' + - pyliblzfse ; extra == 'test' + - python-lzf ; extra == 'test' + - python-snappy ; extra == 'test' + - bitshuffle ; extra == 'test' + - zopflipy ; extra == 'test' + - zarr ; extra == 'test' + - numcodecs ; extra == 'test' + - kerchunk ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + name: imageio + version: 2.37.0 + sha256: 11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed + requires_dist: + - numpy + - pillow>=8.3.2 + - astropy ; extra == 'all-plugins' + - av ; extra == 'all-plugins' + - imageio-ffmpeg ; extra == 'all-plugins' + - numpy>2 ; extra == 'all-plugins' + - pillow-heif ; extra == 'all-plugins' + - psutil ; extra == 'all-plugins' + - rawpy ; extra == 'all-plugins' + - tifffile ; extra == 'all-plugins' + - av ; extra == 'all-plugins-pypy' + - imageio-ffmpeg ; extra == 'all-plugins-pypy' + - pillow-heif ; extra == 'all-plugins-pypy' + - psutil ; extra == 'all-plugins-pypy' + - tifffile ; extra == 'all-plugins-pypy' + - wheel ; extra == 'build' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - fsspec[github] ; extra == 'dev' + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - sphinx<6 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - imageio-ffmpeg ; extra == 'ffmpeg' + - psutil ; extra == 'ffmpeg' + - astropy ; extra == 'fits' + - astropy ; extra == 'full' + - av ; extra == 'full' + - black ; extra == 'full' + - flake8 ; extra == 'full' + - fsspec[github] ; extra == 'full' + - gdal ; extra == 'full' + - imageio-ffmpeg ; extra == 'full' + - itk ; extra == 'full' + - numpy>2 ; extra == 'full' + - numpydoc ; extra == 'full' + - pillow-heif ; extra == 'full' + - psutil ; extra == 'full' + - pydata-sphinx-theme ; extra == 'full' + - pytest ; extra == 'full' + - pytest-cov ; extra == 'full' + - rawpy ; extra == 'full' + - sphinx<6 ; extra == 'full' + - tifffile ; extra == 'full' + - wheel ; extra == 'full' + - gdal ; extra == 'gdal' + - itk ; extra == 'itk' + - black ; extra == 'linting' + - flake8 ; extra == 'linting' + - pillow-heif ; extra == 'pillow-heif' + - av ; extra == 'pyav' + - rawpy ; extra == 'rawpy' + - numpy>2 ; extra == 'rawpy' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - fsspec[github] ; extra == 'test' + - tifffile ; extra == 'tifffile' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4c/0f/b66d63d4a5426c09005d3713b056e634e00e69788fdc88d1ffe40e5b7654/ipycytoscape-1.3.3-py2.py3-none-any.whl + name: ipycytoscape + version: 1.3.3 + sha256: 4bc205724971f5f7a3fc2b09dfec20c357c4c6dfa2b4bd41e7c33c995c3f6906 + requires_dist: + - ipywidgets>=7.6.0 + - spectate>=1.0.0 + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinx-autobuild>=2020.9.1 ; extra == 'docs' + - jupyter-sphinx>=0.3.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - nbsphinx-link ; extra == 'docs' + - networkx ; extra == 'docs' + - pandas ; extra == 'docs' + - pandas ; extra == 'examples' + - py2neo ; extra == 'examples' + - monotonic ; extra == 'examples' + - py2neo ; extra == 'neo4j' + - monotonic ; extra == 'neo4j' + - pytest>4.6 ; extra == 'test' + - pytest-cov ; extra == 'test' + - nbval ; extra == 'test' + - pandas ; extra == 'test' + - nbclassic>=0.2.8 ; extra == 'test' + - networkx ; extra == 'test' + - pre-commit ; extra == 'test' +- pypi: https://files.pythonhosted.org/packages/ca/d3/642a6dc3db8ea558a9b5fbc83815b197861868dc98f98a789b85c7660670/ipyevents-2.0.4-py3-none-any.whl + name: ipyevents + version: 2.0.4 + sha256: e532e05b037f70373850723f483d2830cb8a633e5aa19637ee9e7adaf41421f1 + requires_dist: + - ipywidgets>=7.6.0 + - jupyterlab>=3 ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - sphinx ; extra == 'docs' + - nbval ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/00/60/249e3444fcd9c833704741769981cd02fe2c7ce94126b1394e7a3b26e543/ipyfilechooser-0.6.0-py3-none-any.whl + name: ipyfilechooser + version: 0.6.0 + sha256: 4555c24b30b819c91dc0ae5e6f7e4cf8f90e5cca531a9209a1fe4deee288d5c5 + requires_dist: + - ipywidgets +- pypi: https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl + name: ipykernel + version: 7.1.0 + sha256: 763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c + requires_dist: + - appnope>=0.1.2 ; sys_platform == 'darwin' + - comm>=0.1.1 + - debugpy>=1.6.5 + - ipython>=7.23.1 + - jupyter-client>=8.0.0 + - jupyter-core>=4.12,!=5.0.* + - matplotlib-inline>=0.1 + - nest-asyncio>=1.4 + - packaging>=22 + - psutil>=5.7 + - pyzmq>=25 + - tornado>=6.2 + - traitlets>=5.4.0 + - coverage[toml] ; extra == 'cov' + - matplotlib ; extra == 'cov' + - pytest-cov ; extra == 'cov' + - trio ; extra == 'cov' + - intersphinx-registry ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx<8.2.0 ; extra == 'docs' + - sphinxcontrib-github-alt ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - trio ; extra == 'docs' + - pyqt5 ; extra == 'pyqt5' + - pyside6 ; extra == 'pyside6' + - flaky ; extra == 'test' + - ipyparallel ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-asyncio>=0.23.5 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest>=7.0,<9 ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/49/69/e9858f2c0b99bf9f036348d1c84b8026f438bb6875effe6a9bcd9883dada/ipyleaflet-0.20.0-py3-none-any.whl + name: ipyleaflet + version: 0.20.0 + sha256: b4c20ddc0b17d68e226cd3367ca2215a4db7e2b14374468c0eeaa54b53e4d173 + requires_dist: + - branca>=0.5.0 + - ipywidgets>=7.6.0,<9 + - jupyter-leaflet>=0.20,<0.21 + - traittypes>=0.2.1,<3 + - xyzservices>=2021.8.1 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/48/c5/d5e07995077e48220269c28a221e168c91123ad5ceee44d548f54a057fc0/ipython-9.6.0-py3-none-any.whl + name: ipython + version: 9.6.0 + sha256: 5f77efafc886d2f023442479b8149e7d86547ad0a979e9da9f045d252f648196 + requires_dist: + - colorama ; sys_platform == 'win32' + - decorator + - ipython-pygments-lexers + - jedi>=0.16 + - matplotlib-inline + - pexpect>4.3 ; sys_platform != 'emscripten' and sys_platform != 'win32' + - prompt-toolkit>=3.0.41,<3.1.0 + - pygments>=2.4.0 + - stack-data + - traitlets>=5.13.0 + - typing-extensions>=4.6 ; python_full_version < '3.12' + - black ; extra == 'black' + - docrepr ; extra == 'doc' + - exceptiongroup ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - ipykernel ; extra == 'doc' + - ipython[matplotlib,test] ; extra == 'doc' + - setuptools>=61.2 ; extra == 'doc' + - sphinx-toml==0.0.4 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx>=1.3 ; extra == 'doc' + - typing-extensions ; extra == 'doc' + - pytest ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - testpath ; extra == 'test' + - packaging ; extra == 'test' + - ipython[test] ; extra == 'test-extra' + - curio ; extra == 'test-extra' + - jupyter-ai ; extra == 'test-extra' + - ipython[matplotlib] ; extra == 'test-extra' + - nbformat ; extra == 'test-extra' + - nbclient ; extra == 'test-extra' + - ipykernel ; extra == 'test-extra' + - numpy>=1.25 ; extra == 'test-extra' + - pandas>2.0 ; extra == 'test-extra' + - trio ; extra == 'test-extra' + - matplotlib>3.7 ; extra == 'matplotlib' + - ipython[doc,matplotlib,test,test-extra] ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + name: ipython-pygments-lexers + version: 1.1.1 + sha256: a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c + requires_dist: + - pygments + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl + name: ipywidgets + version: 8.1.8 + sha256: ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e + requires_dist: + - comm>=0.1.3 + - ipython>=6.1.0 + - traitlets>=4.3.1 + - widgetsnbextension~=4.0.14 + - jupyterlab-widgets~=3.0.15 + - jsonschema ; extra == 'test' + - ipykernel ; extra == 'test' + - pytest>=3.6.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytz ; extra == 'test' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + name: isodate + version: 0.7.2 + sha256: 28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl + name: jedi + version: 0.19.2 + sha256: a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9 + requires_dist: + - parso>=0.8.4,<0.9.0 + - jinja2==2.11.3 ; extra == 'docs' + - markupsafe==1.1.1 ; extra == 'docs' + - pygments==2.8.1 ; extra == 'docs' + - alabaster==0.7.12 ; extra == 'docs' + - babel==2.9.1 ; extra == 'docs' + - chardet==4.0.0 ; extra == 'docs' + - commonmark==0.8.1 ; extra == 'docs' + - docutils==0.17.1 ; extra == 'docs' + - future==0.18.2 ; extra == 'docs' + - idna==2.10 ; extra == 'docs' + - imagesize==1.2.0 ; extra == 'docs' + - mock==1.0.1 ; extra == 'docs' + - packaging==20.9 ; extra == 'docs' + - pyparsing==2.4.7 ; extra == 'docs' + - pytz==2021.1 ; extra == 'docs' + - readthedocs-sphinx-ext==2.1.4 ; extra == 'docs' + - recommonmark==0.5.0 ; extra == 'docs' + - requests==2.25.1 ; extra == 'docs' + - six==1.15.0 ; extra == 'docs' + - snowballstemmer==2.1.0 ; extra == 'docs' + - sphinx-rtd-theme==0.4.3 ; extra == 'docs' + - sphinx==1.8.5 ; extra == 'docs' + - sphinxcontrib-serializinghtml==1.1.4 ; extra == 'docs' + - sphinxcontrib-websupport==1.2.4 ; extra == 'docs' + - urllib3==1.26.4 ; extra == 'docs' + - flake8==5.0.4 ; extra == 'qa' + - mypy==0.971 ; extra == 'qa' + - types-setuptools==67.2.0.1 ; extra == 'qa' + - django ; extra == 'testing' + - attrs ; extra == 'testing' + - colorama ; extra == 'testing' + - docopt ; extra == 'testing' + - pytest<9.0.0 ; extra == 'testing' + requires_python: '>=3.6' +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af + md5: 446bd6c8cb26050d528881df495ce646 + depends: + - markupsafe >=2.0 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping + size: 112714 + timestamp: 1741263433881 +- pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + name: jmespath + version: 1.0.1 + sha256: 02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl + name: joblib + version: 1.5.2 + sha256: 4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + name: jsonschema + version: 4.25.1 + sha256: 3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 + requires_dist: + - attrs>=22.2.0 + - jsonschema-specifications>=2023.3.6 + - referencing>=0.28.4 + - rpds-py>=0.7.1 + - fqdn ; extra == 'format' + - idna ; extra == 'format' + - isoduration ; extra == 'format' + - jsonpointer>1.13 ; extra == 'format' + - rfc3339-validator ; extra == 'format' + - rfc3987 ; extra == 'format' + - uri-template ; extra == 'format' + - webcolors>=1.11 ; extra == 'format' + - fqdn ; extra == 'format-nongpl' + - idna ; extra == 'format-nongpl' + - isoduration ; extra == 'format-nongpl' + - jsonpointer>1.13 ; extra == 'format-nongpl' + - rfc3339-validator ; extra == 'format-nongpl' + - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' + - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' + - uri-template ; extra == 'format-nongpl' + - webcolors>=24.6.0 ; extra == 'format-nongpl' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + name: jsonschema-specifications + version: 2025.9.1 + sha256: 98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe + requires_dist: + - referencing>=0.31.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl + name: jupyter-client + version: 8.6.3 + sha256: e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f + requires_dist: + - importlib-metadata>=4.8.3 ; python_full_version < '3.10' + - jupyter-core>=4.12,!=5.0.* + - python-dateutil>=2.8.2 + - pyzmq>=23.0 + - tornado>=6.2 + - traitlets>=5.3 + - ipykernel ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx>=4 ; extra == 'docs' + - sphinxcontrib-github-alt ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - coverage ; extra == 'test' + - ipykernel>=6.14 ; extra == 'test' + - mypy ; extra == 'test' + - paramiko ; sys_platform == 'win32' and extra == 'test' + - pre-commit ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-jupyter[client]>=0.4.1 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest<8.2.0 ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + name: jupyter-core + version: 5.9.1 + sha256: ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407 + requires_dist: + - platformdirs>=2.5 + - traitlets>=5.3 + - intersphinx-registry ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - traitlets ; extra == 'docs' + - ipykernel ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest<9 ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/16/95/ffe543060eb3b1570d78c3f2c1948c640a6758ff5c6479c27e474819115b/jupyter_leaflet-0.20.0-py3-none-any.whl + name: jupyter-leaflet + version: 0.20.0 + sha256: 2e27ce83647316424f04845e3a6af35e1ee44c177c318a145646b11f4afe0764 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl + name: jupyterlab-widgets + version: 3.0.16 + sha256: 45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.4.9 + sha256: b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_4.conda + sha256: 96b6900ca0489d9e5d0318a6b49f8eff43fd85fef6e07cb0c25344ee94cd7a3a + md5: c94ab6ff54ba5172cf1c58267005670f + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.44 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 742501 + timestamp: 1761335175964 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + sha256: 143a586aa67d50622ef703de57b9d43f44945836d6568e0e7aa174bd8c45e0d4 + md5: 488f260ccda0afaf08acb286db439c2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1311599 + timestamp: 1736008414161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + build_number: 38 + sha256: b26a32302194e05fa395d5135699fd04a905c6ad71f24333f97c64874e053623 + md5: 3509b5e2aaa5f119013c8969fdd9a905 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas + - mkl <2026 + - liblapack 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17522 + timestamp: 1761680084434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda + build_number: 38 + sha256: 7fe653f45c01eb16d7b48ad934b068dad2885d6f4a7c41512b6a5f1f522bffe9 + md5: bcd928a9376a215cd9164a4312dd5e98 + depends: + - libblas 3.9.0 38_h4a7cf45_openblas + constrains: + - blas 2.138 openblas + - liblapack 3.9.0 38*_openblas + - liblapacke 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17503 + timestamp: 1761680091587 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.1.3.1-hd3aeb46_0.conda + sha256: 3a10e7cdcbb4b105f48a5c3a5b8faf983a961014cee485007cebd03ddc2f2ebf + md5: f22233f4a267fd99d22ff1660cbe7f28 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-nvrtc + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 253708677 + timestamp: 1702605288188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.13.1.26-hf7e9902_0.conda + sha256: 490d4d2136dda223b71e391363810aa9bb542d0d4a22270901df344090d0e394 + md5: 9cd33afe990aff3302820edb37fad8d4 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 447009909 + timestamp: 1759247115298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-dev-9.13.1.26-h58dd1b1_0.conda + sha256: af7c9b773738dfbb1d2d0354c9459a95a0e77e53380532a8486139764294a171 + md5: f048ce39203cfab52eba53f35c3228c0 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn 9.13.1.26 hf7e9902_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudnn-jit-dev <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 44048 + timestamp: 1759247497317 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.0.2.54-hd3aeb46_0.conda + sha256: d2360c4f8111071eb2a5a427942f330b73cc6f9df38bb3194ae111bf58239fa0 + md5: b3dca788a85cf02c4760e5c671d8b699 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 60809028 + timestamp: 1702588875768 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.2.106-hd3aeb46_0.conda + sha256: 42a2aecc767f2df1212191b341047abd52daecf3869b956bcceaf192497970f1 + md5: 1bd892b578e3bfb7fb482c943ed3d904 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 41739485 + timestamp: 1702589158554 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.4.5.107-hd3aeb46_0.conda + sha256: befd00e435c5d5395bc2adba159d9a966f96f3d4d0c794cf6c27f01fbce99418 + md5: 7cf47173f3ca096a76974423a56b2162 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.1,<12.2.0a0 + - libcublas >=12.1.3.1,<12.2.0a0 + - libcusparse >=12.1.0.106,<12.2.0a0 + - libgcc-ng >=12 + - libnvjitlink >=12.1.105,<13.0.0a0 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 79328302 + timestamp: 1702615368828 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.1.0.106-hd3aeb46_0.conda + sha256: 758ca7589cf36ab0c7be118a36d1d0075aaa31a32962b84977b966a57a6a2be3 + md5: 2294d4ff402737062b96a6d7b76ef952 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.1,<12.2.0a0 + - libgcc-ng >=12 + - libnvjitlink >=12.1.105,<13.0.0a0 + - libstdcxx-ng >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 112774423 + timestamp: 1702602435294 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 + md5: 4211416ecba1866fab0c6470986c22d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 74811 + timestamp: 1752719572741 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + sha256: 25cbdfa65580cfab1b8d15ee90b4c9f1e0d72128f1661449c9a999d341377d54 + md5: 35f29eec58405aaf55e01cb470d8c26a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 57821 + timestamp: 1760295480630 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + sha256: 08f9b87578ab981c7713e4e6a7d935e40766e10691732bba376d4964562bcb45 + md5: c0374badb3a5d4b1372db28d19462c53 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 h767d61c_7 + - libgcc-ng ==15.2.0=*_7 + 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 + depends: + - libgcc 15.2.0 h767d61c_7 + 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/libgfortran-15.2.0-h69a702a_7.conda + sha256: 9ca24328e31c8ef44a77f53104773b9fe50ea8533f4c74baa8489a12de916f02 + md5: 8621a450add4e231f676646880703f49 + depends: + - libgfortran5 15.2.0 hcd61629_7 + constrains: + - libgfortran-ng ==15.2.0=*_7 + 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 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1572758 + timestamp: 1759968082504 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda + sha256: f7fbc792dbcd04bf27219c765c10c239937b34c6c1a1f77a5827724753e02da1 + md5: c01021ae525a76fe62720c7346212d74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2450642 + timestamp: 1757624375958 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h47877c9_openblas.conda + build_number: 38 + sha256: 63d6073dd4f82ab46943ad99a22fc4edda83b0f8fe6170bdaba7a43352bed007 + md5: 88f10bff57b423a3fd2d990c6055771e + depends: + - libblas 3.9.0 38_h4a7cf45_openblas + constrains: + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17501 + timestamp: 1761680098660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 112894 + timestamp: 1749230047870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.8.0-h0af6554_0.conda + sha256: bed5ba28d40870aa513a4af14e8fafe80c0a8c04991b0d1f750949de60bac7bc + md5: d1f42f8848724f8167891d79e8e96993 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.0.107,<13.0a0 + - cuda-version >=12.0,<13 + - libblas >=3.9.0,<4.0a0 + - libcublas >=12.0.1.189,<13.0a0 + - libcusparse >=12.0.0.76,<13.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 250400163 + timestamp: 1721688915996 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.8.0-h0af6554_0.conda + sha256: f20a4cc53548c2cf8a4cc36502f294aa5e37c4ec3d2930ebd80a7e51d0c851b7 + md5: f506a12b434490e2368a9f2b70b10053 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.0.107,<13.0a0 + - cuda-version >=12.0,<13 + - libblas >=3.9.0,<4.0a0 + - libcublas >=12.0.1.189,<13.0a0 + - libcusparse >=12.0.0.76,<13.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libmagma 2.8.0.* + - libmagma >=2.8.0,<2.8.1.0a0 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6731088 + timestamp: 1721861326572 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee + md5: c7e925f37e3b40d893459e625f6a53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 91183 + timestamp: 1748393666725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda + sha256: 3b1c851f4fc42d347ce1c1606bdd195343a47f121e0fceb7a1f1e5aa1d497da9 + md5: 3461b0f2d5cbb7973d361f9e85241d98 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<12.10.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 30515495 + timestamp: 1760723776293 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + sha256: 200899e5acc01fa29550d2782258d9cf33e55ce4cbce8faed9c6fe0b774852aa + md5: ac2e4832427d6b159576e8a68305c722 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5918287 + timestamp: 1761748180250 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda + sha256: 5e8fd4aa00193c85602ce6101dd28fe31306dff85c9725048f6dc828dfa7c421 + md5: ab0bff36363bec94720275a681af8b83 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2945348 + timestamp: 1728565355702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da + md5: 0b367fad34931cb79e0d6b7e5c06bb1c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 932581 + timestamp: 1753948484112 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 + md5: 5b767048b1b3ee9a954b06f4084f93dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 h767d61c_7 + constrains: + - libstdcxx-ng ==15.2.0=*_7 + 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 + depends: + - libstdcxx 15.2.0 h8f9b012_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29343 + timestamp: 1759968157195 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.5.1-cuda120_h6f417b9_303.conda + sha256: 57270e0c6c761f5c4f9838333d8162e8e14963ecfe5dca1601e505b0d36d2ff1 + md5: d5f635aafd6ed3b2e74e25654f3e9a6b + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.0.107,<13.0a0 + - cuda-nvrtc >=12.0.76,<13.0a0 + - cuda-nvtx >=12.0.76,<13.0a0 + - cuda-version >=12.0,<13 + - cudnn >=9.3.0.75,<10.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.0.1.189,<13.0a0 + - libcufft >=11.0.0.21,<12.0a0 + - libcurand >=10.3.1.50,<11.0a0 + - libcusolver >=11.4.2.57,<12.0a0 + - libcusparse >=12.0.0.76,<13.0a0 + - libgcc >=12 + - libmagma >=2.8.0,<2.8.1.0a0 + - libmagma_sparse >=2.8.0,<2.8.1.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libstdcxx >=12 + - libuv >=1.49.2,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.23.4.1,<3.0a0 + - sleef >=3.7,<4.0a0 + constrains: + - pytorch 2.5.1 cuda120_*_303 + - pytorch-gpu ==2.5.1 + - pytorch-cpu ==99999999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 517644415 + timestamp: 1730837249593 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 + md5: 80c07c68d2f6870250959dcc95b209d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 37135 + timestamp: 1758626800002 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b + md5: 0f03292cc56bf91a077a134ea8747118 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 895108 + timestamp: 1753948278280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h031cc0b_0.conda + sha256: ee64e507b37b073e0bdad739e35330933dd5be7c639600a096551a6968f1035d + md5: a67cd8f7b0369bbf2c40411f05a62f3b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 hf2a90c1_0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 45292 + timestamp: 1761015784683 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hf2a90c1_0.conda + sha256: f5220ff49efc31431279859049199b9250e79f98c1dee1da12feb74bda2d9cf1 + md5: 23720d17346b21efb08d68c2255c8431 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + - icu <0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 554734 + timestamp: 1761015772672 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.4-h4922eb0_0.conda + sha256: d018aacb17fb7cc3a3871020cc9e27aade4b450abc8efc84975025c1b02d273e + md5: bd436383c8b7d4c64af6e0e382ce277a + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - openmp 21.1.4|21.1.4.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 3220151 + timestamp: 1761130841658 +- pypi: https://files.pythonhosted.org/packages/f7/97/ad1a907c0173a90dd4df7228f24a3ec61058bc1a9ff8a0caec20a0cc622e/llvmlite-0.45.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: llvmlite + version: 0.45.1 + sha256: 57c48bf2e1083eedbc9406fb83c4e6483017879714916fe8be8a72a9672c995a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + name: locket + version: 1.0.0 + sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/2a/86/30142987e19a0f9bb464ada0dad647fc39b81bac5eacefdcdfff0d14c41e/lonboard-0.12.1-py3-none-any.whl + name: lonboard + version: 0.12.1 + sha256: 74fd1a904443d38018aa142214367d183a89fc41d16a36f5b3cde17b2e293773 + requires_dist: + - anywidget~=0.9.0 + - arro3-compute>=0.4.1 + - arro3-core>=0.4.1 + - arro3-io>=0.4.1 + - geoarrow-rust-core>=0.5.2 + - ipywidgets>=7.6.0 + - numpy>=1.14 + - pyproj>=3.3 + - traitlets>=5.7.1 + - typing-extensions>=4.6.0 ; python_full_version < '3.12' + - click>=8.1.7 ; extra == 'cli' + - pyogrio>=0.8 ; extra == 'cli' + - shapely>=2 ; extra == 'cli' + - geopandas>=0.13 ; extra == 'geopandas' + - pandas>=2 ; extra == 'geopandas' + - shapely>=2 ; extra == 'geopandas' + - movingpandas>=0.17 ; extra == 'movingpandas' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/97/12/a1f2f4fdc6b7159c0d12249456f9fe454665b6126e98dbee9f2bd3cf735c/lz4-4.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: lz4 + version: 4.4.4 + sha256: e9cb387c33f014dae4db8cb4ba789c8d2a0a6d045ddff6be13f6c8d9def1d2a6 + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/5e/19fb53bd69379498c47bc234ca4d2851cfbca333d6d6929b10251916da25/mapclassify-2.10.0-py3-none-any.whl + name: mapclassify + version: 2.10.0 + sha256: dc39d6d924d546cdf2573bd587a7770e1a6ded3cb98272d6f0144319038566c5 + requires_dist: + - networkx>=3.2 + - numpy>=1.26 + - pandas>=2.1 + - scikit-learn>=1.4 + - scipy>=1.12 + - numba>=0.58 ; extra == 'speedups' + - ruff ; extra == 'dev' + - pre-commit ; extra == 'dev' + - watermark ; extra == 'dev' + - nbsphinx ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx>=1.4.3 ; extra == 'docs' + - sphinx-gallery ; extra == 'docs' + - sphinxcontrib-bibtex ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - geopandas ; extra == 'spatial' + - libpysal ; extra == 'spatial' + - matplotlib ; extra == 'spatial' + - shapely ; extra == 'spatial' + - mapclassify[spatial] ; extra == 'notebooks' + - geodatasets ; extra == 'notebooks' + - ipywidgets ; extra == 'notebooks' + - jupyterlab ; extra == 'notebooks' + - lonboard ; extra == 'notebooks' + - pyarrow ; extra == 'notebooks' + - pydeck ; extra == 'notebooks' + - seaborn ; extra == 'notebooks' + - mapclassify[spatial] ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - pytest-doctestplus ; extra == 'tests' + - mapclassify[dev,docs,notebooks,speedups,tests] ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + name: markdown-it-py + version: 4.0.0 + sha256: 87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=3.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - markdown-it-pyrs ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins>=0.5.0 ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins>=0.5.0 ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme~=1.0 ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - requests ; extra == 'testing' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda + sha256: a530a411bdaaf0b1e4de8869dfaca46cb07407bc7dc0702a9e231b0e5ce7ca85 + md5: c14389156310b8ed3520d84f854be1ee + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25909 + timestamp: 1759055357045 +- pypi: https://files.pythonhosted.org/packages/22/ff/6425bf5c20d79aa5b959d1ce9e65f599632345391381c9a104133fe0b171/matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.10.7 + sha256: b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=3 + - python-dateutil>=2.7 + - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' + - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + name: matplotlib-inline + version: 0.2.1 + sha256: d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76 + requires_dist: + - traitlets + - flake8 ; extra == 'test' + - nbdime ; extra == 'test' + - nbval ; extra == 'test' + - notebook ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + name: mdurl + version: 0.1.2 + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + sha256: 1e59d0dc811f150d39c2ff2da930d69dcb91cb05966b7df5b7d85133006668ed + md5: e4ab075598123e783b788b995afbdad0 + depends: + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - llvm-openmp >=20.1.8 + - tbb 2021.* + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 124988693 + timestamp: 1753975818422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 + md5: aa14b9a5196a6d8dd364164b7ce56acf + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=13 + - mpfr >=4.2.1,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 116777 + timestamp: 1725629179524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0 + md5: 2eeb50cab6652538eee8fc0bc3340c81 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=13 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 634751 + timestamp: 1725746740014 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + sha256: 7d7aa3fcd6f42b76bd711182f3776a02bef09a68c5f117d66b712a6d81368692 + md5: 3585aa87c43ab15b167b574cd73b057b + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpmath?source=hash-mapping + size: 439705 + timestamp: 1733302781386 +- pypi: https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.1.2 + sha256: fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: multidict + version: 6.7.0 + sha256: 9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl + name: multiurl + version: 0.3.7 + sha256: 054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380 + requires_dist: + - requests + - tqdm + - pytz + - python-dateutil +- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + name: mypy-extensions + version: 1.1.0 + sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/62/cd/9481a199a086ac9f91eaa232b56cff90ca7fdc2cb6658de93825b1007094/narwhals-2.10.1-py3-none-any.whl + name: narwhals + version: 2.10.1 + sha256: eed3d9ec8f821963456fef306c1ad11017995982169fca1f38f71c97d6a97b9b + requires_dist: + - cudf>=24.10.0 ; extra == 'cudf' + - dask[dataframe]>=2024.8 ; extra == 'dask' + - duckdb>=1.1 ; extra == 'duckdb' + - ibis-framework>=6.0.0 ; extra == 'ibis' + - packaging ; extra == 'ibis' + - pyarrow-hotfix ; extra == 'ibis' + - rich ; extra == 'ibis' + - modin ; extra == 'modin' + - pandas>=1.1.3 ; extra == 'pandas' + - polars>=0.20.4 ; extra == 'polars' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - pyspark>=3.5.0 ; extra == 'pyspark' + - pyspark[connect]>=3.5.0 ; extra == 'pyspark-connect' + - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_3.conda + sha256: 545bd71293b57322e0ff271bd5bac07021ce57740cac2a3207b4df271fd3b5d8 + md5: e3138c02cf940636811064f1a088470e + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 213736261 + timestamp: 1757637923944 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 891641 + timestamp: 1738195959188 +- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + name: nest-asyncio + version: 1.6.0 + sha256: 87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c + requires_python: '>=3.5' +- 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 + name: netcdf4 + version: 1.7.3 + sha256: 0c764ba6f6a1421cab5496097e8a1c4d2e36be2a04880dfd288bb61b348c217e + requires_dist: + - cftime + - certifi + - numpy + - cython ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - 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 + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping + size: 1564462 + timestamp: 1749078300258 +- pypi: https://files.pythonhosted.org/packages/78/7e/bf2e3634993d57f95305c7cee4c9c6cb3c9c78404ee7b49569a0dfecfe33/numba-0.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: numba + version: 0.62.1 + sha256: 8c9460b9e936c5bd2f0570e20a0a5909ee6e8b694fd958b210e3bde3a6dba2d7 + requires_dist: + - llvmlite>=0.45.0.dev0,<0.46 + - numpy>=1.22,<2.4 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/93/f7/616963e354a30290b281af99ad9ead977bd60281ccb82daf32b75cc1b7d9/numbagg-0.9.3-py3-none-any.whl + name: numbagg + version: 0.9.3 + sha256: 19f3fbcc9ff0644110a861ae755155aace4705fcf31b5c2c4648f4441f33d980 + requires_dist: + - numpy + - numba + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fa/91/d96999b41e3146b6c0ce6bddc5ad85803cb4d743c95394562c2a4bb8cded/numcodecs-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: numcodecs + version: 0.15.1 + sha256: 1dfdea4a67108205edfce99c1cb6cd621343bc7abb7e16a041c966776920e7de + requires_dist: + - numpy>=1.24 + - deprecated + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; 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' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py313hf6604e3_0.conda + sha256: 41084b68fbbcbaba0bce28872ec338371f4ccbe40a5464eb8bed2c694197faa5 + md5: c47c527e215377958d28c470ce4863e1 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 8889991 + timestamp: 1761162144475 +- pypi: https://files.pythonhosted.org/packages/b0/e0/760e73c111193db5ca37712a148e4807d1b0c60302ab31e4ada6528ca34d/numpy_groupies-0.11.3-py3-none-any.whl + name: numpy-groupies + version: 0.11.3 + sha256: d4065dd5d56fda941ad5a7c80a7f80b49f671ed148aaa3e243a0e4caa71adcb3 + requires_dist: + - numpy + - numba ; extra == 'fast' + - pytest ; extra == 'dev' + - numba ; extra == 'dev' + - pandas ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/53/20/08c6dc0f20c1394e2324b9344838e4e7af770cdcb52c30757a475f50daeb/obstore-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: obstore + version: 0.8.2 + sha256: ab440e89c5c37a8ec230857dd65147d4b923e0cada33297135d05e0f937d696a + requires_dist: + - typing-extensions ; python_full_version < '3.13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/99/e2/311fb383d9534eef7bfbe858fad931b6e3dbe85843c50592f50063c3bc83/odc_geo-0.4.10-py3-none-any.whl + name: odc-geo + version: 0.4.10 + sha256: ab5f26f56883a11286a9583c04d30190e35a2702e8aa72fa3b4b438bea851b19 + requires_dist: + - affine + - cachetools + - numpy + - pyproj>=3.0.0 + - shapely + - xarray>=0.19 ; extra == 'xr' + - rasterio ; extra == 'warp' + - tifffile ; extra == 'tiff' + - imagecodecs ; extra == 'tiff' + - dask[array,distributed] ; extra == 'tiff' + - rasterio ; extra == 'tiff' + - xarray>=0.19 ; extra == 'tiff' + - boto3 ; extra == 's3' + - azure-storage-blob ; extra == 'az' + - rasterio ; extra == 'all' + - tifffile ; extra == 'all' + - imagecodecs ; extra == 'all' + - dask[array,distributed] ; extra == 'all' + - rasterio ; extra == 'all' + - xarray>=0.19 ; extra == 'all' + - boto3 ; extra == 'all' + - azure-storage-blob ; extra == 'all' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - geopandas ; extra == 'test' + - rasterio ; extra == 'test' + - pytest ; extra == 'test-all' + - pytest-cov ; extra == 'test-all' + - pytest-timeout ; extra == 'test-all' + - geopandas ; extra == 'test-all' + - rasterio ; extra == 'test-all' + - tifffile ; extra == 'test-all' + - imagecodecs ; extra == 'test-all' + - dask[array,distributed] ; extra == 'test-all' + - rasterio ; extra == 'test-all' + - xarray>=0.19 ; extra == 'test-all' + - boto3 ; extra == 'test-all' + - azure-storage-blob ; extra == 'test-all' + - folium ; extra == 'test-all' + - ipyleaflet ; extra == 'test-all' + - matplotlib ; extra == 'test-all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/04/48/d45d414b8228325051b0a09f68322ef26717eb9b6517579ae395adf2fbfc/odc_loader-0.5.1-py3-none-any.whl + name: odc-loader + version: 0.5.1 + sha256: fbe505e2f0e8ac4db2542935bdf5f706e6147817d818073a8a98d3226bd6470f + requires_dist: + - odc-geo>=0.4.7 + - rasterio>=1.0.0,!=1.3.0,!=1.3.1 + - dask[array] + - numpy>=1.20.0 + - xarray>=0.19 + - 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 + name: odc-stac + version: 0.4.0 + sha256: a76b9d96d7aea53cabcd7ba99b0cf467a6eab6d2ad6a52802af36b5c407c5952 + requires_dist: + - affine + - odc-geo>=0.4.7 + - odc-loader>=0.5.1 + - rasterio>=1.0.0,!=1.3.0,!=1.3.1 + - dask[array] + - numpy>=1.20.0 + - pandas + - pystac>=1.0.0,<2 + - toolz + - typing-extensions + - xarray>=0.19 + - botocore ; extra == 'botocore' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - 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' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pystac-client ; extra == 'test' + - distributed ; extra == 'test' + - geopandas ; extra == 'test' + - pytest ; extra == 'test-all' + - pytest-cov ; extra == 'test-all' + - pytest-timeout ; extra == 'test-all' + - 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' +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda + sha256: e807f3bad09bdf4075dbb4168619e14b0c0360bacb2e12ef18641a834c8c5549 + md5: 14edad12b59ccbfa3910d42c72adc2a0 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3119624 + timestamp: 1759324353651 +- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + name: opt-einsum + version: 3.4.0 + sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + name: packaging + version: '25.0' + sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 2.3.3 + sha256: 318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac + requires_dist: + - numpy>=1.22.4 ; python_full_version < '3.11' + - numpy>=1.23.2 ; python_full_version == '3.11.*' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - python-dateutil>=2.8.2 + - pytz>=2020.1 + - tzdata>=2022.7 + - hypothesis>=6.46.1 ; extra == 'test' + - pytest>=7.3.2 ; extra == 'test' + - pytest-xdist>=2.2.0 ; extra == 'test' + - pyarrow>=10.0.1 ; extra == 'pyarrow' + - bottleneck>=1.3.6 ; extra == 'performance' + - numba>=0.56.4 ; extra == 'performance' + - numexpr>=2.8.4 ; extra == 'performance' + - scipy>=1.10.0 ; extra == 'computation' + - xarray>=2022.12.0 ; extra == 'computation' + - fsspec>=2022.11.0 ; extra == 'fss' + - s3fs>=2022.11.0 ; extra == 'aws' + - gcsfs>=2022.11.0 ; extra == 'gcp' + - pandas-gbq>=0.19.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.0 ; extra == 'excel' + - python-calamine>=0.1.7 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.0.5 ; extra == 'excel' + - pyarrow>=10.0.1 ; extra == 'parquet' + - pyarrow>=10.0.1 ; extra == 'feather' + - tables>=3.8.0 ; extra == 'hdf5' + - pyreadstat>=1.2.0 ; extra == 'spss' + - sqlalchemy>=2.0.0 ; extra == 'postgresql' + - psycopg2>=2.9.6 ; extra == 'postgresql' + - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.0 ; extra == 'mysql' + - pymysql>=1.0.2 ; extra == 'mysql' + - sqlalchemy>=2.0.0 ; extra == 'sql-other' + - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' + - beautifulsoup4>=4.11.2 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'xml' + - matplotlib>=3.6.3 ; extra == 'plot' + - jinja2>=3.1.2 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.3.0 ; extra == 'clipboard' + - zstandard>=0.19.0 ; extra == 'compression' + - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' + - adbc-driver-postgresql>=0.8.0 ; extra == 'all' + - adbc-driver-sqlite>=0.8.0 ; extra == 'all' + - beautifulsoup4>=4.11.2 ; extra == 'all' + - bottleneck>=1.3.6 ; extra == 'all' + - dataframe-api-compat>=0.1.7 ; extra == 'all' + - fastparquet>=2022.12.0 ; extra == 'all' + - fsspec>=2022.11.0 ; extra == 'all' + - gcsfs>=2022.11.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.46.1 ; extra == 'all' + - jinja2>=3.1.2 ; extra == 'all' + - lxml>=4.9.2 ; extra == 'all' + - matplotlib>=3.6.3 ; extra == 'all' + - numba>=0.56.4 ; extra == 'all' + - numexpr>=2.8.4 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.0 ; extra == 'all' + - pandas-gbq>=0.19.0 ; extra == 'all' + - psycopg2>=2.9.6 ; extra == 'all' + - pyarrow>=10.0.1 ; extra == 'all' + - pymysql>=1.0.2 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.0 ; extra == 'all' + - pytest>=7.3.2 ; extra == 'all' + - pytest-xdist>=2.2.0 ; extra == 'all' + - python-calamine>=0.1.7 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'all' + - scipy>=1.10.0 ; extra == 'all' + - s3fs>=2022.11.0 ; extra == 'all' + - sqlalchemy>=2.0.0 ; extra == 'all' + - tables>=3.8.0 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2022.12.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.0.5 ; extra == 'all' + - zstandard>=0.19.0 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl + name: parso + version: 0.8.5 + sha256: 646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887 + requires_dist: + - pytest ; extra == 'testing' + - docopt ; extra == 'testing' + - flake8==5.0.4 ; extra == 'qa' + - mypy==0.971 ; extra == 'qa' + - types-setuptools==67.2.0.1 ; extra == 'qa' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + name: partd + version: 1.4.2 + sha256: 978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f + requires_dist: + - locket + - toolz + - numpy>=1.20.0 ; extra == 'complete' + - pandas>=1.3 ; extra == 'complete' + - pyzmq ; extra == 'complete' + - blosc ; extra == 'complete' + requires_python: '>=3.9' +- 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 +- pypi: https://files.pythonhosted.org/packages/38/57/755dbd06530a27a5ed74f8cb0a7a44a21722ebf318edbe67ddbd7fb28f88/pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.0.0 + sha256: f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl + name: platformdirs + version: 4.5.0 + sha256: e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3 + requires_dist: + - furo>=2025.9.25 ; extra == 'docs' + - proselint>=0.14 ; extra == 'docs' + - sphinx-autodoc-typehints>=3.2 ; extra == 'docs' + - sphinx>=8.2.3 ; extra == 'docs' + - appdirs==1.4.4 ; extra == 'test' + - covdefaults>=2.3 ; extra == 'test' + - pytest-cov>=7 ; extra == 'test' + - pytest-mock>=3.15.1 ; extra == 'test' + - pytest>=8.4.2 ; extra == 'test' + - mypy>=1.18.2 ; extra == 'type' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3f/93/023955c26b0ce614342d11cc0652f1e45e32393b6ab9d11a664a60e9b7b7/plotly-6.3.1-py3-none-any.whl + name: plotly + version: 6.3.1 + sha256: 8b4420d1dcf2b040f5983eed433f95732ed24930e496d36eb70d211923532e64 + requires_dist: + - narwhals>=1.15.1 + - packaging + - numpy ; extra == 'express' + - kaleido>=1.0.0 ; extra == 'kaleido' + - pytest ; extra == 'dev-core' + - requests ; extra == 'dev-core' + - ruff==0.11.12 ; extra == 'dev-core' + - plotly[dev-core] ; extra == 'dev-build' + - build ; extra == 'dev-build' + - jupyter ; extra == 'dev-build' + - plotly[dev-build] ; extra == 'dev-optional' + - plotly[kaleido] ; extra == 'dev-optional' + - anywidget ; extra == 'dev-optional' + - colorcet ; extra == 'dev-optional' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' + - geopandas ; extra == 'dev-optional' + - inflect ; extra == 'dev-optional' + - numpy ; extra == 'dev-optional' + - orjson ; extra == 'dev-optional' + - pandas ; extra == 'dev-optional' + - pdfrw ; extra == 'dev-optional' + - pillow ; extra == 'dev-optional' + - plotly-geo ; extra == 'dev-optional' + - polars[timezone] ; extra == 'dev-optional' + - pyarrow ; extra == 'dev-optional' + - pyshp ; extra == 'dev-optional' + - pytz ; extra == 'dev-optional' + - scikit-image ; extra == 'dev-optional' + - scipy ; extra == 'dev-optional' + - shapely ; extra == 'dev-optional' + - statsmodels ; extra == 'dev-optional' + - vaex ; python_full_version < '3.10' and extra == 'dev-optional' + - xarray ; extra == 'dev-optional' + - plotly[dev-optional] ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl + name: pooch + version: 1.8.2 + sha256: 3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47 + requires_dist: + - platformdirs>=2.5.0 + - packaging>=20.0 + - requests>=2.19.0 + - tqdm>=4.41.0,<5.0.0 ; extra == 'progress' + - paramiko>=2.7.0 ; extra == 'sftp' + - xxhash>=1.4.3 ; extra == 'xxhash' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + name: prompt-toolkit + version: 3.0.52 + sha256: 9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 + requires_dist: + - wcwidth + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: propcache + version: 0.4.1 + sha256: d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4e/6d/280c4c2ce28b1593a19ad5239c8b826871fc6ec275c21afc8e1820108039/proto_plus-1.26.1-py3-none-any.whl + name: proto-plus + version: 1.26.1 + sha256: 13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 + requires_dist: + - protobuf>=3.19.0,<7.0.0 + - google-api-core>=1.31.5 ; extra == 'testing' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/21/51/0b1cbad62074439b867b4e04cc09b93f6699d78fd191bed2bbb44562e077/protobuf-6.33.0-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.33.0 + sha256: 35be49fd3f4fefa4e6e2aacc35e8b837d6703c37a2168a55ac21e9b1bc7559ef + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + name: psutil + version: 7.1.3 + sha256: 3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 + requires_dist: + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-subtests ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline ; os_name == 'nt' and extra == 'dev' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-subtests ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/ff/7b/e9a6fa461ef266c5a23485004934b8f08a2a8ddc447802161ea56d9837dd/psygnal-0.15.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: psygnal + version: 0.15.0 + sha256: a0172efeb861280bca05673989a4df21624f44344eff20b873d8c9d0edc01350 + requires_dist: + - wrapt ; extra == 'proxy' + - pydantic ; extra == 'pydantic' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + name: ptyprocess + version: 0.7.0 + sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 +- pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + name: pure-eval + version: 0.2.3 + sha256: 1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 + requires_dist: + - pytest ; extra == 'tests' +- pypi: https://files.pythonhosted.org/packages/1b/8b/5362443737a5307a7b67c1017c42cd104213189b4970bf607e05faf9c525/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_x86_64.whl + name: pyarrow + version: 22.0.0 + sha256: e0a15757fccb38c410947df156f9749ae4a3c89b2393741a50521f39a8cf202a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + name: pyasn1 + version: 0.6.1 + sha256: 0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + name: pyasn1-modules + version: 0.4.2 + sha256: 29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a + requires_dist: + - pyasn1>=0.6.1,<0.7.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + name: pycparser + version: '2.23' + sha256: e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 + requires_python: '>=3.8' +- 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 + name: pyerfa + version: 2.0.1.5 + sha256: 0e43c7194e3242083f2350b46c09fd4bf8ba1bcc0ebd1460b98fc47fe2389906 + requires_dist: + - numpy>=1.19.3 + - sphinx-astropy>=1.3 ; extra == 'docs' + - pytest ; extra == 'test' + - pytest-doctestplus>=0.7 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + name: pygments + version: 2.19.2 + sha256: 86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/89/a9/79eca15094f7806a3adcf0bb976ab4346b0fb1bd87956c1933df44546c14/pyogrio-0.11.1-cp313-cp313-manylinux_2_28_x86_64.whl + name: pyogrio + version: 0.11.1 + sha256: e929452f6988c0365dd32ff2485d9488160a709fee28743abbbc18d663169ed0 + requires_dist: + - certifi + - numpy + - packaging + - cython ; extra == 'dev' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-benchmark ; extra == 'benchmark' + - geopandas ; extra == 'geopandas' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + name: pyparsing + version: 3.2.5 + sha256: e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl + name: pyperclip + version: 1.11.0 + sha256: 299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +- pypi: https://files.pythonhosted.org/packages/f8/85/c2b1706e51942de19076eff082f8495e57d5151364e78b5bef4af4a1d94a/pyproj-3.7.2-cp313-cp313-manylinux_2_28_x86_64.whl + name: pyproj + version: 3.7.2 + sha256: 5141a538ffdbe4bfd157421828bb2e07123a90a7a2d6f30fa1462abcfb5ce681 + requires_dist: + - certifi + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/51/92/a8ad817864a560b96ac1c817f9c56bb7eacc1a7d522e2d39afe9e9c77d7b/pyshp-3.0.2.post1-py3-none-any.whl + name: pyshp + version: 3.0.2.post1 + sha256: b0aec66bc55f7cd3a846f6b02c5a9eec1fc1d2cff16ccfcf6493a6773c7eb602 + requires_dist: + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - ruff ; extra == 'dev' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c0/01/eb465e19137b36ba683417e982907aa9c7df1fb0b968e1424e5d678ba0dc/pystac-1.14.1-py3-none-any.whl + name: pystac + version: 1.14.1 + sha256: 19d73306d8fb94fbd66b7945ee5510e3574c8d48462f86e1e91e3f257b79722b + requires_dist: + - python-dateutil>=2.7.0 + - jinja2<4.0 ; extra == 'jinja2' + - orjson>=3.5 ; extra == 'orjson' + - urllib3>=1.26 ; extra == 'urllib3' + - jsonschema~=4.18 ; extra == 'validation' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5d/d2/5f6367b14c9f250d1a6725d18bd1e9584f5ab1587e292f3a847e59189598/pystac_client-0.9.0-py3-none-any.whl + name: pystac-client + version: 0.9.0 + sha256: eed146b5980f93646aaa3a59080f11f1dcab6000b0bfbc28b1d0c6fd0a61eda1 + requires_dist: + - requests>=2.28.2 + - pystac[validation]>=1.10.0 + - python-dateutil>=2.8.2 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.9-hc97d973_101_cp313.conda + build_number: 101 + sha256: e89da062abd0d3e76c8d3b35d3cafc5f0d05914339dcb238f9e3675f2a58d883 + md5: 4780fe896e961722d0623fa91d0d3378 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libuuid >=2.41.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 37174029 + timestamp: 1761178179147 + python_site_packages_path: lib/python3.13/site-packages +- 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 + name: python-box + version: 7.3.2 + sha256: 3ca4685a7f764b5a71b6e08535ce2a96b7964bb63d8cb4df10f6bb7147b6c54b + requires_dist: + - ruamel-yaml>=0.17 ; extra == 'all' + - toml ; extra == 'all' + - msgpack ; extra == 'all' + - ruamel-yaml>=0.17 ; extra == 'yaml' + - ruamel-yaml>=0.17 ; extra == 'ruamel-yaml' + - pyyaml ; extra == 'pyyaml' + - tomli ; python_full_version < '3.11' and extra == 'tomli' + - tomli-w ; extra == 'tomli' + - toml ; extra == 'toml' + - msgpack ; extra == 'msgpack' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + name: python-dateutil + version: 2.9.0.post0 + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.5.1-cuda120_py313h869cad7_303.conda + sha256: d92419924a2fb4a00fd1cbac12f1e92196ba918b352184c89afa1eb571ad11b0 + md5: b0fad22eb1b6dea9f0dbff8abc566e9b + depends: + - __cuda + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.0.107,<13.0a0 + - cuda-nvrtc >=12.0.76,<13.0a0 + - cuda-nvtx >=12.0.76,<13.0a0 + - cuda-version >=12.0,<13 + - cudnn >=9.3.0.75,<10.0a0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.0.1.189,<13.0a0 + - libcufft >=11.0.0.21,<12.0a0 + - libcurand >=10.3.1.50,<11.0a0 + - libcusolver >=11.4.2.57,<12.0a0 + - libcusparse >=12.0.0.76,<13.0a0 + - libgcc >=12 + - libmagma >=2.8.0,<2.8.1.0a0 + - libmagma_sparse >=2.8.0,<2.8.1.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libstdcxx >=12 + - libtorch 2.5.1.* + - libuv >=1.49.2,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.23.4.1,<3.0a0 + - networkx + - numpy >=1.21,<3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.7,<4.0a0 + - sympy >=1.13.1,!=1.13.2 + - typing_extensions + constrains: + - pytorch-gpu ==2.5.1 + - pytorch-cpu ==99999999 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 27360320 + timestamp: 1730838371704 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.5.1-cuda126hf7c78f0_303.conda + sha256: c7bc7badc033cb8432cae510260926df6f836ada24020a31b6844a57a90370b8 + md5: afaf760e55725108ae78ed41198c49bb + depends: + - pytorch 2.5.1 cuda*303 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23604 + timestamp: 1730845700937 +- pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + name: pytz + version: '2025.2' + sha256: 5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00 +- pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: 0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: pyzmq + version: 27.1.0 + sha256: 43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31 + requires_dist: + - cffi ; implementation_name == 'pypy' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/05/19/94d6c66184c7d0f9374330c714f62c147dbb53eda9efdcc8fc6e2ac454c5/rasterio-1.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rasterio + version: 1.4.3 + sha256: d9bab1a0bb22b8bed1db34b5258db93d790ed4e61ef21ac055a7c6933c8d5e84 + requires_dist: + - affine + - attrs + - certifi + - click>=4.0 + - cligj>=0.5 + - importlib-metadata ; python_full_version < '3.10' + - numpy>=1.24 + - click-plugins + - pyparsing + - ghp-import ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-click ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - ipython>=2.0 ; extra == 'ipython' + - matplotlib ; extra == 'plot' + - boto3>=1.2.4 ; extra == 's3' + - boto3>=1.2.4 ; extra == 'test' + - fsspec ; extra == 'test' + - hypothesis ; extra == 'test' + - packaging ; extra == 'test' + - pytest-cov>=2.2.0 ; extra == 'test' + - pytest>=2.8.2 ; extra == 'test' + - shapely ; extra == 'test' + - ghp-import ; extra == 'all' + - sphinx-click ; extra == 'all' + - matplotlib ; extra == 'all' + - packaging ; extra == 'all' + - sphinx ; extra == 'all' + - numpydoc ; extra == 'all' + - shapely ; extra == 'all' + - ipython>=2.0 ; extra == 'all' + - hypothesis ; extra == 'all' + - pytest>=2.8.2 ; extra == 'all' + - sphinx-rtd-theme ; extra == 'all' + - fsspec ; extra == 'all' + - pytest-cov>=2.2.0 ; extra == 'all' + - boto3>=1.2.4 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f2/98/7e6d147fd16a10a5f821db6e25f192265d6ecca3d82957a4fdd592cad49c/ratelim-0.1.6-py2.py3-none-any.whl + name: ratelim + version: 0.1.6 + sha256: e1a7dd39e6b552b7cc7f52169cd66cdb826a1a30198e355d7016012987c9ad08 + requires_dist: + - decorator +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 + depends: + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 282480 + timestamp: 1740379431762 +- pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + name: rechunker + version: 0.5.2 + sha256: e09585d69b429ae466470047a2b828f003c123dffe6a265720c0ab0ca78f4937 + requires_dist: + - dask[array,diagnostics] + - mypy-extensions + - zarr>=2.11 + - apache-beam ; extra == 'complete' + - fsspec ; extra == 'complete' + - prefect<2 ; extra == 'complete' + - pyyaml ; extra == 'complete' + - xarray>=2022.3 ; extra == 'complete' + - black ; extra == 'dev' + - codecov ; extra == 'dev' + - flake8 ; extra == 'dev' + - hypothesis ; extra == 'dev' + - ipython ; extra == 'dev' + - mypy==0.782 ; extra == 'dev' + - nbsphinx ; extra == 'dev' + - numpydoc ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-pangeo-theme ; extra == 'dev' + - sphinxcontrib-srclinks ; extra == 'dev' + - ipython ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-pangeo-theme ; extra == 'docs' + - sphinxcontrib-srclinks ; extra == 'docs' + - hypothesis ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + name: referencing + version: 0.37.0 + sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + name: requests + version: 2.32.5 + sha256: 2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + name: rich + version: 14.2.0 + sha256: 76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl + name: rich-rst + version: 1.3.2 + sha256: a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a + requires_dist: + - docutils + - rich>=12.0.0 + - sphinx ; extra == 'docs' +- pypi: https://files.pythonhosted.org/packages/d6/e5/4f4fc949e7eb8415a57091767969e1d314dcf06b74b85bbbf29991395af4/rioxarray-0.20.0-py3-none-any.whl + name: rioxarray + version: 0.20.0 + sha256: 197b0638146dfc6093ef52f8bf8afb42757ca16bc2e0d87b6282ce54170c9799 + requires_dist: + - packaging + - rasterio>=1.4.3 + - xarray>=2024.7.0 + - pyproj>=3.3 + - numpy>=2 + - scipy ; extra == 'interp' + - scipy ; extra == 'all' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/ca/ee/a324d3198da151820a326c1f988caaa4f37fc27955148a76fff7a2d787a9/rpds_py-0.28.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 0.28.0 + sha256: b8e1e9be4fa6305a16be628959188e4fd5cd6f1b0e724d63c6d8b2a8adf74ea6 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl + name: rsa + version: 4.9.1 + sha256: 68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762 + requires_dist: + - pyasn1>=0.1.3 + requires_python: '>=3.6,<4' +- pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + name: s3transfer + version: 0.14.0 + sha256: ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456 + requires_dist: + - botocore>=1.37.4,<2.0a0 + - botocore[crt]>=1.37.4,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: scikit-learn + version: 1.7.2 + sha256: 502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f + requires_dist: + - numpy>=1.22.0 + - scipy>=1.8.0 + - joblib>=1.2.0 + - threadpoolctl>=3.1.0 + - numpy>=1.22.0 ; extra == 'build' + - scipy>=1.8.0 ; extra == 'build' + - cython>=3.0.10 ; extra == 'build' + - meson-python>=0.17.1 ; extra == 'build' + - numpy>=1.22.0 ; extra == 'install' + - scipy>=1.8.0 ; extra == 'install' + - joblib>=1.2.0 ; extra == 'install' + - threadpoolctl>=3.1.0 ; extra == 'install' + - matplotlib>=3.5.0 ; extra == 'benchmark' + - pandas>=1.4.0 ; extra == 'benchmark' + - memory-profiler>=0.57.0 ; extra == 'benchmark' + - matplotlib>=3.5.0 ; extra == 'docs' + - scikit-image>=0.19.0 ; extra == 'docs' + - pandas>=1.4.0 ; extra == 'docs' + - seaborn>=0.9.0 ; extra == 'docs' + - memory-profiler>=0.57.0 ; extra == 'docs' + - sphinx>=7.3.7 ; extra == 'docs' + - sphinx-copybutton>=0.5.2 ; extra == 'docs' + - sphinx-gallery>=0.17.1 ; extra == 'docs' + - numpydoc>=1.2.0 ; extra == 'docs' + - pillow>=8.4.0 ; extra == 'docs' + - pooch>=1.6.0 ; extra == 'docs' + - sphinx-prompt>=1.4.0 ; extra == 'docs' + - sphinxext-opengraph>=0.9.1 ; extra == 'docs' + - plotly>=5.14.0 ; extra == 'docs' + - polars>=0.20.30 ; extra == 'docs' + - sphinx-design>=0.5.0 ; extra == 'docs' + - sphinx-design>=0.6.0 ; extra == 'docs' + - sphinxcontrib-sass>=0.3.4 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.3 ; extra == 'docs' + - sphinx-remove-toctrees>=1.0.0.post1 ; extra == 'docs' + - towncrier>=24.8.0 ; extra == 'docs' + - matplotlib>=3.5.0 ; extra == 'examples' + - scikit-image>=0.19.0 ; extra == 'examples' + - pandas>=1.4.0 ; extra == 'examples' + - seaborn>=0.9.0 ; extra == 'examples' + - pooch>=1.6.0 ; extra == 'examples' + - plotly>=5.14.0 ; extra == 'examples' + - matplotlib>=3.5.0 ; extra == 'tests' + - scikit-image>=0.19.0 ; extra == 'tests' + - pandas>=1.4.0 ; extra == 'tests' + - pytest>=7.1.2 ; extra == 'tests' + - pytest-cov>=2.9.0 ; extra == 'tests' + - ruff>=0.11.7 ; extra == 'tests' + - mypy>=1.15 ; extra == 'tests' + - pyamg>=4.2.1 ; extra == 'tests' + - polars>=0.20.30 ; extra == 'tests' + - pyarrow>=12.0.0 ; extra == 'tests' + - numpydoc>=1.2.0 ; extra == 'tests' + - pooch>=1.6.0 ; extra == 'tests' + - conda-lock==3.0.1 ; extra == 'maintenance' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: scipy + version: 1.16.3 + sha256: 7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88 + requires_dist: + - numpy>=1.25.2,<2.6 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.0.292 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + - rich-click ; extra == 'dev' + - doit>=0.36.0 ; extra == 'dev' + - pydevtool ; extra == 'dev' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a3/bb/bbae36d06c0fd670e8373da67096cd57058b57c9bad7d92969b5e3b730af/scooby-0.11.0-py3-none-any.whl + name: scooby + version: 0.11.0 + sha256: a79663d1a7711eb104e4b2935988ea1ed5f7be6b7288fad23b4fba7462832f9d + requires_dist: + - psutil ; extra == 'cpu' + - mkl ; extra == 'cpu' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + name: seaborn + version: 0.13.2 + sha256: 636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 + requires_dist: + - numpy>=1.20,!=1.24.0 + - pandas>=1.2 + - matplotlib>=3.4,!=3.6.1 + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - flake8 ; extra == 'dev' + - mypy ; extra == 'dev' + - pandas-stubs ; extra == 'dev' + - pre-commit ; extra == 'dev' + - flit ; extra == 'dev' + - numpydoc ; extra == 'docs' + - nbconvert ; extra == 'docs' + - ipykernel ; extra == 'docs' + - sphinx<6.0.0 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - pyyaml ; extra == 'docs' + - pydata-sphinx-theme==0.10.0rc2 ; extra == 'docs' + - scipy>=1.7 ; extra == 'stats' + - statsmodels>=0.12 ; extra == 'stats' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 + md5: 4de79c071274a53dcaf2a8c749d1499e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 748788 + timestamp: 1748804951958 +- pypi: https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: shapely + version: 2.1.2 + sha256: 7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6 + requires_dist: + - numpy>=1.21 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - scipy-doctest ; extra == 'test' + - numpydoc==1.1.* ; extra == 'docs' + - matplotlib ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-book-theme ; extra == 'docs' + - sphinx-remove-toctrees ; extra == 'docs' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + sha256: 57afc2ab5bdb24cf979964018dddbc5dfaee130b415e6863765e45aed2175ee4 + md5: e8a0b4f5e82ecacffaa5e805020473cb + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + license: BSL-1.0 + purls: [] + size: 1951720 + timestamp: 1756274576844 +- pypi: https://files.pythonhosted.org/packages/c2/72/739e042f3e8d61be242ec024a1eb5cde76f8ab29590ddadf143eaa844f91/smart_geocubes-0.0.9-py3-none-any.whl + name: smart-geocubes + version: 0.0.9 + sha256: 0145438b89dd48490231e980002b220309e1d8373b747dfa50cb62f2cd458cb0 + requires_dist: + - geopandas>=1.0.1 + - icechunk>=0.2.5,<0.3 + - numcodecs>=0.15.0,<0.16 + - numpy>=1.20,<3 + - odc-geo>=0.4.5,<0.5 + - stopuhr>=0.0.3 + - xarray>=2025.1.1 + - zarr>=3,<4 + - bokeh>=3.6.3 ; extra == 'dask' + - dask>=2025.1.0 ; extra == 'dask' + - distributed>=2025.1.0 ; extra == 'dask' + - earthengine-api>=1.1.5 ; extra == 'gee' + - rasterio>=1.4.3 ; extra == 'gee' + - rioxarray>=0.18.2 ; extra == 'gee' + - xee>=0.0.20 ; extra == 'gee' + - odc-stac>=0.3.11 ; extra == 'stac' + - pyarrow>=19.0.1 ; extra == 'stac' + - pystac-client>=0.8.5 ; extra == 'stac' + - pystac>=1.12.1 ; extra == 'stac' + - xpystac>=0.1.3 ; extra == 'stac' + - cartopy>=0.24.1 ; extra == 'viz' + - folium>=0.19.4 ; extra == 'viz' + - mapclassify>=2.8.1 ; extra == 'viz' + - matplotlib>=3.10.0 ; extra == 'viz' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + name: sortedcontainers + version: 2.4.0 + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl + name: soupsieve + version: '2.8' + sha256: 0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/81/ec/8bdccea3ff7d557601183581340c3768b7bb7b1e32c8991f1130f0c1e2c4/spectate-1.0.1-py2.py3-none-any.whl + name: spectate + version: 1.0.1 + sha256: c4585194c238979f953fbf2ecf9f94c84d9d0a929432c7104e39984f52c9e718 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + name: stack-data + version: 0.6.3 + sha256: d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 + requires_dist: + - executing>=1.2.0 + - asttokens>=2.1.0 + - pure-eval + - pytest ; extra == 'tests' + - typeguard ; extra == 'tests' + - pygments ; extra == 'tests' + - littleutils ; extra == 'tests' + - cython ; extra == 'tests' +- pypi: https://files.pythonhosted.org/packages/7a/31/7d601cc639b0362a213552a838af601105591598a4b08ec80666458083d2/stopuhr-0.0.10-py3-none-any.whl + name: stopuhr + version: 0.0.10 + sha256: e5aff4e00963abf473cf02d2980ded771034423a96c4e71c92c09d456ec83708 + requires_dist: + - pandas>=2.2.3 ; extra == 'export' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 + md5: 8c09fac3785696e1c477156192d64b91 + depends: + - __unix + - cpython + - gmpy2 >=2.0.8 + - mpmath >=0.19 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/sympy?source=hash-mapping + size: 4616621 + timestamp: 1745946173026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + sha256: cf9101d1327de410a844f29463c486c47dfde506d0c0656d2716c03135666c3f + md5: aa15aae38fd752855ca03a68af7f40e2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.12.1,<2.12.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 177271 + timestamp: 1755775913224 +- pypi: https://files.pythonhosted.org/packages/31/cc/099fab5a73909a117e9689c7da4c39a248595187f0f30dd879ad1d2c34ce/tblib-3.2.1-py3-none-any.whl + name: tblib + version: 3.2.1 + sha256: aacdaffceac6c4ef6818887b15677513f16d75c68384b76b415a935d548dd172 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + name: threadpoolctl + version: 3.6.0 + sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e6/5e/56c751afab61336cf0e7aa671b134255a30f15f59cd9e04f59c598a37ff5/tifffile-2025.10.16-py3-none-any.whl + name: tifffile + version: 2025.10.16 + sha256: 41463d979c1c262b0a5cdef2a7f95f0388a072ad82d899458b154a48609d759c + requires_dist: + - numpy + - imagecodecs>=2024.12.30 ; extra == 'codecs' + - defusedxml ; extra == 'xml' + - lxml ; extra == 'xml' + - zarr>=3.1.3 ; extra == 'zarr' + - fsspec ; extra == 'zarr' + - kerchunk ; extra == 'zarr' + - matplotlib ; extra == 'plot' + - imagecodecs>=2024.12.30 ; extra == 'all' + - matplotlib ; extra == 'all' + - defusedxml ; extra == 'all' + - lxml ; extra == 'all' + - zarr>=3.1.3 ; extra == 'all' + - fsspec ; extra == 'all' + - kerchunk ; extra == 'all' + - cmapfile ; extra == 'test' + - czifile ; extra == 'test' + - dask ; extra == 'test' + - defusedxml ; extra == 'test' + - fsspec ; extra == 'test' + - imagecodecs ; extra == 'test' + - kerchunk ; extra == 'test' + - lfdfiles ; extra == 'test' + - lxml ; extra == 'test' + - ndtiff ; extra == 'test' + - oiffile ; extra == 'test' + - psdtags ; extra == 'test' + - pytest ; extra == 'test' + - requests ; extra == 'test' + - roifile ; extra == 'test' + - xarray ; extra == 'test' + - zarr>=3.1.3 ; extra == 'test' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 + md5: a0116df4f4ed05c303811a837d5b39d8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3285204 + timestamp: 1748387766691 +- pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + name: toolz + version: 1.1.0 + sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: tornado + version: 6.5.2 + sha256: e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + name: tqdm + version: 4.67.1 + sha256: 26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 + requires_dist: + - colorama ; sys_platform == 'win32' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' + - requests ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl + name: traitlets + version: 5.14.3 + sha256: b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f + requires_dist: + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx ; extra == 'docs' + - argcomplete>=3.0.3 ; extra == 'test' + - mypy>=1.7.0 ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-mypy-testing ; extra == 'test' + - pytest>=7.0,<8.2 ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/8d/c0/fdf9d3ee103ce66a55f0532835ad5e154226c5222423c6636ba049dc42fc/traittypes-0.2.3-py2.py3-none-any.whl + name: traittypes + version: 0.2.3 + sha256: 49016082ce740d6556d9bb4672ee2d899cd14f9365f17cbb79d5d96b47096d4e + requires_dist: + - traitlets>=4.2.2 + - numpy ; extra == 'test' + - pandas ; extra == 'test' + - xarray ; extra == 'test' + - pytest ; extra == 'test' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl + name: tzdata + version: '2025.2' + sha256: 1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 + requires_python: '>=2' +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: [] + size: 122968 + timestamp: 1742727099393 +- pypi: https://files.pythonhosted.org/packages/06/af/413f6b172f9d4c4943b980a9fd96bb4d915680ce8f79c07de6f697b45c8b/ultraplot-1.65.1-py3-none-any.whl + name: ultraplot + version: 1.65.1 + sha256: f659448c75f115934f7db0ad293ced7115aeff71333b8b8d8b1e237f6bb62faa + requires_dist: + - numpy>=1.26.0 + - matplotlib>=3.9,<3.11 + - typing-extensions ; python_full_version < '3.12' + requires_python: '>=3.10,<3.14' +- pypi: https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl + name: uritemplate + version: 4.2.0 + sha256: 962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + name: urllib3 + version: 2.5.0 + sha256: e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl + name: wcwidth + version: 0.2.14 + sha256: a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl + name: widgetsnbextension + version: 4.0.15 + sha256: 8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e4/5f/e4eabd0cc6684c5b208c2abc5c3459449c4d15be1694a9bbcf51e0e135fd/wrapt-2.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: wrapt + version: 2.0.0 + sha256: db2eea83c43f84e4e41dbbb4c1de371a53166e55f900a6b130c3ef51c6345c1a + requires_dist: + - pytest ; extra == 'dev' + - setuptools ; extra == 'dev' + requires_python: '>=3.8' +- pypi: git+https://github.com/davbyr/xAnimate#750e03e480db309407e09f4ffe5f49522a4c4f9b + name: xanimate + version: 1.3.0 + requires_dist: + - numpy + - matplotlib + - xarray + - imageio + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c3/78/4d6d68555a92cb97b4c192759c4ab585c5cb23490f64d4ddf12c66a3b051/xarray-2025.10.1-py3-none-any.whl + name: xarray + version: 2025.10.1 + sha256: a4e699433b87a7fac340951bc36648645eeef72bdd915ff055ac2fd99865a73d + requires_dist: + - numpy>=1.26 + - packaging>=24.1 + - pandas>=2.2 + - scipy>=1.13 ; extra == 'accel' + - bottleneck ; extra == 'accel' + - numbagg>=0.8 ; extra == 'accel' + - numba>=0.62 ; extra == 'accel' + - flox>=0.9 ; extra == 'accel' + - opt-einsum ; extra == 'accel' + - xarray[accel,etc,io,parallel,viz] ; extra == 'complete' + - netcdf4>=1.6.0 ; extra == 'io' + - h5netcdf ; extra == 'io' + - pydap ; extra == 'io' + - scipy>=1.13 ; extra == 'io' + - zarr>=2.18 ; extra == 'io' + - fsspec ; extra == 'io' + - cftime ; extra == 'io' + - pooch ; extra == 'io' + - sparse>=0.15 ; extra == 'etc' + - dask[complete] ; extra == 'parallel' + - cartopy>=0.23 ; extra == 'viz' + - matplotlib ; extra == 'viz' + - nc-time-axis ; extra == 'viz' + - seaborn ; extra == 'viz' + - pandas-stubs ; extra == 'types' + - scipy-stubs ; extra == 'types' + - types-pyyaml ; extra == 'types' + - types-pygments ; extra == 'types' + - types-colorama ; extra == 'types' + - types-decorator ; extra == 'types' + - types-defusedxml ; extra == 'types' + - types-docutils ; extra == 'types' + - types-networkx ; extra == 'types' + - types-pexpect ; extra == 'types' + - types-psutil ; extra == 'types' + - types-pycurl ; extra == 'types' + - types-openpyxl ; extra == 'types' + - types-python-dateutil ; extra == 'types' + - types-pytz ; extra == 'types' + - types-requests ; extra == 'types' + - types-setuptools ; extra == 'types' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/65/ad/8f9ff43ff49ef02c7b8202a42c32a1fe8de1276bba0e6f55609e19ff7585/xdggs-0.2.1-py3-none-any.whl + name: xdggs + version: 0.2.1 + sha256: 792832757558ad553db4ddbcc2b89d9113e2da816b3cfb1204becca5a9cb6778 + requires_dist: + - xarray + - cdshealpix + - h3ronpy + - typing-extensions + - lonboard>=0.9.3 + - pyproj>=3.3 + - matplotlib + - arro3-core>=0.4.0 + - pooch + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/76/86/659f5b3c692d3813edcb373b9260e79303bc4a81234b80e5438194e0c5f2/xee-0.0.22-py3-none-any.whl + name: xee + version: 0.0.22 + sha256: 9d05f2fff1d24e5d39ab0621c51486f511851334f1f2fc4e0779aec2beba322a + requires_dist: + - xarray[parallel] + - earthengine-api>=0.1.374 + - pyproj + - affine + - absl-py ; extra == 'tests' + - pytest ; extra == 'tests' + - pyink ; extra == 'tests' + - rasterio ; extra == 'tests' + - rioxarray ; extra == 'tests' + - typing-extensions ; extra == 'tests' + - absl-py ; extra == 'dataflow' + - apache-beam[gcp] ; extra == 'dataflow' + - gcsfs<=2024.2.0 ; extra == 'dataflow' + - xarray-beam ; extra == 'dataflow' + - xee[dataflow] ; extra == 'examples' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/05/b9/b6a9cf72aef69c3e6db869dcc130e19452a658366dac9377f9cd32a76b80/xproj-0.2.1-py3-none-any.whl + name: xproj + version: 0.2.1 + sha256: d762c540c1bc4abc5955b4034b409b9b2f7733c3e49285f3aeb71f9a2dd6bf34 + requires_dist: + - xarray + - pyproj + - pytest ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d2/9e/bb060b9c922e55cd069453401525e1e7b62edf59352c334f1035a906f602/xpystac-0.5.0-py3-none-any.whl + name: xpystac + version: 0.5.0 + sha256: 4f0ed5994bf0fc87eb1dd6dbb1252103aa34cb1ad58c42e38f3eb214067279fa + requires_dist: + - 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 + name: xvec + version: 0.5.1 + sha256: d285aab6266b50d5496da5d9f664820e3ef286bc21f5c4e8bb218be48737a1ad + requires_dist: + - xarray>=2022.12.0 + - pyproj>=3.0.0 + - shapely>=2.0b1 + - cf-xarray>=0.9.2 + - xproj>=0.2.0 + - xproj ; extra == 'all' + - matplotlib ; extra == 'all' + - geopandas ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5b/8f/447cc9cb57456d786204af0f450ffb920039104c5eff6626337c9f403bd1/xyzservices-2025.10.0-py3-none-any.whl + name: xyzservices + version: 2025.10.0 + sha256: cfd6423367c7bc717ed5824d4dd7de2c91486886c1c193db9d8f0fa7fd43bc1b + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: yarl + version: 1.22.0 + sha256: bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl + name: zarr + version: 3.1.3 + sha256: 45f67f87f65f14fa453f99dd8110a5936b7ac69f3a21981d33e90407c80c302a + requires_dist: + - donfig>=0.8 + - numcodecs[crc32c]>=0.14 + - numpy>=1.26 + - packaging>=22.0 + - typing-extensions>=4.9 + - typer ; extra == 'cli' + - astroid<4 ; extra == 'docs' + - numcodecs[msgpack] ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - pytest ; extra == 'docs' + - rich ; 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' + - universal-pathlib ; extra == 'optional' + - fsspec>=2023.10.0 ; extra == 'remote' + - obstore>=0.5.1 ; extra == 'remote' + - botocore ; extra == 'remote-tests' + - fsspec>=2023.10.0 ; extra == 'remote-tests' + - moto[s3,server] ; extra == 'remote-tests' + - obstore>=0.5.1 ; extra == 'remote-tests' + - requests ; extra == 'remote-tests' + - s3fs>=2023.10.0 ; extra == 'remote-tests' + - coverage>=7.10 ; extra == 'test' + - hypothesis ; extra == 'test' + - mypy ; extra == 'test' + - numpydoc ; extra == 'test' + - packaging ; extra == 'test' + - pytest-accept ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest<8.4 ; extra == 'test' + - rich ; extra == 'test' + - tomlkit ; extra == 'test' + - uv ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + name: zict + version: 3.0.0 + sha256: 5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb + md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 + 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 diff --git a/pyproject.toml b/pyproject.toml index ade1bdd..4b69961 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "Add your description here" readme = "README.md" authors = [{ name = "Tobias Hölzer", email = "tobiashoelzer@hotmail.com" }] -requires-python = ">=3.12" +# requires-python = ">=3.10,<3.13" dependencies = [ "aiohttp>=3.12.11", "bokeh>=3.7.3", @@ -16,7 +16,7 @@ dependencies = [ "distributed>=2025.5.1", "earthengine-api>=1.6.9", "eemont>=2025.7.1", - "entropyc", + "entropy", "flox>=0.10.4", "folium>=0.19.7", "geemap>=0.36.3", @@ -48,7 +48,7 @@ dependencies = [ "xarray>=2025.9.0", "xdggs>=0.2.1", "xvec>=0.5.1", - "zarr[remote]>=3.1.3", + "zarr[remote]>=3.1.3", "geocube>=0.7.1,<0.8", ] [project.scripts] @@ -56,6 +56,7 @@ create-grid = "entropice.grids:main" darts = "entropice.darts:main" alpha-earth = "entropice.alphaearth:main" era5 = "entropice.era5:cli" +train = "entropice.training:cli" [build-system] requires = ["hatchling"] @@ -66,4 +67,40 @@ package = true [tool.uv.sources] entropyc = { git = "ssh://git@github.com/AlbertEMC2Stein/entropyc", branch = "refactor/tobi" } +entropy = { git = "ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git" } xanimate = { git = "https://github.com/davbyr/xAnimate" } + +[tool.ruff.lint.pyflakes] +# Ignore libraries when checking for unused imports +allowed-unused-imports = [ + "hvplot.pandas", + "hvplot.xarray", + "rioxarray", + "odc.geo.xr", + "cupy_xarray", + "xdggs", + "xvec", +] + +[tool.pixi.workspace] +channels = ["conda-forge"] +platforms = ["linux-64"] + +[tool.pixi.activation.env] +SCIPY_ARRAY_API = "1" + +[tool.pixi.system-requirements] +cuda = "12" + +[tool.pixi.pypi-dependencies] +entropice = { path = ".", editable = true } + +[tool.pixi.tasks] + +[tool.pixi.dependencies] +pytorch-gpu = ">=2.5.1,<3" +cupy = ">=13.6.0,<14" +nccl = ">=2.27.7.1,<3" +cudnn = ">=9.13.1.26,<10" +cusparselt = ">=0.8.1.1,<0.9" +cuda-version = "12.1.*" diff --git a/src/entropice/darts.py b/src/entropice/darts.py index f644486..2beff71 100644 --- a/src/entropice/darts.py +++ b/src/entropice/darts.py @@ -58,6 +58,15 @@ def extract_darts_rts(grid: Literal["hex", "healpix"], level: int): grid_gdf[f"darts_{year}_rts_area"] / grid_gdf[f"darts_{year}_covered_area"] ) + # Apply corrections to NaNs + covered = ~grid_gdf[f"darts_{year}_coverage"].isnull() + grid_gdf.loc[covered, f"darts_{year}_rts_count"] = grid_gdf.loc[covered, f"darts_{year}_rts_count"].fillna( + 0.0 + ) + + grid_gdf["darts_has_coverage"] = grid_gdf[[f"darts_{year}_coverage" for year in years]].any(axis=1) + grid_gdf["darts_has_rts"] = grid_gdf[[f"darts_{year}_rts_count" for year in years]].any(axis=1) + output_path = get_darts_rts_file(grid, level) grid_gdf.to_parquet(output_path) print(f"Saved RTS labels to {output_path}") diff --git a/src/entropice/era5.py b/src/entropice/era5.py index dc69859..8a35c01 100644 --- a/src/entropice/era5.py +++ b/src/entropice/era5.py @@ -52,6 +52,10 @@ Monthly, Winter, Summer & Yearly Aggregations (Names don't change): - *_rest -> median - accum variables: sum +Additionally: +- snow_cover_min [instant]: min of snowc_mean over month/winter/summer/year +- snow_cover_max [instant]: max of snowc_mean over month/winter/summer/year + Derived & (from monthly) Aggregated Winter Variables: - effective_snow_depth [instant]: (sde_mean * M + 1 - m).sum(M) / (m).sum(M),see also https://tc.copernicus.org/articles/11/989/2017/tc-11-989-2017.pdf @@ -75,6 +79,7 @@ Date: June to October 2025 import cProfile import time +from concurrent.futures import ProcessPoolExecutor, as_completed from typing import Literal import cyclopts @@ -88,6 +93,7 @@ import shapely.ops import ultraplot as uplt import xarray as xr import xdggs +import xvec from rich import pretty, print, traceback from rich.progress import track from shapely.geometry import LineString, Polygon @@ -95,6 +101,7 @@ from stopuhr import stopwatch from entropice import codecs, grids, watermask from entropice.paths import FIGURES_DIR, get_era5_stores +from entropice.xvec import to_xvec traceback.install(show_locals=True, suppress=[cyclopts, xr, pd, cProfile]) pretty.install() @@ -572,21 +579,38 @@ def enrich(n_workers: int = 10, monthly: bool = True, yearly: bool = True, daily @cli.command -def viz(agg: Literal["daily", "monthly", "yearly", "summer", "winter"]): +def viz( + grid: Literal["hex", "healpix"] | None = None, + level: int | None = None, + agg: Literal["daily", "monthly", "yearly", "summer", "winter", "seasonal", "shoulder"] = "monthly", + high_qual: bool = False, +): """Visualize a small overview of ERA5 variables for a given aggregation. Args: - agg (Literal["daily", "monthly", "yearly", "summer", "winter"]): + grid (Literal["hex", "healpix"], optional): Grid type for spatial representation. + If provided along with level, the ERA5 data will be decoded onto the specified grid. + level (int, optional): Level of the grid for spatial representation. + If provided along with grid, the ERA5 data will be decoded onto the specified grid. + agg (Literal["daily", "monthly", "yearly", "summer", "winter", "seasonal", "shoulder"], optional): Aggregation identifier used to locate the appropriate ERA5 Zarr store via get_era5_stores. Determines which dataset is opened and visualized. + high_qual (bool, optional): Whether to use high quality plotting settings. + If True, the plot will be generated with higher resolution and quality settings. + Defaults to False. Example: >>> # produce and save an overview for monthly ERA5 data >>> viz("monthly") """ - store = get_era5_stores(agg) + is_grid = grid is not None and level is not None + store = get_era5_stores(agg, grid, level) ds = xr.open_zarr(store, consolidated=False).set_coords("spatial_ref") + if is_grid: + ds = xdggs.decode(ds) + # Get cell boundaries for plotting + ds = to_xvec(ds) tis = [0, 1, -2, -1] ts = [str(ds.time.isel(time=t).values)[:10] for t in tis] @@ -594,16 +618,28 @@ def viz(agg: Literal["daily", "monthly", "yearly", "summer", "winter"]): vunits = [ds[var].attrs.get("units", "") for var in ds.data_vars] vlabels = [f"{name} [{unit}]" if unit else name for name, unit in zip(vnames, vunits)] - fig, axs = uplt.subplots(ncols=len(tis), nrows=len(vlabels), proj="npaeqd", share=0) + proj = uplt.Proj("npaeqd") + fig, axs = uplt.subplots(ncols=len(tis), nrows=len(vlabels), proj=proj, share=0) axs.format(boundinglat=50, coast=True, toplabels=ts, leftlabels=vlabels) for t in tis: for i, var in enumerate(ds.data_vars): - subset = ds[var].isel(time=t).load() - m = axs[i, t].pcolormesh(subset, cmap="viridis") - axs[i, t].colorbar(m, loc="ll", label=var) + subset = ds[var].isel(time=t) + if is_grid: + subset.xvec.to_geodataframe().to_crs(proj.proj4_init).plot(ax=axs[i, t], column=var) + else: + if not high_qual: + subset = subset.isel(latitude=slice(None, None, 4), longitude=slice(None, None, 4)) + m = axs[i, t].pcolormesh(subset, cmap="viridis") + axs[i, t].colorbar(m, loc="ll", label=var) fig.format(suptitle="ERA5 Data") - (FIGURES_DIR / "era5").mkdir(parents=True, exist_ok=True) - fig.savefig(FIGURES_DIR / "era5" / f"{agg}_overview_unaligned.png") + figdir = (FIGURES_DIR / "era5").resolve() + figdir.mkdir(parents=True, exist_ok=True) + if high_qual: + print(f"Saving ERA5 {agg} overview figure to {figdir / f'{agg}_overview_unaligned.pdf'}.") + fig.savefig(figdir / f"{agg}_overview_unaligned.pdf") + else: + print(f"Saving ERA5 {agg} overview figure to {figdir / f'{agg}_overview_unaligned.png'}.") + fig.savefig(figdir / f"{agg}_overview_unaligned.png", dpi=100) # =========================== @@ -640,7 +676,7 @@ def _check_geom(geobox: odc.geo.geobox.GeoBox, geom: odc.geo.Geometry) -> bool: @stopwatch("Getting corrected geometries", log=False) -def _get_corrected_geoms(geom: Polygon, gbox: odc.geo.geobox.GeoBox) -> list[odc.geo.Geometry]: +def _get_corrected_geoms(inp: tuple[Polygon, odc.geo.geobox.GeoBox]) -> list[odc.geo.Geometry]: """Get corrected geometries for antimeridian-crossing polygons. Args: @@ -651,6 +687,7 @@ def _get_corrected_geoms(geom: Polygon, gbox: odc.geo.geobox.GeoBox) -> list[odc list[odc.geo.Geometry]: List of corrected, georeferenced geometries. """ + geom, gbox = inp # cell.geometry is a shapely Polygon if not _crosses_antimeridian(geom): geoms = [geom] @@ -659,43 +696,71 @@ def _get_corrected_geoms(geom: Polygon, gbox: odc.geo.geobox.GeoBox) -> list[odc geoms = _split_antimeridian_cell(geom) geoms = [odc.geo.Geometry(g, crs="epsg:4326") for g in geoms] - geoms = filter(lambda g: _check_geom(gbox, g), geoms) + geoms = list(filter(lambda g: _check_geom(gbox, g), geoms)) return geoms -@stopwatch("Extracting cell data", log=False) -def extract_cell_data(ds: xr.Dataset, geoms: list[odc.geo.Geometry]) -> xr.Dataset | bool: - """Extract ERA5 data for a specific grid cell geometry. - - Extracts and spatially averages ERA5 data within the bounds of a grid cell. - Handles antimeridian-crossing cells by splitting them appropriately. - - Args: - ds (xr.Dataset): An ERA5 dataset. - geoms (list[odc.geo.Geometry]): List of (valid) geometries of the grid cell. - - """ - if len(geoms) == 0: - return False - elif len(geoms) == 1: - return ds.odc.crop(geoms[0]).drop_vars("spatial_ref").mean(["latitude", "longitude"], skipna=True).compute() - else: - parts = [ - ds.odc.crop(geom).drop_vars("spatial_ref").mean(["latitude", "longitude"], skipna=True) for geom in geoms - ] - parts = [part for part in parts if part.latitude.size > 0 and part.longitude.size > 0] - if len(parts) == 0: - raise ValueError("No valid parts found for geometry. This should not happen!") - elif len(parts) == 1: - return parts[0].compute() - else: - return xr.concat(parts, dim="part").mean("part", skipna=True).compute() - - def _correct_longs(ds: xr.Dataset) -> xr.Dataset: return ds.assign_coords(longitude=(((ds.longitude + 180) % 360) - 180)).sortby("longitude") +@stopwatch("Extracting cell data", log=False) +def _extract_cell_data(ds, geom): + cropped = ds.odc.crop(geom).drop_vars("spatial_ref") + with np.errstate(divide="ignore", invalid="ignore"): + cell_data = cropped.mean(["latitude", "longitude"]) + return {var: cell_data[var].values for var in cell_data.data_vars} + + +@stopwatch("Extracting split cell data", log=False) +def _extract_split_cell_data(dss: xr.Dataset, geoms): + parts: list[xr.Dataset] = [ds.odc.crop(geom).drop_vars("spatial_ref") for ds, geom in zip(dss, geoms)] + partial_counts = [part.notnull().sum(dim=["latitude", "longitude"]) for part in parts] + with np.errstate(divide="ignore", invalid="ignore"): + partial_means = [part.sum(["latitude", "longitude"]) for part in parts] + n = xr.concat(partial_counts, dim="part").sum("part") + cell_data = xr.concat(partial_means, dim="part").sum("part") / n + return {var: cell_data[var].values for var in cell_data.data_vars} + + +@stopwatch("Aligning data") +def _align_data(cell_geometries: list[list[odc.geo.Geometry]], unaligned: xr.Dataset) -> dict[str, np.ndarray]: + # Persist the dataset, as all the operations here MUST NOT be lazy + unaligned = unaligned.load() + + data = { + var: np.full((len(cell_geometries), len(unaligned.time)), np.nan, dtype=np.float32) + for var in unaligned.data_vars + } + with ProcessPoolExecutor(max_workers=10) as executor: + futures = {} + for i, geoms in track( + enumerate(cell_geometries), total=len(cell_geometries), description="Submitting cell extraction tasks..." + ): + if len(geoms) == 0: + continue + elif len(geoms) == 1: + geom = geoms[0] + # Reduce the amount of data needed to be sent to the worker + # Since we dont mask the data, only isel operations are done here + # Thus, to properly extract the subset, another masked crop needs to be done in the worker + unaligned_subset = unaligned.odc.crop(geom, apply_mask=False) + futures[executor.submit(_extract_cell_data, unaligned_subset, geom)] = i + else: + # Same as above but for multiple parts + unaligned_subsets = [unaligned.odc.crop(geom, apply_mask=False) for geom in geoms] + futures[executor.submit(_extract_split_cell_data, unaligned_subsets, geoms)] = i + + for future in track( + as_completed(futures), total=len(futures), description="Spatially aggregating ERA5 data..." + ): + i = futures[future] + cell_data = future.result() + for var in unaligned.data_vars: + data[var][i, :] = cell_data[var] + return data + + @stopwatch("Creating aligned dataset", log=False) def _create_aligned( ds: xr.Dataset, data: dict[str, np.ndarray], grid: Literal["hex", "healpix"], level: int @@ -737,48 +802,38 @@ def spatial_agg( level (int): Grid resolution level. """ - grid_gdf = grids.open(grid, level) - # ? Mask out water, since we don't want to aggregate over oceans - grid_gdf = watermask.clip_grid(grid_gdf) - grid_gdf = grid_gdf.to_crs("epsg:4326") + with stopwatch(f"Loading {grid} grid at level {level}"): + grid_gdf = grids.open(grid, level) + # ? Mask out water, since we don't want to aggregate over oceans + grid_gdf = watermask.clip_grid(grid_gdf) + grid_gdf = grid_gdf.to_crs("epsg:4326") - # Precompute the geometries to clip later - daily_store = get_era5_stores("daily") - daily_unaligned = xr.open_zarr(daily_store, consolidated=False).set_coords("spatial_ref") - assert {"latitude", "longitude", "time"} == set(daily_unaligned.dims) - assert daily_unaligned.odc.crs == "epsg:4326", f"Expected CRS 'epsg:4326', got {daily_unaligned.odc.crs}" - daily_unaligned = _correct_longs(daily_unaligned) - - cell_geometries = [_get_corrected_geoms(row.geometry, daily_unaligned.odc.geobox) for _, row in grid_gdf.iterrows()] - - for agg in ["summer", "winter", "yearly"]: + for agg in ["yearly", "seasonal", "shoulder"]: unaligned_store = get_era5_stores(agg) with stopwatch(f"Loading {agg} ERA5 data"): - unaligned = xr.open_zarr(unaligned_store, consolidated=False).set_coords("spatial_ref") + unaligned = xr.open_zarr(unaligned_store, consolidated=False).set_coords("spatial_ref").load() assert {"latitude", "longitude", "time"} == set(unaligned.dims) assert unaligned.odc.crs == "epsg:4326", f"Expected CRS 'epsg:4326', got {unaligned.odc.crs}" unaligned = _correct_longs(unaligned) - data = { - var: np.full((len(grid_gdf), len(unaligned.time)), np.nan, dtype=np.float32) for var in unaligned.data_vars - } - for i, geoms in track( - enumerate(cell_geometries), - total=len(grid_gdf), - description=f"Spatially aggregating {agg} ERA5 data...", - ): - if len(geoms) == 0: - print(f"Warning: No valid geometry for cell {grid_gdf.iloc[i].cell_id}.") - continue + with stopwatch("Precomputing cell geometries"): + with ProcessPoolExecutor(max_workers=20) as executor: + cell_geometries = list( + executor.map( + _get_corrected_geoms, + [(row.geometry, unaligned.odc.geobox) for _, row in grid_gdf.iterrows()], + ) + ) - cell_data = extract_cell_data(unaligned, geoms) - for var in unaligned.data_vars: - data[var][i, :] = cell_data[var].values + data = _align_data(cell_geometries, unaligned) aggregated = _create_aligned(unaligned, data, grid, level) store = get_era5_stores(agg, grid, level) - aggregated.to_zarr(store, mode="w", consolidated=False, encoding=codecs.from_ds(aggregated)) + with stopwatch(f"Saving spatially aggregated {agg} ERA5 data to {store}"): + aggregated.to_zarr(store, mode="w", consolidated=False, encoding=codecs.from_ds(aggregated)) print(f"Finished spatial matching for {agg} data.") + + print("### Stopwatch Summary ###") stopwatch.summary() diff --git a/src/entropice/paths.py b/src/entropice/paths.py index 5c95930..5eeb3d3 100644 --- a/src/entropice/paths.py +++ b/src/entropice/paths.py @@ -1,11 +1,13 @@ # ruff: noqa: D103 """Paths for entropice data storage.""" +import datetime import os from pathlib import Path from typing import Literal -DATA_DIR = Path(os.environ.get("DATA_DIR", "data")).resolve() / "entropice" +DATA_DIR = Path(os.environ.get("FAST_DATA_DIR", None) or os.environ.get("DATA_DIR", None)).resolve() / "entropice" +DATA_DIR = Path("/raid/scratch/tohoel001/data/entropice") # Temporary hardcoding for FAST cluster GRIDS_DIR = DATA_DIR / "grids" FIGURES_DIR = Path("figures") @@ -13,6 +15,8 @@ DARTS_DIR = DATA_DIR / "darts" ERA5_DIR = DATA_DIR / "era5" EMBEDDINGS_DIR = DATA_DIR / "embeddings" WATERMASK_DIR = DATA_DIR / "watermask" +TRAINING_DIR = DATA_DIR / "training" +RESULTS_DIR = DATA_DIR / "results" GRIDS_DIR.mkdir(parents=True, exist_ok=True) FIGURES_DIR.mkdir(parents=True, exist_ok=True) @@ -20,9 +24,10 @@ DARTS_DIR.mkdir(parents=True, exist_ok=True) ERA5_DIR.mkdir(parents=True, exist_ok=True) EMBEDDINGS_DIR.mkdir(parents=True, exist_ok=True) WATERMASK_DIR.mkdir(parents=True, exist_ok=True) +TRAINING_DIR.mkdir(parents=True, exist_ok=True) +RESULTS_DIR.mkdir(parents=True, exist_ok=True) - -watermask_file = DATA_DIR / "simplified_water_polygons.shp" +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" @@ -46,7 +51,7 @@ def get_grid_viz_file(grid: Literal["hex", "healpix"], level: int) -> Path: def get_darts_rts_file(grid: Literal["hex", "healpix"], level: int) -> Path: gridname = _get_gridname(grid, level) - rtsfile = DARTS_DIR / f"{gridname}_rts.parquet" + rtsfile = DARTS_DIR / f"{gridname}_darts.parquet" return rtsfile @@ -74,3 +79,18 @@ def get_era5_stores( gridname = _get_gridname(grid, level) aligned_path = ERA5_DIR / f"{gridname}_{agg}_climate.zarr" return aligned_path + + +def get_train_dataset_file(grid: Literal["hex", "healpix"], level: int) -> Path: + gridname = _get_gridname(grid, level) + dataset_file = TRAINING_DIR / f"{gridname}_train_dataset.parquet" + return dataset_file + + +def get_cv_results_file(name: str, grid: Literal["hex", "healpix"], level: int) -> Path: + gridname = _get_gridname(grid, level) + now = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + results_dir = RESULTS_DIR / f"{gridname}_{name}_cv{now}" + results_dir.mkdir(parents=True, exist_ok=True) + results_file = results_dir / "search_results.parquet" + return results_file diff --git a/src/entropice/training.py b/src/entropice/training.py new file mode 100644 index 0000000..27ef601 --- /dev/null +++ b/src/entropice/training.py @@ -0,0 +1,295 @@ +# ruff: noqa: N806 +"""Training dataset preparation and model training.""" + +from pathlib import Path +from typing import Literal + +import cyclopts +import geopandas as gpd +import matplotlib.colors as mcolors +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import seaborn as sns +import torch +import xarray as xr +from entropy import ESPAClassifier +from rich import pretty, traceback +from scipy.stats import loguniform, randint +from sklearn import set_config +from sklearn.model_selection import KFold, RandomizedSearchCV, train_test_split +from stopuhr import stopwatch + +from entropice.paths import ( + get_cv_results_file, + get_darts_rts_file, + get_embeddings_store, + get_era5_stores, + get_train_dataset_file, +) + +traceback.install() +pretty.install() + +set_config(array_api_dispatch=True) + +sns.set_theme("talk", "whitegrid") + +cli = cyclopts.App() + + +@cli.command() +def prepare_dataset(grid: Literal["hex", "healpix"], level: int): + """Prepare training dataset by combining DARTS RTS labels, ERA5 data, and embeddings. + + Args: + grid (Literal["hex", "healpix"]): The grid type to use. + level (int): The grid level to use. + + """ + rts = gpd.read_parquet(get_darts_rts_file(grid=grid, level=level)) + # Filter to coverage + 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)) + + # Get era5 data + era5_store = get_era5_stores("yearly", grid=grid, level=level) + era5 = xr.open_zarr(era5_store, consolidated=False) + era5 = era5.sel(cell_ids=rts["cell_id"].values) + + era5_df = [] + for var in era5.data_vars: + df = era5[var].drop_vars("spatial_ref").to_dataframe() + df["year"] = df.index.get_level_values("time").year + df = ( + df.pivot_table(index="cell_ids", columns="year", values=var) + .rename(columns=lambda x: f"{var}_{x}") + .rename_axis(None, axis=1) + ) + era5_df.append(df) + era5_df = pd.concat(era5_df, axis=1) + + # TODO: season and shoulder data + + # Get embeddings data + 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] + + # Combine datasets by cell id / cell + dataset = rts.set_index("cell_id").join(era5_df).join(embeddings_df) + print(f"Prepared dataset with {len(dataset)} samples and {len(dataset.columns)} features.") + + dataset_file = get_train_dataset_file(grid=grid, level=level) + dataset.reset_index().to_parquet(dataset_file) + + +@cli.command() +def random_cv(grid: Literal["hex", "healpix"], level: int): + """Perform random cross-validation on the training dataset. + + Args: + grid (Literal["hex", "healpix"]): The grid type to use. + level (int): The grid level to use. + + """ + data = get_train_dataset_file(grid=grid, level=level) + data = gpd.read_parquet(data) + + cols_to_drop = ["cell_id", "geometry", "darts_has_rts"] + cols_to_drop += [col for col in data.columns if col.startswith("darts_")] + X_data = data.drop(columns=cols_to_drop).dropna() + y_data = data.loc[X_data.index, "darts_has_rts"] + X = X_data.to_numpy(dtype="float32") + y = y_data.to_numpy(dtype="int8") + X, y = torch.asarray(X, device=0), torch.asarray(y, device=0) + print(f"{X.shape=}, {y.shape=}") + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + print(f"{X_train.shape=}, {X_test.shape=}, {y_train.shape=}, {y_test.shape=}") + + param_grid = { + "eps_cl": loguniform(1e-3, 1e7), + "eps_e": loguniform(1e-3, 1e7), + "initial_K": randint(20, 400), + } + + clf = ESPAClassifier(20, 0.1, 0.1, random_state=42) + cv = KFold(n_splits=5, shuffle=True, random_state=42) + metrics = ["accuracy", "recall", "precision", "f1", "jaccard"] # "roc_auc" does not work on GPU + search = RandomizedSearchCV( + clf, + param_grid, + n_iter=20, + n_jobs=24, + cv=cv, + random_state=42, + verbose=10, + scoring=metrics, + refit="f1", + ) + + print(f"Starting RandomizedSearchCV with {search.n_iter} candidates...") + with stopwatch(f"RandomizedSearchCV fitting for {search.n_iter} candidates"): + search.fit(X_train, y_train, max_iter=100) + + print("Best parameters combination found:") + best_parameters = search.best_estimator_.get_params() + for param_name in sorted(param_grid.keys()): + print(f"{param_name}: {best_parameters[param_name]}") + + test_accuracy = search.score(X_test, y_test) + print(f"Accuracy of the best parameters using the inner CV of the random search: {search.best_score_:.3f}") + print(f"Accuracy on test set: {test_accuracy:.3f}") + + # Store the search results + results = pd.DataFrame(search.cv_results_) + # Parse the params into individual columns + params = pd.json_normalize(results["params"]) + # Concatenate the params columns with the original DataFrame + results = pd.concat([results.drop(columns=["params"]), params], axis=1) + results["grid"] = grid + results["level"] = level + results_file = get_cv_results_file("random_search", grid=grid, level=level) + print(f"Storing CV results to {results_file}") + results.to_parquet(results_file) + + stopwatch.summary() + print("Done.") + + plot_random_cv_results(results_file) + + +def _plot_k_binned( + results: pd.DataFrame, target: str, *, vmin_percentile: float | None = None, vmax_percentile: float | None = None +): + assert vmin_percentile is None or vmax_percentile is None, ( + "Only one of vmin_percentile or vmax_percentile can be set." + ) + assert "initial_K_binned" in results.columns, "initial_K_binned column not found in results." + assert target in results.columns, f"{target} column not found in results." + assert "eps_e" in results.columns, "eps_e column not found in results." + assert "eps_cl" in results.columns, "eps_cl column not found in results." + + # add a colorbar instead of the sampled legend + cmap = sns.color_palette("ch:", as_cmap=True) + # sufisticated normalization + if vmin_percentile is not None: + vmin = np.percentile(results[target], vmin_percentile) + norm = mcolors.Normalize(vmin=vmin) + elif vmax_percentile is not None: + vmax = np.percentile(results[target], vmax_percentile) + norm = mcolors.Normalize(vmax=vmax) + else: + norm = mcolors.Normalize() + sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) + + # nice col-wrap based on columns + n_cols = results["initial_K_binned"].unique().size + col_wrap = 5 if n_cols % 5 == 0 else (4 if n_cols % 4 == 0 else 3) + + scatter = sns.relplot( + data=results, + x="eps_e", + y="eps_cl", + hue=target, + hue_norm=sm.norm, + palette=cmap, + legend=False, + col="initial_K_binned", + col_wrap=col_wrap, + ) + + # Apply log scale to all axes + for ax in scatter.axes.flat: + ax.set_xscale("log") + ax.set_yscale("log") + + # Tight layout + scatter.figure.tight_layout() + + # Add a shared colorbar at the bottom + scatter.figure.subplots_adjust(bottom=0.15) # Make room for the colorbar + cbar_ax = scatter.figure.add_axes([0.15, 0.05, 0.7, 0.02]) # [left, bottom, width, height] + cbar = scatter.figure.colorbar(sm, cax=cbar_ax, orientation="horizontal") + cbar.set_label(target) + + return scatter + + +def _plot_eps_binned(results: pd.DataFrame, target: str, metric: str): + assert "initial_K" in results.columns, "initial_K column not found in results." + assert metric in results.columns, f"{metric} not found in results." + + if target == "eps_cl": + hue = "eps_cl" + col = "eps_e_binned" + elif target == "eps_e": + hue = "eps_e" + col = "eps_cl_binned" + assert hue in results.columns, f"{hue} column not found in results." + assert col in results.columns, f"{col} column not found in results." + + return sns.relplot(results, x="initial_K", y=metric, hue=hue, col=col, col_wrap=5, hue_norm=mcolors.LogNorm()) + + +@cli.command() +def plot_random_cv_results(file: Path): + """Plot analysis of the results from the RandomCVSearch. + + Args: + file (Path): The file of the results. + + """ + print(f"Plotting random CV results from {file}...") + results = pd.read_parquet(file) + # Bin the initial_K into 40er bins + results["initial_K_binned"] = pd.cut(results["initial_K"], bins=range(20, 401, 40), right=False) + # Bin the eps_cl and eps_e into logarithmic bins + eps_cl_bins = np.logspace(-3, 7, num=10) + eps_e_bins = np.logspace(-3, 7, num=10) + results["eps_cl_binned"] = pd.cut(results["eps_cl"], bins=eps_cl_bins) + results["eps_e_binned"] = pd.cut(results["eps_e"], bins=eps_e_bins) + + figdir = file.parent + + # K-Plots + metrics = ["accuracy", "recall", "precision", "f1", "jaccard"] + for metric in metrics: + _plot_k_binned( + results, + f"mean_test_{metric}", + vmin_percentile=50, + ).figure.savefig(figdir / f"params3d-mean_{metric}.pdf") + _plot_k_binned( + results, + f"std_test_{metric}", + vmax_percentile=50, + ).figure.savefig(figdir / f"params3d-std_{metric}.pdf") + _plot_k_binned(results, f"mean_test_{metric}").figure.savefig(figdir / f"params3d-mean_{metric}-noperc.pdf") + _plot_k_binned(results, f"std_test_{metric}").figure.savefig(figdir / f"params3d-std_{metric}-noperc.pdf") + + # eps-Plots + _plot_eps_binned( + results, + "eps_cl", + f"mean_test_{metric}", + ).figure.savefig(figdir / f"k-eps_cl-mean_{metric}.pdf") + _plot_eps_binned( + results, + "eps_e", + f"mean_test_{metric}", + ).figure.savefig(figdir / f"k-eps_e-mean_{metric}.pdf") + + # Close all figures + plt.close("all") + print("Done.") + + +if __name__ == "__main__": + cli() diff --git a/src/entropice/watermask.py b/src/entropice/watermask.py index 3c71c1b..36c6c2e 100644 --- a/src/entropice/watermask.py +++ b/src/entropice/watermask.py @@ -27,6 +27,6 @@ def clip_grid(gdf: gpd.GeoDataFrame) -> gpd.GeoDataFrame: """ watermask = open() - watermask = watermask.to_crs("EPSG:3413") + watermask = watermask.to_crs(gdf.crs) gdf = gdf.overlay(watermask, how="difference") return gdf diff --git a/src/entropice/xvec.py b/src/entropice/xvec.py new file mode 100644 index 0000000..f347d4f --- /dev/null +++ b/src/entropice/xvec.py @@ -0,0 +1,13 @@ +import xarray as xr +import xdggs +import xvec + + +def to_xvec(ds: xr.Dataset) -> xr.Dataset: + ds["geometry"] = xdggs.decode(ds.dggs.cell_boundaries()) + cell_ids = ds.cell_ids.values + ds = ds.set_index(cell_ids="geometry").rename_dims({"cell_ids": "geometry"}).rename_vars({"cell_ids": "geometry"}) + ds = ds.xvec.set_geom_indexes("geometry", crs="epsg:4326") + ds["cell_ids"] = ("geometry", cell_ids) + ds = ds.set_coords("cell_ids") + return ds diff --git a/uv.lock b/uv.lock index 6159e36..3b85908 100755 --- a/uv.lock +++ b/uv.lock @@ -136,6 +136,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2b/f0/09a30ca0551af20c7cefa7464b7ccb6f5407a550b83c4dcb15c410814849/anywidget-0.9.18-py3-none-any.whl", hash = "sha256:944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8", size = 220671 }, ] +[[package]] +name = "appdirs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566 }, +] + [[package]] name = "appnope" version = "0.1.4" @@ -145,6 +154,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, ] +[[package]] +name = "array-api-compat" +version = "1.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/bd/9fa5c7c5621698d5632cc852a79fbbdc28024462c9396698e5fdcb395f37/array_api_compat-1.12.0.tar.gz", hash = "sha256:585bc615f650de53ac24b7c012baecfcdd810f50df3573be47e6dd9fa20df974", size = 99883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl", hash = "sha256:a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b", size = 58156 }, +] + +[[package]] +name = "array-api-extra" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/be/387d596e0ed6d191988d7b61bb0e252bb8023965485218a33bd1a8ccc72a/array_api_extra-0.9.0.tar.gz", hash = "sha256:2d49e38394f5a96caef17b80964d228636e6fdf1dada33697ab8ec3f5364eb77", size = 81579 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/17/8a7503c9dc3f8cc2868c632291e5d224822b05ae62f1279c529c459368d2/array_api_extra-0.9.0-py3-none-any.whl", hash = "sha256:36b34e29380b678007f151511be950cb2ea199606fe4a7ad466efc5044ea9e44", size = 48234 }, +] + [[package]] name = "arro3-compute" version = "0.6.5" @@ -1217,10 +1247,11 @@ dependencies = [ { name = "distributed" }, { name = "earthengine-api" }, { name = "eemont" }, - { name = "entropyc" }, + { name = "entropy" }, { name = "flox" }, { name = "folium" }, { name = "geemap" }, + { name = "geocube" }, { name = "geopandas" }, { name = "h3" }, { name = "h5netcdf" }, @@ -1264,10 +1295,11 @@ requires-dist = [ { name = "distributed", specifier = ">=2025.5.1" }, { name = "earthengine-api", specifier = ">=1.6.9" }, { name = "eemont", specifier = ">=2025.7.1" }, - { name = "entropyc", git = "ssh://git@github.com/AlbertEMC2Stein/entropyc?branch=refactor%2Ftobi" }, + { name = "entropy", git = "ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git" }, { name = "flox", specifier = ">=0.10.4" }, { name = "folium", specifier = ">=0.19.7" }, { name = "geemap", specifier = ">=0.36.3" }, + { name = "geocube", specifier = ">=0.7.1,<0.8" }, { name = "geopandas", specifier = ">=1.1.0" }, { name = "h3", specifier = ">=4.2.2" }, { name = "h5netcdf", specifier = ">=1.6.4" }, @@ -1300,11 +1332,13 @@ requires-dist = [ ] [[package]] -name = "entropyc" +name = "entropy" version = "0.1.0" -source = { git = "ssh://git@github.com/AlbertEMC2Stein/entropyc?branch=refactor%2Ftobi#22a191d194a76b6c182481acb2af1bde3f60b49e" } +source = { git = "ssh://git@forgejo.tobiashoelzer.de:22222/tobias/entropy.git#9ca1bdf4afc4ac9b0ea29ebbc060ffecb5cffcf7" } dependencies = [ - { name = "numpy" }, + { name = "array-api-compat" }, + { name = "array-api-extra" }, + { name = "scikit-learn" }, { name = "scipy" }, ] @@ -1569,6 +1603,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/6b/13166c909ad2f2d76b929a4227c952630ebaf0d729f6317eb09cbceccbab/geocoder-1.38.1-py2.py3-none-any.whl", hash = "sha256:a733e1dfbce3f4e1a526cac03aadcedb8ed1239cf55bd7f3a23c60075121a834", size = 98590 }, ] +[[package]] +name = "geocube" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "click" }, + { name = "geopandas" }, + { name = "numpy" }, + { name = "odc-geo" }, + { name = "pyproj" }, + { name = "rasterio" }, + { name = "rioxarray" }, + { name = "scipy" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/03/d39b7a372f2054ae374247c8e0130b8f23aee89b0624c8f04fa49b2c1199/geocube-0.7.1.tar.gz", hash = "sha256:5f0f4a2143b379434d81172ae8c9fb49c2c5ff2f9723864ed79d3947a68ea37f", size = 20528 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/c6/a9341239e2e2953537b9e90a46ebc59f2e122247a3fe22373cc37520fc44/geocube-0.7.1-py3-none-any.whl", hash = "sha256:661a12c0b2106f27477290b5f18e76eb5855c9c50cac7fd19028fde4babca628", size = 23107 }, +] + [[package]] name = "geographiclib" version = "2.1"