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"