From fe917bb1c5b876aa946491922c7f8d64b914fcc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dion=20H=C3=A4fner?= Date: Mon, 21 Apr 2025 15:04:26 +0200 Subject: [PATCH 1/4] doc: add rendered demos to docs --- docs/conf.py | 16 +++++++- docs/content/api.md | 2 +- docs/index.md | 90 +++++---------------------------------------- pyproject.toml | 1 + 4 files changed, 27 insertions(+), 82 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 82d1aca..dbfa754 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -7,6 +7,8 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information import re +import shutil +from pathlib import Path from tesseract_jax import __version__ @@ -28,7 +30,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ - "myst_parser", + "myst_nb", # This is myst-parser + jupyter notebook support "sphinx.ext.intersphinx", "sphinx.ext.autodoc", "sphinx.ext.napoleon", @@ -65,3 +67,15 @@ "sidebar_hide_name": False, } html_css_files = ["custom.css"] + + +# -- Handle Jupyter notebooks ------------------------------------------------ + +# Do not execute notebooks during build (just take existing output) +nb_execution_mode = "off" + +# Copy example notebooks to demo_notebooks folder on every build +for example_notebook in Path("../demo").glob("*/demo.ipynb"): + # Copy the example notebook to the docs folder + dest = (Path("demo_notebooks") / example_notebook.parent.name).with_suffix(".ipynb") + shutil.copyfile(example_notebook, dest) \ No newline at end of file diff --git a/docs/content/api.md b/docs/content/api.md index 82fc5f6..3c28085 100644 --- a/docs/content/api.md +++ b/docs/content/api.md @@ -1,4 +1,4 @@ -# API documentation +# API reference ```{eval-rst} .. automodule:: tesseract_jax diff --git a/docs/index.md b/docs/index.md index 2306642..41469ab 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,93 +1,23 @@ -# tesseract-jax - -`tesseract-jax` executes [Tesseracts](https://github.com/pasteurlabs/tesseract-core) as part of JAX programs, with full support for function transformations like JIT, `grad`, `jvp`, and more. - -The API of Tesseract-JAX consists of a single function, [`apply_tesseract(tesseract_client, inputs)`](tesseract_jax.apply_tesseract), which is fully traceable by JAX. This enables end-to-end autodifferentiation and JIT compilation of Tesseract-based pipelines. - -## Quick start - -```{note} -Before proceeding, make sure you have a [working installation of Docker](https://docs.docker.com/engine/install/) and a modern Python installation (Python 3.10+). -``` - -```{seealso} -For more detailed installation instructions, please refer to the [Tesseract Core documentation](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/installation.html). -``` - -1. Install Tesseract-JAX: - - ```bash - $ pip install tesseract-jax - ``` - -2. Build an example Tesseract: - - ```bash - $ tesseract build demo/simple/vectoradd_jax - ``` - -3. Use it as part of a JAX program: - - ```python - import jax - import jax.numpy as jnp - from tesseract_core import Tesseract - from tesseract_jax import apply_tesseract - - # Load the Tesseract - t = Tesseract.from_image("vectoradd_jax") - - # Run it with JAX - x = jnp.ones((1000, 1000)) - y = jnp.ones((1000, 1000)) - - def vector_add(x, y): - return apply_tesseract(t, x, y) - - vector_add(x, y) # success! - - # You can also use it with JAX transformations like JIT and grad - vector_add_jit = jax.jit(vector_add) - vector_add_jit(x, y) - - vector_add_grad = jax.grad(vector_add) - vector_add_grad(x, y) - ``` - -```{tip} -Now you're ready to jump into our [demos](https://github.com/pasteurlabs/tesseract-jax/tree/main/demo) for more examples on how to use Tesseract-JAX. +```{include} content/index.md ``` -## Sharp edges - -- **Arrays vs. array-like objects**: Tesseract-JAX ist stricter than Tesseract Core in that all array inputs to Tesseracts must be JAX or NumPy arrays, not just any array-like (such as Python floats or lists). As a result, you may need to convert your inputs to JAX arrays before passing them to Tesseract-JAX, including scalar values. - - ```python - from tesseract_core import Tesseract - from tesseract_jax import apply_tesseract - - tess = Tesseract.from_image("vectoradd") - apply_tesseract(tess, {"a": 1.0, "b": 2.0}) # ❌ raises an error - apply_tesseract(tess, {"a": jnp.array(1.0), "b": jnp.array(2.0)}) # ✅ works - ``` -- **Additional required endpoints**: Tesseract-JAX requires the [`abstract_eval`](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/api/endpoints.html#abstract-eval) Tesseract endpoint to be defined for all operations. This is because JAX mandates abstract evaluation of all operations before they are executed. Additionally, many gradient transformations like `jax.grad` require [`vector_jacobian_product`](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/api/endpoints.html#vector-jacobian-product) to be defined. - -```{tip} -When creating a new Tesseract based on a JAX function, use `tesseract init --recipe jax` to define all required endpoints automatically, including `abstract_eval` and `vector_jacobian_product`. -``` ```{toctree} :caption: Contents :maxdepth: 2 :hidden: +content/index content/api -Tesseract Core documentation +Tesseract Core docs Tesseract User Forums ``` -## License - -Tesseract JAX is licensed under the [Apache License 2.0](https://github.com/pasteurlabs/tesseract-jax/LICENSE) and is free to use, modify, and distribute (under the terms of the license). +```{toctree} +:caption: Demos +:maxdepth: 2 +:hidden: -Tesseract is a registered trademark of Pasteur Labs, Inc. and may not be used without permission. +demo_notebooks/simple.ipynb +demo_notebooks/cfd.ipynb +``` diff --git a/pyproject.toml b/pyproject.toml index 132183d..acf3dc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ docs = [ "sphinx_autodoc_typehints", "furo", "myst-parser", + "myst-nb", ] # TODO: add dev dependencies here *and* in requirements-dev.txt dev = [ From c8ba7a29571edcc94e05ad48bcece92884e21057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dion=20H=C3=A4fner?= Date: Mon, 21 Apr 2025 15:05:16 +0200 Subject: [PATCH 2/4] apply pre-commit --- docs/conf.py | 2 +- production.uv.lock | 828 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 829 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index dbfa754..35aa891 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -78,4 +78,4 @@ for example_notebook in Path("../demo").glob("*/demo.ipynb"): # Copy the example notebook to the docs folder dest = (Path("demo_notebooks") / example_notebook.parent.name).with_suffix(".ipynb") - shutil.copyfile(example_notebook, dest) \ No newline at end of file + shutil.copyfile(example_notebook, dest) diff --git a/production.uv.lock b/production.uv.lock index ea1716c..d0175a1 100644 --- a/production.uv.lock +++ b/production.uv.lock @@ -171,6 +171,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, ] +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, +] + [[package]] name = "async-timeout" version = "5.0.1" @@ -234,6 +252,63 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, ] +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + [[package]] name = "cfgv" version = "3.4.0" @@ -325,6 +400,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + [[package]] name = "coverage" version = "7.8.0" @@ -390,6 +477,40 @@ toml = [ { name = "tomli", marker = "python_full_version <= '3.11'" }, ] +[[package]] +name = "debugpy" +version = "1.8.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/df/156df75a41aaebd97cee9d3870fe68f8001b6c1c4ca023e221cfce69bece/debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339", size = 2076510 }, + { url = "https://files.pythonhosted.org/packages/69/cd/4fc391607bca0996db5f3658762106e3d2427beaef9bfd363fd370a3c054/debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79", size = 3559614 }, + { url = "https://files.pythonhosted.org/packages/1a/42/4e6d2b9d63e002db79edfd0cb5656f1c403958915e0e73ab3e9220012eec/debugpy-1.8.14-cp310-cp310-win32.whl", hash = "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987", size = 5208588 }, + { url = "https://files.pythonhosted.org/packages/97/b1/cc9e4e5faadc9d00df1a64a3c2d5c5f4b9df28196c39ada06361c5141f89/debugpy-1.8.14-cp310-cp310-win_amd64.whl", hash = "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84", size = 5241043 }, + { url = "https://files.pythonhosted.org/packages/67/e8/57fe0c86915671fd6a3d2d8746e40485fd55e8d9e682388fbb3a3d42b86f/debugpy-1.8.14-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9", size = 2175064 }, + { url = "https://files.pythonhosted.org/packages/3b/97/2b2fd1b1c9569c6764ccdb650a6f752e4ac31be465049563c9eb127a8487/debugpy-1.8.14-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2", size = 3132359 }, + { url = "https://files.pythonhosted.org/packages/c0/ee/b825c87ed06256ee2a7ed8bab8fb3bb5851293bf9465409fdffc6261c426/debugpy-1.8.14-cp311-cp311-win32.whl", hash = "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2", size = 5133269 }, + { url = "https://files.pythonhosted.org/packages/d5/a6/6c70cd15afa43d37839d60f324213843174c1d1e6bb616bd89f7c1341bac/debugpy-1.8.14-cp311-cp311-win_amd64.whl", hash = "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01", size = 5158156 }, + { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268 }, + { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077 }, + { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127 }, + { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249 }, + { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676 }, + { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514 }, + { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756 }, + { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119 }, + { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + [[package]] name = "distlib" version = "0.3.9" @@ -431,6 +552,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, ] +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, +] + [[package]] name = "fastapi" version = "0.115.12" @@ -445,6 +575,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 }, ] +[[package]] +name = "fastjsonschema" +version = "2.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, +] + [[package]] name = "filelock" version = "3.18.0" @@ -581,6 +720,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c", size = 341333 }, ] +[[package]] +name = "greenlet" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/9c/666d8c71b18d0189cf801c0e0b31c4bfc609ac823883286045b1f3ae8994/greenlet-3.2.0.tar.gz", hash = "sha256:1d2d43bd711a43db8d9b9187500e6432ddb4fafe112d082ffabca8660a9e01a7", size = 183685 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/bd/1d330ca53f844c463cb63cf4ca1ed1798a50b8fd1e1db576cbb473b8c1b3/greenlet-3.2.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:b7a7b7f2bad3ca72eb2fa14643f1c4ca11d115614047299d89bc24a3b11ddd09", size = 267375 }, + { url = "https://files.pythonhosted.org/packages/a3/a7/7ec4461f7a6a9f8963f2be793a99763e9cd66bc07599011620a75bb3900e/greenlet-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e77242e38e99ecaede853755bbd8165e0b20a2f1f3abcaa6f0dceb826a7411", size = 625728 }, + { url = "https://files.pythonhosted.org/packages/59/8a/70b63c74b3e27df7827777e206395ee190a0cf8f85cd1b3674b7992651f1/greenlet-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f32d7c70b1c26844fd0e4e56a1da852b493e4e1c30df7b07274a1e5a9b599e", size = 636992 }, + { url = "https://files.pythonhosted.org/packages/5e/d8/dc3e8157b045423f75e2fb327d4c6f20246b5cc12a09f0c7f28860be5dea/greenlet-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97bc1be4bad83b70d8b8627ada6724091af41139616696e59b7088f358583b9", size = 632888 }, + { url = "https://files.pythonhosted.org/packages/2c/fb/6868c1c796ff6f9893d5b312c36c6c9d31c8be98e435210bfe1e5e6f8624/greenlet-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f56a0103deb5570c8d6a0bb4ddf8a7a28931973ad7ed7a883460a67e599b32", size = 631647 }, + { url = "https://files.pythonhosted.org/packages/56/54/a4bdefd2664382c7652fde5d7c2d8851b88161c65fbeeed15b351e5d9fc6/greenlet-3.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2919b126eeb63ca5fa971501cd20cd6cdb5522369a8e39548bbc73a3e10b8b41", size = 580585 }, + { url = "https://files.pythonhosted.org/packages/e9/20/53a45e165c228b4d490a15918377a6ef16cf4ea9ddf5974d4b49e5c81650/greenlet-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:844acfd479ee380f3810415e682c9ee941725fb90b45e139bb7fd6f85c6c9a30", size = 1109798 }, + { url = "https://files.pythonhosted.org/packages/95/c4/f9be6264cc19b8ea2c868e1a0b06546de7da2aa296400845cd4abdbb877b/greenlet-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b986f1a6467710e7ffeeeac1777da0318c95bbfcc467acbd0bd35abc775f558", size = 1133421 }, + { url = "https://files.pythonhosted.org/packages/0a/d6/14648d06627db2db62d633d5d6af96866cea7e38b02b8e4992cd33c58e00/greenlet-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:29449a2b82ed7ce11f8668c31ef20d31e9d88cd8329eb933098fab5a8608a93a", size = 294968 }, + { url = "https://files.pythonhosted.org/packages/2d/d3/0a25528e54eca3c57524d2ef1f63283c8c6db466c785218036ab7fc2d4ff/greenlet-3.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b99de16560097b9984409ded0032f101f9555e1ab029440fc6a8b5e76dbba7ac", size = 268620 }, + { url = "https://files.pythonhosted.org/packages/ff/40/f937eb7c1e641ca12089265c57874fcdd173c6c8aabdec3a494641d81eb9/greenlet-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0bc5776ac2831c022e029839bf1b9d3052332dcf5f431bb88c8503e27398e31", size = 628787 }, + { url = "https://files.pythonhosted.org/packages/12/8d/f248691502cb85ce8b18d442032dbde5d3dd16ff2d15593cbee33c40f29c/greenlet-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dcb1108449b55ff6bc0edac9616468f71db261a4571f27c47ccf3530a7f8b97", size = 640838 }, + { url = "https://files.pythonhosted.org/packages/d5/f1/2a572bf4fc667e8835ed8c4ef8b729eccd0666ed9e6db8c61c5796fd2dc9/greenlet-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a68a25a08f51fc8b66b113d1d9863ee123cdb0e8f1439aed9fc795cd6f85cf", size = 636760 }, + { url = "https://files.pythonhosted.org/packages/12/d6/f9ecc8dcb17516a0f4ab91df28497303e8d2d090d509fe3e1b1a85b23e90/greenlet-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fee6f518868e8206c617f4084a83ad4d7a3750b541bf04e692dfa02e52e805d", size = 636001 }, + { url = "https://files.pythonhosted.org/packages/fc/b2/28ab943ff898d6aad3e0ab88fad722c892a43375fabb9789dcc29075da36/greenlet-3.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6fad8a9ca98b37951a053d7d2d2553569b151cd8c4ede744806b94d50d7f8f73", size = 583936 }, + { url = "https://files.pythonhosted.org/packages/44/a8/dedd1517fae684c3c08ff53ab8b03e328015da4b52d2bd993279ac3a8c3d/greenlet-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e14541f9024a280adb9645143d6a0a51fda6f7c5695fd96cb4d542bb563442f", size = 1112901 }, + { url = "https://files.pythonhosted.org/packages/45/23/15cf5d4bc864c3dc0dcb708bcaa81cd1a3dc2012326d32ad8a46d77a645e/greenlet-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7f163d04f777e7bd229a50b937ecc1ae2a5b25296e6001445e5433e4f51f5191", size = 1138328 }, + { url = "https://files.pythonhosted.org/packages/ba/82/c7cf91e89451a922c049ac1f0123de091260697e26e8b98d299555ad96a5/greenlet-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:39801e633a978c3f829f21022501e7b0c3872683d7495c1850558d1a6fb95ed0", size = 295415 }, + { url = "https://files.pythonhosted.org/packages/0e/8d/3c55e88ab01866fb696f68d6c94587a1b7ec8c8a9c56b1383ad05bc14811/greenlet-3.2.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:7d08b88ee8d506ca1f5b2a58744e934d33c6a1686dd83b81e7999dfc704a912f", size = 270391 }, + { url = "https://files.pythonhosted.org/packages/8b/6f/4a15185a386992ba4fbb55f88c1a189b75c7ce6e145b43ae4e50754d1969/greenlet-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ef3d637c54e2f079064ca936556c4af3989144e4154d80cfd4e2a59fc3769c", size = 637202 }, + { url = "https://files.pythonhosted.org/packages/71/f8/60214debfe3b9670bafac97bfc40e318cbddb4ff4b5cf07df119c4a56dcd/greenlet-3.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33ea7e7269d6f7275ce31f593d6dcfedd97539c01f63fbdc8d84e493e20b1b2c", size = 651391 }, + { url = "https://files.pythonhosted.org/packages/a9/44/fb5e067a728a4df73a30863973912ba6eb01f3d910caaf129ef789ca222d/greenlet-3.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e61d426969b68b2170a9f853cc36d5318030494576e9ec0bfe2dc2e2afa15a68", size = 646118 }, + { url = "https://files.pythonhosted.org/packages/f0/3e/f329b452869d8bc07dbaa112c0175de5e666a7d15eb243781481fb59b863/greenlet-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04e781447a4722e30b4861af728cb878d73a3df79509dc19ea498090cea5d204", size = 648079 }, + { url = "https://files.pythonhosted.org/packages/56/e5/813a2e8e842289579391cbd3ae6e6e6a3d2fcad8bdd89bd549a4035ab057/greenlet-3.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2392cc41eeed4055978c6b52549ccd9effd263bb780ffd639c0e1e7e2055ab0", size = 603825 }, + { url = "https://files.pythonhosted.org/packages/4a/11/0bad66138622d0c1463b0b87935cefd397f9f04fac325a838525a3aa4da7/greenlet-3.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:430cba962c85e339767235a93450a6aaffed6f9c567e73874ea2075f5aae51e1", size = 1119582 }, + { url = "https://files.pythonhosted.org/packages/17/26/0f8a4d222b9014af88bb8b5d921305308dd44de667c01714817dc9fb91fb/greenlet-3.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5e57ff52315bfc0c5493917f328b8ba3ae0c0515d94524453c4d24e7638cbb53", size = 1147452 }, + { url = "https://files.pythonhosted.org/packages/8a/d4/70d262492338c4939f97dca310c45b002a3af84b265720f0e9b135bc85b2/greenlet-3.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:211a9721f540e454a02e62db7956263e9a28a6cf776d4b9a7213844e36426333", size = 296217 }, + { url = "https://files.pythonhosted.org/packages/c9/43/c0b655d4d7eae19282b028bcec449e5c80626ad0d8d0ca3703f9b1c29258/greenlet-3.2.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:b86a3ccc865ae601f446af042707b749eebc297928ea7bd0c5f60c56525850be", size = 269131 }, + { url = "https://files.pythonhosted.org/packages/7c/7d/c8f51c373c7f7ac0f73d04a6fd77ab34f6f643cb41a0d186d05ba96708e7/greenlet-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:144283ad88ed77f3ebd74710dd419b55dd15d18704b0ae05935766a93f5671c5", size = 637323 }, + { url = "https://files.pythonhosted.org/packages/89/65/c3ee41b2e56586737d6e124b250583695628ffa6b324855b3a1267a8d1d9/greenlet-3.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5be69cd50994b8465c3ad1467f9e63001f76e53a89440ad4440d1b6d52591280", size = 651430 }, + { url = "https://files.pythonhosted.org/packages/f0/07/33bd7a3dcde1db7259371d026ce76be1eb653d2d892334fc79a500b3c5ee/greenlet-3.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47aeadd1e8fbdef8fdceb8fb4edc0cbb398a57568d56fd68f2bc00d0d809e6b6", size = 645798 }, + { url = "https://files.pythonhosted.org/packages/35/5b/33c221a6a867030b0b770513a1b78f6c30e04294131dafdc8da78906bbe6/greenlet-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18adc14ab154ca6e53eecc9dc50ff17aeb7ba70b7e14779b26e16d71efa90038", size = 648271 }, + { url = "https://files.pythonhosted.org/packages/4d/dd/d6452248fa6093504e3b7525dc2bdc4e55a4296ec6ee74ba241a51d852e2/greenlet-3.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8622b33d8694ec373ad55050c3d4e49818132b44852158442e1931bb02af336", size = 606779 }, + { url = "https://files.pythonhosted.org/packages/9d/24/160f04d2589bcb15b8661dcd1763437b22e01643626899a4139bf98f02af/greenlet-3.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e8ac9a2c20fbff3d0b853e9ef705cdedb70d9276af977d1ec1cde86a87a4c821", size = 1117968 }, + { url = "https://files.pythonhosted.org/packages/6c/ff/c6e3f3a5168fef5209cfd9498b2b5dd77a0bf29dfc686a03dcc614cf4432/greenlet-3.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:cd37273dc7ca1d5da149b58c8b3ce0711181672ba1b09969663905a765affe21", size = 1145510 }, + { url = "https://files.pythonhosted.org/packages/dc/62/5215e374819052e542b5bde06bd7d4a171454b6938c96a2384f21cb94279/greenlet-3.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8a8940a8d301828acd8b9f3f85db23069a692ff2933358861b19936e29946b95", size = 296004 }, + { url = "https://files.pythonhosted.org/packages/62/6d/dc9c909cba5cbf4b0833fce69912927a8ca74791c23c47b9fd4f28092108/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee59db626760f1ca8da697a086454210d36a19f7abecc9922a2374c04b47735b", size = 629900 }, + { url = "https://files.pythonhosted.org/packages/5e/a9/f3f304fbbbd604858ff3df303d7fa1d8f7f9e45a6ef74481aaf03aaac021/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7154b13ef87a8b62fc05419f12d75532d7783586ad016c57b5de8a1c6feeb517", size = 635270 }, + { url = "https://files.pythonhosted.org/packages/34/92/4b7b4e2e23ecc723cceef9fe3898e78c8e14e106cc7ba2f276a66161da3e/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:199453d64b02d0c9d139e36d29681efd0e407ed8e2c0bf89d88878d6a787c28f", size = 632534 }, + { url = "https://files.pythonhosted.org/packages/da/7f/91f0ecbe72c9d789fb7f400b39da9d1e87fcc2cf8746a9636479ba79ab01/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0010e928e1901d36625f21d008618273f9dda26b516dbdecf873937d39c9dff0", size = 628826 }, + { url = "https://files.pythonhosted.org/packages/9f/59/e449a44ce52b13751f55376d85adc155dd311608f6d2aa5b6bd2c8d15486/greenlet-3.2.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6005f7a86de836a1dc4b8d824a2339cdd5a1ca7cb1af55ea92575401f9952f4c", size = 593697 }, + { url = "https://files.pythonhosted.org/packages/bb/09/cca3392927c5c990b7a8ede64ccd0712808438d6490d63ce6b8704d6df5f/greenlet-3.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:17fd241c0d50bacb7ce8ff77a30f94a2d0ca69434ba2e0187cf95a5414aeb7e1", size = 1105762 }, + { url = "https://files.pythonhosted.org/packages/4d/b9/3d201f819afc3b7a8cd7ebe645f1a17799603e2d62c968154518f79f4881/greenlet-3.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:7b17a26abc6a1890bf77d5d6b71c0999705386b00060d15c10b8182679ff2790", size = 1125173 }, + { url = "https://files.pythonhosted.org/packages/80/7b/773a30602234597fc2882091f8e1d1a38ea0b4419d99ca7ed82c827e2c3a/greenlet-3.2.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:397b6bbda06f8fe895893d96218cd6f6d855a6701dc45012ebe12262423cec8b", size = 269908 }, +] + [[package]] name = "h11" version = "0.14.0" @@ -617,6 +808,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, ] +[[package]] +name = "importlib-metadata" +version = "8.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", size = 26971 }, +] + [[package]] name = "iniconfig" version = "2.1.0" @@ -626,6 +829,95 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython", version = "8.35.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipython" +version = "8.35.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/77/7d1501e8b539b179936e0d5969b578ed23887be0ab8c63e0120b825bda3e/ipython-8.35.0.tar.gz", hash = "sha256:d200b7d93c3f5883fc36ab9ce28a18249c7706e51347681f80a0aef9895f2520", size = 5605027 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/bf/17ffca8c8b011d0bac90adb5d4e720cb3ae1fe5ccfdfc14ca31f827ee320/ipython-8.35.0-py3-none-any.whl", hash = "sha256:e6b7470468ba6f1f0a7b116bb688a3ece2f13e2f94138e508201fad677a788ba", size = 830880 }, +] + +[[package]] +name = "ipython" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/9a/6b8984bedc990f3a4aa40ba8436dea27e23d26a64527de7c2e5e12e76841/ipython-9.1.0.tar.gz", hash = "sha256:a47e13a5e05e02f3b8e1e7a0f9db372199fe8c3763532fe7a1e0379e4e135f16", size = 4373688 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/9d/4ff2adf55d1b6e3777b0303fdbe5b723f76e46cba4a53a32fe82260d2077/ipython-9.1.0-py3-none-any.whl", hash = "sha256:2df07257ec2f84a6b346b8d83100bcf8fa501c6e01ab75cd3799b0bb253b3d2a", size = 604053 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + [[package]] name = "jax" version = "0.6.0" @@ -672,6 +964,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/c5/15dfc92b98f3d14eb3c50934f1293dc141c0e9ed4e66cd43833fd72cd131/jaxlib-0.6.0-cp313-cp313t-manylinux2014_x86_64.whl", hash = "sha256:63106d4e38aec5e4285c8de85e8cddcbb40084c077d07ac03778d3a2bcfa3aae", size = 87894402 }, ] +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -693,6 +997,82 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256 }, ] +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 }, +] + +[[package]] +name = "jupyter-cache" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "importlib-metadata" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pyyaml" }, + { name = "sqlalchemy" }, + { name = "tabulate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/f7/3627358075f183956e8c4974603232b03afd4ddc7baf72c2bc9fff522291/jupyter_cache-1.0.1.tar.gz", hash = "sha256:16e808eb19e3fb67a223db906e131ea6e01f03aa27f49a7214ce6a5fec186fb9", size = 32048 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/6b/67b87da9d36bff9df7d0efbd1a325fa372a43be7158effaf43ed7b22341d/jupyter_cache-1.0.1-py3-none-any.whl", hash = "sha256:9c3cafd825ba7da8b5830485343091143dff903e4d8c69db9349b728b140abf6", size = 33907 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, +] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -763,6 +1143,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + [[package]] name = "mdit-py-plugins" version = "0.4.2" @@ -963,6 +1355,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400 }, ] +[[package]] +name = "myst-nb" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "ipykernel" }, + { name = "ipython", version = "8.35.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jupyter-cache" }, + { name = "myst-parser" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pyyaml" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/8f/71d983ed85b1aff17db25e447a9beb67b50a9116c7cff5cde26796d1ffd0/myst_nb-1.2.0.tar.gz", hash = "sha256:af459ec753b341952182b45b0a80b4776cebf80c9ee6aaca2a3f4027b440c9de", size = 79446 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/98/fa9dee0caf4e1f2e895d047952bf84a64eb95102df14c82c20594c0afa5f/myst_nb-1.2.0-py3-none-any.whl", hash = "sha256:0e09909877848c0cf45e1aecee97481512efa29a0c4caa37870a03bba11c56c1", size = 80303 }, +] + [[package]] name = "myst-parser" version = "4.0.1" @@ -981,6 +1396,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579 }, ] +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + [[package]] name = "nodeenv" version = "1.9.1" @@ -1070,6 +1524,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + [[package]] name = "pip" version = "25.0.1" @@ -1113,6 +1588,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, ] +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 }, +] + [[package]] name = "propcache" version = "0.3.1" @@ -1202,6 +1689,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b8/d3/c3cb8f1d6ae3b37f83e1de806713a9b3642c5895f0215a62e1a4bd6e5e34/propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", size = 12376 }, ] +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + [[package]] name = "pybase64" version = "1.4.1" @@ -1307,6 +1827,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/d7/0987f3d1c8196ad9affea9102c135a45342e1fa5affb849bf31bd633d000/pybase64-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:1a18644fb3e940ed622738f2ee14d9a2811bb542ffd3f85c3fb661130675ac4f", size = 36817 }, ] +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + [[package]] name = "pydantic" version = "2.11.0" @@ -1523,6 +2052,93 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] +[[package]] +name = "pyzmq" +version = "26.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/11/b9213d25230ac18a71b39b3723494e57adebe36e066397b961657b3b41c1/pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d", size = 278293 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/b8/af1d814ffc3ff9730f9a970cbf216b6f078e5d251a25ef5201d7bc32a37c/pyzmq-26.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918", size = 1339238 }, + { url = "https://files.pythonhosted.org/packages/ee/e4/5aafed4886c264f2ea6064601ad39c5fc4e9b6539c6ebe598a859832eeee/pyzmq-26.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315", size = 672848 }, + { url = "https://files.pythonhosted.org/packages/79/39/026bf49c721cb42f1ef3ae0ee3d348212a7621d2adb739ba97599b6e4d50/pyzmq-26.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d52d62edc96787f5c1dfa6c6ccff9b581cfae5a70d94ec4c8da157656c73b5b", size = 911299 }, + { url = "https://files.pythonhosted.org/packages/03/23/b41f936a9403b8f92325c823c0f264c6102a0687a99c820f1aaeb99c1def/pyzmq-26.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1410c3a3705db68d11eb2424d75894d41cff2f64d948ffe245dd97a9debfebf4", size = 867920 }, + { url = "https://files.pythonhosted.org/packages/c1/3e/2de5928cdadc2105e7c8f890cc5f404136b41ce5b6eae5902167f1d5641c/pyzmq-26.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7dacb06a9c83b007cc01e8e5277f94c95c453c5851aac5e83efe93e72226353f", size = 862514 }, + { url = "https://files.pythonhosted.org/packages/ce/57/109569514dd32e05a61d4382bc88980c95bfd2f02e58fea47ec0ccd96de1/pyzmq-26.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6bab961c8c9b3a4dc94d26e9b2cdf84de9918931d01d6ff38c721a83ab3c0ef5", size = 1204494 }, + { url = "https://files.pythonhosted.org/packages/aa/02/dc51068ff2ca70350d1151833643a598625feac7b632372d229ceb4de3e1/pyzmq-26.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a5c09413b924d96af2aa8b57e76b9b0058284d60e2fc3730ce0f979031d162a", size = 1514525 }, + { url = "https://files.pythonhosted.org/packages/48/2a/a7d81873fff0645eb60afaec2b7c78a85a377af8f1d911aff045d8955bc7/pyzmq-26.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d489ac234d38e57f458fdbd12a996bfe990ac028feaf6f3c1e81ff766513d3b", size = 1414659 }, + { url = "https://files.pythonhosted.org/packages/ef/ea/813af9c42ae21845c1ccfe495bd29c067622a621e85d7cda6bc437de8101/pyzmq-26.4.0-cp310-cp310-win32.whl", hash = "sha256:dea1c8db78fb1b4b7dc9f8e213d0af3fc8ecd2c51a1d5a3ca1cde1bda034a980", size = 580348 }, + { url = "https://files.pythonhosted.org/packages/20/68/318666a89a565252c81d3fed7f3b4c54bd80fd55c6095988dfa2cd04a62b/pyzmq-26.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:fa59e1f5a224b5e04dc6c101d7186058efa68288c2d714aa12d27603ae93318b", size = 643838 }, + { url = "https://files.pythonhosted.org/packages/91/f8/fb1a15b5f4ecd3e588bfde40c17d32ed84b735195b5c7d1d7ce88301a16f/pyzmq-26.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:a651fe2f447672f4a815e22e74630b6b1ec3a1ab670c95e5e5e28dcd4e69bbb5", size = 559565 }, + { url = "https://files.pythonhosted.org/packages/32/6d/234e3b0aa82fd0290b1896e9992f56bdddf1f97266110be54d0177a9d2d9/pyzmq-26.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:bfcf82644c9b45ddd7cd2a041f3ff8dce4a0904429b74d73a439e8cab1bd9e54", size = 1339723 }, + { url = "https://files.pythonhosted.org/packages/4f/11/6d561efe29ad83f7149a7cd48e498e539ed09019c6cd7ecc73f4cc725028/pyzmq-26.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9bcae3979b2654d5289d3490742378b2f3ce804b0b5fd42036074e2bf35b030", size = 672645 }, + { url = "https://files.pythonhosted.org/packages/19/fd/81bfe3e23f418644660bad1a90f0d22f0b3eebe33dd65a79385530bceb3d/pyzmq-26.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccdff8ac4246b6fb60dcf3982dfaeeff5dd04f36051fe0632748fc0aa0679c01", size = 910133 }, + { url = "https://files.pythonhosted.org/packages/97/68/321b9c775595ea3df832a9516252b653fe32818db66fdc8fa31c9b9fce37/pyzmq-26.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4550af385b442dc2d55ab7717837812799d3674cb12f9a3aa897611839c18e9e", size = 867428 }, + { url = "https://files.pythonhosted.org/packages/4e/6e/159cbf2055ef36aa2aa297e01b24523176e5b48ead283c23a94179fb2ba2/pyzmq-26.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f7ffe9db1187a253fca95191854b3fda24696f086e8789d1d449308a34b88", size = 862409 }, + { url = "https://files.pythonhosted.org/packages/05/1c/45fb8db7be5a7d0cadea1070a9cbded5199a2d578de2208197e592f219bd/pyzmq-26.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3709c9ff7ba61589b7372923fd82b99a81932b592a5c7f1a24147c91da9a68d6", size = 1205007 }, + { url = "https://files.pythonhosted.org/packages/f8/fa/658c7f583af6498b463f2fa600f34e298e1b330886f82f1feba0dc2dd6c3/pyzmq-26.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f8f3c30fb2d26ae5ce36b59768ba60fb72507ea9efc72f8f69fa088450cff1df", size = 1514599 }, + { url = "https://files.pythonhosted.org/packages/4d/d7/44d641522353ce0a2bbd150379cb5ec32f7120944e6bfba4846586945658/pyzmq-26.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:382a4a48c8080e273427fc692037e3f7d2851959ffe40864f2db32646eeb3cef", size = 1414546 }, + { url = "https://files.pythonhosted.org/packages/72/76/c8ed7263218b3d1e9bce07b9058502024188bd52cc0b0a267a9513b431fc/pyzmq-26.4.0-cp311-cp311-win32.whl", hash = "sha256:d56aad0517d4c09e3b4f15adebba8f6372c5102c27742a5bdbfc74a7dceb8fca", size = 579247 }, + { url = "https://files.pythonhosted.org/packages/c3/d0/2d9abfa2571a0b1a67c0ada79a8aa1ba1cce57992d80f771abcdf99bb32c/pyzmq-26.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:963977ac8baed7058c1e126014f3fe58b3773f45c78cce7af5c26c09b6823896", size = 644727 }, + { url = "https://files.pythonhosted.org/packages/0d/d1/c8ad82393be6ccedfc3c9f3adb07f8f3976e3c4802640fe3f71441941e70/pyzmq-26.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0c8e8cadc81e44cc5088fcd53b9b3b4ce9344815f6c4a03aec653509296fae3", size = 559942 }, + { url = "https://files.pythonhosted.org/packages/10/44/a778555ebfdf6c7fc00816aad12d185d10a74d975800341b1bc36bad1187/pyzmq-26.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5227cb8da4b6f68acfd48d20c588197fd67745c278827d5238c707daf579227b", size = 1341586 }, + { url = "https://files.pythonhosted.org/packages/9c/4f/f3a58dc69ac757e5103be3bd41fb78721a5e17da7cc617ddb56d973a365c/pyzmq-26.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1c07a7fa7f7ba86554a2b1bef198c9fed570c08ee062fd2fd6a4dcacd45f905", size = 665880 }, + { url = "https://files.pythonhosted.org/packages/fe/45/50230bcfb3ae5cb98bee683b6edeba1919f2565d7cc1851d3c38e2260795/pyzmq-26.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae775fa83f52f52de73183f7ef5395186f7105d5ed65b1ae65ba27cb1260de2b", size = 902216 }, + { url = "https://files.pythonhosted.org/packages/41/59/56bbdc5689be5e13727491ad2ba5efd7cd564365750514f9bc8f212eef82/pyzmq-26.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66c760d0226ebd52f1e6b644a9e839b5db1e107a23f2fcd46ec0569a4fdd4e63", size = 859814 }, + { url = "https://files.pythonhosted.org/packages/81/b1/57db58cfc8af592ce94f40649bd1804369c05b2190e4cbc0a2dad572baeb/pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ef8c6ecc1d520debc147173eaa3765d53f06cd8dbe7bd377064cdbc53ab456f5", size = 855889 }, + { url = "https://files.pythonhosted.org/packages/e8/92/47542e629cbac8f221c230a6d0f38dd3d9cff9f6f589ed45fdf572ffd726/pyzmq-26.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3150ef4084e163dec29ae667b10d96aad309b668fac6810c9e8c27cf543d6e0b", size = 1197153 }, + { url = "https://files.pythonhosted.org/packages/07/e5/b10a979d1d565d54410afc87499b16c96b4a181af46e7645ab4831b1088c/pyzmq-26.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4448c9e55bf8329fa1dcedd32f661bf611214fa70c8e02fee4347bc589d39a84", size = 1507352 }, + { url = "https://files.pythonhosted.org/packages/ab/58/5a23db84507ab9c01c04b1232a7a763be66e992aa2e66498521bbbc72a71/pyzmq-26.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e07dde3647afb084d985310d067a3efa6efad0621ee10826f2cb2f9a31b89d2f", size = 1406834 }, + { url = "https://files.pythonhosted.org/packages/22/74/aaa837b331580c13b79ac39396601fb361454ee184ca85e8861914769b99/pyzmq-26.4.0-cp312-cp312-win32.whl", hash = "sha256:ba034a32ecf9af72adfa5ee383ad0fd4f4e38cdb62b13624278ef768fe5b5b44", size = 577992 }, + { url = "https://files.pythonhosted.org/packages/30/0f/55f8c02c182856743b82dde46b2dc3e314edda7f1098c12a8227eeda0833/pyzmq-26.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be", size = 640466 }, + { url = "https://files.pythonhosted.org/packages/e4/29/073779afc3ef6f830b8de95026ef20b2d1ec22d0324d767748d806e57379/pyzmq-26.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f23c750e485ce1eb639dbd576d27d168595908aa2d60b149e2d9e34c9df40e0", size = 556342 }, + { url = "https://files.pythonhosted.org/packages/d7/20/fb2c92542488db70f833b92893769a569458311a76474bda89dc4264bd18/pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3", size = 1339484 }, + { url = "https://files.pythonhosted.org/packages/58/29/2f06b9cabda3a6ea2c10f43e67ded3e47fc25c54822e2506dfb8325155d4/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43", size = 666106 }, + { url = "https://files.pythonhosted.org/packages/77/e4/dcf62bd29e5e190bd21bfccaa4f3386e01bf40d948c239239c2f1e726729/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6", size = 902056 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/b36b3d7aea236087d20189bec1a87eeb2b66009731d7055e5c65f845cdba/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e", size = 860148 }, + { url = "https://files.pythonhosted.org/packages/18/a6/f048826bc87528c208e90604c3bf573801e54bd91e390cbd2dfa860e82dc/pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771", size = 855983 }, + { url = "https://files.pythonhosted.org/packages/0a/27/454d34ab6a1d9772a36add22f17f6b85baf7c16e14325fa29e7202ca8ee8/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30", size = 1197274 }, + { url = "https://files.pythonhosted.org/packages/f4/3d/7abfeab6b83ad38aa34cbd57c6fc29752c391e3954fd12848bd8d2ec0df6/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86", size = 1507120 }, + { url = "https://files.pythonhosted.org/packages/13/ff/bc8d21dbb9bc8705126e875438a1969c4f77e03fc8565d6901c7933a3d01/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101", size = 1406738 }, + { url = "https://files.pythonhosted.org/packages/f5/5d/d4cd85b24de71d84d81229e3bbb13392b2698432cf8fdcea5afda253d587/pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637", size = 577826 }, + { url = "https://files.pythonhosted.org/packages/c6/6c/f289c1789d7bb6e5a3b3bef7b2a55089b8561d17132be7d960d3ff33b14e/pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b", size = 640406 }, + { url = "https://files.pythonhosted.org/packages/b3/99/676b8851cb955eb5236a0c1e9ec679ea5ede092bf8bf2c8a68d7e965cac3/pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08", size = 556216 }, + { url = "https://files.pythonhosted.org/packages/65/c2/1fac340de9d7df71efc59d9c50fc7a635a77b103392d1842898dd023afcb/pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4", size = 1333769 }, + { url = "https://files.pythonhosted.org/packages/5c/c7/6c03637e8d742c3b00bec4f5e4cd9d1c01b2f3694c6f140742e93ca637ed/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a", size = 658826 }, + { url = "https://files.pythonhosted.org/packages/a5/97/a8dca65913c0f78e0545af2bb5078aebfc142ca7d91cdaffa1fbc73e5dbd/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b", size = 891650 }, + { url = "https://files.pythonhosted.org/packages/7d/7e/f63af1031eb060bf02d033732b910fe48548dcfdbe9c785e9f74a6cc6ae4/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d", size = 849776 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/1a009ce582802a895c0d5fe9413f029c940a0a8ee828657a3bb0acffd88b/pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf", size = 842516 }, + { url = "https://files.pythonhosted.org/packages/6e/bc/f88b0bad0f7a7f500547d71e99f10336f2314e525d4ebf576a1ea4a1d903/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c", size = 1189183 }, + { url = "https://files.pythonhosted.org/packages/d9/8c/db446a3dd9cf894406dec2e61eeffaa3c07c3abb783deaebb9812c4af6a5/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8", size = 1495501 }, + { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540 }, + { url = "https://files.pythonhosted.org/packages/47/03/96004704a84095f493be8d2b476641f5c967b269390173f85488a53c1c13/pyzmq-26.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:98d948288ce893a2edc5ec3c438fe8de2daa5bbbd6e2e865ec5f966e237084ba", size = 834408 }, + { url = "https://files.pythonhosted.org/packages/e4/7f/68d8f3034a20505db7551cb2260248be28ca66d537a1ac9a257913d778e4/pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f34f5c9e0203ece706a1003f1492a56c06c0632d86cb77bcfe77b56aacf27b", size = 569580 }, + { url = "https://files.pythonhosted.org/packages/9b/a6/2b0d6801ec33f2b2a19dd8d02e0a1e8701000fec72926e6787363567d30c/pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80c9b48aef586ff8b698359ce22f9508937c799cc1d2c9c2f7c95996f2300c94", size = 798250 }, + { url = "https://files.pythonhosted.org/packages/96/2a/0322b3437de977dcac8a755d6d7ce6ec5238de78e2e2d9353730b297cf12/pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f2a5b74009fd50b53b26f65daff23e9853e79aa86e0aa08a53a7628d92d44a", size = 756758 }, + { url = "https://files.pythonhosted.org/packages/c2/33/43704f066369416d65549ccee366cc19153911bec0154da7c6b41fca7e78/pyzmq-26.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:61c5f93d7622d84cb3092d7f6398ffc77654c346545313a3737e266fc11a3beb", size = 555371 }, + { url = "https://files.pythonhosted.org/packages/04/52/a70fcd5592715702248306d8e1729c10742c2eac44529984413b05c68658/pyzmq-26.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4478b14cb54a805088299c25a79f27eaf530564a7a4f72bf432a040042b554eb", size = 834405 }, + { url = "https://files.pythonhosted.org/packages/25/f9/1a03f1accff16b3af1a6fa22cbf7ced074776abbf688b2e9cb4629700c62/pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a28ac29c60e4ba84b5f58605ace8ad495414a724fe7aceb7cf06cd0598d04e1", size = 569578 }, + { url = "https://files.pythonhosted.org/packages/76/0c/3a633acd762aa6655fcb71fa841907eae0ab1e8582ff494b137266de341d/pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b03c1ceea27c6520124f4fb2ba9c647409b9abdf9a62388117148a90419494", size = 798248 }, + { url = "https://files.pythonhosted.org/packages/cd/cc/6c99c84aa60ac1cc56747bed6be8ce6305b9b861d7475772e7a25ce019d3/pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7731abd23a782851426d4e37deb2057bf9410848a4459b5ede4fe89342e687a9", size = 756757 }, + { url = "https://files.pythonhosted.org/packages/13/9c/d8073bd898eb896e94c679abe82e47506e2b750eb261cf6010ced869797c/pyzmq-26.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a222ad02fbe80166b0526c038776e8042cd4e5f0dec1489a006a1df47e9040e0", size = 555371 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + [[package]] name = "requests" version = "2.32.3" @@ -1561,6 +2177,102 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 }, ] +[[package]] +name = "rpds-py" +version = "0.24.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/b3/52b213298a0ba7097c7ea96bee95e1947aa84cc816d48cebb539770cdf41/rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", size = 26863 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/21/cbc43b220c9deb536b07fbd598c97d463bbb7afb788851891252fc920742/rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724", size = 377531 }, + { url = "https://files.pythonhosted.org/packages/42/15/cc4b09ef160483e49c3aab3b56f3d375eadf19c87c48718fb0147e86a446/rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b", size = 362273 }, + { url = "https://files.pythonhosted.org/packages/8c/a2/67718a188a88dbd5138d959bed6efe1cc7413a4caa8283bd46477ed0d1ad/rpds_py-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727", size = 388111 }, + { url = "https://files.pythonhosted.org/packages/e5/e6/cbf1d3163405ad5f4a1a6d23f80245f2204d0c743b18525f34982dec7f4d/rpds_py-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964", size = 394447 }, + { url = "https://files.pythonhosted.org/packages/21/bb/4fe220ccc8a549b38b9e9cec66212dc3385a82a5ee9e37b54411cce4c898/rpds_py-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5", size = 448028 }, + { url = "https://files.pythonhosted.org/packages/a5/41/d2d6e0fd774818c4cadb94185d30cf3768de1c2a9e0143fc8bc6ce59389e/rpds_py-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664", size = 447410 }, + { url = "https://files.pythonhosted.org/packages/a7/a7/6d04d438f53d8bb2356bb000bea9cf5c96a9315e405b577117e344cc7404/rpds_py-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc", size = 389531 }, + { url = "https://files.pythonhosted.org/packages/23/be/72e6df39bd7ca5a66799762bf54d8e702483fdad246585af96723109d486/rpds_py-0.24.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0", size = 420099 }, + { url = "https://files.pythonhosted.org/packages/8c/c9/ca100cd4688ee0aa266197a5cb9f685231676dd7d573041ca53787b23f4e/rpds_py-0.24.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f", size = 564950 }, + { url = "https://files.pythonhosted.org/packages/05/98/908cd95686d33b3ac8ac2e582d7ae38e2c3aa2c0377bf1f5663bafd1ffb2/rpds_py-0.24.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f", size = 591778 }, + { url = "https://files.pythonhosted.org/packages/7b/ac/e143726f1dd3215efcb974b50b03bd08a8a1556b404a0a7872af6d197e57/rpds_py-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875", size = 560421 }, + { url = "https://files.pythonhosted.org/packages/60/28/add1c1d2fcd5aa354f7225d036d4492261759a22d449cff14841ef36a514/rpds_py-0.24.0-cp310-cp310-win32.whl", hash = "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07", size = 222089 }, + { url = "https://files.pythonhosted.org/packages/b0/ac/81f8066c6de44c507caca488ba336ae30d35d57f61fe10578824d1a70196/rpds_py-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052", size = 234622 }, + { url = "https://files.pythonhosted.org/packages/80/e6/c1458bbfb257448fdb2528071f1f4e19e26798ed5ef6d47d7aab0cb69661/rpds_py-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef", size = 377679 }, + { url = "https://files.pythonhosted.org/packages/dd/26/ea4181ef78f58b2c167548c6a833d7dc22408e5b3b181bda9dda440bb92d/rpds_py-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97", size = 362571 }, + { url = "https://files.pythonhosted.org/packages/56/fa/1ec54dd492c64c280a2249a047fc3369e2789dc474eac20445ebfc72934b/rpds_py-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e", size = 388012 }, + { url = "https://files.pythonhosted.org/packages/3a/be/bad8b0e0f7e58ef4973bb75e91c472a7d51da1977ed43b09989264bf065c/rpds_py-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d", size = 394730 }, + { url = "https://files.pythonhosted.org/packages/35/56/ab417fc90c21826df048fc16e55316ac40876e4b790104ececcbce813d8f/rpds_py-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586", size = 448264 }, + { url = "https://files.pythonhosted.org/packages/b6/75/4c63862d5c05408589196c8440a35a14ea4ae337fa70ded1f03638373f06/rpds_py-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4", size = 446813 }, + { url = "https://files.pythonhosted.org/packages/e7/0c/91cf17dffa9a38835869797a9f041056091ebba6a53963d3641207e3d467/rpds_py-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae", size = 389438 }, + { url = "https://files.pythonhosted.org/packages/1b/b0/60e6c72727c978276e02851819f3986bc40668f115be72c1bc4d922c950f/rpds_py-0.24.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc", size = 420416 }, + { url = "https://files.pythonhosted.org/packages/a1/d7/f46f85b9f863fb59fd3c534b5c874c48bee86b19e93423b9da8784605415/rpds_py-0.24.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c", size = 565236 }, + { url = "https://files.pythonhosted.org/packages/2a/d1/1467620ded6dd70afc45ec822cdf8dfe7139537780d1f3905de143deb6fd/rpds_py-0.24.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c", size = 592016 }, + { url = "https://files.pythonhosted.org/packages/5d/13/fb1ded2e6adfaa0c0833106c42feb290973f665300f4facd5bf5d7891d9c/rpds_py-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718", size = 560123 }, + { url = "https://files.pythonhosted.org/packages/1e/df/09fc1857ac7cc2eb16465a7199c314cbce7edde53c8ef21d615410d7335b/rpds_py-0.24.0-cp311-cp311-win32.whl", hash = "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a", size = 222256 }, + { url = "https://files.pythonhosted.org/packages/ff/25/939b40bc4d54bf910e5ee60fb5af99262c92458f4948239e8c06b0b750e7/rpds_py-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6", size = 234718 }, + { url = "https://files.pythonhosted.org/packages/1a/e0/1c55f4a3be5f1ca1a4fd1f3ff1504a1478c1ed48d84de24574c4fa87e921/rpds_py-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205", size = 366945 }, + { url = "https://files.pythonhosted.org/packages/39/1b/a3501574fbf29118164314dbc800d568b8c1c7b3258b505360e8abb3902c/rpds_py-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7", size = 351935 }, + { url = "https://files.pythonhosted.org/packages/dc/47/77d3d71c55f6a374edde29f1aca0b2e547325ed00a9da820cabbc9497d2b/rpds_py-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9", size = 390817 }, + { url = "https://files.pythonhosted.org/packages/4e/ec/1e336ee27484379e19c7f9cc170f4217c608aee406d3ae3a2e45336bff36/rpds_py-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e", size = 401983 }, + { url = "https://files.pythonhosted.org/packages/07/f8/39b65cbc272c635eaea6d393c2ad1ccc81c39eca2db6723a0ca4b2108fce/rpds_py-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda", size = 451719 }, + { url = "https://files.pythonhosted.org/packages/32/05/05c2b27dd9c30432f31738afed0300659cb9415db0ff7429b05dfb09bbde/rpds_py-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e", size = 442546 }, + { url = "https://files.pythonhosted.org/packages/7d/e0/19383c8b5d509bd741532a47821c3e96acf4543d0832beba41b4434bcc49/rpds_py-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029", size = 393695 }, + { url = "https://files.pythonhosted.org/packages/9d/15/39f14e96d94981d0275715ae8ea564772237f3fa89bc3c21e24de934f2c7/rpds_py-0.24.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9", size = 427218 }, + { url = "https://files.pythonhosted.org/packages/22/b9/12da7124905a680f690da7a9de6f11de770b5e359f5649972f7181c8bf51/rpds_py-0.24.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7", size = 568062 }, + { url = "https://files.pythonhosted.org/packages/88/17/75229017a2143d915f6f803721a6d721eca24f2659c5718a538afa276b4f/rpds_py-0.24.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91", size = 596262 }, + { url = "https://files.pythonhosted.org/packages/aa/64/8e8a1d8bd1b6b638d6acb6d41ab2cec7f2067a5b8b4c9175703875159a7c/rpds_py-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56", size = 564306 }, + { url = "https://files.pythonhosted.org/packages/68/1c/a7eac8d8ed8cb234a9b1064647824c387753343c3fab6ed7c83481ed0be7/rpds_py-0.24.0-cp312-cp312-win32.whl", hash = "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30", size = 224281 }, + { url = "https://files.pythonhosted.org/packages/bb/46/b8b5424d1d21f2f2f3f2d468660085318d4f74a8df8289e3dd6ad224d488/rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", size = 239719 }, + { url = "https://files.pythonhosted.org/packages/9d/c3/3607abc770395bc6d5a00cb66385a5479fb8cd7416ddef90393b17ef4340/rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", size = 367072 }, + { url = "https://files.pythonhosted.org/packages/d8/35/8c7ee0fe465793e3af3298dc5a9f3013bd63e7a69df04ccfded8293a4982/rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", size = 351919 }, + { url = "https://files.pythonhosted.org/packages/91/d3/7e1b972501eb5466b9aca46a9c31bcbbdc3ea5a076e9ab33f4438c1d069d/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", size = 390360 }, + { url = "https://files.pythonhosted.org/packages/a2/a8/ccabb50d3c91c26ad01f9b09a6a3b03e4502ce51a33867c38446df9f896b/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", size = 400704 }, + { url = "https://files.pythonhosted.org/packages/53/ae/5fa5bf0f3bc6ce21b5ea88fc0ecd3a439e7cb09dd5f9ffb3dbe1b6894fc5/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", size = 450839 }, + { url = "https://files.pythonhosted.org/packages/e3/ac/c4e18b36d9938247e2b54f6a03746f3183ca20e1edd7d3654796867f5100/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", size = 441494 }, + { url = "https://files.pythonhosted.org/packages/bf/08/b543969c12a8f44db6c0f08ced009abf8f519191ca6985509e7c44102e3c/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", size = 393185 }, + { url = "https://files.pythonhosted.org/packages/da/7e/f6eb6a7042ce708f9dfc781832a86063cea8a125bbe451d663697b51944f/rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", size = 426168 }, + { url = "https://files.pythonhosted.org/packages/38/b0/6cd2bb0509ac0b51af4bb138e145b7c4c902bb4b724d6fd143689d6e0383/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", size = 567622 }, + { url = "https://files.pythonhosted.org/packages/64/b0/c401f4f077547d98e8b4c2ec6526a80e7cb04f519d416430ec1421ee9e0b/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", size = 595435 }, + { url = "https://files.pythonhosted.org/packages/9f/ec/7993b6e803294c87b61c85bd63e11142ccfb2373cf88a61ec602abcbf9d6/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", size = 563762 }, + { url = "https://files.pythonhosted.org/packages/1f/29/4508003204cb2f461dc2b83dd85f8aa2b915bc98fe6046b9d50d4aa05401/rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", size = 223510 }, + { url = "https://files.pythonhosted.org/packages/f9/12/09e048d1814195e01f354155fb772fb0854bd3450b5f5a82224b3a319f0e/rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", size = 239075 }, + { url = "https://files.pythonhosted.org/packages/d2/03/5027cde39bb2408d61e4dd0cf81f815949bb629932a6c8df1701d0257fc4/rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", size = 362974 }, + { url = "https://files.pythonhosted.org/packages/bf/10/24d374a2131b1ffafb783e436e770e42dfdb74b69a2cd25eba8c8b29d861/rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", size = 348730 }, + { url = "https://files.pythonhosted.org/packages/7a/d1/1ef88d0516d46cd8df12e5916966dbf716d5ec79b265eda56ba1b173398c/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", size = 387627 }, + { url = "https://files.pythonhosted.org/packages/4e/35/07339051b8b901ecefd449ebf8e5522e92bcb95e1078818cbfd9db8e573c/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", size = 394094 }, + { url = "https://files.pythonhosted.org/packages/dc/62/ee89ece19e0ba322b08734e95441952062391065c157bbd4f8802316b4f1/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", size = 449639 }, + { url = "https://files.pythonhosted.org/packages/15/24/b30e9f9e71baa0b9dada3a4ab43d567c6b04a36d1cb531045f7a8a0a7439/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", size = 438584 }, + { url = "https://files.pythonhosted.org/packages/28/d9/49f7b8f3b4147db13961e19d5e30077cd0854ccc08487026d2cb2142aa4a/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", size = 391047 }, + { url = "https://files.pythonhosted.org/packages/49/b0/e66918d0972c33a259ba3cd7b7ff10ed8bd91dbcfcbec6367b21f026db75/rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", size = 418085 }, + { url = "https://files.pythonhosted.org/packages/e1/6b/99ed7ea0a94c7ae5520a21be77a82306aac9e4e715d4435076ead07d05c6/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", size = 564498 }, + { url = "https://files.pythonhosted.org/packages/28/26/1cacfee6b800e6fb5f91acecc2e52f17dbf8b0796a7c984b4568b6d70e38/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", size = 590202 }, + { url = "https://files.pythonhosted.org/packages/a9/9e/57bd2f9fba04a37cef673f9a66b11ca8c43ccdd50d386c455cd4380fe461/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", size = 561771 }, + { url = "https://files.pythonhosted.org/packages/9f/cf/b719120f375ab970d1c297dbf8de1e3c9edd26fe92c0ed7178dd94b45992/rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", size = 221195 }, + { url = "https://files.pythonhosted.org/packages/2d/e5/22865285789f3412ad0c3d7ec4dc0a3e86483b794be8a5d9ed5a19390900/rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", size = 237354 }, + { url = "https://files.pythonhosted.org/packages/99/48/11dae46d0c7f7e156ca0971a83f89c510af0316cd5d42c771b7cef945f0c/rpds_py-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a", size = 378224 }, + { url = "https://files.pythonhosted.org/packages/33/18/e8398d255369e35d312942f3bb8ecaff013c44968904891be2ab63b3aa94/rpds_py-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399", size = 363252 }, + { url = "https://files.pythonhosted.org/packages/17/39/dd73ba691f4df3e6834bf982de214086ac3359ab3ac035adfb30041570e3/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098", size = 388871 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/da0530b25cabd0feca2a759b899d2df325069a94281eeea8ac44c6cfeff7/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d", size = 394766 }, + { url = "https://files.pythonhosted.org/packages/4c/ee/dd1c5040a431beb40fad4a5d7868acf343444b0bc43e627c71df2506538b/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e", size = 448712 }, + { url = "https://files.pythonhosted.org/packages/f5/ec/6b93ffbb686be948e4d91ec76f4e6757f8551034b2a8176dd848103a1e34/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1", size = 447150 }, + { url = "https://files.pythonhosted.org/packages/55/d5/a1c23760adad85b432df074ced6f910dd28f222b8c60aeace5aeb9a6654e/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb", size = 390662 }, + { url = "https://files.pythonhosted.org/packages/a5/f3/419cb1f9bfbd3a48c256528c156e00f3349e3edce5ad50cbc141e71f66a5/rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44", size = 421351 }, + { url = "https://files.pythonhosted.org/packages/98/8e/62d1a55078e5ede0b3b09f35e751fa35924a34a0d44d7c760743383cd54a/rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33", size = 566074 }, + { url = "https://files.pythonhosted.org/packages/fc/69/b7d1003166d78685da032b3c4ff1599fa536a3cfe6e5ce2da87c9c431906/rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164", size = 592398 }, + { url = "https://files.pythonhosted.org/packages/ea/a8/1c98bc99338c37faadd28dd667d336df7409d77b4da999506a0b6b1c0aa2/rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc", size = 561114 }, + { url = "https://files.pythonhosted.org/packages/2b/41/65c91443685a4c7b5f1dd271beadc4a3e063d57c3269221548dd9416e15c/rpds_py-0.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5", size = 235548 }, + { url = "https://files.pythonhosted.org/packages/65/53/40bcc246a8354530d51a26d2b5b9afd1deacfb0d79e67295cc74df362f52/rpds_py-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d", size = 378386 }, + { url = "https://files.pythonhosted.org/packages/80/b0/5ea97dd2f53e3618560aa1f9674e896e63dff95a9b796879a201bc4c1f00/rpds_py-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a", size = 363440 }, + { url = "https://files.pythonhosted.org/packages/57/9d/259b6eada6f747cdd60c9a5eb3efab15f6704c182547149926c38e5bd0d5/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5", size = 388816 }, + { url = "https://files.pythonhosted.org/packages/94/c1/faafc7183712f89f4b7620c3c15979ada13df137d35ef3011ae83e93b005/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d", size = 395058 }, + { url = "https://files.pythonhosted.org/packages/6c/96/d7fa9d2a7b7604a61da201cc0306a355006254942093779d7121c64700ce/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793", size = 448692 }, + { url = "https://files.pythonhosted.org/packages/96/37/a3146c6eebc65d6d8c96cc5ffdcdb6af2987412c789004213227fbe52467/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba", size = 446462 }, + { url = "https://files.pythonhosted.org/packages/1f/13/6481dfd9ac7de43acdaaa416e3a7da40bc4bb8f5c6ca85e794100aa54596/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea", size = 390460 }, + { url = "https://files.pythonhosted.org/packages/61/e1/37e36bce65e109543cc4ff8d23206908649023549604fa2e7fbeba5342f7/rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032", size = 421609 }, + { url = "https://files.pythonhosted.org/packages/20/dd/1f1a923d6cd798b8582176aca8a0784676f1a0449fb6f07fce6ac1cdbfb6/rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d", size = 565818 }, + { url = "https://files.pythonhosted.org/packages/56/ec/d8da6df6a1eb3a418944a17b1cb38dd430b9e5a2e972eafd2b06f10c7c46/rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25", size = 592627 }, + { url = "https://files.pythonhosted.org/packages/b3/14/c492b9c7d5dd133e13f211ddea6bb9870f99e4f73932f11aa00bc09a9be9/rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", size = 560885 }, +] + [[package]] name = "s3fs" version = "2025.3.0" @@ -1839,6 +2551,65 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, ] +[[package]] +name = "sqlalchemy" +version = "2.0.40" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "(python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/c3/3f2bfa5e4dcd9938405fe2fab5b6ab94a9248a4f9536ea2fd497da20525f/sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", size = 9664299 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/fa/8e8fd93684b04e65816be864bebf0000fe1602e5452d006f9acc5db14ce5/sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7", size = 2112843 }, + { url = "https://files.pythonhosted.org/packages/ba/87/06992f78a9ce545dfd1fea3dd99262bec5221f6f9d2d2066c3e94662529f/sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758", size = 2104032 }, + { url = "https://files.pythonhosted.org/packages/92/ee/57dc77282e8be22d686bd4681825299aa1069bbe090564868ea270ed5214/sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af", size = 3086406 }, + { url = "https://files.pythonhosted.org/packages/94/3f/ceb9ab214b2e42d2e74a9209b3a2f2f073504eee16cddd2df81feeb67c2f/sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1", size = 3094652 }, + { url = "https://files.pythonhosted.org/packages/00/0a/3401232a5b6d91a2df16c1dc39c6504c54575744c2faafa1e5a50de96621/sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00", size = 3050503 }, + { url = "https://files.pythonhosted.org/packages/93/c2/ea7171415ab131397f71a2673645c2fe29ebe9a93063d458eb89e42bf051/sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e", size = 3076011 }, + { url = "https://files.pythonhosted.org/packages/3d/ee/d8e229280d621bed8c51eebf1dd413aa09ca89e309b1fff40d881dd149af/sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a", size = 2085136 }, + { url = "https://files.pythonhosted.org/packages/60/7f/ea1086136bc648cd4713a1e01869f7fc31979d67b3a8f973f5d9ab8de7e1/sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596", size = 2109421 }, + { url = "https://files.pythonhosted.org/packages/77/7e/55044a9ec48c3249bb38d5faae93f09579c35e862bb318ebd1ed7a1994a5/sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e", size = 2114025 }, + { url = "https://files.pythonhosted.org/packages/77/0f/dcf7bba95f847aec72f638750747b12d37914f71c8cc7c133cf326ab945c/sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011", size = 2104419 }, + { url = "https://files.pythonhosted.org/packages/75/70/c86a5c20715e4fe903dde4c2fd44fc7e7a0d5fb52c1b954d98526f65a3ea/sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4", size = 3222720 }, + { url = "https://files.pythonhosted.org/packages/12/cf/b891a8c1d0c27ce9163361664c2128c7a57de3f35000ea5202eb3a2917b7/sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1", size = 3222682 }, + { url = "https://files.pythonhosted.org/packages/15/3f/7709d8c8266953d945435a96b7f425ae4172a336963756b58e996fbef7f3/sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51", size = 3159542 }, + { url = "https://files.pythonhosted.org/packages/85/7e/717eaabaf0f80a0132dc2032ea8f745b7a0914451c984821a7c8737fb75a/sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a", size = 3179864 }, + { url = "https://files.pythonhosted.org/packages/e4/cc/03eb5dfcdb575cbecd2bd82487b9848f250a4b6ecfb4707e834b4ce4ec07/sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b", size = 2084675 }, + { url = "https://files.pythonhosted.org/packages/9a/48/440946bf9dc4dc231f4f31ef0d316f7135bf41d4b86aaba0c0655150d370/sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4", size = 2110099 }, + { url = "https://files.pythonhosted.org/packages/92/06/552c1f92e880b57d8b92ce6619bd569b25cead492389b1d84904b55989d8/sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d", size = 2112620 }, + { url = "https://files.pythonhosted.org/packages/01/72/a5bc6e76c34cebc071f758161dbe1453de8815ae6e662393910d3be6d70d/sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a", size = 2103004 }, + { url = "https://files.pythonhosted.org/packages/bf/fd/0e96c8e6767618ed1a06e4d7a167fe13734c2f8113c4cb704443e6783038/sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d", size = 3252440 }, + { url = "https://files.pythonhosted.org/packages/cd/6a/eb82e45b15a64266a2917a6833b51a334ea3c1991728fd905bfccbf5cf63/sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716", size = 3263277 }, + { url = "https://files.pythonhosted.org/packages/45/97/ebe41ab4530f50af99e3995ebd4e0204bf1b0dc0930f32250dde19c389fe/sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2", size = 3198591 }, + { url = "https://files.pythonhosted.org/packages/e6/1c/a569c1b2b2f5ac20ba6846a1321a2bf52e9a4061001f282bf1c5528dcd69/sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191", size = 3225199 }, + { url = "https://files.pythonhosted.org/packages/8f/91/87cc71a6b10065ca0209d19a4bb575378abda6085e72fa0b61ffb2201b84/sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1", size = 2082959 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/14c511cda174aa1ad9b0e42b64ff5a71db35d08b0d80dc044dae958921e5/sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0", size = 2108526 }, + { url = "https://files.pythonhosted.org/packages/8c/18/4e3a86cc0232377bc48c373a9ba6a1b3fb79ba32dbb4eda0b357f5a2c59d/sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01", size = 2107887 }, + { url = "https://files.pythonhosted.org/packages/cb/60/9fa692b1d2ffc4cbd5f47753731fd332afed30137115d862d6e9a1e962c7/sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705", size = 2098367 }, + { url = "https://files.pythonhosted.org/packages/4c/9f/84b78357ca641714a439eb3fbbddb17297dacfa05d951dbf24f28d7b5c08/sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364", size = 3184806 }, + { url = "https://files.pythonhosted.org/packages/4b/7d/e06164161b6bfce04c01bfa01518a20cccbd4100d5c951e5a7422189191a/sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0", size = 3198131 }, + { url = "https://files.pythonhosted.org/packages/6d/51/354af20da42d7ec7b5c9de99edafbb7663a1d75686d1999ceb2c15811302/sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db", size = 3131364 }, + { url = "https://files.pythonhosted.org/packages/7a/2f/48a41ff4e6e10549d83fcc551ab85c268bde7c03cf77afb36303c6594d11/sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26", size = 3159482 }, + { url = "https://files.pythonhosted.org/packages/33/ac/e5e0a807163652a35be878c0ad5cfd8b1d29605edcadfb5df3c512cdf9f3/sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500", size = 2080704 }, + { url = "https://files.pythonhosted.org/packages/1c/cb/f38c61f7f2fd4d10494c1c135ff6a6ddb63508d0b47bccccd93670637309/sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad", size = 2104564 }, + { url = "https://files.pythonhosted.org/packages/d1/7c/5fc8e802e7506fe8b55a03a2e1dab156eae205c91bee46305755e086d2e2/sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", size = 1903894 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + [[package]] name = "starlette" version = "0.46.2" @@ -1851,6 +2622,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 }, ] +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, +] + [[package]] name = "tesseract-core" version = "0.8.4" @@ -1896,6 +2676,7 @@ dependencies = [ [package.optional-dependencies] dev = [ { name = "furo" }, + { name = "myst-nb" }, { name = "myst-parser" }, { name = "pre-commit" }, { name = "pytest" }, @@ -1910,6 +2691,7 @@ dev = [ ] docs = [ { name = "furo" }, + { name = "myst-nb" }, { name = "myst-parser" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -1921,6 +2703,7 @@ docs = [ requires-dist = [ { name = "furo", marker = "extra == 'docs'" }, { name = "jax" }, + { name = "myst-nb", marker = "extra == 'docs'" }, { name = "myst-parser", marker = "extra == 'docs'" }, { name = "pre-commit", marker = "extra == 'dev'" }, { name = "pytest", marker = "extra == 'dev'" }, @@ -1974,6 +2757,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + [[package]] name = "typeguard" version = "4.4.2" @@ -2059,6 +2869,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4c/ed/3cfeb48175f0671ec430ede81f628f9fb2b1084c9064ca67ebe8c0ed6a05/virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6", size = 4329461 }, ] +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] + [[package]] name = "wrapt" version = "1.17.2" @@ -2221,3 +3040,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/93/f73b61353b2a699d489e782c3f5998b59f974ec3156a2050a52dfd7e8946/yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", size = 101093 }, { url = "https://files.pythonhosted.org/packages/ea/1f/70c57b3d7278e94ed22d85e09685d3f0a38ebdd8c5c73b65ba4c0d0fe002/yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", size = 46124 }, ] + +[[package]] +name = "zipp" +version = "3.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, +] From 77d4f7f6d54fd38bf845f1dc957494171f6e356d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dion=20H=C3=A4fner?= Date: Mon, 21 Apr 2025 15:06:50 +0200 Subject: [PATCH 3/4] add missing files --- demo/cfd/demo.ipynb | 34 ++------------ docs/content/index.md | 83 ++++++++++++++++++++++++++++++++++ docs/demo_notebooks/.gitignore | 1 + 3 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 docs/content/index.md create mode 100644 docs/demo_notebooks/.gitignore diff --git a/demo/cfd/demo.ipynb b/demo/cfd/demo.ipynb index 80dc69d..e9b0cf1 100644 --- a/demo/cfd/demo.ipynb +++ b/demo/cfd/demo.ipynb @@ -19,8 +19,8 @@ "output_type": "stream", "text": [ "\u001b[2K \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Building image \u001b[33m...\u001b[0m\n", - "\u001b[2K\u001b[37m⠇\u001b[0m \u001b[37mProcessing\u001b[0m\n", - "\u001b[1A\u001b[2K \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Built image sh\u001b[1;92ma256:b5e2\u001b[0m455fe251, \u001b[1m[\u001b[0m\u001b[32m'jax-cfd:latest'\u001b[0m\u001b[1m]\u001b[0m\n" + "\u001b[2K\u001b[37m⠋\u001b[0m \u001b[37mProcessing\u001b[0m\n", + "\u001b[1A\u001b[2K \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Built image sh\u001b[1;92ma256:0c56\u001b[0m253398c1, \u001b[1m[\u001b[0m\u001b[32m'jax-cfd:latest'\u001b[0m\u001b[1m]\u001b[0m\n" ] }, { @@ -46,32 +46,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Looking in indexes: https://pkgs.dev.azure.com/pasteur-labs/d89796ea-4a5b-48aa-9930-4cebcdc9d64a/_packaging/internal/pypi/simple, https://pypi.org/simple\n", - "Requirement already satisfied: jax_cfd in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from -r requirements.txt (line 1)) (0.2.1)\n", - "Requirement already satisfied: matplotlib in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from -r requirements.txt (line 2)) (3.10.0)\n", - "Requirement already satisfied: pillow in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from -r requirements.txt (line 3)) (11.1.0)\n", - "Requirement already satisfied: optax in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from -r requirements.txt (line 4)) (0.2.4)\n", - "Requirement already satisfied: jax in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax_cfd->-r requirements.txt (line 1)) (0.5.2)\n", - "Requirement already satisfied: numpy in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax_cfd->-r requirements.txt (line 1)) (2.2.0)\n", - "Requirement already satisfied: scipy in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax_cfd->-r requirements.txt (line 1)) (1.15.0)\n", - "Requirement already satisfied: tree-math in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax_cfd->-r requirements.txt (line 1)) (0.2.1)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (1.3.1)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (4.55.8)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (1.4.8)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (24.2)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from matplotlib->-r requirements.txt (line 2)) (2.9.0.post0)\n", - "Requirement already satisfied: absl-py>=0.7.1 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from optax->-r requirements.txt (line 4)) (2.1.0)\n", - "Requirement already satisfied: chex>=0.1.87 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from optax->-r requirements.txt (line 4)) (0.1.88)\n", - "Requirement already satisfied: jaxlib>=0.4.27 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from optax->-r requirements.txt (line 4)) (0.5.1)\n", - "Requirement already satisfied: etils[epy] in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from optax->-r requirements.txt (line 4)) (1.11.0)\n", - "Requirement already satisfied: typing_extensions>=4.2.0 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from chex>=0.1.87->optax->-r requirements.txt (line 4)) (4.12.2)\n", - "Requirement already satisfied: setuptools in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from chex>=0.1.87->optax->-r requirements.txt (line 4)) (75.6.0)\n", - "Requirement already satisfied: toolz>=0.9.0 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from chex>=0.1.87->optax->-r requirements.txt (line 4)) (1.0.0)\n", - "Requirement already satisfied: ml_dtypes>=0.4.0 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax->jax_cfd->-r requirements.txt (line 1)) (0.5.1)\n", - "Requirement already satisfied: opt_einsum in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from jax->jax_cfd->-r requirements.txt (line 1)) (3.4.0)\n", - "Requirement already satisfied: six>=1.5 in /Users/dion/.virtualenvs/science/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r requirements.txt (line 2)) (1.17.0)\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m25.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", @@ -81,7 +55,7 @@ ], "source": [ "# Install additional requirements\n", - "%pip install -r requirements.txt" + "%pip install -r requirements.txt -q" ] }, { @@ -852,7 +826,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ diff --git a/docs/content/index.md b/docs/content/index.md new file mode 100644 index 0000000..20d6bbc --- /dev/null +++ b/docs/content/index.md @@ -0,0 +1,83 @@ +# Tesseract-JAX + +`tesseract-jax` executes [Tesseracts](https://github.com/pasteurlabs/tesseract-core) as part of JAX programs, with full support for function transformations like JIT, `grad`, `jvp`, and more. + +The API of Tesseract-JAX consists of a single function, [`apply_tesseract(tesseract_client, inputs)`](tesseract_jax.apply_tesseract), which is fully traceable by JAX. This enables end-to-end autodifferentiation and JIT compilation of Tesseract-based pipelines. + +## Quick start + +```{note} +Before proceeding, make sure you have a [working installation of Docker](https://docs.docker.com/engine/install/) and a modern Python installation (Python 3.10+). +``` + +```{seealso} +For more detailed installation instructions, please refer to the [Tesseract Core documentation](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/installation.html). +``` + +1. Install Tesseract-JAX: + + ```bash + $ pip install tesseract-jax + ``` + +2. Build an example Tesseract: + + ```bash + $ tesseract build demo/simple/vectoradd_jax + ``` + +3. Use it as part of a JAX program: + + ```python + import jax + import jax.numpy as jnp + from tesseract_core import Tesseract + from tesseract_jax import apply_tesseract + + # Load the Tesseract + t = Tesseract.from_image("vectoradd_jax") + + # Run it with JAX + x = jnp.ones((1000, 1000)) + y = jnp.ones((1000, 1000)) + + def vector_add(x, y): + return apply_tesseract(t, x, y) + + vector_add(x, y) # success! + + # You can also use it with JAX transformations like JIT and grad + vector_add_jit = jax.jit(vector_add) + vector_add_jit(x, y) + + vector_add_grad = jax.grad(vector_add) + vector_add_grad(x, y) + ``` + +```{tip} +Now you're ready to jump into our [demos](https://github.com/pasteurlabs/tesseract-jax/tree/main/demo) for more examples on how to use Tesseract-JAX. +``` + +## Sharp edges + +- **Arrays vs. array-like objects**: Tesseract-JAX ist stricter than Tesseract Core in that all array inputs to Tesseracts must be JAX or NumPy arrays, not just any array-like (such as Python floats or lists). As a result, you may need to convert your inputs to JAX arrays before passing them to Tesseract-JAX, including scalar values. + + ```python + from tesseract_core import Tesseract + from tesseract_jax import apply_tesseract + + tess = Tesseract.from_image("vectoradd") + apply_tesseract(tess, {"a": 1.0, "b": 2.0}) # ❌ raises an error + apply_tesseract(tess, {"a": jnp.array(1.0), "b": jnp.array(2.0)}) # ✅ works + ``` +- **Additional required endpoints**: Tesseract-JAX requires the [`abstract_eval`](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/api/endpoints.html#abstract-eval) Tesseract endpoint to be defined for all operations. This is because JAX mandates abstract evaluation of all operations before they are executed. Additionally, many gradient transformations like `jax.grad` require [`vector_jacobian_product`](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/api/endpoints.html#vector-jacobian-product) to be defined. + +```{tip} +When creating a new Tesseract based on a JAX function, use `tesseract init --recipe jax` to define all required endpoints automatically, including `abstract_eval` and `vector_jacobian_product`. +``` + +## License + +Tesseract JAX is licensed under the [Apache License 2.0](https://github.com/pasteurlabs/tesseract-jax/LICENSE) and is free to use, modify, and distribute (under the terms of the license). + +Tesseract is a registered trademark of Pasteur Labs, Inc. and may not be used without permission. diff --git a/docs/demo_notebooks/.gitignore b/docs/demo_notebooks/.gitignore new file mode 100644 index 0000000..fa65608 --- /dev/null +++ b/docs/demo_notebooks/.gitignore @@ -0,0 +1 @@ +*.ipynb From 26857c11b04590132ed0c262374f1c0182774ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dion=20H=C3=A4fner?= Date: Wed, 23 Apr 2025 10:12:42 +0200 Subject: [PATCH 4/4] overhaul demos (now examples) and docs --- .github/workflows/test_examples.yml | 4 +- README.md | 28 +++++++------- demo/cfd/Readme.md | 5 --- demo/simple/README.md | 0 docs/conf.py | 14 ++++--- docs/content/{index.md => get-started.md} | 36 ++++++++---------- docs/index.md | 28 +++++++++++--- docs/static/logo-dark.png | Bin 189510 -> 188432 bytes docs/static/logo-light.png | Bin 154304 -> 153521 bytes examples/README.md | 8 ++++ .../cfd/cfd-tesseract/tesseract_api.py | 0 .../cfd/cfd-tesseract/tesseract_config.yaml | 0 .../cfd-tesseract/tesseract_requirements.txt | 0 {demo => examples}/cfd/demo.ipynb | 8 +++- {demo => examples}/cfd/pl.png | Bin {demo => examples}/cfd/requirements.txt | 0 {demo => examples}/cfd/vorticity.gif | Bin {demo => examples}/simple/demo.ipynb | 8 +++- .../simple/vectoradd_jax/tesseract_api.py | 0 .../vectoradd_jax/tesseract_config.yaml | 0 .../vectoradd_jax/tesseract_requirements.txt | 0 production.uv.lock | 35 +++++++++++++++-- pyproject.toml | 3 +- ruff.toml | 2 +- 24 files changed, 121 insertions(+), 58 deletions(-) delete mode 100644 demo/cfd/Readme.md delete mode 100644 demo/simple/README.md rename docs/content/{index.md => get-started.md} (75%) create mode 100644 examples/README.md rename {demo => examples}/cfd/cfd-tesseract/tesseract_api.py (100%) rename {demo => examples}/cfd/cfd-tesseract/tesseract_config.yaml (100%) rename {demo => examples}/cfd/cfd-tesseract/tesseract_requirements.txt (100%) rename {demo => examples}/cfd/demo.ipynb (99%) rename {demo => examples}/cfd/pl.png (100%) rename {demo => examples}/cfd/requirements.txt (100%) rename {demo => examples}/cfd/vorticity.gif (100%) rename {demo => examples}/simple/demo.ipynb (96%) rename {demo => examples}/simple/vectoradd_jax/tesseract_api.py (100%) rename {demo => examples}/simple/vectoradd_jax/tesseract_config.yaml (100%) rename {demo => examples}/simple/vectoradd_jax/tesseract_requirements.txt (100%) diff --git a/.github/workflows/test_examples.yml b/.github/workflows/test_examples.yml index b3b1040..ae6fa98 100644 --- a/.github/workflows/test_examples.yml +++ b/.github/workflows/test_examples.yml @@ -16,7 +16,7 @@ jobs: # test with oldest supported Python version only (for slow tests) python-version: ["3.10"] - demo: + example: - simple - cfd @@ -46,7 +46,7 @@ jobs: uv sync --extra dev --frozen - name: Run example - working-directory: demo/${{matrix.demo}} + working-directory: examples/${{matrix.example}} run: | uv pip install jupyter uv run --no-sync jupyter nbconvert --to notebook --execute demo.ipynb diff --git a/README.md b/README.md index f9ae217..7f4d81e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ `tesseract-jax` executes [Tesseracts](https://github.com/pasteurlabs/tesseract-core) as part of JAX programs, with full support for function transformations like JIT, `grad`, and more. [Read the docs](https://docs.pasteurlabs.ai/projects/tesseract-jax/latest/) | -[Explore the demos](https://github.com/pasteurlabs/tesseract-jax/tree/main/demo) | +[Explore the examples](https://github.com/pasteurlabs/tesseract-jax/tree/main/examples) | [Report an issue](https://github.com/pasteurlabs/tesseract-jax/issues) | [Talk to the community](https://si-tesseract.discourse.group/) | [Contribute](CONTRIBUTING.md) @@ -31,7 +31,7 @@ The API of Tesseract-JAX consists of a single function, [`apply_tesseract(tesser 2. Build an example Tesseract: ```bash - $ tesseract build demo/simple/vectoradd_jax + $ tesseract build examples/simple/vectoradd_jax ``` 3. Use it as part of a JAX program via the JAX-native `apply_tesseract` function: @@ -44,26 +44,28 @@ The API of Tesseract-JAX consists of a single function, [`apply_tesseract(tesser # Load the Tesseract t = Tesseract.from_image("vectoradd_jax") + t.serve() # Run it with JAX - x = jnp.ones((1000, 1000)) - y = jnp.ones((1000, 1000)) + x = jnp.ones((1000,)) + y = jnp.ones((1000,)) - def vector_add(x, y): - return apply_tesseract(t, x, y) + def vector_sum(x, y): + res = apply_tesseract(t, {"a": {"v": x}, "b": {"v": y}}) + return res["vector_add"]["result"].sum() - vector_add(x, y) # success! + vector_sum(x, y) # success! - # You can also use it with JAX transformations like JIT and grad - vector_add_jit = jax.jit(vector_add) - vector_add_jit(x, y) + # You can also use it with JAX transformations like JIT and grad + vector_sum_jit = jax.jit(vector_sum) + vector_sum_jit(x, y) - vector_add_grad = jax.grad(vector_add) - vector_add_grad(x, y) + vector_sum_grad = jax.grad(vector_sum) + vector_sum_grad(x, y) ``` > [!TIP] -> Now you're ready to jump into our [demos](https://github.com/pasteurlabs/tesseract-jax/tree/main/demo) for more examples on how to use Tesseract-JAX. +> Now you're ready to jump into our [examples](https://github.com/pasteurlabs/tesseract-jax/tree/main/examples) for more ways to use Tesseract-JAX. ## Sharp edges diff --git a/demo/cfd/Readme.md b/demo/cfd/Readme.md deleted file mode 100644 index b489597..0000000 --- a/demo/cfd/Readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Differentiable CFD Demo - -This demo shows how to perform gradient-based optimization through a differentiable CFD simulator using Tesseract-JAX. We optimize the initial condition of [JAX-CFD](https://github.com/google/jax-cfd) setup running inside a Tesseract. - -![CFD](vorticity.gif) diff --git a/demo/simple/README.md b/demo/simple/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/conf.py b/docs/conf.py index 35aa891..b62834d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,9 +12,9 @@ from tesseract_jax import __version__ -project = "tesseract-jax" -copyright = "2025, The tesseract-jax Team @ Pasteur Labs" -author = "The tesseract-jax Team @ Pasteur Labs" +project = "Tesseract-JAX" +copyright = "2025, Pasteur Labs" +author = "The Tesseract-JAX Team @ Pasteur Labs + OSS contributors" # The short X.Y version parsed_version = re.match(r"(\d+\.\d+\.\d+)", __version__) @@ -36,6 +36,10 @@ "sphinx.ext.napoleon", "sphinx.ext.viewcode", "sphinx_autodoc_typehints", + # Copy button for code blocks + "sphinx_copybutton", + # OpenGraph metadata for social media sharing + "sphinxext.opengraph", ] myst_enable_extensions = [ @@ -64,7 +68,7 @@ html_theme_options = { "light_logo": "logo-light.png", "dark_logo": "logo-dark.png", - "sidebar_hide_name": False, + "sidebar_hide_name": True, } html_css_files = ["custom.css"] @@ -75,7 +79,7 @@ nb_execution_mode = "off" # Copy example notebooks to demo_notebooks folder on every build -for example_notebook in Path("../demo").glob("*/demo.ipynb"): +for example_notebook in Path("../examples").glob("*/demo.ipynb"): # Copy the example notebook to the docs folder dest = (Path("demo_notebooks") / example_notebook.parent.name).with_suffix(".ipynb") shutil.copyfile(example_notebook, dest) diff --git a/docs/content/index.md b/docs/content/get-started.md similarity index 75% rename from docs/content/index.md rename to docs/content/get-started.md index 20d6bbc..0232fc6 100644 --- a/docs/content/index.md +++ b/docs/content/get-started.md @@ -1,4 +1,4 @@ -# Tesseract-JAX +# Get started `tesseract-jax` executes [Tesseracts](https://github.com/pasteurlabs/tesseract-core) as part of JAX programs, with full support for function transformations like JIT, `grad`, `jvp`, and more. @@ -23,7 +23,7 @@ For more detailed installation instructions, please refer to the [Tesseract Core 2. Build an example Tesseract: ```bash - $ tesseract build demo/simple/vectoradd_jax + $ tesseract build examples/simple/vectoradd_jax ``` 3. Use it as part of a JAX program: @@ -36,26 +36,28 @@ For more detailed installation instructions, please refer to the [Tesseract Core # Load the Tesseract t = Tesseract.from_image("vectoradd_jax") + t.serve() # Run it with JAX - x = jnp.ones((1000, 1000)) - y = jnp.ones((1000, 1000)) + x = jnp.ones((1000,)) + y = jnp.ones((1000,)) - def vector_add(x, y): - return apply_tesseract(t, x, y) + def vector_sum(x, y): + res = apply_tesseract(t, {"a": {"v": x}, "b": {"v": y}}) + return res["vector_add"]["result"].sum() - vector_add(x, y) # success! + vector_sum(x, y) # success! - # You can also use it with JAX transformations like JIT and grad - vector_add_jit = jax.jit(vector_add) - vector_add_jit(x, y) + # You can also use it with JAX transformations like JIT and grad + vector_sum_jit = jax.jit(vector_sum) + vector_sum_jit(x, y) - vector_add_grad = jax.grad(vector_add) - vector_add_grad(x, y) - ``` + vector_sum_grad = jax.grad(vector_sum) + vector_sum_grad(x, y) + ``` ```{tip} -Now you're ready to jump into our [demos](https://github.com/pasteurlabs/tesseract-jax/tree/main/demo) for more examples on how to use Tesseract-JAX. +Now you're ready to jump into our [examples](https://github.com/pasteurlabs/tesseract-jax/tree/main/examples) for ways to use Tesseract-JAX. ``` ## Sharp edges @@ -75,9 +77,3 @@ Now you're ready to jump into our [demos](https://github.com/pasteurlabs/tessera ```{tip} When creating a new Tesseract based on a JAX function, use `tesseract init --recipe jax` to define all required endpoints automatically, including `abstract_eval` and `vector_jacobian_product`. ``` - -## License - -Tesseract JAX is licensed under the [Apache License 2.0](https://github.com/pasteurlabs/tesseract-jax/LICENSE) and is free to use, modify, and distribute (under the terms of the license). - -Tesseract is a registered trademark of Pasteur Labs, Inc. and may not be used without permission. diff --git a/docs/index.md b/docs/index.md index 41469ab..fa73ba4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,23 +1,39 @@ -```{include} content/index.md +# Tesseract-JAX + +```{include} content/get-started.md +:start-line: 2 ``` +## License + +Tesseract JAX is licensed under the [Apache License 2.0](https://github.com/pasteurlabs/tesseract-jax/LICENSE) and is free to use, modify, and distribute (under the terms of the license). + +Tesseract is a registered trademark of Pasteur Labs, Inc. and may not be used without permission. + ```{toctree} -:caption: Contents +:caption: Usage :maxdepth: 2 :hidden: -content/index +content/get-started content/api -Tesseract Core docs -Tesseract User Forums ``` ```{toctree} -:caption: Demos +:caption: Examples :maxdepth: 2 :hidden: demo_notebooks/simple.ipynb demo_notebooks/cfd.ipynb ``` + +```{toctree} +:caption: See also +:maxdepth: 2 +:hidden: + +Tesseract Core docs +Tesseract User Forums +``` diff --git a/docs/static/logo-dark.png b/docs/static/logo-dark.png index f0a9c3e717d160ca72f1c2b4caaab749cb87c133..e64156c66825bc01af37281a0e79cd12f6d35323 100644 GIT binary patch delta 117453 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