From 060e3386ec50754277ce9ee99827301fe2a91a67 Mon Sep 17 00:00:00 2001 From: Jake Walker Date: Tue, 20 Feb 2024 10:17:19 +0000 Subject: [PATCH] add k-means clustering notebook --- K-Means Clustering.ipynb | 887 +++++++++++++ poetry.lock | 2624 ++++++++++++++++++++++++++++++++++++++ pyproject.toml | 20 + 3 files changed, 3531 insertions(+) create mode 100644 K-Means Clustering.ipynb create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/K-Means Clustering.ipynb b/K-Means Clustering.ipynb new file mode 100644 index 0000000..5a12062 --- /dev/null +++ b/K-Means Clustering.ipynb @@ -0,0 +1,887 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# K-Means Clustering\n", + "\n", + "From: " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from kneed import KneeLocator\n", + "from sklearn.datasets import make_blobs\n", + "from sklearn.cluster import KMeans\n", + "from sklearn.metrics import silhouette_score\n", + "from sklearn.preprocessing import StandardScaler" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generate synthetic data & labels" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "features, true_labels = make_blobs(\n", + " n_samples=200,\n", + " centers=3,\n", + " cluster_std=2.75,\n", + " random_state=42\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 9.77075874, 3.27621022],\n", + " [ -9.71349666, 11.27451802],\n", + " [ -6.91330582, -9.34755911],\n", + " [-10.86185913, -10.75063497],\n", + " [ -8.50038027, -4.54370383]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 0, 2, 2, 2])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "true_labels[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature scaling\n", + "\n", + "The standard scaler shifts the values for each numerical feature so they have a mean of 0 and standard deviation of 1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.13082109, 0.25604351],\n", + " [-1.52698523, 1.41036744],\n", + " [-1.00130152, -1.56583175],\n", + " [-1.74256891, -1.76832509],\n", + " [-1.29924521, -0.87253446]])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scaler = StandardScaler()\n", + "scaled_features = scaler.fit_transform(features)\n", + "\n", + "scaled_features[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## K-Means" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "kmeans = KMeans(\n", + " init=\"random\",\n", + " n_clusters=3,\n", + " n_init=10,\n", + " max_iter=300,\n", + " random_state=42\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
KMeans(init='random', n_clusters=3, n_init=10, random_state=42)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "KMeans(init='random', n_clusters=3, n_init=10, random_state=42)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans.fit(scaled_features)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "74.57960106819853" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans.inertia_" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1.19539276, 0.13158148],\n", + " [-0.25813925, 1.05589975],\n", + " [-0.91941183, -1.18551732]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans.cluster_centers_" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans.n_iter_" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 2, 2])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans.labels_[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choosing the appropriate number of clusters\n", + "\n", + "**SSE** (Sum of Squared Errors) is a measure of the total variation within each cluster. A lower SSE value indicates that the data points are closer to the cluster's center. The SSE is calculated as the sum of the squared differences between each observation and its group's mean." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "kmeans_kwargs = {\n", + " \"init\": \"random\",\n", + " \"n_init\": 10,\n", + " \"max_iter\": 300,\n", + " \"random_state\": 42\n", + "}\n", + "\n", + "see = []\n", + "for k in range(1, 11):\n", + " kmeans = KMeans(n_clusters=k, **kmeans_kwargs)\n", + " kmeans.fit(scaled_features)\n", + " see.append(kmeans.inertia_)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.style.use(\"fivethirtyeight\")\n", + "plt.plot(range(1, 11), see)\n", + "plt.xticks(range(1, 11))\n", + "plt.xlabel(\"Number of Clusters\")\n", + "plt.ylabel(\"SEE\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kl = KneeLocator(range(1, 11), see, curve=\"convex\", direction=\"decreasing\")\n", + "kl.elbow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **silhouette coefficient** is a measure of cluster cohesion and separation, based on:\n", + " - How close the data point is to other points in the cluster\n", + " - How far away the data point is from points in other clusters\n", + "\n", + "Values from -1 to 1, higher values are better." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "silhouette_coefficients = []\n", + "\n", + "for k in range(2, 11):\n", + " kmeans = KMeans(n_clusters=k, **kmeans_kwargs)\n", + " kmeans.fit(scaled_features)\n", + " score = silhouette_score(scaled_features, kmeans.labels_)\n", + " silhouette_coefficients.append(score)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.style.use(\"fivethirtyeight\")\n", + "plt.plot(range(2, 11), silhouette_coefficients)\n", + "plt.xticks(range(2, 11))\n", + "plt.xlabel(\"Number of clusters\")\n", + "plt.ylabel(\"Silhouette coefficient\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Evaluating clustering performance with advanced techniques" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import DBSCAN\n", + "from sklearn.datasets import make_moons\n", + "from sklearn.metrics import adjusted_rand_score" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "features, true_labels = make_moons(n_samples=250, noise=0.05, random_state=42)\n", + "scaled_features = scaler.fit_transform(features)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kmeans_silhouette=0.50, dbscan_silhouette=0.38\n" + ] + } + ], + "source": [ + "kmeans = KMeans(n_clusters=2)\n", + "dbscan = DBSCAN(eps=0.3)\n", + "\n", + "kmeans.fit(scaled_features)\n", + "dbscan.fit(scaled_features)\n", + "\n", + "kmeans_silhouette = silhouette_score(scaled_features, kmeans.labels_)\n", + "dbscan_silhouette = silhouette_score(scaled_features, dbscan.labels_)\n", + "\n", + "print(f\"{kmeans_silhouette=:.2f}, {dbscan_silhouette=:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Adjusted rand index (ARI) uses true cluster assignments to measure the similarity between true and predicted labels. This gives a value between -1 and 1. A score close to 0 indicates random assignments, and a score close to 1 indicates perfectly labeled clusters." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ari_kmeans=0.47, ari_dbscan=1.00\n" + ] + } + ], + "source": [ + "ari_kmeans = adjusted_rand_score(true_labels, kmeans.labels_)\n", + "ari_dbscan = adjusted_rand_score(true_labels, dbscan.labels_)\n", + "\n", + "print(f\"{ari_kmeans=:.2f}, {ari_dbscan=:.2f}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "data-science-research-W2__OPFf-py3.11", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..b59d50d --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2624 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "anyio" +version = "4.0.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, + {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[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 = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +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]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.13.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, +] + +[package.dependencies] +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[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 = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "comm" +version = "0.2.0" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.0-py3-none-any.whl", hash = "sha256:2da8d9ebb8dd7bfc247adaff99f24dce705638a8042b85cb995066793e391001"}, + {file = "comm-0.2.0.tar.gz", hash = "sha256:a517ea2ca28931c7007a7a99c562a0fa5883cfb48963140cf642c41c948498be"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "contourpy" +version = "1.2.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, +] + +[package.dependencies] +numpy = ">=1.20,<2.0" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "debugpy" +version = "1.8.0" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, + {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, + {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, + {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, + {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, + {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, + {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, + {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, + {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, + {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, + {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, + {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, + {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, + {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, + {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, + {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, + {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, + {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {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 = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastjsonschema" +version = "2.18.1" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.18.1-py3-none-any.whl", hash = "sha256:aec6a19e9f66e9810ab371cc913ad5f4e9e479b63a7072a2cd060a9369e329a8"}, + {file = "fastjsonschema-2.18.1.tar.gz", hash = "sha256:06dc8680d937628e993fa0cd278f196d20449a1adc087640710846b324d422ea"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "fonttools" +version = "4.49.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, + {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, + {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, + {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, + {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, + {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, + {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, + {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, + {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, + {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, + {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, + {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, + {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +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 = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "ipykernel" +version = "6.26.0" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.26.0-py3-none-any.whl", hash = "sha256:3ba3dc97424b87b31bb46586b5167b3161b32d7820b9201a9e698c71e271602c"}, + {file = "ipykernel-6.26.0.tar.gz", hash = "sha256:553856658eb8430bbe9653ea041a41bff63e9606fc4628873fc92a6cf3abd404"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.17.2" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ipython-8.17.2-py3-none-any.whl", hash = "sha256:1e4d1d666a023e3c93585ba0d8e962867f7a111af322efff6b9c58062b3e5444"}, + {file = "ipython-8.17.2.tar.gz", hash = "sha256:126bb57e1895594bb0d91ea3090bbd39384f6fe87c3d57fd558d0670f50339bb"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + +[[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 = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "joblib" +version = "1.3.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, +] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[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.19.2" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, +] + +[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)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + +[[package]] +name = "jupyter-client" +version = "8.6.0" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, + {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, +] + +[package.dependencies] +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.5.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"}, + {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.9.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, + {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, +] + +[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.0" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, + {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.10.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.10.0-py3-none-any.whl", hash = "sha256:dde56c9bc3cb52d7b72cc0f696d15d7163603526f1a758eb4a27405b73eab2a5"}, + {file = "jupyter_server-2.10.0.tar.gz", hash = "sha256:47b8f5e63440125cb1bb8957bf12b18453ee5ed9efe42d2f7b2ca66a7019a278"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.6.0" +jupyter-server-terminals = "*" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = "*" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = "*" + +[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)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.4.4" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, + {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.0.8" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.8-py3-none-any.whl", hash = "sha256:2ff5aa2a51eb21df241d6011c236e88bd1ff9a5dbb75bebc54472f9c18bfffa4"}, + {file = "jupyterlab-4.0.8.tar.gz", hash = "sha256:c4fe93f977bcc987bd395d7fae5ab02e0c042bf4e0f7c95196f3e2e578c2fb3a"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +ipykernel = "*" +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 = "*" +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.10.1)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.292)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "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"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.25.1" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.25.1-py3-none-any.whl", hash = "sha256:dce9714d91fb3e53d2b37d0e0619fa26ed223c8e7b8c81cca112926de19b53a4"}, + {file = "jupyterlab_server-2.25.1.tar.gz", hash = "sha256:6491283b0000698eae1a38c48507930560dfcf7461aea0015368698aab34dd9c"}, +] + +[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)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "kneed" +version = "0.8.5" +description = "Knee-point detection in Python" +optional = false +python-versions = ">=3.5" +files = [ + {file = "kneed-0.8.5-py3-none-any.whl", hash = "sha256:2f3fbd4e9bd808e65052841448702c41ea64d5fc78735cbfc97ab25f08bd9815"}, + {file = "kneed-0.8.5.tar.gz", hash = "sha256:a4847ac4f1d04852fea278d5de7aa8bfdc3beb7fbca4a182fec0f0efee43f4b1"}, +] + +[package.dependencies] +numpy = ">=1.14.2" +scipy = ">=1.0.0" + +[package.extras] +plot = ["matplotlib (>=2.2.5)"] +testing = ["matplotlib (>=2.2.5)", "pytest (>=5.0.1)", "pytest-cov (>=3.0.0)"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib" +version = "3.8.3" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, + {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, + {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, + {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, + {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, + {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, + {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, + {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, + {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, + {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[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 = "nbclient" +version = "0.9.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, + {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +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)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.11.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.11.0-py3-none-any.whl", hash = "sha256:d1d417b7f34a4e38887f8da5bdfd12372adf3b80f995d57556cb0972c68909fe"}, + {file = "nbconvert-7.11.0.tar.gz", hash = "sha256:abedc01cf543177ffde0bfc2a69726d5a478f6af10a332fc1bf29fcb4f0cf000"}, +] + +[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)", "pytest"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.9.2" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, +] + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.8" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"}, + {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"}, +] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[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" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "overrides" +version = "7.4.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pandas" +version = "2.2.0" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670"}, + {file = "pandas-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1"}, + {file = "pandas-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71"}, + {file = "pandas-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042"}, + {file = "pandas-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7"}, + {file = "pandas-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae"}, + {file = "pandas-2.2.0.tar.gz", hash = "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +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.0" +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.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pillow" +version = "10.2.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "prometheus-client" +version = "0.18.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, + {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.39" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.6" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[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" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.12" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, + {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, + {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, + {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, + {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, + {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "25.1.1" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[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 = "rpds-py" +version = "0.12.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, +] + +[[package]] +name = "scikit-learn" +version = "1.4.1.post1" +description = "A set of python modules for machine learning and data mining" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scikit-learn-1.4.1.post1.tar.gz", hash = "sha256:93d3d496ff1965470f9977d05e5ec3376fb1e63b10e4fda5e39d23c2d8969a30"}, + {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c540aaf44729ab5cd4bd5e394f2b375e65ceaea9cdd8c195788e70433d91bbc5"}, + {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4310bff71aa98b45b46cd26fa641309deb73a5d1c0461d181587ad4f30ea3c36"}, + {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f43dd527dabff5521af2786a2f8de5ba381e182ec7292663508901cf6ceaf6e"}, + {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02e27d65b0c7dc32f2c5eb601aaf5530b7a02bfbe92438188624524878336f2"}, + {file = "scikit_learn-1.4.1.post1-cp310-cp310-win_amd64.whl", hash = "sha256:629e09f772ad42f657ca60a1a52342eef786218dd20cf1369a3b8d085e55ef8f"}, + {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6145dfd9605b0b50ae72cdf72b61a2acd87501369a763b0d73d004710ebb76b5"}, + {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1afed6951bc9d2053c6ee9a518a466cbc9b07c6a3f9d43bfe734192b6125d508"}, + {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce03506ccf5f96b7e9030fea7eb148999b254c44c10182ac55857bc9b5d4815f"}, + {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ba516fcdc73d60e7f48cbb0bccb9acbdb21807de3651531208aac73c758e3ab"}, + {file = "scikit_learn-1.4.1.post1-cp311-cp311-win_amd64.whl", hash = "sha256:78cd27b4669513b50db4f683ef41ea35b5dddc797bd2bbd990d49897fd1c8a46"}, + {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a1e289f33f613cefe6707dead50db31930530dc386b6ccff176c786335a7b01c"}, + {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0df87de9ce1c0140f2818beef310fb2e2afdc1e66fc9ad587965577f17733649"}, + {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712c1c69c45b58ef21635360b3d0a680ff7d83ac95b6f9b82cf9294070cda710"}, + {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1754b0c2409d6ed5a3380512d0adcf182a01363c669033a2b55cca429ed86a81"}, + {file = "scikit_learn-1.4.1.post1-cp312-cp312-win_amd64.whl", hash = "sha256:1d491ef66e37f4e812db7e6c8286520c2c3fc61b34bf5e59b67b4ce528de93af"}, + {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aa0029b78ef59af22cfbd833e8ace8526e4df90212db7ceccbea582ebb5d6794"}, + {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:14e4c88436ac96bf69eb6d746ac76a574c314a23c6961b7d344b38877f20fee1"}, + {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cd3a77c32879311f2aa93466d3c288c955ef71d191503cf0677c3340ae8ae0"}, + {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3ee19211ded1a52ee37b0a7b373a8bfc66f95353af058a210b692bd4cda0dd"}, + {file = "scikit_learn-1.4.1.post1-cp39-cp39-win_amd64.whl", hash = "sha256:234b6bda70fdcae9e4abbbe028582ce99c280458665a155eed0b820599377d25"}, +] + +[package.dependencies] +joblib = ">=1.2.0" +numpy = ">=1.19.5,<2.0" +scipy = ">=1.6.0" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "pandas (>=1.1.5)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.19.12)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.17.2)"] + +[[package]] +name = "scipy" +version = "1.12.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, + {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, + {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, + {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, + {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, + {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, + {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, + {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, + {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, + {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<1.29.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "seaborn" +version = "0.13.2" +description = "Statistical data visualization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, + {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, +] + +[package.dependencies] +matplotlib = ">=3.4,<3.6.1 || >3.6.1" +numpy = ">=1.20,<1.24.0 || >1.24.0" +pandas = ">=1.2" + +[package.extras] +dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] + +[[package]] +name = "send2trash" +version = "1.8.2" +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.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "terminado" +version = "0.18.0" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, + {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, +] + +[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.3.0" +description = "threadpoolctl" +optional = false +python-versions = ">=3.8" +files = [ + {file = "threadpoolctl-3.3.0-py3-none-any.whl", hash = "sha256:6155be1f4a39f31a18ea70f94a77e0ccd57dced08122ea61109e7da89883781e"}, + {file = "threadpoolctl-3.3.0.tar.gz", hash = "sha256:5dac632b4fa2d43f42130267929af3ba01399ef4bd1882918e92dbc30365d30c"}, +] + +[[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 = "tornado" +version = "6.3.3" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, +] + +[[package]] +name = "traitlets" +version = "5.13.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, + {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[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 = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wcwidth" +version = "0.2.9" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"}, + {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"}, +] + +[[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.6.4" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "92e1c0f4a71374b3a636832fb4b8b4b9c7ebef9cdedc6173cfd44ae2a3df8cf5" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..36e749c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "data-science-research" +version = "0.1.0" +description = "" +authors = ["Jake Walker "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.11" +jupyterlab = "^4.0.8" +matplotlib = "^3.8.3" +seaborn = "^0.13.2" +numpy = "^1.26.4" +kneed = "^0.8.5" +scikit-learn = "^1.4.1.post1" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api"