diff --git a/.binder/environment.yml b/.binder/environment.yml index 1a81a355..0e722a9a 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -19,7 +19,7 @@ dependencies: - geoviews-core >=1.14.0,<2 - gsw >=3.6.19,<4 - hvplot >=0.11.3,<0.12 - - h5netcdf >=1.6.2,<2 + - h5netcdf >=1.6.3,<2 - ipykernel >=6.29.5,<7 - matplotlib-base >=3.10.3,<4 - netcdf4 >=1.7.2,<2 @@ -35,8 +35,9 @@ dependencies: - sphinx-notfound-page >=1.1.0,<2 - sphinxext-rediraffe >=0.2.7,<0.3 - s3fs >=2025.5.1,<2026 - - xarray >=2025.6.1,<2026 - - zarr >=3.0.8,<4 + - xarray >=2025.7.0,<2026 + - zarr >=3.0.10,<4 - flox >=0.10.4,<0.11 - numbagg >=0.9.0,<0.10 + - rich >=14.0.0,<15 - python >=3.10 diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..78ab0ed4 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,13 @@ +FROM mcr.microsoft.com/devcontainers/base:noble + +ARG PIXI_VERSION=v0.49.0 + +RUN curl -L -o /usr/local/bin/pixi -fsSL --compressed "https://github.com/prefix-dev/pixi/releases/download/${PIXI_VERSION}/pixi-$(uname -m)-unknown-linux-musl" \ + && chmod +x /usr/local/bin/pixi \ + && pixi info + +# set some user and workdir settings to work nicely with vscode +USER vscode +WORKDIR /home/vscode + +RUN echo 'eval "$(pixi completion -s bash)"' >> /home/vscode/.bashrc diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 39a55761..d90ee6bd 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,17 +1,42 @@ +// https://pixi.sh/latest/integration/editor/vscode/#devcontainer-extension { - "image": "quay.io/pangeo/pangeo-notebook:latest", - "postCreateCommand": { - "vscode": "mkdir ${containerWorkspaceFolder}/.vscode && cp ${containerWorkspaceFolder}/.devcontainer/tasks.json ${containerWorkspaceFolder}/.vscode/tasks.json" - }, - "hostRequirements": { - "cpus": 2 + "name": "xarray-tutorial", + "build": { + "dockerfile": "Dockerfile", + "context": ".." }, "customizations": { - "codespaces": { - "openFiles": ["README.md"] - }, "vscode": { - "extensions": ["ms-toolsai.jupyter", "ms-python.python"] + "settings": {}, + "extensions": [ + "ms-toolsai.jupyter", + "ms-python.python", + "executablebookproject.myst-highlight" + ] + } + }, + "features": { + // ensure GitHub Codespace 'Open with JupyterLab' works + // TODO: figure out why it doesn't work w/ jupyterlab in the pixi environment + "ghcr.io/devcontainers/features/python:1": { + "version": "3.12", + "installTools": false, + // NOTE: not working, so install with pip in postCreateCommand + // "toolsToInstall":"jupyterlab_myst,pixi-kernel", + "installJupyterlab": true } + }, + "mounts": [ + "source=${localWorkspaceFolderBasename}-pixi,target=${containerWorkspaceFolder}/.pixi,type=volume" + ], + // These should execute in order below + "onCreateCommand": { + "configure_jupyterlab": "pip install jupyterlab_myst pixi-kernel" + }, + "postCreateCommand": { + "set_pixi_permissions": "sudo chown vscode .pixi" + }, + "postStartCommand": { + "configure_jupyterlab": "pixi install" } } diff --git a/.devcontainer/scipy2025/Dockerfile b/.devcontainer/scipy2025/Dockerfile new file mode 100644 index 00000000..78ab0ed4 --- /dev/null +++ b/.devcontainer/scipy2025/Dockerfile @@ -0,0 +1,13 @@ +FROM mcr.microsoft.com/devcontainers/base:noble + +ARG PIXI_VERSION=v0.49.0 + +RUN curl -L -o /usr/local/bin/pixi -fsSL --compressed "https://github.com/prefix-dev/pixi/releases/download/${PIXI_VERSION}/pixi-$(uname -m)-unknown-linux-musl" \ + && chmod +x /usr/local/bin/pixi \ + && pixi info + +# set some user and workdir settings to work nicely with vscode +USER vscode +WORKDIR /home/vscode + +RUN echo 'eval "$(pixi completion -s bash)"' >> /home/vscode/.bashrc diff --git a/.devcontainer/scipy2025/devcontainer.json b/.devcontainer/scipy2025/devcontainer.json new file mode 100644 index 00000000..39fc8725 --- /dev/null +++ b/.devcontainer/scipy2025/devcontainer.json @@ -0,0 +1,42 @@ +// https://pixi.sh/latest/integration/editor/vscode/#devcontainer-extension +{ + "name": "scipy2025-xarray-tutorial", + "build": { + "dockerfile": "Dockerfile", + "context": "../../" + }, + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "ms-toolsai.jupyter", + "ms-python.python", + "executablebookproject.myst-highlight" + ] + } + }, + "features": { + // ensure GitHub Codespace 'Open with JupyterLab' works + // TODO: figure out why it doesn't work w/ jupyterlab in the pixi environment + "ghcr.io/devcontainers/features/python:1": { + "version": "3.12", + "installTools": false, + // NOTE: not working, so install with pip in postCreateCommand + // "toolsToInstall":"jupyterlab_myst,pixi-kernel", + "installJupyterlab": true + } + }, + "mounts": [ + "source=${localWorkspaceFolderBasename}-pixi,target=${containerWorkspaceFolder}/.pixi,type=volume" + ], + // These should execute in order below + "onCreateCommand": { + "configure_jupyterlab": "pip install jupyterlab_myst pixi-kernel" + }, + "postCreateCommand": { + "set_pixi_permissions": "sudo chown vscode .pixi" + }, + "postStartCommand": { + "configure_jupyterlab": "pixi install" + } +} diff --git a/.devcontainer/tasks.json b/.devcontainer/tasks.json deleted file mode 100644 index 3b034156..00000000 --- a/.devcontainer/tasks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "jupyterlab", - "type": "shell", - "command": "/srv/conda/envs/notebook/bin/jupyter lab --LabApp.default_url='/lab/tree/overview/xarray-in-45-min.ipynb' --ServerApp.allow_origin='*' --no-browser", - "presentation": { - "reveal": "always" - }, - "runOptions": { - "runOn": "folderOpen" - } - } - ] -} diff --git a/README.md b/README.md index 92dbc0e9..bc921d7b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Xarray Tutorial -[![CI](https://github.com/xarray-contrib/xarray-tutorial/workflows/CI/badge.svg?branch=main)](https://github.com/xarray-contrib/xarray-tutorial/actions?query=branch%3Amain) +[![Deploy Website to GitHub Pages](https://github.com/xarray-contrib/xarray-tutorial/actions/workflows/main.yaml/badge.svg)](https://github.com/xarray-contrib/xarray-tutorial/actions/workflows/main.yaml) [![Jupyter Book Badge](https://jupyterbook.org/badge.svg)](https://tutorial.xarray.dev) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/xarray-contrib/xarray-tutorial/HEAD?labpath=workshops/scipy2024/index.ipynb) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/xarray-contrib/xarray-tutorial/HEAD?labpath=overview/xarray-in-45-min.ipynb) This is the repository for a Jupyter Book website with tutorial material for [Xarray](https://github.com/pydata/xarray), _an open source project and Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun!_ @@ -24,12 +24,14 @@ This tutorial is available to run within [Github Codespaces](https://github.com/ GitHub currently gives every user [120 vCPU hours per month for free](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts), beyond that you must pay. **So be sure to explicitly stop or shut down your codespace when you are done by going to this page (https://github.com/codespaces).** -Once your codespace is launched, the following happens: +You can also use the GitHub CLI to launch a codespace -- [Visual Studio Code](https://code.visualstudio.com/) Interface will open up within your browser. -- A built in terminal will open and it will execute `jupyter lab` automatically. -- Once you see a url to click within the terminal, simply `cmd + click` the given url. -- This will open up another tab in your browser, leading to a [Jupyter Lab](https://jupyterlab.readthedocs.io/en/latest/) Interface. +``` +# This will output a URL to use VSCode in the browser +gh codespace create --repo xarray-contrib/xarray-tutorial +# Optionally launch JupyterLab instead of vscode (after codespace has been created) +gh codespace jupyter +``` #### Locally diff --git a/overview/get-started.md b/overview/get-started.md index 1ee0299f..b4e0192c 100644 --- a/overview/get-started.md +++ b/overview/get-started.md @@ -19,14 +19,14 @@ Many notebooks use special formatting ([Myst Markdown](https://mystmd.org/guide/ The easiest way to start modifying and experimenting with tutorial content is to launch a pre-configured server on the Cloud. This is easy thanks to several free resources which offer ephemeral computing instances (be aware you may loose your connection or work at any time) +```{warning} +Be patient, it can take a few minutes for a server to become available on the Cloud! +``` + #### Mybinder.org Clicking [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/xarray-contrib/xarray-tutorial/HEAD) will load a pre-configured Jupyter Lab interface with _all_ tutorial notebooks for you to run. _You have minimal computing resources and any changes you make will not be saved._ Any page with executable content also has a {octicon}`rocket;2em` icon in the upper right that will launch an interactive session for that particular page. -```{warning} -Be patient, it can take a few minutes for a server to become available on the Cloud (Mybinder.org)! -``` - #### GitHub Codespaces This tutorial is available to run within [GitHub Codespaces](https://github.com/features/codespaces) - a preconfigured development environment running in Microsoft Azure. @@ -39,13 +39,28 @@ You can choose from a selection of virtual machine types: 2 cores - 8 GB RAM sho Additionally, you are able to chose from various configurations for specific workshops (such as Scipy2024). GitHub currently gives every user [120 vCPU hours per month for free](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts), beyond that you must pay. **So be sure to explicitly stop your codespace when you are done by going to this page (https://github.com/codespaces).** You can also chose to fully delete your codespace when you're done exploring tutorial content. +```{tip} +By default Codespaces open VSCode in a browser window. But you can also launch a JupyterLab interface. Once you've launched a codespace, use the auto-generated name in the following URL: `https://github.com/codespaces/CODESPACE-NAME?editor=jupyter` +``` + +Using the GitHub CLI is another very convenient way to start a codespace: + +```bash +gh codespace create -R xarray-contrib/xarray-tutorial +``` + +```bash +# Wait a few minutes for `gh codespace create` to finish, then run: +gh codespace jupyter +``` + ### On your computer Running tutorials on your computer requires some setup: We recommend using [`pixi`](https://pixi.sh/latest/) to ensure a fully reproducible Python environment -``` +```bash git clone https://github.com/xarray-contrib/xarray-tutorial.git cd xarray-tutorial pixi run tutorial diff --git a/pixi.lock b/pixi.lock index 63647960..baa04971 100644 --- a/pixi.lock +++ b/pixi.lock @@ -146,7 +146,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.14.0-nompi_py312h3faca00_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.2.0-h4bba637_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda @@ -386,6 +386,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.22.3-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_1.conda @@ -461,7 +462,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.43-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda @@ -482,7 +483,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.18.3-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -626,7 +627,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gts-0.7.6-he42f4ea_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.14.0-nompi_py312h35183de_100.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-10.2.0-ha0dd535_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda @@ -861,6 +862,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.22.3-py312hcd83bfe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_1.conda @@ -934,14 +936,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.18.3-py312h998013c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -1074,7 +1076,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/gts-0.7.6-h6b5321d_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.14.0-nompi_py312h6cc2a29_100.conda - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-10.2.0-h885c0d4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf4-4.2.15-h5557f11_7.conda @@ -1293,6 +1295,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.22.3-py312h2615798_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_1.conda @@ -1373,7 +1376,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/wrapt-1.17.2-py312h4389bb4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.2.5-he0c23c2_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libice-1.1.2-h0e40799_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libsm-1.2.5-h0e40799_0.conda @@ -1386,7 +1389,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yarl-1.18.3-py312h31fea79_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -4638,16 +4641,17 @@ packages: license_family: MIT size: 53888 timestamp: 1738578623567 -- conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.2-pyhd8ed1ab_0.conda - sha256: a17a784c2ae4c3b3ef63c390f68cf252c58af7220e1bdca843c1e2508e4e1b17 - md5: 5a08b423e3347fb97f9bd45cd5166475 +- conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.3-pyhd8ed1ab_0.conda + sha256: 5ed16799f988011e05043e692401ed075bbd73ba312b731ae9e471d3a8e9f529 + md5: 89617cc3dbdca99c74d72c94a2ec651d depends: - h5py - packaging - python >=3.9 license: BSD-3-Clause - size: 48233 - timestamp: 1750975483457 + license_family: BSD + size: 48283 + timestamp: 1751297771838 - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.14.0-nompi_py312h3faca00_100.conda sha256: 9d23b72ee1138e14d379bb4c415cfdfc6944824e1844ff16ebf44e0defd1eddc md5: 2e1c2a9e706c74c4dd6f990a680f3f90 @@ -11115,6 +11119,19 @@ packages: license_family: MIT size: 7818 timestamp: 1598024297745 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda + sha256: d10e2b66a557ec6296844e04686db87818b0df87d73c06388f2332fda3f7d2d5 + md5: 202f08242192ce3ed8bdb439ba40c0fe + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.9 + - typing_extensions >=4.0.0,<5.0.0 + - python + license: MIT + license_family: MIT + size: 200323 + timestamp: 1743371105291 - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda sha256: 093f2a6e70e2fe2e235927639b50e4e5fa4e350ac979fe3a88b821c1a087af41 md5: 047d060dab87bd3de52bbbd6c6e9b5e4 @@ -11222,6 +11239,7 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause + license_family: BSD size: 16847456 timestamp: 1751148548291 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.16.0-py312hcedbd36_0.conda @@ -11243,6 +11261,7 @@ packages: - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: BSD-3-Clause + license_family: BSD size: 13846609 timestamp: 1751148522848 - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.16.0-py312h1416ca1_0.conda @@ -11261,6 +11280,7 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: BSD-3-Clause + license_family: BSD size: 14932332 timestamp: 1751161759720 - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_1.conda @@ -12421,39 +12441,39 @@ packages: license_family: GPL size: 5517425 timestamp: 1646611941216 -- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - sha256: e27b45ca791cfbcad37d64b8615d0672d94aafa00b014826fcbca2ce18bd1cc0 - md5: 145c6f2ac90174d9ad1a2a51b9d7c1dd +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.7.0-pyhd8ed1ab_0.conda + sha256: 59fa62a39068a93e3331043a497ee8886507379639377630ea0b76d6c55dc08b + md5: 86466ca062b92dfd6367188908de3302 depends: - - numpy >=1.24 - - packaging >=23.2 - - pandas >=2.1 - - python >=3.10 + - numpy >=1.26 + - packaging >=24.1 + - pandas >=2.2 + - python >=3.11 constrains: - - scipy >=1.11 - - dask-core >=2023.11 - - bottleneck >=1.3 - - zarr >=2.16 - - flox >=0.7 - - h5py >=3.8 - - iris >=3.7 - - cartopy >=0.22 - - numba >=0.57 - - sparse >=0.14 - - pint >=0.22 - - distributed >=2023.11 - - hdf5 >=1.12 - - seaborn-base >=0.13 - - nc-time-axis >=1.4 - matplotlib-base >=3.8 - toolz >=0.12 + - h5netcdf >=1.3 + - pint >=0.24 + - hdf5 >=1.14 + - h5py >=3.11 - netcdf4 >=1.6.0 + - sparse >=0.15 + - nc-time-axis >=1.4 + - dask-core >=2024.6 + - zarr >=2.18 + - iris >=3.9 + - distributed >=2024.6 + - cartopy >=0.23 + - numba >=0.60 + - seaborn-base >=0.13 + - scipy >=1.13 + - flox >=0.9 + - bottleneck >=1.4 - cftime >=1.6 - - h5netcdf >=1.3 license: Apache-2.0 license_family: APACHE - size: 879913 - timestamp: 1749743321359 + size: 878967 + timestamp: 1751607999849 - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda sha256: 339ab0ff05170a295e59133cd0fa9a9c4ba32b6941c8a2a73484cc13f81e248a md5: 9dda9667feba914e0e80b95b82f7402b @@ -12873,9 +12893,9 @@ packages: license_family: Apache size: 141616 timestamp: 1737576608333 -- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.8-pyhd8ed1ab_0.conda - sha256: 854caa950d31deca0c82ca2cdf45c19a47484b9838c7e357d967d42826c2766e - md5: fe4ccd05ad433a71414ac17137288809 +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.0.10-pyhd8ed1ab_0.conda + sha256: 57aed4191ef3849f3d1772c2c164725131c8b08dd9821fd4e9cb4496e1a3856c + md5: d049e9782d04290dfd3e661bb2dfce78 depends: - crc32c - donfig >=0.8 @@ -12888,8 +12908,8 @@ packages: - fsspec >=2023.10.0 license: MIT license_family: MIT - size: 214470 - timestamp: 1747730730866 + size: 219806 + timestamp: 1751566928250 - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10 md5: 3947a35e916fcc6b9825449affbf4214 diff --git a/pyproject.toml b/pyproject.toml index f5afd878..d04e278b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,7 +80,7 @@ gcsfs = ">=2025.5.1,<2026" geoviews-core = ">=1.14.0,<2" gsw = ">=3.6.19,<4" hvplot = ">=0.11.3,<0.12" -h5netcdf = ">=1.6.2,<2" +h5netcdf = ">=1.6.3,<2" ipykernel = ">=6.29.5,<7" matplotlib-base = ">=3.10.3,<4" netcdf4 = ">=1.7.2,<2" @@ -96,7 +96,8 @@ sphinxcontrib-mermaid = ">=1.0.0,<2" sphinx-notfound-page = ">=1.1.0,<2" sphinxext-rediraffe = ">=0.2.7,<0.3" s3fs = ">=2025.5.1,<2026" -xarray = ">=2025.6.1,<2026" -zarr = ">=3.0.8,<4" +xarray = ">=2025.7.0,<2026" +zarr = ">=3.0.10,<4" flox = ">=0.10.4,<0.11" numbagg = ">=0.9.0,<0.10" +rich = ">=14.0.0,<15"