diff --git a/.gitattributes b/.gitattributes
index c6d4021..a82c521 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,4 @@
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
+# SCM syntax highlighting & preventing 3-way merges
+pixi.lock merge=binary linguist-language=YAML linguist-generated=true
diff --git a/.gitignore b/.gitignore
index 31c2f2c..a3bb1ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,3 +68,6 @@ deep_searches/
# Generated project dumps
full_project.txt
src_structure.txt
+# pixi environments
+.pixi/*
+!.pixi/config.toml
diff --git a/main.py b/main.py
index 7fc4716..c9fca70 100644
--- a/main.py
+++ b/main.py
@@ -285,12 +285,6 @@ def main():
print(BANNER)
# Check for required API keys
- if not os.environ.get("ARRAYLAKE_API_KEY"):
- print("ERROR: ARRAYLAKE_API_KEY not found in environment.")
- print("Please add it to your .env file:")
- print(" ARRAYLAKE_API_KEY=your_api_key_here")
- sys.exit(1)
-
if not os.environ.get("OPENAI_API_KEY"):
print("ERROR: OPENAI_API_KEY not found in environment.")
print("Please add it to your .env file:")
diff --git a/pixi.lock b/pixi.lock
new file mode 100644
index 0000000..0443bd3
--- /dev/null
+++ b/pixi.lock
@@ -0,0 +1,3452 @@
+version: 6
+environments:
+ agent:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.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/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-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/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-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/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/7c/06/c3394327f815fade875724c0f6cff529777c96a1e17fea066deb997f8cf5/langchain-1.2.10-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2d/a1/57d5feaa11dc2ebb40f3bc3d7bf4294b6703e152e56edea9d4c622475a6a/langchain_core-1.2.16-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/72/17/3785cbcdc81c451179247e4176d2697879cb4f45ab2c59d949ca574e072d/langchain_openai-1.1.10-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/23/a2/562a6c2430085c2c29b23c1e1d12233bf41a64e9a9832eda7573af3666cf/langgraph-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/de/ddd53b7032e623f3c7bcdab2b44e8bf635e468f62e10e5ff1946f62c9356/langgraph_checkpoint-4.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/41/ec966424ad3f2ed3996d24079d3342c8cd6c0bd0653c12b2a917a685ec6c/langgraph_prebuilt-1.0.8-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6a/4c/7a7510260fbda788efd13bf4650d3e7d80988118441ac811ec78e0aa03ac/langgraph_sdk-0.3.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/41/a6/6025ccbdffe3533d444cdd0e989ff29bd273cb0ea6701c91dbbfeecc657a/langsmith-0.7.7-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/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.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/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/94/16/24d18851334be09c25e87f74307c84950f18c324a4d3c0b41dabdbf19c29/ormsgpack-1.12.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.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/05/30/5db1236b0d6313f03ebf97f5e17cda9ca060f524b2fcc875149a8360b21c/pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f6/1e/12fe7c40cd2099a1f454518754ed229b01beaf3bbb343127f0cc13ce6c22/plotext-5.3.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/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.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/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/08/180d1826c3d7065200a5168c6b993a44947395c7bb6e04b2c2a219c34225/regex-2026.2.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-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/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-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/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/43/b7/add4363039a34506a58457d96d4aa2126061df3a143eb4d042aedd6a2e76/uuid_utils-0.14.1-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: ./
+ copernicus:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/34/ec/c764296b694b425853baf444d9e4643949d2e16479f5b192f47fa24ba1fe/arcosparse-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.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/9e/21/854be1e1829a33450079c1a05f89ef03a2a44bdad590de3e10dc09d73cbd/boto3-1.42.57-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/cc/bd/89d0fdb65488d6ee40194268b07316433b41f3aa3f242676ed804c3200f5/botocore-1.42.57-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e8/b7/4a3e7885c524cc1da667c414e97ac12a81051596146bec99e0113429f759/copernicusmarine-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/e5/23/d39ccc4ed76222db31530b0a7d38876fdb7673e23f838e8d8f0ed4651a4f/dask-2026.1.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.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/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ad/b4/a9430e72bfc3c458e1fcf8363890994e483052ab052ed93912be4e5b32c8/pystac-1.14.3-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.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/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-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/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: ./
+ default:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.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/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: ./
+ dev:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.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/a5/f5/d33696c099450b1274d925a42b7a030cd3ea1f56d72e5ca8bbed5f52759c/black-26.1.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d3/28/56e6d892b7b052236d67c95f1936b6a7cf7c3e2634bf27610b8cbd7f9c60/coverage-7.13.4-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.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/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.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/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.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/c0/5c/e2b18e66d73b69de87c198cba8744934b91247d8ab657a7253b591f4cf23/python_discovery-1.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2d/c1/e0532d7f9c9e0b14c46f61b14afd563298b8b83f337b6789ddd987e46121/ruff-0.15.2-py3-none-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/29/d1/3f62e4f9577b28c352c11623a03fb916096d5c131303d4861b4914481b6b/virtualenv-21.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: ./
+ docs:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-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/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: ./
+ test-copernicus:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/34/ec/c764296b694b425853baf444d9e4643949d2e16479f5b192f47fa24ba1fe/arcosparse-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9e/21/854be1e1829a33450079c1a05f89ef03a2a44bdad590de3e10dc09d73cbd/boto3-1.42.57-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/cc/bd/89d0fdb65488d6ee40194268b07316433b41f3aa3f242676ed804c3200f5/botocore-1.42.57-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/e8/b7/4a3e7885c524cc1da667c414e97ac12a81051596146bec99e0113429f759/copernicusmarine-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e5/23/d39ccc4ed76222db31530b0a7d38876fdb7673e23f838e8d8f0ed4651a4f/dask-2026.1.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-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/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-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/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/7c/06/c3394327f815fade875724c0f6cff529777c96a1e17fea066deb997f8cf5/langchain-1.2.10-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2d/a1/57d5feaa11dc2ebb40f3bc3d7bf4294b6703e152e56edea9d4c622475a6a/langchain_core-1.2.16-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/72/17/3785cbcdc81c451179247e4176d2697879cb4f45ab2c59d949ca574e072d/langchain_openai-1.1.10-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/23/a2/562a6c2430085c2c29b23c1e1d12233bf41a64e9a9832eda7573af3666cf/langgraph-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/de/ddd53b7032e623f3c7bcdab2b44e8bf635e468f62e10e5ff1946f62c9356/langgraph_checkpoint-4.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/41/ec966424ad3f2ed3996d24079d3342c8cd6c0bd0653c12b2a917a685ec6c/langgraph_prebuilt-1.0.8-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6a/4c/7a7510260fbda788efd13bf4650d3e7d80988118441ac811ec78e0aa03ac/langgraph_sdk-0.3.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/41/a6/6025ccbdffe3533d444cdd0e989ff29bd273cb0ea6701c91dbbfeecc657a/langsmith-0.7.7-py3-none-any.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/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.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/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/94/16/24d18851334be09c25e87f74307c84950f18c324a4d3c0b41dabdbf19c29/ormsgpack-1.12.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-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/05/30/5db1236b0d6313f03ebf97f5e17cda9ca060f524b2fcc875149a8360b21c/pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f6/1e/12fe7c40cd2099a1f454518754ed229b01beaf3bbb343127f0cc13ce6c22/plotext-5.3.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/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.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/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ad/b4/a9430e72bfc3c458e1fcf8363890994e483052ab052ed93912be4e5b32c8/pystac-1.14.3-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/08/180d1826c3d7065200a5168c6b993a44947395c7bb6e04b2c2a219c34225/regex-2026.2.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-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/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-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/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/43/b7/add4363039a34506a58457d96d4aa2126061df3a143eb4d042aedd6a2e76/uuid_utils-0.14.1-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: ./
+ web:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ packages:
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.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/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/c9/a175a7779f3599dfa4adfc97a6ce0e157237b3d7941538604aadaf97bfb6/fastapi-0.133.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-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/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-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/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.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/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.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/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/90/cd/b62bdeaa429758aee8de8b00ac0dd26593a9de93d302bff3d21439e9791d/uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/7b/22/16d5331eaed1cb107b873f6ae1b69e9ced582fcf0c59a50cd84f403b1c32/watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ - pypi: ./
+packages:
+- pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl
+ name: annotated-doc
+ version: 0.0.4
+ sha256: 571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ name: annotated-types
+ version: 0.7.0
+ sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+ requires_dist:
+ - typing-extensions>=4.0.0 ; python_full_version < '3.9'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
+ name: anyio
+ version: 4.12.1
+ sha256: d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c
+ requires_dist:
+ - exceptiongroup>=1.0.2 ; python_full_version < '3.11'
+ - idna>=2.8
+ - typing-extensions>=4.5 ; python_full_version < '3.13'
+ - trio>=0.32.0 ; python_full_version >= '3.10' and extra == 'trio'
+ - trio>=0.31.0 ; python_full_version < '3.10' and extra == 'trio'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl
+ name: appnope
+ version: 0.1.4
+ sha256: 502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c
+ requires_python: '>=3.6'
+- pypi: https://files.pythonhosted.org/packages/34/ec/c764296b694b425853baf444d9e4643949d2e16479f5b192f47fa24ba1fe/arcosparse-0.4.2-py3-none-any.whl
+ name: arcosparse
+ version: 0.4.2
+ sha256: f2eced580b69493553fbc07ff9d34147a1fb38bcdd530e1a9ac5ad961bd6dd2b
+ requires_dist:
+ - pandas>=2,<3
+ - pyarrow>=17.0.0
+ - pystac>=1.8.3,<2.0.0
+ - requests>=2.27.1,<3.0.0
+ - tqdm>=4.65,<5.0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/8b/80/88dad404ab9e522411837d1298341183c5b9fd373653edea77591ad6c501/arraylake-0.30.0-py3-none-any.whl
+ name: arraylake
+ version: 0.30.0
+ sha256: 7e32129a3f6bb470d245b000a6f6ff35ea198ee9792111f4294da852f943b5b6
+ requires_dist:
+ - click>=8.1.3,<9.0
+ - donfig>=0.7,<1.0
+ - httpx>=0.23,<0.28
+ - icechunk>=1.1.0,<2.0.0
+ - numpy>=1.23,<3.0
+ - packaging>=23.0,<26.0
+ - pydantic[email]>=2.9,<3.0
+ - python-dateutil>=2.8,<3.0
+ - rich>=12.6,<15.0
+ - ruamel-yaml>=0.17,<1.0
+ - structlog>=24.1,<26.0
+ - typer>=0.12.0,<1.0
+ - zarr>=3.1.0,<4.0
+ - cf-xarray>=0.10.4 ; extra == 'maximal'
+ - numpy<2.3 ; extra == 'maximal'
+ - pyarrow<22 ; extra == 'maximal'
+ - xarray[complete]>=2024.10.0 ; extra == 'maximal'
+ - cf-xarray>=0.10.4 ; extra == 'xarray'
+ - xarray>=2024.10.0 ; extra == 'xarray'
+ requires_python: '>=3.11,<3.14'
+- pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl
+ name: asttokens
+ version: 3.0.1
+ sha256: 15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a
+ requires_dist:
+ - astroid>=2,<5 ; extra == 'astroid'
+ - astroid>=2,<5 ; extra == 'test'
+ - pytest<9.0 ; 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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl
+ name: babel
+ version: 2.18.0
+ sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35
+ requires_dist:
+ - pytz>=2015.7 ; python_full_version < '3.9'
+ - tzdata ; sys_platform == 'win32' and extra == 'dev'
+ - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev'
+ - freezegun~=1.0 ; extra == 'dev'
+ - jinja2>=3.0 ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - pytest>=6.0 ; extra == 'dev'
+ - pytz ; extra == 'dev'
+ - setuptools ; extra == 'dev'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl
+ name: backrefs
+ version: '6.2'
+ sha256: e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7
+ requires_dist:
+ - regex ; extra == 'extras'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/a5/f5/d33696c099450b1274d925a42b7a030cd3ea1f56d72e5ca8bbed5f52759c/black-26.1.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: black
+ version: 26.1.0
+ sha256: b22b3810451abe359a964cc88121d57f7bce482b53a066de0f1584988ca36e79
+ requires_dist:
+ - click>=8.0.0
+ - mypy-extensions>=0.4.3
+ - packaging>=22.0
+ - pathspec>=1.0.0
+ - platformdirs>=2
+ - pytokens>=0.3.0
+ - tomli>=1.1.0 ; python_full_version < '3.11'
+ - typing-extensions>=4.0.1 ; python_full_version < '3.11'
+ - colorama>=0.4.3 ; extra == 'colorama'
+ - aiohttp>=3.10 ; extra == 'd'
+ - ipython>=7.8.0 ; extra == 'jupyter'
+ - tokenize-rt>=3.2.0 ; extra == 'jupyter'
+ - uvloop>=0.15.2 ; extra == 'uvloop'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/9e/21/854be1e1829a33450079c1a05f89ef03a2a44bdad590de3e10dc09d73cbd/boto3-1.42.57-py3-none-any.whl
+ name: boto3
+ version: 1.42.57
+ sha256: 74f47051e3b741a0c1e64d57b891076c2c68f8d7b98aee36b044fab1849b4823
+ requires_dist:
+ - botocore>=1.42.57,<1.43.0
+ - jmespath>=0.7.1,<2.0.0
+ - s3transfer>=0.16.0,<0.17.0
+ - botocore[crt]>=1.21.0,<2.0a0 ; extra == 'crt'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/cc/bd/89d0fdb65488d6ee40194268b07316433b41f3aa3f242676ed804c3200f5/botocore-1.42.57-py3-none-any.whl
+ name: botocore
+ version: 1.42.57
+ sha256: 0d26c09955e52ac5090d9cf9e218542df81670077049a606be7c3bd235208e67
+ 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.31.2 ; extra == 'crt'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df
+ md5: 620b85a3f45526a8bc4d23fd78fc22f0
+ depends:
+ - __osx >=11.0
+ license: bzip2-1.0.6
+ license_family: BSD
+ purls: []
+ size: 124834
+ timestamp: 1771350416561
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
+ sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc
+ md5: 4492fd26db29495f0ba23f146cd5638d
+ depends:
+ - __unix
+ license: ISC
+ purls: []
+ size: 147413
+ timestamp: 1772006283803
+- pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl
+ name: certifi
+ version: 2026.2.25
+ sha256: 027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: cffi
+ version: 2.0.0
+ sha256: c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13
+ requires_dist:
+ - pycparser ; implementation_name != 'PyPy'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl
+ name: cfgv
+ version: 3.5.0
+ sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl
+ name: charset-normalizer
+ version: 3.4.4
+ sha256: da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
+ name: click
+ version: 8.2.1
+ sha256: 61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b
+ requires_dist:
+ - colorama ; sys_platform == 'win32'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl
+ name: cloudpickle
+ version: 3.1.2
+ sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
+ name: colorama
+ version: 0.4.6
+ sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*'
+- 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/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ name: contourpy
+ version: 1.3.3
+ sha256: cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77
+ 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'
+- pypi: https://files.pythonhosted.org/packages/e8/b7/4a3e7885c524cc1da667c414e97ac12a81051596146bec99e0113429f759/copernicusmarine-2.3.0-py3-none-any.whl
+ name: copernicusmarine
+ version: 2.3.0
+ sha256: ed48fe06979fe658af045f0ba5756d4cb35a2754f67cc3a8b636062f2c28a501
+ requires_dist:
+ - arcosparse>=0.4.2,<0.5.0
+ - boto3>=1.26
+ - click>=8.0.4,!=8.2.0,<8.3.0
+ - dask>=2022
+ - h5netcdf>=1.4.0,<2.0.0
+ - numpy>=1.23.0
+ - pydantic>=2.9.1,<3.0.0
+ - pystac>=1.8.3
+ - requests>=2.27.1
+ - semver>=3.0.2
+ - setuptools>=68.2.2
+ - tqdm>=4.65.0
+ - xarray>=2023.4.0
+ - zarr>=2.13.3
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/d3/28/56e6d892b7b052236d67c95f1936b6a7cf7c3e2634bf27610b8cbd7f9c60/coverage-7.13.4-cp314-cp314-macosx_11_0_arm64.whl
+ name: coverage
+ version: 7.13.4
+ sha256: 29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689
+ requires_dist:
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl
+ name: cryptography
+ version: 46.0.5
+ sha256: 351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad
+ 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.5 ; 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'
+- 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/e5/23/d39ccc4ed76222db31530b0a7d38876fdb7673e23f838e8d8f0ed4651a4f/dask-2026.1.2-py3-none-any.whl
+ name: dask
+ version: 2026.1.2
+ sha256: 46a0cf3b8d87f78a3d2e6b145aea4418a6d6d606fe6a16c79bd8ca2bb862bc91
+ 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.12.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>=16.0 ; extra == 'dataframe'
+ - distributed>=2026.1.2,<2026.1.3 ; extra == 'distributed'
+ - bokeh>=3.1.0 ; extra == 'diagnostics'
+ - jinja2>=2.10.3 ; extra == 'diagnostics'
+ - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete'
+ - pyarrow>=16.0 ; 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/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl
+ name: debugpy
+ version: 1.8.20
+ sha256: 5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7
+ 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/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
+ name: distlib
+ version: 0.4.0
+ sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16
+- pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl
+ name: distro
+ version: 1.9.0
+ sha256: 7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2
+ requires_python: '>=3.6'
+- pypi: https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl
+ name: dnspython
+ version: 2.8.0
+ sha256: 01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af
+ requires_dist:
+ - black>=25.1.0 ; extra == 'dev'
+ - coverage>=7.0 ; extra == 'dev'
+ - flake8>=7 ; extra == 'dev'
+ - hypercorn>=0.17.0 ; extra == 'dev'
+ - mypy>=1.17 ; extra == 'dev'
+ - pylint>=3 ; extra == 'dev'
+ - pytest-cov>=6.2.0 ; extra == 'dev'
+ - pytest>=8.4 ; extra == 'dev'
+ - quart-trio>=0.12.0 ; extra == 'dev'
+ - sphinx-rtd-theme>=3.0.0 ; extra == 'dev'
+ - sphinx>=8.2.0 ; extra == 'dev'
+ - twine>=6.1.0 ; extra == 'dev'
+ - wheel>=0.45.0 ; extra == 'dev'
+ - cryptography>=45 ; extra == 'dnssec'
+ - h2>=4.2.0 ; extra == 'doh'
+ - httpcore>=1.0.0 ; extra == 'doh'
+ - httpx>=0.28.0 ; extra == 'doh'
+ - aioquic>=1.2.0 ; extra == 'doq'
+ - idna>=3.10 ; extra == 'idna'
+ - trio>=0.30 ; extra == 'trio'
+ - wmi>=1.5.1 ; sys_platform == 'win32' and extra == 'wmi'
+ requires_python: '>=3.10'
+- 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/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl
+ name: email-validator
+ version: 2.3.0
+ sha256: 80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4
+ requires_dist:
+ - dnspython>=2.0.0
+ - idna>=2.0.0
+ requires_python: '>=3.8'
+- pypi: ./
+ name: eurus
+ version: 1.0.0
+ sha256: 814faee21c77b2d29ea461cdfdb8de1257c8988f04026a9a7be0ebc7cb834fa5
+ requires_dist:
+ - mcp>=1.0.0
+ - arraylake>=0.10.0
+ - xarray>=2024.10.0
+ - zarr>=3.0.0
+ - pandas>=2.0.0
+ - numpy>=1.24.0
+ - pydantic>=2.0.0
+ - python-dotenv>=1.0.0
+ - langchain>=0.3.0 ; extra == 'agent'
+ - langchain-openai>=0.2.0 ; extra == 'agent'
+ - langchain-core>=0.3.0 ; extra == 'agent'
+ - openai>=1.0.0 ; extra == 'agent'
+ - jupyter-client>=8.0.0 ; extra == 'agent'
+ - ipykernel>=6.0.0 ; extra == 'agent'
+ - matplotlib>=3.7.0 ; extra == 'agent'
+ - scipy>=1.10.0 ; extra == 'agent'
+ - seaborn>=0.12.0 ; extra == 'agent'
+ - plotext>=5.0.0 ; extra == 'agent'
+ - fastapi>=0.109.0 ; extra == 'web'
+ - uvicorn[standard]>=0.27.0 ; extra == 'web'
+ - jinja2>=3.1.0 ; extra == 'web'
+ - python-multipart>=0.0.6 ; extra == 'web'
+ - websockets>=12.0 ; extra == 'web'
+ - copernicusmarine>=2.0.0 ; extra == 'copernicus'
+ - pytest>=7.0.0 ; extra == 'dev'
+ - pytest-asyncio>=0.21.0 ; extra == 'dev'
+ - pytest-cov>=4.0.0 ; extra == 'dev'
+ - black>=23.0.0 ; extra == 'dev'
+ - ruff>=0.1.0 ; extra == 'dev'
+ - mypy>=1.0.0 ; extra == 'dev'
+ - pre-commit>=3.0.0 ; extra == 'dev'
+ - mkdocs>=1.5.0 ; extra == 'docs'
+ - mkdocs-material>=9.0.0 ; extra == 'docs'
+ - mkdocstrings[python]>=0.24.0 ; extra == 'docs'
+ requires_python: '>=3.10'
+ editable: true
+- 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'
+- pypi: https://files.pythonhosted.org/packages/d2/c9/a175a7779f3599dfa4adfc97a6ce0e157237b3d7941538604aadaf97bfb6/fastapi-0.133.1-py3-none-any.whl
+ name: fastapi
+ version: 0.133.1
+ sha256: 658f34ba334605b1617a65adf2ea6461901bdb9af3a3080d63ff791ecf7dc2e2
+ requires_dist:
+ - starlette>=0.40.0
+ - pydantic>=2.7.0
+ - typing-extensions>=4.8.0
+ - typing-inspection>=0.4.2
+ - annotated-doc>=0.0.2
+ - fastapi-cli[standard]>=0.0.8 ; extra == 'standard'
+ - httpx>=0.23.0,<1.0.0 ; extra == 'standard'
+ - jinja2>=3.1.5 ; extra == 'standard'
+ - python-multipart>=0.0.18 ; extra == 'standard'
+ - email-validator>=2.0.0 ; extra == 'standard'
+ - uvicorn[standard]>=0.12.0 ; extra == 'standard'
+ - pydantic-settings>=2.0.0 ; extra == 'standard'
+ - pydantic-extra-types>=2.0.0 ; extra == 'standard'
+ - fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.8 ; extra == 'standard-no-fastapi-cloud-cli'
+ - httpx>=0.23.0,<1.0.0 ; extra == 'standard-no-fastapi-cloud-cli'
+ - jinja2>=3.1.5 ; extra == 'standard-no-fastapi-cloud-cli'
+ - python-multipart>=0.0.18 ; extra == 'standard-no-fastapi-cloud-cli'
+ - email-validator>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli'
+ - uvicorn[standard]>=0.12.0 ; extra == 'standard-no-fastapi-cloud-cli'
+ - pydantic-settings>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli'
+ - pydantic-extra-types>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli'
+ - fastapi-cli[standard]>=0.0.8 ; extra == 'all'
+ - httpx>=0.23.0,<1.0.0 ; extra == 'all'
+ - jinja2>=3.1.5 ; extra == 'all'
+ - python-multipart>=0.0.18 ; extra == 'all'
+ - itsdangerous>=1.1.0 ; extra == 'all'
+ - pyyaml>=5.3.1 ; extra == 'all'
+ - email-validator>=2.0.0 ; extra == 'all'
+ - uvicorn[standard]>=0.12.0 ; extra == 'all'
+ - pydantic-settings>=2.0.0 ; extra == 'all'
+ - pydantic-extra-types>=2.0.0 ; extra == 'all'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl
+ name: filelock
+ version: 3.24.3
+ sha256: 426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl
+ name: fonttools
+ version: 4.61.1
+ sha256: fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd
+ 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>=17.0.0 ; python_full_version < '3.15' 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.45.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>=17.0.0 ; python_full_version < '3.15' 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.45.0 ; extra == 'all'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl
+ name: fsspec
+ version: 2026.2.0
+ sha256: 98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437
+ requires_dist:
+ - adlfs ; extra == 'abfs'
+ - adlfs ; extra == 'adl'
+ - pyarrow>=1 ; extra == 'arrow'
+ - dask ; extra == 'dask'
+ - distributed ; extra == 'dask'
+ - pre-commit ; extra == 'dev'
+ - ruff>=0.5 ; extra == 'dev'
+ - numpydoc ; extra == 'doc'
+ - sphinx ; extra == 'doc'
+ - sphinx-design ; extra == 'doc'
+ - sphinx-rtd-theme ; extra == 'doc'
+ - yarl ; extra == 'doc'
+ - dropbox ; extra == 'dropbox'
+ - dropboxdrivefs ; extra == 'dropbox'
+ - requests ; extra == 'dropbox'
+ - adlfs ; extra == 'full'
+ - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full'
+ - dask ; extra == 'full'
+ - distributed ; extra == 'full'
+ - dropbox ; extra == 'full'
+ - dropboxdrivefs ; extra == 'full'
+ - fusepy ; extra == 'full'
+ - gcsfs>2024.2.0 ; extra == 'full'
+ - libarchive-c ; extra == 'full'
+ - ocifs ; extra == 'full'
+ - panel ; extra == 'full'
+ - paramiko ; extra == 'full'
+ - pyarrow>=1 ; extra == 'full'
+ - pygit2 ; extra == 'full'
+ - requests ; extra == 'full'
+ - s3fs>2024.2.0 ; extra == 'full'
+ - smbprotocol ; extra == 'full'
+ - tqdm ; extra == 'full'
+ - fusepy ; extra == 'fuse'
+ - gcsfs>2024.2.0 ; extra == 'gcs'
+ - pygit2 ; extra == 'git'
+ - requests ; extra == 'github'
+ - gcsfs ; extra == 'gs'
+ - panel ; extra == 'gui'
+ - pyarrow>=1 ; extra == 'hdfs'
+ - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http'
+ - libarchive-c ; extra == 'libarchive'
+ - ocifs ; extra == 'oci'
+ - s3fs>2024.2.0 ; extra == 's3'
+ - paramiko ; extra == 'sftp'
+ - smbprotocol ; extra == 'smb'
+ - paramiko ; extra == 'ssh'
+ - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test'
+ - numpy ; extra == 'test'
+ - pytest ; extra == 'test'
+ - pytest-asyncio!=0.22.0 ; extra == 'test'
+ - pytest-benchmark ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - pytest-mock ; extra == 'test'
+ - pytest-recording ; extra == 'test'
+ - pytest-rerunfailures ; extra == 'test'
+ - requests ; extra == 'test'
+ - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream'
+ - dask[dataframe,test] ; extra == 'test-downstream'
+ - moto[server]>4,<5 ; extra == 'test-downstream'
+ - pytest-timeout ; extra == 'test-downstream'
+ - xarray ; extra == 'test-downstream'
+ - adlfs ; extra == 'test-full'
+ - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full'
+ - backports-zstd ; python_full_version < '3.14' and extra == 'test-full'
+ - cloudpickle ; extra == 'test-full'
+ - dask ; extra == 'test-full'
+ - distributed ; extra == 'test-full'
+ - dropbox ; extra == 'test-full'
+ - dropboxdrivefs ; extra == 'test-full'
+ - fastparquet ; extra == 'test-full'
+ - fusepy ; extra == 'test-full'
+ - gcsfs ; extra == 'test-full'
+ - jinja2 ; extra == 'test-full'
+ - kerchunk ; extra == 'test-full'
+ - libarchive-c ; extra == 'test-full'
+ - lz4 ; extra == 'test-full'
+ - notebook ; extra == 'test-full'
+ - numpy ; extra == 'test-full'
+ - ocifs ; extra == 'test-full'
+ - pandas<3.0.0 ; extra == 'test-full'
+ - panel ; extra == 'test-full'
+ - paramiko ; extra == 'test-full'
+ - pyarrow ; extra == 'test-full'
+ - pyarrow>=1 ; extra == 'test-full'
+ - pyftpdlib ; extra == 'test-full'
+ - pygit2 ; extra == 'test-full'
+ - pytest ; extra == 'test-full'
+ - pytest-asyncio!=0.22.0 ; extra == 'test-full'
+ - pytest-benchmark ; extra == 'test-full'
+ - pytest-cov ; extra == 'test-full'
+ - pytest-mock ; extra == 'test-full'
+ - pytest-recording ; extra == 'test-full'
+ - pytest-rerunfailures ; extra == 'test-full'
+ - python-snappy ; extra == 'test-full'
+ - requests ; extra == 'test-full'
+ - smbprotocol ; extra == 'test-full'
+ - tqdm ; extra == 'test-full'
+ - urllib3 ; extra == 'test-full'
+ - zarr ; extra == 'test-full'
+ - zstandard ; python_full_version < '3.14' and extra == 'test-full'
+ - tqdm ; extra == 'tqdm'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
+ name: ghp-import
+ version: 2.1.0
+ sha256: 8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619
+ requires_dist:
+ - python-dateutil>=2.8.1
+ - twine ; extra == 'dev'
+ - markdown ; extra == 'dev'
+ - flake8 ; extra == 'dev'
+ - wheel ; extra == 'dev'
+- pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl
+ name: google-crc32c
+ version: 1.8.0
+ sha256: e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-py3-none-any.whl
+ name: griffelib
+ version: 2.0.0
+ sha256: 01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f
+ requires_dist:
+ - pip>=24.0 ; extra == 'pypi'
+ - platformdirs>=4.2 ; extra == 'pypi'
+ - wheel>=0.42 ; extra == 'pypi'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ name: h11
+ version: 0.16.0
+ sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl
+ name: h5netcdf
+ version: 1.8.1
+ sha256: a76ed7cfc9b8a8908ea7057c4e57e27307acff1049b7f5ed52db6c2247636879
+ requires_dist:
+ - packaging
+ - numpy
+ - h5py ; extra == 'h5py'
+ - pyfive>=1.0.0 ; extra == 'pyfive'
+ - h5pyd ; extra == 'h5pyd'
+ - h5py ; extra == 'test'
+ - netcdf4 ; extra == 'test'
+ - pyfive>=1.0.0 ; extra == 'test'
+ - pytest ; extra == 'test'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ name: httpcore
+ version: 1.0.9
+ sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55
+ requires_dist:
+ - certifi
+ - h11>=0.16
+ - anyio>=4.0,<5.0 ; extra == 'asyncio'
+ - h2>=3,<5 ; extra == 'http2'
+ - socksio==1.* ; extra == 'socks'
+ - trio>=0.22.0,<1.0 ; extra == 'trio'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: httptools
+ version: 0.7.1
+ sha256: 7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl
+ name: httpx
+ version: 0.27.2
+ sha256: 7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0
+ requires_dist:
+ - anyio
+ - certifi
+ - httpcore==1.*
+ - idna
+ - sniffio
+ - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli'
+ - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli'
+ - click==8.* ; extra == 'cli'
+ - pygments==2.* ; extra == 'cli'
+ - rich>=10,<14 ; extra == 'cli'
+ - h2>=3,<5 ; extra == 'http2'
+ - socksio==1.* ; extra == 'socks'
+ - zstandard>=0.18.0 ; extra == 'zstd'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl
+ name: httpx-sse
+ version: 0.4.3
+ sha256: 0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/a4/bf/8ded42933d64041c1b495dc8b930799ac5cba272e0d699ed4fd754f0788b/icechunk-1.1.19-cp314-cp314-macosx_11_0_arm64.whl
+ name: icechunk
+ version: 1.1.19
+ sha256: a514057f1c71fa127e86d8225f2acd8aba6855dd60d136036fd94b28f68f744b
+ requires_dist:
+ - zarr>=3,!=3.0.3
+ requires_python: '>=3.11'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
+ sha256: d4cefbca587429d1192509edc52c88de52bc96c2447771ddc1f8bee928aed5ef
+ md5: 1e93aca311da0210e660d2247812fa02
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 12358010
+ timestamp: 1767970350308
+- pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl
+ name: identify
+ version: 2.6.16
+ sha256: 391ee4d77741d994189522896270b787aed8670389bfd60f326d677d64a6dfb0
+ requires_dist:
+ - ukkonen ; extra == 'license'
+ requires_python: '>=3.10'
+- 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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
+ name: iniconfig
+ version: 2.3.0
+ sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl
+ name: ipykernel
+ version: 7.2.0
+ sha256: 3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661
+ requires_dist:
+ - appnope>=0.1.2 ; sys_platform == 'darwin'
+ - comm>=0.1.1
+ - debugpy>=1.6.5
+ - ipython>=7.23.1
+ - jupyter-client>=8.8.0
+ - jupyter-core>=5.1,!=6.0.*
+ - matplotlib-inline>=0.1
+ - nest-asyncio>=1.4
+ - packaging>=22
+ - psutil>=5.7
+ - pyzmq>=25
+ - tornado>=6.4.1
+ - 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,<10 ; extra == 'test'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.0-py3-none-any.whl
+ name: ipython
+ version: 9.10.0
+ sha256: c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d
+ requires_dist:
+ - colorama>=0.4.4 ; sys_platform == 'win32'
+ - decorator>=4.3.2
+ - ipython-pygments-lexers>=1.0.0
+ - jedi>=0.18.1
+ - matplotlib-inline>=0.1.5
+ - pexpect>4.3 ; sys_platform != 'emscripten' and sys_platform != 'win32'
+ - prompt-toolkit>=3.0.41,<3.1.0
+ - pygments>=2.11.0
+ - stack-data>=0.6.0
+ - 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>=70.0 ; extra == 'doc'
+ - sphinx-toml==0.0.4 ; extra == 'doc'
+ - sphinx-rtd-theme>=0.1.8 ; extra == 'doc'
+ - sphinx>=8.0 ; extra == 'doc'
+ - typing-extensions ; extra == 'doc'
+ - pytest>=7.0.0 ; extra == 'test'
+ - pytest-asyncio>=1.0.0 ; extra == 'test'
+ - testpath>=0.2 ; extra == 'test'
+ - packaging>=20.1.0 ; extra == 'test'
+ - setuptools>=61.2 ; 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>6.30 ; extra == 'test-extra'
+ - numpy>=1.27 ; extra == 'test-extra'
+ - pandas>2.1 ; extra == 'test-extra'
+ - trio>=0.1.0 ; extra == 'test-extra'
+ - matplotlib>3.9 ; extra == 'matplotlib'
+ - ipython[doc,matplotlib,terminal,test,test-extra] ; extra == 'all'
+ - argcomplete>=3.0 ; 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/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'
+- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
+ name: jinja2
+ version: 3.1.6
+ sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
+ requires_dist:
+ - markupsafe>=2.0
+ - babel>=2.7 ; extra == 'i18n'
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: jiter
+ version: 0.13.0
+ sha256: 9776ebe51713acf438fd9b4405fcd86893ae5d03487546dae7f34993217f8a91
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl
+ name: jmespath
+ version: 1.1.0
+ sha256: a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl
+ name: jsonpatch
+ version: '1.33'
+ sha256: 0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade
+ requires_dist:
+ - jsonpointer>=1.9
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*'
+- pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl
+ name: jsonpointer
+ version: 3.0.0
+ sha256: 13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl
+ name: jsonschema
+ version: 4.26.0
+ sha256: d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce
+ requires_dist:
+ - attrs>=22.2.0
+ - jsonschema-specifications>=2023.3.6
+ - referencing>=0.28.4
+ - rpds-py>=0.25.0
+ - 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.10'
+- 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/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl
+ name: jupyter-client
+ version: 8.8.0
+ sha256: f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a
+ requires_dist:
+ - jupyter-core>=5.1
+ - python-dateutil>=2.8.2
+ - pyzmq>=25.0
+ - tornado>=6.4.1
+ - 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'
+ - orjson ; extra == 'orjson'
+ - anyio ; extra == 'test'
+ - coverage ; extra == 'test'
+ - ipykernel>=6.14 ; extra == 'test'
+ - msgpack ; extra == 'test'
+ - mypy ; platform_python_implementation != 'PyPy' and extra == 'test'
+ - paramiko ; sys_platform == 'win32' and extra == 'test'
+ - pre-commit ; extra == 'test'
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - pytest-jupyter[client]>=0.6.2 ; extra == 'test'
+ - pytest-timeout ; extra == 'test'
+ requires_python: '>=3.10'
+- 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/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl
+ name: kiwisolver
+ version: 1.4.9
+ sha256: 2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/7c/06/c3394327f815fade875724c0f6cff529777c96a1e17fea066deb997f8cf5/langchain-1.2.10-py3-none-any.whl
+ name: langchain
+ version: 1.2.10
+ sha256: e07a377204451fffaed88276b8193e894893b1003e25c5bca6539288ccca3698
+ requires_dist:
+ - langchain-core>=1.2.10,<2.0.0
+ - langgraph>=1.0.8,<1.1.0
+ - pydantic>=2.7.4,<3.0.0
+ - langchain-anthropic ; extra == 'anthropic'
+ - langchain-aws ; extra == 'aws'
+ - langchain-azure-ai ; extra == 'azure-ai'
+ - langchain-community ; extra == 'community'
+ - langchain-deepseek ; extra == 'deepseek'
+ - langchain-fireworks ; extra == 'fireworks'
+ - langchain-google-genai ; extra == 'google-genai'
+ - langchain-google-vertexai ; extra == 'google-vertexai'
+ - langchain-groq ; extra == 'groq'
+ - langchain-huggingface ; extra == 'huggingface'
+ - langchain-mistralai ; extra == 'mistralai'
+ - langchain-ollama ; extra == 'ollama'
+ - langchain-openai ; extra == 'openai'
+ - langchain-perplexity ; extra == 'perplexity'
+ - langchain-together ; extra == 'together'
+ - langchain-xai ; extra == 'xai'
+ requires_python: '>=3.10.0,<4.0.0'
+- pypi: https://files.pythonhosted.org/packages/2d/a1/57d5feaa11dc2ebb40f3bc3d7bf4294b6703e152e56edea9d4c622475a6a/langchain_core-1.2.16-py3-none-any.whl
+ name: langchain-core
+ version: 1.2.16
+ sha256: 2768add9aa97232a7712580f678e0ba045ee1036c71fe471355be0434fcb6e30
+ requires_dist:
+ - jsonpatch>=1.33.0,<2.0.0
+ - langsmith>=0.3.45,<1.0.0
+ - packaging>=23.2.0
+ - pydantic>=2.7.4,<3.0.0
+ - pyyaml>=5.3.0,<7.0.0
+ - tenacity>=8.1.0,!=8.4.0,<10.0.0
+ - typing-extensions>=4.7.0,<5.0.0
+ - uuid-utils>=0.12.0,<1.0
+ requires_python: '>=3.10.0,<4.0.0'
+- pypi: https://files.pythonhosted.org/packages/72/17/3785cbcdc81c451179247e4176d2697879cb4f45ab2c59d949ca574e072d/langchain_openai-1.1.10-py3-none-any.whl
+ name: langchain-openai
+ version: 1.1.10
+ sha256: d91b2c09e9fbc70f7af45345d3aa477744962d41c73a029beb46b4f83b824827
+ requires_dist:
+ - langchain-core>=1.2.13,<2.0.0
+ - openai>=2.20.0,<3.0.0
+ - tiktoken>=0.7.0,<1.0.0
+ requires_python: '>=3.10.0,<4.0.0'
+- pypi: https://files.pythonhosted.org/packages/23/a2/562a6c2430085c2c29b23c1e1d12233bf41a64e9a9832eda7573af3666cf/langgraph-1.0.9-py3-none-any.whl
+ name: langgraph
+ version: 1.0.9
+ sha256: bce0d1f3e9a20434215a2a818395a58aedfc11c87bd6b52706c0db5c05ec44ec
+ requires_dist:
+ - langchain-core>=0.1
+ - langgraph-checkpoint>=2.1.0,<5.0.0
+ - langgraph-prebuilt>=1.0.8,<1.1.0
+ - langgraph-sdk>=0.3.0,<0.4.0
+ - pydantic>=2.7.4
+ - xxhash>=3.5.0
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/4a/de/ddd53b7032e623f3c7bcdab2b44e8bf635e468f62e10e5ff1946f62c9356/langgraph_checkpoint-4.0.0-py3-none-any.whl
+ name: langgraph-checkpoint
+ version: 4.0.0
+ sha256: 3fa9b2635a7c5ac28b338f631abf6a030c3b508b7b9ce17c22611513b589c784
+ requires_dist:
+ - langchain-core>=0.2.38
+ - ormsgpack>=1.12.0
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/dc/41/ec966424ad3f2ed3996d24079d3342c8cd6c0bd0653c12b2a917a685ec6c/langgraph_prebuilt-1.0.8-py3-none-any.whl
+ name: langgraph-prebuilt
+ version: 1.0.8
+ sha256: d16a731e591ba4470f3e313a319c7eee7dbc40895bcf15c821f985a3522a7ce0
+ requires_dist:
+ - langchain-core>=1.0.0
+ - langgraph-checkpoint>=2.1.0,<5.0.0
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/6a/4c/7a7510260fbda788efd13bf4650d3e7d80988118441ac811ec78e0aa03ac/langgraph_sdk-0.3.9-py3-none-any.whl
+ name: langgraph-sdk
+ version: 0.3.9
+ sha256: 94654294250c920789b6ed0d8a70c0117fed5736b61efc24ff647157359453c5
+ requires_dist:
+ - httpx>=0.25.2
+ - orjson>=3.11.5
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/41/a6/6025ccbdffe3533d444cdd0e989ff29bd273cb0ea6701c91dbbfeecc657a/langsmith-0.7.7-py3-none-any.whl
+ name: langsmith
+ version: 0.7.7
+ sha256: ef3d0aff77917bf3776368e90f387df5ffd7cb7cff11ece0ec4fd227e433b5de
+ requires_dist:
+ - httpx>=0.23.0,<1
+ - orjson>=3.9.14 ; platform_python_implementation != 'PyPy'
+ - packaging>=23.2
+ - pydantic>=2,<3
+ - requests-toolbelt>=1.0.0
+ - requests>=2.0.0
+ - uuid-utils>=0.12.0,<1.0
+ - xxhash>=3.0.0
+ - zstandard>=0.23.0
+ - claude-agent-sdk>=0.1.0 ; python_full_version >= '3.10' and extra == 'claude-agent-sdk'
+ - google-adk>=1.0.0 ; extra == 'google-adk'
+ - wrapt>=1.16.0 ; extra == 'google-adk'
+ - langsmith-pyo3>=0.1.0rc2 ; extra == 'langsmith-pyo3'
+ - openai-agents>=0.0.3 ; extra == 'openai-agents'
+ - opentelemetry-api>=1.30.0 ; extra == 'otel'
+ - opentelemetry-exporter-otlp-proto-http>=1.30.0 ; extra == 'otel'
+ - opentelemetry-sdk>=1.30.0 ; extra == 'otel'
+ - pytest>=7.0.0 ; extra == 'pytest'
+ - rich>=13.9.4 ; extra == 'pytest'
+ - vcrpy>=7.0.0 ; extra == 'pytest'
+ - websockets>=15.0 ; extra == 'sandbox'
+ - vcrpy>=7.0.0 ; extra == 'vcr'
+ requires_python: '>=3.10'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
+ sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf
+ md5: a92e310ae8dfc206ff449f362fc4217f
+ depends:
+ - __osx >=11.0
+ constrains:
+ - expat 2.7.4.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 68199
+ timestamp: 1771260020767
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7
+ md5: 43c04d9cb46ef176bb2a4c77e324d599
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 40979
+ timestamp: 1769456747661
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
+ sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e
+ md5: 009f0d956d7bfb00de86901d16e486c7
+ depends:
+ - __osx >=11.0
+ constrains:
+ - xz 5.8.2.*
+ license: 0BSD
+ purls: []
+ size: 92242
+ timestamp: 1768752982486
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
+ sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2
+ md5: 57c4be259f5e0b99a5983799a228ae55
+ depends:
+ - __osx >=11.0
+ license: BSD-2-Clause
+ license_family: BSD
+ purls: []
+ size: 73690
+ timestamp: 1769482560514
+- pypi: https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: librt
+ version: 0.8.1
+ sha256: 228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
+ sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167
+ md5: 4b0bf313c53c3e89692f020fb55d5f2c
+ depends:
+ - __osx >=11.0
+ - icu >=78.2,<79.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: blessing
+ purls: []
+ size: 909777
+ timestamp: 1768148320535
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b
+ md5: 369964e85dc26bfe78f41399b366c435
+ depends:
+ - __osx >=11.0
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ purls: []
+ size: 46438
+ timestamp: 1727963202283
+- 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/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl
+ name: markdown
+ version: 3.10.2
+ sha256: e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36
+ requires_dist:
+ - coverage ; extra == 'testing'
+ - pyyaml ; extra == 'testing'
+ - mkdocs>=1.6 ; extra == 'docs'
+ - mkdocs-nature>=0.6 ; extra == 'docs'
+ - mdx-gh-links>=0.2 ; extra == 'docs'
+ - mkdocstrings[python]>=0.28.3 ; extra == 'docs'
+ - mkdocs-gen-files ; extra == 'docs'
+ - mkdocs-section-index ; extra == 'docs'
+ - mkdocs-literate-nav ; extra == 'docs'
+ requires_python: '>=3.10'
+- 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'
+- pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ name: markupsafe
+ version: 3.0.3
+ sha256: c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl
+ name: matplotlib
+ version: 3.10.8
+ sha256: 32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b
+ 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/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-py3-none-any.whl
+ name: mcp
+ version: 1.26.0
+ sha256: 904a21c33c25aa98ddbeb47273033c435e595bbacfdb177f4bd87f6dceebe1ca
+ requires_dist:
+ - anyio>=4.5
+ - httpx-sse>=0.4
+ - httpx>=0.27.1
+ - jsonschema>=4.20.0
+ - pydantic-settings>=2.5.2
+ - pydantic>=2.11.0,<3.0.0
+ - pyjwt[crypto]>=2.10.1
+ - python-multipart>=0.0.9
+ - pywin32>=310 ; sys_platform == 'win32'
+ - sse-starlette>=1.6.1
+ - starlette>=0.27
+ - typing-extensions>=4.9.0
+ - typing-inspection>=0.4.1
+ - uvicorn>=0.31.1 ; sys_platform != 'emscripten'
+ - python-dotenv>=1.0.0 ; extra == 'cli'
+ - typer>=0.16.0 ; extra == 'cli'
+ - rich>=13.9.4 ; extra == 'rich'
+ - websockets>=15.0.1 ; extra == 'ws'
+ requires_python: '>=3.10'
+- 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'
+- pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl
+ name: mergedeep
+ version: 1.3.4
+ sha256: 70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307
+ requires_python: '>=3.6'
+- pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl
+ name: mkdocs
+ version: 1.6.1
+ sha256: db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e
+ requires_dist:
+ - click>=7.0
+ - colorama>=0.4 ; sys_platform == 'win32'
+ - ghp-import>=1.0
+ - importlib-metadata>=4.4 ; python_full_version < '3.10'
+ - jinja2>=2.11.1
+ - markdown>=3.3.6
+ - markupsafe>=2.0.1
+ - mergedeep>=1.3.4
+ - mkdocs-get-deps>=0.2.0
+ - packaging>=20.5
+ - pathspec>=0.11.1
+ - pyyaml-env-tag>=0.1
+ - pyyaml>=5.1
+ - watchdog>=2.0
+ - babel>=2.9.0 ; extra == 'i18n'
+ - babel==2.9.0 ; extra == 'min-versions'
+ - click==7.0 ; extra == 'min-versions'
+ - colorama==0.4 ; sys_platform == 'win32' and extra == 'min-versions'
+ - ghp-import==1.0 ; extra == 'min-versions'
+ - importlib-metadata==4.4 ; python_full_version < '3.10' and extra == 'min-versions'
+ - jinja2==2.11.1 ; extra == 'min-versions'
+ - markdown==3.3.6 ; extra == 'min-versions'
+ - markupsafe==2.0.1 ; extra == 'min-versions'
+ - mergedeep==1.3.4 ; extra == 'min-versions'
+ - mkdocs-get-deps==0.2.0 ; extra == 'min-versions'
+ - packaging==20.5 ; extra == 'min-versions'
+ - pathspec==0.11.1 ; extra == 'min-versions'
+ - pyyaml-env-tag==0.1 ; extra == 'min-versions'
+ - pyyaml==5.1 ; extra == 'min-versions'
+ - watchdog==2.0 ; extra == 'min-versions'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
+ name: mkdocs-autorefs
+ version: 1.4.4
+ sha256: 834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089
+ requires_dist:
+ - markdown>=3.3
+ - markupsafe>=2.0.1
+ - mkdocs>=1.1
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
+ name: mkdocs-get-deps
+ version: 0.2.0
+ sha256: 2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134
+ requires_dist:
+ - importlib-metadata>=4.3 ; python_full_version < '3.10'
+ - mergedeep>=1.3.4
+ - platformdirs>=2.2.0
+ - pyyaml>=5.1
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-py3-none-any.whl
+ name: mkdocs-material
+ version: 9.7.3
+ sha256: 37ebf7b4788c992203faf2e71900be3c197c70a4be9b0d72aed537b08a91dd9d
+ requires_dist:
+ - babel>=2.10
+ - backrefs>=5.7.post1
+ - colorama>=0.4
+ - jinja2>=3.1
+ - markdown>=3.2
+ - mkdocs-material-extensions>=1.3
+ - mkdocs>=1.6
+ - paginate>=0.5
+ - pygments>=2.16
+ - pymdown-extensions>=10.2
+ - requests>=2.30
+ - mkdocs-git-committers-plugin-2>=1.1 ; extra == 'git'
+ - mkdocs-git-revision-date-localized-plugin>=1.2.4 ; extra == 'git'
+ - cairosvg>=2.6 ; extra == 'imaging'
+ - pillow>=10.2 ; extra == 'imaging'
+ - mkdocs-minify-plugin>=0.7 ; extra == 'recommended'
+ - mkdocs-redirects>=1.2 ; extra == 'recommended'
+ - mkdocs-rss-plugin>=1.6 ; extra == 'recommended'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
+ name: mkdocs-material-extensions
+ version: 1.3.1
+ sha256: adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
+ name: mkdocstrings
+ version: 1.0.3
+ sha256: 0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046
+ requires_dist:
+ - jinja2>=3.1
+ - markdown>=3.6
+ - markupsafe>=1.1
+ - mkdocs>=1.6
+ - mkdocs-autorefs>=1.4
+ - pymdown-extensions>=6.3
+ - mkdocstrings-crystal>=0.3.4 ; extra == 'crystal'
+ - mkdocstrings-python-legacy>=0.2.1 ; extra == 'python-legacy'
+ - mkdocstrings-python>=1.16.2 ; extra == 'python'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
+ name: mkdocstrings-python
+ version: 2.0.3
+ sha256: 0b83513478bdfd803ff05aa43e9b1fca9dd22bcd9471f09ca6257f009bc5ee12
+ requires_dist:
+ - mkdocstrings>=0.30
+ - mkdocs-autorefs>=1.4
+ - griffelib>=2.0
+ - typing-extensions>=4.0 ; python_full_version < '3.11'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: mypy
+ version: 1.19.1
+ sha256: 804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718
+ requires_dist:
+ - typing-extensions>=4.6.0
+ - mypy-extensions>=1.0.0
+ - pathspec>=0.9.0
+ - tomli>=1.1.0 ; python_full_version < '3.11'
+ - librt>=0.6.2 ; platform_python_implementation != 'PyPy'
+ - psutil>=4.0 ; extra == 'dmypy'
+ - setuptools>=50 ; extra == 'mypyc'
+ - lxml ; extra == 'reports'
+ - pip ; extra == 'install-types'
+ - orjson ; extra == 'faster-cache'
+ requires_python: '>=3.9'
+- 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'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733
+ md5: 068d497125e4bf8a66bf707254fff5ae
+ depends:
+ - __osx >=11.0
+ license: X11 AND BSD-3-Clause
+ purls: []
+ size: 797030
+ timestamp: 1738196177597
+- 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/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
+ name: nodeenv
+ version: 1.10.0
+ sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*'
+- pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl
+ name: numcodecs
+ version: 0.16.5
+ sha256: 3832bd1b5af8bb3e413076b7d93318c8e7d7b68935006b9fa36ca057d1725a8f
+ requires_dist:
+ - numpy>=1.24
+ - typing-extensions
+ - msgpack ; extra == 'msgpack'
+ - zfpy>=1.0.0 ; extra == 'zfpy'
+ - pcodec>=0.3,<0.4 ; extra == 'pcodec'
+ - crc32c>=2.7 ; extra == 'crc32c'
+ - google-crc32c>=1.5 ; extra == 'google-crc32c'
+ - sphinx ; extra == 'docs'
+ - sphinx-issues ; extra == 'docs'
+ - pydata-sphinx-theme ; extra == 'docs'
+ - numpydoc ; extra == 'docs'
+ - coverage ; extra == 'test'
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - pyzstd ; extra == 'test'
+ - importlib-metadata ; extra == 'test-extras'
+ - crc32c ; extra == 'test-extras'
+ requires_python: '>=3.11'
+- pypi: https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl
+ name: numpy
+ version: 2.4.2
+ sha256: d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000
+ requires_python: '>=3.11'
+- pypi: https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl
+ name: openai
+ version: 2.24.0
+ sha256: fed30480d7d6c884303287bde864980a4b137b60553ffbcf9ab4a233b7a73d94
+ requires_dist:
+ - anyio>=3.5.0,<5
+ - distro>=1.7.0,<2
+ - httpx>=0.23.0,<1
+ - jiter>=0.10.0,<1
+ - pydantic>=1.9.0,<3
+ - sniffio
+ - tqdm>4
+ - typing-extensions>=4.11,<5
+ - aiohttp ; extra == 'aiohttp'
+ - httpx-aiohttp>=0.1.9 ; extra == 'aiohttp'
+ - numpy>=1 ; extra == 'datalib'
+ - pandas-stubs>=1.1.0.11 ; extra == 'datalib'
+ - pandas>=1.2.3 ; extra == 'datalib'
+ - websockets>=13,<16 ; extra == 'realtime'
+ - numpy>=2.0.2 ; extra == 'voice-helpers'
+ - sounddevice>=0.5.1 ; extra == 'voice-helpers'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
+ sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67
+ md5: f4f6ad63f98f64191c3e77c5f5f29d76
+ depends:
+ - __osx >=11.0
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 3104268
+ timestamp: 1769556384749
+- pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
+ name: orjson
+ version: 3.11.7
+ sha256: de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/94/16/24d18851334be09c25e87f74307c84950f18c324a4d3c0b41dabdbf19c29/ormsgpack-1.12.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ name: ormsgpack
+ version: 1.12.2
+ sha256: bc68dd5915f4acf66ff2010ee47c8906dc1cf07399b16f4089f8c71733f6e36c
+ requires_python: '>=3.10'
+- 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/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
+ name: paginate
+ version: 0.5.7
+ sha256: b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591
+ requires_dist:
+ - pytest ; extra == 'dev'
+ - tox ; extra == 'dev'
+ - black ; extra == 'lint'
+- pypi: https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ name: pandas
+ version: 2.3.3
+ sha256: 1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593
+ 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/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl
+ name: parso
+ version: 0.8.6
+ sha256: 2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff
+ requires_dist:
+ - pytest ; extra == 'testing'
+ - docopt ; extra == 'testing'
+ - flake8==5.0.4 ; extra == 'qa'
+ - zuban==0.5.1 ; 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/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
+ name: pathspec
+ version: 1.0.4
+ sha256: fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723
+ requires_dist:
+ - hyperscan>=0.7 ; extra == 'hyperscan'
+ - typing-extensions>=4 ; extra == 'optional'
+ - google-re2>=1.1 ; extra == 're2'
+ - pytest>=9 ; extra == 'tests'
+ - typing-extensions>=4.15 ; extra == 'tests'
+ 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/05/30/5db1236b0d6313f03ebf97f5e17cda9ca060f524b2fcc875149a8360b21c/pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: pillow
+ version: 12.1.1
+ sha256: f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202
+ 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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
+ name: platformdirs
+ version: 4.9.2
+ sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/f6/1e/12fe7c40cd2099a1f454518754ed229b01beaf3bbb343127f0cc13ce6c22/plotext-5.3.2-py3-none-any.whl
+ name: plotext
+ version: 5.3.2
+ sha256: 394362349c1ddbf319548cfac17ca65e6d5dfc03200c40dfdc0503b3e95a2283
+ requires_dist:
+ - shtab ; extra == 'completion'
+ - pillow>=8.4 ; extra == 'image'
+ - ffpyplayer>=4.3.5 ; extra == 'video'
+ - opencv-python>=4.5.5 ; extra == 'video'
+ - pafy>=0.5.5 ; extra == 'video'
+ - pillow>=8.4 ; extra == 'video'
+ - youtube-dl==2020.12.2 ; extra == 'video'
+ requires_python: '>=3.5'
+- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
+ name: pluggy
+ version: 1.6.0
+ sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
+ requires_dist:
+ - pre-commit ; extra == 'dev'
+ - tox ; extra == 'dev'
+ - pytest ; extra == 'testing'
+ - pytest-benchmark ; extra == 'testing'
+ - coverage ; extra == 'testing'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl
+ name: pre-commit
+ version: 4.5.1
+ sha256: 3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77
+ requires_dist:
+ - cfgv>=2.0.0
+ - identify>=1.0.0
+ - nodeenv>=0.11.1
+ - pyyaml>=5.1
+ - virtualenv>=20.10.0
+ requires_python: '>=3.10'
+- 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/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl
+ name: psutil
+ version: 7.2.2
+ sha256: 1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979
+ requires_dist:
+ - psleak ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-instafail ; 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'
+ - pyreadline3 ; os_name == 'nt' and extra == 'dev'
+ - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev'
+ - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev'
+ - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev'
+ - psleak ; extra == 'test'
+ - pytest ; extra == 'test'
+ - pytest-instafail ; extra == 'test'
+ - pytest-xdist ; extra == 'test'
+ - setuptools ; extra == 'test'
+ - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test'
+ - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test'
+ - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test'
+ requires_python: '>=3.6'
+- 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/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl
+ name: pyarrow
+ version: 23.0.1
+ sha256: 5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl
+ name: pycparser
+ version: '3.0'
+ sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
+ name: pydantic
+ version: 2.12.5
+ sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d
+ requires_dist:
+ - annotated-types>=0.6.0
+ - pydantic-core==2.41.5
+ - typing-extensions>=4.14.1
+ - typing-inspection>=0.4.2
+ - email-validator>=2.0.0 ; extra == 'email'
+ - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl
+ name: pydantic-core
+ version: 2.41.5
+ sha256: 1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14
+ requires_dist:
+ - typing-extensions>=4.14.1
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl
+ name: pydantic-settings
+ version: 2.13.1
+ sha256: d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237
+ requires_dist:
+ - pydantic>=2.7.0
+ - python-dotenv>=0.21.0
+ - typing-inspection>=0.4.0
+ - boto3-stubs[secretsmanager] ; extra == 'aws-secrets-manager'
+ - boto3>=1.35.0 ; extra == 'aws-secrets-manager'
+ - azure-identity>=1.16.0 ; extra == 'azure-key-vault'
+ - azure-keyvault-secrets>=4.8.0 ; extra == 'azure-key-vault'
+ - google-cloud-secret-manager>=2.23.1 ; extra == 'gcp-secret-manager'
+ - tomli>=2.0.1 ; extra == 'toml'
+ - pyyaml>=6.0.1 ; extra == 'yaml'
+ requires_python: '>=3.10'
+- 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/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl
+ name: pyjwt
+ version: 2.11.0
+ sha256: 94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469
+ requires_dist:
+ - cryptography>=3.4.0 ; extra == 'crypto'
+ - coverage[toml]==7.10.7 ; extra == 'dev'
+ - cryptography>=3.4.0 ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - pytest>=8.4.2,<9.0.0 ; extra == 'dev'
+ - sphinx ; extra == 'dev'
+ - sphinx-rtd-theme ; extra == 'dev'
+ - zope-interface ; extra == 'dev'
+ - sphinx ; extra == 'docs'
+ - sphinx-rtd-theme ; extra == 'docs'
+ - zope-interface ; extra == 'docs'
+ - coverage[toml]==7.10.7 ; extra == 'tests'
+ - pytest>=8.4.2,<9.0.0 ; extra == 'tests'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl
+ name: pymdown-extensions
+ version: '10.21'
+ sha256: 91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f
+ requires_dist:
+ - markdown>=3.6
+ - pyyaml
+ - pygments>=2.19.1 ; extra == 'extra'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl
+ name: pyparsing
+ version: 3.3.2
+ sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d
+ requires_dist:
+ - railroad-diagrams ; extra == 'diagrams'
+ - jinja2 ; extra == 'diagrams'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/ad/b4/a9430e72bfc3c458e1fcf8363890994e483052ab052ed93912be4e5b32c8/pystac-1.14.3-py3-none-any.whl
+ name: pystac
+ version: 1.14.3
+ sha256: 2f60005f521d541fb801428307098f223c14697b3faf4d2f0209afb6a43f39e5
+ requires_dist:
+ - python-dateutil>=2.7.0
+ - jinja2<4.0 ; extra == 'jinja2'
+ - orjson>=3.5 ; extra == 'orjson'
+ - urllib3>=2.6.3 ; extra == 'urllib3'
+ - jsonschema~=4.18 ; extra == 'validation'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl
+ name: pytest
+ version: 9.0.2
+ sha256: 711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b
+ requires_dist:
+ - colorama>=0.4 ; sys_platform == 'win32'
+ - exceptiongroup>=1 ; python_full_version < '3.11'
+ - iniconfig>=1.0.1
+ - packaging>=22
+ - pluggy>=1.5,<2
+ - pygments>=2.7.2
+ - tomli>=1 ; python_full_version < '3.11'
+ - argcomplete ; extra == 'dev'
+ - attrs>=19.2 ; extra == 'dev'
+ - hypothesis>=3.56 ; extra == 'dev'
+ - mock ; extra == 'dev'
+ - requests ; extra == 'dev'
+ - setuptools ; extra == 'dev'
+ - xmlschema ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl
+ name: pytest-asyncio
+ version: 1.3.0
+ sha256: 611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5
+ requires_dist:
+ - backports-asyncio-runner>=1.1,<2 ; python_full_version < '3.11'
+ - pytest>=8.2,<10
+ - typing-extensions>=4.12 ; python_full_version < '3.13'
+ - sphinx>=5.3 ; extra == 'docs'
+ - sphinx-rtd-theme>=1 ; extra == 'docs'
+ - coverage>=6.2 ; extra == 'testing'
+ - hypothesis>=5.7.1 ; extra == 'testing'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl
+ name: pytest-cov
+ version: 7.0.0
+ sha256: 3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861
+ requires_dist:
+ - coverage[toml]>=7.10.6
+ - pluggy>=1.2
+ - pytest>=7
+ - process-tests ; extra == 'testing'
+ - pytest-xdist ; extra == 'testing'
+ - virtualenv ; extra == 'testing'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda
+ build_number: 101
+ sha256: fccce2af62d11328d232df9f6bbf63464fd45f81f718c661757f9c628c4378ce
+ md5: 753c8d0447677acb7ddbcc6e03e82661
+ depends:
+ - __osx >=11.0
+ - bzip2 >=1.0.8,<2.0a0
+ - libexpat >=2.7.3,<3.0a0
+ - libffi >=3.5.2,<3.6.0a0
+ - liblzma >=5.8.2,<6.0a0
+ - libmpdec >=4.0.0,<5.0a0
+ - libsqlite >=3.51.2,<4.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - ncurses >=6.5,<7.0a0
+ - openssl >=3.5.5,<4.0a0
+ - python_abi 3.14.* *_cp314
+ - readline >=8.3,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ - zstd >=1.5.7,<1.6.0a0
+ license: Python-2.0
+ purls: []
+ size: 13522698
+ timestamp: 1770675365241
+ python_site_packages_path: lib/python3.14/site-packages
+- 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.*'
+- pypi: https://files.pythonhosted.org/packages/c0/5c/e2b18e66d73b69de87c198cba8744934b91247d8ab657a7253b591f4cf23/python_discovery-1.0.0-py3-none-any.whl
+ name: python-discovery
+ version: 1.0.0
+ sha256: 7cd9eaf3b1845875e22084f92d0ec2e309be2a3f839a9eb52980d647b72bd891
+ requires_dist:
+ - filelock>=3.15.4
+ - platformdirs>=4.3.6,<5
+ - furo>=2025.12.19 ; extra == 'docs'
+ - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs'
+ - sphinx>=9.1 ; extra == 'docs'
+ - sphinxcontrib-mermaid>=2 ; extra == 'docs'
+ - covdefaults>=2.3 ; extra == 'testing'
+ - coverage>=7.5.4 ; extra == 'testing'
+ - pytest-mock>=3.14 ; extra == 'testing'
+ - pytest>=8.3.5 ; extra == 'testing'
+ - setuptools>=75.1 ; extra == 'testing'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl
+ name: python-dotenv
+ version: 1.2.1
+ sha256: b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61
+ requires_dist:
+ - click>=5.0 ; extra == 'cli'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl
+ name: python-multipart
+ version: 0.0.22
+ sha256: 2b2cd894c83d21bf49d702499531c7bafd057d730c201782048f7945d82de155
+ requires_python: '>=3.10'
+- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
+ build_number: 8
+ sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5
+ md5: 0539938c55b6b1a59b560e843ad864a4
+ constrains:
+ - python 3.14.* *_cp314
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 6989
+ timestamp: 1752805904792
+- pypi: https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: pytokens
+ version: 0.4.1
+ sha256: 4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321
+ requires_dist:
+ - black ; extra == 'dev'
+ - build ; extra == 'dev'
+ - mypy ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - setuptools ; extra == 'dev'
+ - tox ; extra == 'dev'
+ - twine ; extra == 'dev'
+ - wheel ; extra == 'dev'
+ requires_python: '>=3.8'
+- 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/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
+ name: pyyaml
+ version: 6.0.3
+ sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl
+ name: pyyaml-env-tag
+ version: '1.1'
+ sha256: 17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04
+ requires_dist:
+ - pyyaml
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl
+ name: pyzmq
+ version: 27.1.0
+ sha256: 452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc
+ requires_dist:
+ - cffi ; implementation_name == 'pypy'
+ requires_python: '>=3.8'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
+ sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477
+ md5: f8381319127120ce51e081dce4865cf4
+ depends:
+ - __osx >=11.0
+ - ncurses >=6.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ purls: []
+ size: 313930
+ timestamp: 1765813902568
+- 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/ef/08/180d1826c3d7065200a5168c6b993a44947395c7bb6e04b2c2a219c34225/regex-2026.2.19-cp314-cp314-macosx_11_0_arm64.whl
+ name: regex
+ version: 2026.2.19
+ sha256: 997862c619994c4a356cb7c3592502cbd50c2ab98da5f61c5c871f10f22de7e5
+ 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/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl
+ name: requests-toolbelt
+ version: 1.0.0
+ sha256: cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06
+ requires_dist:
+ - requests>=2.0.1,<3.0.0
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*'
+- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl
+ name: rich
+ version: 14.3.3
+ sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d
+ 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/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: rpds-py
+ version: 0.30.0
+ sha256: ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl
+ name: ruamel-yaml
+ version: 0.19.1
+ sha256: 27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93
+ requires_dist:
+ - ruamel-yaml-clib ; platform_python_implementation == 'CPython' and extra == 'oldlibyaml'
+ - ruamel-yaml-clibz>=0.3.7 ; platform_python_implementation == 'CPython' and extra == 'libyaml'
+ - ruamel-yaml-jinja2>=0.2 ; extra == 'jinja2'
+ - ryd ; extra == 'docs'
+ - mercurial>5.7 ; extra == 'docs'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/2d/c1/e0532d7f9c9e0b14c46f61b14afd563298b8b83f337b6789ddd987e46121/ruff-0.15.2-py3-none-macosx_11_0_arm64.whl
+ name: ruff
+ version: 0.15.2
+ sha256: e36dee3a64be0ebd23c86ffa3aa3fd3ac9a712ff295e192243f814a830b6bd87
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl
+ name: s3transfer
+ version: 0.16.0
+ sha256: 18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe
+ 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/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl
+ name: scipy
+ version: 1.17.1
+ sha256: 45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9
+ requires_dist:
+ - numpy>=1.26.4,<2.7
+ - 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'
+ - tabulate ; extra == 'doc'
+ - click<8.3.0 ; extra == 'dev'
+ - spin ; extra == 'dev'
+ - mypy==1.10.0 ; extra == 'dev'
+ - typing-extensions ; extra == 'dev'
+ - types-psutil ; extra == 'dev'
+ - pycodestyle ; extra == 'dev'
+ - ruff>=0.12.0 ; extra == 'dev'
+ - cython-lint>=0.12.2 ; extra == 'dev'
+ requires_python: '>=3.11'
+- 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'
+- pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
+ name: semver
+ version: 3.0.4
+ sha256: 9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl
+ name: setuptools
+ version: 82.0.0
+ sha256: 70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0
+ requires_dist:
+ - pytest>=6,!=8.1.* ; extra == 'test'
+ - virtualenv>=13.0.0 ; extra == 'test'
+ - wheel>=0.44.0 ; extra == 'test'
+ - pip>=19.1 ; extra == 'test'
+ - packaging>=24.2 ; extra == 'test'
+ - jaraco-envs>=2.2 ; extra == 'test'
+ - pytest-xdist>=3 ; extra == 'test'
+ - jaraco-path>=3.7.2 ; extra == 'test'
+ - build[virtualenv]>=1.0.3 ; extra == 'test'
+ - filelock>=3.4.0 ; extra == 'test'
+ - ini2toml[lite]>=0.14 ; extra == 'test'
+ - tomli-w>=1.0.0 ; extra == 'test'
+ - pytest-timeout ; extra == 'test'
+ - pytest-perf ; sys_platform != 'cygwin' and extra == 'test'
+ - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test'
+ - pytest-home>=0.5 ; extra == 'test'
+ - pytest-subprocess ; extra == 'test'
+ - pyproject-hooks!=1.1 ; extra == 'test'
+ - jaraco-test>=5.5 ; extra == 'test'
+ - sphinx>=3.5 ; extra == 'doc'
+ - jaraco-packaging>=9.3 ; extra == 'doc'
+ - rst-linker>=1.9 ; extra == 'doc'
+ - furo ; extra == 'doc'
+ - sphinx-lint ; extra == 'doc'
+ - jaraco-tidelift>=1.4 ; extra == 'doc'
+ - pygments-github-lexers==0.0.5 ; extra == 'doc'
+ - sphinx-favicon ; extra == 'doc'
+ - sphinx-inline-tabs ; extra == 'doc'
+ - sphinx-reredirects ; extra == 'doc'
+ - sphinxcontrib-towncrier ; extra == 'doc'
+ - sphinx-notfound-page>=1,<2 ; extra == 'doc'
+ - pyproject-hooks!=1.1 ; extra == 'doc'
+ - towncrier<24.7 ; extra == 'doc'
+ - packaging>=24.2 ; extra == 'core'
+ - more-itertools>=8.8 ; extra == 'core'
+ - jaraco-text>=3.7 ; extra == 'core'
+ - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core'
+ - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core'
+ - wheel>=0.43.0 ; extra == 'core'
+ - platformdirs>=4.2.2 ; extra == 'core'
+ - jaraco-functools>=4 ; extra == 'core'
+ - more-itertools ; extra == 'core'
+ - pytest-checkdocs>=2.4 ; extra == 'check'
+ - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check'
+ - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check'
+ - pytest-cov ; extra == 'cover'
+ - pytest-enabler>=2.2 ; extra == 'enabler'
+ - pytest-mypy ; extra == 'type'
+ - mypy==1.18.* ; extra == 'type'
+ - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type'
+ - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl
+ name: shellingham
+ version: 1.5.4
+ sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686
+ requires_python: '>=3.7'
+- 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.*'
+- pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
+ name: sniffio
+ version: 1.3.1
+ sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/96/7f/832f015020844a8b8f7a9cbc103dd76ba8e3875004c41e08440ea3a2b41a/sse_starlette-3.2.0-py3-none-any.whl
+ name: sse-starlette
+ version: 3.2.0
+ sha256: 5876954bd51920fc2cd51baee47a080eb88a37b5b784e615abb0b283f801cdbf
+ requires_dist:
+ - starlette>=0.49.1
+ - anyio>=4.7.0
+ - uvicorn>=0.34.0 ; extra == 'examples'
+ - fastapi>=0.115.12 ; extra == 'examples'
+ - sqlalchemy[asyncio]>=2.0.41 ; extra == 'examples'
+ - aiosqlite>=0.21.0 ; extra == 'examples'
+ - uvicorn>=0.34.0 ; extra == 'uvicorn'
+ - granian>=2.3.1 ; extra == 'granian'
+ - daphne>=4.2.0 ; extra == 'daphne'
+ requires_python: '>=3.9'
+- 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/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl
+ name: starlette
+ version: 0.52.1
+ sha256: 0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74
+ requires_dist:
+ - anyio>=3.6.2,<5
+ - typing-extensions>=4.10.0 ; python_full_version < '3.13'
+ - httpx>=0.27.0,<0.29.0 ; extra == 'full'
+ - itsdangerous ; extra == 'full'
+ - jinja2 ; extra == 'full'
+ - python-multipart>=0.0.18 ; extra == 'full'
+ - pyyaml ; extra == 'full'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl
+ name: structlog
+ version: 25.5.0
+ sha256: a8453e9b9e636ec59bd9e79bbd4a72f025981b3ba0f5837aebf48f02f37a7f9f
+ requires_dist:
+ - typing-extensions ; python_full_version < '3.11'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl
+ name: tenacity
+ version: 9.1.4
+ sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55
+ requires_dist:
+ - reno ; extra == 'doc'
+ - sphinx ; extra == 'doc'
+ - pytest ; extra == 'test'
+ - tornado>=4.5 ; extra == 'test'
+ - typeguard ; extra == 'test'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: tiktoken
+ version: 0.12.0
+ sha256: da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88
+ requires_dist:
+ - regex>=2022.1.18
+ - requests>=2.26.0
+ - blobfile>=2 ; extra == 'blobfile'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3
+ md5: a9d86bc62f39b94c4661716624eb21b0
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: TCL
+ license_family: BSD
+ purls: []
+ size: 3127137
+ timestamp: 1769460817696
+- 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/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl
+ name: tornado
+ version: 6.5.4
+ sha256: d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl
+ name: tqdm
+ version: 4.67.3
+ sha256: ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf
+ requires_dist:
+ - colorama ; sys_platform == 'win32'
+ - importlib-metadata ; python_full_version < '3.8'
+ - 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/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl
+ name: typer
+ version: 0.24.1
+ sha256: 112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e
+ requires_dist:
+ - click>=8.2.1
+ - shellingham>=1.3.0
+ - rich>=12.3.0
+ - annotated-doc>=0.0.2
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
+ name: typing-extensions
+ version: 4.15.0
+ sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
+ name: typing-inspection
+ version: 0.4.2
+ sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7
+ requires_dist:
+ - typing-extensions>=4.12.0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl
+ name: tzdata
+ version: '2025.3'
+ sha256: 06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1
+ requires_python: '>=2'
+- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c
+ md5: ad659d0a2b3e47e38d829aa8cad2d610
+ license: LicenseRef-Public-Domain
+ purls: []
+ size: 119135
+ timestamp: 1767016325805
+- pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
+ name: urllib3
+ version: 2.6.3
+ sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
+ requires_dist:
+ - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli'
+ - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli'
+ - h2>=4,<5 ; extra == 'h2'
+ - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks'
+ - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/43/b7/add4363039a34506a58457d96d4aa2126061df3a143eb4d042aedd6a2e76/uuid_utils-0.14.1-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
+ name: uuid-utils
+ version: 0.14.1
+ sha256: 93a3b5dc798a54a1feb693f2d1cb4cf08258c32ff05ae4929b5f0a2ca624a4f0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl
+ name: uvicorn
+ version: 0.41.0
+ sha256: 29e35b1d2c36a04b9e180d4007ede3bcb32a85fbdfd6c6aeb3f26839de088187
+ requires_dist:
+ - click>=7.0
+ - h11>=0.8
+ - typing-extensions>=4.0 ; python_full_version < '3.11'
+ - colorama>=0.4 ; sys_platform == 'win32' and extra == 'standard'
+ - httptools>=0.6.3 ; extra == 'standard'
+ - python-dotenv>=0.13 ; extra == 'standard'
+ - pyyaml>=5.1 ; extra == 'standard'
+ - uvloop>=0.15.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' and extra == 'standard'
+ - watchfiles>=0.20 ; extra == 'standard'
+ - websockets>=10.4 ; extra == 'standard'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/90/cd/b62bdeaa429758aee8de8b00ac0dd26593a9de93d302bff3d21439e9791d/uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl
+ name: uvloop
+ version: 0.22.1
+ sha256: 3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142
+ requires_dist:
+ - aiohttp>=3.10.5 ; extra == 'test'
+ - flake8~=6.1 ; extra == 'test'
+ - psutil ; extra == 'test'
+ - pycodestyle~=2.11.0 ; extra == 'test'
+ - pyopenssl~=25.3.0 ; extra == 'test'
+ - mypy>=0.800 ; extra == 'test'
+ - setuptools>=60 ; extra == 'dev'
+ - cython~=3.0 ; extra == 'dev'
+ - sphinx~=4.1.2 ; extra == 'docs'
+ - sphinxcontrib-asyncio~=0.3.0 ; extra == 'docs'
+ - sphinx-rtd-theme~=0.5.2 ; extra == 'docs'
+ requires_python: '>=3.8.1'
+- pypi: https://files.pythonhosted.org/packages/29/d1/3f62e4f9577b28c352c11623a03fb916096d5c131303d4861b4914481b6b/virtualenv-21.0.0-py3-none-any.whl
+ name: virtualenv
+ version: 21.0.0
+ sha256: d44e70637402c7f4b10f48491c02a6397a3a187152a70cba0b6bc7642d69fb05
+ requires_dist:
+ - distlib>=0.3.7,<1
+ - filelock>=3.24.2,<4 ; python_full_version >= '3.10'
+ - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10'
+ - importlib-metadata>=6.6 ; python_full_version < '3.8'
+ - platformdirs>=3.9.1,<5
+ - python-discovery>=1
+ - typing-extensions>=4.13.2 ; python_full_version < '3.11'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
+ name: watchdog
+ version: 6.0.0
+ sha256: 9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282
+ requires_dist:
+ - pyyaml>=3.10 ; extra == 'watchmedo'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/7b/22/16d5331eaed1cb107b873f6ae1b69e9ced582fcf0c59a50cd84f403b1c32/watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl
+ name: watchfiles
+ version: 1.1.1
+ sha256: 39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd
+ requires_dist:
+ - anyio>=3.0.0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl
+ name: wcwidth
+ version: 0.6.0
+ sha256: 1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: websockets
+ version: '16.0'
+ sha256: fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl
+ name: xarray
+ version: 2026.2.0
+ sha256: e927d7d716ea71dea78a13417970850a640447d8dd2ceeb65c5687f6373837c9
+ 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>=1.4.0 ; 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>=3.8 ; 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/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: xxhash
+ version: 3.6.0
+ sha256: a54844be970d3fc22630b32d515e79a90d0a3ddb2644d8d7402e3c4c8da61405
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl
+ name: zarr
+ version: 3.1.5
+ sha256: 29cd905afb6235b94c09decda4258c888fcb79bb6c862ef7c0b8fe009b5c8563
+ requires_dist:
+ - donfig>=0.8
+ - google-crc32c>=1.5
+ - numcodecs>=0.14
+ - numpy>=1.26
+ - packaging>=22.0
+ - typing-extensions>=4.9
+ - typer ; extra == 'cli'
+ - astroid<4 ; extra == 'docs'
+ - griffe-inherited-docstrings ; extra == 'docs'
+ - markdown-exec[ansi] ; extra == 'docs'
+ - mike>=2.1.3 ; extra == 'docs'
+ - mkdocs-material[imaging]>=9.6.14 ; extra == 'docs'
+ - mkdocs-redirects>=1.2.0 ; extra == 'docs'
+ - mkdocs>=1.6.1 ; extra == 'docs'
+ - mkdocstrings-python>=1.16.10 ; extra == 'docs'
+ - mkdocstrings>=0.29.1 ; extra == 'docs'
+ - numcodecs[msgpack] ; extra == 'docs'
+ - pytest ; extra == 'docs'
+ - rich ; extra == 'docs'
+ - ruff ; extra == 'docs'
+ - s3fs>=2023.10.0 ; 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/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: zstandard
+ version: 0.25.0
+ sha256: 05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f
+ requires_dist:
+ - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi'
+ - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9
+ md5: ab136e4c34e97f34fb621d2592a393d8
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 433413
+ timestamp: 1764777166076
diff --git a/plans/copernicus-backend-v2.md b/plans/copernicus-backend-v2.md
new file mode 100644
index 0000000..c535cd6
--- /dev/null
+++ b/plans/copernicus-backend-v2.md
@@ -0,0 +1,254 @@
+# Copernicus Marine Backend — Refined Plan (v2)
+
+MVP focus. **Replace ERA5 with Copernicus for now.** ERA5 files stay untouched but unwired.
+Multi-backend routing is the next step after this works.
+
+---
+
+## Current architecture (ERA5)
+
+### Module map
+
+```mermaid
+graph TD
+ subgraph "Entry points"
+ CLI[main.py]
+ Web[web/app.py]
+ MCP[server.py]
+ end
+
+ subgraph "tools/"
+ Reg["__init__.py
get_all_tools()"]
+ E5T["era5.py
era5_tool
ERA5RetrievalArgs (Pydantic)"]
+ REPL["repl.py
PythonREPLTool"]
+ RT["routing.py
routing_tool"]
+ AG["analysis_guide.py
analysis_guide_tool"]
+ end
+
+ subgraph "eurus/"
+ RET["retrieval.py
retrieve_era5_data()"]
+ MEM["memory.py
MemoryManager
DatasetRecord
SmartConversationMemory"]
+ CFG["config.py
ERA5Variable
GeographicRegion
AgentConfig
VARIABLE_ALIASES
AGENT_SYSTEM_PROMPT"]
+ end
+
+ subgraph "External"
+ AL[("Arraylake / S3
ERA5 Zarr store")]
+ DISK[("Local disk
./data/*.zarr cache")]
+ end
+
+ CLI & Web & MCP --> Reg
+ Reg --> E5T & REPL & RT & AG
+ E5T --> RET
+ RET --> CFG
+ RET --> MEM
+ RET --> AL
+ RET --> DISK
+ MEM --> DISK
+```
+
+### Variable alias wiring (ERA5)
+
+`config.py` holds two structures:
+
+- **`ERA5_VARIABLES`** — `dict[short_name → ERA5Variable]`
+ Canonical catalog. `ERA5Variable` carries `short_name`, `long_name`, `units`, `description`, `category`, `typical_range`, `colormap`.
+
+- **`VARIABLE_ALIASES`** — `dict[friendly_name → short_name]`
+ e.g. `"sea_surface_temperature" → "sst"`, `"temperature" → "t2"`.
+
+`get_short_name(variable_id)` checks aliases first, then falls back to the main dict, then returns the input as-is.
+The Pydantic validator in `tools/era5.py` calls `get_short_name()` to normalise before the tool runs.
+The LLM itself never needs to know about aliases — the system prompt lists short names; the validator is just a safety net.
+
+### Sequence: user prompt → cached Zarr
+
+```mermaid
+sequenceDiagram
+ actor User
+ participant Agent as LangChain Agent
+ participant Tool as tools/era5.py
+ participant Ret as retrieval.py
+ participant AL as Arraylake (S3)
+ participant Disk as Local ./data/
+
+ User->>Agent: "Get SST for North Atlantic 2023"
+ Agent->>Tool: retrieve_era5_data(variable_id="sst", start="2023-01-01", ...)
+ Tool->>Tool: _auto_detect_query_type() → "temporal"
+ Tool->>Ret: _retrieve_era5_data(query_type="temporal", variable_id="sst", ...)
+ Ret->>Ret: read ARRAYLAKE_API_KEY from env
+ Ret->>Disk: exists era5_sst_temporal_20230101_20231231_north_atlantic.zarr?
+ alt Cache hit
+ Disk-->>Ret: yes
+ Ret-->>Agent: "CACHE HIT — Path: ./data/era5_sst_..."
+ else Cache miss
+ Ret->>AL: Client(token=api_key).get_repo("earthmover-public/era5-surface-aws")
+ AL-->>Ret: session.store
+ Ret->>AL: xr.open_dataset(session.store, engine="zarr", group="temporal")
+ AL-->>Ret: lazy xarray.Dataset
+ Ret->>Ret: .sel(time=..., latitude=..., longitude=...)
+ Ret->>Ret: .load()
+ Ret->>Disk: .to_zarr(local_path)
+ Ret->>Ret: memory.register_dataset(...)
+ Ret-->>Agent: "SUCCESS — Path: ./data/era5_sst_..."
+ end
+ Agent->>Tool: python_repl(...) — analyse / plot
+ Agent-->>User: response + plots
+```
+
+Key points:
+- **Credentials**: `ARRAYLAKE_API_KEY` read from env (checked explicitly; returns error string if missing)
+- **No query_type exposed to LLM** — auto-detected from time span × area
+- **Cache key** = deterministic filename from variable + dates + bounds; checked before any network call
+- **Return type**: always a plain string (success or error); no exceptions bubble up
+
+---
+
+## Where Copernicus slots in
+
+### Decision: flat file, not `backends/` subpackage
+
+ERA5 lives at `eurus/retrieval.py`. Copernicus should live at `eurus/copernicus.py` — same level, same pattern. A `backends/` subpackage adds indirection with no MVP benefit; can be refactored later if a third backend appears.
+
+### Updated module map (after adding Copernicus)
+
+```mermaid
+graph TD
+ subgraph "tools/"
+ Reg["__init__.py
get_all_tools()"]
+ E5T["era5.py
era5_tool"]
+ CMT["copernicus.py ← NEW
copernicus_tool"]
+ REPL["repl.py"]
+ RT["routing.py"]
+ AG["analysis_guide.py"]
+ end
+
+ subgraph "eurus/"
+ RET["retrieval.py
retrieve_era5_data()"]
+ COP["copernicus.py ← NEW
COPERNICUS_CATALOG
COPERNICUS_ALIASES
retrieve_copernicus_data()"]
+ MEM["memory.py
MemoryManager"]
+ CFG["config.py
(unchanged for MVP)"]
+ end
+
+ subgraph "External"
+ AL[("Arraylake / S3
ERA5")]
+ CMEMS[("Copernicus Marine
GLORYS12 / DUACS / WAVERYS")]
+ DISK[("Local disk
./data/*.zarr")]
+ end
+
+ Reg --> E5T & CMT & REPL & RT & AG
+ E5T --> RET --> AL
+ CMT --> COP --> CMEMS
+ RET & COP --> MEM
+ RET & COP --> DISK
+ RET --> CFG
+```
+
+---
+
+## Concrete decisions (from feedback)
+
+| Topic | Decision |
+|---|---|
+| Credentials | Assume `copernicusmarine login` already run → `~/.copernicusmarine` exists. No env-var check, no helpful error. Just let the toolbox fail naturally. |
+| `service=` kwarg | Auto-detected: `arco-time-series` when time>1d AND area<900sq°, else `arco-geo-series` (mirrors ERA5 temporal/spatial logic) |
+| Variable aliases | Local `COPERNICUS_ALIASES` dict inside `eurus/copernicus.py`; not mixed into `config.py` |
+| Depth/`my` vs `myint` | MVP: hardcode `my` dataset IDs only. `myint` fallback deferred. |
+| System prompt | Add a minimal Copernicus section to `AGENT_SYSTEM_PROMPT` in `config.py` before first test session |
+| `backends/` subpackage | No. Flat file: `eurus/copernicus.py` + `tools/copernicus.py` |
+
+---
+
+## Depth handling
+
+Only four GLORYS12 variables have a depth dimension: `thetao`, `so`, `uo`, `vo`.
+The tool exposes `depth_m: Optional[float] = None` (defaults to surface ≈ 0.5 m).
+
+The LLM learns the mapping from the **tool description string** and the **system prompt**:
+
+```
+depth_m: depth in metres (default None = surface, ~0.5 m).
+For bottom temperature use variable='bottomT' (no depth_m needed).
+For mixed-layer depth use variable='mlotst'.
+To average over the mixed layer: first retrieve mlotst, then retrieve
+thetao with depth_m spanning 0→mld and compute the mean in python_repl.
+```
+
+So "surface temperature" → `thetao`, `depth_m=None`
+"bottom temperature" → `bottomT`, `depth_m` ignored
+"mixed-layer salinity" → agent retrieves `mlotst` first, then `so`, averages in REPL
+
+---
+
+## Catalog (MVP)
+
+```python
+@dataclass(frozen=True)
+class CopernicusVariable:
+ dataset_id: str
+ var_name: str # internal name in the CMEMS dataset
+ long_name: str
+ units: str
+ has_depth: bool = False
+```
+
+| key | dataset_id | var_name | has_depth | long_name |
+|---|---|---|---|---|
+| `thetao` | `cmems_mod_glo_phy_my_0.083deg_P1D-m` | `thetao` | yes | Sea water potential temperature |
+| `so` | same | `so` | yes | Sea water salinity |
+| `uo` | same | `uo` | yes | Eastward sea water velocity |
+| `vo` | same | `vo` | yes | Northward sea water velocity |
+| `zos` | same | `zos` | no | Sea surface height above geoid |
+| `mlotst` | same | `mlotst` | no | Mixed layer depth (sigma-theta) |
+| `siconc` | same | `siconc` | no | Sea ice area fraction |
+| `sithick` | same | `sithick` | no | Sea ice thickness |
+| `bottomT` | same | `bottomT` | no | Sea floor potential temperature |
+| `sla` | `cmems_obs-sl_glo_phy-ssh_my_allsat-l4-duacs-0.25deg_P1D` | `sla` | no | Sea level anomaly |
+| `adt` | same | `adt` | no | Absolute dynamic topography |
+| `ugos` | same | `ugos` | no | Geostrophic eastward velocity |
+| `vgos` | same | `vgos` | no | Geostrophic northward velocity |
+| `VHM0` | `cmems_mod_glo_wav_my_0.2deg_PT3H-i` | `VHM0` | no | Significant wave height |
+| `VMDR` | same | `VMDR` | no | Mean wave direction |
+| `VTM10` | same | `VTM10` | no | Mean wave period |
+
+Aliases in `COPERNICUS_ALIASES` (local to `eurus/copernicus.py`):
+`"temperature" → "thetao"`, `"salinity" → "so"`, `"sea_level" → "zos"`,
+`"wave_height" → "VHM0"`, `"mld" → "mlotst"`, `"sea_ice" → "siconc"`, etc.
+
+---
+
+## Files to create / modify
+
+### New (create)
+
+**`src/eurus/copernicus.py`**
+- `CopernicusVariable` dataclass, `COPERNICUS_CATALOG`, `COPERNICUS_ALIASES`
+- `generate_filename()` → `cmems_{var}_{start}_{end}_{region_tag}.zarr`
+- `retrieve_copernicus_data(variable_id, start_date, end_date, min/max lat/lon, depth_m, region)` → `str`
+ - Resolve alias → catalog lookup → `dataset_id`, `var_name`, `has_depth`
+ - Cache check (same pattern as `retrieval.py`)
+ - `cm.open_dataset(dataset_id=..., variables=[var_name], ..., service="arco")`
+ - If `has_depth`: pass `minimum_depth=depth_m or 0.5, maximum_depth=depth_m or 0.5`
+ - `.load()`, size guard, `.to_zarr()`, `memory.register_dataset()`, return success string
+ - No explicit credential check — let toolbox fail naturally
+
+**`src/eurus/tools/copernicus.py`**
+- `CopernicusRetrievalArgs` Pydantic schema
+- Thin wrapper → `retrieve_copernicus_data`
+- `copernicus_tool = StructuredTool.from_function(...)`
+
+### Modified
+
+**`src/eurus/tools/__init__.py`**
+- Replace `era5_tool` import with `copernicus_tool`; swap in `get_all_tools()`
+- ERA5 import left commented out for easy revert
+
+**`src/eurus/config.py`**
+- Replace ERA5 variable table in `AGENT_SYSTEM_PROMPT` with Copernicus variables + depth_m semantics
+- Keep everything else (regions, style rules, etc.) unchanged
+
+**`pyproject.toml`**
+- `[project.optional-dependencies]` → `copernicus = ["copernicusmarine>=1.0.0"]`
+
+### Untouched (kept, just unwired)
+
+`src/eurus/retrieval.py`, `src/eurus/tools/era5.py`
diff --git a/plans/copernicus-backend.md b/plans/copernicus-backend.md
new file mode 100644
index 0000000..a358141
--- /dev/null
+++ b/plans/copernicus-backend.md
@@ -0,0 +1,151 @@
+# Copernicus Marine Backend
+
+## Goal
+
+Add a second data retrieval backend using the [Copernicus Marine Toolbox](https://toolbox-docs.marine.copernicus.eu/en/stable/)
+(`copernicusmarine` pip package). This gives the agent access to CMEMS ocean
+reanalysis products (GLORYS12, DUACS altimetry, wave models, etc.) that are
+not in the Earthmover/ERA5 archive.
+
+_feedback_:
+
+---
+
+## How the toolbox works
+
+```python
+import copernicusmarine as cm
+
+ds = cm.open_dataset(
+ dataset_id="cmems_mod_glo_phy_my_0.083deg_P1D-m",
+ variables=["thetao", "so"],
+ minimum_longitude=-30.0,
+ maximum_longitude=10.0,
+ minimum_latitude=20.0,
+ maximum_latitude=60.0,
+ start_datetime="2020-01-01",
+ end_datetime="2020-12-31",
+ minimum_depth=0.5,
+ maximum_depth=0.5, # surface only
+)
+# ds is a lazy xarray.Dataset — call .load() then .to_zarr() to cache
+```
+
+**Credentials** are resolved in order:
+1. Env vars `COPERNICUSMARINE_SERVICE_USERNAME` / `COPERNICUSMARINE_SERVICE_PASSWORD`
+2. Credentials file at `~/.copernicusmarine` (created by `cm.login()`)
+3. Explicit `username=` / `password=` params
+
+_feedback_:
+
+For now, just assume the user ran copernicusmarine login on their shell once.
+
+In the example aboce, note that chunking (set via service=) kwarg is essential to get problem-adapted chunking.
+
+---
+
+## Proposed hard-coded catalog
+
+The `dataset_id` is the only tricky part — we map user-friendly variable names
+to the right CMEMS product. For now, hard-code the catalog; `cm.describe()` can
+be added later for dynamic discovery.
+
+| User variable | `dataset_id` | Internal var | Has depth | Notes |
+|---|---|---|---|---|
+| `thetao` | `cmems_mod_glo_phy_my_0.083deg_P1D-m` | `thetao` | yes | GLORYS12 reanalysis |
+| `so` | same | `so` | yes | Salinity |
+| `uo` | same | `uo` | yes | Eastward current |
+| `vo` | same | `vo` | yes | Northward current |
+| `zos` | same | `zos` | no | Sea surface height |
+| `mlotst` | same | `mlotst` | no | Mixed layer depth |
+| `siconc` | same | `siconc` | no | Sea ice concentration |
+| `sithick` | same | `sithick` | no | Sea ice thickness |
+| `bottomT` | same | `bottomT` | no | Sea floor temperature |
+| `sla` | `cmems_obs-sl_glo_phy-ssh_my_allsat-l4-duacs-0.25deg_P1D` | `sla` | no | Altimetry SLA |
+| `adt` | same | `adt` | no | Absolute dynamic topo |
+| `ugos` | same | `ugos` | no | Geostrophic current E |
+| `vgos` | same | `vgos` | no | Geostrophic current N |
+| `VHM0` | `cmems_mod_glo_wav_my_0.2deg_PT3H-i` | `VHM0` | no | Significant wave height |
+| `VMDR` | same | `VMDR` | no | Mean wave direction |
+| `VTM10` | same | `VTM10` | no | Mean wave period |
+
+GLORYS12 covers 1993–present (with a ~1 month interim lag). DUACS covers
+1993–present. WAVERYS covers 1993–present.
+
+_feedback_:
+
+Good start. I just want to get an MVP up quickly.
+
+---
+
+## Files to create / modify
+
+### New files
+
+**`src/eurus/backends/__init__.py`** — empty package marker
+
+**`src/eurus/backends/copernicus.py`** — core retrieval:
+- `COPERNICUS_CATALOG` dataclass + dict (table above)
+- `generate_filename()` — `cmems_{var}_{start}_{end}_{region_tag}.zarr`
+- `retrieve_copernicus_data(variable_id, start_date, end_date, min/max lat/lon, depth_m, region)` → `str`
+ - Checks creds (`COPERNICUSMARINE_SERVICE_USERNAME` present)
+ - Looks up `variable_id` in catalog → gets `dataset_id`, internal var name
+ - Checks local Zarr cache (same pattern as ERA5)
+ - Calls `cm.open_dataset(...)`, selects nearest depth if `has_depth=True`
+ - Validates non-empty, checks size guard
+ - Saves to Zarr, registers in `MemoryManager`, returns success string
+
+**`src/eurus/tools/copernicus.py`** — LangChain StructuredTool:
+- `CopernicusRetrievalArgs` (Pydantic schema): `variable_id`, `start_date`, `end_date`, `min/max lat/lon`, `depth_m` (optional, default surface), `region` (optional)
+- Thin wrapper calling `retrieve_copernicus_data`
+- `copernicus_tool = StructuredTool.from_function(...)`
+
+### Modified files
+
+**`src/eurus/tools/__init__.py`**
+- Import `copernicus_tool`
+- Add it to `get_all_tools()` list (always enabled; graceful ImportError if `copernicusmarine` not installed)
+
+**`pyproject.toml`**
+- Add optional dep group `[project.optional-dependencies]` entry `copernicus = ["copernicusmarine>=1.0.0"]`
+
+**`src/eurus/config.py`** (minimal)
+- Possibly add `COPERNICUSMARINE_SERVICE_USERNAME` / `PASSWORD` to documented env vars (comment only)
+
+_feedback_:
+
+is backend submod really the way to go. How is era5 currently wired? And hos is arraylake wired? Let's look at structure of this first. --> Create some sequence diagram for what happens when a user prompts which highlights how credentials and arraylake are used? And let's create a flow chart or class diag or entity rel diag (whatever works best) for understanding modules? (mermaid.) Then we decide.
+
+---
+
+## Open questions / things to discuss
+
+1. **Depth handling** — default to surface (nearest to 0.5 m)? Or always require the user / agent to specify? Exposing `depth_m` as an optional tool param seems right; default `None` → surface.
+
+_feedback_:
+
+How's the LLM part wired to understand things like "surface temperature", "bottom temperature", "mixed-layer average oxygen" etc. ?
+
+2. **Interim dataset fallback** — GLORYS12 has two IDs: `my` (multi-year, stable reanalysis) and `myint` (interim, near-present, updated weekly). Should we automatically try `myint` if `my` returns empty data for recent dates? Or just document that `myint` is the variant to use for recent data and let the agent pick?
+
+_feedback_:
+
+Long term: Wire them together. They extend each other. For now, use my for first tests / MVP.
+
+3. **Variable aliases** — Add Copernicus vars to the existing `VARIABLE_ALIASES` in `config.py`, or keep a separate alias table in the backend? Separate is cleaner since they're a different namespace.
+
+_feedback_:
+
+Tell me how this is done for ERA currently first.
+
+4. **System prompt** — The `AGENT_SYSTEM_PROMPT` in `config.py` currently only mentions ERA5. We'll need to add a Copernicus section documenting available variables, the `retrieve_copernicus_data` tool, and the `depth_m` param. Defer until after wiring works?
+
+_feedback_:
+
+Adapt soon so we can test wiring in a real session. Note I don't want a good final desing of the internals. Quik / dirty MVP to see _that_ this works is fine.
+
+5. **Credential error message** — Should we surface a helpful URL to the Copernicus registration page when the creds env vars are missing?
+
+_feedback_:
+
+Just fail. See above.
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 76d00d9..f02a62f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -67,6 +67,9 @@ web = [
"python-multipart>=0.0.6",
"websockets>=12.0",
]
+copernicus = [
+ "copernicusmarine>=2.0.0",
+]
dev = [
"pytest>=7.0.0",
"pytest-asyncio>=0.21.0",
@@ -146,3 +149,22 @@ exclude_lines = [
"raise AssertionError",
"raise NotImplementedError",
]
+
+[tool.pixi.workspace]
+channels = ["conda-forge"]
+platforms = ["osx-arm64"]
+
+[tool.pixi.pypi-dependencies]
+eurus = { path = ".", editable = true }
+
+[tool.pixi.environments]
+default = { solve-group = "default" }
+agent = { features = ["agent"], solve-group = "default" }
+copernicus = { features = ["copernicus"], solve-group = "default" }
+# Combined env for testing Copernicus backend via the agent
+test-copernicus = { features = ["agent", "copernicus"], solve-group = "default" }
+dev = { features = ["dev"], solve-group = "default" }
+docs = { features = ["docs"], solve-group = "default" }
+web = { features = ["web"], solve-group = "default" }
+
+[tool.pixi.tasks]
diff --git a/src/eurus/config.py b/src/eurus/config.py
index 44a983d..8f6122e 100644
--- a/src/eurus/config.py
+++ b/src/eurus/config.py
@@ -574,52 +574,48 @@ class AgentConfig:
## YOUR CAPABILITIES
-### 1. DATA RETRIEVAL: `retrieve_era5_data`
-Downloads ERA5 reanalysis data from Earthmover's cloud-optimized archive.
-
-**⚠️ STRICT QUERY TYPE RULE (WRONG = 10-100x SLOWER!):**
-┌─────────────────────────────────────────────────────────────────┐
-│ TEMPORAL: (time > 1 day) AND (area < 30°×30°) │
-│ SPATIAL: (time ≤ 1 day) OR (area ≥ 30°×30°) │
-└─────────────────────────────────────────────────────────────────┘
-
-**COORDINATES - USE ROUTE BOUNDING BOX:**
-- Latitude: -90 to 90
-- Longitude: Use values from route tool's bounding box DIRECTLY!
- - For Europe/Atlantic: Use -10 to 15 (NOT 0 to 360!)
- - For Pacific crossing dateline: Use 0-360 system
-
-**⚠️ CRITICAL:** When `calculate_maritime_route` returns a bounding box,
-USE THOSE EXACT VALUES for min/max longitude. Do NOT convert to 0-360!
-
-**DATA AVAILABILITY:** 1975 to present (updated regularly)
-
-**Available Variables (22 total):**
-| Variable | Description | Units | Category |
-|----------|-------------|-------|----------|
-| sst | Sea Surface Temperature | K | Ocean |
-| t2 | 2m Air Temperature | K | Temperature |
-| d2 | 2m Dewpoint Temperature | K | Temperature |
-| skt | Skin Temperature | K | Surface |
-| u10 | 10m U-Wind (Eastward) | m/s | Wind |
-| v10 | 10m V-Wind (Northward) | m/s | Wind |
-| u100 | 100m U-Wind (Eastward) | m/s | Wind |
-| v100 | 100m V-Wind (Northward) | m/s | Wind |
-| sp | Surface Pressure | Pa | Pressure |
-| mslp | Mean Sea Level Pressure | Pa | Pressure |
-| blh | Boundary Layer Height | m | Atmosphere |
-| cape | Convective Available Potential Energy | J/kg | Atmosphere |
-| tcc | Total Cloud Cover | 0-1 | Cloud |
-| cp | Convective Precipitation | m | Precipitation |
-| lsp | Large-scale Precipitation | m | Precipitation |
-| tp | Total Precipitation | m | Precipitation |
-| ssr | Surface Net Solar Radiation | J/m² | Radiation |
-| ssrd | Surface Solar Radiation Downwards | J/m² | Radiation |
-| tcw | Total Column Water | kg/m² | Moisture |
-| tcwv | Total Column Water Vapour | kg/m² | Moisture |
-| sd | Snow Depth | m water eq. | Land |
-| stl1 | Soil Temperature Level 1 | K | Land |
-| swvl1 | Volumetric Soil Water Layer 1 | m³/m³ | Land |
+### 1. DATA RETRIEVAL: `retrieve_copernicus_data`
+Downloads ocean reanalysis / analysis data from the Copernicus Marine Service (CMEMS).
+Coverage: **1993–present**. Coordinates use **-180 to 180** longitude.
+
+**Available Variables:**
+
+GLORYS12 Global Ocean Physics Reanalysis (daily, 1/12° grid):
+| Variable | Description | Units | Notes |
+|----------|-------------|-------|-------|
+| thetao | Sea water potential temperature | °C | Has depth dimension |
+| so | Sea water salinity | PSU | Has depth dimension |
+| uo | Eastward current velocity | m/s | Has depth dimension |
+| vo | Northward current velocity | m/s | Has depth dimension |
+| zos | Sea surface height above geoid | m | Surface only |
+| mlotst | Mixed layer depth (sigma-theta) | m | Surface only |
+| siconc | Sea ice area fraction | 0-1 | Surface only |
+| sithick | Sea ice thickness | m | Surface only |
+| bottomT | Sea floor potential temperature | °C | Surface only |
+
+DUACS Altimetry — multi-mission merged (daily, 1/4° grid):
+| Variable | Description | Units |
+|----------|-------------|-------|
+| sla | Sea level anomaly | m |
+| adt | Absolute dynamic topography | m |
+| ugos | Geostrophic eastward velocity | m/s |
+| vgos | Geostrophic northward velocity | m/s |
+
+WAVERYS Wave Reanalysis (3-hourly, 1/5° grid):
+| Variable | Description | Units |
+|----------|-------------|-------|
+| VHM0 | Significant wave height | m |
+| VMDR | Mean wave direction | ° |
+| VTM10 | Mean wave period | s |
+
+**Depth handling (for thetao, so, uo, vo):**
+- `depth_m=None` → surface (~0.5 m) — use for "surface temperature", "SST"
+- `depth_m=200` → 200 m depth
+- For **bottom temperature**: use `variable='bottomT'` (no depth_m needed)
+- For **mixed-layer averages**: retrieve `mlotst` for the depth, then use `python_repl` to integrate
+
+**Common aliases accepted:** `temperature`, `salinity`, `mld`, `wave_height`,
+`sea_level`, `sea_ice`, `bottom_temperature`, `geostrophic_u`, `geostrophic_v`
### 2. CUSTOM ANALYSIS: `python_repl`
Persistent Python kernel for custom analysis and visualization.
diff --git a/src/eurus/copernicus.py b/src/eurus/copernicus.py
new file mode 100644
index 0000000..3b99e13
--- /dev/null
+++ b/src/eurus/copernicus.py
@@ -0,0 +1,399 @@
+"""
+Copernicus Marine Data Retrieval
+=================================
+
+Retrieves ocean reanalysis / analysis data from the Copernicus Marine Service
+using the copernicusmarine Python toolbox.
+
+Credentials: assumes `copernicusmarine login` has been run once in the shell,
+which writes ~/.copernicusmarine. No explicit credential handling here.
+"""
+
+from __future__ import annotations
+
+import logging
+import os
+import shutil
+import time
+from dataclasses import dataclass
+from datetime import datetime
+from pathlib import Path
+from typing import Optional
+
+from eurus.config import get_data_dir, get_region
+from eurus.memory import get_memory
+
+logger = logging.getLogger(__name__)
+
+
+# =============================================================================
+# VARIABLE CATALOG
+# =============================================================================
+
+@dataclass(frozen=True)
+class CopernicusVariable:
+ dataset_id: str
+ var_name: str # internal name inside the CMEMS dataset
+ long_name: str
+ units: str
+ has_depth: bool = False
+
+
+_GLORYS = "cmems_mod_glo_phy_my_0.083deg_P1D-m"
+_DUACS = "cmems_obs-sl_glo_phy-ssh_my_allsat-l4-duacs-0.25deg_P1D"
+_WAVES = "cmems_mod_glo_wav_my_0.2deg_PT3H-i"
+
+COPERNICUS_CATALOG: dict[str, CopernicusVariable] = {
+ # ── GLORYS12 physics reanalysis ────────────────────────────────────────
+ "thetao": CopernicusVariable(_GLORYS, "thetao", "Sea water potential temperature", "°C", has_depth=True),
+ "so": CopernicusVariable(_GLORYS, "so", "Sea water salinity", "PSU", has_depth=True),
+ "uo": CopernicusVariable(_GLORYS, "uo", "Eastward sea water velocity", "m/s", has_depth=True),
+ "vo": CopernicusVariable(_GLORYS, "vo", "Northward sea water velocity", "m/s", has_depth=True),
+ "zos": CopernicusVariable(_GLORYS, "zos", "Sea surface height above geoid", "m"),
+ "mlotst": CopernicusVariable(_GLORYS, "mlotst", "Mixed layer depth (sigma-theta)", "m"),
+ "siconc": CopernicusVariable(_GLORYS, "siconc", "Sea ice area fraction", "1"),
+ "sithick": CopernicusVariable(_GLORYS, "sithick", "Sea ice thickness", "m"),
+ "bottomT": CopernicusVariable(_GLORYS, "bottomT", "Sea floor potential temperature", "°C"),
+ # ── DUACS altimetry ────────────────────────────────────────────────────
+ "sla": CopernicusVariable(_DUACS, "sla", "Sea level anomaly", "m"),
+ "adt": CopernicusVariable(_DUACS, "adt", "Absolute dynamic topography", "m"),
+ "ugos": CopernicusVariable(_DUACS, "ugos", "Geostrophic eastward velocity", "m/s"),
+ "vgos": CopernicusVariable(_DUACS, "vgos", "Geostrophic northward velocity", "m/s"),
+ # ── WAVERYS wave reanalysis ────────────────────────────────────────────
+ "VHM0": CopernicusVariable(_WAVES, "VHM0", "Significant wave height", "m"),
+ "VMDR": CopernicusVariable(_WAVES, "VMDR", "Mean wave direction", "°"),
+ "VTM10": CopernicusVariable(_WAVES, "VTM10", "Mean wave period", "s"),
+}
+
+COPERNICUS_ALIASES: dict[str, str] = {
+ # temperature
+ "temperature": "thetao",
+ "ocean_temperature": "thetao",
+ "sea_temperature": "thetao",
+ "potential_temperature": "thetao",
+ # salinity
+ "salinity": "so",
+ "ocean_salinity": "so",
+ # currents
+ "u_current": "uo",
+ "v_current": "vo",
+ "eastward_velocity": "uo",
+ "northward_velocity": "vo",
+ # sea level
+ "sea_level": "zos",
+ "ssh": "zos",
+ "sea_surface_height": "zos",
+ "sea_level_anomaly": "sla",
+ "absolute_dynamic_topography": "adt",
+ # mixed layer
+ "mld": "mlotst",
+ "mixed_layer_depth": "mlotst",
+ # sea ice
+ "sea_ice": "siconc",
+ "ice_concentration": "siconc",
+ "ice_thickness": "sithick",
+ # bottom
+ "bottom_temperature": "bottomT",
+ # waves
+ "wave_height": "VHM0",
+ "significant_wave_height": "VHM0",
+ "wave_direction": "VMDR",
+ "wave_period": "VTM10",
+ # geostrophic
+ "geostrophic_u": "ugos",
+ "geostrophic_v": "vgos",
+}
+
+
+def resolve_variable(variable_id: str) -> Optional[CopernicusVariable]:
+ """Return CopernicusVariable for a user-supplied name (alias-aware)."""
+ key = COPERNICUS_ALIASES.get(variable_id.lower(), variable_id)
+ return COPERNICUS_CATALOG.get(key)
+
+
+def list_available_variables() -> str:
+ lines = ["Available Copernicus Marine Variables:", "=" * 60]
+ for key, v in COPERNICUS_CATALOG.items():
+ depth_tag = " [has depth]" if v.has_depth else ""
+ lines.append(f" {key:10} | {v.long_name:42} | {v.units}{depth_tag}")
+ return "\n".join(lines)
+
+
+# =============================================================================
+# FILENAME HELPERS
+# =============================================================================
+
+def _fmt(value: float) -> str:
+ if abs(value) < 0.005:
+ value = 0.0
+ return f"{value:.2f}"
+
+
+def generate_filename(
+ variable: str,
+ start: str,
+ end: str,
+ min_latitude: float,
+ max_latitude: float,
+ min_longitude: float,
+ max_longitude: float,
+ depth_m: Optional[float],
+ region: Optional[str] = None,
+) -> str:
+ clean_var = variable.replace("_", "").lower()
+ clean_start = start.replace("-", "")
+ clean_end = end.replace("-", "")
+ depth_tag = f"_d{depth_m:.0f}m" if depth_m is not None else "_fullcolumn"
+ if region:
+ geo_tag = region.lower()
+ else:
+ geo_tag = (
+ f"lat{_fmt(min_latitude)}_{_fmt(max_latitude)}"
+ f"_lon{_fmt(min_longitude)}_{_fmt(max_longitude)}"
+ )
+ return f"cmems_{clean_var}_{clean_start}_{clean_end}_{geo_tag}{depth_tag}.zarr"
+
+
+def format_file_size(size_bytes: int) -> str:
+ for unit in ["B", "KB", "MB", "GB"]:
+ if size_bytes < 1024:
+ return f"{size_bytes:.2f} {unit}"
+ size_bytes /= 1024
+ return f"{size_bytes:.2f} TB"
+
+
+# =============================================================================
+# RETRIEVAL
+# =============================================================================
+
+def retrieve_copernicus_data(
+ variable_id: str,
+ start_date: str,
+ end_date: str,
+ min_latitude: float = -90.0,
+ max_latitude: float = 90.0,
+ min_longitude: float = -180.0,
+ max_longitude: float = 180.0,
+ depth_m: Optional[float] = None,
+ region: Optional[str] = None,
+) -> str:
+ """
+ Retrieve Copernicus Marine data and cache it locally as Zarr.
+
+ Args:
+ variable_id: Variable name or alias (e.g. "thetao", "temperature", "VHM0").
+ start_date: YYYY-MM-DD
+ end_date: YYYY-MM-DD
+ min_latitude: Southern bound
+ max_latitude: Northern bound
+ min_longitude: Western bound (-180 to 180)
+ max_longitude: Eastern bound (-180 to 180)
+ depth_m: Depth in metres for 3-D variables (None = surface ~0.5 m).
+ Ignored for variables without a depth dimension.
+ region: Optional predefined region name (overrides lat/lon).
+
+ Returns:
+ Success message with local file path, or error string.
+ """
+ memory = get_memory()
+
+ # Dependency check
+ try:
+ import copernicusmarine as cm
+ except ImportError:
+ return (
+ "Error: 'copernicusmarine' is not installed.\n"
+ "Install with: pip install copernicusmarine"
+ )
+
+ try:
+ import xarray as xr
+ except ImportError:
+ return "Error: 'xarray' is not installed.\nInstall with: pip install xarray"
+
+ # Apply region bounds
+ region_tag = None
+ if region:
+ region_info = get_region(region)
+ if region_info:
+ min_latitude = region_info.min_lat
+ max_latitude = region_info.max_lat
+ # Regions are stored in 0-360; convert to -180/180 for Copernicus
+ min_longitude = region_info.min_lon if region_info.min_lon <= 180 else region_info.min_lon - 360
+ max_longitude = region_info.max_lon if region_info.max_lon <= 180 else region_info.max_lon - 360
+ region_tag = region.lower()
+ logger.info("Using region '%s'", region)
+ else:
+ logger.warning("Unknown region '%s', using provided coordinates", region)
+
+ # Resolve variable
+ var_info = resolve_variable(variable_id)
+ if var_info is None:
+ return (
+ f"Error: Variable '{variable_id}' not found in Copernicus catalog.\n\n"
+ f"{list_available_variables()}"
+ )
+ var_key = COPERNICUS_ALIASES.get(variable_id.lower(), variable_id)
+
+ # Depth only applies to 3-D variables
+ effective_depth = depth_m if var_info.has_depth else None
+
+ # Cache check
+ output_dir = get_data_dir()
+ filename = generate_filename(
+ var_key, start_date, end_date,
+ min_latitude, max_latitude,
+ min_longitude, max_longitude,
+ effective_depth, region_tag,
+ )
+ local_path = str(output_dir / filename)
+
+ if os.path.exists(local_path):
+ existing = memory.get_dataset(local_path)
+ if existing:
+ logger.info("Cache hit: %s", local_path)
+ return (
+ f"CACHE HIT - Data already downloaded\n"
+ f" Variable: {var_key} ({var_info.long_name})\n"
+ f" Period: {existing.start_date} to {existing.end_date}\n"
+ f" Path: {local_path}\n\n"
+ f"Load with: ds = xr.open_dataset('{local_path}', engine='zarr')"
+ )
+ else:
+ try:
+ file_size = sum(f.stat().st_size for f in Path(local_path).rglob("*") if f.is_file())
+ memory.register_dataset(
+ path=local_path,
+ variable=var_key,
+ query_type="copernicus",
+ start_date=start_date,
+ end_date=end_date,
+ lat_bounds=(min_latitude, max_latitude),
+ lon_bounds=(min_longitude, max_longitude),
+ file_size_bytes=file_size,
+ )
+ except Exception as exc:
+ logger.warning("Could not register existing dataset: %s", exc)
+ return (
+ f"CACHE HIT - Found existing data\n"
+ f" Variable: {var_key}\n"
+ f" Path: {local_path}\n\n"
+ f"Load with: ds = xr.open_dataset('{local_path}', engine='zarr')"
+ )
+
+ # Choose service based on query shape (mirrors ERA5 temporal/spatial logic)
+ req_start = datetime.strptime(start_date, "%Y-%m-%d")
+ req_end = datetime.strptime(end_date, "%Y-%m-%d")
+ time_days = (req_end - req_start).days + 1
+ area = abs(max_latitude - min_latitude) * abs(max_longitude - min_longitude)
+ service = "arco-time-series" if (time_days > 1 and area < 900) else "arco-geo-series"
+ logger.info("Auto-selected service=%s (time=%dd, area=%.0f sq°)", service, time_days, area)
+
+ # Build open_dataset kwargs
+ kwargs: dict = dict(
+ dataset_id = var_info.dataset_id,
+ variables = [var_info.var_name],
+ minimum_longitude = min_longitude,
+ maximum_longitude = max_longitude,
+ minimum_latitude = min_latitude,
+ maximum_latitude = max_latitude,
+ start_datetime = start_date,
+ end_datetime = end_date,
+ service = service,
+ )
+ if var_info.has_depth and effective_depth is not None:
+ kwargs["minimum_depth"] = effective_depth
+ kwargs["maximum_depth"] = effective_depth
+
+ # Download with retry
+ for attempt in range(3):
+ try:
+ logger.info("Connecting to Copernicus Marine (attempt %d)...", attempt + 1)
+ ds = cm.open_dataset(**kwargs)
+
+ # Validate non-empty
+ if ds.dims.get("time", 0) == 0:
+ return (
+ f"Error: No data returned for the requested time range "
+ f"({start_date} to {end_date}).\n"
+ f"Check data availability for dataset '{var_info.dataset_id}'."
+ )
+
+ # Size guard
+ import numpy as np # noqa: F401 (ensure numpy available in scope)
+ estimated_gb = ds.nbytes / (1024 ** 3)
+ if estimated_gb > 15.0:
+ return (
+ f"Error: Estimated download size ({estimated_gb:.1f} GB) exceeds the 15 GB limit.\n"
+ f"Try narrowing the time range or spatial area."
+ )
+ if estimated_gb > 1.0:
+ logger.info("Large download (%.1f GB) — this may take a while...", estimated_gb)
+
+ # Clear encoding, add metadata
+ for var in ds.variables:
+ ds[var].encoding = {}
+ ds.attrs["source"] = f"Copernicus Marine Service — {var_info.dataset_id}"
+ ds.attrs["download_date"] = datetime.now().isoformat()
+ if var_info.has_depth and effective_depth is not None:
+ ds.attrs["depth_m"] = effective_depth
+
+ # Save
+ if os.path.exists(local_path):
+ shutil.rmtree(local_path)
+
+ logger.info("Saving to %s ...", local_path)
+ t0 = time.time()
+ ds.to_zarr(local_path, mode="w", consolidated=True)
+ elapsed = time.time() - t0
+
+ file_size = sum(f.stat().st_size for f in Path(local_path).rglob("*") if f.is_file())
+ shape = tuple(ds[var_info.var_name].shape)
+
+ memory.register_dataset(
+ path = local_path,
+ variable = var_key,
+ query_type = "copernicus",
+ start_date = start_date,
+ end_date = end_date,
+ lat_bounds = (min_latitude, max_latitude),
+ lon_bounds = (min_longitude, max_longitude),
+ file_size_bytes= file_size,
+ shape = shape,
+ )
+
+ result = (
+ f"SUCCESS - Data downloaded\n{'=' * 50}\n"
+ f" Variable: {var_key} ({var_info.long_name})\n"
+ f" Units: {var_info.units}\n"
+ f" Period: {start_date} to {end_date}\n"
+ f" Shape: {shape}\n"
+ f" Size: {format_file_size(file_size)}\n"
+ f" Time: {elapsed:.1f}s\n"
+ f" Path: {local_path}\n"
+ f"{'=' * 50}\n\n"
+ f"Load with:\n"
+ f" ds = xr.open_dataset('{local_path}', engine='zarr')"
+ )
+ return result
+
+ except Exception as exc:
+ logger.error("Attempt %d failed: %s", attempt + 1, exc)
+ if os.path.exists(local_path):
+ shutil.rmtree(local_path, ignore_errors=True)
+ if attempt < 2:
+ wait = 2.0 * (2 ** attempt)
+ logger.info("Retrying in %.1fs...", wait)
+ time.sleep(wait)
+ else:
+ return (
+ f"Error: Failed after 3 attempts.\n"
+ f"Last error: {exc}\n\n"
+ f"Troubleshooting:\n"
+ f"1. Run 'copernicusmarine login' in your shell if not done already\n"
+ f"2. Check your internet connection\n"
+ f"3. Try a smaller date range or region\n"
+ f"4. Verify variable '{var_key}' is available for dataset '{var_info.dataset_id}'"
+ )
+
+ return "Error: Unexpected failure in retrieval logic."
diff --git a/src/eurus/logging_config.py b/src/eurus/logging_config.py
index 1c27119..67473d5 100644
--- a/src/eurus/logging_config.py
+++ b/src/eurus/logging_config.py
@@ -66,13 +66,6 @@ def setup_logging(mode: str = "web", level: int = logging.DEBUG) -> logging.Logg
console_handler.setFormatter(console_formatter)
root_logger.addHandler(console_handler)
- # Log startup info
- logger = logging.getLogger("eurus.logging")
- logger.info(f"=" * 80)
- logger.info(f"EURUS {mode.upper()} STARTING")
- logger.info(f"Log file: {log_file}")
- logger.info(f"=" * 80)
-
# Reduce noise from external libraries
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)
diff --git a/src/eurus/tools/__init__.py b/src/eurus/tools/__init__.py
index 1c06fd2..250acf4 100644
--- a/src/eurus/tools/__init__.py
+++ b/src/eurus/tools/__init__.py
@@ -14,7 +14,8 @@
from langchain_core.tools import BaseTool
# Import core tools
-from .era5 import era5_tool
+# from .era5 import era5_tool # ERA5/Arraylake backend (unwired for Copernicus MVP)
+from .copernicus import copernicus_tool
from .repl import PythonREPLTool
from .routing import routing_tool
from .analysis_guide import analysis_guide_tool, visualization_guide_tool
@@ -43,7 +44,7 @@ def get_all_tools(
"""
# Core tools: data retrieval + Python analysis
tools = [
- era5_tool,
+ copernicus_tool,
PythonREPLTool(working_dir=".")
]
@@ -57,7 +58,7 @@ def get_all_tools(
if HAS_ROUTING_DEPS:
tools.append(routing_tool)
else:
- print("WARNING: Routing tools requested but dependencies (scgraph) are missing.")
+ pass # scgraph not installed; routing silently unavailable
return tools
diff --git a/src/eurus/tools/copernicus.py b/src/eurus/tools/copernicus.py
new file mode 100644
index 0000000..d77be65
--- /dev/null
+++ b/src/eurus/tools/copernicus.py
@@ -0,0 +1,121 @@
+"""
+Copernicus Marine Retrieval Tool (LangChain wrapper)
+=====================================================
+Thin wrapper over eurus.copernicus.retrieve_copernicus_data.
+"""
+
+from __future__ import annotations
+
+import logging
+from datetime import datetime
+from typing import Optional
+
+from pydantic import BaseModel, Field, field_validator
+from langchain_core.tools import StructuredTool
+
+from ..copernicus import retrieve_copernicus_data as _retrieve, list_available_variables
+
+logger = logging.getLogger(__name__)
+
+
+class CopernicusRetrievalArgs(BaseModel):
+ variable_id: str = Field(
+ description=(
+ "Copernicus Marine variable. Available variables:\n"
+ "GLORYS12 reanalysis (1993-present, daily):\n"
+ " thetao — Sea water potential temperature (°C) [has depth]\n"
+ " so — Sea water salinity (PSU) [has depth]\n"
+ " uo — Eastward current (m/s) [has depth]\n"
+ " vo — Northward current (m/s) [has depth]\n"
+ " zos — Sea surface height (m)\n"
+ " mlotst — Mixed layer depth (m)\n"
+ " siconc — Sea ice concentration (0-1)\n"
+ " sithick — Sea ice thickness (m)\n"
+ " bottomT — Sea floor temperature (°C)\n"
+ "DUACS altimetry (1993-present, daily):\n"
+ " sla — Sea level anomaly (m)\n"
+ " adt — Absolute dynamic topography (m)\n"
+ " ugos — Geostrophic eastward velocity (m/s)\n"
+ " vgos — Geostrophic northward velocity (m/s)\n"
+ "WAVERYS waves (1993-present, 3-hourly):\n"
+ " VHM0 — Significant wave height (m)\n"
+ " VMDR — Mean wave direction (°)\n"
+ " VTM10 — Mean wave period (s)\n"
+ "Common aliases accepted: 'temperature', 'salinity', 'mld', "
+ "'wave_height', 'sea_level', 'sea_ice', 'bottom_temperature'."
+ )
+ )
+
+ start_date: str = Field(description="Start date YYYY-MM-DD (data available from 1993-01-01)")
+ end_date: str = Field(description="End date YYYY-MM-DD")
+
+ min_latitude: float = Field(ge=-90.0, le=90.0, description="Southern bound (-90 to 90)")
+ max_latitude: float = Field(ge=-90.0, le=90.0, description="Northern bound (-90 to 90)")
+ min_longitude: float = Field(ge=-180.0, le=180.0, description="Western bound (-180 to 180)")
+ max_longitude: float = Field(ge=-180.0, le=180.0, description="Eastern bound (-180 to 180)")
+
+ depth_m: Optional[float] = Field(
+ default=None,
+ ge=0.0,
+ description=(
+ "Depth in metres for 3-D variables (thetao, so, uo, vo). "
+ "None = full water column (all depth levels). "
+ "Use 0.5 to retrieve only the surface layer (~0.5 m). "
+ "Ignored for 2-D variables. "
+ "For bottom temperature use variable='bottomT' instead. "
+ "For mixed-layer averages retrieve mlotst first, then use python_repl."
+ )
+ )
+
+ region: Optional[str] = Field(
+ default=None,
+ description="Optional predefined region name (overrides lat/lon). E.g. 'north_atlantic', 'mediterranean'."
+ )
+
+ @field_validator("start_date", "end_date")
+ @classmethod
+ def validate_date(cls, v: str) -> str:
+ try:
+ datetime.strptime(v, "%Y-%m-%d")
+ except ValueError:
+ raise ValueError(f"Date must be YYYY-MM-DD, got: {v}")
+ return v
+
+
+def _run(
+ variable_id: str,
+ start_date: str,
+ end_date: str,
+ min_latitude: float,
+ max_latitude: float,
+ min_longitude: float,
+ max_longitude: float,
+ depth_m: Optional[float] = None,
+ region: Optional[str] = None,
+) -> str:
+ return _retrieve(
+ variable_id = variable_id,
+ start_date = start_date,
+ end_date = end_date,
+ min_latitude = min_latitude,
+ max_latitude = max_latitude,
+ min_longitude = min_longitude,
+ max_longitude = max_longitude,
+ depth_m = depth_m,
+ region = region,
+ )
+
+
+copernicus_tool = StructuredTool.from_function(
+ func = _run,
+ name = "retrieve_copernicus_data",
+ description = (
+ "Retrieve ocean reanalysis / analysis data from the Copernicus Marine Service (CMEMS).\n\n"
+ "Covers 1993-present. Datasets: GLORYS12 physics reanalysis, DUACS altimetry, WAVERYS waves.\n\n"
+ "Provide variable_id, date range, and bounding box. "
+ "For depth variables (thetao, so, uo, vo): depth_m=None retrieves the full water column; "
+ "use depth_m=0.5 for surface only, or specify a depth in metres for a single level. "
+ "Returns local Zarr file path. Load with: xr.open_dataset('PATH', engine='zarr')"
+ ),
+ args_schema = CopernicusRetrievalArgs,
+)