diff --git a/.github/workflows/ibis-docs-main.yml b/.github/workflows/ibis-docs-main.yml index 8b139a2dfa71..0f1c5b6fccdb 100644 --- a/.github/workflows/ibis-docs-main.yml +++ b/.github/workflows/ibis-docs-main.yml @@ -45,6 +45,9 @@ jobs: - name: build docs run: nix develop --ignore-environment --keep HOME -c just docs-render + - name: build jupyterlite + run: nix develop --ignore-environment --keep HOME -c just build-jupyterlite + - name: check that all frozen computations were done before push run: git diff --exit-code --stat diff --git a/.github/workflows/ibis-docs-pr.yml b/.github/workflows/ibis-docs-pr.yml index 9a862b4f56e7..887a2c784a26 100644 --- a/.github/workflows/ibis-docs-pr.yml +++ b/.github/workflows/ibis-docs-pr.yml @@ -47,6 +47,9 @@ jobs: - name: build docs run: nix develop --ignore-environment --keep HOME -c just docs-render + - name: build jupyterlite + run: nix develop --ignore-environment --keep HOME -c just build-jupyterlite + - name: check that all frozen computations were done before push run: git diff --exit-code --stat diff --git a/.gitignore b/.gitignore index 5db07574ef9f..0c522fc69231 100644 --- a/.gitignore +++ b/.gitignore @@ -147,3 +147,7 @@ docs/**/.jupyter_cache # quarto generated files docs/posts-listing.json docs/posts.feed-full-staged +docs/**/*.html + +# jupyterlite stuff +.jupyterlite.doit.db diff --git a/docs/_quarto.yml b/docs/_quarto.yml index cb774d48a1dd..bb2b995b5fb9 100644 --- a/docs/_quarto.yml +++ b/docs/_quarto.yml @@ -107,6 +107,7 @@ website: contents: - install.qmd - auto: tutorials/*.qmd + - auto: tutorials/browser - auto: tutorials/cloud-data-platforms - auto: tutorials/open-source-software - id: concepts diff --git a/docs/_tabsets/repl_warning.qmd b/docs/_tabsets/repl_warning.qmd new file mode 100644 index 000000000000..ebfab8b20c80 --- /dev/null +++ b/docs/_tabsets/repl_warning.qmd @@ -0,0 +1,9 @@ +::: {.callout-warning collapse="true"} +## Ibis in the browser is experimental. + +iOS is known to cause crashes on this page. + +Mobile Firefox may also not work (the page won't crash though). + +Please [open an issue on GitHub](https://github.com/ibis-project/ibis/issues/new/choose) if you encounter problems. +::: diff --git a/docs/ibis-wasm-wheels_cors_config.json b/docs/ibis-wasm-wheels_cors_config.json new file mode 100644 index 000000000000..ef1b21a28c74 --- /dev/null +++ b/docs/ibis-wasm-wheels_cors_config.json @@ -0,0 +1,8 @@ +[ + { + "origin": ["*"], + "method": ["GET"], + "responseHeader": ["Content-Type"], + "maxAgeSeconds": 3600 + } +] diff --git a/docs/jupyter_lite_config.json b/docs/jupyter_lite_config.json new file mode 100644 index 000000000000..7908c0714e19 --- /dev/null +++ b/docs/jupyter_lite_config.json @@ -0,0 +1,8 @@ +{ + "PipliteAddon": { + "piplite_urls": [ + "https://duckdb.github.io/duckdb-pyodide/wheels/duckdb-0.10.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", + "dist/ibis_framework-8.0.0-py3-none-any.whl" + ] + } +} diff --git a/docs/styles.css b/docs/styles.css index fa05b51fde3b..4ea7c75179a0 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -14,3 +14,10 @@ section[id^="parameters-"] { vertical-align: -0.125em; width: 1em; } + +#jupyterlite-console { + width: 100%; + height: 95%; + margin: auto; + display: block; +} diff --git a/docs/tutorials/browser/repl.qmd b/docs/tutorials/browser/repl.qmd new file mode 100644 index 000000000000..1955e0b0d04a --- /dev/null +++ b/docs/tutorials/browser/repl.qmd @@ -0,0 +1,44 @@ +--- +title: JupyterLite console +format: + html: + page-layout: full +--- + +Try our experimental JupyterLite console with Ibis, using the Palmer +penguins[^1] dataset loaded into the DuckDB backend! + +{{< include ../../_tabsets/repl_warning.qmd >}} + +```{python} +#| echo: false +#| output: asis +from urllib.parse import urlencode + +lines = """ +%pip install numpy pandas tzdata +import pyodide_js, pathlib, js +await pyodide_js.loadPackage("https://storage.googleapis.com/ibis-wasm-wheels/pyarrow-16.0.0.dev2661%2Bg9bddb87fd-cp311-cp311-emscripten_3_1_46_wasm32.whl") +pathlib.Path("penguins.csv").write_text(await (await js.fetch("https://storage.googleapis.com/ibis-tutorial-data/penguins.csv")).text()) +del pyodide_js, pathlib, js +%clear +%pip install 'ibis-framework[duckdb]' +from ibis.interactive import * +penguins = ibis.read_csv("penguins.csv") +penguins +""" + +params = [ + ("toolbar", "1"), + ("theme", "JupyterLab Night"), + ("kernel", "python"), +] +params.extend(("code", line) for line in lines.splitlines() if line) +query = urlencode(params) + +jupyterlite = f"../../jupyterlite/repl/?{query}" +iframe = f'' +print(iframe) +``` + +[^1]: Horst AM, Hill AP, Gorman KB (2020). palmerpenguins: Palmer Archipelago (Antarctica) penguin data. R package version 0.1.0. . doi: 10.5281/zenodo.3960218. diff --git a/gen_redirects.py b/gen_redirects.py index 987fe25b040e..e241120964be 100644 --- a/gen_redirects.py +++ b/gen_redirects.py @@ -169,6 +169,7 @@ "/versioning": "/concepts/versioning", "/why_ibis/": "/why", "/tutorials/data-platforms/": "tutorials/cloud-data-platforms/", + "/repl": "/tutorials/browser/repl", # TODO: "/how_to/memtable-join/": "/how_to/memtable_join/", # TODO: "/how_to/memtable_join/" # TODO: "/reference/backends/base/" diff --git a/justfile b/justfile index 6b2151f42871..b63de629b107 100644 --- a/justfile +++ b/justfile @@ -9,6 +9,8 @@ clean: # lock dependencies without updating existing versions lock: #!/usr/bin/env bash + set -euo pipefail + required_version="1.8.2" version="$(poetry --version)" if ! grep -qF "${required_version}" <<< "${version}"; then @@ -39,7 +41,7 @@ ci-check *args: # lint code lint: ruff format -q . --check - ruff . + ruff check . # run the test suite for one or more backends test +backends: @@ -56,6 +58,7 @@ test +backends: _doctest runner *args: #!/usr/bin/env bash + set -euo pipefail # TODO(cpcloud): why doesn't pytest --ignore-glob=test_*.py work? {{ runner }} pytest --doctest-modules {{ args }} $( @@ -80,6 +83,8 @@ ci-doctest *args: # download testing data download-data owner="ibis-project" repo="testing-data" rev="master": #!/usr/bin/env bash + set -euo pipefail + outdir="{{ justfile_directory() }}/ci/ibis-testing-data" rm -rf "$outdir" url="https://github.com/{{ owner }}/{{ repo }}" @@ -109,6 +114,8 @@ reup *backends: # stop and remove containers; clean up networks and volumes down *backends: #!/usr/bin/env bash + set -euo pipefail + if [ -z "{{ backends }}" ]; then docker compose down --volumes --remove-orphans else @@ -130,11 +137,15 @@ benchcmp number *args: # check for invalid links in a locally built version of the docs checklinks *args: #!/usr/bin/env bash + set -euo pipefail + lychee --base docs/_output $(find docs/_output -name '*.html') {{ args }} # view the changelog for upcoming release (use --pretty to format with glow) view-changelog flags="": #!/usr/bin/env bash + set -euo pipefail + npx -y -p conventional-changelog-cli \ -- conventional-changelog --config ./.conventionalcommits.js \ | ([ "{{ flags }}" = "--pretty" ] && glow -p - || cat -) @@ -169,10 +180,40 @@ docs-api-preview: docs-deploy: quarto publish --no-prompt --no-browser --no-render netlify docs +# build an ibis_framework wheel that works with pyodide +build-ibis-for-pyodide: + #!/usr/bin/env bash + set -euo pipefail + + # TODO(cpcloud): remove when: + # 1. pyarrow release contains pyodide + # 2. ibis supports this version of pyarrow + rm -rf dist/ + poetry add 'pyarrow>=10.0.1' --allow-prereleases + poetry build --format wheel + git checkout poetry.lock pyproject.toml + +# build the jupyterlite deployment +build-jupyterlite: build-ibis-for-pyodide + #!/usr/bin/env bash + set -euo pipefail + + mkdir -p docs/_output/jupyterlite + jupyter lite build \ + --debug \ + --no-libarchive \ + --config docs/jupyter_lite_config.json \ + --output-dir docs/_output/jupyterlite + # jupyter lite build can copy from the nix store, and preserves the + # original write bit; without this the next run of this rule will result in + # a permission error when the build tries to remove existing files + chmod -R u+w docs/_output/jupyterlite + # run the entire docs build pipeline docs-build-all: just docs-apigen --verbose just docs-render + just build-jupyterlite just checklinks docs/_output --offline --no-progress # open chat diff --git a/poetry.lock b/poetry.lock index 748b1b0954d8..fe55e2fbeaea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -146,6 +146,28 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] +[[package]] +name = "anyio" +version = "4.3.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + [[package]] name = "anywidget" version = "0.7.1" @@ -188,6 +210,82 @@ files = [ {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + [[package]] name = "asn1crypto" version = "1.5.1" @@ -217,6 +315,20 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "async-timeout" version = "4.0.3" @@ -258,6 +370,20 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.14.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "beartype" version = "0.18.5" @@ -485,6 +611,24 @@ d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + [[package]] name = "bqplot" version = "0.12.43" @@ -1214,7 +1358,7 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "dask" version = "2024.2.1" description = "Parallel PyData with Task Scheduling" -optional = false +optional = true python-versions = ">=3.9" files = [ {file = "dask-2024.2.1-py3-none-any.whl", hash = "sha256:a13fcdeead3bab3576495023f83097adcffe2f03c371c241b5a1f0b232b35b38"}, @@ -1318,6 +1462,17 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + [[package]] name = "deltalake" version = "0.16.4" @@ -1354,32 +1509,22 @@ files = [ ] [[package]] -name = "distributed" -version = "2024.2.1" -description = "Distributed scheduler for Dask" +name = "doit" +version = "0.36.0" +description = "doit - Automation Tool" optional = false -python-versions = ">=3.9" +python-versions = ">=3.8" files = [ - {file = "distributed-2024.2.1-py3-none-any.whl", hash = "sha256:633947b55198a0c7444272342c425d14f127a44d26a8ac46824d0daa3940da34"}, - {file = "distributed-2024.2.1.tar.gz", hash = "sha256:e444f935cfdc0f1a76e168be6a6bef84dd7758ce40b9f0fb4da6021f0d93c1b6"}, + {file = "doit-0.36.0-py3-none-any.whl", hash = "sha256:ebc285f6666871b5300091c26eafdff3de968a6bd60ea35dd1e3fc6f2e32479a"}, + {file = "doit-0.36.0.tar.gz", hash = "sha256:71d07ccc9514cb22fe59d98999577665eaab57e16f644d04336ae0b4bae234bc"}, ] [package.dependencies] -click = ">=8.0" -cloudpickle = ">=1.5.0" -dask = "2024.2.1" -jinja2 = ">=2.10.3" -locket = ">=1.0.0" -msgpack = ">=1.0.0" -packaging = ">=20.0" -psutil = ">=5.7.2" -pyyaml = ">=5.3.1" -sortedcontainers = ">=2.0.5" -tblib = ">=1.6.0" -toolz = ">=0.10.0" -tornado = ">=6.0.4" -urllib3 = ">=1.24.3" -zict = ">=3.0.0" +cloudpickle = "*" +importlib-metadata = ">=4.4" + +[package.extras] +toml = ["tomli"] [[package]] name = "duckdb" @@ -1744,6 +1889,17 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -1834,7 +1990,7 @@ files = [ name = "fsspec" version = "2024.2.0" description = "File-system specification" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "fsspec-2024.2.0-py3-none-any.whl", hash = "sha256:817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8"}, @@ -2403,6 +2559,62 @@ googleapis-common-protos = ">=1.5.5" grpcio = ">=1.62.2" protobuf = ">=4.21.6" +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + [[package]] name = "humanize" version = "4.9.0" @@ -2708,6 +2920,20 @@ widgetsnbextension = ">=4.0.10,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "itables" version = "2.0.0" @@ -2808,6 +3034,28 @@ files = [ {file = "joblib-1.4.0.tar.gz", hash = "sha256:1eb0dc091919cd384490de890cb5dfd538410a6d4b3b54eef09fb8c50b409b1c"}, ] +[[package]] +name = "json5" +version = "0.9.25" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8" +files = [ + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, +] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + [[package]] name = "jsonschema" version = "4.21.1" @@ -2821,9 +3069,17 @@ files = [ [package.dependencies] attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} jsonschema-specifications = ">=2023.03.6" referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -2912,6 +3168,180 @@ traitlets = ">=5.3" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, + {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.1.6" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.1.6-py3-none-any.whl", hash = "sha256:cf3e862bc10dbf4331e4eb37438634f813c238cfc62c71c640b3b3b2caa089a8"}, + {file = "jupyterlab-4.1.6.tar.gz", hash = "sha256:7935f36ba26eb615183a4f5c2bbca5791b5108ce2a00b5505f8cfd100d53648e"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.19.0,<3" +notebook-shim = ">=0.2" +packaging = "*" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.2.0)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=8.0,<9.0)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-night" +version = "0.4.6" +description = "Dark theme for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab-night-0.4.6.tar.gz", hash = "sha256:1461f67c2218a51632721722bb5ffc29b3b1aaacbe50fbe32f41a7d842b356a9"}, + {file = "jupyterlab_night-0.4.6-py3-none-any.whl", hash = "sha256:ec7577081cc59c1a88ce7838606c265ffef51555028e7a4372d63a83223d495a"}, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.26.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.26.0-py3-none-any.whl", hash = "sha256:54622cbd330526a385ee0c1fdccdff3a1e7219bf3e864a335284a1270a1973df"}, + {file = "jupyterlab_server-2.26.0.tar.gz", hash = "sha256:9b3ba91cf2837f7f124fca36d63f3ca80ace2bed4898a63dd47e6598c1ab006f"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + [[package]] name = "jupyterlab-widgets" version = "3.0.10" @@ -2923,6 +3353,52 @@ files = [ {file = "jupyterlab_widgets-3.0.10.tar.gz", hash = "sha256:04f2ac04976727e4f9d0fa91cdc2f1ab860f965e504c29dbd6a65c882c9d04c0"}, ] +[[package]] +name = "jupyterlite-core" +version = "0.3.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlite_core-0.3.0-py3-none-any.whl", hash = "sha256:247cc34ae6fedda41b15ce4778997164508b2039bc92480665cadfe955193467"}, + {file = "jupyterlite_core-0.3.0.tar.gz", hash = "sha256:5a97e74a93d487c0a2ce6a4615cd721a39686cdce9d329c241404e985157f8f9"}, +] + +[package.dependencies] +doit = ">=0.34,<1" +jupyter-core = ">=4.7" + +[package.extras] +all = ["jsonschema (>=3)", "jupyter-server", "jupyterlab (>=4.1.1,<4.2)", "jupyterlab-server (>=2.8.1,<3)", "libarchive-c (>=4.0)", "notebook (>=7.1.0,<7.2)", "pkginfo", "tornado (>=6.1)"] +check = ["jsonschema[format-nongpl] (>=3)"] +contents = ["jupyter-server"] +lab = ["jupyterlab (>=4.1.1,<4.2)", "notebook (>=7.1.0,<7.2)"] +libarchive = ["libarchive-c (>=4.0)"] +serve = ["tornado (>=6.1)"] +test = ["ansi2html", "diffoscope", "pytest-console-scripts", "pytest-cov", "pytest-html", "pytest-xdist"] +translation = ["jupyterlab-server (>=2.8.1,<3)"] + +[[package]] +name = "jupyterlite-pyodide-kernel" +version = "0.3.1" +description = "Python kernel for JupyterLite powered by Pyodide" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlite_pyodide_kernel-0.3.1-py3-none-any.whl", hash = "sha256:ac9d9dd95adcced57d465a7b298f220d8785845c017ad3abf2a3677ff02631c6"}, + {file = "jupyterlite_pyodide_kernel-0.3.1.tar.gz", hash = "sha256:cff663cfed4e6319bd3256f09e02d450f94917ba3704d9178d69146bb3467801"}, +] + +[package.dependencies] +jupyterlite-core = ">=0.3.0,<0.4.0" +pkginfo = "*" + +[package.extras] +dev = ["build", "hatch", "jupyterlab (>=4.0.7,<4.1.0a0)"] +docs = ["ipywidgets (>=8.1.2,<9)", "jupyter-server-mathjax", "jupyterlab-language-pack-fr-fr", "jupyterlab-language-pack-zh-cn", "libarchive-c", "myst-parser", "pydata-sphinx-theme", "sphinx-copybutton"] +lint = ["ruff (>=0.3.0)"] +test = ["pytest", "pytest-console-scripts (>=1.4.0)", "pytest-cov", "pytest-html"] + [[package]] name = "keyring" version = "24.3.1" @@ -3107,7 +3583,7 @@ vector = ["flask", "flask-cors", "geopandas", "lonboard", "mapclassify", "osmnx" name = "locket" version = "1.0.0" description = "File-based locks for Python on Linux and Windows" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, @@ -3350,6 +3826,17 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + [[package]] name = "mizani" version = "0.11.1" @@ -3585,6 +4072,43 @@ dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +[[package]] +name = "nbconvert" +version = "7.16.3" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, + {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + [[package]] name = "nbformat" version = "5.10.4" @@ -3631,6 +4155,23 @@ files = [ [package.dependencies] setuptools = "*" +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + [[package]] name = "numpy" version = "1.26.4" @@ -3735,6 +4276,17 @@ files = [ [package.dependencies] cryptography = ">=3.2.1" +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "24.0" @@ -3765,7 +4317,6 @@ optional = false python-versions = ">=3.9" files = [ {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, @@ -3779,14 +4330,12 @@ files = [ {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, @@ -3830,6 +4379,17 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + [[package]] name = "parso" version = "0.8.4" @@ -3860,7 +4420,7 @@ files = [ name = "partd" version = "1.4.1" description = "Appendable key-value storage" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "partd-1.4.1-py3-none-any.whl", hash = "sha256:27e766663d36c161e2827aa3e28541c992f0b9527d3cca047e13fb3acdb989e6"}, @@ -4292,6 +4852,20 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prometheus-client" +version = "0.20.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, +] + +[package.extras] +twisted = ["twisted"] + [[package]] name = "prompt-toolkit" version = "3.0.43" @@ -5337,6 +5911,17 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -5382,6 +5967,21 @@ files = [ {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, ] +[[package]] +name = "pywinpty" +version = "2.0.13" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -5842,6 +6442,31 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rich" version = "13.7.1" @@ -6142,6 +6767,22 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + [[package]] name = "setuptools" version = "69.5.1" @@ -6237,6 +6878,17 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "snowflake-connector-python" version = "3.9.0" @@ -6532,17 +7184,6 @@ files = [ [package.extras] widechars = ["wcwidth"] -[[package]] -name = "tblib" -version = "3.0.0" -description = "Traceback serialization library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "tblib-3.0.0-py3-none-any.whl", hash = "sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129"}, - {file = "tblib-3.0.0.tar.gz", hash = "sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6"}, -] - [[package]] name = "tenacity" version = "8.2.3" @@ -6557,6 +7198,27 @@ files = [ [package.extras] doc = ["reno", "sphinx", "tornado (>=4.5)"] +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + [[package]] name = "threadpoolctl" version = "3.4.0" @@ -6602,6 +7264,24 @@ pure-sasl = ">=0.6.2" six = ">=1.13.0" thrift = {version = ">=0.10.0", markers = "python_version >= \"3.0\""} +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + [[package]] name = "tomli" version = "2.0.1" @@ -6742,6 +7422,17 @@ files = [ {file = "trove_classifiers-2024.4.10-py3-none-any.whl", hash = "sha256:678bd6fcc5218d72e3304e27a608acc9b91e17bd00c3f3d8c968497c843ad98b"}, ] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20240316" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, +] + [[package]] name = "typing-extensions" version = "4.11.0" @@ -6781,6 +7472,20 @@ tzdata = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" version = "1.26.18" @@ -6869,11 +7574,37 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + [[package]] name = "websocket-client" version = "1.7.0" description = "WebSocket client for Python with low level API options" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, @@ -7248,17 +7979,6 @@ files = [ idna = ">=2.0" multidict = ">=4.0" -[[package]] -name = "zict" -version = "3.0.0" -description = "Mutable mapping tools" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae"}, - {file = "zict-3.0.0.tar.gz", hash = "sha256:e321e263b6a97aafc0790c3cfb3c04656b7066e6738c37fffcca95d803c9fba5"}, -] - [[package]] name = "zipp" version = "3.18.1" @@ -7365,4 +8085,4 @@ visualization = ["graphviz"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "c97c6515f6f3a50be775cabceb8a0bff29caa7fd0288bca4822f0a19bc230f79" +content-hash = "daae147e5a17d0f2c140f807a25eae8a952f400c06e1fa6022c80a2a4c157cf4" diff --git a/pyproject.toml b/pyproject.toml index 4cd788a22065..dd14e3ec4295 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -126,7 +126,6 @@ tomli = ">=2.0.1,<3" [tool.poetry.group.docs.dependencies] altair = { version = ">=5.0.1,<6", python = ">=3.10,<3.13" } -distributed = { version = ">=2022.9.1", python = ">=3.10,<3.13" } ipykernel = { version = ">=6.25.1,<7", python = ">=3.10,<3.13" } itables = { version = ">=1.6.3,<2.1", python = ">=3.10,<3.13" } nbclient = { version = ">=0.8.0,<1", python = ">=3.10,<3.13" } @@ -140,6 +139,10 @@ seaborn = { version = ">=0.12.2,<1", python = ">=3.10,<3.13" } leafmap = { version = ">=0.29.6,<0.31", python = ">=3.10,<3.13" } lonboard = { version = "==0.4.0", python = ">=3.10,<3.13" } jupyter-cache = { version = ">=1.0.0,<2", python = ">=3.10,<3.13" } +jupyterlab = { version = ">=4.1.6,<5", python = ">=3.10,<3.13" } +jupyterlab-night = { version = ">=0.4.6,<1", python = ">=3.10,<3.13" } +jupyterlite-core = { version = ">=0.3.0,<1", python = ">=3.10,<3.13" } +jupyterlite-pyodide-kernel = { version = ">=0.3.1,<1", python = ">=3.10,<3.13" } [tool.poetry.extras] bigquery = [ diff --git a/requirements-dev.txt b/requirements-dev.txt index 7ce0fbf19c65..5fbdb9a84520 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,19 +2,26 @@ aiohttp==3.9.5 ; python_version >= "3.9" and python_version < "4.0" aiosignal==1.3.1 ; python_version >= "3.9" and python_version < "4.0" altair==5.3.0 ; python_version >= "3.10" and python_version < "3.13" annotated-types==0.6.0 ; python_version >= "3.10" and python_version < "3.13" +anyio==4.3.0 ; python_version >= "3.10" and python_version < "3.13" anywidget==0.7.1 ; python_version >= "3.10" and python_version < "3.13" appdirs==1.4.4 ; python_version >= "3.9" and python_version < "4.0" appnope==0.1.4 ; python_version >= "3.10" and python_version < "3.13" and platform_system == "Darwin" +argon2-cffi-bindings==21.2.0 ; python_version >= "3.10" and python_version < "3.13" +argon2-cffi==23.1.0 ; python_version >= "3.10" and python_version < "3.13" +arrow==1.3.0 ; python_version >= "3.10" and python_version < "3.13" asn1crypto==1.5.1 ; python_version >= "3.9" and python_version < "4.0" asttokens==2.4.1 ; python_version >= "3.9" and python_version < "4.0" +async-lru==2.0.4 ; python_version >= "3.10" and python_version < "3.13" async-timeout==4.0.3 ; python_version >= "3.9" and python_version < "3.11" atpublic==4.1.0 ; python_version >= "3.9" and python_version < "4.0" attrs==23.2.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.14.0 ; python_version >= "3.10" and python_version < "3.13" beartype==0.18.5 ; python_version >= "3.10" and python_version < "3.13" beautifulsoup4==4.12.3 ; python_version >= "3.10" and python_version < "3.13" bidict==0.23.1 ; python_version >= "3.9" and python_version < "4.0" bitarray==2.9.2 ; python_version >= "3.9" and python_version < "4.0" black==24.4.0 ; python_version >= "3.9" and python_version < "4.0" +bleach==6.1.0 ; python_version >= "3.10" and python_version < "3.13" bqplot==0.12.43 ; python_version >= "3.10" and python_version < "3.13" branca==0.7.1 ; python_version >= "3.10" and python_version < "3.13" build==1.2.1 ; python_version >= "3.9" and python_version < "4.0" @@ -40,15 +47,15 @@ coverage[toml]==7.4.4 ; python_version >= "3.9" and python_version < "4.0" crashtest==0.4.1 ; python_version >= "3.9" and python_version < "4.0" cryptography==42.0.5 ; python_version >= "3.9" and python_version < "4.0" cycler==0.12.1 ; python_version >= "3.10" and python_version < "3.13" -dask==2024.2.1 ; python_version >= "3.10" and python_version < "3.13" dask[array,dataframe]==2024.2.1 ; python_version >= "3.9" and python_version < "4.0" datafusion==36.0.0 ; python_version >= "3.9" and python_version < "4.0" db-dtypes==1.2.0 ; python_version >= "3.9" and python_version < "4.0" debugpy==1.8.1 ; python_version >= "3.10" and python_version < "3.13" decorator==5.1.1 ; python_version >= "3.9" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "3.13" deltalake==0.16.4 ; python_version >= "3.9" and python_version < "4.0" distlib==0.3.8 ; python_version >= "3.9" and python_version < "4.0" -distributed==2024.2.1 ; python_version >= "3.10" and python_version < "3.13" +doit==0.36.0 ; python_version >= "3.10" and python_version < "3.13" duckdb==0.10.2 ; python_version >= "3.9" and python_version < "4.0" dulwich==0.21.7 ; python_version >= "3.9" and python_version < "4.0" dunamai==1.20.0 ; python_version >= "3.9" and python_version < "4.0" @@ -60,6 +67,7 @@ filelock==3.13.4 ; python_version >= "3.9" and python_version < "4.0" fiona==1.9.6 ; python_version >= "3.9" and python_version < "4.0" folium==0.16.0 ; python_version >= "3.10" and python_version < "3.13" fonttools==4.51.0 ; python_version >= "3.10" and python_version < "3.13" +fqdn==1.5.1 ; python_version >= "3.10" and python_version < "3.13" frozenlist==1.4.1 ; python_version >= "3.9" and python_version < "4.0" fsspec==2024.2.0 ; python_version >= "3.9" and python_version < "4.0" gcsfs==2024.2.0 ; python_version >= "3.9" and python_version < "4.0" @@ -82,6 +90,9 @@ greenlet==3.0.3 ; python_version >= "3.9" and python_version < "4.0" and (platfo griffe==0.44.0 ; python_version >= "3.10" and python_version < "3.13" grpcio-status==1.62.2 ; python_version >= "3.9" and python_version < "4.0" grpcio==1.62.2 ; python_version >= "3.9" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.10" and python_version < "3.13" +httpcore==1.0.5 ; python_version >= "3.10" and python_version < "3.13" +httpx==0.27.0 ; python_version >= "3.10" and python_version < "3.13" humanize==4.9.0 ; python_version >= "3.9" and python_version < "4.0" hypothesis==6.100.1 ; python_version >= "3.9" and python_version < "4.0" identify==2.5.36 ; python_version >= "3.9" and python_version < "4.0" @@ -98,18 +109,32 @@ ipyleaflet==0.18.2 ; python_version >= "3.10" and python_version < "3.13" ipython==8.18.1 ; python_version >= "3.9" and python_version < "4.0" ipytree==0.2.2 ; python_version >= "3.10" and python_version < "3.13" ipywidgets==8.1.2 ; python_version >= "3.10" and python_version < "3.13" +isoduration==20.11.0 ; python_version >= "3.10" and python_version < "3.13" itables==2.0.0 ; python_version >= "3.10" and python_version < "3.13" jaraco-classes==3.4.0 ; python_version >= "3.9" and python_version < "4.0" jedi==0.19.1 ; python_version >= "3.9" and python_version < "4.0" jeepney==0.8.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "linux" jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0" joblib==1.4.0 ; python_version >= "3.9" and python_version < "4.0" +json5==0.9.25 ; python_version >= "3.10" and python_version < "3.13" +jsonpointer==2.4 ; python_version >= "3.10" and python_version < "3.13" jsonschema-specifications==2023.12.1 ; python_version >= "3.10" and python_version < "3.13" jsonschema==4.21.1 ; python_version >= "3.10" and python_version < "3.13" +jsonschema[format-nongpl]==4.21.1 ; python_version >= "3.10" and python_version < "3.13" jupyter-cache==1.0.0 ; python_version >= "3.10" and python_version < "3.13" jupyter-client==8.6.1 ; python_version >= "3.10" and python_version < "3.13" jupyter-core==5.7.2 ; python_version >= "3.10" and python_version < "3.13" +jupyter-events==0.10.0 ; python_version >= "3.10" and python_version < "3.13" +jupyter-lsp==2.2.5 ; python_version >= "3.10" and python_version < "3.13" +jupyter-server-terminals==0.5.3 ; python_version >= "3.10" and python_version < "3.13" +jupyter-server==2.14.0 ; python_version >= "3.10" and python_version < "3.13" +jupyterlab-night==0.4.6 ; python_version >= "3.10" and python_version < "3.13" +jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "3.13" +jupyterlab-server==2.26.0 ; python_version >= "3.10" and python_version < "3.13" jupyterlab-widgets==3.0.10 ; python_version >= "3.10" and python_version < "3.13" +jupyterlab==4.1.6 ; python_version >= "3.10" and python_version < "3.13" +jupyterlite-core==0.3.0 ; python_version >= "3.10" and python_version < "3.13" +jupyterlite-pyodide-kernel==0.3.1 ; python_version >= "3.10" and python_version < "3.13" keyring==24.3.1 ; python_version >= "3.9" and python_version < "4.0" kiwisolver==1.4.5 ; python_version >= "3.10" and python_version < "3.13" leafmap==0.30.1 ; python_version >= "3.10" and python_version < "3.13" @@ -121,21 +146,26 @@ markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0" matplotlib-inline==0.1.7 ; python_version >= "3.9" and python_version < "4.0" matplotlib==3.8.4 ; python_version >= "3.10" and python_version < "3.13" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +mistune==3.0.2 ; python_version >= "3.10" and python_version < "3.13" mizani==0.11.1 ; python_version >= "3.10" and python_version < "3.13" more-itertools==10.2.0 ; python_version >= "3.9" and python_version < "4.0" msgpack==1.0.8 ; python_version >= "3.9" and python_version < "4.0" multidict==6.0.5 ; python_version >= "3.9" and python_version < "4.0" mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "4.0" nbclient==0.10.0 ; python_version >= "3.10" and python_version < "3.13" +nbconvert==7.16.3 ; python_version >= "3.10" and python_version < "3.13" nbformat==5.10.4 ; python_version >= "3.10" and python_version < "3.13" nest-asyncio==1.6.0 ; python_version >= "3.10" and python_version < "3.13" nodeenv==1.8.0 ; python_version >= "3.9" and python_version < "4.0" +notebook-shim==0.2.4 ; python_version >= "3.10" and python_version < "3.13" numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0" oauthlib==3.2.2 ; python_version >= "3.9" and python_version < "4.0" oracledb==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +overrides==7.7.0 ; python_version >= "3.10" and python_version < "3.13" packaging==24.0 ; python_version >= "3.9" and python_version < "4.0" palettable==3.3.3 ; python_version >= "3.10" and python_version < "3.13" pandas==2.2.2 ; python_version >= "3.9" and python_version < "4.0" +pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "3.13" parso==0.8.4 ; python_version >= "3.9" and python_version < "4.0" parsy==2.1 ; python_version >= "3.9" and python_version < "4.0" partd==1.4.1 ; python_version >= "3.9" and python_version < "4.0" @@ -157,6 +187,7 @@ poetry==1.8.2 ; python_version >= "3.9" and python_version < "4.0" polars==0.20.22 ; python_version >= "3.9" and python_version < "4.0" pprintpp==0.4.0 ; python_version >= "3.9" and python_version < "4.0" pre-commit==3.7.0 ; python_version >= "3.9" and python_version < "4.0" +prometheus-client==0.20.0 ; python_version >= "3.10" and python_version < "3.13" prompt-toolkit==3.0.43 ; python_version >= "3.9" and python_version < "4.0" proto-plus==1.23.0 ; python_version >= "3.9" and python_version < "4.0" protobuf==4.25.3 ; python_version >= "3.9" and python_version < "4.0" @@ -206,9 +237,11 @@ pytest-xdist==3.5.0 ; python_version >= "3.9" and python_version < "4.0" pytest==8.1.1 ; python_version >= "3.9" and python_version < "4.0" python-box==7.1.1 ; python_version >= "3.10" and python_version < "3.13" python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +python-json-logger==2.0.7 ; python_version >= "3.10" and python_version < "3.13" pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" pywin32-ctypes==0.2.2 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" pywin32==306 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "3.13" +pywinpty==2.0.13 ; python_version >= "3.10" and python_version < "3.13" and os_name == "nt" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" pyzmq==26.0.2 ; python_version >= "3.10" and python_version < "3.13" quartodoc==0.7.2 ; python_version >= "3.10" and python_version < "3.13" @@ -219,6 +252,8 @@ requests-oauthlib==2.0.0 ; python_version >= "3.9" and python_version < "4.0" requests-toolbelt==1.0.0 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" requests[socks]==2.31.0 ; python_version >= "3.10" and python_version < "3.13" +rfc3339-validator==0.1.4 ; python_version >= "3.10" and python_version < "3.13" +rfc3986-validator==0.1.1 ; python_version >= "3.10" and python_version < "3.13" rich==13.7.1 ; python_version >= "3.9" and python_version < "4.0" rpds-py==0.18.0 ; python_version >= "3.10" and python_version < "3.13" rsa==4.9 ; python_version >= "3.9" and python_version < "4" @@ -228,10 +263,12 @@ scipy==1.13.0 ; python_version >= "3.10" and python_version < "3.13" scooby==0.9.2 ; python_version >= "3.10" and python_version < "3.13" seaborn==0.13.2 ; python_version >= "3.10" and python_version < "3.13" secretstorage==3.3.3 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "linux" +send2trash==1.8.3 ; python_version >= "3.10" and python_version < "3.13" setuptools==69.5.1 ; python_version >= "3.9" and python_version < "4.0" shapely==2.0.4 ; python_version >= "3.9" and python_version < "4.0" shellingham==1.5.4 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +sniffio==1.3.1 ; python_version >= "3.10" and python_version < "3.13" snowflake-connector-python==3.9.0 ; python_version >= "3.9" and python_version < "4.0" sortedcontainers==2.4.0 ; python_version >= "3.9" and python_version < "4.0" soupsieve==2.5 ; python_version >= "3.10" and python_version < "3.13" @@ -242,11 +279,12 @@ stack-data==0.6.3 ; python_version >= "3.9" and python_version < "4.0" statsmodels==0.14.2 ; python_version >= "3.10" and python_version < "3.13" stdlib-list==0.10.0 ; python_version >= "3.9" and python_version < "4.0" tabulate==0.9.0 ; python_version >= "3.10" and python_version < "3.13" -tblib==3.0.0 ; python_version >= "3.10" and python_version < "3.13" tenacity==8.2.3 ; python_version >= "3.10" and python_version < "3.13" +terminado==0.18.1 ; python_version >= "3.10" and python_version < "3.13" threadpoolctl==3.4.0 ; python_version >= "3.10" and python_version < "3.13" thrift-sasl==0.4.3 ; python_version >= "3.9" and python_version < "4.0" thrift==0.16.0 ; python_version >= "3.9" and python_version < "4.0" +tinycss2==1.2.1 ; python_version >= "3.10" and python_version < "3.13" tomli==2.0.1 ; python_version >= "3.9" and python_version < "4.0" tomlkit==0.12.4 ; python_version >= "3.9" and python_version < "4.0" toolz==0.12.1 ; python_version >= "3.9" and python_version < "4.0" @@ -256,13 +294,17 @@ traitlets==5.14.3 ; python_version >= "3.9" and python_version < "4.0" traittypes==0.2.1 ; python_version >= "3.10" and python_version < "3.13" trino==0.328.0 ; python_version >= "3.9" and python_version < "4.0" trove-classifiers==2024.4.10 ; python_version >= "3.9" and python_version < "4.0" +types-python-dateutil==2.9.0.20240316 ; python_version >= "3.10" and python_version < "3.13" typing-extensions==4.11.0 ; python_version >= "3.9" and python_version < "4.0" tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" tzlocal==5.2 ; python_version >= "3.9" and python_version < "4.0" +uri-template==1.3.0 ; python_version >= "3.10" and python_version < "3.13" urllib3==1.26.18 ; python_version >= "3.9" and python_version < "4.0" virtualenv==20.25.3 ; python_version >= "3.9" and python_version < "4.0" watchdog==4.0.0 ; python_version >= "3.10" and python_version < "3.13" wcwidth==0.2.13 ; python_version >= "3.9" and python_version < "4.0" +webcolors==1.13 ; python_version >= "3.10" and python_version < "3.13" +webencodings==0.5.1 ; python_version >= "3.10" and python_version < "3.13" websocket-client==1.7.0 ; python_version >= "3.9" and python_version < "4.0" werkzeug==3.0.2 ; python_version >= "3.9" and python_version < "4.0" whitebox==2.3.1 ; python_version >= "3.10" and python_version < "3.13" @@ -272,6 +314,5 @@ xattr==1.1.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platfo xxhash==3.4.1 ; python_version >= "3.9" and python_version < "4.0" xyzservices==2024.4.0 ; python_version >= "3.10" and python_version < "3.13" yarl==1.9.4 ; python_version >= "3.9" and python_version < "4.0" -zict==3.0.0 ; python_version >= "3.10" and python_version < "3.13" zipp==3.18.1 ; python_version >= "3.9" and python_version < "4.0" zstandard==0.22.0 ; python_version >= "3.9" and python_version < "4.0"