From d47af7895477a615b02579722a68c6effb822be0 Mon Sep 17 00:00:00 2001 From: Agrin Hilmkil Date: Tue, 24 Oct 2023 21:53:18 +0100 Subject: [PATCH] Release 0.3.5 (#72) * Release 0.3.5 * Add devcontainer badge to README.md * Add missing dotfiles * Delete removed files * Add missing pre-commit config * Fix extra argument for pre-commit --- .devcontainer/devcontainer.json | 10 +- .github/workflows/ci-build.yml | 32 +- .pre-commit-config.yaml | 39 + Dockerfile | 5 +- README.md | 18 +- examples/csuite_example.ipynb | 12 +- .../multi_investment_sales_attribution.ipynb | 126 +- poetry.lock | 4623 ++++++++++++----- pyproject.toml | 397 +- .../config/lightning/default_data.yaml | 1 + .../config/lightning/default_gaussian.yaml | 6 +- .../config/lightning/default_spline.yaml | 6 +- .../data_generation/samplers/__init__.py | 0 .../functional_relationships_sampler.py | 48 + .../samplers/noise_dist_sampler.py | 68 + .../data_generation/samplers/sampler.py | 16 + .../data_generation/samplers/sem_sampler.py | 30 + .../data_generation/synthetic_dataset.py | 116 + .../datasets/causica_dataset_format.py | 3 +- src/causica/datasets/interventional_data.py | 14 +- src/causica/datasets/normalization.py | 84 + src/causica/datasets/standardizer.py | 75 - src/causica/distributions/noise/bernoulli.py | 4 +- .../distributions/noise/categorical.py | 2 +- src/causica/distributions/transforms.py | 150 - .../distributions/transforms/__init__.py | 3 + src/causica/distributions/transforms/base.py | 132 + src/causica/distributions/transforms/joint.py | 100 + .../transforms/tensor_to_tensordict.py | 83 + .../functional_relationships/__init__.py | 12 +- .../deci_functional_relationships.py | 26 + .../do_functional_relationships.py | 4 +- .../functional_relationships.py | 8 - src/causica/functional_relationships/icgnn.py | 217 - .../linear_functional_relationships.py | 4 +- .../rff_functional_relationships.py | 76 + src/causica/lightning/callbacks.py | 11 +- .../data_modules/basic_data_module.py | 6 +- .../data_modules/synthetic_data_module.py | 200 + .../data_modules/variable_spec_data.py | 63 +- src/causica/lightning/modules/deci_module.py | 104 +- src/causica/nn/__init__.py | 1 + src/causica/nn/deci_embed_nn.py | 162 + src/causica/training/auglag.py | 110 +- src/causica/training/per_variable_metrics.py | 245 +- .../data_generation/test_synthetic_dataset.py | 111 + test/datasets/test_datasets.py | 1 - test/datasets/test_standardizer.py | 8 +- test/distributions/noise/test_joint.py | 6 +- test/distributions/test_sem_distribution.py | 4 +- test/distributions/transforms/test_base.py | 43 + .../test_joint.py} | 20 +- .../transforms/test_transform_modules.py | 126 + .../test_functional_relationships.py | 82 +- test/integration/decimodule.pt | Bin 0 -> 260889 bytes test/integration/test_evaluation.py | 16 - test/integration/test_pytorch_lightning.py | 53 +- .../test_deci_embed_nn.py} | 4 +- test/sem/test_treatment_effects.py | 24 +- test/training/test_per_variable_metrics.py | 63 - 60 files changed, 5700 insertions(+), 2313 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 src/causica/data_generation/samplers/__init__.py create mode 100644 src/causica/data_generation/samplers/functional_relationships_sampler.py create mode 100644 src/causica/data_generation/samplers/noise_dist_sampler.py create mode 100644 src/causica/data_generation/samplers/sampler.py create mode 100644 src/causica/data_generation/samplers/sem_sampler.py create mode 100644 src/causica/data_generation/synthetic_dataset.py create mode 100644 src/causica/datasets/normalization.py delete mode 100644 src/causica/datasets/standardizer.py delete mode 100644 src/causica/distributions/transforms.py create mode 100644 src/causica/distributions/transforms/__init__.py create mode 100644 src/causica/distributions/transforms/base.py create mode 100644 src/causica/distributions/transforms/joint.py create mode 100644 src/causica/distributions/transforms/tensor_to_tensordict.py create mode 100644 src/causica/functional_relationships/deci_functional_relationships.py delete mode 100644 src/causica/functional_relationships/icgnn.py create mode 100644 src/causica/functional_relationships/rff_functional_relationships.py create mode 100644 src/causica/lightning/data_modules/synthetic_data_module.py create mode 100644 src/causica/nn/__init__.py create mode 100644 src/causica/nn/deci_embed_nn.py create mode 100644 test/data_generation/test_synthetic_dataset.py create mode 100644 test/distributions/transforms/test_base.py rename test/distributions/{test_transforms.py => transforms/test_joint.py} (67%) create mode 100644 test/distributions/transforms/test_transform_modules.py create mode 100644 test/integration/decimodule.pt rename test/{functional_relationships/test_fgnni.py => nn/test_deci_embed_nn.py} (84%) delete mode 100644 test/training/test_per_variable_metrics.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b7fb275..12c13da 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,10 +6,7 @@ "target": "dev" }, "runArgs": [ - // The default shared memory size of Docker is 64MB which can lead to memory - // issues when using Pytorch dataloaders with multiple workers. - // See https://github.com/aws/sagemaker-python-sdk/issues/937 and - // https://github.com/pytorch/pytorch#docker-image. + // give headspace for pytorch dataloaders passing tensors across processes "--shm-size=1gb" ], "containerEnv": { @@ -22,7 +19,8 @@ "hostRequirements": { "gpu": "optional" // Mount GPU(s) if available }, - "postStartCommand": "git config --global core.editor \"code --wait\"", + "postCreateCommand": "pre-commit install", + "postStartCommand": "git config --global core.editor \"code --wait\" && poetry install", "shutdownAction": "none", "customizations": { "vscode": { @@ -33,7 +31,7 @@ "python.testing.pytestEnabled": true, "python.testing.pytestArgs": [ "--continue-on-collection-errors", - "causica/test" + "test" ], "python.testing.unittestEnabled": false, "vim.textwidth": 120, diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index f94647c..0dc5e83 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -14,47 +14,41 @@ jobs: steps: - uses: actions/checkout@v3 - with: - path: "repo" - uses: actions/setup-python@v2 with: - python-version: "3.9" + python-version: "3.10" - uses: actions/cache@v3 with: path: ~/.cache/pypoetry/virtualenvs - key: ${{ hashFiles('repo/poetry.lock') }} + key: ${{ hashFiles('poetry.lock') }} id: cache - + - name: Install poetry run: | curl -sSL https://install.python-poetry.org | python3 - - name: Install dependencies - shell: bash -l {0} run: | - cd repo - poetry env use 3.9 + poetry env use 3.10 poetry install if: steps.cache.outputs.cache-hit != 'true' + - name: Verify pre-commit checks + uses: pre-commit/action@v3.0.0 + with: + extra_args: --all-files + - name: Test with pytest - shell: bash -l {0} - run: | - cd repo - poetry run python -m pytest ./test + run: poetry run python -m pytest ./test - name: Create build artifact - shell: bash -l {0} - run: | - cd repo - poetry build + run: poetry build - name: Upload build artifact - # if: github.ref == 'refs/heads/main' # only create artifacts on push to main uses: actions/upload-artifact@v3 with: name: Build artifacts - path: ./repo/dist - retention-days: 90 \ No newline at end of file + path: ./dist + retention-days: 90 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..deb80ca --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,39 @@ +repos: +- repo: local + hooks: + - id: black + name: black + entry: poetry run black + language: system + types_or: [python, jupyter] + args: [--config=./pyproject.toml] +- repo: local + hooks: + - id: isort + name: isort + entry: poetry run isort + language: system + types: [python] +- repo: local + hooks: + - id: poetry lock + name: poetry lock check + entry: poetry lock --check + pass_filenames: false + language: system +- repo: local + hooks: + - id: mypy + name: mypy + entry: poetry run mypy + pass_filenames: false + language: system + types: [python] + args: ["--config-file=pyproject.toml", "."] +- repo: local + hooks: + - id: pylint + name: pylint + entry: poetry run pylint + language: system + types: [python] diff --git a/Dockerfile b/Dockerfile index 721f04b..9bb91d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,8 +31,7 @@ RUN curl -sSL https://install.python-poetry.org | python3 - WORKDIR /workspaces/causica COPY pyproject.toml poetry.lock ./ RUN --mount=type=cache,target=/root/.cache/pypoetry,sharing=locked \ - mkdir -p src/causica && touch README.md src/causica/__init__.py && \ - poetry install --only main + poetry install --only main --no-root --no-directory FROM base as deploy COPY . /workspaces/causica @@ -74,4 +73,4 @@ RUN <" ] @@ -474,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -496,7 +496,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -516,7 +516,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -543,7 +543,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -580,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -600,10 +600,19 @@ "\n", "lightning_module = DECIModule(\n", " noise_dist=ContinuousNoiseDist.GAUSSIAN,\n", - " prior_sparsity_lambda=1.0,\n", - " init_rho=1.0,\n", - " init_alpha=0.0,\n", - " auglag_config=AugLagLRConfig(lr_init_dict={\"vardist\": 1e-2, \"icgnn\": 3e-4, \"noise_dist\": 3e-3}),\n", + " prior_sparsity_lambda=43.0,\n", + " init_rho=30.0,\n", + " init_alpha=0.20,\n", + " auglag_config=AugLagLRConfig(\n", + " max_inner_steps=3400,\n", + " max_outer_steps=8,\n", + " lr_init_dict={\n", + " \"icgnn\": 0.00076,\n", + " \"vardist\": 0.0098,\n", + " \"functional_relationships\": 3e-4,\n", + " \"noise_dist\": 0.0070,\n", + " },\n", + " ),\n", ")\n", "\n", "lightning_module.constraint_matrix = torch.tensor(constraint_matrix)\n", @@ -619,7 +628,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -627,12 +636,19 @@ "output_type": "stream", "text": [ "You are using a CUDA device ('NVIDIA A100 80GB PCIe') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision\n", + "Missing logger folder: /workspaces/causica/pkg/causica/examples/lightning_logs\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", "\n", " | Name | Type | Params\n", "------------------------------------------------------\n", - "0 | sem_module | SEMDistributionModule | 20.1 K\n", - "1 | auglag_loss | AugLagLossCalculator | 0 \n", + "0 | auglag_loss | AugLagLossCalculator | 0 \n", + "1 | sem_module | SEMDistributionModule | 20.1 K\n", "------------------------------------------------------\n", "19.9 K Trainable params\n", "196 Non-trainable params\n", @@ -643,7 +659,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7b109af6e544453a9d371310612cd8d4", + "model_id": "94ddb8a3368740c0bd3b8ed63007c1ed", "version_major": 2, "version_minor": 0 }, @@ -658,22 +674,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Updating alpha to: 4.655742645263672\n", - "Updating alpha to: 7.376716613769531\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n", - "Updating rho, dag penalty prev: 2.7209739685\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "`Trainer.fit` stopped: `max_epochs=2000` reached.\n" + "Updating alpha to: 71.24188232421875\n", + "Updating alpha to: 106.83052062988281\n", + "Updating rho, dag penalty prev: 1.1862878799\n", + "Updating alpha to: 534.152587890625\n", + "Updating rho, dag penalty prev: 0.0000000000\n", + "Updating alpha to: 2670.762939453125\n", + "Updating alpha to: 13353.814453125\n", + "Updating alpha to: 66769.0703125\n" ] } ], @@ -691,7 +699,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -700,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -712,12 +720,12 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -769,18 +777,18 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'Tech Support': (13534.717, 161.19157),\n", - " 'Discount': (6590.535, 144.62265),\n", - " 'New Engagement Strategy': (3145.7988, 169.46815)}" + "{'Tech Support': (8176.4062, 153.94827),\n", + " 'Discount': (5063.41, 151.71974),\n", + " 'New Engagement Strategy': (182.05078, 161.37265)}" ] }, - "execution_count": 30, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -789,14 +797,14 @@ "revenue_estimated_ate = {}\n", "num_samples = 10 if test_run else 20000\n", "sample_shape = torch.Size([num_samples])\n", - "transform = data_module.normalizer.transform_modules[outcome]().inv\n", + "normalizer = data_module.normalizer\n", "\n", "for treatment in treatment_columns:\n", " intervention_a = TensorDict({treatment: torch.tensor([1.0])}, batch_size=tuple())\n", " intervention_b = TensorDict({treatment: torch.tensor([0.0])}, batch_size=tuple())\n", "\n", - " rev_a_samples = transform(sem.do(interventions=intervention_a).sample(sample_shape)[outcome])\n", - " rev_b_samples = transform(sem.do(interventions=intervention_b).sample(sample_shape)[outcome])\n", + " rev_a_samples = normalizer.inv(sem.do(interventions=intervention_a).sample(sample_shape))[outcome]\n", + " rev_b_samples = normalizer.inv(sem.do(interventions=intervention_b).sample(sample_shape))[outcome]\n", "\n", " ate_mean = rev_a_samples.mean(0) - rev_b_samples.mean(0)\n", " ate_std = np.sqrt((rev_a_samples.var(0) + rev_b_samples.var(0)) / num_samples)\n", @@ -818,12 +826,12 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { - "image/png": "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DOzbt68SEhK0cOFC5eXl6d5771VYWJhSU1O9NDIAAF/E9zkAgL+wGWNMXXfCH3jyynkAQN2qq3P2hAkTtHbtWq1evbra9cYYRUVF6ZFHHtGjjz4qSSopKVFERIQWL16sIUOGaOfOnerYsaM2btyoHj16SJIyMjI0YMAAHThwQFFRUVqwYIEef/xxFRQUKDg42PrsFStWWF9g/9vx48d1/Phxa97lcik6OppcAwAfUFe5tmrVKk2fPl25ubk6ePCg3n33XbcXDd1zzz167bXX3LZJTExURkaGNV9UVKSHHnpI//M//6OAgAANHjxYc+bMUdOmTa02W7du1ciRI7Vx40a1bNlSDz30kB577DGP+sr3NQDwDZ6crz2+/RwAAPw67733nnr06KHbbrtN4eHh6tatm/76179a6/Pz81VQUKCEhARrmcPhUFxcnLKzsyVJ2dnZCgsLswqakpSQkKCAgADl5ORYbXr37m0VNKXKL5G7du3S4cOHq+3b1KlT5XA4rCk6Otqrxw4A8D8//fSTunTpovnz55+xTb9+/XTw4EFrevPNN93WJycna/v27crMzNT777+vVatWud1VUHX3QatWrZSbm6vp06dr8uTJevnll2vsuAAAvsHj288BAMCv8+2332rBggUaO3as/u///b/auHGjHn74YQUHB2vYsGEqKCiQJEVERLhtFxERYa0rKChQeHi42/qgoCA1b97crc1/v9m2ap8FBQVut7tXSUtL09ixY635ql9qAgBwJv3791f//v3P2sZut8vpdFa7bufOncrIyHC7+2DevHkaMGCAZsyYoaioKC1ZskQnTpzQokWLFBwcrNjYWG3evFkzZ87kkSoA0MDxS00AAGpJRUWFrrrqKj377LPq1q2bUlNTNWLEiHrxYga73a7Q0FC3CQCAC/X5558rPDxc7dq104MPPqgff/zRWldTdx9IlY9VcblcbhMAwL9Q1AQAoJZERkaqY8eObss6dOigffv2SZL1S5bCwkK3NoWFhdY6p9OpQ4cOua0/efKkioqK3NpUt49ffgYAADWtX79+ev3115WVlaXnn39eX3zxhfr376/y8nJJ53/3QXV3MFStOxMeqwIA/u9XFTWLi4v1yiuvKC0tTUVFRZKkL7/8Ut9//71XOwcAQH3grdz7wx/+oF27drkt++abb9SqVStJUkxMjJxOp7Ky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cbGJiIgwd999t9m2bZt56623zEUXXWReeuklj/pKrgGA76irXPvwww/N448/bt555x0jybz77rtu65977jnjcDjMihUrzJYtW8zAgQNNTEyMOXr0qNWmX79+pkuXLmb9+vVm9erVpk2bNm65VlJSYiIiIkxycrLZtm2befPNN03jxo3JNQDwU56crz0ualapqKgwK1euNPfdd59p1qyZcTgcZvjw4b92dz6PkAQA3/FrztneyL077rjDREZGmuDgYHPppZeaO+64w+zZs8da/80335hbb73VhIeHm4suush07tzZvP7662778NbFvHMh1wDAd9RVrv3Sfxc1KyoqjNPpNNOnT7eWFRcXG7vdbt58801jjDE7duwwkszGjRutNh999JGx2Wzm+++/N8YY85e//MU0a9bMHD9+3Gozfvx4065dO4/6R64BgG/w5HxtM8aYC/2155dffqmUlBRt3bpV5eXlF7o7n+RyueRwOFRSUqLQ0NC67g4A4Cwu9JzdEHKPXAMA31Efcs1ms+ndd9+1HhX27bff6sorr9RXX31lvSNBkq699lp17dpVc+bM0aJFi/TII4+43QZ/8uRJhYSE6O2339Ytt9yioUOHyuVyud3a/tlnn+mGG25QUVHRGR+tcvz4cR0/ftyar3oBHrkGAPWbJ5nm8TM1qxw4cEDTpk1T165ddfXVV6tp06aaP3/+r90dAAD1GrkHAPAnNZ1rBQUFkqSIiAi35REREda6goIChYeHu60PCgpS8+bN3dpUt49ffkZ1pk6dKofDYU3R0dEXdkAAgHrH47efv/TSS1q6dKnWrl2r9u3bKzk5Wf/617/UqlWrmugfAAB1itwDAPiThpJraWlpbi+HrfqlJgDAf3hc1Hz66aeVlJSkuXPnqkuXLjXRJwAA6g1yDwDgT2or15xOpySpsLBQkZGR1vLCwkLrdnSn06lDhw65bXfy5EkVFRVZ2zudThUWFrq1qZqvalMdu90uu91+wccBAKi/PC5q7tu3TzabrSb6AgBAvUPuAQD8SW3lWkxMjJxOp7KysqwipsvlUk5Ojh588EFJUnx8vIqLi5Wbm6vu3btLklauXKmKigrFxcVZbR5//HGVlZWpUaNGkqTMzEy1a9fujM/TBAA0DB4/U9Nms2n16tW66667FB8fr++//16S9MYbb2jNmjVe7yAAAHWJ3AMA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", + "image/png": "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IqIiVqQ9LA0NDbFw4UIsXLiwwNvExMQolZUrVw4bN25853a1a9dGeHi4ihESERERERHRu/j7+8PLywseHh6YPn26WH7+/HlkZGTAw8NDLHNwcEDlypURGRmJhg0bIjIyErVq1YKZmZlYx9PTE4MHD8bVq1dRr149peOlpaUhLS1NXE5JSSmkMyMioqJSpA2WREREREREVHL9/vvv+Oeff3D27FmldQkJCdDW1oaxsbGk3MzMDAkJCWKdNxsrc9fnrstLUFAQpkyZooboiYiouCrSV8KJiIiIiIioZLp//z6+//57hIaGQldX95MdNyAgAMnJyeLn/v37n+zYRET0abDBkoiIiIiIiFR2/vx5JCYmon79+tDU1ISmpiaOHTuGRYsWQVNTE2ZmZkhPT0dSUpJku0ePHsHc3BwAYG5urjRreO5ybp236ejowMjISPIhIqLShQ2WREREREREpLLmzZvjypUruHjxovhp0KABfH19xZ+1tLRw6NAhcZsbN24gNjYWLi4uAAAXFxdcuXIFiYmJYp2wsDAYGRmhRo0an/yciIioeOAYlkRERERERKQyQ0ND1KxZU1Kmr6+P8uXLi+V9+/bFqFGjUK5cORgZGWHYsGFwcXFBw4YNAQAtW7ZEjRo10LNnT8yZMwcJCQn46aef4O/vDx0dnU9+TkREVDywwZKIiIiIiIgKxYIFC6ChoQFvb2+kpaXB09MTy5YtE9fL5XLs2rULgwcPhouLC/T19eHn54epU6cWYdRERFTU2GBJREREREREanH06FHJsq6uLpYuXYqlS5fmu42VlRX27NlTyJEREVFJwjEsiYiIiIiIiIiIqNhggyUREREREREREREVG2ywJCIiIiIiIiIiomKDDZZERERERERERERUbLDBkoiIiIiIiIiIiIoNNlgSERERERERERFRscEGSyIiIiIiIiIiIio22GBJRERERERERERExQYbLImIiIiIiIiIiKjYYIMlERERERERERERFRuaqlTOzs7GsWPHEB4ejnv37iE1NRUmJiaoV68ePDw8UKlSpcKKk4iISO2Y14iIqKRjLiMiotKoQD0sX716henTp6NSpUpo06YN9u7di6SkJMjlcty+fRuTJ0+GjY0N2rRpg1OnThV2zERERB+FeY2IiEo65jIiIirNCtTDslq1anBxccHKlSvRokULaGlpKdW5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ti0tLU0DBw5UWFiYKlWqpNatW+vDDz+0e1xGRoZiYmIUGBio4OBgDR06VFevXrUbc/jwYT322GMKCAhQnTp1NGfOnNI4JAAAAAAoFTQsAQBwsL179+qdd95RixYt7LY/99xzOnnypD766COlpqbq6aefVr9+/XTgwAHbmJiYGB09elSJiYn65JNPtG3bNg0fPty2PysrS926dVO9evWUkpKiuXPn6tVXX9W7775bascHAIAkzZo1Sx06dFDFihUVHBxc5JizZ8+qZ8+eqlixomrUqKEJEybo5s2bdmO2bt2q1q1by9/fXw0bNtTKlSudXzwAwK3RsAQAwIGuXr2qmJgYLVu2TFWrVrXbt2vXLr344otq166dGjRooClTpig4OFgpKSmSpOPHj+uLL77Qe++9p/bt26tjx45avHix1q1bp59++kmStGbNGuXk5Gj58uVq1qyZ+vfvr5deeknz588v9WMFAJRtOTk56tu3r0aNGlXk/ry8PPXs2VM5OTnatWuXVq1apZUrVyo+Pt425vTp0+rZs6cef/xxHTx4UGPHjtWf/vQnffnll6V1GAAAN0TDEgAABxo9erR69uypqKioO/Z16NBB69evV0ZGhvLz87Vu3Tr98ssv6tKliyQpOTlZwcHBatu2re0xUVFR8vHx0e7du21jOnXqJD8/P9uY6OhonTx5UpcvXy6ypuzsbGVlZdndAAC4X9OnT9e4cePUvHnzIvd/9dVXOnbsmN5//321atVKTzzxhF577TUtWbJEOTk5kqSlS5cqIiJCb7zxhpo0aaLY2Fj94Q9/0JtvvlmahwIAcDMubVjWr19fFovljtvo0aMlSadOnVKfPn0UGhqqwMBA9evXTxcvXrT7G6z1BQBwF+vWrdP+/fs1e/bsIvd/8MEHys3NVbVq1eTv768RI0bon//8pxo2bCjJusZljRo17B7j6+urkJAQpaWl2cbUrFnTbkzB/YIxt5s9e7aCgoJstzp16tzXcQIAUBzJyclq3ry5XW5FR0crKytLR48etY25/Uu+6OhoJScn3/Xv8kUcAHg/lzYs9+7dqwsXLthuiYmJkqS+ffvq2rVr6tatmywWi5KSkrRz507l5OToySefVH5+vu1vsNYXAMAdnDt3TmPGjNGaNWsUEBBQ5JipU6cqMzNTX3/9tfbt26fx48erX79+Sk1NdWptcXFx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", "text/plain": [ "
" ] @@ -855,21 +863,21 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'Tech Support': array([27994.332 , 6760.779 , 17379.525 , ..., 7761.703 , 7245.6387,\n", - " 8695.703 ], dtype=float32),\n", - " 'Discount': array([22081.3 , -525.4912 , 5963.828 , ..., 8198.828 ,\n", - " 520.78613, 8621.551 ], dtype=float32),\n", - " 'New Engagement Strategy': array([22081.3 , -424.02734, -2353.0273 , ..., 0. ,\n", - " 0. , 22103. ], dtype=float32)}" + "{'Tech Support': array([ 8218.861 , 5665.8604, 9793.176 , ..., 7723.617 , 5633.7676,\n", + " 11714.125 ], dtype=float32),\n", + " 'Discount': array([10727.676 , -1442.8438 , 6223.4414 , ..., 6601.885 ,\n", + " 423.50586, 7198.4336 ], dtype=float32),\n", + " 'New Engagement Strategy': array([ 21.433594, -23.797852, 80.54297 , ..., -39.203125, -32.075195,\n", + " -72.13281 ], dtype=float32)}" ] }, - "execution_count": 32, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -881,9 +889,9 @@ "\n", "for treatment in treatment_columns:\n", " do_sem = sem.do(interventions=TensorDict({treatment: torch.tensor([1.0])}, batch_size=tuple()))\n", - " do_a_cfs = transform(do_sem.noise_to_sample(base_noise)[outcome]).cpu().detach().numpy()[:, 0]\n", + " do_a_cfs = normalizer.inv(do_sem.noise_to_sample(base_noise))[outcome].cpu().detach().numpy()[:, 0]\n", " do_sem = sem.do(interventions=TensorDict({treatment: torch.tensor([0.0])}, batch_size=tuple()))\n", - " do_b_cfs = transform(do_sem.noise_to_sample(base_noise)[outcome]).cpu().detach().numpy()[:, 0]\n", + " do_b_cfs = normalizer.inv(do_sem.noise_to_sample(base_noise))[outcome].cpu().detach().numpy()[:, 0]\n", " revenue_estimated_ite[treatment] = do_a_cfs - do_b_cfs\n", "\n", "revenue_estimated_ite" @@ -891,12 +899,12 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAGbCAYAAAAV0HQYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1hT1/8H8HfYyAgiIlgVECfiqLioAzdWXFVr3TjrQK3a1tXWUdviqKvOautondXWurE468A6EBdq1aL2q+BABRys5P7+4JeUkITchIQEeL+eh6fNvSc3517hnpzPPedzJIIgCCAiIiIiIiIiIiIqIqzMXQEiIiIiIiIiIiIifTCoSUREREREREREREUKg5pERERERERERERUpDCoSUREREREREREREUKg5pERERERERERERUpDCoSUREREREREREREUKg5pERERERERERERUpDCoSUREREREREREREUKg5pERERERERERERUpDCoSURERHqRSCSYOXOmuatRYD///DNq1KgBW1tbuLm5mbs6ZnP37l1IJBKsX7/e3FXJV8uWLREYGGjualiUli1bomXLlqLL8voZ38yZMyGRSMxdDSIiohKJQU0iIiI93blzByNGjEDlypXh4OAAV1dXNG3aFEuWLMGbN2/MXT0S4caNGxg0aBD8/f2xZs0arF69Wud7Ll++jMGDB8PPzw8ODg5wdnZGvXr1MGnSJPzzzz+FUGvz8fX1hUQi0flT0MDow4cPMXPmTMTFxRml3rn5+vqiU6dOAIBBgwaJOp9BgwYByAkIaitTo0YNo9fVUKa+fopztrKygpubG2rXro0PP/wQf/31l8b35HdtR44cqVb+2LFj6N69O7y8vGBnZwdPT0907twZv/32m7KMIgj/7bffGv0ctXn9+jVmzpyJY8eOFdpnirF///5i8YCJiIjIUDbmrgAREVFRsm/fPrz//vuwt7fHwIEDERgYiMzMTJw8eRKffvoprl27JipAVpS9efMGNjZF+yvEsWPHIJfLsWTJElSpUkVn+TVr1mDUqFHw8PBAv379UKNGDWRnZ+Pq1av46aefsHjxYrx58wbW1taFUPvCt3jxYrx8+VL5ev/+/diyZQsWLVoEDw8P5fZ33nmnQJ/z8OFDzJo1C76+vqhXr16BjpWfESNGoG3btsrXCQkJmD59Oj788EM0b95c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4OOPP8a1a9fw73//u8rcJk2aNMHDhw+RmJiIu3fvoqCgAC1btsTIkSMxevRo7N69G5mZmTh58iRWrFiB/fv3AwCmTZuG+Ph4fPDBB7h8+TI2btxoleEMAFBaWlrls83Ozta7fadOnRAQEICkpCTNstu3b2PWrFk4e/YsioqKUFBQgL///e/Izc3VCooFBQVISUnB888/b5VzISJyBoxpjGlERK6EcY1xjVwfk5pENRAfH4/g4GCtn549ewIAfH198fnnn6NHjx5o3749Dhw4gL1792rmPFmyZAmuX7+OZs2aWbQrfYcOHbBu3TqsWrUK4eHh2LFjB1asWKG1zdNPP41Jkybh1VdfRf369bF69WoAwNatWzF69GjMnj0brVq1wtChQ3Hq1Ck0atQIANC9e3d8/vnn2LBhAzp06IAff/wRCxYssFjbKzp//nyVz1b9R4YuEokEY8eOxY4dOzTLfHx8UFpaipdeeglDhgzBzJkz8eGHH2Lr1q3o3LmzZrtvv/0WjRo1wjPPPGOVcyEicgaMaYxpRESuhHGNcY1cn0gQBMHejSAisgSlUom2bdsiNTW1SlA9fPgwrl+/jjfffLPK+7p3745p06bh9ddft1FLiYiIDGNMIyIiV8K4RtbAnppE5DIUCgW++OIL3Lx50+T33L17F8OGDcOIESOs2DIiIiLzMKYREZErYVwja2BPTSIiIiIiIiIiInIq7KlJREREREREREREToVJTSIiIiIiIiIiInIqTGoSERERERERERGRU2FSk4iIiIiIiIiIiJwKk5pERERERERERETkVJjUJCIiIiIiIiIiIqfCpCYRERERERERERE5FSY1iYiIiIiIiIiIyKkwqUlEREREREREREROhUlNIiIiIiIiIiIicir/D/7iOijwKupUAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAGbCAYAAAAV0HQYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAD8J0lEQVR4nOzdd1hT1/8H8HdAlowgKoJVAXEiKoqLOrBWRYuraq22Ks46UKu2zrbOWtTWVWe1ddRdba0bi7gV60SljqpF7VcBFQUUlZGc3x/8khKSQAIJCfB+PU+eNvee3Jx7kXs4n3vO50iEEAJERERERERERERERYSFqStAREREREREREREpA8GNYmIiIiIiIiIiKhIYVCTiIiIiIiIiIiIihQGNYmIiIiIiIiIiKhIYVCTiIiIiIiIiIiIihQGNYmIiIiIiIiIiKhIYVCTiIiIiIiIiIiIihQGNYmIiIiIiIiIiKhIYVCTiIiIiIiIiIiIihQGNYmIiEgvEokEM2bMMHU1Cmzjxo2oVasWrKys4OzsbOrqmMy9e/cgkUiwfv16U1clV61bt4avr6+pq2FWWrdujdatW+tcltfP8GbMmAGJRGLqahAREZVIDGoSERHp6e7duxg2bBiqVq0KW1tbODk5oXnz5liyZAlev35t6uqRDm7evIkBAwbA29sba9aswerVq/P8zNWrVzFw4EB4eXnB1tYWDg4O8PPzw8SJE/HPP/8UQq1Nx9PTExKJJM9XQQOjjx49wowZMxAdHW2Qemfn6emJTp06AQAGDBig0/kMGDAAQFZAUFuZWrVqGbyu+WXs66c4ZwsLCzg7O6Nu3br45JNP8Oeff2r8TG7Xdvjw4Wrljx07hu7du8PNzQ3W1tZwdXVF586d8dtvvynLKILw3333ncHPUZtXr15hxowZOHbsWKF9py4OHDhQLB4wERER5VcpU1eAiIioKNm/fz8++OAD2NjYoH///vD19UV6ejpOnTqFCRMm4K+//tIpQFaUvX79GqVKFe0/IY4dOwa5XI4lS5agWrVqeZZfs2YNRowYgXLlyuHjjz9GrVq1kJmZiZiYGPz8889YvHgxXr9+DUtLy0KofeFbvHgxXr58qXx/4MABbN26FYsWLUK5cuWU299+++0Cfc+jR48wc+ZMeHp6ws/Pr0DHys2wYcPQtm1b5fvY2FhMmzYNn3zyCVq2bKnc7u3trfz/SpUqISwsTO1YUqnUaPXMyx9//KHy3tjXz8/PD5999hkA4MWLF7hx4wZ27NiBNWvWYNy4cVi4cKHaZ9q1a4f+/furba9Ro4bK++nTp2PWrFmoXr06hg0bBg8PDyQmJuLAgQPo0aMHNm/ejI8++sjg56SLV69eYebMmQCgNjL2yy+/xOTJk01Qq6zfw+XLlzOwSUREJVbR7pEQEREVotjYWPTu3RseHh44cuQI3N3dlftCQ0Nx584d7N+/34Q1NB65XI709HTY2trC1tbW1NUpsMePHwOATtPOz5w5gxEjRqB58+bYt28fHB0dVfYvWLAAc+bMyfM4r169QunSpfNVX1Pr1q2byvv4+Hhs3boV3bp1g6enp9bPpaamwt7e3riVy4eAgAAEBAQo31+4cAHTpk1DQEAA+vbtq/EzUqlU6z5Tsba2LtTve+utt9Suwbx58/DRRx9h0aJFqF69OkaMGKGyv0aNGnlet507d2LWrFno2bMntmzZAisrK+W+CRMm4NChQ8jIyDDciRhQqVKlivxDHiIioqKK08+JiIh0NH/+fLx8+RI//fSTSkBToVq1avj000+V7zMzMzF79mx4e3vDxsYGnp6emDp1KtLS0lQ+p5gWe+zYMTRq1Ah2dnaoW7eucqrjb7/9hrp168LW1hb+/v64fPmyyucHDBgABwcH/PPPPwgKCoK9vT0qVqyIWbNmQQihUva7777D22+/jbJly8LOzg7+/v7YuXOn2rlIJBKMGjUKmzdvRp06dWBjY4Pw8HDlvuwjg168eIGxY8fC09MTNjY2cHV1Rbt27XDp0iWVY+7YsQP+/v6ws7NDuXLl0LdvXzx8+FDjuTx8+BDdunWDg4MDypcvj88//xwymUzLT0bVihUrlHWuWLEiQkNDkZSUpHK9p0+fDgAoX758njlCZ86cCYlEgs2bN6sFNAHA1tYWs2fPVhmlqchfePHiRbRq1QqlS5fG1KlTAWQFVAcPHowKFSrA1tYW9evXx4YNG1SOeezYMUgkErXprpryX+pzzZKSkjBgwABIpVI4OzsjJCRE5doUhKIed+/exXvvvQdHR0d8/PHHALKuuWIqd3bZc0IeO3YMjRs3BgAMHDhQ65T269ev45133kHp0qXx1ltvYf78+QapvyHo+ruQ3dWrVyGRSLBnzx7ltosXL0IikaBhw4YqZTt27IimTZsq35vD9bOzs8PGjRvh4uKCOXPmqN1zdPHVV1/BxcUFa9euVQloKgQFBSlTB+hDLpdj8eLFqFOnDmxtbVGhQgUMGzYMz58/Vyl34cIFBAUFoVy5crCzs4OXlxcGDRoEIOt3rnz58gD+uxdkv2doyqmpuH/u2LEDPj4+sLOzQ0BAAK5duwYA+OGHH1CtWjXY2tqidevWuHfvnsrnT548iQ8++ABVqlSBjY0NKleujHHjxqmkNxkwYACWL1+u/D7Fy5DnTkREZO74WJGIiEhHe/fuRdWqVXWeYjtkyBBs2LABPXv2xGeffYY///wTYWFhuHHjBnbt2qVS9s6dO/joo48wbNgw9O3bF9999x06d+6MVatWYerUqRg5ciQAICwsDL169cKtW7dgYfHfs0mZTIYOHTqgWbNmmD9/PsLDwzF9+nRkZmZi1qxZynJLlixBly5d8PHHHyM9PR3btm3DBx98gH379iE4OFilTkeOHMEvv/yCUaNGoVy5clpH5A0fPhw7d+7EqFGj4OPjg8TERJw6dQo3btxQBmXWr1+PgQMHonHjxggLC0NCQgKWLFmC06dP4/LlyyojJmUyGYKCgtC0aVN89913OHz4MBYsWABvb2+1UWA5zZgxAzNnzkTbtm0xYsQI3Lp1CytXrsT58+dx+vRpWFlZYfHixfj555+xa9curFy5Eg4ODqhXr57G47169QpHjhxB69atUalSpVy/O6fExER07NgRvXv3Rt++fVGhQgW8fv0arVu3xp07dzBq1Ch4eXlhx44dGDBgAJKSklSC4vrQ5ZoJIdC1a1ecOnUKw4cPR+3atbFr1y6EhITk6zs1yczMRFBQEFq0aIHvvvtOr5GptWvXxqxZs9SmgWf/fXv+/Dk6dOiA7t27o1evXti5cycmTZqEunXromPHjgY7D01kMhmePn2qtt3Ozk45GlWX34WcfH194ezsjBMnTqBLly4AsoJaFhYWuHLlClJSUuDk5AS5XI4zZ87gk08+0XgcU14/BwcHvP/++/jpp59w/fp11KlTR7nvzZs3Gq+bk5MTrK2tcfv2bdy8eRODBg3S+NCgIIYNG6a894wZMwaxsbFYtmwZLl++rLwfPH78GO3bt0f58uUxefJkODs74969e8o8nuXLl8fKlSsxYsQIvP/+++jevTsAaL1nKJw8eRJ79uxBaGgogKx7d6dOnTBx4kSsWLECI0eOxPPnzzF//nwMGjQIR44cUX52x44dePXqFUaMGIGyZcvi3LlzWLp0Kf73v/9hx44dynN79OgRIiIisHHjRqOcOxERkdkTRERElKfk5GQBQHTt2lWn8tHR0QKAGDJkiMr2zz//XAAQR44cUW7z8PAQAMSZM2eU2w4dOiQACDs7O3H//n3l9h9++EEAEEePHlVuCwkJEQDE6NGjldvkcrkIDg4W1tbW4smTJ8rtr169UqlPenq68PX1FW3atFHZDkBYWFiIv/76S+3cAIjp06cr30ulUhEaGqr1WqSnpwtXV1fh6+srXr9+rdy+b98+AUBMmzZN7VxmzZqlcowGDRoIf39/rd8hhBCPHz8W1tbWon379kImkym3L1u2TAAQa9euVW6bPn26AKBybTS5cuWKACDGjh2rti8xMVE8efJE+UpLS1PuCwwMFADEqlWrVD6zePFiAUBs2rRJuS09PV0EBAQIBwcHkZKSIoQQ4ujRo2o/ZyGEiI2NFQDEunXrlNt0vWa///67ACDmz5+v3JaZmSlatmypdsy8fPvttwKAiI2NVavH5MmT1cp7eHiIkJAQte2BgYEiMDBQ+f78+fNa66K4pj///LNyW1pamnBzcxM9evTIs84eHh4iODhY477cvjf7d2t6DRs2TFkur98FbYKDg0WTJk2U77t37y66d+8uLC0txcGDB4UQQly6dEkAELt371aplzlcPyGEWLRokVr9tF0zAGLr1q1CCCF2794tAIhFixblWQch/vsd+Pbbb3Mtd/LkSQFAbN68WWV7eHi4yvZdu3YJAOL8+fNaj/XkyRO1+56C4l6SHQBhY2Oj8vuhuHe7ubkpf8+FEGLKlClqv0s579NCCBEWFiYkEolKexAaGqr23YY+dyIiInPG6edEREQ6SElJAQCdRxIdOHAAADB+/HiV7YpFNnLm3vTx8VHJ8aeYYtqmTRtUqVJFbbum1bZHjRql/H/F9Mf09HQcPnxYud3Ozk75/8+fP0dycjJatmypcXpsYGAgfHx88jjTrLyUf/75Jx49eqRx/4ULF/D48WOMHDlSJR9ncHAwatWqpTEPac6VkVu2bJnnCuOHDx9Geno6xo4dqzKKdejQoXBycspXvlPFz93BwUFtX9WqVVG+fHnlK/v0YQCwsbHBwIEDVbYdOHAAbm5u6NOnj3KblZUVxowZg5cvX+L48eN611Ehr2t24MABlCpVSmW0q6WlJUaPHp3v79Qkr9G0BeHg4KCSn9Ha2hpNmjQplNXnPT09ERERofYaO3asskxevwvaKH4HU1NTAQCnTp3Ce++9Bz8/P5w8eRJA1sg/iUSCFi1a5PscjHn9FL8jL168UNnetWtXjdftnXfeAaD/vVVXO3bsgFQqRbt27fD06VPly9/fHw4ODjh69CiA//Lq7tu3z6B5O999912V0e2Ke3ePHj1UzlXTPT37fTo1NRVPnz7F22+/DSGEWvoRTUx97kRERIWF08+JiIh04OTkBEC9w67N/fv3YWFhobaytpubG5ydnXH//n2V7dkDl8B/KypXrlxZ4/acedEsLCxQtWpVlW2K1YWz52vbt28fvv76a0RHR6vk9syZEw4AvLy8tJ5fdvPnz0dISAgqV64Mf39/vPfee+jfv7+yPopzrVmzptpna9WqhVOnTqlss7W1VeawUyhTpozaOeek7Xusra1RtWpVtWuuC0XwIfvK3wq7d+9GRkYGrly5gs8//1xt/1tvvaW2kMv9+/dRvXp1laArkDV1OPs56EuXa3b//n24u7urBWg1/Vzyq1SpUnpP09dHpUqV1P6tlilTBlevXjXadyrY29urrJiuSV6/C9q0bNkSmZmZiIqKQuXKlfH48WO0bNkSf/31l0pQ08fHBy4uLvk+B2NeP8XvSM7gZKVKlXK9bvreW3V1+/ZtJCcnw9XVVeN+xWJhgYGB6NGjB2bOnIlFixahdevW6NatGz766CPY2Njk+/sLck9/8OABpk2bhj179qjd95KTk/P8blOfOxERUWFhUJOIiEgHTk5OqFixImJiYvT6nKZgoSbZF5nRZbvIx2IcJ0+eRJcuXdCqVSusWLEC7u7usLKywrp167Blyxa18tlHC+WmV69eaNmyJXbt2oU//vgD3377LebNm4fffvstX3n6tJ2zKVSrVg2lSpXS+HMPDAwEAK0rH+t6/TTR9u9G22JJ5nLNbGxs1AK2QO7no0/dDfn7YAz5/V1o1KgRbG1tceLECVSpUgWurq6oUaMGWrZsiRUrViAtLQ0nT57E+++/X6D6GfP6KX5Hcj7IyUutWrUAQLmIjqHI5XK4urpi8+bNGvcrHgJIJBLs3LkTZ8+exd69e3Ho0CEMGjQICxYswNmzZzWO0tZFfu/pMpkM7dq1w7NnzzBp0iTUqlUL9vb2ePjwIQYMGAC5XJ7nd5v63ImIiAoLp58TERHpqFOnTrh79y6ioqLyLOvh4QG5XI7bt2+rbE9ISEBSUhI8PDwMWje5XK42hfTvv/8GAOUUyF9//RW2trbKjmvHjh3zHHmmK3d3d4wcORK///47YmNjUbZsWcyZMwcAlOd669Yttc/dunXLYNdC2/ekp6cjNjY2X99jb2+P1q1b4/jx42ortee3jrdv31YLTNy8eVO5H8gaPQdAbWXy/I7kVBw7Li5ObdSppp+LoZUpU0bjKus5z0fXhwDmLLffBW0U08BPnjyJkydPKhf5admyJdLS0rB582YkJCSgVatWuR7HVNfv5cuX2LVrFypXrqwcdayrGjVqoGbNmti9e7fGEdH55e3tjcTERDRv3hxt27ZVe9WvX1+lfLNmzTBnzhxcuHABmzdvxl9//YVt27YBKNzreu3aNfz9999YsGABJk2ahK5du6Jt27aoWLGiWllt9TLkuRMREZkzBjWJiIh0NHHiRNjb22PIkCFISEhQ23/37l0sWbIEAPDee+8BABYvXqxSZuHChQCgttK4ISxbtkz5/0IILFu2DFZWVnj33XcBZI0QkkgkKqP97t27h99//z3f3ymTydSmQ7q6uqJixYrK6e2NGjWCq6srVq1apTLl/eDBg7hx44bBrkXbtm1hbW2N77//XmXk2U8//YTk5OR8f8+0adMgk8nQt29fjUEXfUa5vffee4iPj8f27duV2zIzM7F06VI4ODgoR396eHjA0tISJ06cUPn8ihUr8nUOiu/OzMzEypUrldtkMhmWLl2a72PqytvbG2fPnkV6erpy2759+/Dvv/+qlFOsIq4pAGrudPldyE3Lli3x559/4ujRo8qgZrly5VC7dm3MmzdPWSY3prh+r1+/Rr9+/fDs2TN88cUX+QoAzpw5E4mJiRgyZAgyMzPV9v/xxx/Yt2+fXsfs1asXZDIZZs+erbYvMzNTeY2eP3+u9jvs5+cHAMqfW+nSpQEUznVVjOTMXichhLJtyU7bz9uQ505ERGTOOP2ciIhIR97e3tiyZQs+/PBD1K5dG/3794evry/S09Nx5swZ7NixAwMGDAAA1K9fHyEhIVi9ejWSkpIQGBiIc+fOYcOGDejWrZtykQxDsbW1RXh4OEJCQtC0aVMcPHgQ+/fvx9SpU5VTDYODg7Fw4UJ06NABH330ER4/fozly5ejWrVq+c6p9+LFC1SqVAk9e/ZE/fr14eDggMOHD+P8+fNYsGABgKyFcObNm4eBAwciMDAQffr0QUJCApYsWQJPT0+MGzfOINegfPnymDJlCmbOnIkOHTqgS5cuuHXrFlasWIHGjRurLJCij5YtW2LZsmUYPXo0qlevjo8//hi1atVCeno6/v77b2zevBnW1tZwc3PL81iffPIJfvjhBwwYMAAXL16Ep6cndu7cidOnT2Px4sXKfIRSqRQffPABli5dColEAm9vb+zbt0+ZCy8/OnfujObNm2Py5Mm4d+8efHx88Ntvv+mUo6+ghgwZgp07d6JDhw7o1asX7t69i02bNsHb21ulnLe3N5ydnbFq1So4OjrC3t4eTZs21Tm/qzElJydj06ZNGvf17dtXp9+F3LRs2RJz5szBv//+qxK8bNWqFX744Qd4enrmma/U2Nfv4cOHymvw8uVLXL9+HTt27EB8fDw+++wzDBs2TO0zf//9t8brVqFCBbRr1w4A8OGHH+LatWuYM2cOLl++jD59+sDDwwOJiYkIDw9HZGSkxhQZuQkMDMSwYcMQFhaG6OhotG/fHlZWVrh9+zZ27NiBJUuWoGfPntiwYQNWrFiB999/H97e3njx4gXWrFkDJycn5cMpOzs7+Pj4YPv27ahRowZcXFzg6+sLX19ffS9hnmrVqgVvb298/vnnePjwIZycnPDrr79qzCns7+8PABgzZgyCgoJgaWmJ3r17G/TciYiIzJppFl0nIiIquv7++28xdOhQ4enpKaytrYWjo6No3ry5WLp0qXjz5o2yXEZGhpg5c6bw8vISVlZWonLlymLKlCkqZYQQwsPDQwQHB6t9DwARGhqqsi02NlYAEN9++61yW0hIiLC3txd3794V7du3F6VLlxYVKlQQ06dPFzKZTOXzP/30k6hevbqwsbERtWrVEuvWrRPTp08XOf8k0PTd2fdNnz5dCCFEWlqamDBhgqhfv75wdHQU9vb2on79+mLFihVqn9u+fbto0KCBsLGxES4uLuLjjz8W//vf/1TKKM4lJ0111GbZsmWiVq1awsrKSlSoUEGMGDFCPH/+XOPxnjx5otMxhRDi8uXLon///qJKlSrC2tpa2Nvbi3r16onPPvtM3LlzR6VsYGCgqFOnjsbjJCQkiIEDB4py5coJa2trUbduXbFu3Tq1ck+ePBE9evQQpUuXFmXKlBHDhg0TMTExAoBKeX2uWWJioujXr59wcnISUqlU9OvXT1y+fFntmHn59ttvBQARGxubZz0UFixYIN566y1hY2MjmjdvLi5cuCACAwNFYGCgSrndu3cLHx8fUapUKZV6abumISEhwsPDI886a/s9E0KI8+fP53oNAgMDBQCtLyH0+13QJCUlRVhaWgpHR0eRmZmp3L5p0yYBQPTr109jvQrz+inOVyKRCCcnJ1GnTh0xdOhQ8eeff2r8TG7XLGe9hRAiMjJSdO3aVbi6uopSpUqJ8uXLi86dO4vdu3cry2i6B+Zm9erVwt/fX9jZ2QlHR0dRt25dMXHiRPHo0SMhhBCXLl0Sffr0EVWqVBE2NjbC1dVVdOrUSVy4cEHlOGfOnBH+/v7C2tpa5R6o6/1TW72PHj0qAIgdO3Yot12/fl20bdtWODg4iHLlyomhQ4eKK1euqP0bzczMFKNHjxbly5cXEolErR6GOnciIiJzJRHCTDKrExERUb4MGDAAO3fuNGg+OiIiIiIiInPGnJpERERERERERERUpDCoSUREREREREREREUKg5pERERERERERERUpDCoSVSEtW7d2igrbxJR0bJ+/Xrm06RiZcaMGZBIJKauBhERERGZMQY1iQxIIpHo9Dp27JipqwoASE9Px5IlS9CgQQM4OTnB2dkZderUwSeffIKbN2+aunoG9c033+D33383dTWIiEqk9evXq7SDtra2qFixIoKCgvD999/jxYsXpq5ioWBbRETmSnGftrW1xcOHD9X2m8tgitatW2vtY9WqVcvU1StRDhw4gBkzZuhcXi6X4+eff0bTpk3h4uICR0dH1KhRA/3798fZs2eV5a5fv44ZM2bg3r17hq80gBUrVmD9+vVGOTYVvlKmrgBRcbJx40aV9z///DMiIiLUtteuXbswq6VVjx49cPDgQfTp0wdDhw5FRkYGbt68iX379uHtt98uVn8YfPPNN+jZsye6detm6qoQEZVYs2bNgpeXFzIyMhAfH49jx45h7NixWLhwIfbs2YN69eoBAL788ktMnjzZxLU1PLZFRGTu0tLSMHfuXCxdutTUVdGqUqVKCAsLU9sulUpNUJuS68CBA1i+fLnOgc0xY8Zg+fLl6Nq1Kz7++GOUKlUK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FSpU0OsayeVydO7cGefOncOIESNQq1Yt7N69GyEhISrn0rNnT4SGhmLz5s1o0KCByr7NmzejdevWeOutt/K8dpQHQURGExoaKrL/mp08eVIAEJs3b1YpFx4errI9KSlJODo6iqZNm4rXr1+rlJXL5cr/DwwMFADEzz//rNyWlpYm3NzcRI8ePXKtm1wuV36+QoUKok+fPmL58uXi/v37amVDQkKEh4eH2vbp06eLnLcRAAKAuHDhgnLb/fv3ha2trXj//ffVPtulSxeVz48cOVIAEFeuXBFCCBEdHS0AiCFDhqiU+/zzzwUAceTIEeU2Dw8PAUCEh4er1dXe3l6EhIRovyBERGQ069atEwDE+fPntZaRSqWiQYMGQgj19mXRokUCgHjy5InWz69du1YAEAsXLlTbp2g7f//9dwFAfP311yr7e/bsKSQSibhz544QQojY2FgBQKxbt07tWADE9OnTle8VdR00aJBKuffff1+ULVtWZRvbIiIyV9nv03fv3hWlSpUSY8aMUe4PDAwUderUUb6/d++esLS0FHPmzFE5zrVr10SpUqWU22UymXBychITJ04UQmTdj8uWLSs++OADYWlpKV68eCGEEGLhwoXCwsJCPH/+PNd6Kvovml7Dhg1TltP13nzx4kUBQIwdO1al3IABA9Tu969evVKrT1RUlFp/bPTo0UIikYjLly8rtyUmJgoXFxcBQMTGxgohhHjx4oVwdnYWQ4cOVTlmfHy8kEqlKttDQkIEAPHNN98otz1//lzY2dkJiUQitm3bptx+8+ZNtbrPnj1b2Nvbi7///lvluyZPniwsLS3FgwcPhBD/tX9ly5YVz549U5bbvXu3ACD27t2r3Jazr5uX/v37CwCiTJky4v333xffffeduHHjhlq5HTt2CADi6NGjavty6+9p+vkEBQWJqlWrqmyrU6eOCAwMVCur6zX69ddfBQCxePFiZRmZTCbatGmj9rdDnz59RMWKFYVMJlNuu3Tpkta/MUh/nH5OVIh27NgBqVSKdu3a4enTp8qXv78/HBwccPToUQBZU+xevHiByZMnw9bWVuUYOYf1Ozg4qOSUsba2RpMmTfDPP//kWheJRIJDhw7h66+/RpkyZbB161aEhobCw8MDH374YYFyagYEBMDf31/5vkqVKujatSsOHToEmUymUlbx1Exh9OjRALIST2f/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MahpIIppDE5OTmwoiYiKCE5B047tGhFR0cN2TTO2aURERY8ubRoTrhAREREREREREVGRwqAmERERERERERERFSkMahIREREREREREVGRwqAmERERERERERERFSkMahIREREREREREVGRwqAmERERERERERERFSmlTF0BIio5ZHKBc7HP8PjFG7g62qKJlwssLSSmrhYREZFZYrtJREREpB2DmkRUKMJj4jBz73XEJb9RbnOX2mJ6Zx908HU3Yc2IiIjMD9tNIiIiotxx+jkRGV14TBxGbLqk0jEDgPjkNxix6RLCY+JMVDMiIiLzw3aTiIiIKG8MahKRUcnkAjP3XofQsE+xbebe65DJNZUgIiIqWdhuEhEREenGpEHNsLAwNG7cGI6OjnB1dUW3bt1w69Yt5f5nz55h9OjRqFmzJuzs7FClShWMGTMGycnJKseRSCRqr23btqmUOXbsGBo2bAgbGxtUq1YN69evV6vP8uXL4enpCVtbWzRt2hTnzp0zynkTlSTnYp+pjTTJTgCIS36Dc7HPCq9SREREZortJhEREZFuTBrUPH78OEJDQ3H27FlEREQgIyMD7du3R2pqKgDg0aNHePToEb777jvExMRg/fr1CA8Px+DBg9WOtW7dOsTFxSlf3bp1U+6LjY1FcHAw3nnnHURHR2Ps2LEYMmQIDh06pCyzfft2jB8/HtOnT8elS5dQv359BAUF4fHjx0a/DkTF2eMX2jtm+SlHRERUnLHdJCIiItKNSRcKCg8PV3m/fv16uLq64uLFi2jVqhV8fX3x66+/Kvd7e3tjzpw56Nu3LzIzM1Gq1H/Vd3Z2hpubm8bvWbVqFby8vLBgwQIAQO3atXHq1CksWrQIQUFBAICFCxdi6NChGDhwoPIz+/fvx9q1azF58mSDnjdRSeLqaGvQcuaOK9USEVFBlLR2s6DY7hIREZVcZrX6uWJauYuLS65lnJycVAKaABAaGoohQ4agatWqGD58OAYOHAiJJOsPmqioKLRt21alfFBQEMaOHQsASE9Px8WLFzFlyhTlfgsLC7Rt2xZRUVGGODWiEquJlwvcpbaIT36jMT+YBICbNKsTUtRxpVoiIiqoktRuFhTbXSIiopLNbBYKksvlGDt2LJo3bw5fX1+NZZ4+fYrZs2fjk08+Udk+a9Ys/PLLL4iIiECPHj0wcuRILF26VLk/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KM+S34OxY8dWe28lhPleA9SHpZ6XjXVdZO5kQghRlx6eRERERERERERERFLgnJpERERERERERERkVljUJCIiIiIiIiIiIrPCoiYRERERERERERGZFRY1iYiIiIiIiIiIyKywqElERERERERERERmhUVNIiIiIiIiIiIiMissahIREREREREREZFZYVGTyISsX78ebm5uUoehE1OL+eGHH8amTZsqbN+3bx/Wr19fYfvNmzfh5eWFq1evGiE6IiLrYWr5oTZMLWbmNCIi02FqOaI2TC1m5jXSNxY1ieroxRdfhEwmq/ATERFRq+cHBATg448/1tr29NNP4++//zZAtNqMndxkMhm2bNmC9evXV/qelf+5dOkSFi5cWOljbdq0qXY/v/76KzIyMvDMM8/UOjZPT0+88MILWLBgQX0Pk4jIbDGn1R5zGhGR6WNeqz3mNTJntlIHQGTOIiIisG7dOq1tDg4OdX49JycnODk51Tcsk/X0009rXUiMHDkS7du3x+LFizXbGjduDABo164ddu3apfV8W9vqT1mffPIJXnrpJcjl97+vSUhIwJtvvon4+HgUFRXho48+wqhRo7Bw4UJNm5deegndunXDBx98AA8Pj/ocIhGR2WJO0w1zGhGRaWNe0w3zGpkj9tQkqgcHBwcolUqtH3d3dwCAEAILFy6Ev78/HBwc4Ovri6lTpwIA+vbti8uXL2PatGmab7aAit/KLVy4EJ07d8batWvh7++PBg0a4JVXXkFpaSmWLVsGpVIJLy8vvPfee1pxLV++HB06dICLiwv8/Pzwyiuv4M6dOwDKuva/9NJLyM3N1exbnTQKCwvxxhtvoEmTJnBxcUH37t2xb98+rddev349/P394ezsjMcffxxZWVm1fr+cnJy03it7e3s4OztrbbOxsQFQlhQffG89PT2rfO0bN25gz549GDp0qGabEALDhw+Hk5MToqKiMHPmTLz//vsVLkbatWsHX19f/PLLL7U+FiIiS8OcxpxGRGRJmNeY18jysacmkYH89NNPWLFiBTZv3ox27dohPT0dJ0+eBAD8/PPP6NSpEyZOnIgJEyZU+zopKSn47bffEB0djZSUFDzxxBO4ePEiWrVqhT///BOHDx/GuHHjEBYWhu7duwMA5HI5PvnkEwQGBuLixYt45ZVXMHPmTHz++efo2bMnPv74Y8yfPx/nzp0DADRo0AAAEBkZieTkZGzevFmTOCIiInDq1Cm0bNkSR48exfjx4xEVFYURI0YgOjraZIYCHDx4EM7Ozmjbtq1mW1ZWFq5cuYJNmzahuLgY9vb2GDp0qFYyVQsJCcGBAwcwfvx4Y4ZNRGQWmNOMizmNiMiwmNeMi3mNDIVFTaJ62L59uybJqL311lt46623cOXKFSiVSoSFhcHOzg7+/v4ICQkBAHh4eMDGxgYNGzaEUqmsdh8qlQpr165Fw4YNERwcjH79+uHcuXPYuXMn5HI5WrdujaVLl2Lv3r2aRPn6669rnh8QEIB3330XkyZNwueffw57e3soFArIZDKtfV+5cgXr1q3DlStX4OvrCwB44403EB0djXXr1uH999/HypUrERERgZkzZwIAWrVqhcOHDyM6Orre7+WDTp06VeG9fe6557BmzZpK21++fBne3t5awxk8PT3RunVrvPPOO4iIiKh2bhpfX1+cOHFCL7ETEZkj5jTmNCIiS8K8xrxGlo9FTaJ66NevH1avXq21TT3Px5NPPomPP/4YzZs3R0REBAYPHoyhQ4fWONfIgwICAtCwYUPN797e3rCxsdFKCN7e3sjMzNT8vmvXLkRFReHs2bPIy8tDSUkJCgoKkJ+fD2dn50r3c+rUKZSWlqJVq1Za2wsLC9GoUSMAwJkzZ/D4449rPR4aGmqQRNm6dWv8+uuvWttcXV2rbH/v3j04OjpW2P77779j/vz5eP/995GXl4f//ve/ePvtt/Hoo49qtXNyckJ+fr5+giciMkPMacxpRESWhHmNeY0sH4uaRPXg4uKCoKCgSh/z8/PDuXPnsGvXLsTExOCVV17BBx98gD///BN2dna13seDbWUyWaXbVCoVAODSpUt47LHHMHnyZLz33nvw8PDAwYMHMX78eBQVFVWZKO/cuQMbGxvExcVp5kpRe/BbOGOwt7ev8r2tjKenJ27dulVhe7NmzfDNN99g37592Lt3L+7cuYOIiAicOHEC7dq107TLzs7WTHxNRGSNmNMMhzmNiMj4mNcMh3mNTAUXCiIyICcnJwwdOhSffPIJ9u3bh9jYWJw6dQpAWSIoLS3V+z7j4uKgUqnw0UcfoUePHmjVqhWuX7+u1aayfXfp0gWlpaXIzMxEUFCQ1o966EPbtm1x9OhRrecdOXJE78dQF126dEF6enqlyVItMDAQH330ERo2bFgh7qSkJHTp0sXQYRIRmS3mNONhTiMiMjzmNeNhXiNDYVGTqB4KCwuRnp6u9XPz5k0AZSvPff3110hKSsLFixexYcMGODk5oVmzZgDKhirs378f165d0zxHH4KCglBcXIxPP/0UFy9exH//+98Kc5sEBATgzp072L17N27evIn8/Hy0atUKY8aMwQsvvICff/4ZqampOHbsGKKiorBjxw4AwNSpUxEdHY0PP/wQ58+fx6pVqwwynAEASkpKKry3GRkZVbbv0qULPD09cejQIc2269evY/r06UhMTERhYSHy8/PxxRdfICcnRysp5ufnIy4uDgMHDjTIsRARmQPmNOY0IiJLwrzGvEaWj0VNonqIjo6Gj4+P1k/v3r0BAG5ubvjqq6/Qq1cvdOzYEbt27cK2bds0c54sXrwYly5dQosWLfTalb5Tp05Yvnw5li5divbt22Pjxo2IiorSatOzZ09MmjQJTz/9NBo3boxly5YBANatW4cXXngBM2bMQOvWrTFixAj89ddf8Pf3BwD06NEDX331FVauXIlOnTrhjz/+wNy5c/UWe3mnT5+u8N6qLzIqY2Njg5deegkbN27UbHN1dUVJSQmeeOIJDB8+HNOmTcPHH3+MdevWoWvXrpp2W7duhb+/P/r06WOQYyEiMgfMacxpRESWhHmNeY0sn0wIIaQOgohIH9LT09GuXTvEx8dXSKr79u3DpUuX8OKLL1Z4Xo8ePTB16lQ8++yzRoqUiIioesxpRERkSZjXyBDYU5OILIZSqcTXX3+NK1eu1Po5N2/exMiRIzF69GgDRkZERKQb5jQiIrIkzGtkCOypSURERERERERERGaFPTWJiIiIiIiIiIjIrLCoSURERERERERERGaFRU0iIiIiIiIiIiIyKyxqEhERERERERERkVlhUZOIiIiIiIiIiIjMCouaREREREREREREZFZY1CQiIiIiIiIiIiKzwqImERERERERERERmRUWNYmIiIiIiIiIiMissKhJREREREREREREZuX/AC8HJogveH92AAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/poetry.lock b/poetry.lock index fcdddff..3f679d3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,112 +1,110 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "absl-py" -version = "1.4.0" +version = "2.0.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "absl-py-1.4.0.tar.gz", hash = "sha256:d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d"}, - {file = "absl_py-1.4.0-py3-none-any.whl", hash = "sha256:0d3fe606adfa4f7db64792dd4c7aee4ee0c38ab75dfd353b7a83ed3e957fcb47"}, + {file = "absl-py-2.0.0.tar.gz", hash = "sha256:d9690211c5fcfefcdd1a45470ac2b5c5acd45241c3af71eed96bc5441746c0d5"}, + {file = "absl_py-2.0.0-py3-none-any.whl", hash = "sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3"}, ] [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.8.6" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, ] [package.dependencies] @@ -125,7 +123,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -138,14 +135,13 @@ frozenlist = ">=1.1.0" [[package]] name = "alembic" -version = "1.11.1" +version = "1.12.0" description = "A database migration tool for SQLAlchemy." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "alembic-1.11.1-py3-none-any.whl", hash = "sha256:dc871798a601fab38332e38d6ddb38d5e734f60034baeb8e2db5b642fccd8ab8"}, - {file = "alembic-1.11.1.tar.gz", hash = "sha256:6a810a6b012c88b33458fceb869aef09ac75d6ace5291915ba7fae44de372c01"}, + {file = "alembic-1.12.0-py3-none-any.whl", hash = "sha256:03226222f1cf943deee6c85d9464261a6c710cd19b4fe867a3ad1f25afda610f"}, + {file = "alembic-1.12.0.tar.gz", hash = "sha256:8e7645c32e4f200675e69f0745415335eb59a3663f5feb487abfa0b30c45888b"}, ] [package.dependencies] @@ -160,30 +156,182 @@ tz = ["python-dateutil"] name = "antlr4-python3-runtime" version = "4.9.3" description = "ANTLR 4.9.3 runtime for Python 3.7" -category = "main" optional = false python-versions = "*" files = [ {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] +[[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] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +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 = "astroid" +version = "2.15.8" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, +] + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = {version = ">=1.11,<2", markers = "python_version < \"3.11\""} + +[[package]] +name = "asttokens" +version = "2.4.0" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, + {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -202,7 +350,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "azure-common" version = "1.1.28" description = "Microsoft Azure Client Library for Python (Common)" -category = "main" optional = false python-versions = "*" files = [ @@ -212,34 +359,32 @@ files = [ [[package]] name = "azure-core" -version = "1.28.0" +version = "1.29.5" description = "Microsoft Azure Core Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "azure-core-1.28.0.zip", hash = "sha256:e9eefc66fc1fde56dab6f04d4e5d12c60754d5a9fa49bdcfd8534fc96ed936bd"}, - {file = "azure_core-1.28.0-py3-none-any.whl", hash = "sha256:dec36dfc8eb0b052a853f30c07437effec2f9e3e1fc8f703d9bdaa5cfc0043d9"}, + {file = "azure-core-1.29.5.tar.gz", hash = "sha256:52983c89d394c6f881a121e5101c5fa67278ca3b1f339c8fb2ef39230c70e9ac"}, + {file = "azure_core-1.29.5-py3-none-any.whl", hash = "sha256:0fa04b7b1f7d44a4fb8468c4093deb2ea01fdf4faddbf802ed9205615f99d68c"}, ] [package.dependencies] requests = ">=2.18.4" six = ">=1.11.0" -typing-extensions = ">=4.3.0" +typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] [[package]] name = "azure-identity" -version = "1.13.0" +version = "1.14.1" description = "Microsoft Azure Identity Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "azure-identity-1.13.0.zip", hash = "sha256:c931c27301ffa86b07b4dcf574e29da73e3deba9ab5d1fe4f445bb6a3117e260"}, - {file = "azure_identity-1.13.0-py3-none-any.whl", hash = "sha256:bd700cebb80cd9862098587c29d8677e819beca33c62568ced6d5a8e5e332b82"}, + {file = "azure-identity-1.14.1.zip", hash = "sha256:48e2a9dbdc59b4f095f841d867d9a8cbe4c1cdbbad8251e055561afd47b4a9b8"}, + {file = "azure_identity-1.14.1-py3-none-any.whl", hash = "sha256:3a5bef8e9c3281e864e869739be8d67424bff616cddae96b546ca2a5168d863d"}, ] [package.dependencies] @@ -247,13 +392,11 @@ azure-core = ">=1.11.0,<2.0.0" cryptography = ">=2.5" msal = ">=1.20.0,<2.0.0" msal-extensions = ">=0.3.0,<2.0.0" -six = ">=1.12.0" [[package]] name = "azure-mgmt-core" version = "1.4.0" description = "Microsoft Azure Management Core Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -268,7 +411,6 @@ azure-core = ">=1.26.2,<2.0.0" name = "azure-storage-blob" version = "12.13.0" description = "Microsoft Azure Blob Storage Client Library for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -283,13 +425,12 @@ msrest = ">=0.6.21" [[package]] name = "azureml-mlflow" -version = "1.52.0" +version = "1.53.0" description = "Contains the integration code of AzureML with Mlflow." -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "azureml_mlflow-1.52.0-py3-none-any.whl", hash = "sha256:ca8b2f197108e2d8ad9661c25dc8220cfb092681824fbd9587d57152d7c238ee"}, + {file = "azureml_mlflow-1.53.0-py3-none-any.whl", hash = "sha256:b5d8bfcf3cc34c3c1a5ddcc84f3006d857ffcdfdee8c7e7b47eec80416c8c0ed"}, ] [package.dependencies] @@ -307,23 +448,118 @@ python-dateutil = ">=2.7.3,<3.0.0" [package.extras] deployments = ["flask", "numpy", "pandas"] +[[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.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[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 = "black" +version = "22.12.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] + +[package.dependencies] +click = ">=8.0.0" +ipython = {version = ">=7.8.0", optional = true, markers = "extra == \"jupyter\""} +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tokenize-rt = {version = ">=3.2.0", optional = true, markers = "extra == \"jupyter\""} +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + [[package]] name = "blinker" -version = "1.6.2" +version = "1.6.3" description = "Fast, simple object-to-object and broadcast signaling" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"}, - {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"}, + {file = "blinker-1.6.3-py3-none-any.whl", hash = "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa"}, + {file = "blinker-1.6.3.tar.gz", hash = "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d"}, ] [[package]] name = "cachetools" version = "5.3.1" description = "Extensible memoizing collections and decorators" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -333,188 +569,198 @@ files = [ [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {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.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {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 = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-win32.whl", hash = "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-win32.whl", hash = "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-win32.whl", hash = "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-win32.whl", hash = "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-win32.whl", hash = "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-win32.whl", hash = "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727"}, + {file = "charset_normalizer-3.3.1-py3-none-any.whl", hash = "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708"}, ] [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -524,7 +770,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "cloudpickle" version = "2.2.1" description = "Extended pickling support for Python objects" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -534,29 +779,28 @@ files = [ [[package]] name = "cmake" -version = "3.27.0" +version = "3.27.7" description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" -category = "main" optional = false python-versions = "*" files = [ - {file = "cmake-3.27.0-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:9ccab4cd93578d3c2df32e66b44b313b75a7484032645040431dc06a583ca4aa"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2010_i686.manylinux_2_12_i686.whl", hash = "sha256:199bfaefb752e82d8067aeee5d6a6e0414fe0d60e9a3fd08e95d537a97e0db16"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:8745eff805f36762d3e8e904698b853cb4a9da8b4b07d1c12bcd1e1a6c4a1709"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58a3f39d3d1bc897f05e531bfa676246a2b25d424c6a47e4b6bbc193fb560db7"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b470ccd3f86cf19a63f6b221c9cceebcc58e32d3787d0d5f9f43d1d91a095090"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:35a8d397ce883e93b5e6561e2803ce9470df52283862264093c1078530f98189"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1f38d87b2c65763a0113f4a6c652e6f4b5adf90b384c1e1d69e4f8a3104a57d6"}, - {file = "cmake-3.27.0-py2.py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b9d5811954dcedcaa6c915c4a9bb6d64b55ac189e9cbc74be726307d9d084804"}, - {file = "cmake-3.27.0-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:073e4f196d0888216e6794c08cd984ddabc108c0e4e66f48fbd7610d1e6d726d"}, - {file = "cmake-3.27.0-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:e58e48643903e6fad76274337f9a4d3c575b8e21cd05c6214780b2c98bb0c706"}, - {file = "cmake-3.27.0-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9740ed9f61a3bd8708a41cadd5c057c04f38e5b89bd773e369df2e210a1c55a3"}, - {file = "cmake-3.27.0-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:1b3189171665f5c8d748ae7fe10a29fff1ebeedeaef57b16f1ea54b1ec0fe514"}, - {file = "cmake-3.27.0-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:c4c968c188e7518deb463a14e64f3a19f242c9dcf7f24e1dbcc1419690cd54e0"}, - {file = "cmake-3.27.0-py2.py3-none-win32.whl", hash = "sha256:5561aca62b65aac844f3931e74cfeb696e4534de145e3307bf942e735736541e"}, - {file = "cmake-3.27.0-py2.py3-none-win_amd64.whl", hash = "sha256:48be3afe62c9513a49be007896a4058fafec512cb1f269a50126da30aacad97f"}, - {file = "cmake-3.27.0-py2.py3-none-win_arm64.whl", hash = "sha256:6f46a170b0c9c552d52da4346534570f818195dfc4f1d0c03264e24cc348fc60"}, - {file = "cmake-3.27.0.tar.gz", hash = "sha256:d03f0a76a2b96805044ad1178b92aeeb5f695caa6776a32522bb5c430a55b4e8"}, + {file = "cmake-3.27.7-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:d582ef3e9ff0bd113581c1a32e881d1c2f9a34d2de76c93324a28593a76433db"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2010_i686.manylinux_2_12_i686.whl", hash = "sha256:8056c99e371ff57229df2068364d7c32fea716cb53b4675f639edfb62663decf"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:68983b09de633fc1ce6ab6bce9a25bfa181e41598e7c6bc0a6c0108773ee01cb"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bd1e1fa4fc8de7605c663d9408dceb649112f855aab05cca31fdb72e4d78364"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c981aafcca2cd7210bd210ec75710c0f34e1fde1998cdcab812e4133e3ab615d"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1b9067ce0251cba3d4c018f2e1577ba9078e9c1eff6ad607ad5ce867843d4571"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b8a2fcb619b89d1cce7b52828316de9a1f27f0c90c2e39d1eae886428c8ee8c6"}, + {file = "cmake-3.27.7-py2.py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:499b38c77d52fb1964dbb38d0228fed246263a181939a8e753fde8ca227c8e1e"}, + {file = "cmake-3.27.7-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:2fb48c780f1a6a3d19e785ebbb754be79d369e25a1cb81043fab049e709564da"}, + {file = "cmake-3.27.7-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:7bf96237ba11ce2437dc5e071d96b510120a1be4708c631a64b2f38fb46bbd77"}, + {file = "cmake-3.27.7-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:009058bdf4f488709f38eaa5dd0ef0f89c6b9c6b6edd9d5b475a308ef75f80bb"}, + {file = "cmake-3.27.7-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:591f6b056527aefec009bc61a388776b2fc62444deb0038112a471031f61aeca"}, + {file = "cmake-3.27.7-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:bd40d46dbad3555d5b3ce054bef24b85f256b19139493773751ab6f2b71c1219"}, + {file = "cmake-3.27.7-py2.py3-none-win32.whl", hash = "sha256:bdbf0256f554f68c7b1d9740f5d059daf875b685c81a479cbe69038e84eb2fb9"}, + {file = "cmake-3.27.7-py2.py3-none-win_amd64.whl", hash = "sha256:810e592b606d05a3080a9c19ea839b13226f62cae447a22485b2365782f6b926"}, + {file = "cmake-3.27.7-py2.py3-none-win_arm64.whl", hash = "sha256:72289361866314f73be2ae63ddee224ff70223dcef9feb66d0072bf17e245564"}, + {file = "cmake-3.27.7.tar.gz", hash = "sha256:9f4a7c7be2a25de5901f045618f41b833ea6c0f647115201d38e4fdf7e2815bc"}, ] [package.extras] @@ -566,7 +810,6 @@ test = ["coverage (>=4.2)", "flake8 (>=3.0.4)", "path.py (>=11.5.0)", "pytest (> name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -574,133 +817,155 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "comm" +version = "0.1.4" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.6" +files = [ + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] +test = ["pytest"] +typing = ["mypy (>=0.990)"] + [[package]] name = "contourpy" -version = "1.1.0" +version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, -] - -[package.dependencies] -numpy = ">=1.16" + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, +] + +[package.dependencies] +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "coverage" -version = "7.2.7" +version = "7.3.2" description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] @@ -711,35 +976,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.2" +version = "41.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, - {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, - {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, - {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, ] [package.dependencies] @@ -757,26 +1021,28 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.1" description = "Composable style cycles" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {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 = "databricks-cli" -version = "0.17.7" +version = "0.18.0" description = "A command line interface for Databricks" -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "databricks-cli-0.17.7.tar.gz", hash = "sha256:5a545063449f3b9ad904644c0f251058485e29e564dedf8d4e4a7b45caf9549b"}, - {file = "databricks_cli-0.17.7-py2-none-any.whl", hash = "sha256:5b025943c70bbd374415264d38bfaddfb34ce070fadb083d851aec311e0f8901"}, + {file = "databricks-cli-0.18.0.tar.gz", hash = "sha256:87569709eda9af3e9db8047b691e420b5e980c62ef01675575c0d2b9b4211eb7"}, + {file = "databricks_cli-0.18.0-py2.py3-none-any.whl", hash = "sha256:1176a5f42d3e8af4abfc915446fb23abc44513e325c436725f5898cbb9e3384b"}, ] [package.dependencies] @@ -786,29 +1052,101 @@ pyjwt = ">=1.7.0" requests = ">=2.17.3" six = ">=1.10.0" tabulate = ">=0.7.7" -urllib3 = ">=1.26.7,<2.0.0" +urllib3 = ">=1.26.7,<3" [[package]] name = "dataclasses-json" -version = "0.5.13" +version = "0.5.14" description = "Easily serialize dataclasses to and from JSON." -category = "main" optional = false -python-versions = ">=3.7,<3.12" +python-versions = ">=3.7,<3.13" files = [ - {file = "dataclasses_json-0.5.13-py3-none-any.whl", hash = "sha256:97b13447f2e0b96aa6e52509040c12d70c61df8a972f3feb5cc89a6da5e177bd"}, - {file = "dataclasses_json-0.5.13.tar.gz", hash = "sha256:425810e1356fb6917eb7c323e3aaee0c9398fc55b5001d3532381679f727fc18"}, + {file = "dataclasses_json-0.5.14-py3-none-any.whl", hash = "sha256:5ec6fed642adb1dbdb4182badb01e0861badfd8fda82e3b67f44b2d1e9d10d21"}, + {file = "dataclasses_json-0.5.14.tar.gz", hash = "sha256:d82896a94c992ffaf689cd1fafc180164e2abdd415b8f94a7f78586af5886236"}, ] [package.dependencies] marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[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 = "dill" +version = "0.3.7" +description = "serialize all of Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + [[package]] name = "docker" version = "6.1.3" description = "A Python library for the Docker Engine API." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -830,7 +1168,6 @@ ssh = ["paramiko (>=2.4.3)"] name = "docstring-parser" version = "0.15" description = "Parse Python docstrings in reST, Google and Numpydoc format" -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -842,7 +1179,6 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -852,45 +1188,71 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.0.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = "*" +files = [ + {file = "executing-2.0.0-py2.py3-none-any.whl", hash = "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657"}, + {file = "executing-2.0.0.tar.gz", hash = "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08"}, +] + +[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 = "filelock" -version = "3.12.2" +version = "3.12.4" description = "A platform independent file lock." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "flask" -version = "2.3.2" +version = "2.3.3" description = "A simple framework for building complex web applications." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, - {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, + {file = "flask-2.3.3-py3-none-any.whl", hash = "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b"}, + {file = "flask-2.3.3.tar.gz", hash = "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc"}, ] [package.dependencies] @@ -898,7 +1260,7 @@ blinker = ">=1.6.2" click = ">=8.1.3" itsdangerous = ">=2.1.2" Jinja2 = ">=3.1.2" -Werkzeug = ">=2.3.3" +Werkzeug = ">=2.3.7" [package.extras] async = ["asgiref (>=3.2)"] @@ -906,46 +1268,53 @@ dotenv = ["python-dotenv"] [[package]] name = "fonttools" -version = "4.41.1" +version = "4.43.1" description = "Tools to manipulate font files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7bbb290d13c6dd718ec2c3db46fe6c5f6811e7ea1e07f145fd8468176398224"}, - {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec453a45778524f925a8f20fd26a3326f398bfc55d534e37bab470c5e415caa1"}, - {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2071267deaa6d93cb16288613419679c77220543551cbe61da02c93d92df72f"}, - {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3334d51f0e37e2c6056e67141b2adabc92613a968797e2571ca8a03bd64773"}, - {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cac73bbef7734e78c60949da11c4903ee5837168e58772371bd42a75872f4f82"}, - {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:edee0900cf0eedb29d17c7876102d6e5a91ee333882b1f5abc83e85b934cadb5"}, - {file = "fonttools-4.41.1-cp310-cp310-win32.whl", hash = "sha256:2a22b2c425c698dcd5d6b0ff0b566e8e9663172118db6fd5f1941f9b8063da9b"}, - {file = "fonttools-4.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:547ab36a799dded58a46fa647266c24d0ed43a66028cd1cd4370b246ad426cac"}, - {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:849ec722bbf7d3501a0e879e57dec1fc54919d31bff3f690af30bb87970f9784"}, - {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38cdecd8f1fd4bf4daae7fed1b3170dfc1b523388d6664b2204b351820aa78a7"}, - {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ae64303ba670f8959fdaaa30ba0c2dabe75364fdec1caeee596c45d51ca3425"}, - {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14f3ccea4cc7dd1b277385adf3c3bf18f9860f87eab9c2fb650b0af16800f55"}, - {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:33191f062549e6bb1a4782c22a04ebd37009c09360e2d6686ac5083774d06d95"}, - {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:704bccd69b0abb6fab9f5e4d2b75896afa48b427caa2c7988792a2ffce35b441"}, - {file = "fonttools-4.41.1-cp311-cp311-win32.whl", hash = "sha256:4edc795533421e98f60acee7d28fc8d941ff5ac10f44668c9c3635ad72ae9045"}, - {file = "fonttools-4.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:aaaef294d8e411f0ecb778a0aefd11bb5884c9b8333cc1011bdaf3b58ca4bd75"}, - {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3d1f9471134affc1e3b1b806db6e3e2ad3fa99439e332f1881a474c825101096"}, - {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59eba8b2e749a1de85760da22333f3d17c42b66e03758855a12a2a542723c6e7"}, - {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9b3cc10dc9e0834b6665fd63ae0c6964c6bc3d7166e9bc84772e0edd09f9fa2"}, - {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2c2964bdc827ba6b8a91dc6de792620be4da3922c4cf0599f36a488c07e2b2"}, - {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7763316111df7b5165529f4183a334aa24c13cdb5375ffa1dc8ce309c8bf4e5c"}, - {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b2d1ee95be42b80d1f002d1ee0a51d7a435ea90d36f1a5ae331be9962ee5a3f1"}, - {file = "fonttools-4.41.1-cp38-cp38-win32.whl", hash = "sha256:f48602c0b3fd79cd83a34c40af565fe6db7ac9085c8823b552e6e751e3a5b8be"}, - {file = "fonttools-4.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0938ebbeccf7c80bb9a15e31645cf831572c3a33d5cc69abe436e7000c61b14"}, - {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e5c2b0a95a221838991e2f0e455dec1ca3a8cc9cd54febd68cc64d40fdb83669"}, - {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891cfc5a83b0307688f78b9bb446f03a7a1ad981690ac8362f50518bc6153975"}, - {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73ef0bb5d60eb02ba4d3a7d23ada32184bd86007cb2de3657cfcb1175325fc83"}, - {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f240d9adf0583ac8fc1646afe7f4ac039022b6f8fa4f1575a2cfa53675360b69"}, - {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bdd729744ae7ecd7f7311ad25d99da4999003dcfe43b436cf3c333d4e68de73d"}, - {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b927e5f466d99c03e6e20961946314b81d6e3490d95865ef88061144d9f62e38"}, - {file = "fonttools-4.41.1-cp39-cp39-win32.whl", hash = "sha256:afce2aeb80be72b4da7dd114f10f04873ff512793d13ce0b19d12b2a4c44c0f0"}, - {file = "fonttools-4.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:1df1b6f4c7c4bc8201eb47f3b268adbf2539943aa43c400f84556557e3e109c0"}, - {file = "fonttools-4.41.1-py3-none-any.whl", hash = "sha256:952cb405f78734cf6466252fec42e206450d1a6715746013f64df9cbd4f896fa"}, - {file = "fonttools-4.41.1.tar.gz", hash = "sha256:e16a9449f21a93909c5be2f5ed5246420f2316e94195dbfccb5238aaa38f9751"}, + {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf11e2cca121df35e295bd34b309046c29476ee739753bc6bc9d5050de319273"}, + {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10b3922875ffcba636674f406f9ab9a559564fdbaa253d66222019d569db869c"}, + {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f727c3e3d08fd25352ed76cc3cb61486f8ed3f46109edf39e5a60fc9fecf6ca"}, + {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad0b3f6342cfa14be996971ea2b28b125ad681c6277c4cd0fbdb50340220dfb6"}, + {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b7ad05b2beeebafb86aa01982e9768d61c2232f16470f9d0d8e385798e37184"}, + {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c54466f642d2116686268c3e5f35ebb10e49b0d48d41a847f0e171c785f7ac7"}, + {file = "fonttools-4.43.1-cp310-cp310-win32.whl", hash = "sha256:1e09da7e8519e336239fbd375156488a4c4945f11c4c5792ee086dd84f784d02"}, + {file = "fonttools-4.43.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cf9e974f63b1080b1d2686180fc1fbfd3bfcfa3e1128695b5de337eb9075cef"}, + {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5db46659cfe4e321158de74c6f71617e65dc92e54980086823a207f1c1c0e24b"}, + {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1952c89a45caceedf2ab2506d9a95756e12b235c7182a7a0fff4f5e52227204f"}, + {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c36da88422e0270fbc7fd959dc9749d31a958506c1d000e16703c2fce43e3d0"}, + {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bbbf8174501285049e64d174e29f9578495e1b3b16c07c31910d55ad57683d8"}, + {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d4071bd1c183b8d0b368cc9ed3c07a0f6eb1bdfc4941c4c024c49a35429ac7cd"}, + {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d21099b411e2006d3c3e1f9aaf339e12037dbf7bf9337faf0e93ec915991f43b"}, + {file = "fonttools-4.43.1-cp311-cp311-win32.whl", hash = "sha256:b84a1c00f832feb9d0585ca8432fba104c819e42ff685fcce83537e2e7e91204"}, + {file = "fonttools-4.43.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a2f0aa6ca7c9bc1058a9d0b35483d4216e0c1bbe3962bc62ce112749954c7b8"}, + {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4d9740e3783c748521e77d3c397dc0662062c88fd93600a3c2087d3d627cd5e5"}, + {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884ef38a5a2fd47b0c1291647b15f4e88b9de5338ffa24ee52c77d52b4dfd09c"}, + {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9648518ef687ba818db3fcc5d9aae27a369253ac09a81ed25c3867e8657a0680"}, + {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e974d70238fc2be5f444fa91f6347191d0e914d5d8ae002c9aa189572cc215"}, + {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:34f713dad41aa21c637b4e04fe507c36b986a40f7179dcc86402237e2d39dcd3"}, + {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:360201d46165fc0753229afe785900bc9596ee6974833124f4e5e9f98d0f592b"}, + {file = "fonttools-4.43.1-cp312-cp312-win32.whl", hash = "sha256:bb6d2f8ef81ea076877d76acfb6f9534a9c5f31dc94ba70ad001267ac3a8e56f"}, + {file = "fonttools-4.43.1-cp312-cp312-win_amd64.whl", hash = "sha256:25d3da8a01442cbc1106490eddb6d31d7dffb38c1edbfabbcc8db371b3386d72"}, + {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8da417431bfc9885a505e86ba706f03f598c85f5a9c54f67d63e84b9948ce590"}, + {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:51669b60ee2a4ad6c7fc17539a43ffffc8ef69fd5dbed186a38a79c0ac1f5db7"}, + {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748015d6f28f704e7d95cd3c808b483c5fb87fd3eefe172a9da54746ad56bfb6"}, + {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a58eb5e736d7cf198eee94844b81c9573102ae5989ebcaa1d1a37acd04b33d"}, + {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bb5ea9076e0e39defa2c325fc086593ae582088e91c0746bee7a5a197be3da0"}, + {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f37e31291bf99a63328668bb83b0669f2688f329c4c0d80643acee6e63cd933"}, + {file = "fonttools-4.43.1-cp38-cp38-win32.whl", hash = "sha256:9c60ecfa62839f7184f741d0509b5c039d391c3aff71dc5bc57b87cc305cff3b"}, + {file = "fonttools-4.43.1-cp38-cp38-win_amd64.whl", hash = "sha256:fe9b1ec799b6086460a7480e0f55c447b1aca0a4eecc53e444f639e967348896"}, + {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13a9a185259ed144def3682f74fdcf6596f2294e56fe62dfd2be736674500dba"}, + {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2adca1b46d69dce4a37eecc096fe01a65d81a2f5c13b25ad54d5430ae430b13"}, + {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18eefac1b247049a3a44bcd6e8c8fd8b97f3cad6f728173b5d81dced12d6c477"}, + {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2062542a7565091cea4cc14dd99feff473268b5b8afdee564f7067dd9fff5860"}, + {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18a2477c62a728f4d6e88c45ee9ee0229405e7267d7d79ce1f5ce0f3e9f8ab86"}, + {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7a06f8d95b7496e53af80d974d63516ffb263a468e614978f3899a6df52d4b3"}, + {file = "fonttools-4.43.1-cp39-cp39-win32.whl", hash = "sha256:10003ebd81fec0192c889e63a9c8c63f88c7d72ae0460b7ba0cd2a1db246e5ad"}, + {file = "fonttools-4.43.1-cp39-cp39-win_amd64.whl", hash = "sha256:e117a92b07407a061cde48158c03587ab97e74e7d73cb65e6aadb17af191162a"}, + {file = "fonttools-4.43.1-py3-none-any.whl", hash = "sha256:4f88cae635bfe4bbbdc29d479a297bb525a94889184bb69fa9560c2d4834ddb9"}, + {file = "fonttools-4.43.1.tar.gz", hash = "sha256:17dbc2eeafb38d5d0e865dcce16e313c58265a6d2d20081c435f84dc5a9d8212"}, ] [package.extras] @@ -962,11 +1331,21 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.0.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1035,14 +1414,13 @@ files = [ [[package]] name = "fsspec" -version = "2023.6.0" +version = "2023.10.0" description = "File-system specification" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2023.6.0-py3-none-any.whl", hash = "sha256:1cbad1faef3e391fba6dc005ae9b5bdcbf43005c9167ce78c915549c352c869a"}, - {file = "fsspec-2023.6.0.tar.gz", hash = "sha256:d0b2f935446169753e7a5c5c55681c54ea91996cc67be93c39a154fb3a2742af"}, + {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"}, + {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"}, ] [package.dependencies] @@ -1075,14 +1453,13 @@ tqdm = ["tqdm"] [[package]] name = "gitdb" -version = "4.0.10" +version = "4.0.11" description = "Git Object Database" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, ] [package.dependencies] @@ -1090,37 +1467,36 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.40" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + [[package]] name = "google-auth" -version = "2.22.0" +version = "2.23.3" description = "Google Authentication Library" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "google-auth-2.22.0.tar.gz", hash = "sha256:164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"}, - {file = "google_auth-2.22.0-py2.py3-none-any.whl", hash = "sha256:d61d1b40897407b574da67da1a833bdc10d5a11642566e506565d1b1a46ba873"}, + {file = "google-auth-2.23.3.tar.gz", hash = "sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3"}, + {file = "google_auth-2.23.3-py2.py3-none-any.whl", hash = "sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" -six = ">=1.9.0" -urllib3 = "<2.0" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] @@ -1133,7 +1509,6 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] name = "google-auth-oauthlib" version = "1.0.0" description = "Google Authentication Library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1150,150 +1525,158 @@ tool = ["click (>=6.0.0)"] [[package]] name = "greenlet" -version = "2.0.2" +version = "3.0.0" description = "Lightweight in-process concurrent programming" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -files = [ - {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, - {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, - {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, - {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, - {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, - {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, - {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, - {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, - {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, - {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, - {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, - {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, - {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, - {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, - {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, - {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, - {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, - {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, - {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, - {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, - {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, - {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, - {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, - {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, - {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, - {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, -] - -[package.extras] -docs = ["Sphinx", "docutils (<0.18)"] +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e09dea87cc91aea5500262993cbd484b41edf8af74f976719dd83fe724644cd6"}, + {file = "greenlet-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47932c434a3c8d3c86d865443fadc1fbf574e9b11d6650b656e602b1797908a"}, + {file = "greenlet-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bdfaeecf8cc705d35d8e6de324bf58427d7eafb55f67050d8f28053a3d57118c"}, + {file = "greenlet-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a68d670c8f89ff65c82b936275369e532772eebc027c3be68c6b87ad05ca695"}, + {file = "greenlet-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ad562a104cd41e9d4644f46ea37167b93190c6d5e4048fcc4b80d34ecb278f"}, + {file = "greenlet-3.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02a807b2a58d5cdebb07050efe3d7deaf915468d112dfcf5e426d0564aa3aa4a"}, + {file = "greenlet-3.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b1660a15a446206c8545edc292ab5c48b91ff732f91b3d3b30d9a915d5ec4779"}, + {file = "greenlet-3.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:813720bd57e193391dfe26f4871186cf460848b83df7e23e6bef698a7624b4c9"}, + {file = "greenlet-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:aa15a2ec737cb609ed48902b45c5e4ff6044feb5dcdfcf6fa8482379190330d7"}, + {file = "greenlet-3.0.0-cp310-universal2-macosx_11_0_x86_64.whl", hash = "sha256:7709fd7bb02b31908dc8fd35bfd0a29fc24681d5cc9ac1d64ad07f8d2b7db62f"}, + {file = "greenlet-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:211ef8d174601b80e01436f4e6905aca341b15a566f35a10dd8d1e93f5dbb3b7"}, + {file = "greenlet-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6512592cc49b2c6d9b19fbaa0312124cd4c4c8a90d28473f86f92685cc5fef8e"}, + {file = "greenlet-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871b0a8835f9e9d461b7fdaa1b57e3492dd45398e87324c047469ce2fc9f516c"}, + {file = "greenlet-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b505fcfc26f4148551826a96f7317e02c400665fa0883fe505d4fcaab1dabfdd"}, + {file = "greenlet-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123910c58234a8d40eaab595bc56a5ae49bdd90122dde5bdc012c20595a94c14"}, + {file = "greenlet-3.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96d9ea57292f636ec851a9bb961a5cc0f9976900e16e5d5647f19aa36ba6366b"}, + {file = "greenlet-3.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0b72b802496cccbd9b31acea72b6f87e7771ccfd7f7927437d592e5c92ed703c"}, + {file = "greenlet-3.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:527cd90ba3d8d7ae7dceb06fda619895768a46a1b4e423bdb24c1969823b8362"}, + {file = "greenlet-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:37f60b3a42d8b5499be910d1267b24355c495064f271cfe74bf28b17b099133c"}, + {file = "greenlet-3.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1482fba7fbed96ea7842b5a7fc11d61727e8be75a077e603e8ab49d24e234383"}, + {file = "greenlet-3.0.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:be557119bf467d37a8099d91fbf11b2de5eb1fd5fc5b91598407574848dc910f"}, + {file = "greenlet-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73b2f1922a39d5d59cc0e597987300df3396b148a9bd10b76a058a2f2772fc04"}, + {file = "greenlet-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1e22c22f7826096ad503e9bb681b05b8c1f5a8138469b255eb91f26a76634f2"}, + {file = "greenlet-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d363666acc21d2c204dd8705c0e0457d7b2ee7a76cb16ffc099d6799744ac99"}, + {file = "greenlet-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:334ef6ed8337bd0b58bb0ae4f7f2dcc84c9f116e474bb4ec250a8bb9bd797a66"}, + {file = "greenlet-3.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6672fdde0fd1a60b44fb1751a7779c6db487e42b0cc65e7caa6aa686874e79fb"}, + {file = "greenlet-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:952256c2bc5b4ee8df8dfc54fc4de330970bf5d79253c863fb5e6761f00dda35"}, + {file = "greenlet-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:269d06fa0f9624455ce08ae0179430eea61085e3cf6457f05982b37fd2cefe17"}, + {file = "greenlet-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9adbd8ecf097e34ada8efde9b6fec4dd2a903b1e98037adf72d12993a1c80b51"}, + {file = "greenlet-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6b5ce7f40f0e2f8b88c28e6691ca6806814157ff05e794cdd161be928550f4c"}, + {file = "greenlet-3.0.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf94aa539e97a8411b5ea52fc6ccd8371be9550c4041011a091eb8b3ca1d810"}, + {file = "greenlet-3.0.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80dcd3c938cbcac986c5c92779db8e8ce51a89a849c135172c88ecbdc8c056b7"}, + {file = "greenlet-3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e52a712c38e5fb4fd68e00dc3caf00b60cb65634d50e32281a9d6431b33b4af1"}, + {file = "greenlet-3.0.0-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5539f6da3418c3dc002739cb2bb8d169056aa66e0c83f6bacae0cd3ac26b423"}, + {file = "greenlet-3.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:343675e0da2f3c69d3fb1e894ba0a1acf58f481f3b9372ce1eb465ef93cf6fed"}, + {file = "greenlet-3.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:abe1ef3d780de56defd0c77c5ba95e152f4e4c4e12d7e11dd8447d338b85a625"}, + {file = "greenlet-3.0.0-cp37-cp37m-win32.whl", hash = "sha256:e693e759e172fa1c2c90d35dea4acbdd1d609b6936115d3739148d5e4cd11947"}, + {file = "greenlet-3.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bdd696947cd695924aecb3870660b7545a19851f93b9d327ef8236bfc49be705"}, + {file = "greenlet-3.0.0-cp37-universal2-macosx_11_0_x86_64.whl", hash = "sha256:cc3e2679ea13b4de79bdc44b25a0c4fcd5e94e21b8f290791744ac42d34a0353"}, + {file = "greenlet-3.0.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:63acdc34c9cde42a6534518e32ce55c30f932b473c62c235a466469a710bfbf9"}, + {file = "greenlet-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a1a6244ff96343e9994e37e5b4839f09a0207d35ef6134dce5c20d260d0302c"}, + {file = "greenlet-3.0.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b822fab253ac0f330ee807e7485769e3ac85d5eef827ca224feaaefa462dc0d0"}, + {file = "greenlet-3.0.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8060b32d8586e912a7b7dac2d15b28dbbd63a174ab32f5bc6d107a1c4143f40b"}, + {file = "greenlet-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:621fcb346141ae08cb95424ebfc5b014361621b8132c48e538e34c3c93ac7365"}, + {file = "greenlet-3.0.0-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bb36985f606a7c49916eff74ab99399cdfd09241c375d5a820bb855dfb4af9f"}, + {file = "greenlet-3.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10b5582744abd9858947d163843d323d0b67be9432db50f8bf83031032bc218d"}, + {file = "greenlet-3.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f351479a6914fd81a55c8e68963609f792d9b067fb8a60a042c585a621e0de4f"}, + {file = "greenlet-3.0.0-cp38-cp38-win32.whl", hash = "sha256:9de687479faec7db5b198cc365bc34addd256b0028956501f4d4d5e9ca2e240a"}, + {file = "greenlet-3.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:3fd2b18432e7298fcbec3d39e1a0aa91ae9ea1c93356ec089421fabc3651572b"}, + {file = "greenlet-3.0.0-cp38-universal2-macosx_11_0_x86_64.whl", hash = "sha256:3c0d36f5adc6e6100aedbc976d7428a9f7194ea79911aa4bf471f44ee13a9464"}, + {file = "greenlet-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4cd83fb8d8e17633ad534d9ac93719ef8937568d730ef07ac3a98cb520fd93e4"}, + {file = "greenlet-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a5b2d4cdaf1c71057ff823a19d850ed5c6c2d3686cb71f73ae4d6382aaa7a06"}, + {file = "greenlet-3.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e7dcdfad252f2ca83c685b0fa9fba00e4d8f243b73839229d56ee3d9d219314"}, + {file = "greenlet-3.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c94e4e924d09b5a3e37b853fe5924a95eac058cb6f6fb437ebb588b7eda79870"}, + {file = "greenlet-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad6fb737e46b8bd63156b8f59ba6cdef46fe2b7db0c5804388a2d0519b8ddb99"}, + {file = "greenlet-3.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d55db1db455c59b46f794346efce896e754b8942817f46a1bada2d29446e305a"}, + {file = "greenlet-3.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:56867a3b3cf26dc8a0beecdb4459c59f4c47cdd5424618c08515f682e1d46692"}, + {file = "greenlet-3.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a812224a5fb17a538207e8cf8e86f517df2080c8ee0f8c1ed2bdaccd18f38f4"}, + {file = "greenlet-3.0.0-cp39-cp39-win32.whl", hash = "sha256:0d3f83ffb18dc57243e0151331e3c383b05e5b6c5029ac29f754745c800f8ed9"}, + {file = "greenlet-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:831d6f35037cf18ca5e80a737a27d822d87cd922521d18ed3dbc8a6967be50ce"}, + {file = "greenlet-3.0.0-cp39-universal2-macosx_11_0_x86_64.whl", hash = "sha256:a048293392d4e058298710a54dfaefcefdf49d287cd33fb1f7d63d55426e4355"}, + {file = "greenlet-3.0.0.tar.gz", hash = "sha256:19834e3f91f485442adc1ee440171ec5d9a4840a1f7bd5ed97833544719ce10b"}, +] + +[package.extras] +docs = ["Sphinx"] test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.56.2" +version = "1.59.0" description = "HTTP/2-based RPC framework" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "grpcio-1.56.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:bf0b9959e673505ee5869950642428046edb91f99942607c2ecf635f8a4b31c9"}, - {file = "grpcio-1.56.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5144feb20fe76e73e60c7d73ec3bf54f320247d1ebe737d10672480371878b48"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a72797549935c9e0b9bc1def1768c8b5a709538fa6ab0678e671aec47ebfd55e"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3f3237a57e42f79f1e560726576aedb3a7ef931f4e3accb84ebf6acc485d316"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900bc0096c2ca2d53f2e5cebf98293a7c32f532c4aeb926345e9747452233950"}, - {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:97e0efaebbfd222bcaac2f1735c010c1d3b167112d9d237daebbeedaaccf3d1d"}, - {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c0c85c5cbe8b30a32fa6d802588d55ffabf720e985abe9590c7c886919d875d4"}, - {file = "grpcio-1.56.2-cp310-cp310-win32.whl", hash = "sha256:06e84ad9ae7668a109e970c7411e7992751a116494cba7c4fb877656527f9a57"}, - {file = "grpcio-1.56.2-cp310-cp310-win_amd64.whl", hash = "sha256:10954662f77dc36c9a1fb5cc4a537f746580d6b5734803be1e587252682cda8d"}, - {file = "grpcio-1.56.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:c435f5ce1705de48e08fcbcfaf8aee660d199c90536e3e06f2016af7d6a938dd"}, - {file = "grpcio-1.56.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:6108e5933eb8c22cd3646e72d5b54772c29f57482fd4c41a0640aab99eb5071d"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8391cea5ce72f4a12368afd17799474015d5d3dc00c936a907eb7c7eaaea98a5"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750de923b456ca8c0f1354d6befca45d1f3b3a789e76efc16741bd4132752d95"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fda2783c12f553cdca11c08e5af6eecbd717280dc8fbe28a110897af1c15a88c"}, - {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9e04d4e4cfafa7c5264e535b5d28e786f0571bea609c3f0aaab13e891e933e9c"}, - {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89a49cc5ad08a38b6141af17e00d1dd482dc927c7605bc77af457b5a0fca807c"}, - {file = "grpcio-1.56.2-cp311-cp311-win32.whl", hash = "sha256:6a007a541dff984264981fbafeb052bfe361db63578948d857907df9488d8774"}, - {file = "grpcio-1.56.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4063ef2b11b96d949dccbc5a987272f38d55c23c4c01841ea65a517906397f"}, - {file = "grpcio-1.56.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:a6ff459dac39541e6a2763a4439c4ca6bc9ecb4acc05a99b79246751f9894756"}, - {file = "grpcio-1.56.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f20fd21f7538f8107451156dd1fe203300b79a9ddceba1ee0ac8132521a008ed"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d1fbad1f9077372b6587ec589c1fc120b417b6c8ad72d3e3cc86bbbd0a3cee93"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee26e9dfb3996aff7c870f09dc7ad44a5f6732b8bdb5a5f9905737ac6fd4ef1"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4c60abd950d6de3e4f1ddbc318075654d275c29c846ab6a043d6ed2c52e4c8c"}, - {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1c31e52a04e62c8577a7bf772b3e7bed4df9c9e0dd90f92b6ffa07c16cab63c9"}, - {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:345356b307cce5d14355e8e055b4ca5f99bc857c33a3dc1ddbc544fca9cd0475"}, - {file = "grpcio-1.56.2-cp37-cp37m-win_amd64.whl", hash = "sha256:42e63904ee37ae46aa23de50dac8b145b3596f43598fa33fe1098ab2cbda6ff5"}, - {file = "grpcio-1.56.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:7c5ede2e2558f088c49a1ddda19080e4c23fb5d171de80a726b61b567e3766ed"}, - {file = "grpcio-1.56.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:33971197c47965cc1d97d78d842163c283e998223b151bab0499b951fd2c0b12"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d39f5d4af48c138cb146763eda14eb7d8b3ccbbec9fe86fb724cd16e0e914c64"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ded637176addc1d3eef35331c39acc598bac550d213f0a1bedabfceaa2244c87"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c90da4b124647547a68cf2f197174ada30c7bb9523cb976665dfd26a9963d328"}, - {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3ccb621749a81dc7755243665a70ce45536ec413ef5818e013fe8dfbf5aa497b"}, - {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4eb37dd8dd1aa40d601212afa27ca5be255ba792e2e0b24d67b8af5e012cdb7d"}, - {file = "grpcio-1.56.2-cp38-cp38-win32.whl", hash = "sha256:ddb4a6061933bd9332b74eac0da25f17f32afa7145a33a0f9711ad74f924b1b8"}, - {file = "grpcio-1.56.2-cp38-cp38-win_amd64.whl", hash = "sha256:8940d6de7068af018dfa9a959a3510e9b7b543f4c405e88463a1cbaa3b2b379a"}, - {file = "grpcio-1.56.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:51173e8fa6d9a2d85c14426bdee5f5c4a0654fd5fddcc21fe9d09ab0f6eb8b35"}, - {file = "grpcio-1.56.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:373b48f210f43327a41e397391715cd11cfce9ded2fe76a5068f9bacf91cc226"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:42a3bbb2bc07aef72a7d97e71aabecaf3e4eb616d39e5211e2cfe3689de860ca"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5344be476ac37eb9c9ad09c22f4ea193c1316bf074f1daf85bddb1b31fda5116"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3fa3ab0fb200a2c66493828ed06ccd1a94b12eddbfb985e7fd3e5723ff156c6"}, - {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b975b85d1d5efc36cf8b237c5f3849b64d1ba33d6282f5e991f28751317504a1"}, - {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cbdf2c498e077282cd427cfd88bdce4668019791deef0be8155385ab2ba7837f"}, - {file = "grpcio-1.56.2-cp39-cp39-win32.whl", hash = "sha256:139f66656a762572ae718fa0d1f2dce47c05e9fbf7a16acd704c354405b97df9"}, - {file = "grpcio-1.56.2-cp39-cp39-win_amd64.whl", hash = "sha256:830215173ad45d670140ff99aac3b461f9be9a6b11bee1a17265aaaa746a641a"}, - {file = "grpcio-1.56.2.tar.gz", hash = "sha256:0ff789ae7d8ddd76d2ac02e7d13bfef6fc4928ac01e1dcaa182be51b6bcc0aaa"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.56.2)"] +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.59.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:225e5fa61c35eeaebb4e7491cd2d768cd8eb6ed00f2664fa83a58f29418b39fd"}, + {file = "grpcio-1.59.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b95ec8ecc4f703f5caaa8d96e93e40c7f589bad299a2617bdb8becbcce525539"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:1a839ba86764cc48226f50b924216000c79779c563a301586a107bda9cbe9dcf"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6cfe44a5d7c7d5f1017a7da1c8160304091ca5dc64a0f85bca0d63008c3137a"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0fcf53df684fcc0154b1e61f6b4a8c4cf5f49d98a63511e3f30966feff39cd0"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa66cac32861500f280bb60fe7d5b3e22d68c51e18e65367e38f8669b78cea3b"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8cd2d38c2d52f607d75a74143113174c36d8a416d9472415eab834f837580cf7"}, + {file = "grpcio-1.59.0-cp310-cp310-win32.whl", hash = "sha256:228b91ce454876d7eed74041aff24a8f04c0306b7250a2da99d35dd25e2a1211"}, + {file = "grpcio-1.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:ca87ee6183421b7cea3544190061f6c1c3dfc959e0b57a5286b108511fd34ff4"}, + {file = "grpcio-1.59.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c173a87d622ea074ce79be33b952f0b424fa92182063c3bda8625c11d3585d09"}, + {file = "grpcio-1.59.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:ec78aebb9b6771d6a1de7b6ca2f779a2f6113b9108d486e904bde323d51f5589"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:0b84445fa94d59e6806c10266b977f92fa997db3585f125d6b751af02ff8b9fe"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c251d22de8f9f5cca9ee47e4bade7c5c853e6e40743f47f5cc02288ee7a87252"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:956f0b7cb465a65de1bd90d5a7475b4dc55089b25042fe0f6c870707e9aabb1d"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:38da5310ef84e16d638ad89550b5b9424df508fd5c7b968b90eb9629ca9be4b9"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:63982150a7d598281fa1d7ffead6096e543ff8be189d3235dd2b5604f2c553e5"}, + {file = "grpcio-1.59.0-cp311-cp311-win32.whl", hash = "sha256:50eff97397e29eeee5df106ea1afce3ee134d567aa2c8e04fabab05c79d791a7"}, + {file = "grpcio-1.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:15f03bd714f987d48ae57fe092cf81960ae36da4e520e729392a59a75cda4f29"}, + {file = "grpcio-1.59.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f1feb034321ae2f718172d86b8276c03599846dc7bb1792ae370af02718f91c5"}, + {file = "grpcio-1.59.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d09bd2a4e9f5a44d36bb8684f284835c14d30c22d8ec92ce796655af12163588"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:2f120d27051e4c59db2f267b71b833796770d3ea36ca712befa8c5fff5da6ebd"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0ca727a173ee093f49ead932c051af463258b4b493b956a2c099696f38aa66"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5711c51e204dc52065f4a3327dca46e69636a0b76d3e98c2c28c4ccef9b04c52"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d74f7d2d7c242a6af9d4d069552ec3669965b74fed6b92946e0e13b4168374f9"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3859917de234a0a2a52132489c4425a73669de9c458b01c9a83687f1f31b5b10"}, + {file = "grpcio-1.59.0-cp312-cp312-win32.whl", hash = "sha256:de2599985b7c1b4ce7526e15c969d66b93687571aa008ca749d6235d056b7205"}, + {file = "grpcio-1.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:598f3530231cf10ae03f4ab92d48c3be1fee0c52213a1d5958df1a90957e6a88"}, + {file = "grpcio-1.59.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b34c7a4c31841a2ea27246a05eed8a80c319bfc0d3e644412ec9ce437105ff6c"}, + {file = "grpcio-1.59.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:c4dfdb49f4997dc664f30116af2d34751b91aa031f8c8ee251ce4dcfc11277b0"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:61bc72a00ecc2b79d9695220b4d02e8ba53b702b42411397e831c9b0589f08a3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f367e4b524cb319e50acbdea57bb63c3b717c5d561974ace0b065a648bb3bad3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849c47ef42424c86af069a9c5e691a765e304079755d5c29eff511263fad9c2a"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c0488c2b0528e6072010182075615620071371701733c63ab5be49140ed8f7f0"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:611d9aa0017fa386809bddcb76653a5ab18c264faf4d9ff35cb904d44745f575"}, + {file = "grpcio-1.59.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e5378785dce2b91eb2e5b857ec7602305a3b5cf78311767146464bfa365fc897"}, + {file = "grpcio-1.59.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fe976910de34d21057bcb53b2c5e667843588b48bf11339da2a75f5c4c5b4055"}, + {file = "grpcio-1.59.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:c041a91712bf23b2a910f61e16565a05869e505dc5a5c025d429ca6de5de842c"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0ae444221b2c16d8211b55326f8ba173ba8f8c76349bfc1768198ba592b58f74"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ceb1e68135788c3fce2211de86a7597591f0b9a0d2bb80e8401fd1d915991bac"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4b1cc3a9dc1924d2eb26eec8792fedd4b3fcd10111e26c1d551f2e4eda79ce"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:871371ce0c0055d3db2a86fdebd1e1d647cf21a8912acc30052660297a5a6901"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:93e9cb546e610829e462147ce724a9cb108e61647a3454500438a6deef610be1"}, + {file = "grpcio-1.59.0-cp38-cp38-win32.whl", hash = "sha256:f21917aa50b40842b51aff2de6ebf9e2f6af3fe0971c31960ad6a3a2b24988f4"}, + {file = "grpcio-1.59.0-cp38-cp38-win_amd64.whl", hash = "sha256:14890da86a0c0e9dc1ea8e90101d7a3e0e7b1e71f4487fab36e2bfd2ecadd13c"}, + {file = "grpcio-1.59.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:34341d9e81a4b669a5f5dca3b2a760b6798e95cdda2b173e65d29d0b16692857"}, + {file = "grpcio-1.59.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:986de4aa75646e963466b386a8c5055c8b23a26a36a6c99052385d6fe8aaf180"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:aca8a24fef80bef73f83eb8153f5f5a0134d9539b4c436a716256b311dda90a6"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:936b2e04663660c600d5173bc2cc84e15adbad9c8f71946eb833b0afc205b996"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc8bf2e7bc725e76c0c11e474634a08c8f24bcf7426c0c6d60c8f9c6e70e4d4a"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81d86a096ccd24a57fa5772a544c9e566218bc4de49e8c909882dae9d73392df"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2ea95cd6abbe20138b8df965b4a8674ec312aaef3147c0f46a0bac661f09e8d0"}, + {file = "grpcio-1.59.0-cp39-cp39-win32.whl", hash = "sha256:3b8ff795d35a93d1df6531f31c1502673d1cebeeba93d0f9bd74617381507e3f"}, + {file = "grpcio-1.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:38823bd088c69f59966f594d087d3a929d1ef310506bee9e3648317660d65b81"}, + {file = "grpcio-1.59.0.tar.gz", hash = "sha256:acf70a63cf09dd494000007b798aff88a436e1c03b394995ce450be437b8e54f"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.59.0)"] [[package]] name = "gunicorn" -version = "20.1.0" +version = "21.2.0" description = "WSGI HTTP Server for UNIX" -category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, ] [package.dependencies] -setuptools = ">=3.0" +packaging = "*" [package.extras] eventlet = ["eventlet (>=0.24.1)"] @@ -1305,7 +1688,6 @@ tornado = ["tornado (>=0.2)"] name = "hydra-core" version = "1.3.2" description = "A framework for elegantly configuring complex applications" -category = "main" optional = false python-versions = "*" files = [ @@ -1314,15 +1696,28 @@ files = [ ] [package.dependencies] -antlr4-python3-runtime = ">=4.9.0,<4.10.0" +antlr4-python3-runtime = "==4.9.*" omegaconf = ">=2.2,<2.4" packaging = "*" +[[package]] +name = "identify" +version = "2.5.30" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"}, + {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"}, +] + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1334,7 +1729,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1352,25 +1746,23 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.1.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1378,11 +1770,114 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "ipykernel" +version = "6.25.2" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77"}, + {file = "ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b"}, +] + +[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.16.1" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ipython-8.16.1-py3-none-any.whl", hash = "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e"}, + {file = "ipython-8.16.1.tar.gz", hash = "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +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.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "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 = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "ipywidgets" +version = "8.1.1" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.1-py3-none-any.whl", hash = "sha256:2b88d728656aea3bbfd05d32c747cfd0078f9d7e159cf982433b58ad717eed7f"}, + {file = "ipywidgets-8.1.1.tar.gz", hash = "sha256:40211efb556adec6fa450ccc2a77d59ca44a060f4f9f136833df59c9f538e6e8"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.9,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.9,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + [[package]] name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" files = [ @@ -1393,11 +1888,41 @@ files = [ [package.dependencies] six = "*" +[[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 = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + [[package]] name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1405,11 +1930,29 @@ files = [ {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, ] +[[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." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1425,21 +1968,33 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.3.1" +version = "1.3.2" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "joblib-1.3.1-py3-none-any.whl", hash = "sha256:89cf0529520e01b3de7ac7b74a8102c90d16d54c64b5dd98cafcd14307fdf915"}, - {file = "joblib-1.3.1.tar.gz", hash = "sha256:1f937906df65329ba98013dc9692fe22a4c5e4a648112de500508b18a21b41e3"}, + {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 = "jsonargparse" version = "4.20.1" description = "Implement minimal boilerplate CLIs derived from type hints and parse from command line, config files and environment variables." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1448,131 +2003,543 @@ files = [ ] [package.dependencies] -docstring-parser = {version = ">=0.15", optional = true, markers = "extra == \"signatures\""} -PyYAML = ">=3.13" -typeshed-client = {version = ">=2.1.0", optional = true, markers = "extra == \"signatures\""} +docstring-parser = {version = ">=0.15", optional = true, markers = "extra == \"signatures\""} +PyYAML = ">=3.13" +typeshed-client = {version = ">=2.1.0", optional = true, markers = "extra == \"signatures\""} + +[package.extras] +all = ["argcomplete (>=2.0.0)", "docstring-parser (>=0.15)", "fsspec (>=0.8.4)", "jsonnet (>=0.13.0)", "jsonnet-binary (>=0.17.0)", "jsonschema (>=3.2.0)", "omegaconf (>=2.1.1)", "reconplogger (>=4.4.0)", "requests (>=2.18.4)", "ruyaml (>=0.20.0)", "typeshed-client (>=2.1.0)", "typing-extensions (>=3.10.0.0)"] +argcomplete = ["argcomplete (>=2.0.0)"] +dev = ["Sphinx (>=1.7.9)", "autodocsumm (>=0.1.10)", "coverage (>=4.5.1)", "mypy (>=0.701)", "pre-commit (>=2.19.0)", "pycodestyle (>=2.5.0)", "pylint (>=2.15.6)", "responses (>=0.12.0)", "sphinx-autodoc-typehints (>=1.19.5)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.25.0)", "types-PyYAML (>=6.0.11)", "types-requests (>=2.28.9)"] +doc = ["Sphinx (>=1.7.9)", "autodocsumm (>=0.1.10)", "sphinx-autodoc-typehints (>=1.19.5)", "sphinx-rtd-theme (>=0.4.3)"] +fsspec = ["fsspec (>=0.8.4)"] +jsonnet = ["jsonnet (>=0.13.0)", "jsonnet-binary (>=0.17.0)"] +jsonschema = ["jsonschema (>=3.2.0)"] +maintainer = ["bump2version (>=0.5.11)"] +mypy = ["mypy (>=0.701)", "types-PyYAML (>=6.0.11)"] +omegaconf = ["omegaconf (>=2.1.1)"] +pylint = ["pylint (>=2.15.6)"] +reconplogger = ["reconplogger (>=4.4.0)"] +ruyaml = ["ruyaml (>=0.20.0)"] +signatures = ["docstring-parser (>=0.15)", "typeshed-client (>=2.1.0)"] +test = ["coverage (>=4.5.1)", "responses (>=0.12.0)", "types-PyYAML (>=6.0.11)", "types-requests (>=2.28.9)"] +test-no-urls = ["coverage (>=4.5.1)"] +types-pyyaml = ["types-PyYAML (>=6.0.11)"] +typing-extensions = ["typing-extensions (>=3.10.0.0)"] +urls = ["requests (>=2.18.4)"] + +[[package]] +name = "jsonpickle" +version = "3.0.2" +description = "Python library for serializing any arbitrary object graph into JSON" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpickle-3.0.2-py3-none-any.whl", hash = "sha256:4a8442d97ca3f77978afa58068768dba7bff2dbabe79a9647bc3cdafd4ef019f"}, + {file = "jsonpickle-3.0.2.tar.gz", hash = "sha256:e37abba4bfb3ca4a4647d28bb9f4706436f7b46c8a8333b4a718abafa8e46b37"}, +] + +[package.extras] +docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-black-multipy", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-flake8 (>=1.1.1)", "scikit-learn", "sqlalchemy"] +testing-libs = ["simplejson", "ujson"] + +[[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.1" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, +] + +[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" +version = "1.0.0" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, + {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, + {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +nbconvert = "*" +notebook = "*" +qtconsole = "*" + +[[package]] +name = "jupyter-client" +version = "8.4.0" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.4.0-py3-none-any.whl", hash = "sha256:6a2a950ec23a8f62f9e4c66acec7f0ea6c7d1f80ba0992e747b10c56ce2e6dbe"}, + {file = "jupyter_client-8.4.0.tar.gz", hash = "sha256:dc1b857d5d7d76ac101766c6e9b646bf18742721126e72e5d484c75a993cada2"}, +] + +[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-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.4.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.4.0-py3-none-any.whl", hash = "sha256:66e252f675ac04dcf2feb6ed4afb3cd7f68cf92f483607522dc251f32d471571"}, + {file = "jupyter_core-5.4.0.tar.gz", hash = "sha256:e4b98344bb94ee2e3e6c4519a97d001656009f9cb2b7f2baf15b3c205770011d"}, +] + +[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", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.8.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.8.0-py3-none-any.whl", hash = "sha256:81f07375c7673ff298bfb9302b4a981864ec64edaed75ca0fe6f850b9b045525"}, + {file = "jupyter_events-0.8.0.tar.gz", hash = "sha256:fda08f0defce5e16930542ce60634ba48e010830d50073c3dfd235759cee77bf"}, +] + +[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.8.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.8.0-py3-none-any.whl", hash = "sha256:c57270faa6530393ae69783a2d2f1874c718b9f109080581ea076b05713249fa"}, + {file = "jupyter_server-2.8.0.tar.gz", hash = "sha256:b11e2ba80667c75f55630faf8ac3d5809f8734f9006d65cce117c46a0a516ab8"}, +] + +[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.7" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.7-py3-none-any.whl", hash = "sha256:08683045117cc495531fdb39c22ababb9aaac6977a45e67cfad20046564c9c7c"}, + {file = "jupyterlab-4.0.7.tar.gz", hash = "sha256:48792efd9f962b2bcda1f87d72168ff122c288b1d97d32109e4a11b33dc862be"}, +] + +[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 = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.7.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.286)"] +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.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.25.0-py3-none-any.whl", hash = "sha256:c9f67a98b295c5dee87f41551b0558374e45d449f3edca153dd722140630dcb2"}, + {file = "jupyterlab_server-2.25.0.tar.gz", hash = "sha256:77c2f1f282d610f95e496e20d5bf1d2a7706826dfb7b18f3378ae2870d272fb7"}, +] + +[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] -all = ["argcomplete (>=2.0.0)", "docstring-parser (>=0.15)", "fsspec (>=0.8.4)", "jsonnet (>=0.13.0)", "jsonnet-binary (>=0.17.0)", "jsonschema (>=3.2.0)", "omegaconf (>=2.1.1)", "reconplogger (>=4.4.0)", "requests (>=2.18.4)", "ruyaml (>=0.20.0)", "typeshed-client (>=2.1.0)", "typing-extensions (>=3.10.0.0)"] -argcomplete = ["argcomplete (>=2.0.0)"] -dev = ["Sphinx (>=1.7.9)", "autodocsumm (>=0.1.10)", "coverage (>=4.5.1)", "mypy (>=0.701)", "pre-commit (>=2.19.0)", "pycodestyle (>=2.5.0)", "pylint (>=2.15.6)", "responses (>=0.12.0)", "sphinx-autodoc-typehints (>=1.19.5)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.25.0)", "types-PyYAML (>=6.0.11)", "types-requests (>=2.28.9)"] -doc = ["Sphinx (>=1.7.9)", "autodocsumm (>=0.1.10)", "sphinx-autodoc-typehints (>=1.19.5)", "sphinx-rtd-theme (>=0.4.3)"] -fsspec = ["fsspec (>=0.8.4)"] -jsonnet = ["jsonnet (>=0.13.0)", "jsonnet-binary (>=0.17.0)"] -jsonschema = ["jsonschema (>=3.2.0)"] -maintainer = ["bump2version (>=0.5.11)"] -mypy = ["mypy (>=0.701)", "types-PyYAML (>=6.0.11)"] -omegaconf = ["omegaconf (>=2.1.1)"] -pylint = ["pylint (>=2.15.6)"] -reconplogger = ["reconplogger (>=4.4.0)"] -ruyaml = ["ruyaml (>=0.20.0)"] -signatures = ["docstring-parser (>=0.15)", "typeshed-client (>=2.1.0)"] -test = ["coverage (>=4.5.1)", "responses (>=0.12.0)", "types-PyYAML (>=6.0.11)", "types-requests (>=2.28.9)"] -test-no-urls = ["coverage (>=4.5.1)"] -types-pyyaml = ["types-PyYAML (>=6.0.11)"] -typing-extensions = ["typing-extensions (>=3.10.0.0)"] -urls = ["requests (>=2.18.4)"] +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.7.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 = "jsonpickle" -version = "3.0.1" -description = "Python library for serializing any arbitrary object graph into JSON" -category = "main" +name = "jupyterlab-widgets" +version = "3.0.9" +description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jsonpickle-3.0.1-py2.py3-none-any.whl", hash = "sha256:130d8b293ea0add3845de311aaba55e6d706d0bb17bc123bd2c8baf8a39ac77c"}, - {file = "jsonpickle-3.0.1.tar.gz", hash = "sha256:032538804795e73b94ead410800ac387fdb6de98f8882ac957fcd247e3a85200"}, + {file = "jupyterlab_widgets-3.0.9-py3-none-any.whl", hash = "sha256:3cf5bdf5b897bf3bccf1c11873aa4afd776d7430200f765e0686bd352487b58d"}, + {file = "jupyterlab_widgets-3.0.9.tar.gz", hash = "sha256:6005a4e974c7beee84060fdfba341a3218495046de8ae3ec64888e5fe19fdb4c"}, +] + +[[package]] +name = "jupytext" +version = "1.15.2" +description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" +optional = false +python-versions = "~=3.6" +files = [ + {file = "jupytext-1.15.2-py3-none-any.whl", hash = "sha256:ef2a1a3eb8f63d84a3b3772014bdfbe238e4e12a30c4309b8c89e0a54adeb7d1"}, + {file = "jupytext-1.15.2.tar.gz", hash = "sha256:c9976e24d834e991906c1de55af4b6d512d764f6372aabae45fc1ea72b589173"}, ] +[package.dependencies] +markdown-it-py = ">=1.0.0" +mdit-py-plugins = "*" +nbformat = "*" +pyyaml = "*" +toml = "*" + [package.extras] -docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-black-multipy", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-flake8 (>=1.1.1)", "scikit-learn", "sqlalchemy"] -testing-libs = ["simplejson", "ujson"] +rst2md = ["sphinx-gallery (>=0.7.0,<0.8.0)"] +toml = ["toml"] [[package]] name = "kiwisolver" -version = "1.4.4" +version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, +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 = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, ] [[package]] name = "lightning-utilities" version = "0.9.0" description = "PyTorch Lightning Sample project." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1591,20 +2558,18 @@ typing = ["mypy (>=1.0.0)"] [[package]] name = "lit" -version = "16.0.6" +version = "17.0.3" description = "A Software Testing Tool" -category = "main" optional = false python-versions = "*" files = [ - {file = "lit-16.0.6.tar.gz", hash = "sha256:84623c9c23b6b14763d637f4e63e6b721b3446ada40bf7001d8fee70b8e77a9a"}, + {file = "lit-17.0.3.tar.gz", hash = "sha256:e6049032462be1e2928686cbd4a6cc5b3c545d83ecd078737fe79412c1f3fcc1"}, ] [[package]] name = "mako" version = "1.2.4" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1622,24 +2587,23 @@ testing = ["pytest"] [[package]] name = "markdown" -version = "3.4.3" +version = "3.5" description = "Python implementation of John Gruber's Markdown." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.3-py3-none-any.whl", hash = "sha256:065fd4df22da73a625f14890dd77eb8040edcbd68794bcd35943be14490608b2"}, - {file = "Markdown-3.4.3.tar.gz", hash = "sha256:8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520"}, + {file = "Markdown-3.5-py3-none-any.whl", hash = "sha256:4afb124395ce5fc34e6d9886dab977fd9ae987fc6e85689f08278cf0c69d4bf3"}, + {file = "Markdown-3.5.tar.gz", hash = "sha256:a807eb2e4778d9156c8f07876c6e4d50b5494c5665c4834f67b06459dfd877b3"}, ] [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1664,7 +2628,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1688,6 +2651,16 @@ files = [ {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"}, @@ -1724,7 +2697,6 @@ files = [ name = "marshmallow" version = "3.20.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1743,53 +2715,39 @@ tests = ["pytest", "pytz", "simplejson"] [[package]] name = "matplotlib" -version = "3.7.2" +version = "3.8.0" description = "Python plotting package" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"}, - {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"}, - {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"}, - {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"}, - {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"}, - {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"}, - {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"}, - {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"}, - {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, - {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, + {file = "matplotlib-3.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c4940bad88a932ddc69734274f6fb047207e008389489f2b6f77d9ca485f0e7a"}, + {file = "matplotlib-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a33bd3045c7452ca1fa65676d88ba940867880e13e2546abb143035fa9072a9d"}, + {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea6886e93401c22e534bbfd39201ce8931b75502895cfb115cbdbbe2d31f287"}, + {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d670b9348e712ec176de225d425f150dc8e37b13010d85233c539b547da0be39"}, + {file = "matplotlib-3.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b37b74f00c4cb6af908cb9a00779d97d294e89fd2145ad43f0cdc23f635760c"}, + {file = "matplotlib-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:0e723f5b96f3cd4aad99103dc93e9e3cdc4f18afdcc76951f4857b46f8e39d2d"}, + {file = "matplotlib-3.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5dc945a9cb2deb7d197ba23eb4c210e591d52d77bf0ba27c35fc82dec9fa78d4"}, + {file = "matplotlib-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b5a1bf27d078453aa7b5b27f52580e16360d02df6d3dc9504f3d2ce11f6309"}, + {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f25ffb6ad972cdffa7df8e5be4b1e3cadd2f8d43fc72085feb1518006178394"}, + {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee482731c8c17d86d9ddb5194d38621f9b0f0d53c99006275a12523ab021732"}, + {file = "matplotlib-3.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:36eafe2128772195b373e1242df28d1b7ec6c04c15b090b8d9e335d55a323900"}, + {file = "matplotlib-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:061ee58facb3580cd2d046a6d227fb77e9295599c5ec6ad069f06b5821ad1cfc"}, + {file = "matplotlib-3.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3cc3776836d0f4f22654a7f2d2ec2004618d5cf86b7185318381f73b80fd8a2d"}, + {file = "matplotlib-3.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c49a2bd6981264bddcb8c317b6bd25febcece9e2ebfcbc34e7f4c0c867c09dc"}, + {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ed11654fc83cd6cfdf6170b453e437674a050a452133a064d47f2f1371f8d3"}, + {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae97fdd6996b3a25da8ee43e3fc734fff502f396801063c6b76c20b56683196"}, + {file = "matplotlib-3.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:87df75f528020a6299f76a1d986c0ed4406e3b2bd44bc5e306e46bca7d45e53e"}, + {file = "matplotlib-3.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:90d74a95fe055f73a6cd737beecc1b81c26f2893b7a3751d52b53ff06ca53f36"}, + {file = "matplotlib-3.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c3499c312f5def8f362a2bf761d04fa2d452b333f3a9a3f58805273719bf20d9"}, + {file = "matplotlib-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31e793c8bd4ea268cc5d3a695c27b30650ec35238626961d73085d5e94b6ab68"}, + {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d5ee602ef517a89d1f2c508ca189cfc395dd0b4a08284fb1b97a78eec354644"}, + {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5de39dc61ca35342cf409e031f70f18219f2c48380d3886c1cf5ad9f17898e06"}, + {file = "matplotlib-3.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dd386c80a98b5f51571b9484bf6c6976de383cd2a8cd972b6a9562d85c6d2087"}, + {file = "matplotlib-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f691b4ef47c7384d0936b2e8ebdeb5d526c81d004ad9403dfb9d4c76b9979a93"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0b11f354aae62a2aa53ec5bb09946f5f06fc41793e351a04ff60223ea9162955"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f54b9fb87ca5acbcdd0f286021bedc162e1425fa5555ebf3b3dfc167b955ad9"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:60a6e04dfd77c0d3bcfee61c3cd335fff1b917c2f303b32524cd1235e194ef99"}, + {file = "matplotlib-3.8.0.tar.gz", hash = "sha256:df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69"}, ] [package.dependencies] @@ -1797,17 +2755,61 @@ contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.0.1" -numpy = ">=1.20" +numpy = ">=1.21,<2" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.3.1,<3.1" +pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +setuptools_scm = ">=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 = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1815,16 +2817,26 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + [[package]] name = "mlflow" -version = "2.5.0" +version = "2.7.1" description = "MLflow: A Platform for ML Development and Productionization" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "mlflow-2.5.0-py3-none-any.whl", hash = "sha256:981fcb3480ca7383b47e22b5e4c726d21e2c87fb4035e5a1b57574736c665576"}, - {file = "mlflow-2.5.0.tar.gz", hash = "sha256:f992ae8ea9c73502344baf48c4ec447aa9efbfa8965bc090868e6163234f4eb0"}, + {file = "mlflow-2.7.1-py3-none-any.whl", hash = "sha256:d9b9f0f32d495f6abbd4068ce9af4a06d08cfafdbaf575248304af1a4ae070ec"}, + {file = "mlflow-2.7.1.tar.gz", hash = "sha256:853b2038496fb8f85cad205943dede877f65ab86e856f296587885dafcef643d"}, ] [package.dependencies] @@ -1836,7 +2848,7 @@ docker = ">=4.0.0,<7" entrypoints = "<1" Flask = "<3" gitpython = ">=2.1.0,<4" -gunicorn = {version = "<21", markers = "platform_system != \"Windows\""} +gunicorn = {version = "<22", markers = "platform_system != \"Windows\""} importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0,<7" Jinja2 = [ {version = ">=2.11,<4", markers = "platform_system != \"Windows\""}, @@ -1848,7 +2860,7 @@ numpy = "<2" packaging = "<24" pandas = "<3" protobuf = ">=3.12.0,<5" -pyarrow = ">=4.0.0,<13" +pyarrow = ">=4.0.0,<14" pytz = "<2024" pyyaml = ">=5.1,<7" querystring-parser = "<2" @@ -1863,19 +2875,18 @@ waitress = {version = "<3", markers = "platform_system == \"Windows\""} aliyun-oss = ["aliyunstoreplugin"] databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "google-cloud-storage (>=1.30.0)"] extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1)", "mlserver-mlflow (>=1.2.0,!=1.3.1)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] -gateway = ["aiohttp (<4)", "fastapi (<1)", "psutil (<6)", "pydantic (>=1.0,<2)", "uvicorn[standard] (<1)", "watchfiles (<1)"] +gateway = ["aiohttp (<4)", "fastapi (<1)", "psutil (<6)", "pydantic (>=1.0,<3)", "uvicorn[standard] (<1)", "watchfiles (<1)"] sqlserver = ["mlflow-dbstore"] [[package]] name = "mlflow-skinny" -version = "2.5.0" +version = "2.7.1" description = "MLflow: A Platform for ML Development and Productionization" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "mlflow-skinny-2.5.0.tar.gz", hash = "sha256:cabb5213cdc68e540d5b8828f93d636c1ea5ac33a44288c8c5d05b65b7055747"}, - {file = "mlflow_skinny-2.5.0-py3-none-any.whl", hash = "sha256:b2bef381fc7e842e1846debdd7261bdbf8f218bb88f2232092dd86dd2b06e9e1"}, + {file = "mlflow-skinny-2.7.1.tar.gz", hash = "sha256:d23e8716d1a313129353d585e5c5e4b9390128a343e18cb9e8441af97708eef6"}, + {file = "mlflow_skinny-2.7.1-py3-none-any.whl", hash = "sha256:1bf423915460d60a0a5bdb7c88da5a309d57972d99da4a34993b0971235b21e6"}, ] [package.dependencies] @@ -1896,14 +2907,13 @@ sqlparse = ">=0.4.0,<1" aliyun-oss = ["aliyunstoreplugin"] databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "google-cloud-storage (>=1.30.0)"] extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1)", "mlserver-mlflow (>=1.2.0,!=1.3.1)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] -gateway = ["aiohttp (<4)", "fastapi (<1)", "psutil (<6)", "pydantic (>=1.0,<2)", "uvicorn[standard] (<1)", "watchfiles (<1)"] +gateway = ["aiohttp (<4)", "fastapi (<1)", "psutil (<6)", "pydantic (>=1.0,<3)", "uvicorn[standard] (<1)", "watchfiles (<1)"] sqlserver = ["mlflow-dbstore"] [[package]] name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" -category = "main" optional = false python-versions = "*" files = [ @@ -1919,18 +2929,17 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.22.0" -description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." -category = "main" +version = "1.24.1" +description = "The Microsoft Authentication Library (MSAL) for Python library" optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "msal-1.22.0-py2.py3-none-any.whl", hash = "sha256:9120b7eafdf061c92f7b3d744e5f325fca35873445fa8ffebb40b1086a13dd58"}, - {file = "msal-1.22.0.tar.gz", hash = "sha256:8a82f5375642c1625c89058018430294c109440dce42ea667d466c2cab520acd"}, + {file = "msal-1.24.1-py2.py3-none-any.whl", hash = "sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad"}, + {file = "msal-1.24.1.tar.gz", hash = "sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8"}, ] [package.dependencies] -cryptography = ">=0.6,<43" +cryptography = ">=0.6,<44" PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" @@ -1941,7 +2950,6 @@ broker = ["pymsalruntime (>=0.13.2,<0.14)"] name = "msal-extensions" version = "1.0.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." -category = "main" optional = false python-versions = "*" files = [ @@ -1960,7 +2968,6 @@ portalocker = [ name = "msrest" version = "0.7.1" description = "AutoRest swagger generator Python client runtime." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1982,7 +2989,6 @@ async = ["aiodns", "aiohttp (>=3.0)"] name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2062,11 +3068,56 @@ files = [ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] +[[package]] +name = "mypy" +version = "1.6.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2074,65 +3125,214 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "nbclient" +version = "0.8.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, +] + +[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.9.2" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.9.2-py3-none-any.whl", hash = "sha256:39fe4b8bdd1b0104fdd86fc8a43a9077ba64c720bda4c6132690d917a0a154ee"}, + {file = "nbconvert-7.9.2.tar.gz", hash = "sha256:e56cc7588acc4f93e2bb5a34ec69028e4941797b2bfaf6462f18a41d1cc258c9"}, +] + +[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", "pytest-dependency"] +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 = "networkx" -version = "3.1" +version = "3.2" description = "Python package for creating and manipulating graphs and networks" -category = "main" +optional = false +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2-py3-none-any.whl", hash = "sha256:8b25f564bd28f94ac821c58b04ae1a3109e73b001a7d476e4bb0d00d63706bf8"}, + {file = "networkx-3.2.tar.gz", hash = "sha256:bda29edf392d9bfa5602034c767d28549214ec45f620081f0b74dc036a1fbbc1"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "7.0.6" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, - {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, + {file = "notebook-7.0.6-py3-none-any.whl", hash = "sha256:0fe8f67102fea3744fedf652e4c15339390902ca70c5a31c4f547fa23da697cc"}, + {file = "notebook-7.0.6.tar.gz", hash = "sha256:ec6113b06529019f7f287819af06c97a2baf7a95ac21a8f6e32192898e9f9a58"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[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] -default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] [[package]] name = "numpy" -version = "1.25.1" +version = "1.26.1" description = "Fundamental package for array computing in Python" -category = "main" optional = false -python-versions = ">=3.9" +python-versions = "<3.13,>=3.9" files = [ - {file = "numpy-1.25.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa"}, - {file = "numpy-1.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b"}, - {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf"}, - {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588"}, - {file = "numpy-1.25.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19"}, - {file = "numpy-1.25.1-cp310-cp310-win32.whl", hash = "sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"}, - {file = "numpy-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57"}, - {file = "numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e"}, - {file = "numpy-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800"}, - {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09"}, - {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6"}, - {file = "numpy-1.25.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d"}, - {file = "numpy-1.25.1-cp311-cp311-win32.whl", hash = "sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb"}, - {file = "numpy-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171"}, - {file = "numpy-1.25.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105"}, - {file = "numpy-1.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f"}, - {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625"}, - {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd"}, - {file = "numpy-1.25.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7"}, - {file = "numpy-1.25.1-cp39-cp39-win32.whl", hash = "sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c"}, - {file = "numpy-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe"}, - {file = "numpy-1.25.1.tar.gz", hash = "sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, ] [[package]] name = "nvidia-cublas-cu11" version = "11.10.3.66" description = "CUBLAS native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2148,7 +3348,6 @@ wheel = "*" name = "nvidia-cuda-cupti-cu11" version = "11.7.101" description = "CUDA profiling tools runtime libs." -category = "main" optional = false python-versions = ">=3" files = [ @@ -2164,7 +3363,6 @@ wheel = "*" name = "nvidia-cuda-nvrtc-cu11" version = "11.7.99" description = "NVRTC native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2181,7 +3379,6 @@ wheel = "*" name = "nvidia-cuda-runtime-cu11" version = "11.7.99" description = "CUDA Runtime native Libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2197,7 +3394,6 @@ wheel = "*" name = "nvidia-cudnn-cu11" version = "8.5.0.96" description = "cuDNN runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2213,7 +3409,6 @@ wheel = "*" name = "nvidia-cufft-cu11" version = "10.9.0.58" description = "CUFFT native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2225,7 +3420,6 @@ files = [ name = "nvidia-curand-cu11" version = "10.2.10.91" description = "CURAND native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2241,7 +3435,6 @@ wheel = "*" name = "nvidia-cusolver-cu11" version = "11.4.0.1" description = "CUDA solver native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2258,7 +3451,6 @@ wheel = "*" name = "nvidia-cusparse-cu11" version = "11.7.4.91" description = "CUSPARSE native runtime libraries" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2274,7 +3466,6 @@ wheel = "*" name = "nvidia-nccl-cu11" version = "2.14.3" description = "NVIDIA Collective Communication Library (NCCL) Runtime" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2285,7 +3476,6 @@ files = [ name = "nvidia-nvtx-cu11" version = "11.7.91" description = "NVIDIA Tools Extension" -category = "main" optional = false python-versions = ">=3" files = [ @@ -2301,7 +3491,6 @@ wheel = "*" name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2318,7 +3507,6 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] name = "omegaconf" version = "2.3.0" description = "A flexible configuration library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2327,26 +3515,35 @@ files = [ ] [package.dependencies] -antlr4-python3-runtime = ">=4.9.0,<4.10.0" +antlr4-python3-runtime = "==4.9.*" PyYAML = ">=5.1.0" +[[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.1" +version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] name = "pandas" version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2387,86 +3584,159 @@ pytz = ">=2020.1" [package.extras] test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] +[[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 = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + +[[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 = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + [[package]] name = "pillow" -version = "10.0.0" +version = "10.1.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +[[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 = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -2475,14 +3745,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "portalocker" -version = "2.7.0" +version = "2.8.2" description = "Wraps the portalocker recipe for easy usage" -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"}, - {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"}, + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, ] [package.dependencies] @@ -2491,64 +3760,165 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} [package.extras] docs = ["sphinx (>=1.7.1)"] redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.17.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, +] + +[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 = "protobuf" -version = "4.23.4" +version = "4.24.4" description = "" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7" +files = [ + {file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"}, + {file = "protobuf-4.24.4-cp310-abi3-win_amd64.whl", hash = "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085"}, + {file = "protobuf-4.24.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e61a27f362369c2f33248a0ff6896c20dcd47b5d48239cb9720134bef6082e4"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:bffa46ad9612e6779d0e51ae586fde768339b791a50610d85eb162daeb23661e"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9"}, + {file = "protobuf-4.24.4-cp37-cp37m-win32.whl", hash = "sha256:dbbed8a56e56cee8d9d522ce844a1379a72a70f453bde6243e3c86c30c2a3d46"}, + {file = "protobuf-4.24.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6b7d2e1c753715dcfe9d284a25a52d67818dd43c4932574307daf836f0071e37"}, + {file = "protobuf-4.24.4-cp38-cp38-win32.whl", hash = "sha256:02212557a76cd99574775a81fefeba8738d0f668d6abd0c6b1d3adcc75503dbe"}, + {file = "protobuf-4.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:2fa3886dfaae6b4c5ed2730d3bf47c7a38a72b3a1f0acb4d4caf68e6874b947b"}, + {file = "protobuf-4.24.4-cp39-cp39-win32.whl", hash = "sha256:b77272f3e28bb416e2071186cb39efd4abbf696d682cbb5dc731308ad37fa6dd"}, + {file = "protobuf-4.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:9fee5e8aa20ef1b84123bb9232b3f4a5114d9897ed89b4b8142d81924e05d79b"}, + {file = "protobuf-4.24.4-py3-none-any.whl", hash = "sha256:80797ce7424f8c8d2f2547e2d42bfbb6c08230ce5832d6c099a37335c9c90a92"}, + {file = "protobuf-4.24.4.tar.gz", hash = "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"}, +] + +[[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 = "protobuf-4.23.4-cp310-abi3-win32.whl", hash = "sha256:5fea3c64d41ea5ecf5697b83e41d09b9589e6f20b677ab3c48e5f242d9b7897b"}, - {file = "protobuf-4.23.4-cp310-abi3-win_amd64.whl", hash = "sha256:7b19b6266d92ca6a2a87effa88ecc4af73ebc5cfde194dc737cf8ef23a9a3b12"}, - {file = "protobuf-4.23.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8547bf44fe8cec3c69e3042f5c4fb3e36eb2a7a013bb0a44c018fc1e427aafbd"}, - {file = "protobuf-4.23.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fee88269a090ada09ca63551bf2f573eb2424035bcf2cb1b121895b01a46594a"}, - {file = "protobuf-4.23.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:effeac51ab79332d44fba74660d40ae79985901ac21bca408f8dc335a81aa597"}, - {file = "protobuf-4.23.4-cp37-cp37m-win32.whl", hash = "sha256:c3e0939433c40796ca4cfc0fac08af50b00eb66a40bbbc5dee711998fb0bbc1e"}, - {file = "protobuf-4.23.4-cp37-cp37m-win_amd64.whl", hash = "sha256:9053df6df8e5a76c84339ee4a9f5a2661ceee4a0dab019e8663c50ba324208b0"}, - {file = "protobuf-4.23.4-cp38-cp38-win32.whl", hash = "sha256:e1c915778d8ced71e26fcf43c0866d7499891bca14c4368448a82edc61fdbc70"}, - {file = "protobuf-4.23.4-cp38-cp38-win_amd64.whl", hash = "sha256:351cc90f7d10839c480aeb9b870a211e322bf05f6ab3f55fcb2f51331f80a7d2"}, - {file = "protobuf-4.23.4-cp39-cp39-win32.whl", hash = "sha256:6dd9b9940e3f17077e820b75851126615ee38643c2c5332aa7a359988820c720"}, - {file = "protobuf-4.23.4-cp39-cp39-win_amd64.whl", hash = "sha256:0a5759f5696895de8cc913f084e27fd4125e8fb0914bb729a17816a33819f474"}, - {file = "protobuf-4.23.4-py3-none-any.whl", hash = "sha256:e9d0be5bf34b275b9f87ba7407796556abeeba635455d036c7351f7c183ef8ff"}, - {file = "protobuf-4.23.4.tar.gz", hash = "sha256:ccd9430c0719dce806b93f89c91de7977304729e55377f872a92465d548329a9"}, + {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 = "pyarrow" -version = "12.0.1" +version = "13.0.0" description = "Python library for Apache Arrow" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyarrow-12.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6d288029a94a9bb5407ceebdd7110ba398a00412c5b0155ee9813a40d246c5df"}, - {file = "pyarrow-12.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345e1828efdbd9aa4d4de7d5676778aba384a2c3add896d995b23d368e60e5af"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d6009fdf8986332b2169314da482baed47ac053311c8934ac6651e614deacd6"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d3c4cbbf81e6dd23fe921bc91dc4619ea3b79bc58ef10bce0f49bdafb103daf"}, - {file = "pyarrow-12.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdacf515ec276709ac8042c7d9bd5be83b4f5f39c6c037a17a60d7ebfd92c890"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:749be7fd2ff260683f9cc739cb862fb11be376de965a2a8ccbf2693b098db6c7"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6895b5fb74289d055c43db3af0de6e16b07586c45763cb5e558d38b86a91e3a7"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1887bdae17ec3b4c046fcf19951e71b6a619f39fa674f9881216173566c8f718"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c9cb8eeabbadf5fcfc3d1ddea616c7ce893db2ce4dcef0ac13b099ad7ca082"}, - {file = "pyarrow-12.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4aebdf412bd0eeb800d8e47db854f9f9f7e2f5a0220440acf219ddfddd4f63"}, - {file = "pyarrow-12.0.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:e0d8730c7f6e893f6db5d5b86eda42c0a130842d101992b581e2138e4d5663d3"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43364daec02f69fec89d2315f7fbfbeec956e0d991cbbef471681bd77875c40f"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051f9f5ccf585f12d7de836e50965b3c235542cc896959320d9776ab93f3b33d"}, - {file = "pyarrow-12.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:be2757e9275875d2a9c6e6052ac7957fbbfc7bc7370e4a036a9b893e96fedaba"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:cf812306d66f40f69e684300f7af5111c11f6e0d89d6b733e05a3de44961529d"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:459a1c0ed2d68671188b2118c63bac91eaef6fc150c77ddd8a583e3c795737bf"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e705e33eaf666bbe508a16fd5ba27ca061e177916b7a317ba5a51bee43384c"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9120c3eb2b1f6f516a3b7a9714ed860882d9ef98c4b17edcdc91d95b7528db60"}, - {file = "pyarrow-12.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c780f4dc40460015d80fcd6a6140de80b615349ed68ef9adb653fe351778c9b3"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a3c63124fc26bf5f95f508f5d04e1ece8cc23a8b0af2a1e6ab2b1ec3fdc91b24"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b13329f79fa4472324f8d32dc1b1216616d09bd1e77cfb13104dec5463632c36"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb656150d3d12ec1396f6dde542db1675a95c0cc8366d507347b0beed96e87ca"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6251e38470da97a5b2e00de5c6a049149f7b2bd62f12fa5dbb9ac674119ba71a"}, - {file = "pyarrow-12.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3de26da901216149ce086920547dfff5cd22818c9eab67ebc41e863a5883bac7"}, - {file = "pyarrow-12.0.1.tar.gz", hash = "sha256:cce317fc96e5b71107bf1f9f184d5e54e2bd14bbf3f9a3d62819961f0af86fec"}, +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-13.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:1afcc2c33f31f6fb25c92d50a86b7a9f076d38acbcb6f9e74349636109550148"}, + {file = "pyarrow-13.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:70fa38cdc66b2fc1349a082987f2b499d51d072faaa6b600f71931150de2e0e3"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd57b13a6466822498238877892a9b287b0a58c2e81e4bdb0b596dbb151cbb73"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ce69f7bf01de2e2764e14df45b8404fc6f1a5ed9871e8e08a12169f87b7a26"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:588f0d2da6cf1b1680974d63be09a6530fd1bd825dc87f76e162404779a157dc"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6241afd72b628787b4abea39e238e3ff9f34165273fad306c7acf780dd850956"}, + {file = "pyarrow-13.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:fda7857e35993673fcda603c07d43889fca60a5b254052a462653f8656c64f44"}, + {file = "pyarrow-13.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:aac0ae0146a9bfa5e12d87dda89d9ef7c57a96210b899459fc2f785303dcbb67"}, + {file = "pyarrow-13.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7759994217c86c161c6a8060509cfdf782b952163569606bb373828afdd82e8"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868a073fd0ff6468ae7d869b5fc1f54de5c4255b37f44fb890385eb68b68f95d"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51be67e29f3cfcde263a113c28e96aa04362ed8229cb7c6e5f5c719003659d33"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d1b4e7176443d12610874bb84d0060bf080f000ea9ed7c84b2801df851320295"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:69b6f9a089d116a82c3ed819eea8fe67dae6105f0d81eaf0fdd5e60d0c6e0944"}, + {file = "pyarrow-13.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ab1268db81aeb241200e321e220e7cd769762f386f92f61b898352dd27e402ce"}, + {file = "pyarrow-13.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:ee7490f0f3f16a6c38f8c680949551053c8194e68de5046e6c288e396dccee80"}, + {file = "pyarrow-13.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3ad79455c197a36eefbd90ad4aa832bece7f830a64396c15c61a0985e337287"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68fcd2dc1b7d9310b29a15949cdd0cb9bc34b6de767aff979ebf546020bf0ba0"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc6fd330fd574c51d10638e63c0d00ab456498fc804c9d01f2a61b9264f2c5b2"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e66442e084979a97bb66939e18f7b8709e4ac5f887e636aba29486ffbf373763"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:0f6eff839a9e40e9c5610d3ff8c5bdd2f10303408312caf4c8003285d0b49565"}, + {file = "pyarrow-13.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b30a27f1cddf5c6efcb67e598d7823a1e253d743d92ac32ec1eb4b6a1417867"}, + {file = "pyarrow-13.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:09552dad5cf3de2dc0aba1c7c4b470754c69bd821f5faafc3d774bedc3b04bb7"}, + {file = "pyarrow-13.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3896ae6c205d73ad192d2fc1489cd0edfab9f12867c85b4c277af4d37383c18c"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6647444b21cb5e68b593b970b2a9a07748dd74ea457c7dadaa15fd469c48ada1"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47663efc9c395e31d09c6aacfa860f4473815ad6804311c5433f7085415d62a7"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b9ba6b6d34bd2563345488cf444510588ea42ad5613df3b3509f48eb80250afd"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:d00d374a5625beeb448a7fa23060df79adb596074beb3ddc1838adb647b6ef09"}, + {file = "pyarrow-13.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c51afd87c35c8331b56f796eff954b9c7f8d4b7fef5903daf4e05fcf017d23a8"}, + {file = "pyarrow-13.0.0.tar.gz", hash = "sha256:83333726e83ed44b0ac94d8d7a21bbdee4a05029c3b1e8db58a863eec8fd8a33"}, ] [package.dependencies] @@ -2558,7 +3928,6 @@ numpy = ">=1.16.6" name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2570,7 +3939,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2585,7 +3953,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2595,14 +3962,13 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2612,7 +3978,6 @@ plugins = ["importlib-metadata"] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2629,16 +3994,40 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +[[package]] +name = "pylint" +version = "2.17.7" +description = "python code static checker" +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, +] + +[package.dependencies] +astroid = ">=2.15.8,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = {version = ">=0.2", markers = "python_version < \"3.11\""} +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -2646,14 +4035,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] [package.dependencies] @@ -2671,7 +4059,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2690,7 +4077,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2701,65 +4087,69 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "pytorch-lightning" -version = "1.9.5" +version = "2.1.0" description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytorch-lightning-1.9.5.tar.gz", hash = "sha256:925fe7b80ddf04859fa385aa493b260be4000b11a2f22447afb4a932d1f07d26"}, - {file = "pytorch_lightning-1.9.5-py3-none-any.whl", hash = "sha256:06821558158623c5d2ecf5d3d0374dc8bd661e0acd3acf54a6d6f71737c156c5"}, + {file = "pytorch-lightning-2.1.0.tar.gz", hash = "sha256:bf9e26b293e1ccda5f8e146fe58716eecfd77e9639ef3ec2210b0dcba51c4593"}, + {file = "pytorch_lightning-2.1.0-py3-none-any.whl", hash = "sha256:2802d683ef513235dfc211f6bc45d7086e8982feaac1625aafd2886c5e5b96f8"}, ] [package.dependencies] fsspec = {version = ">2021.06.0", extras = ["http"]} hydra-core = {version = ">=1.0.5", optional = true, markers = "extra == \"extra\""} jsonargparse = {version = ">=4.18.0", extras = ["signatures"], optional = true, markers = "extra == \"extra\""} -lightning-utilities = ">=0.6.0.post0" +lightning-utilities = ">=0.8.0" matplotlib = {version = ">3.1", optional = true, markers = "extra == \"extra\""} numpy = ">=1.17.2" omegaconf = {version = ">=2.0.5", optional = true, markers = "extra == \"extra\""} -packaging = ">=17.1" +packaging = ">=20.0" PyYAML = ">=5.4" -rich = {version = ">=10.14.0,<10.15.0.a || >10.15.0.a", optional = true, markers = "extra == \"extra\""} +rich = {version = ">=12.3.0", optional = true, markers = "extra == \"extra\""} tensorboardX = {version = ">=2.2", optional = true, markers = "extra == \"extra\""} -torch = ">=1.10.0" +torch = ">=1.12.0" torchmetrics = ">=0.7.0" tqdm = ">=4.57.0" typing-extensions = ">=4.0.0" [package.extras] -all = ["colossalai (>=0.2.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "gym[classic-control] (>=0.17.0)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.7.1)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=10.14.0,!=10.15.0.a)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)"] -colossalai = ["colossalai (>=0.2.0)"] -deepspeed = ["deepspeed (>=0.6.0)"] -dev = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "colossalai (>=0.2.0)", "coverage (==6.5.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "fastapi (<0.87.0)", "gym[classic-control] (>=0.17.0)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.7.1)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "onnx (<1.14.0)", "onnxruntime (<1.14.0)", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil (<5.9.5)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.3)", "rich (>=10.14.0,!=10.15.0.a)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)", "uvicorn (<0.19.1)"] -examples = ["gym[classic-control] (>=0.17.0)", "ipython[all] (<8.7.1)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)"] -extra = ["hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=10.14.0,!=10.15.0.a)", "tensorboardX (>=2.2)"] -fairscale = ["fairscale (>=0.4.5)"] -hivemind = ["hivemind (==1.1.5)"] -horovod = ["horovod (>=0.21.2,!=0.24.0)"] -strategies = ["colossalai (>=0.2.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)"] -test = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "coverage (==6.5.0)", "fastapi (<0.87.0)", "onnx (<1.14.0)", "onnxruntime (<1.14.0)", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil (<5.9.5)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.3)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn (<0.19.1)"] +all = ["deepspeed (>=0.8.2,<=0.9.3)", "gym[classic-control] (>=0.17.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.18.0)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=12.3.0)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.13.0)"] +deepspeed = ["deepspeed (>=0.8.2,<=0.9.3)"] +dev = ["cloudpickle (>=1.3)", "coverage (==7.3.1)", "deepspeed (>=0.8.2,<=0.9.3)", "fastapi", "gym[classic-control] (>=0.17.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.18.0)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "onnx (>=0.14.0)", "onnxruntime (>=0.15.0)", "pandas (>1.0)", "psutil (<5.9.6)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-random-order (==1.1.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "rich (>=12.3.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.13.0)", "uvicorn"] +examples = ["gym[classic-control] (>=0.17.0)", "ipython[all] (<8.15.0)", "lightning-utilities (>=0.8.0)", "torchmetrics (>=0.10.0)", "torchvision (>=0.13.0)"] +extra = ["hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=12.3.0)", "tensorboardX (>=2.2)"] +strategies = ["deepspeed (>=0.8.2,<=0.9.3)"] +test = ["cloudpickle (>=1.3)", "coverage (==7.3.1)", "fastapi", "onnx (>=0.14.0)", "onnxruntime (>=0.15.0)", "pandas (>1.0)", "psutil (<5.9.6)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-random-order (==1.1.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn"] [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -2779,11 +4169,25 @@ files = [ {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" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2792,6 +4196,7 @@ files = [ {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"}, @@ -2799,8 +4204,15 @@ files = [ {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"}, @@ -2817,6 +4229,7 @@ files = [ {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"}, @@ -2824,16 +4237,164 @@ files = [ {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 = "qtconsole" +version = "5.4.4" +description = "Jupyter Qt console" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "qtconsole-5.4.4-py3-none-any.whl", hash = "sha256:a3b69b868e041c2c698bdc75b0602f42e130ffb256d6efa48f9aa756c97672aa"}, + {file = "qtconsole-5.4.4.tar.gz", hash = "sha256:b7ffb53d74f23cee29f4cdb55dd6fabc8ec312d94f3c46ba38e1dde458693dfb"}, +] + +[package.dependencies] +ipykernel = ">=4.1" +ipython-genutils = "*" +jupyter-client = ">=4.1" +jupyter-core = "*" +packaging = "*" +pygments = "*" +pyzmq = ">=17.1" +qtpy = ">=2.4.0" +traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" + +[package.extras] +doc = ["Sphinx (>=1.3)"] +test = ["flaky", "pytest", "pytest-qt"] + +[[package]] +name = "qtpy" +version = "2.4.1" +description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +optional = false +python-versions = ">=3.7" +files = [ + {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, + {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] + [[package]] name = "querystring-parser" version = "1.2.4" description = "QueryString parser for Python/Django that correctly handles nested dictionaries" -category = "main" optional = false python-versions = "*" files = [ @@ -2844,11 +4405,25 @@ files = [ [package.dependencies] six = "*" +[[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." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2870,7 +4445,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-oauthlib" version = "1.3.1" description = "OAuthlib authentication support for Requests." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2885,16 +4459,40 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rich" -version = "13.4.2" +version = "13.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, - {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, ] [package.dependencies] @@ -2904,11 +4502,118 @@ pygments = ">=2.13.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[[package]] +name = "rpds-py" +version = "0.10.6" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, + {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, + {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, + {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, + {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, + {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, + {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, + {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, + {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, + {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, + {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, + {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, +] + [[package]] name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -2921,38 +4626,42 @@ pyasn1 = ">=0.1.3" [[package]] name = "scikit-learn" -version = "1.3.0" +version = "1.3.2" description = "A set of python modules for machine learning and data mining" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, - {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, - {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, - {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, - {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, + {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, + {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, + {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, + {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, + {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, + {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, ] [package.dependencies] joblib = ">=1.1.1" -numpy = ">=1.17.3" +numpy = ">=1.17.3,<2.0" scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" @@ -2964,31 +4673,36 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.11.1" +version = "1.11.3" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = "<3.13,>=3.9" files = [ - {file = "scipy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04"}, - {file = "scipy-1.11.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3b9963798df1d8a52db41a6fc0e6fa65b1c60e85d73da27ae8bb754de4792481"}, - {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e8eb42db36526b130dfbc417609498a6192381abc1975b91e3eb238e0b41c1a"}, - {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:366a6a937110d80dca4f63b3f5b00cc89d36f678b2d124a01067b154e692bab1"}, - {file = "scipy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:08d957ca82d3535b3b9ba6c8ff355d78fe975271874e2af267cb5add5bd78625"}, - {file = "scipy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:e866514bc2d660608447b6ba95c8900d591f2865c07cca0aa4f7ff3c4ca70f30"}, - {file = "scipy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba94eeef3c9caa4cea7b402a35bb02a5714ee1ee77eb98aca1eed4543beb0f4c"}, - {file = "scipy-1.11.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:512fdc18c65f76dadaca139348e525646d440220d8d05f6d21965b8d4466bccd"}, - {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce154372f0ebe88556ed06d7b196e9c2e0c13080ecb58d0f35062dc7cc28b47"}, - {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4bb943010203465ac81efa392e4645265077b4d9e99b66cf3ed33ae12254173"}, - {file = "scipy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:249cfa465c379c9bb2c20123001e151ff5e29b351cbb7f9c91587260602c58d0"}, - {file = "scipy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ffb28e3fa31b9c376d0fb1f74c1f13911c8c154a760312fbee87a21eb21efe31"}, - {file = "scipy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:39154437654260a52871dfde852adf1b93b1d1bc5dc0ffa70068f16ec0be2624"}, - {file = "scipy-1.11.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b588311875c58d1acd4ef17c983b9f1ab5391755a47c3d70b6bd503a45bfaf71"}, - {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d51565560565a0307ed06fa0ec4c6f21ff094947d4844d6068ed04400c72d0c3"}, - {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a0f322b4eb51b078cb3441e950ad661ede490c3aca66edef66f4b37ab1877"}, - {file = "scipy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:396fae3f8c12ad14c5f3eb40499fd06a6fef8393a6baa352a652ecd51e74e029"}, - {file = "scipy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:be8c962a821957fdde8c4044efdab7a140c13294997a407eaee777acf63cbf0c"}, - {file = "scipy-1.11.1.tar.gz", hash = "sha256:fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, + {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, + {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, + {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, + {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, + {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, + {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, + {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, + {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, + {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, ] [package.dependencies] @@ -2999,28 +4713,64 @@ dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyl 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", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[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.0.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false -python-versions = ">=3.7" +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 = "setuptools-scm" +version = "8.0.4" +description = "the blessed package to manage your versions by scm tags" +optional = false +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, ] +[package.dependencies] +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = "*" + [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "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 (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "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]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["build", "pytest", "rich", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3030,65 +4780,93 @@ files = [ [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[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 = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] name = "sqlalchemy" -version = "2.0.19" +version = "2.0.22" description = "Database Abstraction Library" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9deaae357edc2091a9ed5d25e9ee8bba98bcfae454b3911adeaf159c2e9ca9e3"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bf0fd65b50a330261ec7fe3d091dfc1c577483c96a9fa1e4323e932961aa1b5"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d90ccc15ba1baa345796a8fb1965223ca7ded2d235ccbef80a47b85cea2d71a"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e688f6784427e5f9479d1a13617f573de8f7d4aa713ba82813bcd16e259d1"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:584f66e5e1979a7a00f4935015840be627e31ca29ad13f49a6e51e97a3fb8cae"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c69ce70047b801d2aba3e5ff3cba32014558966109fecab0c39d16c18510f15"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win32.whl", hash = "sha256:96f0463573469579d32ad0c91929548d78314ef95c210a8115346271beeeaaa2"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win_amd64.whl", hash = "sha256:22bafb1da60c24514c141a7ff852b52f9f573fb933b1e6b5263f0daa28ce6db9"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6894708eeb81f6d8193e996257223b6bb4041cb05a17cd5cf373ed836ef87a2"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f2afd1aafded7362b397581772c670f20ea84d0a780b93a1a1529da7c3d369"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15afbf5aa76f2241184c1d3b61af1a72ba31ce4161013d7cb5c4c2fca04fd6e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc05b59142445a4efb9c1fd75c334b431d35c304b0e33f4fa0ff1ea4890f92e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5831138f0cc06b43edf5f99541c64adf0ab0d41f9a4471fd63b54ae18399e4de"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3afa8a21a9046917b3a12ffe016ba7ebe7a55a6fc0c7d950beb303c735c3c3ad"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win32.whl", hash = "sha256:c896d4e6ab2eba2afa1d56be3d0b936c56d4666e789bfc59d6ae76e9fcf46145"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win_amd64.whl", hash = "sha256:024d2f67fb3ec697555e48caeb7147cfe2c08065a4f1a52d93c3d44fc8e6ad1c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:89bc2b374ebee1a02fd2eae6fd0570b5ad897ee514e0f84c5c137c942772aa0c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4d410a76c3762511ae075d50f379ae09551d92525aa5bb307f8343bf7c2c12"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f469f15068cd8351826df4080ffe4cc6377c5bf7d29b5a07b0e717dddb4c7ea2"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cda283700c984e699e8ef0fcc5c61f00c9d14b6f65a4f2767c97242513fcdd84"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:43699eb3f80920cc39a380c159ae21c8a8924fe071bccb68fc509e099420b148"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win32.whl", hash = "sha256:61ada5831db36d897e28eb95f0f81814525e0d7927fb51145526c4e63174920b"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win_amd64.whl", hash = "sha256:57d100a421d9ab4874f51285c059003292433c648df6abe6c9c904e5bd5b0828"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16a310f5bc75a5b2ce7cb656d0e76eb13440b8354f927ff15cbaddd2523ee2d1"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf7b5e3856cbf1876da4e9d9715546fa26b6e0ba1a682d5ed2fc3ca4c7c3ec5b"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e7b69d9ced4b53310a87117824b23c509c6fc1f692aa7272d47561347e133b6"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9eb4575bfa5afc4b066528302bf12083da3175f71b64a43a7c0badda2be365"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6b54d1ad7a162857bb7c8ef689049c7cd9eae2f38864fc096d62ae10bc100c7d"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5d6afc41ca0ecf373366fd8e10aee2797128d3ae45eb8467b19da4899bcd1ee0"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win32.whl", hash = "sha256:430614f18443b58ceb9dedec323ecddc0abb2b34e79d03503b5a7579cd73a531"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win_amd64.whl", hash = "sha256:eb60699de43ba1a1f77363f563bb2c652f7748127ba3a774f7cf2c7804aa0d3d"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a752b7a9aceb0ba173955d4f780c64ee15a1a991f1c52d307d6215c6c73b3a4c"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7351c05db355da112e056a7b731253cbeffab9dfdb3be1e895368513c7d70106"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa51ce4aea583b0c6b426f4b0563d3535c1c75986c4373a0987d84d22376585b"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae7473a67cd82a41decfea58c0eac581209a0aa30f8bc9190926fbf628bb17f7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851a37898a8a39783aab603c7348eb5b20d83c76a14766a43f56e6ad422d1ec8"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539010665c90e60c4a1650afe4ab49ca100c74e6aef882466f1de6471d414be7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win32.whl", hash = "sha256:f82c310ddf97b04e1392c33cf9a70909e0ae10a7e2ddc1d64495e3abdc5d19fb"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win_amd64.whl", hash = "sha256:8e712cfd2e07b801bc6b60fdf64853bc2bd0af33ca8fa46166a23fe11ce0dbb0"}, - {file = "SQLAlchemy-2.0.19-py3-none-any.whl", hash = "sha256:314145c1389b021a9ad5aa3a18bac6f5d939f9087d7fc5443be28cba19d2c972"}, - {file = "SQLAlchemy-2.0.19.tar.gz", hash = "sha256:77a14fa20264af73ddcdb1e2b9c5a829b8cc6b8304d0f093271980e36c200a3f"}, +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.22-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f146c61ae128ab43ea3a0955de1af7e1633942c2b2b4985ac51cc292daf33222"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:875de9414393e778b655a3d97d60465eb3fae7c919e88b70cc10b40b9f56042d"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13790cb42f917c45c9c850b39b9941539ca8ee7917dacf099cc0b569f3d40da7"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e04ab55cf49daf1aeb8c622c54d23fa4bec91cb051a43cc24351ba97e1dd09f5"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a42c9fa3abcda0dcfad053e49c4f752eef71ecd8c155221e18b99d4224621176"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:14cd3bcbb853379fef2cd01e7c64a5d6f1d005406d877ed9509afb7a05ff40a5"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-win32.whl", hash = "sha256:d143c5a9dada696bcfdb96ba2de4a47d5a89168e71d05a076e88a01386872f97"}, + {file = "SQLAlchemy-2.0.22-cp310-cp310-win_amd64.whl", hash = "sha256:ccd87c25e4c8559e1b918d46b4fa90b37f459c9b4566f1dfbce0eb8122571547"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f6ff392b27a743c1ad346d215655503cec64405d3b694228b3454878bf21590"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f776c2c30f0e5f4db45c3ee11a5f2a8d9de68e81eb73ec4237de1e32e04ae81c"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8f1792d20d2f4e875ce7a113f43c3561ad12b34ff796b84002a256f37ce9437"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80eeb5189d7d4b1af519fc3f148fe7521b9dfce8f4d6a0820e8f5769b005051"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69fd9e41cf9368afa034e1c81f3570afb96f30fcd2eb1ef29cb4d9371c6eece2"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54bcceaf4eebef07dadfde424f5c26b491e4a64e61761dea9459103ecd6ccc95"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-win32.whl", hash = "sha256:7ee7ccf47aa503033b6afd57efbac6b9e05180f492aeed9fcf70752556f95624"}, + {file = "SQLAlchemy-2.0.22-cp311-cp311-win_amd64.whl", hash = "sha256:b560f075c151900587ade06706b0c51d04b3277c111151997ea0813455378ae0"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2c9bac865ee06d27a1533471405ad240a6f5d83195eca481f9fc4a71d8b87df8"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:625b72d77ac8ac23da3b1622e2da88c4aedaee14df47c8432bf8f6495e655de2"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39a6e21110204a8c08d40ff56a73ba542ec60bab701c36ce721e7990df49fb9"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a766cb0b468223cafdf63e2d37f14a4757476157927b09300c8c5832d88560"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0e1ce8ebd2e040357dde01a3fb7d30d9b5736b3e54a94002641dfd0aa12ae6ce"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:505f503763a767556fa4deae5194b2be056b64ecca72ac65224381a0acab7ebe"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-win32.whl", hash = "sha256:154a32f3c7b00de3d090bc60ec8006a78149e221f1182e3edcf0376016be9396"}, + {file = "SQLAlchemy-2.0.22-cp312-cp312-win_amd64.whl", hash = "sha256:129415f89744b05741c6f0b04a84525f37fbabe5dc3774f7edf100e7458c48cd"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3940677d341f2b685a999bffe7078697b5848a40b5f6952794ffcf3af150c301"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55914d45a631b81a8a2cb1a54f03eea265cf1783241ac55396ec6d735be14883"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2096d6b018d242a2bcc9e451618166f860bb0304f590d205173d317b69986c95"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:19c6986cf2fb4bc8e0e846f97f4135a8e753b57d2aaaa87c50f9acbe606bd1db"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ac28bd6888fe3c81fbe97584eb0b96804bd7032d6100b9701255d9441373ec1"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-win32.whl", hash = "sha256:cb9a758ad973e795267da334a92dd82bb7555cb36a0960dcabcf724d26299db8"}, + {file = "SQLAlchemy-2.0.22-cp37-cp37m-win_amd64.whl", hash = "sha256:40b1206a0d923e73aa54f0a6bd61419a96b914f1cd19900b6c8226899d9742ad"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3aa1472bf44f61dd27987cd051f1c893b7d3b17238bff8c23fceaef4f1133868"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:56a7e2bb639df9263bf6418231bc2a92a773f57886d371ddb7a869a24919face"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccca778c0737a773a1ad86b68bda52a71ad5950b25e120b6eb1330f0df54c3d0"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6c3e9350f9fb16de5b5e5fbf17b578811a52d71bb784cc5ff71acb7de2a7f9"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:564e9f9e4e6466273dbfab0e0a2e5fe819eec480c57b53a2cdee8e4fdae3ad5f"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:af66001d7b76a3fab0d5e4c1ec9339ac45748bc4a399cbc2baa48c1980d3c1f4"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-win32.whl", hash = "sha256:9e55dff5ec115316dd7a083cdc1a52de63693695aecf72bc53a8e1468ce429e5"}, + {file = "SQLAlchemy-2.0.22-cp38-cp38-win_amd64.whl", hash = "sha256:4e869a8ff7ee7a833b74868a0887e8462445ec462432d8cbeff5e85f475186da"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9886a72c8e6371280cb247c5d32c9c8fa141dc560124348762db8a8b236f8692"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a571bc8ac092a3175a1d994794a8e7a1f2f651e7c744de24a19b4f740fe95034"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8db5ba8b7da759b727faebc4289a9e6a51edadc7fc32207a30f7c6203a181592"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b0b3f2686c3f162123adba3cb8b626ed7e9b8433ab528e36ed270b4f70d1cdb"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c1fea8c0abcb070ffe15311853abfda4e55bf7dc1d4889497b3403629f3bf00"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4bb062784f37b2d75fd9b074c8ec360ad5df71f933f927e9e95c50eb8e05323c"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-win32.whl", hash = "sha256:58a3aba1bfb32ae7af68da3f277ed91d9f57620cf7ce651db96636790a78b736"}, + {file = "SQLAlchemy-2.0.22-cp39-cp39-win_amd64.whl", hash = "sha256:92e512a6af769e4725fa5b25981ba790335d42c5977e94ded07db7d641490a85"}, + {file = "SQLAlchemy-2.0.22-py3-none-any.whl", hash = "sha256:3076740335e4aaadd7deb3fe6dcb96b3015f1613bd190a4e1634e1b99b02ec86"}, + {file = "SQLAlchemy-2.0.22.tar.gz", hash = "sha256:5434cc601aa17570d79e5377f5fd45ff92f9379e2abed0be5e8c2fba8d353d2b"}, ] [package.dependencies] @@ -3096,7 +4874,7 @@ greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or typing-extensions = ">=4.2.0" [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] @@ -3123,7 +4901,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlparse" version = "0.4.4" description = "A non-validating SQL parser." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3136,11 +4913,29 @@ dev = ["build", "flake8"] doc = ["sphinx"] test = ["pytest", "pytest-cov"] +[[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 = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3155,7 +4950,6 @@ mpmath = ">=0.19" name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3168,13 +4962,12 @@ widechars = ["wcwidth"] [[package]] name = "tensorboard" -version = "2.13.0" +version = "2.14.1" description = "TensorBoard lets you watch Tensors Flow" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tensorboard-2.13.0-py3-none-any.whl", hash = "sha256:ab69961ebddbddc83f5fa2ff9233572bdad5b883778c35e4fe94bf1798bd8481"}, + {file = "tensorboard-2.14.1-py3-none-any.whl", hash = "sha256:3db108fb58f023b6439880e177743c5f1e703e9eeb5fb7d597871f949f85fd58"}, ] [package.dependencies] @@ -3187,45 +4980,42 @@ numpy = ">=1.12.0" protobuf = ">=3.19.6" requests = ">=2.21.0,<3" setuptools = ">=41.0.0" +six = ">1.9" tensorboard-data-server = ">=0.7.0,<0.8.0" werkzeug = ">=1.0.1" -wheel = ">=0.26" [[package]] name = "tensorboard-data-server" -version = "0.7.1" +version = "0.7.2" description = "Fast data loading for TensorBoard" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tensorboard_data_server-0.7.1-py3-none-any.whl", hash = "sha256:9938bd39f5041797b33921066fba0eab03a0dd10d1887a05e62ae58841ad4c3f"}, - {file = "tensorboard_data_server-0.7.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:be8d016a1aa394e6198280d4a3dc37898f56467310c5f5e617cac10a783e055a"}, - {file = "tensorboard_data_server-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:255c02b7f5b03dd5c0a88c928e563441ff39e1d4b4a234cdbe09f016e53d9594"}, + {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, + {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, + {file = "tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530"}, ] [[package]] name = "tensorboardx" -version = "2.6.1" +version = "2.6.2.2" description = "TensorBoardX lets you watch Tensors Flow without Tensorflow" -category = "main" optional = false python-versions = "*" files = [ - {file = "tensorboardX-2.6.1-py2.py3-none-any.whl", hash = "sha256:4960feb79b1b84fd2b020885b09fd70962caec277d4bc194f338a6c203cd78ca"}, - {file = "tensorboardX-2.6.1.tar.gz", hash = "sha256:02e2b84d7dc102edb7a052c77041db30fd6ba9b990635178919b8e9cfa157e96"}, + {file = "tensorboardX-2.6.2.2-py2.py3-none-any.whl", hash = "sha256:160025acbf759ede23fd3526ae9d9bfbfd8b68eb16c38a010ebe326dc6395db8"}, + {file = "tensorboardX-2.6.2.2.tar.gz", hash = "sha256:c6476d7cd0d529b0b72f4acadb1269f9ed8b22f441e87a84f2a3b940bb87b666"}, ] [package.dependencies] numpy = "*" packaging = "*" -protobuf = ">=4.22.3" +protobuf = ">=3.20" [[package]] name = "tensordict" version = "0.1.2" description = "" -category = "main" optional = false python-versions = "*" files = [ @@ -3242,11 +5032,30 @@ checkpointing = ["torchsnapshot-nightly"] h5 = ["h5py (>=3.8)"] tests = ["pytest", "pytest-benchmark", "pytest-instafail", "pytest-rerunfailures", "pyyaml"] +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[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"] + [[package]] name = "threadpoolctl" version = "3.2.0" description = "threadpoolctl" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3254,11 +5063,50 @@ files = [ {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, ] +[[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 = "tokenize-rt" +version = "5.2.0" +description = "A wrapper around the stdlib `tokenize` which roundtrips." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"}, + {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3266,11 +5114,21 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "tomlkit" +version = "0.12.1" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, +] + [[package]] name = "torch" version = "2.0.0" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -3324,59 +5182,91 @@ opt-einsum = ["opt-einsum (>=3.3)"] [[package]] name = "torchmetrics" -version = "1.0.1" +version = "1.2.0" description = "PyTorch native Metrics" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "torchmetrics-1.0.1-py3-none-any.whl", hash = "sha256:5278ebdf4ecc168d88d87d3f02045ceee6a4a4ae24d8bf09d616ab67441dde0a"}, + {file = "torchmetrics-1.2.0-py3-none-any.whl", hash = "sha256:da2cb18822b285786d082c40efb9e1d861aac425f58230234fe6ce233cf002f8"}, + {file = "torchmetrics-1.2.0.tar.gz", hash = "sha256:7eb28340bde45e13187a9ad54a4a7010a50417815d8181a5df6131f116ffe1b7"}, ] [package.dependencies] -lightning-utilities = ">=0.7.0" +lightning-utilities = ">=0.8.0" numpy = ">1.20.0" -packaging = "*" torch = ">=1.8.1" [package.extras] -all = ["SciencePlots (>=2.0.0)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mypy (==1.4.1)", "nltk (>=3.6)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "regex (>=2021.9.24)", "scipy (>1.0.0)", "torch-fidelity (<=0.3.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +all = ["SciencePlots (>=2.0.0)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mypy (==1.5.1)", "nltk (>=3.6)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "regex (>=2021.9.24)", "scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] audio = ["pystoi (>=0.3.0)", "torchaudio (>=0.10.0)"] detection = ["pycocotools (>2.0.0)", "torchvision (>=0.8)"] -dev = ["SciencePlots (>=2.0.0)", "bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.2.7)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "fire (<=0.5.0)", "huggingface-hub (<0.16)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mir-eval (>=0.6)", "mypy (==1.4.1)", "netcal (>1.0.0)", "nltk (>=3.6)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==0.13.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "torch-fidelity (<=0.3.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] -image = ["lpips (<=0.1.4)", "scipy (>1.0.0)", "torch-fidelity (<=0.3.0)", "torchvision (>=0.8)"] -multimodal = ["transformers (>=4.10.0)"] -test = ["bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.2.7)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "fire (<=0.5.0)", "huggingface-hub (<0.16)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "mir-eval (>=0.6)", "netcal (>1.0.0)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==0.13.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "transformers (>4.4.0)"] -text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)"] -typing = ["mypy (==1.4.1)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +dev = ["SciencePlots (>=2.0.0)", "bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.3.1)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.3.3)", "fire (<=0.5.0)", "huggingface-hub (<0.18)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mir-eval (>=0.6)", "mypy (==1.5.1)", "netcal (>1.0.0)", "nltk (>=3.6)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "piq (<=0.8.0)", "psutil (<=5.9.5)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==1.0.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +image = ["lpips (<=0.1.4)", "scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchvision (>=0.8)"] +multimodal = ["piq (<=0.8.0)", "transformers (>=4.10.0)"] +test = ["bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.3.1)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.3.3)", "fire (<=0.5.0)", "huggingface-hub (<0.18)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "mir-eval (>=0.6)", "netcal (>1.0.0)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==1.0.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)"] +text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)", "transformers (>4.4.0)"] +typing = ["mypy (==1.5.1)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.2.0)"] +[[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 = "tqdm" -version = "4.65.0" +version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "traitlets" +version = "5.11.2" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, + {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + [[package]] name = "triton" version = "2.0.0" description = "A language and compiler for custom Deep Learning operations" -category = "main" optional = false python-versions = "*" files = [ @@ -3410,28 +5300,37 @@ torch = "*" tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)"] tutorials = ["matplotlib", "pandas", "tabulate"] +[[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 = "types-pyyaml" -version = "6.0.12.11" +version = "6.0.12.12" description = "Typing stubs for PyYAML" -category = "main" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, + {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, + {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, ] [[package]] name = "typeshed-client" -version = "2.3.0" +version = "2.4.0" description = "A library for accessing stubs in typeshed." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typeshed_client-2.3.0-py3-none-any.whl", hash = "sha256:27976287e0682be3005233f08f6f3cedf0c496413bcb213378f46e08798988c4"}, - {file = "typeshed_client-2.3.0.tar.gz", hash = "sha256:e2734755f93a0b6c1da8daad11670c75a36583d889d4d7b110eb882765b8bced"}, + {file = "typeshed_client-2.4.0-py3-none-any.whl", hash = "sha256:5358cab27cf2d7b1cd1e77dd92a3ac3cd9cd31df9eb2e958bd280a38160a3219"}, + {file = "typeshed_client-2.4.0.tar.gz", hash = "sha256:b4e4e3e40dca91ce1a667d2eb0eb350a0a2c0d80e18a232d18857aa61bed3492"}, ] [package.dependencies] @@ -3439,21 +5338,19 @@ importlib-resources = ">=1.4.0" [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] name = "typing-inspect" version = "0.9.0" description = "Runtime inspection utilities for typing module." -category = "main" optional = false python-versions = "*" files = [ @@ -3465,28 +5362,61 @@ files = [ mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" -version = "1.26.16" +version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +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 = "virtualenv" +version = "20.24.6" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, + {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, ] +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" + [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "waitress" version = "2.1.2" description = "Waitress WSGI server" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -3498,33 +5428,68 @@ files = [ docs = ["Sphinx (>=1.8.1)", "docutils", "pylons-sphinx-themes (>=1.0.9)"] testing = ["coverage (>=5.0)", "pytest", "pytest-cover"] +[[package]] +name = "wcwidth" +version = "0.2.8" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, +] + +[[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.1" +version = "1.6.4" description = "WebSocket client for Python with low level API options" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {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 (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] [[package]] name = "werkzeug" -version = "2.3.6" +version = "3.0.0" description = "The comprehensive WSGI web application library." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.3.6-py3-none-any.whl", hash = "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890"}, - {file = "Werkzeug-2.3.6.tar.gz", hash = "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330"}, + {file = "werkzeug-3.0.0-py3-none-any.whl", hash = "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962"}, + {file = "werkzeug-3.0.0.tar.gz", hash = "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0"}, ] [package.dependencies] @@ -3535,24 +5500,117 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "wheel" -version = "0.40.0" +version = "0.41.2" description = "A built-package format for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, - {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, + {file = "wheel-0.41.2-py3-none-any.whl", hash = "sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8"}, + {file = "wheel-0.41.2.tar.gz", hash = "sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985"}, ] [package.extras] -test = ["pytest (>=6.0.0)"] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + +[[package]] +name = "widgetsnbextension" +version = "4.0.9" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.9-py3-none-any.whl", hash = "sha256:91452ca8445beb805792f206e560c1769284267a30ceb1cec9f5bcc887d15175"}, + {file = "widgetsnbextension-4.0.9.tar.gz", hash = "sha256:3c1f5e46dc1166dfd40a42d685e6a51396fd34ff878742a3e47c6f0cc4a2a385"}, +] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] [[package]] name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3638,21 +5696,20 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = "~3.10" -content-hash = "503f04d1e74a42a174e1df1af090808d91cf38c81cba0bf1d7cf06ebf98a42fc" +content-hash = "e0877eb6530c740b4e5a784d40d005fad4ee1ce96ea49e5c212cc04d93a1dc9d" diff --git a/pyproject.toml b/pyproject.toml index a8bd590..477b04e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "causica" -version = "0.3.4" +version = "0.3.5" description = "" readme = "README.md" authors = [] @@ -10,23 +10,408 @@ packages = [ license = "MIT" [tool.poetry.dependencies] -python = "~3.10" azureml-mlflow = "^1.46.0" +dataclasses-json = "^0.5.7" +jsonargparse = "<4.21.0" # 4.21.0 breaks lightning cli mlflow = "^2.0.0" numpy = "^1.22.4" pandas = "^1.4.2" +python = "~3.10" +pytorch-lightning = {version = "^2.1.0", extras= ["extra"]} tensorboard = "^2.9.0" -pytorch-lightning = {version = "^1.9.0", extras= ["extra"]} -jsonargparse = "<4.21.0" # 4.21.0 breaks lightning cli -dataclasses-json = "^0.5.7" -types-PyYAML = "^6.0.12.2" tensordict = "^0.1.0" torch = "2.0.0" +torchmetrics = "^1.0.3" +types-PyYAML = "^6.0.12.2" [tool.poetry.dev-dependencies] +black = {version="^22.6.0", extras=["jupyter"]} +isort = "^5.10.1" +jupyter = "^1.0.0" +jupytext = "^1.13.8" +mypy = "^1.0.0" +pre-commit = "^2.19.0" +pylint = "^2.14.4" pytest = "^7.1.2" pytest-cov = "^3.0.0" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 120 + +[tool.isort] +line_length = 120 +profile = "black" +py_version = 310 +known_first_party = ["causica"] + +# Keep import sorts by code jupytext percent block (https://github.com/PyCQA/isort/issues/1338) +treat_comments_as_code = ["# %%"] + +[tool.pytest.ini_options] +addopts = "--durations=200" +junit_family = "xunit1" + +[tool.mypy] +ignore_missing_imports = true + +[tool.pylint.main] +# Specify a score threshold to be exceeded before program exits with error. +fail-under = 9.94 +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs = 2 + +# Control the amount of potential inferred values when inferring a single object. +# This can help the performance when dealing with large functions or complex, +# nested conditions. +limit-inference-results = 100 + +# Minimum Python version to use for version dependent checks. Will default to the +# version used to run pylint. +py-version = "3.10" + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode = true + +[tool.pylint.basic] +# Naming style matching correct argument names. +argument-naming-style = "snake_case" + +# Regular expression matching correct argument names. Overrides argument-naming- +# style. If left empty, argument names will be checked with the set naming style. +argument-rgx = "^[a-z][a-z0-9_]*$" + +# Naming style matching correct attribute names. +attr-naming-style = "snake_case" + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +attr-rgx = "^_{0,2}[a-z][a-z0-9_]*$" + +# Naming style matching correct class attribute names. +class-attribute-naming-style = "any" + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +class-attribute-rgx = "^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$" + +# Naming style matching correct class constant names. +class-const-naming-style = "UPPER_CASE" + +# Naming style matching correct class names. +class-naming-style = "PascalCase" + +# Regular expression matching correct class names. Overrides class-naming-style. +# If left empty, class names will be checked with the set naming style. +class-rgx = "^_?[A-Z][a-zA-Z0-9]*$" + +# Naming style matching correct constant names. +const-naming-style = "UPPER_CASE" + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming style. +const-rgx = "^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$" + +# Minimum line length for functions/classes that require docstrings, shorter ones +# are exempt. +docstring-min-length = 10 + +# Naming style matching correct function names. +function-naming-style = "snake_case" + +# Regular expression matching correct function names. Overrides function-naming- +# style. If left empty, function names will be checked with the set naming style. +function-rgx = "^(?:(?PsetUp|tearDown|setUpModule|tearDownModule)|(?P_?[A-Z][a-zA-Z0-9]*)|(?P_?[a-z][a-z0-9_]*))$" + +# Good variable names which should always be accepted, separated by a comma. +good-names = ["main", "_"] + +# Naming style matching correct inline iteration names. +inlinevar-naming-style = "any" + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +inlinevar-rgx = "^[a-z][a-z0-9_]*$" + +# Naming style matching correct method names. +method-naming-style = "snake_case" + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +method-rgx = "(?x)^(?:(?P_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P_{0,2}[a-z][a-z0-9_]*))$" + +# Naming style matching correct module names. +module-naming-style = "snake_case" + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +module-rgx = "^(_?[a-z][a-z0-9_]*|__init__)$" + +# Regular expression which should only match function or class names that do not +# require a docstring. +no-docstring-rgx = "(__.*__|main|test.*|.*test|.*Test)$" + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. These +# decorators are taken in consideration only for invalid-name. +property-classes = ["abc.abstractproperty", "cached_property.cached_property", "cached_property.threaded_cached_property", "cached_property.cached_property_with_ttl", "cached_property.threaded_cached_property_with_ttl"] + +# Naming style matching correct variable names. +variable-naming-style = "snake_case" + +# Regular expression matching correct variable names. Overrides variable-naming- +# style. If left empty, variable names will be checked with the set naming style. +variable-rgx = "^[a-z][a-z0-9_]*$" + +[tool.pylint.classes] +# Warn about protected attribute access inside special methods +# check-protected-access-in-special-methods = + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods = ["__init__", "__new__", "setUp"] + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected = ["_asdict", "_fields", "_replace", "_source", "_make"] + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg = ["cls", "class_"] + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg = ["mcs"] + +[tool.pylint.design] +# Maximum number of arguments for function / method. +max-args = 5 + +# Maximum number of attributes for a class (see R0902). +max-attributes = 7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr = 5 + +# Maximum number of branch for function / method body. +max-branches = 12 + +# Maximum number of locals for function / method body. +max-locals = 15 + +# Maximum number of parents for a class (see R0901). +max-parents = 7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods = 20 + +# Maximum number of return / yield for function / method body. +max-returns = 6 + +# Maximum number of statements in function / method body. +max-statements = 50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods = 2 + +[tool.pylint.exceptions] +# Exceptions that will emit a warning when caught. +overgeneral-exceptions = ["builtins.StandardError", "builtins.Exception", "builtins.BaseException"] + +[tool.pylint.format] +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +# expected-line-ending-format = + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines = "(?x)(^\\s*(\\#\\ )??$|^\\s*(from\\s+\\S+\\s+)?import\\s+.+$)" + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren = 4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string = " " + +# Maximum number of characters on a single line. +max-line-length = 200 + +# Maximum number of lines in a module. +max-module-lines = 99999 + +# Allow the body of an if to be on the same line as the test if there is no else. +single-line-if-stmt = true + +[tool.pylint.imports] +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules = ["regsub", "TERMIOS", "Bastion", "rexec", "sets"] + +# Force import order to recognize a module as part of a third party library. +known-third-party = ["enchant", "absl"] + +[tool.pylint.logging] +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style = "old" + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules = ["logging", "absl.logging", "tensorflow.io.logging"] + +[tool.pylint."messages control"] +# Only show warnings with the listed confidence levels. Leave empty to show all. +# Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence = ["HIGH", "CONTROL_FLOW", "INFERENCE", "INFERENCE_FAILURE", "UNDEFINED"] + +# Disable the message, report, category or checker with the given id(s). You can +# either give multiple identifiers separated by comma (,) or put this option +# multiple times (only on the command line, not in the configuration file where +# it should appear only once). You can also use "--disable=all" to disable +# everything first and then re-enable specific checks. For example, if you want +# to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". + +disable = [ + "abstract-method", + "arguments-differ", + "attribute-defined-outside-init", + "c-extension-no-member", + "import-error", + "invalid-name", + "missing-class-docstring", + "missing-function-docstring", + "missing-module-docstring", + "no-member", + "no-name-in-module", + "too-few-public-methods", + "too-many-ancestors", + "too-many-arguments", + "too-many-instance-attributes", + "too-many-locals", + "too-many-statements", + "wrong-import-order", # avoid conflicts with isort + ] +[tool.pylint.miscellaneous] +# List of note tags to take in consideration, separated by a comma. +notes = ["TODO"] + +[tool.pylint.refactoring] +# Maximum number of nested blocks for function / method body +max-nested-blocks = 5 + +# Complete name of functions that never returns. When checking for inconsistent- +# return-statements if a never returning function is called then it will be +# considered as an explicit return statement and no message will be printed. +never-returning-functions = ["sys.exit", "argparse.parse_error"] + +[tool.pylint.reports] +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each category, +# as well as 'statement' which is the total number of statements analyzed. This +# score is used by the global evaluation report (RP0004). +evaluation = "10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)" + +# Activate the evaluation score. +score = true + +[tool.pylint.similarities] +# Comments are removed from the similarity computation +ignore-comments = true + +# Docstrings are removed from the similarity computation +ignore-docstrings = true + +# Signatures are removed from the similarity computation +ignore-signatures = true + +# Minimum lines number of a similarity. +min-similarity-lines = 4 + +[tool.pylint.spelling] +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions = 4 + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives = "fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:" + +[tool.pylint.string] +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency = true + +[tool.pylint.typecheck] +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators = ["contextlib.contextmanager", "contextlib2.contextmanager"] + +# Tells whether missing members accessed in mixin class should be ignored. A +# class is considered mixin if its name matches the mixin-class-rgx option. +# Tells whether to warn about missing members when the owner of the attribute is +# inferred to be None. +ignore-none = true + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference can +# return multiple potential results while evaluating a Python object, but some +# branches might not be evaluated, which results in partial inference. In that +# case, it might be useful to still emit no-member and other checks for the rest +# of the inferred objects. +ignore-on-opaque-inference = true + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins = ["no-member", "not-async-context-manager", "not-context-manager", "attribute-defined-outside-init"] + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes = ["optparse.Values", "thread._local", "_thread._local"] + +# Show a hint with possible names when a member name was not found. The aspect of +# finding the hint is based on edit distance. +missing-member-hint = true + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance = 1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices = 1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx = ".*[Mm]ixin" + +# List of decorators that change the signature of a decorated function. +# signature-mutators = + +[tool.pylint.variables] +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables = true + +# List of names allowed to shadow builtins +# allowed-redefined-builtins = + +# List of strings which can identify a callback function by name. A callback name +# must start or end with one of those strings. +callbacks = ["cb_", "_cb"] + +# A regular expression matching the name of dummy variables (i.e. expected to not +# be used). +dummy-variables-rgx = "^\\*{0,2}(_$|unused_|dummy_)" + +# Argument names that match this expression will be ignored. Default to name with +# leading underscore. +ignored-argument-names = "_.*|^ignored_|^unused_" + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules = ["six", "six.moves", "past.builtins", "future.builtins", "functools"] diff --git a/src/causica/config/lightning/default_data.yaml b/src/causica/config/lightning/default_data.yaml index 58a0e9b..e273964 100644 --- a/src/causica/config/lightning/default_data.yaml +++ b/src/causica/config/lightning/default_data.yaml @@ -3,3 +3,4 @@ init_args: dataset_name: csuite_nonlingauss batch_size: 128 load_counterfactual: false + load_interventional: true diff --git a/src/causica/config/lightning/default_gaussian.yaml b/src/causica/config/lightning/default_gaussian.yaml index ff2c42e..49fa50c 100644 --- a/src/causica/config/lightning/default_gaussian.yaml +++ b/src/causica/config/lightning/default_gaussian.yaml @@ -5,8 +5,8 @@ model: noise_dist: "GAUSSIAN" embedding_size: 32 out_dim_g: 32 - norm_layer: true - res_connection: true + num_layers_g: 2 + num_layers_zeta: 2 init_alpha: 0.0 init_rho: 1.0 prior_sparsity_lambda: 5.0 @@ -18,7 +18,7 @@ model: lr_update_lag_best: 250 lr_init_dict: vardist: 0.01 - icgnn: 0.01 + functional_relationships: 0.01 noise_dist: 5e-3 aggregation_period: 20 lr_factor: 0.1 diff --git a/src/causica/config/lightning/default_spline.yaml b/src/causica/config/lightning/default_spline.yaml index 73a1ec2..9e71602 100644 --- a/src/causica/config/lightning/default_spline.yaml +++ b/src/causica/config/lightning/default_spline.yaml @@ -5,8 +5,8 @@ model: noise_dist: "SPLINE" embedding_size: 32 out_dim_g: 32 - norm_layer: true - res_connection: true + num_layers_g: 2 + num_layers_zeta: 2 init_alpha: 0.0 init_rho: 1.0 prior_sparsity_lambda: 5.0 @@ -18,7 +18,7 @@ model: lr_update_lag_best: 250 lr_init_dict: vardist: 0.01 - icgnn: 0.01 + functional_relationships: 0.01 noise_dist: 1e-4 aggregation_period: 20 lr_factor: 0.1 diff --git a/src/causica/data_generation/samplers/__init__.py b/src/causica/data_generation/samplers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/causica/data_generation/samplers/functional_relationships_sampler.py b/src/causica/data_generation/samplers/functional_relationships_sampler.py new file mode 100644 index 0000000..16e71a2 --- /dev/null +++ b/src/causica/data_generation/samplers/functional_relationships_sampler.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +import torch +import torch.distributions as td + +from causica.data_generation.samplers.sampler import Sampler +from causica.functional_relationships.functional_relationships import FunctionalRelationships +from causica.functional_relationships.linear_functional_relationships import LinearFunctionalRelationships +from causica.functional_relationships.rff_functional_relationships import RFFFunctionalRelationships + + +class FunctionalRelationshipsSampler(Sampler[FunctionalRelationships]): + """Abstract class for sampling Functional Relationships.""" + + def __init__(self, shapes_dict: dict[str, torch.Size]) -> None: + super().__init__() + + self.shapes_dict = shapes_dict + + +class LinearRelationshipsSampler(FunctionalRelationshipsSampler): + """Sample a Linear Functional Relationship, by providing a distribution for the coefficient matrix.""" + + def __init__(self, scale_dist: td.Distribution, shapes_dict: dict[str, torch.Size]): + super().__init__(shapes_dict) + self.scale_dist = scale_dist + + def sample(self) -> FunctionalRelationships: + return LinearFunctionalRelationships( + shapes=self.shapes_dict, initial_linear_coefficient_matrix=self.scale_dist.sample() + ) + + +class RFFFunctionalRelationshipsSampler(FunctionalRelationshipsSampler): + """Sample a Non Linear Functional Relationship, by providing two distributions: + a first distribution for the random features, and a second distribution for the linear outer coefficients.""" + + def __init__(self, rf_dist: td.Distribution, coeff_dist: td.Distribution, shapes_dict: dict[str, torch.Size]): + super().__init__(shapes_dict) + self.rf_dist = rf_dist + self.coeff_dist = coeff_dist + + def sample(self) -> FunctionalRelationships: + return RFFFunctionalRelationships( + shapes=self.shapes_dict, + initial_random_features=self.rf_dist.sample(), + initial_coefficients=self.coeff_dist.sample(), + ) diff --git a/src/causica/data_generation/samplers/noise_dist_sampler.py b/src/causica/data_generation/samplers/noise_dist_sampler.py new file mode 100644 index 0000000..e328085 --- /dev/null +++ b/src/causica/data_generation/samplers/noise_dist_sampler.py @@ -0,0 +1,68 @@ +import abc +from typing import Mapping + +import torch +import torch.distributions as td + +from causica.data_generation.samplers.sampler import Sampler +from causica.distributions import JointNoiseModule +from causica.distributions.noise import NoiseModule, UnivariateNormalNoiseModule +from causica.distributions.noise.bernoulli import BernoulliNoiseModule + + +class NoiseModuleSampler(Sampler[NoiseModule]): + """ + An interface of a univariate noise sampler + """ + + @abc.abstractmethod + def sample( + self, + ) -> NoiseModule: + """Sample a sample type with given shape""" + + +class JointNoiseModuleSampler(NoiseModuleSampler): + """Sampler for JointNoiseModule, given shapes and types of different variables""" + + def __init__( + self, + noise_dist_samplers: Mapping[str, NoiseModuleSampler], + ): + super().__init__() + self.noise_dist_samplers = noise_dist_samplers + + def sample(self) -> JointNoiseModule: + noise_modules = {} + for key, noise_sampler in self.noise_dist_samplers.items(): + noise_modules[key] = noise_sampler.sample() + return JointNoiseModule(independent_noise_modules=noise_modules) + + +class UnivariateNormalNoiseModuleSampler(NoiseModuleSampler): + """Sample a UnivariateNormalNoiseModule, with standard deviation given by a distribution.""" + + def __init__(self, std_dist: td.Distribution, dim: int = 1): + super().__init__() + self.std_dist = std_dist + self.dim = dim + + def sample( + self, + ): + return UnivariateNormalNoiseModule(dim=self.dim, init_log_scale=torch.log(self.std_dist.sample()).item()) + + +class BernoulliNoiseModuleSampler(NoiseModuleSampler): + """Sample a BernoulliNoiseModule, with base_logits given by a distribution.""" + + def __init__(self, base_logits_dist: td.Distribution, dim: int = 1): + super().__init__() + self.base_logits_dist = base_logits_dist + self.dim = dim + + def sample( + self, + ) -> NoiseModule: + base_logits = self.base_logits_dist.sample().item() + return BernoulliNoiseModule(dim=self.dim, init_base_logits=base_logits) diff --git a/src/causica/data_generation/samplers/sampler.py b/src/causica/data_generation/samplers/sampler.py new file mode 100644 index 0000000..670addf --- /dev/null +++ b/src/causica/data_generation/samplers/sampler.py @@ -0,0 +1,16 @@ +import abc +from typing import Generic, TypeVar + +SampleType = TypeVar("SampleType") + + +class Sampler(Generic[SampleType], abc.ABC): + """ + An interface of a sampler, useful for generative processes + + The interface only allows sampling one thing at a time. + """ + + @abc.abstractmethod + def sample(self) -> SampleType: + """Sample a sample type with given shape""" diff --git a/src/causica/data_generation/samplers/sem_sampler.py b/src/causica/data_generation/samplers/sem_sampler.py new file mode 100644 index 0000000..420b11b --- /dev/null +++ b/src/causica/data_generation/samplers/sem_sampler.py @@ -0,0 +1,30 @@ +import torch + +from causica.data_generation.samplers.functional_relationships_sampler import FunctionalRelationshipsSampler +from causica.data_generation.samplers.noise_dist_sampler import JointNoiseModuleSampler +from causica.data_generation.samplers.sampler import Sampler +from causica.distributions import AdjacencyDistribution +from causica.sem.distribution_parameters_sem import DistributionParametersSEM + + +class SEMSampler(Sampler[DistributionParametersSEM]): + """Sample a SEM given adjacency, a JointNoiseModuleSampler and functional relationships distributions.""" + + def __init__( + self, + adjacency_dist: AdjacencyDistribution, + joint_noise_module_sampler: JointNoiseModuleSampler, + functional_relationships_sampler: FunctionalRelationshipsSampler, + ): + self.adjacency_dist = adjacency_dist + self.joint_noise_module_sampler = joint_noise_module_sampler + self.functional_relationships_sampler = functional_relationships_sampler + self.shapes_dict: dict[str, torch.Size] = functional_relationships_sampler.shapes_dict + + def sample(self): + adjacency_matrix = self.adjacency_dist.sample() + functional_relationships = self.functional_relationships_sampler.sample() + joint_noise_module = self.joint_noise_module_sampler.sample() + return DistributionParametersSEM( + graph=adjacency_matrix, noise_dist=joint_noise_module, func=functional_relationships + ) diff --git a/src/causica/data_generation/synthetic_dataset.py b/src/causica/data_generation/synthetic_dataset.py new file mode 100644 index 0000000..1170751 --- /dev/null +++ b/src/causica/data_generation/synthetic_dataset.py @@ -0,0 +1,116 @@ +from itertools import repeat, starmap +from typing import Optional + +import numpy as np +import torch +from tensordict import TensorDict +from torch.utils.data import IterableDataset + +from causica.data_generation.samplers.sem_sampler import SEMSampler +from causica.datasets.interventional_data import InterventionData +from causica.distributions.transforms import TensorToTensorDictTransform + + +class CausalDataset(IterableDataset): + """A dataset that returns data from SEM samples. + + SEM samples consist of (dataset, noise, graph, interventions) + + The dataset holds samples from a SEM in a TensorDict as {node_name: [num_samples, *node_shape]} + The noise holds samples from a SEM in a TensorDict as {node_name: [num_samples, *node_shape]} + The graph is the causal graph of the SEM [num_nodes, num_nodes] + The interventions are a list of InterventionData objects + """ + + def __init__( + self, + sem_sampler: SEMSampler, + sample_dataset_size: int, + dataset_size: Optional[int] = None, + num_interventions: int = 0, + num_intervention_samples: int = 1000, + num_sems: int = 0, + ): + """ + Args: + sem_sampler: The sampler for SEMs + sample_dataset_size: The size of the dataset to sample from the SEM + dataset_size: The size of this dataset, if not supplied it will be infinitely long + It is useful to set this value to a finite size so it can be used with `ChainDataset`, + which relies on the iterator terminating to chain the next one. + num_interventions: The number of interventions to sample per dataset. If 0, no interventions are sampled. + num_intervention_samples: The number of samples to use to estimate the mean. + num_sems: The number of sems to sample the data from. If 0, each data sample is generated from a new SEM. + """ + self.sem_sampler = sem_sampler + self.sample_dataset_size = torch.Size([sample_dataset_size]) + self.dataset_size = dataset_size + self.num_interventions = num_interventions + self.num_intervention_samples = num_intervention_samples + self.num_sems = num_sems + + self.sems = [sem_sampler.sample() for _ in range(num_sems)] + self.td_to_tensor_transform = TensorToTensorDictTransform(self.sem_sampler.shapes_dict) + self.cur_iter = 0 + + def __iter__(self): + """Return an iterator over samples in the dataset. + + See Also: + CausalDataset: For a description of the format of the samples. + + Note: + We use starmap as in `repeatfunc` https://docs.python.org/3/library/itertools.html#itertools-recipes + This creates a generator applying `_sample `dataset_size` times, or an infinite + generator if `dataset_size` is `None` + """ + return starmap(self._sample, repeat(tuple(), times=self.dataset_size)) + + def _sample_intervention(self, sem, tensordict_data) -> InterventionData: + """Sample an intervention and it's sample mean from a given SEM. + + Args: + sem: SEM to sample interventional data from. + tensordict_data: Base data for sampling an intervention value. + + Returns: + an intervention data object + """ + # sample the treatment and effect variable + treatment = np.random.choice(sem.node_names, size=1, replace=False).item() + + batch_axes = tuple(range(tensordict_data.batch_dims)) + treatment_shape = tensordict_data[treatment].shape[tensordict_data.batch_dims :] + treatment_max = torch.amax(tensordict_data[treatment], dim=batch_axes) + treatment_min = torch.amin(tensordict_data[treatment], dim=batch_axes) + + treatment_a = torch.rand(treatment_shape) * (treatment_max - treatment_min) + treatment_min + + intervention_a = TensorDict({treatment: treatment_a}, batch_size=torch.Size()) + + intervention_a_samples = sem.do(intervention_a).sample((self.num_intervention_samples,)) + + intervention_data = InterventionData( + intervention_a_samples, + intervention_a, + TensorDict({}, batch_size=torch.Size()), + ) + return intervention_data + + def _sample( + self, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, Optional[list[InterventionData]]]: + """Sample a new dataset and returns the data, graph and interventions if num_interventions > 0.""" + if self.num_sems > 0: + sem = self.sems[self.cur_iter % self.num_sems] + self.cur_iter += 1 + else: + sem = self.sem_sampler.sample() + noise = sem.sample_noise(self.sample_dataset_size) + observations = sem.noise_to_sample(noise) + + interventions = None + if self.num_interventions > 0: + interventions = [self._sample_intervention(sem, observations) for _ in range(self.num_interventions)] + + return (observations, noise, sem.graph, interventions) diff --git a/src/causica/datasets/causica_dataset_format.py b/src/causica/datasets/causica_dataset_format.py index 613537b..b2ac878 100644 --- a/src/causica/datasets/causica_dataset_format.py +++ b/src/causica/datasets/causica_dataset_format.py @@ -296,7 +296,8 @@ def tensordict_from_variables_metadata(data: np.ndarray, variables_list: list[Va # guaranteed to be ordered correctly in python 3.7+ https://docs.python.org/3/library/collections.html#collections.Counter sizes = Counter(d.group_name for d in variables_list) # get the dimensions of each key from the variables - assert sum(sizes.values()) == data.shape[1], "Variable sizes do not match data shape" + sum_sizes = sum(sizes.values()) + assert sum_sizes == data.shape[1], f"Variable sizes do not match data shape, got {sum_sizes} and {data.shape}" # NOTE: This assumes that variables in the same group will have the same type. dtypes = {item.group_name: DTYPE_MAP[item.type] for item in variables_list} diff --git a/src/causica/datasets/interventional_data.py b/src/causica/datasets/interventional_data.py index 3684bbc..d19a28e 100644 --- a/src/causica/datasets/interventional_data.py +++ b/src/causica/datasets/interventional_data.py @@ -1,7 +1,7 @@ from dataclasses import dataclass, field import torch -from tensordict import TensorDict +from tensordict import TensorDictBase @dataclass @@ -19,9 +19,9 @@ class InterventionData: condition_values: A dictionary of node names to 1D numpy arrays of the conditioned values """ - intervention_data: TensorDict - intervention_values: TensorDict - condition_values: TensorDict + intervention_data: TensorDictBase + intervention_values: TensorDictBase + condition_values: TensorDictBase sampled_nodes: set[str] = field(init=False) # the nodes that are neither conditioned nor sampled def __post_init__(self): @@ -53,9 +53,9 @@ class CounterfactualData: intervention_values: A dictionary of node names to 1D numpy arrays of the intervened values """ - counterfactual_data: TensorDict - intervention_values: TensorDict - factual_data: TensorDict + counterfactual_data: TensorDictBase + intervention_values: TensorDictBase + factual_data: TensorDictBase sampled_nodes: set[str] = field(init=False) def __post_init__(self): diff --git a/src/causica/datasets/normalization.py b/src/causica/datasets/normalization.py new file mode 100644 index 0000000..9a5f74a --- /dev/null +++ b/src/causica/datasets/normalization.py @@ -0,0 +1,84 @@ +"""Module that provides data normalization functionality.""" +from typing import Callable, Optional + +import torch +import torch.distributions as td +from tensordict import TensorDictBase +from torch import nn + +from causica.distributions.transforms import JointTransformModule, SequentialTransformModule, TransformModule + +Normalizer = TransformModule[TensorDictBase, TensorDictBase] +FitNormalizerType = Callable[[TensorDictBase], Normalizer] + + +class LoadNoneTensorMixin(nn.Module): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + self._register_load_state_dict_pre_hook(self._update_tensor_size_on_load) + + def _update_tensor_size_on_load(self, state_dict: dict[str, torch.Tensor], prefix: str, *args, **kwargs) -> None: + _ = args, kwargs + for key, value in state_dict.items(): + local_key = key.removeprefix(prefix) + if hasattr(self, local_key) and getattr(self, local_key) is None: + setattr(self, local_key, torch.empty_like(value)) + + +class Standardizer(TransformModule[torch.Tensor, torch.Tensor], td.AffineTransform, LoadNoneTensorMixin): + """Standardizer module for a single variable, ie a single tensor.""" + + def __init__(self, mean: Optional[torch.Tensor], std: Optional[torch.Tensor], *args, **kwargs) -> None: + """ + Args: + mean: Mean of the variable + std: Standard deviation of the variable + *args, **kwargs: Passed to the AffineTransform + """ + loc = scale = None + if mean is not None and std is not None: + loc = -mean / std + scale = 1 / std + super().__init__(loc, scale, *args, **kwargs) + del self.loc, self.scale # Unset these temporarily to allow registering as buffers + + self.loc: torch.Tensor + self.scale: torch.Tensor + self.register_buffer("loc", loc) + self.register_buffer("scale", scale) + + +def fit_standardizer(data: TensorDictBase) -> Normalizer: + """Return a standardizer that updates data to zero mean and unit standard deviation.""" + means = data.apply( + lambda x: torch.mean(x, dim=0, keepdim=False), + batch_size=torch.Size(), + ) + # Filter out std == 0 + stds = data.apply( + lambda x: torch.std(x, dim=0, keepdim=False), + batch_size=torch.Size(), + ).apply(lambda x: torch.where(x == 0, torch.ones_like(x), x)) + + return JointTransformModule({key: Standardizer(means.get(key), stds.get(key)) for key in means.keys()}) + + +def chain_normalizers(*fit_functions: FitNormalizerType) -> FitNormalizerType: + """Chain a number of normalizers together. + + Args: + *fit_functions: Functions that produce normalizers. + + Returns: + A function that fits the sequence of normalizers. + """ + + def sequential_fitting(X: TensorDictBase) -> Normalizer: + transform_modules = [] + for fit_function in fit_functions: + transform_module = fit_function(X) + X = transform_module(X) + transform_modules.append(transform_module) + return SequentialTransformModule[TensorDictBase, TensorDictBase](*transform_modules) + + return sequential_fitting diff --git a/src/causica/datasets/standardizer.py b/src/causica/datasets/standardizer.py deleted file mode 100644 index 0568ce0..0000000 --- a/src/causica/datasets/standardizer.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Module that provides data normalisation functionality. -""" -import torch -import torch.distributions as td -from tensordict import TensorDict -from torch import nn - -from causica.distributions.transforms import JointTransform - - -class SingleVariableStandardizer(nn.Module): - """Standardizer module for a single variable, ie a single tensor.""" - - def __init__(self, mean: torch.Tensor, std: torch.Tensor): - """ - Args: - mean: Mean of the variable - std: Standard deviation of the variable - """ - super().__init__() - - if mean.shape != std.shape: - raise ValueError("mean and std must have the same shape.") - - self.mean: torch.Tensor - self.std: torch.Tensor - - self.register_buffer("mean", mean) - self.register_buffer("std", std) - - def __call__(self) -> td.AffineTransform: - return super().__call__() - - def forward(self) -> td.AffineTransform: - return td.AffineTransform(loc=-self.mean / self.std, scale=1 / self.std) - - -class JointStandardizer(nn.Module): - """Standardizer module for TensorDicts.""" - - def __init__(self, means: TensorDict, stds: TensorDict): - """ - Args: - means: Means of the variables - stds: Standard deviations of the variables - """ - super().__init__() - - if set(means.keys()) != set(stds.keys()): - raise ValueError("Requires means and stds to have the same keys.") - - if not all(m.shape == s.shape for m, s in zip(means.values(), stds.values())): - raise ValueError("Requires means and stds to have the same shapes.") - - self.transform_modules = nn.ModuleDict( - {key: SingleVariableStandardizer(means[key], stds[key]) for key in means.keys()} - ) - - def forward(self) -> JointTransform: - return JointTransform({key: module() for key, module in self.transform_modules.items()}) - - -def fit_standardizer(data: TensorDict) -> JointStandardizer: - """Calculate the mean and standard deviation over the first dimension of each variable in the TensorDict and return a standardizer.""" - means = data.apply( - lambda x: torch.mean(x, dim=0, keepdim=False), - batch_size=torch.Size(), - ) - # Filter out std == 0 - stds = data.apply( - lambda x: torch.std(x, dim=0, keepdim=False), - batch_size=torch.Size(), - ).apply(lambda x: torch.where(x == 0, torch.ones_like(x), x)) - return JointStandardizer(means=means, stds=stds) diff --git a/src/causica/distributions/noise/bernoulli.py b/src/causica/distributions/noise/bernoulli.py index a227c1f..02d00ce 100644 --- a/src/causica/distributions/noise/bernoulli.py +++ b/src/causica/distributions/noise/bernoulli.py @@ -72,13 +72,13 @@ def mode(self): class BernoulliNoiseModule(NoiseModule[IndependentNoise[BernoulliNoise]]): """Represents a BernoulliNoise distribution with learnable logits.""" - def __init__(self, dim: int): + def __init__(self, dim: int, init_base_logits: float = 0.0): """ Args: dim: Number of dimensions (independent Bernouilli's). """ super().__init__() - self.base_logits = nn.Parameter(torch.zeros(dim)) + self.base_logits = nn.Parameter(torch.full(torch.Size([dim]), init_base_logits)) def forward(self, x: Optional[torch.Tensor] = None) -> IndependentNoise[BernoulliNoise]: if x is None: diff --git a/src/causica/distributions/noise/categorical.py b/src/causica/distributions/noise/categorical.py index 45b3ce7..d0b128f 100644 --- a/src/causica/distributions/noise/categorical.py +++ b/src/causica/distributions/noise/categorical.py @@ -12,7 +12,7 @@ class CategoricalNoise(OneHotCategorical, Noise): def __init__(self, delta_logits: torch.Tensor, base_logits: torch.Tensor): """ - A Categorical distribution with parameters defined by base_logits and self.delta_logits (ICGNN predictions). + A Categorical distribution with parameters defined by base_logits and self.delta_logits (predictions from an NN). Args: delta_logits: Tensor with shape [sample_shape, event_shape] diff --git a/src/causica/distributions/transforms.py b/src/causica/distributions/transforms.py deleted file mode 100644 index 8e13180..0000000 --- a/src/causica/distributions/transforms.py +++ /dev/null @@ -1,150 +0,0 @@ -""" -Wrapper around torch.distributions.transforms to allow for joint transforms on TensorDicts. -""" -from typing import Mapping - -import torch -import torch.distributions as td -from tensordict import TensorDict - - -class JointTransform(td.Transform): - """A joint transform that applies a different transform to each key in the TensorDict. - - Keys in the input that are not found in the transform are left unchanged. - - This is heavily inspired by the `torch.distributions.transforms.StackTransform` class. - See https://pytorch.org/docs/stable/distributions.html#torch.distributions.transforms.StackTransform - """ - - def __init__(self, transformations: Mapping[str, td.Transform], cache_size: int = 0): - """ - Args: - transformations: A dictionary of transforms, where the keys are the keys in the TensorDict - cache_size: Size of cache. If zero, no caching is done. If one, the latest single value is cached. - Only 0 and 1 are supported. - """ - assert all( - isinstance(t, td.Transform) for t in transformations.values() - ), f"All transformations must be of type torch.distributions.Transform, but are {[type(t) for t in transformations.values()]}." - if cache_size: - transformations = {key: t.with_cache(cache_size) for key, t in transformations.items()} - super().__init__(cache_size=cache_size) - - self.transformations = transformations - - def _call(self, x: TensorDict) -> TensorDict: - return x.clone().update( - {key: transform(x[key]) for key, transform in self.transformations.items() if key in x.keys()} - ) - - def _inverse(self, y: TensorDict) -> TensorDict: - # We cannot use ._inv as pylint complains with E202: _inv is hidden because of `self._inv = None` - # in td.Transform.__init__ - - return y.clone().update( - {key: transform.inv(y[key]) for key, transform in self.transformations.items() if key in y.keys()} - ) - - def log_abs_det_jacobian(self, x: TensorDict, y: TensorDict) -> torch.Tensor: - if set(x.keys()) != set(y.keys()): - raise ValueError("x and y must have the same keys.") - - if not set(self.transformations.keys()).issubset(x.keys()): - raise ValueError("All keys in transformations must be in x and y.") - - return x.clone().update( - { - key: self.transformations[key].log_abs_det_jacobian(x[key], y[key]) - if key in self.transformations - else torch.zeros_like(x[key]) - for key in x.keys() - } - ) - - @property - def bijective(self): - return all(t.bijective for t in self.transformations.values()) - - @property - def domain(self): - return {key: t.domain for key, t in self.transformations.items()} - - @property - def codomain(self): - return {key: t.codomain for key, t in self.transformations.items()} - - -class TensorToTensorDictTransform(td.Transform): - """ - A transform for converting a torch tensor to a TensorDict. - - It extracts the slices from the last dimension of the tensor and assigns them to the correct key. - """ - - bijective = True - - def __init__(self, shapes: dict[str, torch.Size]): - """ - Args: - shapes: the shapes of each of the keys - """ - super().__init__() - self.shapes = shapes - self.num_keys = len(shapes) - self.output_shape, self.slices = shapes_to_slices(self.shapes) - - def _call(self, x: torch.Tensor) -> TensorDict: - """Create a Tensordict by retrieving the slice associated with each key.""" - return TensorDict({name: x[..., slice_] for name, slice_ in self.slices.items()}, batch_size=x.shape[:-1]) - - def _inverse(self, y: TensorDict) -> torch.Tensor: - """ - Create a tensor by stacking the slice associated with each key. - - Args: - y: Tensordict with batch_shape - Returns: - A tensor with shape batch_shape + [output_shape] - """ - return torch.cat([y[name] for name in self.slices], dim=-1) - - def log_abs_det_jacobian(self, _: torch.Tensor, y: TensorDict) -> TensorDict: - """This transformation doesn't affect the log det jacobian""" - return y.apply(torch.zeros_like) - - def stacked_key_masks(self) -> torch.Tensor: - """ - Create a binary of matrix of where each key is in the tensor. - - Returns: - A matrix of shape [num_keys, output_shape] with 1 if the index of the tensor - belongs to the key corresponding to that row - """ - stacked_key_masks = torch.zeros((self.num_keys, self.output_shape), dtype=torch.float) - for i, slice_ in enumerate(self.slices.values()): - stacked_key_masks[i, slice_] = 1.0 - return stacked_key_masks - - -def shapes_to_slices(shapes: dict[str, torch.Size]) -> tuple[int, dict[str, slice]]: - """ - Convert a dictionary of shapes to a dictionary of masks by stacking the shapes - - Each mask corresponds to the embedded location in the tensor - - Args: - shapes: A dict of key names to shapes - Returns: - The shape of the stacked tensor and a dictionary of each key to the mask - """ - assert all(len(shape) == 1 for shape in shapes.values()) - - slices: dict[str, slice] = {} - idx = 0 - for name, shape in shapes.items(): - next_idx = idx + shape[-1] - slices[name] = slice(idx, next_idx) - idx = next_idx - - return next_idx, slices diff --git a/src/causica/distributions/transforms/__init__.py b/src/causica/distributions/transforms/__init__.py new file mode 100644 index 0000000..d513f4c --- /dev/null +++ b/src/causica/distributions/transforms/__init__.py @@ -0,0 +1,3 @@ +from causica.distributions.transforms.base import SequentialTransformModule, TransformModule, TypedTransform +from causica.distributions.transforms.joint import JointTransform, JointTransformModule +from causica.distributions.transforms.tensor_to_tensordict import TensorToTensorDictTransform, shapes_to_slices diff --git a/src/causica/distributions/transforms/base.py b/src/causica/distributions/transforms/base.py new file mode 100644 index 0000000..0048fa7 --- /dev/null +++ b/src/causica/distributions/transforms/base.py @@ -0,0 +1,132 @@ +""" +Wrapper around torch.distributions.transforms to allow for joint transforms on TensorDicts. +""" +import weakref +from typing import Any, Generic, Optional, TypeVar, Union + +import torch +from torch import nn +from torch.distributions.transforms import Transform, _InverseTransform + +T_co = TypeVar("T_co", covariant=True, bound="TypedTransform") + + +class _TransformRef(Generic[T_co]): + """A covariant reference to a transform. + + Particularily used to allow subclasses to refine the inverse type. + """ + + weak_ref: Optional[weakref.ReferenceType[T_co]] + + def __init__(self, obj: T_co): + self.weak_ref = weakref.ref(obj) + + def __call__(self) -> Optional[T_co]: + return self.weak_ref() if self.weak_ref is not None else None + + +X = TypeVar("X", covariant=False) +Y = TypeVar("Y", covariant=False) + + +class TypedTransform(Generic[X, Y], Transform): + """Transforms with typed argument and return values. + + Should not be instantiated directly, but rather through the `TypedTransform` class. + + Notes: + Special care needs to be taken in overriding the inverse. In particular, the weak reference is of a + non-covariant generic type, and therefore isn't compatible with subclasses returning refined inverses. We solve + this by using a custom covariant reference class. + """ + + def __call__(self, x: X) -> Y: # pylint: disable=useless-parent-delegation + return super().__call__(x) # type: ignore + + def _inv_call(self, y: Y) -> X: # pylint: disable=useless-parent-delegation + return super()._inv_call(y) # type: ignore + + def _call(self, x: X) -> Y: # pylint: disable=useless-parent-delegation + return super()._call(x) + + def _inverse(self, y: Y) -> X: # pylint: disable=useless-parent-delegation + return super()._inverse(y) + + def log_abs_det_jacobian(self, x: X, y: Y): # pylint: disable=useless-parent-delegation + return super().log_abs_det_jacobian(x, y) + + @property + def inv(self) -> "TypedTransform[Y, X]": + inv: Optional[TypedTransform[Y, X]] = None + match self._inv: + case _TransformRef(): + inv = self._inv() + case TypedTransform(): + inv = self._inv + if inv is None: + inv = _TypedInverseTransform[Y, X](self) + self._inv: Union[_TransformRef[_TypedInverseTransform[Y, X]], TypedTransform[Y, X]] = _TransformRef[ + _TypedInverseTransform[Y, X] + ](inv) + return inv + + +class _TypedInverseTransform(Generic[Y, X], TypedTransform[Y, X], _InverseTransform): + _inv: TypedTransform[X, Y] + + +class TransformModule(Generic[X, Y], TypedTransform[X, Y], nn.Module): + """Transforms with learnable parameters. + + This is similar to the `pyro.distributions.torch_transform.TransformModule` class. + """ + + def __hash__(self): + """Return the nn.Module based hash. + + Notes: + The Transformation hash is None. + """ + return super(torch.nn.Module, self).__hash__() + + @property + def inv(self) -> "TransformModule[Y, X]": + inv: Optional[TransformModule[Y, X]] = None + match self._inv: + case _TransformRef(): + inv = self._inv() + case TransformModule(): + inv = self._inv + if inv is None: + inv = _InverseTransformModule[Y, X](self) + self._inv: Union[_TransformRef[_InverseTransformModule[Y, X]], TransformModule[Y, X]] = _TransformRef[ + _InverseTransformModule[Y, X] + ](inv) + return inv + + +class _InverseTransformModule(Generic[Y, X], TransformModule[Y, X], _TypedInverseTransform): + """Inverse transformation of a TransformModule.""" + + _inv: TransformModule[X, Y] + + +class SequentialTransformModule(Generic[X, Y], TransformModule[X, Y], nn.Sequential): + """Sequential transform with TransformModule transformations.""" + + def __init__(self, *args: TransformModule[X, Y], cache_size: int = 0): + super().__init__(cache_size=cache_size) + for idx, module in enumerate(args): + self.add_module(str(idx), module) + + def _inverse(self, y: Y) -> X: + current: Any = y + # Create a tuple of submodules before reversing, to avoid a copy of the Sequential module + for module in tuple(self)[::-1]: + assert isinstance(module, TransformModule) + current = module.inv(current) + return current + + def _call(self, x: X) -> Y: + return nn.Sequential.__call__(self, x) diff --git a/src/causica/distributions/transforms/joint.py b/src/causica/distributions/transforms/joint.py new file mode 100644 index 0000000..c97b0a0 --- /dev/null +++ b/src/causica/distributions/transforms/joint.py @@ -0,0 +1,100 @@ +from typing import Generic, Mapping, TypeVar + +import torch +import torch.distributions as td +from tensordict import TensorDictBase +from torch import nn + +from causica.distributions.transforms.base import TransformModule, TypedTransform + + +class JointTransform(TypedTransform[TensorDictBase, TensorDictBase]): + """A joint transform that applies a different transform to each key in the TensorDict. + + Keys in the input that are not found in the transform are left unchanged. + + This is heavily inspired by the `torch.distributions.transforms.StackTransform` class. + See https://pytorch.org/docs/stable/distributions.html#torch.distributions.transforms.StackTransform + """ + + def __init__(self, transformations: Mapping[str, td.Transform], cache_size: int = 0): + """ + Args: + transformations: A dictionary of transforms, where the keys are the keys in the TensorDict + cache_size: Size of cache. If zero, no caching is done. If one, the latest single value is cached. + Only 0 and 1 are supported. + """ + bad_transformation_types = {type(t) for t in transformations.values() if not isinstance(t, td.Transform)} + if bad_transformation_types: + raise TypeError( + "All transformations must be subtypes of `torch.distributions.Transform`, but the " + f"following are not: {bad_transformation_types} are not." + ) + if cache_size: + transformations = {key: t.with_cache(cache_size) for key, t in transformations.items()} + super().__init__(cache_size=cache_size) + self.transformations = transformations + + def _call(self, x: TensorDictBase) -> TensorDictBase: + return x.clone().update( + {key: transform(x[key]) for key, transform in self.transformations.items() if key in x.keys()} + ) + + def _inverse(self, y: TensorDictBase) -> TensorDictBase: + # We cannot use ._inv as pylint complains with E202: _inv is hidden because of `self._inv = None` + # in td.Transform.__init__ + + return y.clone().update( + {key: transform.inv(y[key]) for key, transform in self.transformations.items() if key in y.keys()} + ) + + def log_abs_det_jacobian(self, x: TensorDictBase, y: TensorDictBase) -> TensorDictBase: + if set(x.keys()) != set(y.keys()): + raise ValueError("x and y must have the same keys.") + + if not set(self.transformations.keys()) <= set(x.keys()): + raise ValueError("All keys in transformations must be in x and y.") + + return x.clone().update( + { + key: self.transformations[key].log_abs_det_jacobian(x[key], y[key]) + if key in self.transformations + else torch.zeros_like(x[key]) + for key in x.keys() + } + ) + + @property + def bijective(self): + return all(t.bijective for t in self.transformations.values()) + + @property + def domain(self): + return {key: t.domain for key, t in self.transformations.items()} + + @property + def codomain(self): + return {key: t.codomain for key, t in self.transformations.items()} + + +T_co = TypeVar("T_co", bound=nn.Module, covariant=True) + + +class _TypedModuleDict(Generic[T_co], nn.ModuleDict, Mapping[str, T_co]): + """Allow a ModuleDict to be interpreted as a mapping.""" + + def __hash__(self) -> int: + return nn.ModuleDict.__hash__(self) + + +class JointTransformModule(JointTransform, TransformModule[TensorDictBase, TensorDictBase]): + """Joint transform with TransformModule transformations applied per key to a TensorDict.""" + + def __init__(self, transformations: Mapping[str, TransformModule], *args, **kwargs): + """ + Args: + transformations: A mapping of transforms, where the keys are the keys in the TensorDict. + *args, **kwargs: Passed to the JointTransform. + """ + super().__init__(transformations, *args, **kwargs) + self.transformations = _TypedModuleDict[TransformModule](transformations) diff --git a/src/causica/distributions/transforms/tensor_to_tensordict.py b/src/causica/distributions/transforms/tensor_to_tensordict.py new file mode 100644 index 0000000..73e70f8 --- /dev/null +++ b/src/causica/distributions/transforms/tensor_to_tensordict.py @@ -0,0 +1,83 @@ +import torch +from tensordict import TensorDict, TensorDictBase +from torch.distributions.constraints import Constraint + +from causica.distributions.transforms.base import TypedTransform + + +class TensorToTensorDictTransform(TypedTransform[torch.Tensor, TensorDictBase]): + """ + A transform for converting a torch tensor to a TensorDict. + + It extracts the slices from the last dimension of the tensor and assigns them to the correct key. + """ + + arg_constraints: dict[str, Constraint] = {} + bijective = True + + def __init__(self, shapes: dict[str, torch.Size]): + """ + Args: + shapes: the shapes of each of the keys + """ + super().__init__() + self.shapes = shapes + self.num_keys = len(shapes) + self.output_shape, self.slices = shapes_to_slices(self.shapes) + + def _call(self, x: torch.Tensor) -> TensorDictBase: + """Create a Tensordict by retrieving the slice associated with each key.""" + return TensorDict({name: x[..., slice_] for name, slice_ in self.slices.items()}, batch_size=x.shape[:-1]) + + def _inverse(self, y: TensorDictBase) -> torch.Tensor: + """ + Create a tensor by stacking the slice associated with each key. + + Args: + y: Tensordict with batch_shape + Returns: + A tensor with shape batch_shape + [output_shape] + """ + return torch.cat([y[name] for name in self.slices], dim=-1) + + def log_abs_det_jacobian(self, _: torch.Tensor, y: TensorDictBase) -> TensorDictBase: + """This transformation doesn't affect the log det jacobian""" + return y.apply(torch.zeros_like) + + def stacked_key_masks(self) -> torch.Tensor: + """ + Create a binary of matrix of where each key is in the tensor. + + Returns: + A matrix of shape [num_keys, output_shape] with 1 if the index of the tensor + belongs to the key corresponding to that row + """ + stacked_key_masks = torch.zeros((self.num_keys, self.output_shape), dtype=torch.float) + for i, slice_ in enumerate(self.slices.values()): + stacked_key_masks[i, slice_] = 1.0 + return stacked_key_masks + + +def shapes_to_slices(shapes: dict[str, torch.Size]) -> tuple[int, dict[str, slice]]: + """ + Convert a dictionary of shapes to a dictionary of masks by stacking the shapes + + Each mask corresponds to the embedded location in the tensor + + Args: + shapes: A dict of key names to shapes + + Returns: + The shape of the stacked tensor and a dictionary of each key to the mask + """ + assert all(len(shape) == 1 for shape in shapes.values()) + + slices: dict[str, slice] = {} + idx = 0 + next_idx = 0 + for name, shape in shapes.items(): + next_idx = idx + shape[-1] + slices[name] = slice(idx, next_idx) + idx = next_idx + + return next_idx, slices diff --git a/src/causica/functional_relationships/__init__.py b/src/causica/functional_relationships/__init__.py index b55432b..fe1f470 100644 --- a/src/causica/functional_relationships/__init__.py +++ b/src/causica/functional_relationships/__init__.py @@ -1,4 +1,8 @@ -from .do_functional_relationships import DoFunctionalRelationships, create_do_functional_relationship -from .functional_relationships import FunctionalRelationships -from .icgnn import ICGNN -from .linear_functional_relationships import LinearFunctionalRelationships +from causica.functional_relationships.deci_functional_relationships import DECIEmbedFunctionalRelationships +from causica.functional_relationships.do_functional_relationships import ( + DoFunctionalRelationships, + create_do_functional_relationship, +) +from causica.functional_relationships.functional_relationships import FunctionalRelationships +from causica.functional_relationships.linear_functional_relationships import LinearFunctionalRelationships +from causica.functional_relationships.rff_functional_relationships import RFFFunctionalRelationships diff --git a/src/causica/functional_relationships/deci_functional_relationships.py b/src/causica/functional_relationships/deci_functional_relationships.py new file mode 100644 index 0000000..4ed40a5 --- /dev/null +++ b/src/causica/functional_relationships/deci_functional_relationships.py @@ -0,0 +1,26 @@ +import torch +from tensordict import TensorDict + +from causica.functional_relationships.functional_relationships import FunctionalRelationships +from causica.nn import DECIEmbedNN + + +class DECIEmbedFunctionalRelationships(FunctionalRelationships): + """ + This is a `FunctionalRelationsips` that wraps the `DECIEmbedNN` module. + """ + + def __init__( + self, + shapes: dict[str, torch.Size], + embedding_size: int, + out_dim_g: int, + num_layers_g: int, + num_layers_zeta: int, + ) -> None: + super().__init__(shapes=shapes) + + self.nn = DECIEmbedNN(self.stacked_key_masks, embedding_size, out_dim_g, num_layers_g, num_layers_zeta) + + def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: + return self.tensor_to_td(self.nn(self.tensor_to_td.inv(samples), graphs)) diff --git a/src/causica/functional_relationships/do_functional_relationships.py b/src/causica/functional_relationships/do_functional_relationships.py index 44eb96d..1d25f71 100644 --- a/src/causica/functional_relationships/do_functional_relationships.py +++ b/src/causica/functional_relationships/do_functional_relationships.py @@ -49,10 +49,10 @@ def pad_intervened_graphs(self, graphs: torch.Tensor) -> torch.Tensor: def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: """ Args: - samples: Batched inputs, size batch_size_x + (processed_dim_all). + samples: Batched inputs, size batch_size_x + (concatenated_shape). graphs: Weighted adjacency matrix, size batch_size_g + (n, n) Returns: - A tensor of shape batch_shape_x + batch_shape_g + (processed_dim_all) + A tensor of shape batch_shape_x + batch_shape_g + (concatenated_shape) """ # add the expanded intervention values to the samples samples_with_do = samples.update(self.do.expand(*samples.batch_size)) diff --git a/src/causica/functional_relationships/functional_relationships.py b/src/causica/functional_relationships/functional_relationships.py index 0227f28..dd6e0e2 100644 --- a/src/causica/functional_relationships/functional_relationships.py +++ b/src/causica/functional_relationships/functional_relationships.py @@ -1,5 +1,4 @@ import abc -from typing import Any import torch from tensordict import TensorDict @@ -22,13 +21,6 @@ def __init__(self, shapes: dict[str, torch.Size]) -> None: # this needs to be registered to the module, and register buffer doesn't work self.stacked_key_masks = torch.nn.Parameter(self.tensor_to_td.stacked_key_masks(), requires_grad=False) - def set_extra_state(self, state: dict[str, Any]): - self.shapes = state.pop("shapes") - self.tensor_to_td = TensorToTensorDictTransform(self.shapes) - - def get_extra_state(self) -> dict[str, Any]: - return {"shapes": self.shapes} - @abc.abstractmethod def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: """Calculates the predictions of the children from parents. diff --git a/src/causica/functional_relationships/icgnn.py b/src/causica/functional_relationships/icgnn.py deleted file mode 100644 index cc927a8..0000000 --- a/src/causica/functional_relationships/icgnn.py +++ /dev/null @@ -1,217 +0,0 @@ -from typing import Optional, Type - -import torch -from tensordict import TensorDict -from torch import nn - -from causica.functional_relationships.functional_relationships import FunctionalRelationships - - -class ICGNN(FunctionalRelationships): - """ - This is a `FunctionalRelationsips` that implements the ICGNN. - - Details can be found here: https://openreview.net/forum?id=S2pNPZM-w-f - - This wraps the `FGNNI` in a `TensorDict` interface. - """ - - def __init__( - self, - shapes: dict[str, torch.Size], - embedding_size: Optional[int] = None, - out_dim_g: Optional[int] = None, - norm_layer: Optional[Type[nn.LayerNorm]] = None, - res_connection: bool = False, - ) -> None: - super().__init__(shapes=shapes) - - self.nn = FGNNI(self.stacked_key_masks, embedding_size, out_dim_g, norm_layer, res_connection) - - def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: - return self.tensor_to_td(self.nn(self.tensor_to_td.inv(samples), graphs)) - - -class FGNNI(nn.Module): - """ - Defines the function f for the SEM. For each variable x_i we use - f_i(x) = f(e_i, sum_{k in pa(i)} g(e_k, x_k)), where e_i is a learned embedding - for node i. - """ - - def __init__( - self, - group_mask: torch.Tensor, - embedding_size: Optional[int] = None, - out_dim_g: Optional[int] = None, - norm_layer: Optional[Type[nn.LayerNorm]] = None, - res_connection: bool = False, - ): - """ - Args: - group_mask: A mask of shape (num_nodes, num_processed_cols) such that group_mask[i, j] = 1. when col j is in group i. - embedding_size: Size of the embeddings used by each node. If none, default is processed_dim_all. - out_dim_g: Output dimension of the "inner" NN, g. If none, default is embedding size. - layers_g: Size of the layers of NN g. Does not include input not output dim. If none, default - is [a], with a = max(2 * input_dim, embedding_size, 10). - layers_f: Size of the layers of NN f. Does not include input nor output dim. If none, default - is [a], with a = max(2 * input_dim, embedding_size, 10) - """ - super().__init__() - self.group_mask = group_mask - self.num_nodes, self.processed_dim_all = group_mask.shape - # Initialize embeddings - self.embedding_size = self.processed_dim_all if embedding_size is None else embedding_size - aux = torch.randn(self.num_nodes, self.embedding_size) * 0.01 - self.embeddings = nn.parameter.Parameter(aux, requires_grad=True) # Shape (input_dim, embedding_size) - - # Set value for out_dim_g - out_dim_g = self.embedding_size if out_dim_g is None else out_dim_g - # Set NNs sizes - a = max(4 * self.processed_dim_all, self.embedding_size, 64) - in_dim_g = self.embedding_size + self.processed_dim_all - in_dim_f = self.embedding_size + out_dim_g - self.g = generate_fully_connected( - input_dim=in_dim_g, - output_dim=out_dim_g, - hidden_dims=[a, a], - non_linearity=nn.LeakyReLU, - activation=nn.Identity, - device=group_mask.device, - normalization=norm_layer, - res_connection=res_connection, - ) - self.f = generate_fully_connected( - input_dim=in_dim_f, - output_dim=self.processed_dim_all, - hidden_dims=[a, a], - non_linearity=nn.LeakyReLU, - activation=nn.Identity, - device=group_mask.device, - normalization=norm_layer, - res_connection=res_connection, - ) - self.w = torch.nn.Parameter(torch.zeros((self.num_nodes, self.num_nodes)), requires_grad=True) - - def forward(self, samples: torch.Tensor, graphs: torch.Tensor) -> torch.Tensor: - """ - Computes non-linear function h(X, W) using the given weighted adjacency matrix. - - g takes inputs of size batch_shape + (embedding_size + processed_dim_all) and outputs batch_shape + (out_dim_g) - the input will be appropriately masked to correspond to one variable group - - f takes inputs of size batch_shape + (embedding_size + out_dim_g) and outputs batch_shape + (processed_dim_all) - the ouptut is then masked to correspond to one variable - - Args: - samples: Batched inputs, size batch_size_x + (processed_dim_all). - graphs: Weighted adjacency matrix, size batch_size_g + (n, n) - Returns: - A tensor of shape batch_shape_x + batch_shape_g + (processed_dim_all) - """ - batch_shape_x = samples.shape[:-1] - batch_shape_g = graphs.shape[:-2] - - # Generate required input for g (concatenate X and embeddings) - # Pointwise multiply X - # Shape batch_shape_x + (num_nodes, processed_dim_all) - masked_samples = torch.einsum("...i,ji->...ji", samples, self.group_mask) - E = self.embeddings.expand(*batch_shape_x, -1, -1) # Shape batch_shape_x + (num_nodes, embedding_size) - - # Shape batch_shape_x + (num_nodes, embedding_size + processed_dim_all) - embedded_samples = self.g( - torch.cat([masked_samples, E], dim=-1) - ) # Shape batch_shape_x + (num_nodes, out_dim_g) - - target_shape = batch_shape_x + batch_shape_g + embedded_samples.shape[-2:] - view_shape = batch_shape_x + (1,) * len(batch_shape_g) + embedded_samples.shape[-2:] - # Shape batch_shape_x + batch_shape_g + (num_nodes, out_dim_g) - embedded_samples_broad = embedded_samples.view(view_shape).expand(target_shape) - # Aggregate sum and generate input for f (concatenate X_aggr and embeddings) - # Shape batch_shape_x + batch_shape_g + (num_nodes, out_dim_g) - samples_aggr_sum = torch.einsum("...jk,...jl->...lk", embedded_samples_broad, graphs * self.w) - - # expand dimensions of E batch_shape_x + batch_shape_g + (num_nodes, embedding_size) - E_broad = E.view(view_shape).expand(target_shape) - # Run f Shape batch_shape_x + batch_shape_g + (num_nodes, processed_dim_all) - samples_rec = self.f(torch.cat([samples_aggr_sum, E_broad], dim=-1)) - # Mask and aggregate Shape batch_shape_x + batch_shape_g + (processed_dim_all) - return torch.einsum("...ij,ij->...j", samples_rec, self.group_mask) - - -def generate_fully_connected( - input_dim: int, - output_dim: int, - hidden_dims: list[int], - non_linearity: Optional[Type[nn.Module]], - activation: Optional[Type[nn.Module]], - device: torch.device, - p_dropout: float = 0.0, - normalization: Optional[Type[nn.LayerNorm]] = None, - res_connection: bool = False, -) -> nn.Module: - """ - Generate a fully connected network. - - Args: - input_dim: Int. Size of input to network. - output_dim: Int. Size of output of network. - hidden_dims: List of int. Sizes of internal hidden layers. i.e. [a, b] is three linear layers with shapes (input_dim, a), (a, b), (b, output_dim) - non_linearity: Non linear activation function used between Linear layers. - activation: Final layer activation to use. - device: torch device to load weights to. - p_dropout: Float. Dropout probability at the hidden layers. - init_method: initialization method - normalization: Normalisation layer to use (batchnorm, layer norm, etc). Will be placed before linear layers, excluding the input layer. - res_connection : Whether to use residual connections where possible (if previous layer width matches next layer width) - - Returns: - Sequential object containing the desired network. - """ - layers: list[nn.Module] = [] - - prev_dim = input_dim - for idx, hidden_dim in enumerate(hidden_dims): - - block: list[nn.Module] = [] - - if normalization is not None and idx > 0: - block.append(normalization(prev_dim).to(device)) - block.append(nn.Linear(prev_dim, hidden_dim).to(device)) - - if non_linearity is not None: - block.append(non_linearity()) - if p_dropout != 0: - block.append(nn.Dropout(p_dropout)) - - if res_connection and (prev_dim == hidden_dim): - layers.append(_ResBlock(nn.Sequential(*block))) - else: - layers.append(nn.Sequential(*block)) - prev_dim = hidden_dim - - if normalization is not None: - layers.append(normalization(prev_dim).to(device)) - layers.append(nn.Linear(prev_dim, output_dim).to(device)) - - if activation is not None: - layers.append(activation()) - - return nn.Sequential(*layers) - - -class _ResBlock(nn.Module): - """ - Wraps an nn.Module, adding a skip connection to it. - """ - - def __init__(self, block: nn.Module): - """ - Args: - block: module to which skip connection will be added. The input dimension must match the output dimension. - """ - super().__init__() - self.block = block - - def forward(self, x): - return x + self.block(x) diff --git a/src/causica/functional_relationships/linear_functional_relationships.py b/src/causica/functional_relationships/linear_functional_relationships.py index e46b390..7bba008 100644 --- a/src/causica/functional_relationships/linear_functional_relationships.py +++ b/src/causica/functional_relationships/linear_functional_relationships.py @@ -31,10 +31,10 @@ def __init__( def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: """ Args: - samples: Batched inputs, size batch_size_x + (processed_dim_all). + samples: Batched inputs, size batch_size_x + (concatenated_shape). graphs: Weighted adjacency matrix, size batch_size_g + (n, n) Returns: - A Dict of tensors of shape batch_shape_x + batch_shape_g + (processed_dim_all) + A Dict of tensors of shape batch_shape_x + batch_shape_g + (concatenated_shape) """ return self.tensor_to_td(self.linear_map(self.tensor_to_td.inv(samples), graphs)) diff --git a/src/causica/functional_relationships/rff_functional_relationships.py b/src/causica/functional_relationships/rff_functional_relationships.py new file mode 100644 index 0000000..fbce0df --- /dev/null +++ b/src/causica/functional_relationships/rff_functional_relationships.py @@ -0,0 +1,76 @@ +import math + +import torch +from tensordict import TensorDict + +from causica.functional_relationships.functional_relationships import FunctionalRelationships + + +class RFFFunctionalRelationships(FunctionalRelationships): + """ + A simple random fourier feature-based functional relationship. + The formula implemented here is: + x_i = sqrt(2/M) * sum_{i}^{M} alpha_i sin() + """ + + def __init__( + self, + shapes: dict[str, torch.Size], + initial_random_features: torch.Tensor, + initial_coefficients: torch.Tensor, + trainable: bool = False, + ) -> None: + """ + Args: + shapes: Dict of node shapes (how many dimensions a variable has) + Order corresponds to the order in graph(s). + initial_random_features: a tensor containing the random features [num_rf, output_shape] + initial_coefficients: a tensor containing the linear outer coefficients [num_rf,] + trainable: whether the coefficient matrix should be learnable + """ + super().__init__(shapes=shapes) + + assert initial_random_features.shape[0] == initial_coefficients.shape[0] + self.num_rf = initial_random_features.shape[0] + + self.shape = self.tensor_to_td.output_shape + assert initial_random_features.shape[1] == self.shape + + self.linear_coefficients_inner = torch.nn.Parameter(initial_random_features, requires_grad=trainable) + self.linear_coefficients_outer = torch.nn.Parameter(initial_coefficients, requires_grad=trainable) + + def forward(self, samples: TensorDict, graphs: torch.Tensor) -> TensorDict: + """ + Args: + samples: Batched inputs, size batch_size_x + (concatenated_shape). + graphs: Weighted adjacency matrix, size batch_size_g + (n, n) + Returns: + A Dict of tensors of shape batch_shape_x + batch_shape_g + (concatenated_shape) + """ + return self.tensor_to_td(self.non_linear_map(self.tensor_to_td.inv(samples), graphs)) + + def non_linear_map(self, samples: torch.Tensor, graph: torch.Tensor) -> torch.Tensor: + """ + Applies the non linear function to a concatenated tensor of samples. + + Args: + samples: tensor of shape batch_shape_x + [n_cols] + graph: tensor of shape batch_shape_g + [n_nodes, n_nodes] + Returns: + tensor of shape batch_shape_x + batch_shape_g + [n_cols] + """ + batch_shape_x = samples.shape[:-1] + batch_shape_g = graph.shape[:-2] + + masked_graph = torch.einsum("ji,...jk,kl->...il", self.stacked_key_masks, graph, self.stacked_key_masks) + + graph_broad = masked_graph.expand(*(batch_shape_x + tuple([-1] * len(graph.shape)))) + target_shape = batch_shape_x + batch_shape_g + samples.shape[-1:] + view_shape = batch_shape_x + (1,) * len(batch_shape_g) + samples.shape[-1:] + # Shape batch_shape_x + batch_shape_g + (num_nodes, out_dim_g) + samples_broad = samples.view(view_shape).expand(target_shape) + + inner_prods = torch.einsum("ij,...j,...jk->...ik", self.linear_coefficients_inner, samples_broad, graph_broad) + return math.sqrt(2 / self.num_rf) * torch.einsum( + "i,...ij->...j", self.linear_coefficients_outer, torch.sin(inner_prods) + ) diff --git a/src/causica/lightning/callbacks.py b/src/causica/lightning/callbacks.py index 654fba0..e16ee26 100644 --- a/src/causica/lightning/callbacks.py +++ b/src/causica/lightning/callbacks.py @@ -1,6 +1,6 @@ from pathlib import Path from tempfile import TemporaryDirectory -from typing import Any +from typing import Any, Optional import mlflow import pytorch_lightning as pl @@ -15,7 +15,7 @@ class AuglagLRCallback(pl.Callback): """Wrapper Class to make the Auglag Learning Rate Scheduler compatible with Pytorch Lightning""" - def __init__(self, scheduler: AugLagLR, log_auglag: bool = False): + def __init__(self, scheduler: AugLagLR, log_auglag: bool = False, disabled_epochs: Optional[set[int]] = None): """ Args: scheduler: The auglag learning rate scheduler to wrap. @@ -23,6 +23,7 @@ def __init__(self, scheduler: AugLagLR, log_auglag: bool = False): """ self.scheduler = scheduler self._log_auglag = log_auglag + self._disabled_epochs = disabled_epochs def on_train_batch_end( self, trainer: pl.Trainer, pl_module: pl.LightningModule, outputs: STEP_OUTPUT, batch: Any, batch_idx: int @@ -35,6 +36,12 @@ def on_train_batch_end( assert isinstance(optimizer, torch.optim.Optimizer) auglag_loss: AugLagLossCalculator = pl_module.auglag_loss # type: ignore + # Disable if we reached a disabled epoch - disable, otherwise make sure the scheduler is enabled + if self._disabled_epochs and trainer.current_epoch in self._disabled_epochs: + self.scheduler.disable(auglag_loss) + else: + self.scheduler.enable(auglag_loss) + is_converged = self.scheduler.step( optimizer=optimizer, loss=auglag_loss, diff --git a/src/causica/lightning/data_modules/basic_data_module.py b/src/causica/lightning/data_modules/basic_data_module.py index 08ae362..d5b39c5 100644 --- a/src/causica/lightning/data_modules/basic_data_module.py +++ b/src/causica/lightning/data_modules/basic_data_module.py @@ -6,7 +6,7 @@ from torch.utils.data import DataLoader from causica.datasets.causica_dataset_format import Variable, tensordict_from_variables_metadata -from causica.datasets.standardizer import fit_standardizer +from causica.datasets.normalization import fit_standardizer from causica.datasets.tensordict_utils import identity, tensordict_shapes from causica.datasets.variable_types import VariableTypeEnum from causica.lightning.data_modules.deci_data_module import DECIDataModule @@ -40,9 +40,7 @@ def __init__( if self.normalize: continuous_keys = [k for k, v in self._variable_types.items() if v == VariableTypeEnum.CONTINUOUS] self.normalizer = fit_standardizer(self._dataset_train.select(*continuous_keys)) - - transform = self.normalizer() - self._dataset_train = transform(self._dataset_train) + self._dataset_train = self.normalizer(self._dataset_train) @property def dataset_name(self) -> TensorDict: diff --git a/src/causica/lightning/data_modules/synthetic_data_module.py b/src/causica/lightning/data_modules/synthetic_data_module.py new file mode 100644 index 0000000..d725e49 --- /dev/null +++ b/src/causica/lightning/data_modules/synthetic_data_module.py @@ -0,0 +1,200 @@ +from itertools import product +from typing import Iterable + +import pytorch_lightning as pl +import torch +import torch.distributions as td +from tensordict import TensorDict +from torch.utils.data import ChainDataset, DataLoader, Dataset + +from causica.data_generation.samplers.functional_relationships_sampler import ( + LinearRelationshipsSampler, + RFFFunctionalRelationshipsSampler, +) +from causica.data_generation.samplers.noise_dist_sampler import ( + JointNoiseModuleSampler, + UnivariateNormalNoiseModuleSampler, +) +from causica.data_generation.samplers.sampler import Sampler +from causica.data_generation.samplers.sem_sampler import SEMSampler +from causica.data_generation.synthetic_dataset import CausalDataset +from causica.distributions import ErdosRenyiDAGDistribution +from causica.functional_relationships.functional_relationships import FunctionalRelationships + + +class SyntheticDataModule(pl.LightningDataModule): + """A datamodule to produce datasets and their underlying causal graphs and interventions.""" + + def __init__( + self, + node_nums: list[int], + probs: list[float], + train_batch_size: int, + test_batch_size: int, + dataset_size: int, + num_interventions: int = 0, + num_sems: int = 0, + num_workers: int = 0, + ) -> None: + """ + Args: + node_nums: List of number of nodes for generated graphs + probs: List of the probabilities of edges in each graph when using Erdos Renyi + train_batch_size: The training batch size to use + test_batch_size: The testing batch size to use + dataset_size: The size of dataset to generate + num_interventions: The number of interventions to generate (0 for no interventions) + num_sems: The number of SEMs to generate (0 for infinite SEMs) + num_workers: The number of workers to use for the dataloader + """ + super().__init__() + self.node_nums = node_nums + self.probs = probs + self.dataset_size = dataset_size + self.train_batch_size = train_batch_size + self.test_batch_size = test_batch_size + self.sems_dict: dict[tuple[int, float, bool], SEMSampler] = {} + self.num_interventions = num_interventions + self.num_workers = num_workers + self.num_sems = num_sems + + self.dataloader_args = { + "collate_fn": _tuple_collate_fn, + "num_workers": self.num_workers, + "worker_init_fn": worker_init_fn if self.num_workers > 0 else None, + "persistent_workers": self.num_workers > 0, + "pin_memory": True, + "prefetch_factor": 16 if self.num_workers > 0 else None, + } + + self.val_dataloader_args = { + "collate_fn": _tuple_collate_fn, + "pin_memory": True, + } + + self.train_dataset: Dataset + self.val_dataset: Dataset + + self.save_hyperparameters() + + def setup(self, stage: str): + for num_nodes, prob, is_linear in product(self.node_nums, self.probs, (True, False)): + shapes_dict = {f"x_{i}": torch.Size([1]) for i in range(num_nodes)} + noise_dist_samplers = { + f"x_{i}": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=1) + for i in range(num_nodes) + } + joint_noise_module_sampler = JointNoiseModuleSampler(noise_dist_samplers) + adjacency_dist = ErdosRenyiDAGDistribution(num_nodes=num_nodes, probs=torch.tensor(prob)) + + dim = sum(shape.numel() for shape in shapes_dict.values()) + + functional_relationships_sampler: Sampler[FunctionalRelationships] + + if is_linear: + ones_matrix = torch.ones((dim, dim), dtype=torch.float32) + functional_relationships_sampler = LinearRelationshipsSampler( + scale_dist=td.Uniform( + low=ones_matrix, + high=3.0 * ones_matrix, + ), + shapes_dict=shapes_dict, + ) + else: + num_rf = 100 + ones_matrix = torch.ones((num_rf, dim), dtype=torch.float32) + ones = torch.ones((num_rf,), dtype=torch.float32) + functional_relationships_sampler = RFFFunctionalRelationshipsSampler( + rf_dist=td.Uniform( + low=7.0 * ones_matrix, + high=10.0 * ones_matrix, + ), + coeff_dist=td.Uniform( + low=10.0 * ones, + high=20.0 * ones, + ), + shapes_dict=shapes_dict, + ) + + # store each of the sem samplers in a dictionary + self.sems_dict[(num_nodes, prob, is_linear)] = SEMSampler( + adjacency_dist=adjacency_dist, + joint_noise_module_sampler=joint_noise_module_sampler, + functional_relationships_sampler=functional_relationships_sampler, + ) + + self.train_dataset = self._get_dataset(self.train_batch_size) + self.val_dataset = self._get_dataset(self.test_batch_size) + + def _get_dataset(self, dataset_size: int) -> Dataset: + """Builds causal datasets given the SEM samplers. + + Args: + dataset_size: Number of samples of the causal dataset (ie number of datasets generated). + + Returns: + dataset object + """ + dataset_fraction = self.num_workers if self.num_workers > 0 else 1 + factor = self.num_sems if self.num_sems > 0 else 1 + dataset = ChainDataset( + [ + CausalDataset( + sampler, + sample_dataset_size=self.dataset_size, + dataset_size=dataset_size * factor * 16 // dataset_fraction, + num_interventions=self.num_interventions, + num_sems=self.num_sems, + ) + for sampler in self.sems_dict.values() + ] + ) + + return dataset + + def train_dataloader(self): + return DataLoader(dataset=self.train_dataset, batch_size=self.train_batch_size, **self.dataloader_args) + + def val_dataloader(self): + datasets = [self.train_dataset, self.val_dataset] if self.num_sems > 0 else [self.val_dataset] + + return [ + DataLoader(dataset=dataset, batch_size=self.test_batch_size, **self.val_dataloader_args) + for dataset in datasets + ] + + +def worker_init_fn(_): + worker_info = torch.utils.data.get_worker_info() + + dataset = worker_info.dataset # the dataset copy in this worker process + if isinstance(dataset, ChainDataset): + # Split chained datasets across multiple workers. + dataset.datasets = [dataset.datasets[worker_info.id % len(dataset.datasets)]] + + +def _tuple_collate_fn(data: Iterable[tuple[torch.Tensor, ...]]) -> tuple[torch.Tensor, ...]: + """Collates a list of tuples of tensors into a tuple of tensors. + + The dataloader returns batch_shape tuples of (X, y, ...), so we stack them all + to get tensors of shapes [batch_shape, *X.shape] and [batch_shape, *y.shape] and so on. + + Args: + data: list of tuple of tensors to collate. Assumes the dimensions of the tensors in the tuples match. + + Returns: + collated data + """ + + def _nested_stack(x: list): + """Stacks a tuple of tensors, returns None if an element is None, or returns lists of lists.""" + if isinstance(x[0], (torch.Tensor, TensorDict)): + return torch.stack(x, dim=0) + if isinstance(x[0], list): + return list(x) + if x[0] is None: + return None + + raise ValueError(f"Unexpected type {type(x[0])}") + + return tuple(_nested_stack(list(x)) for x in zip(*data)) diff --git a/src/causica/lightning/data_modules/variable_spec_data.py b/src/causica/lightning/data_modules/variable_spec_data.py index 7f94b29..51018cf 100644 --- a/src/causica/lightning/data_modules/variable_spec_data.py +++ b/src/causica/lightning/data_modules/variable_spec_data.py @@ -5,13 +5,14 @@ from typing import Any, Iterable, Optional, Union import torch -from tensordict import TensorDict +from tensordict import TensorDict, TensorDictBase from torch.utils.data import DataLoader from causica.datasets.causica_dataset_format import CAUSICA_DATASETS_PATH, DataEnum, VariablesMetadata, load_data -from causica.datasets.standardizer import JointStandardizer, fit_standardizer +from causica.datasets.normalization import FitNormalizerType, Normalizer, fit_standardizer from causica.datasets.tensordict_utils import identity, tensordict_shapes from causica.datasets.variable_types import VariableTypeEnum +from causica.distributions.transforms import JointTransformModule from causica.lightning.data_modules.deci_data_module import DECIDataModule @@ -36,18 +37,21 @@ def __init__( dataset_name: str = "anonymous_dataset", normalize: Union[bool, Iterable[str]] = False, exclude_normalization: Iterable[str] = tuple(), + fit_normalizer: FitNormalizerType = fit_standardizer, load_counterfactual: bool = False, + load_interventional: bool = False, **storage_options: Any, ): """ Args: root_path: Path to directory with causal data batch_size: Batch size for training and test data. - storage_options: Storage options forwarded to `fsspec` when loading files. dataset_name: A name for the dataset - load_counterfactual: Whether there is counterfactual data normalize: Whether to normalize the data or list of variables to normalize exclude_normalization: Which variables to exclude from normalization + load_counterfactual: Whether counterfactual data should be loaded + load_interventional: Whether interventional data should be loaded + **storage_options: Storage options forwarded to `fsspec` when loading files. """ super().__init__() self.batch_size = batch_size @@ -58,8 +62,13 @@ def __init__( self.normalize = normalize self.exclude_normalization = set(exclude_normalization) self.load_counterfactual = load_counterfactual + self.load_interventional = load_interventional - self.normalizer: Optional[JointStandardizer] = None + self.fit_normalizer = fit_normalizer + self.normalizer: Optional[Normalizer] = None + self._dataset_train: TensorDictBase + self._dataset_test: TensorDictBase + self.true_adj: torch.Tensor @property def variable_shapes(self) -> dict[str, torch.Size]: @@ -90,12 +99,21 @@ def _load_all_data(self, variables_metadata: VariablesMetadata): load_data, root_path=self.root_path, variables_metadata=variables_metadata, **self.storage_options ) - self._dataset_train = _load_data(data_enum=DataEnum.TRAIN) - self._dataset_test = _load_data(data_enum=DataEnum.TEST) - self.true_adj = _load_data(data_enum=DataEnum.TRUE_ADJACENCY) - self.interventions = _load_data(data_enum=DataEnum.INTERVENTIONS) - - self.counterfactuals = None + dataset_train = _load_data(data_enum=DataEnum.TRAIN) + dataset_test = _load_data(data_enum=DataEnum.TEST) + true_adj = _load_data(data_enum=DataEnum.TRUE_ADJACENCY) + assert isinstance(dataset_train, TensorDict) + assert isinstance(dataset_test, TensorDict) + assert isinstance(true_adj, torch.Tensor) + self._dataset_train = dataset_train + self._dataset_test = dataset_test + self.true_adj = true_adj + + self.interventions = [] + if self.load_interventional: + self.interventions = _load_data(data_enum=DataEnum.INTERVENTIONS) + + self.counterfactuals = [] if self.load_counterfactual: self.counterfactuals = _load_data(data_enum=DataEnum.COUNTERFACTUALS) @@ -114,8 +132,8 @@ def prepare_data(self): # init_args: # ... # variables_metadata: null - _load_data = partial(load_data, root_path=self.root_path, **self.storage_options) - variables_metadata: VariablesMetadata = _load_data(data_enum=DataEnum.VARIABLES_JSON) + _load_data = partial(load_data, root_path=self.root_path, **self.storage_options) # type: ignore + variables_metadata: VariablesMetadata = _load_data(data_enum=DataEnum.VARIABLES_JSON) # type: ignore self._load_all_data(variables_metadata) @@ -140,11 +158,11 @@ def prepare_data(self): if v == VariableTypeEnum.CONTINUOUS and k not in self.exclude_normalization } - self.normalizer = fit_standardizer(self._dataset_train.select(*normalization_variables)) - - transform = self.normalizer() - self._dataset_train = transform(self._dataset_train) - self._dataset_test = transform(self._dataset_test) + self.normalizer = self.fit_normalizer(self._dataset_train.select(*normalization_variables)) + self._dataset_train = self.normalizer(self._dataset_train) + self._dataset_test = self.normalizer(self._dataset_test) + else: + self.normalizer = JointTransformModule({}) def train_dataloader(self): return DataLoader( @@ -162,11 +180,8 @@ def test_dataloader(self): test_dataloader, DataLoader(dataset=self.true_adj[None, ...]), DataLoader(dataset=self.interventions, collate_fn=identity, batch_size=None), + DataLoader(dataset=self.counterfactuals, collate_fn=identity, batch_size=None), ] - - if self.counterfactuals is not None: - dataloader_list.append(DataLoader(dataset=self.counterfactuals, collate_fn=identity, batch_size=None)) - return dataloader_list @@ -185,12 +200,16 @@ def __init__( batch_size: int = 128, dataset_path: str = CAUSICA_DATASETS_PATH, load_counterfactual: bool = False, + load_interventional: bool = False, + normalize: Union[bool, Iterable[str]] = False, ): super().__init__( root_path=os.path.join(dataset_path, dataset_name), batch_size=batch_size, dataset_name=dataset_name, load_counterfactual=load_counterfactual, + load_interventional=load_interventional, + normalize=normalize, ) diff --git a/src/causica/lightning/modules/deci_module.py b/src/causica/lightning/modules/deci_module.py index 0aca5c3..c0373b1 100644 --- a/src/causica/lightning/modules/deci_module.py +++ b/src/causica/lightning/modules/deci_module.py @@ -1,11 +1,10 @@ import logging -from typing import Any, Optional, Sequence, Union +from typing import Any, Mapping, Optional, Sequence, Union import fsspec import numpy as np import pytorch_lightning as pl import torch -from pytorch_lightning.trainer.states import TrainerFn from pytorch_lightning.utilities.types import STEP_OUTPUT from tensordict import TensorDict @@ -22,7 +21,7 @@ ) from causica.distributions.noise.joint import ContinuousNoiseDist from causica.fsspec_helpers import get_storage_options_for_path -from causica.functional_relationships import ICGNN +from causica.functional_relationships import DECIEmbedFunctionalRelationships from causica.graph.dag_constraint import calculate_dagness from causica.graph.evaluation_metrics import adjacency_f1, orientation_f1 from causica.lightning.callbacks import AuglagLRCallback @@ -53,8 +52,8 @@ def __init__( noise_dist: ContinuousNoiseDist = ContinuousNoiseDist.SPLINE, embedding_size: int = 32, out_dim_g: int = 32, - norm_layer: bool = True, - res_connection: bool = True, + num_layers_g: int = 2, + num_layers_zeta: int = 2, init_alpha: float = 0.0, init_rho: float = 1.0, prior_sparsity_lambda: float = 0.05, @@ -62,31 +61,34 @@ def __init__( auglag_config: Optional[AugLagLRConfig] = None, expert_graph_container: Optional[ExpertGraphContainer] = None, constraint_matrix_path: Optional[str] = None, + disable_auglag_epochs: Optional[int] = None, ): super().__init__() self.auglag_config = auglag_config if auglag_config is not None else AugLagLRConfig() + self.disable_auglag_epochs = disable_auglag_epochs + self.lr_scheduler = AugLagLR(config=self.auglag_config) self.constraint_matrix_path = constraint_matrix_path self.constraint_matrix: Optional[torch.Tensor] = None self.embedding_size = embedding_size + self.out_dim_g = out_dim_g + self.num_layers_g = num_layers_g + self.num_layers_zeta = num_layers_zeta + self.expert_graph_container: Optional[ExpertGraphContainer] = expert_graph_container self.gumbel_temp = gumbel_temp - self.init_alpha = init_alpha - self.init_rho = init_rho self.is_setup = False self.noise_dist = noise_dist - self.norm_layer = norm_layer - self.out_dim_g = out_dim_g self.prior_sparsity_lambda = prior_sparsity_lambda - self.res_connection = res_connection + + self.auglag_loss: AugLagLossCalculator = AugLagLossCalculator(init_alpha=init_alpha, init_rho=init_rho) # Inferred once the datamodule is available using `self.infer_missing_state_from_dataset()` - self.dataset_name = None self.num_samples = None self.variable_group_shapes = None self.variable_types = None - self.variable_names = None + self.save_hyperparameters() def prepare_data(self) -> None: """Set the constraint matrix (if necessary).""" @@ -103,11 +105,9 @@ def prepare_data(self) -> None: def infer_missing_state_from_dataset(self): dataset_defined_members = [ - self.dataset_name, self.num_samples, self.variable_group_shapes, self.variable_types, - self.variable_names, ] if any(member is None for member in dataset_defined_members): datamodule = getattr(self.trainer, "datamodule", None) @@ -116,49 +116,41 @@ def infer_missing_state_from_dataset(self): f"Incompatible data module {datamodule}, requires a DECIDataModule but is " f"{type(datamodule).mro()}" ) - if self.dataset_name is None: - self.dataset_name = datamodule.dataset_name if self.num_samples is None: self.num_samples = len(datamodule.dataset_train) if self.variable_group_shapes is None: self.variable_group_shapes = datamodule.variable_shapes if self.variable_types is None: self.variable_types = datamodule.variable_types - if self.variable_names is None: - self.variable_names = datamodule.column_names def setup(self, stage: Optional[str] = None): + + _ = stage if self.is_setup: return # Already setup - if stage not in {TrainerFn.TESTING, TrainerFn.FITTING}: - raise ValueError(f"Model can only be setup during the {TrainerFn.FITTING} and {TrainerFn.TESTING} stages.") self.infer_missing_state_from_dataset() - assert self.dataset_name is not None assert self.num_samples is not None assert self.variable_group_shapes is not None assert self.variable_types is not None - assert self.variable_names is not None - self.node_names = list(self.variable_group_shapes) num_nodes = len(self.variable_group_shapes) adjacency_dist: DistributionModule[AdjacencyDistribution] = ENCOAdjacencyDistributionModule(num_nodes) if self.constraint_matrix is not None: adjacency_dist = ConstrainedAdjacency(adjacency_dist, self.constraint_matrix) - icgnn = ICGNN( + functional_relationships = DECIEmbedFunctionalRelationships( shapes=self.variable_group_shapes, embedding_size=self.embedding_size, out_dim_g=self.out_dim_g, - norm_layer=None if self.norm_layer is False else torch.nn.LayerNorm, - res_connection=self.res_connection, + num_layers_g=self.num_layers_g, + num_layers_zeta=self.num_layers_zeta, ) noise_submodules = create_noise_modules(self.variable_group_shapes, self.variable_types, self.noise_dist) noise_module = JointNoiseModule(noise_submodules) - self.sem_module: SEMDistributionModule = SEMDistributionModule(adjacency_dist, icgnn, noise_module) - self.auglag_loss: AugLagLossCalculator = AugLagLossCalculator( - init_alpha=self.init_alpha, init_rho=self.init_rho + self.sem_module: SEMDistributionModule = SEMDistributionModule( + adjacency_dist, functional_relationships, noise_module ) self.prior: GibbsDAGPrior = GibbsDAGPrior( num_nodes=num_nodes, @@ -196,12 +188,16 @@ def training_step(self, *args, **kwargs) -> STEP_OUTPUT: def configure_optimizers(self): """Set the learning rates for different sets of parameters.""" modules = { - "icgnn": self.sem_module.functional_relationships, + "functional_relationships": self.sem_module.functional_relationships, "vardist": self.sem_module.adjacency_module, "noise_dist": self.sem_module.noise_module, } parameter_list = [ - {"params": module.parameters(), "lr": self.auglag_config.lr_init_dict[name], "name": name} + { + "params": module.parameters(), + "lr": self.auglag_config.lr_init_dict[name], + "name": name, + } for name, module in modules.items() ] @@ -214,11 +210,12 @@ def configure_optimizers(self): def configure_callbacks(self) -> Union[Sequence[pl.Callback], pl.Callback]: """Create a callback for the auglag callback.""" - lr_scheduler = AugLagLR(config=self.auglag_config) - return [AuglagLRCallback(lr_scheduler, log_auglag=True)] + disabled_epochs = set(range(self.disable_auglag_epochs)) if self.disable_auglag_epochs else None + return [AuglagLRCallback(self.lr_scheduler, log_auglag=True, disabled_epochs=disabled_epochs)] def test_step_observational(self, batch: TensorDict, *args, **kwargs): """Evaluate the log prob of the model on the test set using multiple graph samples.""" + _, _ = args, kwargs batch = batch.apply(lambda t: t.to(torch.float32, non_blocking=True)) sems = self.sem_module().sample(torch.Size([NUM_GRAPH_SAMPLES])) dataset_size = self.trainer.datamodule.dataset_test.batch_size # type: ignore @@ -249,17 +246,48 @@ def test_step_interventions(self, interventions: InterventionWithEffects, *args, _, _ = args, kwargs sems_list: list[SEM] = list(self.sem_module().sample(torch.Size([NUM_ATE_ITE_SEMS]))) interventional_log_prob = eval_intervention_likelihoods(sems_list, interventions) - self.log("eval/Interventional_LL", torch.mean(interventional_log_prob).item(), add_dataloader_idx=False) + self.log( + "eval/Interventional_LL", + torch.mean(interventional_log_prob).item(), + add_dataloader_idx=False, + ) mean_ate_rmse = eval_ate_rmse(sems_list, interventions) - self.log("eval/ATE_RMSE", list_mean(list(mean_ate_rmse.values())).item(), add_dataloader_idx=False) + self.log( + "eval/ATE_RMSE", + list_mean(list(mean_ate_rmse.values())).item(), + add_dataloader_idx=False, + ) def test_step_counterfactuals(self, counterfactuals: CounterfactualWithEffects, *args, **kwargs): """Evaluate the ITE performance of the model""" _, _ = args, kwargs sems_list = list(self.sem_module().sample(torch.Size([NUM_ATE_ITE_SEMS]))) ite_rmse = eval_ite_rmse(sems_list, counterfactuals) - self.log("eval/ITE_RMSE", list_mean(list(ite_rmse.values())).item(), add_dataloader_idx=False) + self.log( + "eval/ITE_RMSE", + list_mean(list(ite_rmse.values())).item(), + add_dataloader_idx=False, + ) - def on_save_checkpoint(self, checkpoint: dict[str, Any]) -> None: - checkpoint["sem_module"] = self.sem_module + def load_state_dict(self, state_dict: Mapping[str, Any], strict: bool = True): + # initialise all the parameters, we can + super().load_state_dict(state_dict, strict=False) + # setup the model + self.setup() + # load the state dict again to fill in the parameters + return super().load_state_dict(state_dict, strict=strict) + + def set_extra_state(self, state: Any): + self.variable_group_shapes = state["shapes"] + self.variable_types = state["types"] + self.constraint_matrix = state["constraint_matrix"] + self.num_samples = state["num_samples"] + + def get_extra_state(self) -> Any: + return { + "shapes": self.variable_group_shapes, + "types": self.variable_types, + "constraint_matrix": self.constraint_matrix, + "num_samples": self.num_samples, + } diff --git a/src/causica/nn/__init__.py b/src/causica/nn/__init__.py new file mode 100644 index 0000000..2230faf --- /dev/null +++ b/src/causica/nn/__init__.py @@ -0,0 +1 @@ +from causica.nn.deci_embed_nn import DECIEmbedNN diff --git a/src/causica/nn/deci_embed_nn.py b/src/causica/nn/deci_embed_nn.py new file mode 100644 index 0000000..645ccc8 --- /dev/null +++ b/src/causica/nn/deci_embed_nn.py @@ -0,0 +1,162 @@ +import torch +from torch import nn + + +class DECIEmbedNN(nn.Module): + """ + Defines the function f for the SEM. For each variable x_i we use + f_i(x) = f(e_i, sum_{k in pa(i)} g(e_k, x_k)), where e_i is a learned embedding + for node i. + """ + + def __init__( + self, + group_mask: torch.Tensor, + embedding_size: int, + out_dim_g: int, + num_layers_g: int, + num_layers_zeta: int, + ): + """ + Args: + group_mask: A mask of shape (num_nodes, num_processed_cols) such that group_mask[i, j] = 1. when col j is in group i. + embedding_size: Size of the embeddings used by each node. Uses the larger of 4 * concatenated_shape or embedding_size. + out_dim_g: Output dimension of the "inner" NN, l. If none, default is embedding size. + num_layers_g: Number of layers in the "inner" NN, l. + num_layers_zeta: Number of layers in the "outer" NN, ζ. + """ + super().__init__() + self.group_mask = group_mask + num_nodes, concatenated_shape = group_mask.shape + # Initialize embeddings uⱼ + self.embeddings = nn.parameter.Parameter(0.01 * torch.randn(num_nodes, embedding_size), requires_grad=True) + + # Set value for out_dim_g + # Set NNs sizes + a = max(4 * concatenated_shape, embedding_size, 64) + in_dim_g = embedding_size + concatenated_shape + in_dim_f = embedding_size + out_dim_g + self.l = _generate_fully_connected( + input_dim=in_dim_g, + output_dim=out_dim_g, + hidden_dims=[ + a, + ] + * num_layers_g, + ) + self.zeta = _generate_fully_connected( + input_dim=in_dim_f, + output_dim=concatenated_shape, + hidden_dims=[ + a, + ] + * num_layers_zeta, + ) + self.w = torch.nn.Parameter(torch.zeros((num_nodes, num_nodes)), requires_grad=True) + + def forward(self, samples: torch.Tensor, graphs: torch.Tensor) -> torch.Tensor: + """ + Computes non-linear function hᵢ(X, G) using the given adjacency matrix. + + hᵢ(x, G) = ζᵢ(Σⱼ Wᵢⱼ Gⱼᵢ lⱼ(xⱼ) + + We also use an embedding u so: + + hᵢ(x, G) = ζ(uᵢ, Σⱼ Wᵢⱼ Gⱼᵢ l(uⱼ, xⱼ)) + + l takes inputs of size batch_shape + (embedding_size + concatenated_shape) and outputs batch_shape + (out_dim_g) + the input will be appropriately masked to correspond to one variable group + + ζ takes inputs of size batch_shape + (embedding_size + out_dim_g) and outputs batch_shape + (concatenated_shape) + the ouptut is then masked to correspond to one variable + + Args: + samples: Batched inputs, size batch_size_x + (concatenated_shape). + graphs: Adjacency matrix, size batch_size_g + (num_nodes, num_nodes). + Returns: + A tensor of shape batch_shape_x + batch_shape_g + (concatenated_shape) + """ + batch_shape_x = samples.shape[:-1] + batch_shape_g = graphs.shape[:-2] + + # Shape batch_shape_x + (num_nodes, concatenated_shape) + masked_samples = torch.einsum("...i,ji->...ji", samples, self.group_mask) + # Shape batch_shape_x + (num_nodes, embedding_size) + expanded_embed = self.embeddings.expand(*batch_shape_x, -1, -1) + + # l(uⱼ, xⱼ) Shape batch_shape_x + (num_nodes, embedding_size + concatenated_shape) + encoded_samples = self.l( + torch.cat([masked_samples, expanded_embed], dim=-1) # (concatenate xⱼ and embeddings uⱼ) + ) # Shape batch_shape_x + (num_nodes, out_dim_g) + + target_shape = batch_shape_x + batch_shape_g + encoded_samples.shape[-2:] + view_shape = batch_shape_x + (1,) * len(batch_shape_g) + encoded_samples.shape[-2:] + # Shape batch_shape_x + batch_shape_g + (num_nodes, out_dim_g) + encoded_samples_broad = encoded_samples.view(view_shape).expand(target_shape) + # Aggregate sum and generate input for f (concatenate X_aggr and embeddings) + # Σⱼ Wᵢⱼ Gⱼᵢ l(uⱼ, xⱼ) Shape batch_shape_x + batch_shape_g + (num_nodes, out_dim_g) + encoded_samples_aggr = torch.einsum("...jk,...jl->...lk", encoded_samples_broad, self.w * graphs) + + # expand dimensions of expanded_embed batch_shape_x + batch_shape_g + (num_nodes, embedding_size) + expanded_embed_broad = expanded_embed.view(view_shape).expand(target_shape) + # ζ(uᵢ, Σⱼ Wᵢⱼ Gⱼᵢ l(uⱼ, xⱼ)) Shape batch_shape_x + batch_shape_g + (num_nodes, concatenated_shape) + decoded_samples = self.zeta(torch.cat([encoded_samples_aggr, expanded_embed_broad], dim=-1)) + + # Mask and aggregate Shape batch_shape_x + batch_shape_g + (concatenated_shape) + return torch.einsum("...ij,ij->...j", decoded_samples, self.group_mask) + + +def _generate_fully_connected( + input_dim: int, + output_dim: int, + hidden_dims: list[int], +) -> nn.Module: + """ + Generate a fully connected network. + + Args: + input_dim: Int. Size of input to network. + output_dim: Int. Size of output of network. + hidden_dims: List of int. Sizes of internal hidden layers. i.e. [a, b] is three linear layers with shapes (input_dim, a), (a, b), (b, output_dim) + + Returns: + Sequential object containing the desired network. + """ + layers: list[nn.Module] = [] + + prev_dim = input_dim + for idx, hidden_dim in enumerate(hidden_dims): + + block: list[nn.Module] = [] + + if idx > 0: + block.append(nn.LayerNorm(prev_dim)) + block.extend([nn.Linear(prev_dim, hidden_dim), nn.LeakyReLU()]) + + seq_block: nn.Module = nn.Sequential(*block) + if prev_dim == hidden_dim: + seq_block = _ResBlock(seq_block) + layers.append(seq_block) + + prev_dim = hidden_dim + + layers.extend([nn.LayerNorm(prev_dim), nn.Linear(prev_dim, output_dim)]) + + return nn.Sequential(*layers) + + +class _ResBlock(nn.Module): + """ + Wraps an nn.Module, adding a skip connection to it. + """ + + def __init__(self, block: nn.Module): + """ + Args: + block: module to which skip connection will be added. The input dimension must match the output dimension. + """ + super().__init__() + self.block = block + + def forward(self, x): + return x + self.block(x) diff --git a/src/causica/training/auglag.py b/src/causica/training/auglag.py index a69286c..154e7ee 100644 --- a/src/causica/training/auglag.py +++ b/src/causica/training/auglag.py @@ -1,6 +1,6 @@ from collections import deque from dataclasses import dataclass, field -from typing import Optional, Union +from typing import Any, Optional, Union import torch from dataclasses_json import dataclass_json @@ -10,44 +10,48 @@ class AugLagLossCalculator(torch.nn.Module): def __init__(self, init_alpha: float, init_rho: float): super().__init__() + self.init_alpha = init_alpha + self.init_rho = init_rho + self.alpha: torch.Tensor self.rho: torch.Tensor - self.register_buffer("alpha", torch.tensor(init_alpha, dtype=torch.float)) - self.register_buffer("rho", torch.tensor(init_rho, dtype=torch.float)) + self.register_buffer("alpha", torch.tensor(self.init_alpha, dtype=torch.float)) + self.register_buffer("rho", torch.tensor(self.init_rho, dtype=torch.float)) def forward(self, objective: torch.Tensor, constraint: torch.Tensor) -> torch.Tensor: return objective + self.alpha * constraint + self.rho * constraint * constraint / 2 @dataclass_json -@dataclass(frozen=True) +@dataclass class AugLagLRConfig: - """ - Configuration parameters for the AuglagLR scheduler. - - lr_update_lag: Number of iterations to wait before updating the learning rate. - lr_update_lag_best: Number of iterations to wait after the best model before updating the learning rate. - lr_init_dict: Dictionary of intitialization parameters for every new inner optimization step. - This must contain all parameter_groups for all optimizers - aggregation_period: Aggregation period to compare the mean of the loss terms across this period. - lr_factor: Learning rate update schedule factor (exponential decay). - penalty_progress_rate: Number of iterations to wait before updating rho based on the dag penalty. - safety_rho: Maximum rho that could be updated to. - safety_alpha: Maximum alpha that could be udated to. - max_lr_down: Maximum number of lr update times to decide inner loop termination. - inner_early_stopping_patience: Maximum number of iterations to run after the best inner loss to terminate inner loop. - max_outer_steps: Maximum number of outer update steps. - patience_penalty_reached: Maximum number of outer iterations to run after the dag penalty has reached a good value. - patience_max_rho: Maximum number of iterations to run once rho threshold is reached. - penalty_tolerance: Tolerance of the dag penalty - max_inner_steps: Maximum number of inner loop steps to run. - + """Configuration parameters for the AuglagLR scheduler. + + Attributes: + lr_update_lag: Number of iterations to wait before updating the learning rate. + lr_update_lag_best: Number of iterations to wait after the best model before updating the learning rate. + lr_init_dict: Dictionary of intitialization parameters for every new inner optimization step. This must contain + all parameter_groups for all optimizers + aggregation_period: Aggregation period to compare the mean of the loss terms across this period. + lr_factor: Learning rate update schedule factor (exponential decay). + penalty_progress_rate: Number of iterations to wait before updating rho based on the dag penalty. + safety_rho: Maximum rho that could be updated to. + safety_alpha: Maximum alpha that could be udated to. + max_lr_down: Maximum number of lr update times to decide inner loop termination. + inner_early_stopping_patience: Maximum number of iterations to run after the best inner loss to terminate inner + loop. + max_outer_steps: Maximum number of outer update steps. + patience_penalty_reached: Maximum number of outer iterations to run after the dag penalty has reached a good + value. + patience_max_rho: Maximum number of iterations to run once rho threshold is reached. + penalty_tolerance: Tolerance of the dag penalty + max_inner_steps: Maximum number of inner loop steps to run. """ lr_update_lag: int = 500 lr_update_lag_best: int = 250 lr_init_dict: dict[str, float] = field( - default_factory=lambda: {"vardist": 0.1, "icgnn": 0.0003, "noise_dist": 0.003} + default_factory=lambda: {"vardist": 0.1, "functional_relationships": 0.0003, "noise_dist": 0.003} ) aggregation_period: int = 20 lr_factor: float = 0.1 @@ -64,11 +68,14 @@ class AugLagLRConfig: class AugLagLR: - def __init__(self, config: AugLagLRConfig) -> None: - """A Pytorch like scheduler which performs the Augmented Lagrangian optimization procedure, which consists of - an inner loop which optimizes the objective for a fixed set of lagrangian parameters. The lagrangian parameters are - annealed in the outer loop, according to a schedule as specified by the hyperparameters. + """A Pytorch like scheduler which performs the Augmented Lagrangian optimization procedure. + + It consists of an inner loop which optimizes the objective for a fixed set of lagrangian parameters. The lagrangian + parameters are annealed in the outer loop, according to a schedule as specified by the hyperparameters. + """ + def __init__(self, config: AugLagLRConfig) -> None: + """ Args: config: An `AugLagLRConfig` object containing the configuration parameters. """ @@ -83,6 +90,10 @@ def __init__(self, config: AugLagLRConfig) -> None: self.loss_tracker: deque[torch.Tensor] = deque([], maxlen=config.aggregation_period) self._init_new_inner_optimisation() + # Track whether auglag is disabled and the state of the loss when it was disabled + self._disabled = False + self._disabled_loss_state: Optional[dict[str, Any]] = None + def _init_new_inner_optimisation(self) -> None: """Init the hyperparameters for a new inner loop optimization.""" self.best_loss = torch.tensor(torch.inf) @@ -119,8 +130,7 @@ def _is_outer_converged(self) -> bool: ) def _enough_steps_since_last_lr_update(self) -> bool: - """Check if enough steps have been taken since the previous learning rate update, based on the previous - update step iteration. + """Check if enough steps have been taken since the previous learning rate update, based on the previous one. Returns: bool: indicating whether sufficient steps have occurred since the last update @@ -246,6 +256,42 @@ def _check_best_loss(self): self.best_loss = avg_loss self.last_best_step = self.step_counter + @property + def disabled(self) -> bool: + return self._disabled + + def enable(self, loss: AugLagLossCalculator) -> None: + """Enable auglag with the given loss calculator. + + If auglag is disabled, this will restore the loss calculator state to the state when it was disabled and will + allow `step` to increment auglag iterations again. + + Args: + loss: The loss calculator used with this scheduler + """ + if not self._disabled: + return + if self._disabled_loss_state is not None: + loss.load_state_dict(self._disabled_loss_state) + self._disabled_loss_state = None + self._disabled = False + + def disable(self, loss: AugLagLossCalculator) -> None: + """Disable auglag with the given loss calculator. + + If auglag is enabled, this disables auglag iterations when `step` is called, stores the current state of the + loss so that it can be re-enabled and sets the constraint factors in the loss calculator to 0. + + Args: + loss: The loss calculator used with this scheduler + """ + if self._disabled: + return + self._disabled_loss_state = loss.state_dict() + loss.alpha = torch.zeros_like(loss.alpha) + loss.rho = torch.zeros_like(loss.rho) + self._disabled = True + def step( self, optimizer: Union[Optimizer, list[Optimizer]], @@ -264,6 +310,8 @@ def step( Returns: bool: if the auglag has converged (False) or not (True) """ + if self.disabled: + return False assert torch.all(lagrangian_penalty >= 0), "auglag penalty must be non-negative" self._update_loss_tracker(loss_value.detach()) self._cur_lagrangian_penalty = lagrangian_penalty.detach() diff --git a/src/causica/training/per_variable_metrics.py b/src/causica/training/per_variable_metrics.py index a960258..6c8e242 100644 --- a/src/causica/training/per_variable_metrics.py +++ b/src/causica/training/per_variable_metrics.py @@ -1,247 +1,42 @@ -from typing import Callable, Iterable, Optional +from typing import Iterable, Optional, Union -import torch -from tensordict import TensorDict +from torchmetrics import Metric, MetricCollection +from torchmetrics.wrappers import MultitaskWrapper -from causica.datasets.causica_dataset_format import CounterfactualWithEffects -from causica.datasets.tensordict_utils import expand_tensordict_groups -from causica.distributions.transforms import JointTransform -from causica.sem.distribution_parameters_sem import DistributionParametersSEM -from causica.sem.structural_equation_model import SEM, counterfactual - -def calculate_counterfactual_deci_metrics( - sems: Iterable[SEM], - counterfactual_data: CounterfactualWithEffects, - grouped_variable_names: Optional[dict[str, list[str]]] = None, - standardizer: Optional[JointTransform] = None, -) -> dict[str, TensorDict]: - """Evaluate the counterfacual rmses of a model. - - Args: - sems: An iterable of structural equation models to evaluate the ITE RMSE of - counterfactual_data: Data of true counterfactuals to use for evaluation. - grouped_variable_names: Optional dictionary that holds the names of the variables in each group. If given, - the variables are evaluated individually. Otherwise, the variables are evaluated groupwise. - standardizer: Standardizer that is used to invert the predictions and loaded data to convery the metrics into - the space of the original data. - - Returns: - Dict of RMSEs and MAPEs for each effect variable we're interested in +def create_metrics_for_variables(variables: Iterable[str], metrics: MetricCollection) -> MultitaskWrapper: """ - intervention, _, effects = counterfactual_data - - # generate samples from the intervened distribution and the base distribution - stacked: TensorDict = torch.stack( - [counterfactual(sem, intervention.factual_data, intervention.intervention_values) for sem in sems] - ) - generated_cf_outcomes = stacked.apply( - lambda v: v.mean(axis=0), batch_size=intervention.factual_data.batch_size, inplace=False - ) - true_counterfactual_outcome = intervention.counterfactual_data - - if standardizer is not None: - generated_cf_outcomes = standardizer.inv(generated_cf_outcomes) - true_counterfactual_outcome = standardizer.inv(true_counterfactual_outcome) - - if grouped_variable_names: - generated_cf_outcomes = expand_tensordict_groups(generated_cf_outcomes, grouped_variable_names) - true_counterfactual_outcome = expand_tensordict_groups(true_counterfactual_outcome, grouped_variable_names) - effects = { - var for group_name, group in grouped_variable_names.items() for var in group if group_name in effects - } - - return { - "rmse": eval_per_variable_metric(generated_cf_outcomes, true_counterfactual_outcome, effects, rmse), - "mape": eval_per_variable_metric(generated_cf_outcomes, true_counterfactual_outcome, effects, mape), - "smape": eval_per_variable_metric(generated_cf_outcomes, true_counterfactual_outcome, effects, smape), - } - - -def calculate_observational_deci_metrics( - sems: Iterable[DistributionParametersSEM], - observations: TensorDict, - continuous_variables: list[str], # keys to variables to be interpreted as categorical - binary_variables: list[str], # keys to variables to be interpreted as binary - categorical_variables: list[str], # keys to variables to be interpreted as categorical - grouped_variable_names: Optional[dict[str, list[str]]] = None, - standardizer: Optional[JointTransform] = None, -) -> dict[str, TensorDict]: - """Calculates the RMSE and accuracy of the predictions of a model. + This function will create a MultiTaskWrapper obj with keys to be the variable names. Args: - sems: An iterable of structural equation models to evaluate the ITE RMSE of - observations: Observational data to evaluate - continuous_variables: Keys of the continuous variables - binary_variables: Keys of the binary variables - categorical_variables: Keys of the categorical variables - grouped_variable_names: Optional dictionary that holds the names of the variables in each group. If given, - the variables are evaluated individually. Otherwise, the variables are evaluated groupwise. - standardizer: Standardizer that is used to invert the predictions and loaded data to convery the metrics into - the space of the original data. + variables: Variables name list to calculate the metrics for. + metrics: MetricCollection to store the metrics we want to compute. Returns: - Dict holding the different metrics + MultitaskWrapper obj with keys to be the variable names. """ - assert all( - set(sem.node_names) == set(observations.keys()) for sem in sems - ), f"observations must be compatible with SEMs: got {set(observations.keys())} but expected {set(list(sems)[0].node_names)}" - - assert set(continuous_variables + binary_variables + categorical_variables) == set( - observations.keys() - ), f"observations must be compatible with variables: got {set(observations.keys())} but expected {set(continuous_variables + binary_variables + categorical_variables)}" - assert set(continuous_variables).isdisjoint( - set(binary_variables) - ), f"continuous and binary variables must be disjoint: got {set(continuous_variables).intersection(set(binary_variables))}" - assert set(continuous_variables).isdisjoint( - set(categorical_variables) - ), f"continuous and categorical variables must be disjoint: got {set(continuous_variables).intersection(set(categorical_variables))}" - assert set(binary_variables).isdisjoint( - set(categorical_variables) - ), f"binary and categorical variables must be disjoint: got {set(binary_variables).intersection(set(categorical_variables))}" - stacked: TensorDict = torch.stack([sem.func(observations, sem.graph) for sem in sems]) - mean_predictions = stacked.apply(lambda v: v.mean(axis=0), batch_size=observations.batch_size, inplace=False) - - if standardizer is not None: - mean_predictions = standardizer.inv(mean_predictions) - observations = standardizer.inv(observations) - - if grouped_variable_names: - mean_predictions = expand_tensordict_groups(mean_predictions, grouped_variable_names) - observations = expand_tensordict_groups(observations, grouped_variable_names) - continuous_variables = [ - var for group in grouped_variable_names.values() for var in group if var in continuous_variables - ] - binary_variables = [ - var for group in grouped_variable_names.values() for var in group if var in binary_variables - ] - categorical_variables = [ - var for group in grouped_variable_names.values() for var in group if var in categorical_variables - ] - - return { - "rmse": eval_per_variable_metric(mean_predictions, observations, continuous_variables, rmse), - "mape": eval_per_variable_metric(mean_predictions, observations, continuous_variables, mape), - "smape": eval_per_variable_metric(mean_predictions, observations, continuous_variables, smape), - "binary_accuracy": eval_per_variable_metric(mean_predictions, observations, binary_variables, binary_accuracy), - "categorical_accuracy": eval_per_variable_metric( - mean_predictions, observations, categorical_variables, categorical_accuracy - ), + metrics_dict: dict[str, Union[Metric, MetricCollection]] = { + key: metrics.clone(postfix=f".{key}") for key in variables } + return MultitaskWrapper(metrics_dict) -def eval_per_variable_metric( - predictions: TensorDict, - observations: TensorDict, - variables: Iterable[str], - metric: Callable[[torch.Tensor, torch.Tensor], torch.Tensor], -) -> TensorDict: - """Calculates a metric for and accuracy of the predictions of a model. - - Args: - predictions: Predictions to evaluate - observations: Observational data to evaluate - variables: Keys of the variables to evaluate the metric for - metric: Metric to evaluate - grouped_variable_names: Optional dictionary that holds the names of the variables in each group. If given, - the variables are evaluated individually. Otherwise, the variables are evaluated groupwise. - standardizer: Standardizer that is used to invert the predictions and loaded data to convery the metrics into - the space of the original data. - - Returns: - Dict holding the metric for each node - """ - assert set(variables).issubset( - predictions.keys() - ), f"predictions must contain all variables: got {predictions.keys()} but expected {variables}" - assert set(variables).issubset( - observations.keys() - ), f"observations must contain all variables: got {observations.keys()} but expected {variables}" - - metric_results = predictions.select(*variables).apply( - metric, observations.select(*variables), batch_size=torch.Size([]) - ) - - return metric_results - - -def binary_accuracy(logits: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """Calculate the accuracy of a prediction for a binary variable. - - Args: - logits: Tensor of logits [batch_size] or [batch_size, num_dims_for_node] - target: Tensor of targets [batch_size] or [batch_size, num_dims_for_node] - - Returns: - Accuracy of the prediction - """ - return torch.mean(((torch.sigmoid(logits) > 0.5) == target).float()) - - -def categorical_accuracy(logits: torch.Tensor, target: torch.Tensor, target_is_onehot: bool = True) -> torch.Tensor: - """Calculate the accuracy of a prediction for a categorical variable. - - Args: - logits: Tensor of logits [batch_size, num_classes] - target: Tensor of targets [batch_size, num_classes] (if target_is_onehot is True) or [batch_size] (otherwise) - target_is_onehot: Whether the target is one hot. Defaults to True. - - Returns: - Accuracy of the prediction - """ - if target_is_onehot: - target = torch.argmax(target, -1) - - prediction = torch.argmax(logits, dim=-1) - - return torch.mean((prediction == target).float()) - -def rmse(prediction: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """Calculate the RMSE of a prediction. This will sum over all dimensions except the batch dimension. - - Args: - prediction: Tensor of predictions [batch_size, num_dims_for_node] - target: Tensor of targets [batch_size, num_dims_for_node] - - Returns: - RMSE of the prediction +def filter_metrics_wrapper(variable_list: Optional[list[str]], metrics_wrapper: MultitaskWrapper) -> MultitaskWrapper: """ - return torch.sqrt(torch.mean(torch.sum((prediction - target) ** 2, -1))) - - -def mape(prediction: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """Calculate the mean absolute percentage error of a prediction. This will sum over all dimensions except the batch dimension. + This will filter the MultiTaskWrapper obj to select only the variables in variable_list. If None, the metrics will not be filtered. Args: - prediction: Tensor of predictions [batch_size, num_dims_for_node] - target: Tensor of targets [batch_size, num_dims_for_node] + variable_list: List of variables to filter the metrics_dict. + metrics_wrapper: MultitaskWrapper obj with keys to be the variable names. Returns: - MAPE of the prediction + Filtered MultitaskWrapper obj. """ + if variable_list is None: + return metrics_wrapper - return torch.mean(torch.nansum(torch.abs((prediction - target) / target), -1)) + filtered_dict = {key: metrics_wrapper.task_metrics[key] for key in variable_list} - -def smape(prediction: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """Calculate the symmetric mean absolute percentage error of a prediction. This will sum over all dimensions except the batch dimension. - - Args: - prediction: Tensor of predictions [batch_size, num_dims_for_node] - target: Tensor of targets [batch_size, num_dims_for_node] - - Returns: - sMAPE of the prediction - """ - return torch.mean( - torch.sum( - torch.where( - torch.abs(target) + torch.abs(prediction) == 0, - torch.zeros_like(target), - torch.abs((prediction - target) / (torch.abs(target) + torch.abs(prediction))), - ), - -1, - ) - ) + return MultitaskWrapper(filtered_dict) diff --git a/test/data_generation/test_synthetic_dataset.py b/test/data_generation/test_synthetic_dataset.py new file mode 100644 index 0000000..4e12088 --- /dev/null +++ b/test/data_generation/test_synthetic_dataset.py @@ -0,0 +1,111 @@ +import torch +import torch.distributions as td +from torch.utils.data import DataLoader + +from causica.data_generation.samplers.functional_relationships_sampler import LinearRelationshipsSampler +from causica.data_generation.samplers.noise_dist_sampler import ( + BernoulliNoiseModuleSampler, + JointNoiseModuleSampler, + UnivariateNormalNoiseModuleSampler, +) +from causica.data_generation.samplers.sem_sampler import SEMSampler +from causica.data_generation.synthetic_dataset import CausalDataset +from causica.datasets.interventional_data import InterventionData +from causica.distributions import ErdosRenyiDAGDistribution +from causica.lightning.data_modules.synthetic_data_module import _tuple_collate_fn + + +def test_mixed_type_causal_dataset(): + + shapes_dict = { + "x_0": torch.Size([1]), + "x_1": torch.Size([5]), + "x_2": torch.Size([1]), + } + + noise_dist_samplers = { + "x_0": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=1), + "x_1": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=5), + "x_2": BernoulliNoiseModuleSampler(base_logits_dist=td.Uniform(low=0.2, high=2.0), dim=1), + } + + # Create adjacency distribution, joint noise module sampler, and functional relationships sampler + adjacency_dist = ErdosRenyiDAGDistribution(num_nodes=3, probs=torch.tensor(0.2)) + joint_noise_module_sampler = JointNoiseModuleSampler(noise_dist_samplers) + initial_linear_coefficient_matrix_shape = sum(shape[0] for shape in shapes_dict.values()) + functional_relationships_sampler = LinearRelationshipsSampler( + td.Uniform( + low=torch.ones((initial_linear_coefficient_matrix_shape, initial_linear_coefficient_matrix_shape)), + high=3.0 * torch.ones((initial_linear_coefficient_matrix_shape, initial_linear_coefficient_matrix_shape)), + ), + shapes_dict, + ) + + sem_sampler = SEMSampler(adjacency_dist, joint_noise_module_sampler, functional_relationships_sampler) + + dataset = CausalDataset(sem_sampler, 5, 7, 1, 2) + + for sample in dataset: + assert sample[0]["x_0"].shape == torch.Size([5, 1]) + assert sample[0].batch_size == torch.Size([5]) + assert sample[1]["x_0"].shape == torch.Size([5, 1]) + assert sample[1].batch_size == torch.Size([5]) + assert sample[0]["x_1"].shape == torch.Size([5, 5]) + assert sample[1]["x_1"].shape == torch.Size([5, 5]) + assert sample[2].shape == torch.Size([3, 3]) + assert len(sample[3]) == 1 + assert isinstance(sample[3][0], InterventionData) + assert all((sample[0]["x_2"].unique()[:, None] == torch.tensor([0.0, 1.0])).any(dim=1)) + + +def test_causal_dataset_dataloader(): + shapes_dict = { + "x_0": torch.Size([1]), + "x_1": torch.Size([1]), + "x_2": torch.Size([1]), + } + + noise_dist_samplers = { + "x_0": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=1), + "x_1": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=1), + "x_2": UnivariateNormalNoiseModuleSampler(std_dist=td.Uniform(low=0.2, high=2.0), dim=1), + } + # Create adjacency distribution, joint noise module sampler, and functional relationships sampler + adjacency_dist = ErdosRenyiDAGDistribution(num_nodes=3, probs=torch.tensor(0.2)) + joint_noise_module_sampler = JointNoiseModuleSampler(noise_dist_samplers) + initial_linear_coefficient_matrix_shape = sum(shape[0] for shape in shapes_dict.values()) + functional_relationships_sampler = LinearRelationshipsSampler( + td.Uniform( + low=torch.ones((initial_linear_coefficient_matrix_shape, initial_linear_coefficient_matrix_shape)), + high=3.0 * torch.ones((initial_linear_coefficient_matrix_shape, initial_linear_coefficient_matrix_shape)), + ), + shapes_dict, + ) + + sem_sampler = SEMSampler(adjacency_dist, joint_noise_module_sampler, functional_relationships_sampler) + + dataset = CausalDataset(sem_sampler, 5, 7, 1, 2) + + loader = DataLoader(dataset, batch_size=2, collate_fn=_tuple_collate_fn, drop_last=True) + + for sample in loader: + assert sample[0]["x_0"].shape == torch.Size([2, 5, 1]) + assert sample[0].batch_size == torch.Size([2, 5]) + assert sample[1]["x_0"].shape == torch.Size([2, 5, 1]) + assert sample[1].batch_size == torch.Size([2, 5]) + assert sample[2].shape == torch.Size([2, 3, 3]) + assert len(sample[3]) == 2 + assert len(sample[3][0]) == 1 + assert isinstance(sample[3][0][0], InterventionData) + + dataset = CausalDataset(sem_sampler, 5, 7, 0) + + loader = DataLoader(dataset, batch_size=2, collate_fn=_tuple_collate_fn, drop_last=True) + + for sample in loader: + assert sample[0]["x_0"].shape == torch.Size([2, 5, 1]) + assert sample[0].batch_size == torch.Size([2, 5]) + assert sample[1]["x_0"].shape == torch.Size([2, 5, 1]) + assert sample[1].batch_size == torch.Size([2, 5]) + assert sample[2].shape == torch.Size([2, 3, 3]) + assert sample[3] is None diff --git a/test/datasets/test_datasets.py b/test/datasets/test_datasets.py index 6e4853d..0aeed6a 100644 --- a/test/datasets/test_datasets.py +++ b/test/datasets/test_datasets.py @@ -5,7 +5,6 @@ from causica.datasets.causica_dataset_format import Variable, tensordict_from_variables_metadata from causica.datasets.tensordict_utils import convert_one_hot, tensordict_from_pandas -from causica.datasets.variable_types import VariableTypeEnum def test_dataset_without_groups(): diff --git a/test/datasets/test_standardizer.py b/test/datasets/test_standardizer.py index 8dd49d3..5b68794 100644 --- a/test/datasets/test_standardizer.py +++ b/test/datasets/test_standardizer.py @@ -1,7 +1,7 @@ import torch from tensordict import TensorDict -from causica.datasets.standardizer import fit_standardizer +from causica.datasets.normalization import fit_standardizer def test_standardizer(): @@ -13,7 +13,7 @@ def test_standardizer(): batch_size=100, ) - standardizer = fit_standardizer(data)() + standardizer = fit_standardizer(data) standardized_data = standardizer(data) @@ -58,7 +58,7 @@ def test_standardizer_subset(): batch_size=100, ) - standardizer = fit_standardizer(data.select("x"))() + standardizer = fit_standardizer(data.select("x")) standardized_data = standardizer(data) assert torch.allclose( @@ -85,7 +85,7 @@ def test_standardizer_with_zero_std(): batch_size=100, ) - standardizer = fit_standardizer(data)() + standardizer = fit_standardizer(data) standardized_data = standardizer(data) diff --git a/test/distributions/noise/test_joint.py b/test/distributions/noise/test_joint.py index 00c3d9a..3e61729 100644 --- a/test/distributions/noise/test_joint.py +++ b/test/distributions/noise/test_joint.py @@ -11,6 +11,8 @@ UnivariateNormalNoise, ) +torch.manual_seed(0) + NOISE_DISTRIBUTIONS = [ IndependentNoise(BernoulliNoise(torch.randn(3), torch.randn(3)), 1), IndependentNoise(UnivariateNormalNoise(torch.randn(5), torch.arange(1, 6, dtype=torch.float)), 1), @@ -90,8 +92,8 @@ def test_joint_noise_empirical(noise_a: Noise, noise_b: Noise): mean, std = torch.mean, torch.std for key, value in samples.items(): joint_value = joint_samples.get(key) - torch.testing.assert_close(mean(value, sample_dim), mean(joint_value, sample_dim), atol=0.01, rtol=0.01) - torch.testing.assert_close(std(value, sample_dim), std(joint_value, sample_dim), atol=0.01, rtol=0.01) + torch.testing.assert_close(mean(value, sample_dim), mean(joint_value, sample_dim), atol=0.2, rtol=0.2) + torch.testing.assert_close(std(value, sample_dim), std(joint_value, sample_dim), atol=0.2, rtol=0.2) # Similar log probs torch.testing.assert_close(mean(log_probs), mean(joint_log_probs), atol=0.01, rtol=0.01) diff --git a/test/distributions/test_sem_distribution.py b/test/distributions/test_sem_distribution.py index b4832bb..cd2b09d 100644 --- a/test/distributions/test_sem_distribution.py +++ b/test/distributions/test_sem_distribution.py @@ -6,7 +6,7 @@ from causica.distributions.noise.joint import JointNoiseModule from causica.distributions.noise.noise import Noise, NoiseModule from causica.distributions.noise.univariate_normal import UnivariateNormalNoiseModule -from causica.functional_relationships import ICGNN +from causica.functional_relationships import DECIEmbedFunctionalRelationships from causica.functional_relationships.functional_relationships import FunctionalRelationships from causica.sem.sem_distribution import SEMDistribution @@ -19,7 +19,7 @@ def create_sem_params( name: UnivariateNormalNoiseModule(shape[-1]) for name, shape in shapes.items() } noise_dist = JointNoiseModule(independent_noise_modules) - func = ICGNN(shapes) + func = DECIEmbedFunctionalRelationships(shapes, embedding_size=32, out_dim_g=32, num_layers_g=2, num_layers_zeta=2) logits_exist = torch.randn((num_nodes, num_nodes)) logits_orient = torch.randn(((num_nodes * (num_nodes - 1)) // 2,)) adjacency_dist = ENCOAdjacencyDistribution(logits_exist=logits_exist, logits_orient=logits_orient) diff --git a/test/distributions/transforms/test_base.py b/test/distributions/transforms/test_base.py new file mode 100644 index 0000000..4972678 --- /dev/null +++ b/test/distributions/transforms/test_base.py @@ -0,0 +1,43 @@ +import gc + +from causica.distributions.transforms.base import TypedTransform + + +class _StrIntTransform(TypedTransform[str, int]): + """Dummy transform for testing types.""" + + def _call(self, x: str) -> int: + return int(x) + + def _inverse(self, y: int) -> str: + return str(y) + + +def test_typed_transform() -> None: + """Tests the basic functionality of TypedTransform. + + Should be paired with a mypy step to ensure that the types are consistent.""" + + transform = _StrIntTransform() + x: str = "1" + y: int = transform(x) + inverse: TypedTransform[int, str] = transform.inv # Check that the inverse is indeed recognized as a TypedTransform + assert isinstance(inverse, TypedTransform) + assert transform.inv(y) == x + + +def test_weak_ref_inv_release() -> None: + """Test that the weak reference to the inverse is released.""" + transform = _StrIntTransform() + inverse = transform.inv + id_ = id(inverse) + + # Check that the inverse is kept while there is an active reference + assert id(transform.inv) == id_ + + # Release the direct reference to the inverse and force garbage collection + del inverse + gc.collect() + + # Check that accessing the inverse now yields a new object + assert id(transform.inv) != id_ diff --git a/test/distributions/test_transforms.py b/test/distributions/transforms/test_joint.py similarity index 67% rename from test/distributions/test_transforms.py rename to test/distributions/transforms/test_joint.py index 68a95f1..8e26736 100644 --- a/test/distributions/test_transforms.py +++ b/test/distributions/transforms/test_joint.py @@ -3,7 +3,7 @@ from tensordict import TensorDict from torch.distributions import AffineTransform -from causica.distributions.transforms import JointTransform +from causica.distributions.transforms.joint import JointTransform @pytest.fixture(name="affine_transform") @@ -16,26 +16,32 @@ def fixture_affine_transform() -> JointTransform: return JointTransform(transformation_dict) -def test_joint_transform_call_and_inv(affine_transform): # +def test_joint_transform_call_and_inv(affine_transform): data = TensorDict({"x": torch.randn((100, 1)), "y": torch.randn((100, 1))}, batch_size=100) transformed_data = affine_transform(data) - assert torch.allclose(transformed_data["x"], data["x"], atol=1e-6) - assert torch.allclose(transformed_data["y"], data["y"] * 2 + 1, atol=1e-6) + assert torch.allclose(transformed_data["x"], data.get("x"), atol=1e-6) + assert torch.allclose(transformed_data["y"], data.get("y") * 2 + 1, atol=1e-6) - assert torch.allclose(affine_transform.inv(transformed_data)["x"], data["x"], atol=1e-6) - assert torch.allclose(affine_transform.inv(transformed_data)["y"], data["y"], atol=1e-6) + assert torch.allclose(affine_transform.inv(transformed_data)["x"], data.get("x"), atol=1e-6) + assert torch.allclose(affine_transform.inv(transformed_data)["y"], data.get("y"), atol=1e-6) def test_joint_transform_log_abs_det_jacobian(affine_transform): data = TensorDict({"x": torch.randn((100, 1)), "y": torch.randn((100, 1))}, batch_size=100) transformed_data = affine_transform(data) - log_abs_det_jacobian = affine_transform.log_abs_det_jacobian(data, transformed_data) assert torch.allclose(log_abs_det_jacobian["x"], torch.zeros_like(log_abs_det_jacobian["x"]), atol=1e-6) assert torch.allclose( log_abs_det_jacobian["y"], torch.log(torch.ones_like(log_abs_det_jacobian["y"]) * 2), atol=1e-6 ) + + +def test_joint_transform_passthrough(affine_transform): + data = TensorDict( + {"x": torch.randn((100, 1)), "y": torch.randn((100, 1)), "z": torch.randn((100, 3))}, batch_size=100 + ) + assert torch.allclose(affine_transform(data)["z"], data.get("z")) diff --git a/test/distributions/transforms/test_transform_modules.py b/test/distributions/transforms/test_transform_modules.py new file mode 100644 index 0000000..f9fbdd6 --- /dev/null +++ b/test/distributions/transforms/test_transform_modules.py @@ -0,0 +1,126 @@ +"""Tests for the different TransformModules to make sure tensors are properly registered.""" +import io +import itertools +from typing import Any, TypeVar + +import pytest +import torch +from tensordict import TensorDictBase, make_tensordict + +from causica.distributions.transforms import SequentialTransformModule +from causica.distributions.transforms.base import TransformModule +from causica.distributions.transforms.joint import JointTransformModule + + +class _OffsetTransformModule(TransformModule[torch.Tensor, torch.Tensor]): + """Dummy transform module that adds a constant to the input tensor. + + Used for testing the registration of transform modules.""" + + def __init__(self, offset: torch.Tensor): + super().__init__(cache_size=0) + self.offset: torch.Tensor + self.register_buffer("offset", offset) + + def _call(self, x: torch.Tensor) -> torch.Tensor: + return x + self.offset + + def _inverse(self, y: torch.Tensor) -> torch.Tensor: + return y - self.offset + + +def _test_triplets(): + """Generate test triplets of (data, transform, expected_result).""" + data = torch.randn((3, 1), dtype=torch.float32) + offset = torch.full((3, 1), 7.5, dtype=torch.float32) + transform = _OffsetTransformModule(offset) + return [ + (data, transform, data + offset), + (data, SequentialTransformModule[torch.Tensor, torch.Tensor](transform, transform.inv), data), + (data, SequentialTransformModule[torch.Tensor, torch.Tensor](transform, transform), data + 2 * offset), + (make_tensordict({"a": data}), JointTransformModule({"a": transform}), make_tensordict({"a": data + offset})), + ] + + +X = TypeVar("X", torch.Tensor, TensorDictBase) +Y = TypeVar("Y", torch.Tensor, TensorDictBase) + + +@pytest.mark.parametrize("data,transform,expected_result", _test_triplets()) +def test_transform_module_output(data: X, transform: TransformModule[X, Y], expected_result: Y) -> None: + output = transform(data) + torch.testing.assert_close(output, expected_result) + + inverse = transform.inv + assert inverse.inv is transform + torch.testing.assert_close(inverse(output), data) + + +@pytest.mark.parametrize("data,transform,_", _test_triplets()) +@pytest.mark.parametrize("to_kwargs", [{"dtype": torch.float16}]) +def test_registration(data: X, transform: TransformModule[X, Y], _, to_kwargs: dict[str, Any]) -> None: + """Test that registration is working by testing that the state can be moved and loaded.""" + transform_modified: TransformModule[X, Y] = transform.to(**to_kwargs) + + # Collect parameters and buffers as tensors + tensors = dict(itertools.chain(transform.named_buffers(), transform.named_parameters())) + tensors_modified = dict(itertools.chain(transform_modified.named_buffers(), transform_modified.named_parameters())) + + # Check that the tensors are equivalent + assert set(tensors) == set(tensors_modified) + for name in tensors: + torch.testing.assert_close(tensors[name].to(**to_kwargs), tensors_modified[name]) + + # Check that the state dict is consistent and picklable + state_dict = transform_modified.state_dict() + with io.BytesIO() as f: + torch.save(state_dict, f) + f.seek(0) + state_dict = torch.load(f) + for name in tensors: + torch.testing.assert_close(tensors[name].to(**to_kwargs), state_dict[name]) + + # Produce the output for x + if isinstance(data, TensorDictBase): + x_modified = data.apply(lambda x_: x_.to(**to_kwargs)) + else: + x_modified = data.to(**to_kwargs) + y_modified = transform_modified(x_modified) + y = transform(data) + + # Check that the output remains correct, i.e. the transformation is approx equivariant w.r.t. the `to` operator. + if isinstance(y, TensorDictBase): + assert isinstance(y_modified, TensorDictBase) # plays nicer with mypy than checking type equality + for key in y.keys(): + torch.testing.assert_close(y_modified.get(key), y.get(key).to(**to_kwargs), atol=2e-2, rtol=1e-2) + else: + assert isinstance(y_modified, torch.Tensor) # plays nicer with mypy than checking type equality + torch.testing.assert_close(y_modified, y.to(**to_kwargs), atol=2e-2, rtol=1e-2) + + +def test_transform_module_registration_buffers() -> None: + # Check that z is in buffers + offset = torch.randn((5, 1)) + transform = _OffsetTransformModule(offset) + buffers = dict(transform.named_buffers()) + torch.testing.assert_close(buffers["offset"], offset) + + +def test_sequential_transform_module_inner_buffers() -> None: + offset = torch.randn((5, 1)) + transform = _OffsetTransformModule(offset) + seq_transform = SequentialTransformModule[torch.Tensor, torch.Tensor](transform, transform.inv) + # Check that buffers are stored for the inner transformation + seq_buffers = dict(seq_transform.named_buffers()) + for name, buffer in transform.named_buffers(): + torch.testing.assert_close(seq_buffers[f"0.{name}"], buffer) + + +def test_joint_transform_module_inner_buffers() -> None: + offset = torch.randn((2,)) + transform = _OffsetTransformModule(offset) + joint_transform = JointTransformModule({"a": transform}) + # Check that buffers are stored for the inner transformation + joint_buffers = dict(joint_transform.named_buffers()) + for name, buffer in transform.named_buffers(): + torch.testing.assert_close(joint_buffers[f"transformations.a.{name}"], buffer) diff --git a/test/functional_relationships/test_functional_relationships.py b/test/functional_relationships/test_functional_relationships.py index 3becaea..bfc9bc6 100644 --- a/test/functional_relationships/test_functional_relationships.py +++ b/test/functional_relationships/test_functional_relationships.py @@ -1,7 +1,13 @@ +import math + import pytest import torch -from causica.functional_relationships import ICGNN, LinearFunctionalRelationships +from causica.functional_relationships import ( + DECIEmbedFunctionalRelationships, + LinearFunctionalRelationships, + RFFFunctionalRelationships, +) @pytest.fixture(name="two_variable_dict") @@ -24,28 +30,28 @@ def fixture_two_variable_graphs(): return torch.Tensor([[[0.0, 1.0], [0.0, 0.0]], [[0.0, 0.0], [1.0, 0.0]]]) -def test_ICGNN_init(two_variable_dict): - icgnn = ICGNN(two_variable_dict) +def test_func_rel_init(two_variable_dict): + func_rel = DECIEmbedFunctionalRelationships(two_variable_dict, 32, 32, 2, 2) - assert icgnn.tensor_to_td.output_shape == 3 + assert func_rel.tensor_to_td.output_shape == 3 -def test_ICGNN_forward(two_variable_dict, two_variable_graph, two_variable_sample): - icgnn = ICGNN(two_variable_dict) - icgnn.nn.w = torch.nn.Parameter(torch.ones_like(icgnn.nn.w), requires_grad=False) - prediction = icgnn(two_variable_sample, two_variable_graph) +def test_func_rel_forward(two_variable_dict, two_variable_graph, two_variable_sample): + func_rel = DECIEmbedFunctionalRelationships(two_variable_dict, 32, 32, 2, 2) + func_rel.nn.w = torch.nn.Parameter(torch.ones_like(func_rel.nn.w), requires_grad=False) + prediction = func_rel(two_variable_sample, two_variable_graph) assert set(prediction.keys()) == {"x1", "x2"} assert prediction["x1"].shape == (3, 1), f"got {prediction['x1'].shape}" assert prediction["x2"].shape == (3, 2) - assert torch.all(prediction["x1"] == prediction["x1"][0, 0]) - assert not torch.all(prediction["x2"][..., 0] == prediction["x2"][0, 0]) - assert not torch.all(prediction["x2"][..., 1] == prediction["x2"][0, 1]) + assert torch.allclose(prediction["x1"], prediction["x1"][0, 0]) + assert not torch.allclose(prediction["x2"][..., 0], prediction["x2"][0, 0]) + assert not torch.allclose(prediction["x2"][..., 1], prediction["x2"][0, 1]) -def test_ICGNN_forward_multigraph(two_variable_dict, two_variable_graphs, two_variable_sample): - icgnn = ICGNN(two_variable_dict) - icgnn.nn.w = torch.nn.Parameter(torch.ones_like(icgnn.nn.w), requires_grad=False) - prediction = icgnn(two_variable_sample, two_variable_graphs) +def test_func_rel_forward_multigraph(two_variable_dict, two_variable_graphs, two_variable_sample): + func_rel = DECIEmbedFunctionalRelationships(two_variable_dict, 32, 32, 2, 2) + func_rel.nn.w = torch.nn.Parameter(torch.ones_like(func_rel.nn.w), requires_grad=False) + prediction = func_rel(two_variable_sample, two_variable_graphs) assert set(prediction.keys()) == {"x1", "x2"} assert prediction["x1"].shape == (3, 2, 1), f"got {prediction['x1'].shape}" assert prediction["x2"].shape == (3, 2, 2) @@ -53,7 +59,7 @@ def test_ICGNN_forward_multigraph(two_variable_dict, two_variable_graphs, two_va assert torch.allclose(prediction["x1"][:, 0, :], prediction["x1"][0, 0, :]) assert torch.allclose(prediction["x2"][:, 1, :], prediction["x2"][0, 1, :]) - prediction2 = icgnn({"x1": torch.randn((3, 1)), "x2": torch.randn((3, 2))}, two_variable_graphs) + prediction2 = func_rel({"x1": torch.randn((3, 1)), "x2": torch.randn((3, 2))}, two_variable_graphs) assert torch.allclose(prediction2["x1"][:, 0, :], prediction["x1"][:, 0, :]) assert torch.allclose(prediction2["x2"][:, 1, :], prediction["x2"][:, 1, :]) @@ -92,3 +98,47 @@ def test_linear_forward_multigraph(two_variable_dict, two_variable_graphs, two_v assert torch.allclose(prediction["x1"][:, 1, :], true_x1_prediction) true_x2_prediction = torch.matmul(two_variable_sample["x1"], coef_matrix[:1, 1:]) assert torch.allclose(prediction["x2"][:, 0, :], true_x2_prediction) + + +def test_non_linear_forward(two_variable_dict, two_variable_graph, two_variable_sample): + random_features = torch.rand((5, 3)) + coeff_alpha = torch.rand((5,)) + func_rel = RFFFunctionalRelationships(two_variable_dict, random_features, coeff_alpha) + prediction = func_rel(two_variable_sample, two_variable_graph) + assert set(prediction.keys()) == {"x1", "x2"} + assert prediction["x1"].shape == (3, 1), f"got {prediction['x1'].shape}" + assert prediction["x2"].shape == (3, 2) + assert torch.all(prediction["x1"] == 0.0) + + true_inner_prods = two_variable_sample["x1"] * random_features[:, 0] + transformed_inner_prods = torch.sin(true_inner_prods) * coeff_alpha + true_x2_prediction = math.sqrt(2 / 5) * torch.sum(transformed_inner_prods, dim=-1) + true_x2_prediction = true_x2_prediction.unsqueeze(-1).repeat(1, 2) + assert torch.allclose(prediction["x2"], true_x2_prediction) + + +def test_non_linear_forward_multigraph(two_variable_dict, two_variable_graphs, two_variable_sample): + random_features = torch.rand((5, 3)) + coeff_alpha = torch.rand((5,)) + func_rel = RFFFunctionalRelationships(two_variable_dict, random_features, coeff_alpha) + prediction = func_rel(two_variable_sample, two_variable_graphs) + + assert set(prediction.keys()) == {"x1", "x2"} + assert prediction["x1"].shape == (3, 2, 1), f"got {prediction['x1'].shape}" + assert prediction["x2"].shape == (3, 2, 2) + + # x1 and x2 are initial nodes for graphs 0 and 1 respectively + assert torch.all(prediction["x1"][:, 0, :] == 0.0) + assert torch.all(prediction["x2"][:, 1, :] == 0.0) + + true_inner_prods = two_variable_sample["x1"] * random_features[:, 0] + transformed_inner_prods = torch.sin(true_inner_prods) * coeff_alpha + true_x2_prediction = math.sqrt(2 / 5) * torch.sum(transformed_inner_prods, dim=-1) + true_x2_prediction = true_x2_prediction.unsqueeze(-1).repeat(1, 2) + assert torch.allclose(prediction["x2"][:, 0, :], true_x2_prediction) + + true_inner_prods = torch.matmul(two_variable_sample["x2"], random_features[:, 1:].transpose(-2, -1)) + transformed_inner_prods = torch.sin(true_inner_prods) * coeff_alpha + true_x1_prediction = math.sqrt(2 / 5) * torch.sum(transformed_inner_prods, dim=-1) + true_x1_prediction = true_x1_prediction.unsqueeze(-1) + assert torch.allclose(prediction["x1"][:, 1, :], true_x1_prediction) diff --git a/test/integration/decimodule.pt b/test/integration/decimodule.pt new file mode 100644 index 0000000000000000000000000000000000000000..8e5a330fade78e4fa21a795b0b33cc4e7b40aba2 GIT binary patch literal 260889 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

R(pD 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

0z9Z8!Vr*!j#Uo%Ep*qotU?@99#|z z!fky`@aJJG?~tvSZuS6b-_>JC3geh@epBtIE#MNFjoUu>a~1O5)xW@52kzOWeajMi_s3tVBIfaIGG{|+OL`!Ge#I287r;s6yw0ibY$o_ zf8$;iu*O!WRWSEV45qrwrWFHnq=nfE`6Hg8fJY@wp5RJmr+tCIBYNNzcLxJ)Op#;s z4qx=H!Xr$1to`>5bgel>Rkrq_+iFjc(sze#-)^E@XBjN`wHrgO-@&WwexTc-1I1G5 z%obCO>v;=7|KMt}_Hrh*p56(Ot{dplm`?KSCm-ZbVzJ|!L-6USIh^(T!5vWId2z1A z7UMXn&^XBl^FKS%cD`183JoC7VhMv*r$D6953D)K!)zx`H0oR~e5`y-Q1~% zA1Dif!P=KtT~!V@-)_f+_BoJ|auDt26+&nP7xRvo)05`oP;TiXIE}NAwtCUlY3K0v zm#^I8A1|U9EycK_ZV-_F3U(xEz|bF_c>C-TJlCa+DytalXILK08JD3c&lV@G4FlV- z5x8p?MCxuN;-D=rZY`35pe>{D?#vJ1?(jwaZ#S@gd;$jg=%eUbUdVr>3|Bj(8CT#I z_;bb);{TFrI=I8BqmMbBIpH8X{v}4Hxr68V8>m#f0cMKDa&iT8z)h#0DwOtuVfbm3 z;*A0?7Ec!tf#Lo z%OxS`=Oe06{gDKE?x6(-syRw0!$EInIVW@08w`3`NrPTj6Y<~Ph*=fX-cuMeX35YP z(Gog(aXwn^KL)BzXF+4qUD|)L8>F6Q!^L@XH^}*X1%=1cVNyyvrW}vtf^-zvdaKic z{(Qzo>I5U%dZ?*gkG>LlT(h$;fvb6w%o4TdR>`HJ-2VMAJ1Yp>^t`G0LnDCPtI)oq z4orM8%D#~1- zqxujejSSJMC)QBF^AQYKjJ^5R`>1ML2GOq(6mqgP#*=p&np(;YUy# zbt1gUwW#=`1%qp3v9yi{hqa&6RW<9-Y$^{H@NJ}3rY@vPz8CCPwBhr$rZi+?7)Uf7 z#pWXyF>z~Wx{wktI$lWy%L#dyJzf*7dG26OeF(Ujx{{CAzHp8ClJR7i5YgtH1ui?R zu+cn=icffop{LwHxb-RM7Xj)d3S;?uCCJU&1uYuv&v5-SRIPo>c&eqKzg_?r#%F?U zOe<+)_wX|NCwR=NoZ3Gy1IfN_sHn0AB}*^tvrgnZU4W3~;fiA4>oIEB485Z@F}XON z6XTr$$8EL|_2?VW(eVjR?zQA(`&q$;Mvo0qO;2F$yF4n!D+N)DmBFL(19+Etp#8iS za4IZEtAhbhowyxcl0PuJ)(G+3c>`jOnt+>QChFb0jSBC#qEh8eoWf&CWFL2c%(AHv zeX$vh6@TK&z8-9xkORBb1VBFZ4sLK4h6juC@QrjKF1a*>_IahG`%@~2{}QI>zW0OO za3klAr92+EeiPF!DlnbEc^t=YaonpzEU(ep1Jpku1fQVcq69Qb8H*7 zOdg`s-!;RJhnaXFxg1K*52O9}PejYJ7)$q$C$fd{I4H0jb)371z?K5iFJDcjq_{%z z_g5g&u%BMN$mLjbAA{A48l~Y5E$CEBhlr0`udSNhIs2oQPQsDKWHgt$Doc?Ln(YhU!(+{f}tM~R!|2v?Nv6A97)2;4TG6wD5zp59_mTmKkk zEsG(j#|P_LH(+7KJ<7MTneCfOA*+*s%hxt&$oj%;*yhwg&>ymN{8jerFxfn3hX>H(%!r?{Ow3&wJq6kh`~7=gxqDQa-UA63b3h}o0{ z{B@xq`5+iaBZJY-w}u*$KcG&Bi;@R!5&6JT;LPx*CvP6&;vZ~%IP)sDdat1|Q#>fF zQ33Pa;izWl561+8Bc$zikQHSz#!0`4foGR>l6MKftz3h4xDs zV9t8x|NiU=QH~*yQ1T11FbpF#(qV{m3^r})$Dj=zp!7-xZ`y1kqP&irkcv`V@Bac6vz%~9 znHS{5UBK<$Jrw8W;lfYFV0iy9Mvg4Oee<7yDAy5$xS=R``7uUt=Ys4MQJA~w9U9C8 z$ei>IrDAPRxXKB#rh8zjjVcBQz9K^>w3<_jXWnl^Q`gt1c;_+V znmbhRffJSsm4TW6Vf-i?n!&Fi0R}BYnBKDo8k!zrO4$dx_x>)b!{dVEL;A6Z^Blx> z22!UF4J;m36s7Lp0omV)R8Hs(7+;IQuJL!Fxxf&Yo>HYYCU?+#Qyg){UBr8CF9~9L z6hEWRU{!B6bxf(o5gBcCGDHk`b%hk({Y=GH_QI!QYM|OTin}tGV662pXWF#gn640w zf`^*W_udOg|2htL9XJp2agDH-Tt@X+H|WXp2Z3=NaI~X{_J<%Ylba4z+k$Axzyws9 zXhsYxM&PmDDy*^5N4YQc`0DEhym#arW7sF5>ZvAdANT-jlJBuExeo)J`MKK{ZzX~+ zm=wyhk}=XRl|O&ID4-GDDu`?=*SSbV_57<}+zCTuc! z305cm1c9!4kbU$DoVK*1|EV5OSm6(j%R6xR@i(wCa|aiz)o5$hj!D4|pvND?HD0ZQ zQ00o&&lY2C+YN9Q>cr+9-Z=1yfQ5c525bKT1~GADV$fdVInarI*Y=Z4qvh;gqzL-Z zffm{ysp`0FH2Ta%9j`bNclsrnxYUyLjXa^k#Sd`Pl;fB=YX+p+CgR>_GIZdyJBWu} zgJbtLqdq1uN5aN3?p zxC@^^YU5Mf6MYr@}_`GznmufI;+B_7bi!2PJ9_6HtySwJoKPlIE*zi=t9FKgjks| z-RJI?M0e&#{4O*MZ+|O-m&<;#MeHTa%K433_j6(L;V}5IE}I^X@`S-yZ+NxmCYt4% zgS1^TEP6H`W{2%Wd*5Epk^DlitNg@R%l6Ff)&iZ|p5fQxFdTgK5X7w?1G%;pq6{r@ z=}YGGt*a*$-sYfxa;Mvz8_wiAPEt_-(kIa1HJg`8uNopz%td@*vG32jy#NGvp0%b1lA!r;R8;B zSFkvJGAs+Xp*BK`P;#Ra^-!~ex+#~j%uX5vw7*lohx0jS7AJyRr~+x_InE8Qilla< zg8g zbD15I0L^9vTey9fd~am4NZ{pBTO}5~aH5KuCQgnla7}S1OE(SXB@eBXP_Y7=c)a8yUll zv0!E}3@K{4H247X(Umcd#9Bufon{G99gX-(Y$66v7X^z-rnR6`gF>rYu)*XtiY7F` z<#z(G>c<&$u#d!GL0>RqT3=!dd!b2k3%nl9q4hEL+y_h#$vWl(^ll0vFAiJ)6`_3i z^R^3hGHQXC6TNuB#8TN=Qk6_RKLL8%Z_}`F4)iZ50RM0A@omr%S~6(~-11T;*^g3T zU`9O-$5Z%uc|XpU2U76y3r1#Zkv~7Ukb7~zF|0ry7CPmvvDJRL*N%UBRF`UkG!j!A&C}a|fLZ8}DW4k*} zykJTNWyO6wuZc?;(@EI6n#)3^( zAYPcZn=Va`gmj^GSlff({b4?&e&oQuc_*;pq!8Ml{DJ18HLxtwlI|UzOKr>e@z=B2 zw08A9@R<1vpTu5JE-+bx(l=Ak(RB#UbO)j87bP%#=nQ+g(wqxIf+T@g4%+(Ppq(9H zUGgh%H9A2@^X{Vgmd`}ICkA~^=2?8c$pnXd^?mPVk6+T~ux#iwq6+9O% zef|kUwLM_=HU>JTTfpeHdK^{!grS)&IM7LOQ$YwOl?>9Q>t18=19ens^3O~+Wg`qU37v@;saYLB7ZIZ+6I_ZVC%`B5x0lo&5Bgz@U{hzR3* zI!Z?YPVdhaoA zWIVImUx(5u51>QN5oPMXahrdq;j-+hR44QWIF5*b>yq6xNhgtL9@~SmB~f6XR0fyy zSX@BqZyJ5Pk0z{S{Pop&U=ZaEUg2*zp*w?6!RIH`e)@`^^OjLVxpcUkZ3Euh@1ejj z^ZSb3U^xt0w7lat%b6V{Q+VgX@s3@<{T4trNyOp1%vh3_I)a(IqM+R_2`;y7#&+xX z5G>=1s&Dg@r&%jwf=&WBO?L*Bvpsn0_i5^3&gKC5ySTSw3DLA>zRC5!a4L&c|8i>% zH*|U-`rSK^{k*X-L|%cOO*GwLUI}8nX*fUT5J%~dAEft1L)ct@OE{{Z zo{b{5Z?LWLJMmbt5XzqRk=X()7k1d0+q&)qr&h}YW+jSp-L#%_`uy5x_=YcF$1@i} z>m^E@+yOC1ZgXW%SmN_T(o}G|G-`Y}3#A(qh$yF!6ChcG!B52?Q`QkhD(9iSMFu{K zEvBmP1MtDl63{EHBL%SypyAa_rwTk(+9-VymzaN{g|k0n$Ak!Oq53zNJ?#ibd9FUp z>?$HjID`ckqG8XwW@_Bv1Njz8xHCG9j?T&k8D^(hCnFAhQ`vrdb}t-xcoN-CzoFav z8ARs!tqh%c&vD@;SD0DDY$7r(SiJfJknjwe;B^i3?njcj%n)FF>^+=5tO^Ge4sm@? zzC`~7UpQkdjfGVmpdsK6C*`hy`kP01Ak_wa-15k!yiR!E#la0MK6J+vYt-_)1^xMM zaQetWJkmD@#e|xacWj%1Dr@|4;mkmMtf>bvTuUP2$BQvjv(P-LkOXY*#-RLrqzA&# zd}tvmbR=SyXebD8+=NQ|<{2r z4aZ#3_aIu_hz=6Y81#Ydn+`XEde#$&oBa$0U$hXY9wH8m)toN;7Au^KvEy9~`u<#r zF;6JBS)~GdlH7?PllkSm(j;*Ku^=D$5p}l5(25OVpm;SG`3|>Xq31TJb?Cx6&C}>D z^PU8?4FD$=U|E(ah95v^X#N4}c4yE-y92nKIMj^@%K!s6Dty!*QdJhA!233QGe;B5 z&vd~N6<1J*eaH2f@ftj>?=qHACy|wO$1;yvrc2a_(nnmO;&?U`&GUw5r?*2?Qw~fm z^C0&&@sp*8{b0_vIaJ6s6PHN&689BpR8lMw1@{!f#BI~SGNcVMeSctgiX^Hh)PQxK zA6(A73`Y0Ya!y!nq|bMqgI)OxFngLV=@2bK-!?9lIf)=};TqmIxJ{hvlc8%y5#C)M z#9h4*p};Q%6)pvXT9+TKPS_5`jIm^M@-;r%t-7shjNSodg=FdaEmsAwvqQVCan}RRc1o9FY_O?bFk69lN!$S z!86Az(6l5OC0AafqthL+EWaAW9x!`SLIw7()rO$iX*BA18pxfvg8@?Q@aD2QJ(JH5 z*;|IN0ZyR$1|g>V5zPr1c>?WHO~^OeL-v(9qtU#Ta4AU@Dqg+=xg+N z2C{Z%W2llB=&RdO-8%tv@5#k@O232z-kFTk@+9!1`YUpNNj^&3e|3fSkK3_4%0 zVRkpu^Qaa^lg=ApE`@M?i!|zn1e);)CYr|96 zQ?e5tuzBrNy*f#K-iXm2=GeIO9uB%Mg2HvzNW#2#V90lsSVa!N$$+yo^Za)#-u#fO zdnB3r8+tgozk1O!c{lW5VC(mzGqJ_r0u0w?!3x&bv*z#N=B{soy_;5W)fK&=^}Zmd z^k*{BxW@PrjDdu8PvF<(Beb!i9*4#`lkt;`u%N`9^nYNnpEKRjF1Lhn%L~!BX$NZ1 z8Bo@Lo0i@CLKF+?xmDxDm@hFN2E=_>tmz}DdeR8NFFFBFF}pxl3B5G;H?tXZpeFOb zjHcd#>RSU~`u0AkZnD9pa(B=`Qv?lETG4j<5WSSD4Z)8sFtvL>L`YQ7I;$FJjEKkZ z*laA??}J>QxnNWB0Cdtzz(S;qY9!xb`3nPJzi1l7krJZ5F#|1|!l5+!B~-DtT4zYG zyumMEzTrF-UNZ^HoackYBz{y`*9%DxN2tb*VZy(V7e#c^P`+{(gxIlIRw*0sbUzC! z%l^RDcvYgQXNaR^m%zs7GrNEEqg@LZLbf(To@gvOW|y*c{Cj-Udxh|ox-y@q8V;#7 zQ4{_L}%ssp*Nz z7ycZli=I{9C~O-66X#f>+GQVTtH^=$C5%BoWtjZf5W`JXy9o=nE<%@acR=pW9GLn2 z4aemSvx(Q-L=QHF%w7Aeo;)!SzHyo( z)Vx?s@AGgF6n_kZCGup`OgWJ8?8EfV?;w!mjUl878$EVIuC5E#9h?VwZkkZ3Z%OO| zV@bi>+o-d6J|0`cY;)x=X!H71G;3gScY95+Wr{BF?%oULGa1_>ekr{o^OLN2D~vmO zZqYDhGtjjQBNa@aVD`aK9B=pqmrm-!jSKdn^SmtB^VAY}g>FIXMKF5MwiIFm%zf(c<{d%J37LFY6Xrhwx4o&y+px@J@ z+>eq@8L^FJ8N(kKF!K=8WBvM>%8k2$dL03v@w*~fi zzB2b|4)kb-;@-;HG{A-n%hGv>k*_3(OFY3WSzgqyXKS6v*WA?0=Fliyfy;Qu(c$dZ zU{MkRJB-&-r->1`jj?KLlYgM5+eVChx&;bFA5f9x9Q3~4N{XCA@YS+G`sR`vCN=d# z@U@53D1L-#AFV^%S!}&OPMYdAHY#sAlZ+i|Loj+m76o@d2l4n(x=qdlLLRM$HLgV{ zc&8cmIE^SaVezYtPvU(~jrE-J8~U-upd~<-H55zIH3`*8hz@ z`uFgcb1<~o9wn)VUP5VQ2rbM0j&3>CAl)^DsxNv`Z0{_t$6zQK*joT*SNPDtJ_D0< zz7vZa4iv_}qgvjlV2J7SdFh3tz)nYQ-kSrEu|bE#^c8XYRjpBOjuk3ftB|DPNbH+y z0v>U9z+xVY<5@QdmLHQbp~)QK4^@bp){2h#p&&N10mpkCMUkQ=OzQbfLY0T0_U$kR zSARvByjIS5OAByYavMVL4q@A`AKXpz_JC=OZ8#3*9jE_e<0pQNlVFE4Q`QhOXCL1*qGF0kyYzPXy%;{Rlh4CO~mr3s+f5AH)_vf+lToi(6BQ7Y%_X=-r(5ghAJhV;+^EPcr4%TrGtKXaFu1uV9G%Y zY{+nh+9M$tmorL3Cx1a3t>2)XM4@m(JNIU*G@iS=2j*34fmcF4JTpCwcADKdQP~bP zdxvR}`5;{IF$96UdQ#eQ1K->^h4nfoU|OOFC(kGyMdC96E8VEc3U}1o906(zo5;t? z>&n6P4iFxaKnuNQLCUF{92vtPA~O31Xqb#co9}!~qcET4u;q}L#i!wz0<+8US)lAZ zNzC)jLk-5h?fB-0(wozuO-&3`;{34fMHgpVTNM5(ok1;Fu8o3PAoZ+f`@LtK;D+@m zcD4}}M80BH!Ew|au>yqx9Z(E4W;tUY$;qwLI1zG*Se^HUn$1fGMUk%@yW9Xw&*_9B z;qg$!M^I+AD2QsiK=k!v+(_-uurxl7*vs9;C>>u^+H)Mmr^SPa_;%1;@2G55Fo_r!DS&7w!FTuah6W(0OWB$K4pzj$22^X92 zV8#);q~QUy%T2+He^e9C>@@Tn_Jy^1Axfv;4L~!SKc@#a;qr~Y;DSa4EL#?U3h~-d zXrqNGRt|8s{r)w|-kJ+@67!fw zPzqSa_i*;v-l7(cF)(S-AeJa?gmCdMAk&aVjIH8WJi#NJeW4#@OZtg|TN@Dy&4NQ> zr@_pu8ViKNXoIL0__h^*gXD7zP3*y|^YpPi=NGP;r3#!ixga4t3{3?}9M0)tFs=Rx zBC_8(idy}kvnq_E;kAr5uXBn=l)r1QMHNhEXxsi! zD#Lut1p}`*PB$IFK_Lf1$SC&9JOIO-5?UL-9D^2ngPQyeyl~|r#;LW!Qm@x&P{?eW z2U2L>^i<|B9MfNUqT|3eT%omwGxEL;#xLro1|!k5Dn5l8E{rD9Ei7k4 zxe}$`UxA>RPqBP}m+6aVV9++EbGP>>b>Njo-_#sb2v0yhk1%M+OoYo~K)M)nr=Pb5 zFU5;Nz%4!~JKB!h=nx1$X1P{<8fcTk1;e8mXxOO^kym#@aCH}zJG>cXPiBKbLpG5Y zti?0J!N_0v4I@uw!(}s|T37j49BwtWVXU6d!LtNr3M7O2JF#3koDGm%fa-^0V^^> zK9nForyVkccs4d3WciZZPEzw|Gw3m9;Fwlb&y^<}1Ha`kAaoNNuXmC|XpgTdZv+4S zSJ2RL2X;5_#-ukjASvAs$qK&U=IaPbdnL&$f#c{aa}#d7yaLfaEWXJ@2IH-xaA>*= zrgdu4(^E&dG7a%~w9W}z8@G>zK9X^akvaLt7uY90j|@#pp{G8!4M_2I_d_rdt^3H*AX8>$={(YkdzJ@)i1 zqG&8MIqpQg&~AJmDF`!eGp=IH4cO^iOAi%G!iEriD%_cf;Z>E8HK!jXm2N|JYYvRQ zzkx>uJ?P2rO5m=YP7@NIVPBeedR2-s$IbOCA-pl9B=|7I+NF|KZFT(lb`M+(KSyyc zg%g<^V#xkpVs}4av6>5}v;ASOdp*7VToW{cDcHykV%3JbL|M}u-RmppsLEHy61Bi7 z-hvPw(Toy_Wniqp^b{uT0Q^t^>TA1T<+yH|VR-_#T14XKjgx5n^TQBYtj4Xpw+KAK zJYaq9Wtt-%hTa$aP(hi3M)=3S_!|{Z>|g$S{>e0+2|UK)nys68 z*yGx!v48*lIq-k>Xzh{YEUeOnV~r6cdi?@2ZptN4IK*sk!wSrg^9_%Q+CrOZI{KYhK`Ojb zK~Cf@(__iURMmPE)YE`jk%mm~IE?9%#e*PUB(oQ;C5Fq2q55?zXpAZjr{)we#QSE z^W-1-DgVek8T)_9Kd@E){@y>H|ISbO=kr*Zf2{ZK@Bh2k|FPUZmi@=q|FPbGE;IK0 zACJG69XpSWcZ=KnYyOk|XFuTonjf--F-=q%$7JLGWSfj}SN_gL8RMS(#cvrq&t%6K z?}YJBl*r%CtnB|{p=h$#$KGS-zxXLD|7V%8_y0P^K0Ef_7(ZpK?BDAeYj5mxW1N=1 zy*~E*ud>_NdF$Ukvz?v)R`!3@Ggb%t?tj%aR(7nOG2YBr*)cB7SoyK`$Lbrq&awAd zePiX7K5hT&`Ct5&>+_z?`cL{_;r~MahwHL9JEKaR>n)GI$*mldi+9QTThqZVB88;* zszS3Uvz6Ia1J|1$#7hRK==EOidNXJ6PJ2Lt=dHtKHWDPdMuJA%QN z`!^RV{oDYQGG3y5vpCcq+JFwV{#dHE3EM04At^uyGNaxnD(J_o*BL#kAvmzK4_7Q&$8Fej7<-J%{9?q zmWG^~r^G*@3{|p%FyT-z24By>r8Aa+NcUMBowpK=tD}KGy%6{!24UZ11yB@!3uS%& zoTY1K&_1X4w2$pCtG$L$rA8b@YaddXbI~;A>q@{yF!ot8YtV*%JQAUF+iNW#rf*CX1wFv+Wi$wEU~}oJGZ|4+zra$v8uThz3|TqnSdQot(!lmI<246h z+l&UN`sGNitFB<2iV4cAh@e~28pxdA14(*O+W(>1u+GSF<48 zHwGRT%;4~?{fG}<>qANRNjx1U%f`bZZf8_5Cu-Us(BaE+AH6-u;@8@oagB#CUQZqs zH|9e@eGWXoyAN8fOeaSMSD?rJ+nBx1k+v*wWEzfkTweJy$ZfdEDeZUw>raFL%BL_* z(YZv?&WHIfeCerOhsh49D!TM=6Y;fv1c9C#@l4VUd|~d2o5Q7{cI!2GV=YUCcjj@b zjFLd4rWw0$50E{4x4^P64f%c-;PcuwuxQyb?yFa3I6B)4uDos{9@pPO=QC!TkYsuL zKJQUp;1fg}Dsl=o4iM}*0GiFOuqgaHsJ$*?tjH8p&$a^ni6^mo#W<`=yMfwIA3?{# zgE0Qn73jG21^MoNC;9UQiCj({l=3`=n8ZF3y!Iy5uw>Id~`Zy54$s#^B_94g_DY~$JjRi3S`7dlQP{mRG+biziqot z^V{V?A}tV)e?801=v@i{_IFUguMS4nQyla-LN!#Q=}pHaVDml-Jhs-M@xvlmHp2$? zscD0MkuAt%I^eD&h8Q%`Nmi*Dp_BRm#O-{C`!)_@jNfzGa`+n5EYxSbeIK%Mf+hl6 z?;ohXg5s8Cz%s=kdb2%PK4k2h@9pq&jXA1H_L4B(>9E;pE*x0M=7_*nu#2Zeh790= z{VPd058Idh>4BzAS3$_l2fFSL!su{4?#q0QseUYXSB3Ed{;=jUC_i~K%^K#e7)G5( z*)%~}mDxMB!L+pxRMX&Gpz%Ve}5LOBX_N*GttIfYX^D;nE6 zd^jxwg;-y(2wW^~!>3)l$l#x%#CUQDz{UsEEvA(t|9majy1m0X7H?+~xfMqjxuSVz zBO4p}#U#12pt!b?dtAegnEuGa+f(*|;>E8tPG$%2iS&crl{>V6 z#XySYC*y4YbchraLA|{`pfAgEas$Gk!^sHaSZr+Lg?1`1;}!^g=mMEOXXHCji7kxL zv!L=kq|Yiwt%-MFpC~UUXAk2q>06=tn^(~K>@1ZjE$0X>6T~X9HWctFN1;nMQAsuq z%bvU>NfW)5r0h(wDP$$(pQjDKqBKFLY7-2-YJ;MTo9KCkaUNKF@%mLf;2HH5INC+D z&Y6|bT?_nWm9U~qi%Lv4K_|bjD5_t8yf-tULo*$!zds-?o*z`6_&sF&IQ*OO#qFb-N?H=67|B1 z$W>uWl-^W}CY!rS?YSD%y3m3Ni@ac#!#Se%>^ie$4HD5++1!YU-DJQ(2P1vYf%Jv@ zU@pUa=Apj<&9Bi_8Yf}l(zQ?~L^z1-p!~{5w}}(H<6WFE<`T7Mq|( zzb+{a@&o^>By`(T4ne7<#5Oq>OP}9Ix$u5;NIecyrtPHSd_O^>FM{Lv>j8B(kONP1 zfApBL2?XT}sYX`~hi@9w5nsdfgUvH>J$DE`F3wceI&%%2jd!4n4`YCNug0Pcfxx%D z37jrQLb%xz5-fBcq*KhnsKgb7*QP_m#7Cs!Cu6^zdWD)F%OL6a4YG7n8?g!-!l$GJ zo_g$r)M_t`6aCI~-0eX=@HX(x^hFsRcRFdK2Eu(a2rlG8Vc9)8)Y}798~Fd)e+-+r z4)XA`9UeRW)qYR)pZ0re|1Ye+bTkAYZcjR`@i+%T%`ZV(_&VfS-ox}>84RBDlS;qK zg|RhyVsR|b6806xj(_zX7yi?CRNT5*>|gCk9|djUjMabnnCN=8(Pew|e_j8kf2yA` zOgaCm{(rX{4*OgCkCm^^_)pqr4A1|n{XMMxh@dT84|X2wi-+uZz@Crw$q&_q`{uCz z7(4z|pUeDHpD?ba)ci_3Z*daWbQyp%~nIYW5eRh8X_5FF2v*5&P`uQ0@SH`LIJ?v~?nBK};!`EkRBUf8;koDvWq zov}Bm@>dzI+EpEH)}A%=RFoF=O6lNeKVL+h-K#iE{EH-r1 zU*^2mY~*OBFCiy*zhvCBdrc;Py29DBca(E|-+hkY@K4U11W~H~#G8A(Y&sd-#XRWW zK5>?pPvkE5m`*1K0H-EwCtZ@*Lf)?Q19sq;pd&S4`Q7TzGn%?0L0`ls1NP z&N%<#hQD;A`OA5U)U~(V@sGUXR?W|m?KWtK^-?Z*^c^D&f-q9SD|a(%qN!xFVO>M&Tx#{ z9Jm)X`Dy5%inLxOJ|l96e}-dm7Wd+k7#h6anY%>fT1JkjNyh4$X6~x}7l?eh7oBo& z3AyC6i1sZ{q=B2~D(_ntN%nK6(5(+gsWH6B`FUHNj*Y!P zlt_?df7QOVk2Yyr)lC|Vd2s!-3vj$Pm74kF;PR-+AmtcK z9RCM<_W=||^DYXXoO1>VCNLn10z132^NeB!vxph9V!#|Qp(rXKA_^!9Mv!Dc6xd~V z=NSPJkRXUCh$0ve1Vs@Q6~(*n_kH)&z2|@L{q8xwr>wVXwra|Cba$tJ-96pY)ARI? zPMP`UnJ9Z1B#%L*2VZ!qm^&~8)US5KdfkOgnSCPk*;*tt@OH(B%Q3RoL&QwQ@vltu zCn5DEQij!jqo~R5?r=?7Lut)yrmno0MlNkJ!d+osne1=pn9mCRnR5ApuJ`+ zXbn0I*Q|=5LSn|IUDKipj@^Kcz+y1vos*7)FluV?D<;%43!EV9t~0q0@B^ zTWkDF9`9d;CY83)uP=t7M?xS7d5UOKs02?GqTqYt5vn!858VSZgvGH<7=KQgg|Y_l zKc1n=@X*Rnq zPrnoO`H2R|?nHy})d|qkCQ!b1l^qUz;D#mM+VHybx@^0APVd?h0zdKkL%+38z(M{@ z{JT$E;p4kn#$fSlW=VDrrgg_@^q%;MX|^(h052MQ?nr=sgSJy=&#yr777uwp^M~|@ zLjqhIHxQSfA5P7im_{8_^uqAE`^=2ZVU)Ih3|bkkr+!w-|zv9PclG*%*U#dXzOPz9fjiLxa*!stULF0e&(;w9Flk=Md z?rFv3yB%?a!nT2=ll?AU$ge(cO&^a z=_&jJsi7`6U#kfcv~&5kpKbW7Ryq^cZ>0#LZ@X{`3Igr ze+=p75J)}}gpkc+wvqIF4Z)r*X~M>_m&oly%!r}eY)OOlQNl#868Fra)|KXv+pY=6{ z=XhU--}k~o!P8am1Wkf$f-#&yoKaOHyAQ45n>@V92HeHx3$hh{AUl{Dp+tU!h&*|wUc>dT~Fnilc@}^RqpimnH z7DXrciBA&wMn}zw_k=MyZl9FDy;4W8b;S}vxN1K#)jx;Gb4wBoP7V-MJ}Gdm_i-RM z@ZAIjdzKTG^}w&|9VRG?59OaT=^%cc)g$M|-Xs=YSuarUC37te5V{RIpGYL_1HQfd zF4ftN`}`i;Kwvzv5C3bQU;)3@QV_UtD&KrUsG#bAx8SdH@2BTCw*6}-vP0Qb293lU=zqbEK`~7#s-)_PJk2O z1ULasfD_;ZH~~(86W|0m0ZxDu-~>1UPJk2O1ULasfD_;ZH~~(86W|0m0ZxDu-~>1U zPJk2O1ULasfD_;Z{xJf7&HubOgK|(9AU|aJ_P?M1`7iNn{6ByFe$TyoW{;5X{A>H)|GvJ$zkB}0_3wH9MgF7Qixc1kH~~(86W|0m0ZxDu z-~>1UPJk2O1ULasfD_;ZH~~(86W|0m0ZxDu-~>1UPJk2O1ULasfD_;ZH~~(86W|0m zfq#&||NZ>Wf1Q8%cdS46oAEzge?R{BKPa>Q3l8+H6{ME$n=n z&HQ?F3xlt!vx`d1X^mc|@J-T8Xqc?R7A9MZqXtTks@Idi-k{ z^toh8AAZ(?KigxeeTBBT;ZQDW%=~~NEmPY1NEK7$5RED&=B((YGHc~Cg9>%lq4#f} zhp$6@@yn?|h_<=GbmKr~yMH=Pd=U>3Cydy4e&%>&V+2|r+X{on^nxlsEjHgR9o2N2 zaOeJYSj$wI`K=PVhc_)L_8c z-*JXJdt$&`Q;i-P^MzWL8~`3#vl(r5YgW4X39hQF!X=k)GJP zO=eN@HM9>>ccz;2l{O1rVboADGx>| z+=uMw2H~-W{jiCxhuJ&#fb-O0%*cKj`2E~b7^t=#`?~7VKS!v*XnTFyW7i8DH}oY; zI%7yD$U0;J4xccFT)?!w--){{s~~^98r^qrHz@DAfM3p*z^~aSK_%Xn4Vsohtutvw z-{r5F>O;ZsQ({Yh&zJ-mKfJN*dkuE`7}M%eA5iU;e0@t*6`Gfwg`Y>LvMSY6@TgiR zi2IzQOuI^`nNRj&-(nILCH4Tzz3XsYK`qQ5eiYvvK7*#4d|*XXC8Qf!(08WS;FoqK zb|k2wgUf1cjWeYar@KR!%U$wYLow*un=;PLZz0?zi?W$!&OXyD!>cRxX6Q>fLlUUm^bSI<==Y)etoUX z+7B9nJ-WLgWZHK~9d!uQc1W;NeJb!CRzY&!IV_pnfsNn4QRzLj>Gaerm>Oe5f1)2? zP?a4!*tQz`nJBRfB2DO1h8OYYoC<2t6+`xnAOWjQbm+>_Vd&G_9$#LxVdsQgW_oY4 zpwlMCQt{bKFyN;)+ca$rjw#HNZI& zEjr}bQTbZ3&%k8A8GX2J2y^BBW!R{4n5sFF&jfuDlY`@W%OVebMlEMY)N6=?gYjnU zINT1KG7Z>`j0tV9$pfap4aF86cgP-l4d3@o1LMsmw5TNod{qv^!6_NQwoS!mm)EFq zr5i1`J%VkmmRMG$LAzhbldofG&W7){fThz{qFz)FI%IkQTwbQa4i0<*s~YQ>1}YJY zy|3aV3r$)na0-=rWC0ACu?%Wn8M0p4fjE<&i8H<@1JB(S?6N~3z*Lo$794^BnmV*; zh#oCkpo>YPHQAWCPi4K8s+iq<&Oi@VlNNv)J?m2fS(O}qSzG|UsR^z zM>gToNjD+TQ9?}%{fwIu4B7c&WwzppHvMW(2F#3l%y@52!^g`#vC&x>U$#e5UCR%l zoy8ekR%Jx{&#S{zv(q8@f)$%N{w4MeEx`AWMuMG_8GWg%3w4j)$Ds44z~FcdHOp)_ zE{QcmTbBqZD$!D$^%W*$1mmItb^3I|5oW(iHs%G4WZs;&VcY8O!Z7{m zAk{TyFWMW(&kgA~>tiB3TW`)jXsp5AkCPa^@*-4UphNHbT!zhKpP^dTVHmyt0=|v2 zW0Q4eU|{wRjOo^7H>@4ZJZuXGrQzow{q{_BFg^rjomXM+8fE%bX(&va1vDiE; zAA4&V&?k!(uz2J%xT{bOX>n)aRe2SZT^)@}`j$gNt2!-NbOTn)%Zk^|JZZ(ONGxqV zgGVnf!;9ofygxph>g;|3;(70}?#L_3pw*PVHL?JPSliKK=oi>~TRyzDeJh;5BpV-{ zIY!CGML^YP8BX1}fvQtd#>?k>usM2t(4lh-8m5@hr)TWNueWEx&qIz(Mp8WWe0L?f z<~?E-u8K!l+h@F9V1i0tg?MOr0W70RsNl*m_<6VzReHTydRX=hW;TbxteSYdIU*kN zwp*dI*9^?hK+K-@4fZ%%v0oFfqvFIPa87#%OtVm7rH?M*gG5tyP3|S&U$bFc)fAzd zNQM_*Rq$J7F1#9+2r9a_D6l;blb%|!U!FSSiyw%QCr5(o4IQ>E;hoI-WG5AQCI#c?B5 zFxT<|ruvz($LoWjkFhb^Z_7T)Cgv^kAjgiiqGA|@ znyY6aBcNdnXF%)zBqXh zELLB^#dGqY%kDT8KJhlp9<9$F+j1FRH$0Wi?bgJOZ_2o!b1y9Q)Q3Z%kyQIG3pSxm z51j8`!5Mk)p;wm<9l!50u25HCjpgM?R$dCK?&i#m+gX?qN5ad+maMy`3Y#;&7jBEa<7hWzbQsYNJsg<}_qV|QRaXEfzDDT9A1GnIv>nkkG@T9I(Ho%P} zFVGCy&x~9lgtsoQWN$)?WE(>k2-j?^hNmk{=v^X8Si8!IwwH7>Q@w+ryXX)l{QimA zb>byb7mKNWt}5*Ok;QOsTP;jKqsrWvn2NW?9f9u$`+`A%Ic(T|km~c?2)~82QqbR$ zcJ_FL&u!*nv2z_9AkrBOpP*vL z7Qns0hj_R_f!%nZCwfh*#=d`*#avHtPkn`7R-VFP0rIuBzpta(kNDu_pDy6%-T}$1 zEK*4F4enpX4y zo4r2aci$tZ9#<|aUJ;8LH*2XE_R65HwGe)U=fd$0{*Ein8rkW;UxZ6+s-Xn)HYxTsbd^36y`J6fJu!&;j>rEG( z42A(-cKB&*G?K4O>E$=BQkH3Fu(z5P+iTn~D&n;Scgu}8%nrhd_q3=dxEmY{WK_pw zJ67r&0Uzv6gT`BDXu6|MkKGl6D_vgTjWP2eepmq3%g-&YuA0!|tViDu8ikvNs5KP;58Az@35NO|p?<4r|Bz7-)^@@Vc>gSkf zdA$p1pGCzi)}gOnDHT2(evG=CsY!3n=m{|uDlo9T72AEj!h)z1=s(Yl-QG6{YdRF^ z4TUmLEO<+e9+nRpbJpR=#$Y&}Aw_YX8vRZ8ELS5y?Q&t`NqIl6)C;BSo?vv>a(pLW>($8Fnl5FH=>Zei8Ma8&b#$8;0)tcUMelRAwzQd1a9jVpd6NCeO%5eKsF(%JngbO1F zP&iT-a;uTLvp5{q8DGScCw(E@?hb5-M_Af02=|^S#6iVXsNug8+h07y;oWZ7_5Cx| zKP4X%4%EQ3-BqA9Ly4WRNCP|s)j(anMS02FCM_2|wx#74e9yW9*M1Cy`Yq-(v(kcE z)NdsAq0QJIa@!-Oi4fm+13aRXF!I%2Jfmeu@2a>B{q7Hd-o={i^m8s)VKkQ7Fjku_ z3^$=oE6nKBSJz;SJZ-6tl@RmLl>MQefd@JU;TA(d4IeQe=sx&;=#QhsVwwM=6jVq%O2yC5VJa#vGY4|*V1^SgcTQx( zpmXZ<{pM2aQv3|@YmDgBG-Y<*=y;)Q@E6QTGocUERpF(p6oxldfbE!geEq2%qVtYJ zZ`%mw;jLVlcw@OxbiR}E8@3C+UH^&mvimddm!4&k`Ul~|K_+<4$BZTUcOlr-2u8Sf z;n>a!xUk^|Gd?*NW0t&x)^H$j*(=n*J6w!k341iZ-C zX6H61fo-NfT zPoBB35o~T~ur?_-nfpddV8DV{JQb)!e>Bi$?a%we)=3($wx1nqfjv>r$bfAwFr}3{ zJD|qw6c{>30`HytT6FtucyqA`R+=BhS~Qzwp)Qy6xepJ5QHAbiEB;X8K`i!yIU|n1Qy<)^xv(i&f;)vZZcte=r%Je+YDIgoUbSv+Jc4Q=Rj0!z~=b(gPKtS@Gy7v?`NjKaT0#GXHUgi)L_mLQ&}(fD=;A@0b=NISftYg?+O&? zu#o4>J1YUYwB3O!yI-hZX-3cW`vI8`PT|$MrSN6!ckp;!1UeU@Vc#knR$<`-s9lpz zY4$c_=_S?7wq-VGIW8Jj;|p1`|4C@&RSAQ!2fNpy441sn0xCxbw$(Jlnz1v$>O~{C zPZ$ha&+|}&9}d}*&Qk9eHlu5=lXzxf3-o=fLwU%o>0F&K97S%xH5JD}ug5;h!FMB$ z@EwVlB!P@!VlESPRg85`C$QhD=>SuV=u=m+ss53QxMRaWAY?xQJv!xML$`5BtpVM9 z(t`HOF<@i;O3WX zeXu=Y8pL}QpyNam*TpeP8K5yfodK3?z8H__1 zutB&^R0`dbcEIct=IrYoW|Ys>mnho7KvJ3n$^v?0%=9Sq{WT36Gi~UN#SKDJkqvu9 z@d6&qC(*o16U~RI(M|_KP}zWod12;s`Nr$uklhWjrM+Nk)&qzhmWsQ-NwLS3E_hft z9fz95L58O-G|T%=MyDLmp`lQ!-~0^BinpOd>;sTA9e__m%9zOm3m~>C7r)qUVSHkq z;K}+Re6r&P4C-AdAE(o#-!4+37nmB*H{P`|OCG$Zocd^E{|tE_$U}v-9GU@Fcimvr z#tz2G`wrlTG54XY(hyuON5C_^Rp8N)NWFZRiGmI9VFJ5Z`lhG{9Y7JVNfM18Mj6xE z8ZL1Bwl*ywt>}PMV@OR|#e7UOX8T_4i`8=v!7R)7vf9g&!NNyMF|A|q^Q3m{@TgTyeI7EJe1dqmY^U>Nds)-b;gn9(USROx+JTj9%Np72LN1Gr4~g;c3CF7X(O?sakK8&C|Y=|5pP{}PhN zZ$ZMx9Y7tkV0&&*WRemVIOFrfkG{$%()01KYz)}{p%qi(45|G#>e_S(eNTKz@ z3kbS0Jk^hf>#ehKMC&qGxTzKoCS+30k&0~imQ65O&5WMSOT^*2H(`#3vZl$OSvD=6;9UK_xd~c1TYY@S^a; zFnfGem5!;C4e2SdpQ-l!Cit!-2V*`e&}OfS@tW~vFt)5_3UArco0uwDtI9qq)hQ42 z6m8(V`(pHSFl9fFQh}^_2JF`jshB$In2;E<8Iw9mj4dyMx1WsYD|x=?){)3)mZ(DG z+ik)TyE{-?_5&XnWI=a{C0o~C3hE6-_+WHB#Ew4=r$(vbt$HoG^^`6hzNs(1SmZ}Z zJk?koo7eDk`E2|ZeOq`ucpzhE)r0FIU#gNUKYeX;Kc8^J#Za_1rG*cRgoYNqR&@QbyO#qKD5z_%3>lFP=W2cO!)>EqB~*a zwj?}lIv?$uOPIlJqe0g&nrgdZMV|`bCMQp0*Ytd%>K2BJKujQv-JP zO-)v_XqWI#PZe4^PlqK8J+Qr>0v$2v9BlZRkDaG8;nXGz7{2m84jnlc=MH(p#LN0K zuE+UI$e7_+vrs+`M1;a_8#C4=;3-U?w+VYwEH!WYGiLIkBk1~R6wFWi1Q|(o?A?j; zp)=Z?$th65C!vuTFYn8{w(f)LPiwJ69BBq?qVF=!cV5FmhbSiV&0$%7xfdq3Z^CMuJe16_p`Y8W$9ZGw zsCv8zx$d@fX+ar=T&TgK96h$)WDpf;u?(H8_2{;XAF;>gL%6?Ei}mZd5ladpVfIf| zc0!dF`@#1(^LS|_xSG|$E00rX(x+W6>e(Wv@mJ>$r$xo@@c*mQu7? zrUX$vQqWvb3X#1;nDp_$Ffd@92W5T+va7inQIb&f%Pdpxm{1^4Oc++9byfK=&xGNCHnK!|fH<7}X{4SW# zqCih9v}2tq2EJci2PbQ6SiO@rwB~{c+~j1-UV2r4Mnel2$%6{YQP>xgtCt8z39i6` zC1r5>+AloPlLuX<(YU(vHqJ}_fsaO9Mw#V2s_yY8s{eaGd~x?MqZqDEH<%`1nBp6l zGgAgkC1Pul1v~DC9|*_T(ec~+2qWJ=f?n|>VMgj~?3!%LTK4OL`8K7D!5nqgXDERU zn)`$)Z}XYJI4vyM_XhX-D6nmj4Ag|i3zgdS>Fw^u^x@o_==VJv5AuIN^Hy_KjhKsu zN%tsiLk3@3DAOG~W;45Yufs2m7VM0`Rgg8af@p}Zvs^PMv&i=#12x0ybD=XgCVI9Y%d&8E!$W<&?(ABO?v-_c{$QfTNr$Rs&5 z!ToVQ%--ZZXl1?zUlgjq<6hZFSntCNN6ta#+!EpCu27h<;T!XG)hQS~AsgbMS>}1# zmc5Zs49;c^P@#Wb=rH{Twq&dat-M-h*nxFq(F_}Qo!(1q`lSqu8dt&Tc_~=>#FSm^ zs7ogw3&tNFvG8F13`jDLg7wE^h1ax&uzf87EA$NLikZ`Jp#0u%Wzu=5yJJhOb!@~> zkAs-Q>s~Y2Q);De%Xi@tMK9)wb{^R`;%12;2EmNwojb{cYf8u zUZstAfAd}FC_4!{Co&*iPXL`;j96a(Ec|r+86}**hI#&~8m>OMMOk`>;(mt)2(L~+ zsdW!}lAk_ncvJ$x`}pYDw+=qewP6pNodeR&jvcr4CIc7J;l>&Zx@nIlyG-{HwdqhA zx?I(zGp2+9^UQ!Y@o=I(`fq~vpqIE{Sr&{h8AA@sRlwNqQNp(QN>JR?j)y#df$Y0E ztskEUhu#i=OVcgrW9o}>NyTX#zo?W-mX8x%8>>ynY*l5pEsTKe*XA+#<&05sxdF z(M!}{V&1N6_>wG#5wA%Wg)SE9Fpm^Bazkx2*{gcd_DEH|0K2 zhGFqiP#l#g``(m>L$e~l*oQ=mXW@`_dkW*?6$lj>cGzKPNu{0^G2s3H>tf?DD_;uX z&I~+k>@B-H-I(rt5RGFtS>ocbuaxSkcxrs{1xQWOWlMUz1EWb3VQhUHTKVVU({eKoI)#)9DhV1#QTwL4Oj1f6ztZJt&PH5c) zOB^r2<}nYM=X>X3!$);2dB`w%qASdIs4@YpW5?nDJ-}C zj7sX+_;%!d)b3YENhi!hW|TEsa={5toKA$byr)=mvj*-THe^$-o=3moiWu*!3lp95 zuwz>?RTyhWM|{@BR;d^D)@c-DZ?25}FFc|asHwx9m6iBW<02@h{>0KVm3X8Vi$~Ju z3Rk#4p@KacU{ZS(%#EnRC%oqn@XLVBEuIDs--LqR=fSvY)(xC^>KOXYt;7RkE!nV& z5Zrvano2ri#(ur7NI(5pBn!TH5_b7K0;WqoA8M#6Yj2$dV-2g(=>8QL_hlH>H$;oR z7?6+ILIXC%e=n?$JWB>9&jHmHcDVjs3J8f!RHEiQ=J~?$xGpyWxAl?Vi+|Hkmh`A6 zY8n(lpU2JEJV%Wk5LbbZT$7<^oe)DVZa@`TAWT_!5^`PJk+(>TPW|>4-y|=^BZuaI z;}r`yul5FiYKqWdYB^+$eMBALzsCsgaM^*i?J)8eLB-8XMCkxaI6UwXItIMM-L-E~ z-LVmZuBfuFM_-qZjWl7=kB>MdFOa&q+7c$0y~N6)B`{R|Idy!DSoZo;A&B%fSx@Q& zRO-pcoUCHuSYJR{{AKVqHe-*E+JZjwjN!Je3jOhCC%m1ZOn)p+#clhI*)8Y*%jEO> zhRo__YLAI=M|8G)oK%bLdrhByq!UQ>wRnhq{k(>E&3(v3BA7l!j_qPV7+&>(8kG>UR-HRcag#1y>1__%2TCdzAmRc z2VO?|=?1K=V1UPJk2O1ULasfD_;ZH~~(86W|0m z0ZxDu-~>1UPJk2O1ULasfD_;ZH~~(86W|0m0ZxDu-~>1UPJk2O1ULasfD_;ZH~~(8 z6W|0m0ZxDu-~>1UPJk2O1ULasfD_;ZH~~)JA1ClT@dsS~miPmK!~Z&l)vGUFl?Ogh z_-p$=#XuOYuz1tbm8-TbAF^!mmc>KdT*rZKFSO0#i#QjeG^Z%Co|ED`~`oD z|9_B&O`{ZH+m{1ia_PV+Z+{;K7;^_?{vyH12`bTgwcJc{!2uz=ea^w=8bqv*I# z7t%F@0Ge%KUFS_~1Rd6rEP?74OZxEpQn+bi%{~r&Np-kS!REW)z$4v=T~=;OA0OU^ zwJvWU?xZ>!USPt`+L;NbLzLJdci+PxrL{2m*Efo`P6p%aIncjPHH=<6M)q^jN#V2# z2AnGHf!@jQ&{}1}4lCAT18*inlFt_GcWN4Q^r-=R;I1ya(Ch%VH)dkuXB&LI`x1Pa zbs6@(i-hYl3S~(%)z~m2HO6t942QW-fRzuPp{8>K+$cK>A(u*E+{4F0yAm~e@Jj>s zul)b$lz8Yr(f;wA|Cap!$5)}>O2BW_Ki*Kz|F`V_`ta}g|2^@?{v+o1UPJk2O1ULasfD_;ZH~~(86W|0m z0ZxDu-~>21UPJk2O z1ULasfD_;ZH~~(86W|0m0ZxDu-~>1UPJk2O1ULasfD_;ZH~~)JZxQ&N`3HYb{H@=M zzaS4l^N)_d@R$GD?c_x*5dn{RkHi}?aDg!*nxQTaESPUL#kVj!qXg$-Q9d+FjnVmjV^x(o3TRC8B? zC6J`alRuvR^29`P zU(XTbmAgI3^z%vNq!-i3;17qTVFO!4G~(u02l^oII{4j98;6i_Y&a4I2BD z91-nQd7E-f60@{JvTNxn(h;c|Ga9wuUs{7f$+!f0Btm{H3$! zI+NFCE+Ah%Zxbx8O%@ED)I(_AzfRh^a~)ZB<~#Y~?0Isyl9{w$!UMsq4QbN3hj@bi zJM*P2``3{B-=cKyFg>YisFG|-u#V)8q+U9Fzc<;uszl<}!$W!}!dIF-cE7ZH21Wkq z^tZOH;f;8@MYM9$XWq)Jc=1x>kv#87=HeQcOp$uwY_}ozyhW_7iCAOxQgNdCU0%f@ zApGk!c=~&~L|c0-=PBOQ;gy|97^c!XgfPEfoYj-k6D|FgOI&$2mZvakY1W#072@W& zP@=JC5V1|yp10FemsnDe#Cwt+$*X?&hWDq_zc==f#AWr}?Bw%j`3i0ceE-{u(!=NH zNV7Ezq+yR+B;IwIQj5gC(u`@n`M+u+q_a03ksb`>kwjHqwzk=^?5JRM=~DZ{GX%`!%2-{z(*h_2@at{j4M8uDBb5HCYDI zKb`)MH^s#FPYt~E!!wD?+g^zhl+O^Cx2zD~Dfq%$`g|*~r2PwT*ByTzk>y2PJ{Td| zJ1dy*YTH8em6YBM-kO{6j}XVyR><;?=OvQaf+<5k;u z$MSW>fy<1E;q&^5i&ETpVG>HbYyB$G+JmEsKb?NJr|!a<@+i{9;}bc|AV#oso4Qbz zLd%p(O~{JLxun;{S<>9N3N^D*$h8MTB^R8gN__jF)O*So zNx6Yo`gxeQG;@@uY*Cs8;X*3OirzX%507w?I>wzL8=Ex+wLSVsO?%#ykc)C9UK?%y zc>VW(HbErreOzRayH*t9@=~09X^)$@^Lv)C>$KaLcRIwlc|C|!X>YfT74hQwhj)n9 zjbViT{(<7MCVR2Ta|>eXw++0Z9izl{Z8wS7XZE~#zWYV<5A*pJT?#~T{7A9ucal(_ z??R-9`S7N%87Vf~cbG6zED{y3>f$9-_4?!a-(l5Lrgg(s8ZOh2x%8k2n`JMhc)pA5 zn7oSkQEDU|mu*E3v9Tk6)D}q3999s%8?;hdJjPn~_}4J0kM?6hj`3_s?io9B(WL0? zy*+P`%GsMF1AVrW1e+)*DL+L9I%sD1uAj>9+|Vt(zNbs_A@`l2bH$5nzb)!yx5KzU zUjLO{zPfqDopc+1tEcF?X053BhY#;%oORYNy$d|wV0j){ck*Hurt@l7R%NC}DiKlN zt9d(LS&4%Di!z8UOL!L+mAN_C4iyJ!=n`e#BY*t--?@h(nznlL=B#ig9`5?dGa9T++)WM= z>6*r59u#cJB44y*OZXGMsU27)} z5CtFqA}R{1=BejR5dT~lC-QD`7saH`%o2~gC`z2IL0sFklNVuLBC59KyRBc(iVm78 z|MB!Qk57_01}6MGrFG;<8%> zTSz`Q=0&!6izPX&U4jI9zu;~{r1bnP3E8nhO&WErQau-1^(RMH8j2BOI)Wm+1<;+f(!1GLQ1a z3ePG;mbw>3`ZbHhOQ%_hYy39zgwytmy>t>q&g;F1A@kR`&C{DF`lvlnfBZm z{pt4a{Xhl&wH*$GllEQ0p|d}6aBK##NArf*d1Wu&T7^blAJ^w1pV;jp`!BBu`+Hx- zqm;zF$|Oa8pY%CI3;ji8VR+l^R*8amT1m2~)g?mwWYB(IWS=VW!K*oWR5{pwIn3UjBDR91sVkXNf+x8;NhVXYjOMOc5*X z3LyH#pA}tC9WEZ>aVPVmq&ur4hY~Lxs7OTY{3KeWyG1Wm2yEH||UWO7bDjqH=gQoFtM5!p_{VASur6_B7qKrqXTDcX! zs{7;lpORiJ`Y_EUYf;`iQJJwFG1p#Al)dXJQS#^_Z;C@t(Hmh95zwtc1jfG1YH3+O zoVN+#xsN*_KI?SMEw1@V7TuM=+wQYYbUCS*cfrxzjjz9kIQuZ0=dZFy_KtICg%-a2@WWQ}D~1^b@a>x(~- z=>hh#fkM7OzfoHl+?64laynlc_*_A_y)r>sR5()R8>S=cH@4FT08HrbaY!^*ivR~vfq@Vcw50UtQ z$0(xXK^jkUoPk(lu28(Da5Qhiz(lt*cY6|-@7D2_PCCh}UZazFKOvKF3{&FWF&$21 zT>8n2%{xzgojrtD)SAP4b4r0wPO>EC&B)*xYqq)l>HLqoby(~j`am>ash_wwkQF&E zTrAcPEasVK<%;HR?-CVBFN?H>`iq9m+b=$jrUWs*OVluPwAlBdn%HUVNZ!u}6GS;C z?nG_V9MSjw4utdtBdQ-*&RhSH;@Nl}BF42Qy4J=|Bg`}piPkz?=53x7z*9b|N(4pS z=cQd||9JfmGHDYZTrovFZQ*Hgq2Ckn5yxz?{rBBG^Y=Dl{oysD^GzM1&(oiYk_qE% z=5{GjGb>jVzwxGc_1ZJyg&T(vYfF+u@l)pz2GRq(iPBg?+5ND%t5ucXq%efg?7U9A zk5A$m4EaX9ICxlO*%HVz3EfYKKaU||4MT})txJDA{cD-A!h|ggNL>^N&sH^%F^+0N z#mKwT_tAqSgwRm3e*AnXvCv1lH*cUY{pD;~S&1S!PclmAxFePHKXh99D>X%MJ6Oh- z-IygczV$`wwlRUU5YLj`$~hvf4|kF#+`K5M_FFDJxXfJmH71ta5MCtp52_H1?{`Id zBKU{kPnZABRvlU0d{1f0xE!f)^JZ!Aji=IE1`|m0*M`zTes0o?IgcgZHTOuK^;DL9 z^p}y|ALmIIYCe=&g$GO5II58zx`mS6icw^p|7eLp=v8v(`i0Wo(PznQ4JC5#?0T{% zUf>t9x5#eu@zQ#;6oKz6C(`chX!6z^U($0^|37~I^Ngqyd3m{t%unZwmY2>GH^yg* z_(~O`^zW~;S{Dd-g9}cJmM34&inwke)-<@o%MUUU*{w7Z`6Nq4`m~HU_vAuR#;ejYW24~i}llao#&K^ zuN&R6{&fDA_@9uL>KRJoSUss3B^Fp(TSlOydl zTtVogHlD0b(wFr+uOST{?k1V!GL&3h^Ii~hY#W*EEB^cnw6 z@WAy~_RSlnf)l(bf&aK%K_A6nz$G|x1k?LCV~)Yr-?F%l5= zTdR2|CqxqAmivgqS1gE_kbS%fJ6s6E*#mj&ubchx{=d(xaWXvWE45f-F4I`GP!O7+ zD-*l$gn^@$OV;?FkVajZNRG(=C^$GuR~E(g7RKCIEq$_avdpJ=oAk`{i-Ovr5!s`v zV#ti5DskAp5^_XNykOqcSh9VBf?)Nb7BVu-Uf`nE&F}S0Synb6Q!+2LPB6|rnqTW! zCveX9`{U=oBL`!6cr%xmkh`3BtJ{{Z&}hxe?mR%8{W+KSvaFZ5`sN&7VO1JWVfP)P za8IoGaug}vY~aDmp_dWw)x5+`jYV!QA3pQy!jFhO%PT}VMW=}g5;D7w{VZ|$$Q0hZ z(`MrIEl8IgSi{TQDg$)`SzulPe0&Iy>*_*S+X~4m|=>Wf!8`> zWy%n7VcL8`=6#2VUnS#tvMYIW8?D?-8q>ww9eWbT14!{N&)(v^otDJs70J9Br&{r% zwySOmMZH`MTqYCm+g^&WC4rah)+LInzUIa>jQZo_zsYV(#E&iy6L~p0h=aAuc)@Yw z#kENi-p)!-QOku!(UX2pL`#M($sBcdu_$Bwx~y5#)`@S+Dn+#qe`YC|PPsX^=AtNi zvXEG70OD+G9l}35Pjpyqve>O{gxi7LfkbDLNK{)Jz-xMAA)epwE>C+APgM7z2>=6>aVIHY|+>LZ{&S< zP}FYQE>cCLgCJc{$|l*8WJ{7ou!15@KoD$*R0UKlC@6@6ND*mbp@X6ziXyw4grJygI|)ZmLlQg-pKy6A}S zc=p$IZ%nQ;+;k1i_Sh*7{^Ec-Xe|*%-_+xeCFzLOeo^`KoM|*t9=i>@a(qxG3@t z@BGdR(WbH-K6Khcv@Y=wzoH)(+g^|3bHi@(zLAgk&Y8X3-tDb?TBcBBS1ix(R8!?Q zyj{y*JF$@ed7wn-sI#bE&>Ct$@E;YitP?vmg&zHI} zQ=1TME5aPMuc9VmuTZ|%I|Y^8-{b}sikUvrrJ~%oNge;i1(*<;(dEpL&s+7k=A-U+!bi#P5HfgI!kWMtT7YR%g7q%vki4R=@ItB)MUt`Q8XAc;Xf+Nesc zd9Nz<{BKb!#){lPtQKA+kkP#*E?aXO^WA@3pwV?1v(W3nieuDq@f`_vaL!Szb8kG> zl{~kra2b63!e9QC#v-iivNf(`y%E2D zSDAdcX(|!W+>E^(u)*`Php^Nz1kc#MfO3|5LLU3J95?l@zTjE{lGyPn6j6|jFK|3T`QH-YN+Fii&K8o2FN+prq)6~rUuRPFE3aW*I`gT~EC`RP zJWqa&Vd9T=XJR{R*GfJ9eNUu|l{YDgBVQ+qvs(=%MGG0?Q+L*hdUQrF7p2bRPtD5a zt*N27S@gKL-9SMQ6|BbBkk1x7xE&NbPUd;o;8ER4Wi_$3Wij8Zas_{ma-Mh~(N9qD zWIMm5W2eZ}#)!Y?nuuSYTPa$1%ueju-^~B^cZSGsG?l-ur$XxZM{ju&&vM>%^ z>%|bUL#qyNr>(CTvn{Gq>n!6<^gI%E?OG;sO-ia8X!Q_=)`iK zL8QLuo}rCMKmIT`O6GZO$u0|VlU^N9X?{BI@_HkYjQLmCAl!%_!))Q1J^IA;-I2(f zAm{Ra?aJrb&C-y%{B@^pV7@W)1%5?xc&pGKYk#;3W3?xd0Uw;myq&(}ZL)&2>Zu~T zjt60Vh%QwZw}k(RJ&IKW?E)3k)nvw+L4K-ME+%#gA`|`hk$Gc|*sKCgs?XDjtVnUj z)_v<1-wIR0K9{QDmDQbC>fA(9UGoH{+sh))>s*m~|7YhkRiMA-7=Ju1jQ_20szC3= zL;g}nOEIOK!QVPRkw5>CBEK&00AJhHQ!rktAbIsVqAvN|2Y$$jr~JH8Q?cn0lG{f% zio@lM#R+-^;xF2Y{Eme}iIK0ISfflv;w$GYKG|g>vFCpi>AG2nj}ynlxm|_g7ZXWh z-Aw|i+aHNrOFSxX#;NbExJ_Foxnlv7&_Cl$H$+kRt}`6M_kk1k@@qV9|92H}Cud~e}3hE`afRk}pTTSgZg{DA@1cc~xjY^pECjp};+6wC05rps_esv5gX zwJ>`z!QW!a)=(s=ow!H!zD^@Kr!u8p|3B@9DOTZhf%*EGls<3+56aM|*zh5IXwiPb zBeoHhzJ9h~^`&a;{c%}5ntPV)@lBw*_2sB0iwevxP(qqm%^*2{C+pm*om94Y4z^&` zEo}LYL2CJ5G0EEGhPS+vr`*Q;sI8Il6cMxvyI;ViUU~BbMe=9K@*z~}`Txs-3j+Q1 zod)BSS%Yw?NGix|F zW5$R;T&j+r`Jhaj+{(uzv3+Dic{;wB7mtVBIw7&pm`Oj#HN|c?5p*BXhCr`d!XJ6zB97Y9Uw8jjl}K0Plo+u+EPfVpnm6GUF7bV9 zE{CueK}Qs4jF*y2cy{xzWtrtA>^ zGH9T(!Mynp2Lc&FtTL^k37*9MR~NG!XmaM zky^YgJbQ+_^rHxGy_$<1aaJXiUPa^g*Y3urrRw0KxDxzA z;5@u?>bOMO`=8WLbyOJULw!(+ry8Cwq!ZS!r;K&iO00}%^11DCjGq&aIkX)oRYn9f zKh1_HjtIoF&fcW7e_f%*mDBO!@qPTLrK`vQ51a0$WyU)<*?X0woA-9 zTg(3ed=MFUs)+v{8R2bI=&j@4oG&q7g$b_hp2q8WI!B@r*d(6tcjhBPS=hSJg8$&- zUOs|cTiio|!T_{lk$ylJyz`5P^n zB5B)yRcSW=(!FW?(z|y2Wg8Fky|tI}ok0!p)=inbGf8`Rxw@z*Xk4FH?0BCKj8Nk2 z1BhrrK|cRMjthU!tR9hG;JV9#orR)KhZ*AY&NkxDYCCyOheyRM`jY77cMY++cc19j z;w@s7w~SYlYRdcBF<1O!{!&rtRAq5dyDchh`K=Yx#8bc0qBfC>_!C+p(x#S*7f)Vu z>DX^53JWuY%dJ!R>!Y5Ce(3Cx`urd8;_yzj4c3kOy6^yGlej0)nYXF9Ty*kg zVx3RHRvsSyh3mYNFFG4EU91KDbk<}>LQCy^NaC?Ji{`H=>D7Qyv=$t{5`SXc^8fgMUQMh^9F*kx&@sMyjsnhQpdm9 zOWG+{(G>ES-v_Gw?hniq%ceRaO7L3hEB28%EpR)okF#DJz?aXACqIs7;NG?eD9fTI zDu1X%a`n?i?9!)Gr2XwDl4XVGNhgzdoS&{t`OY_y1W#PRQWJ_XS*n}7AJ3)Mc21|w zEay?ptyWm-WO1xZzJ$Gvmp=Zps8~(j4j98IRxmZTa3=9lVN|fucpCBR-VuCSG85BZ zG>jjc_W(~VZ^A#SyvBSlg_4bRDHIeJjqeQaCPTkmz}CrzQb&xgN){P2$ksX$zQn$U zO5d+RslQF6{yMgj+t)3kM~zkJ-tqI4I?I6yH+)F3<91Rie{!Tg|9KVSNVvrZ;u8bv z#Pb1wTBxf-%ALjG_vR8IIj9#OH!TnO>#Ab zB;lq~(jraz{m=4=GOE&-8q)~>O7a(tNlF(U#=nfE;&-&;siHGhIQPCXm6G;V>iG8^ zl!jXkzQ!JRC*pI?mf!)EO1MW}BGvD*inP{BAnlMWDlq6h8L{CG{=`O`F5@qzPM|OF z6G{Z`{&ObP6O}?HTk7G#m(Ec#Of4$d;jF~SgrL)3^pJe;IhJh7q2kV>q&;AV8>~si z1!_sur*(l_EbmmD~S8a$VmubZNhyQ?eer2$X{Uj2c zJpX6@2Q?Xa8UL*TA)z}0SsVPf`LibJAO1m)@pk_|pMUgs=61SBX3C^0CeQy_f9f&| z{)_(D{}1qIcqjER>aHCIK1Rnd=KkIerRT{4m?i)rwjUX1*K>gBr4+=pGXVOk3Zcut z<}ziD4?rU;^Pz`%Ye1W}A|Thi0IaYc2Me5ZnQGrp**wyo2~{{fW1dWDwORNFf_jDX zpfl|-!)!v8A<cwce(PN}4i}S8aT*?stE* zX1x*neam~~>Z(OZ-dO>HrM*RJHy-BxP3=ZkVUZk}OVQ|k&qCBkDH*veu;rY8tce~Q z*p2WX%s|_a7GynrgnN8n0FrPv7nNC-h7b$@~v!eKDqwegiDgy}xsr z(vJ>+wQ8$7t4$IYzT#~DnuMTWZ%BdW3e z$jH01>|B+t93^ovqWnFN#|UFr(einn_K78Y&|+MS11Z5r?r!|FldO; ze7Y4hnpzGV+5CeM>tZ!KYU4bpE;XJJ-us)8WwVhfVeSOnf=X$j;R_gXo99+(fpIrzh zcV;OC#7kQV*3KX#`WBGy#xC8r0Gt16Kcd1AU67p~XKFKoc<6 zW|OTP_)d?*MCKydCZzw@Jsw{|M?*c45 zxdy6TQVD!mw*``R{6Fpuuai5fSIumJ~4o7R;#z3{FGa%c2b8Lz_XEVXVZOl6LFVL;aTqsxxgqCP)LDY^q0Q(gQ zotWv!^!N$@kw-d!Wlua={$K8ca;=-7?s#8FtiA;L?SC9FpSubAcKaiAUUoOwpVSJL zpSO^@{fD?_+=m;Ck-SUqP#??H(5l=L^zyS-)ZU;HqG}Won*v>=kT5|q=Ilh59=eCF z*>(oGSEA2dFwYSw;AO+n1DTvA%oMq}U75Xn#zOStObJKS(u{B~0`UCLnrMUBFtgVy znYG02HcD5t!XHo9z-ySr?4v9D;ga5+Qn$ZzLNlYeMU@c{Hw)NsBnNEza~yz{&b0Yq zWCljowSpVl8$pvz^TCCG(yT8TKL&TVW`Y+#>jJZY7)z6R#lZ0W{R}hBg%DCQ2D)E^ zY+O$*Vk|jW3@wU_243&?hvtwl(D&yi@bG98P%u*)3ab%-d1{Zq21S%%Sn>^!cKq9D zu7Nx^90n9)=0otEn;^@e3)HTB0{EO&v(DH+**J!rW9+P71hhT1f$nN=gkG>AK-Ck5 zycM{h`vEiX_zMZ+7tn91HyZ)&{cZrA=46788}>nH?+oznL>TbvZ-$LpmO1!y-5}^A zcMZ_*j|bCVdDwhAvmUIy)ya^y{Gpf{8mOSma#6a7fU?7Ac-bT5S41>wLz^?%#&?i+ zKV{gmC6O@oz7K9acLcUQ5RFcMm5LZ@FNfVduEW<4PjZv9e@Zhj2>dd(-P`~O-=1n55OV~uan zhgQkoXOzC&%t&)`gMvMi!5@a^VE1?d6xpc*Re&Vm?$`lsoW}rjYg3^(!)lvtUvq%~ z5(R<=O`-h`+K>v#2Y$Uu0dAzXL2KF18NGjWAVbeh!1rY{psO-_AqVp#(55IR_{h&0 zx_sxdRSW%C>h^bB(Z<}&gP`*TvCM%87~22Rkr~{#fSJ~A4urlg1O4_Cf>+G10JV?G zm~*49FmpWI!E}>H%$+lGpqxDoVD-ar#v|YR;Nu@Ga3LVW?0wh{_>`tGA%zg|6G1^3 zw-ZouRfgWPRhacleL$7&g%Ei<+Q!3713K|5S?c)Dq2d`ty1RfmUlpN`YnOrxrXPgf z+`0+bIvaxFd4bTo`BB!P*KRYK&aHtaQXhc5Hz*LDML`eWSb=sPdW^YGlx;eM$Dl)_ zMxY-5DoAdX2aPtqWYmq1FzCt=$R;gzjy0VOY*?EB3Rzm9eZL!Hh2|>o>;fH|Z9T`O zE`N)ECTQ@}(I%&&2K;Vq0tJ40#kl?nWB$2h0iIcA2IM+)LB)AP;Kkk&#=|8iq3?ME z087#hT^XLj=rYY?JW;m>eGXp)zIerhf7;b-{3_2uib-BzU)e3-a_k5oYrGLK@N0(* zZNi{$djTk(b;l;(fB|K{aR+OHmRL$V|J|RVjrv&J<4k*T5;^#KHt+M^K_qc7l^a$d z;M6!|=$d=P;$@g2ZK4HK$f?9TM`i-2mB?7*WlWufW* zevqZyR=^>S!Qki2f}V4(jbhkYOTwr{dm?$`(Hk_m-e*5?3Khe2q^?=|2BlO!-> z)>@!x<7+5i4YYphbqFfYd<9$_MZv~>H-YhQFTgAF4uOB>1xP*q$ypbf-!~>fL-N|p z$J>uG?@xFzM<;FoQ~C{|U$e5nk^vG7*l_}^-=@TRthj%&KL`cWa(C7Et zAcLnv&?A<$)a5UFx`T_JI)SJbdUNG|6rgSjuhH+H_MmgDa86je9Oq0~9uhwLID*gR zaUaNJb7PM_g3C8WazE@t&?#=(sKH$h4Bz!*^8+#wr3H=X+HaQVmat52MEMWo!aO0; z7is~MvE@jPojSK}jV`LUJ_dDvaS%SC%SV4W-hic@|MG-msNQHC60a4EuH%tNEP4#x z_BU!m~7$&_cT{ zoHSJ&mB{8Jr#ObF&#HE~toI~p7Bh?e<5nR0huDp5J<5iUO$d=WC$}Iw=T{)q3XatA z-&oLbu!3*`Y%{lj+CPs%HXoh98N7p_IeD5PZdn1WyR8jA@3d!#E^9*lbz8x_Ze`%j z4+S8kX(gCp>IY86@&Wt5yR4SU#xP8?_JSG(v5-af4rs;9R8V{>0@zwpZvEo;c1ZEJ zEn`7=y5(y9^Wb;?6hJlo33$E5*+$y-*C{X?Eg3kfvQxH#<(Q7k^3BWn6-ejlTmGETr?6g_ z8(Zh|TKKruG}Rzbs5$N{( z57xW1S3tR%nc#&M1!k$&187>cCRAAe5Lo5D1oHCZ0vF$@O1=L#^o!=s%BVmTmZ@{8 zpC>tE*M6aAOVR7C2;tbpD2824)>keIV7Ex$c^-DM0#&pz*$x@ zY;SE1v}jK{^V-IJXnxupcyosis^8qkKJmH=^>zd}r%vBu>#lx^>c3bD>!cos7p_%i z2lgC;Pctt_J^vZ*RR;t1hJnG~%K^i`#;nMvGl9iZdZ0r+xxjd_1vJ|r2Z&R)17|fy zF{d$gncFf~LZg+jz`47n(5Ou+B$yk^I3V8u?i>9MA@h>K<@dFj_U~4*-k&-G-TTZ2 zO`27qf>(J=J(IuShI`Y&Qa>h>*)tFLe770;p!iJc^Qa zu&wDCbPe1-my85!e%_#dlAxoY7f=0 zk3lv5QOvwVKQP1LEU^BouFbQo18_J!-0&A}1FqaMD44qty zIXN#5K)t@DpyCHBa0<5-l)M%)6x$-DKL0HmEP}B84nS%)2(_-?4~8YiKuKZVV03ys z5PqW^T&H&w{M%P#wN0}K2#LICvnci=^zwQN_-^Gb#yZ&~3rmp&NG$e)!a~+U85_QV zSAK2+1*Z-`v1K7Pva9YvBMENc6aQO))od*&`AsZ1>$NNJ+9Vrvgbo2E>Y7rQKjzCK zuI2*@j_w&o=O)hK{*rx%hFhj^sbpt%w^Jq>Vsr~W&su^wZ@dfdzE_H@w0($H^#fd^ zi^VL3j2yURR~ctBzXUy+wjMn?n}Mbkok6ZI8bJ3`qj2J{>D)J72x7iU4~^klbJIOC zIIHIuAyYJMIjiE#VKg{i>iw_xS$SsFc_%O=Is}^iE)V#5=mg}Q&7R;JNS%BL&Wvdj9)ca1CuL_eOTO z`=X&2FCpzL1dZC|gO2-o8QfbX3_Fc8{Y^R`|o7p4rHy;}W=sE*vUxjF@Ie5_6z)JGuC*e!Jr^JWng*HcTILvsUB{I={#(5|pQ*9M8Ok^9fi9Jufz0!k zF^?5Cf!VJaP}23~(2}vK(BktIpg8F)GjhjU2zY1*RX&}`oV}2O#yt0dIgTtaKzAC` z@pmc^6Z9Txck_idZN3ZLQH}xkUQ1y*g%vXtFGexDl#IZh7nAJ1;xTZ`*?j2z!L3k` z?`x_1|0WY5ckbB&WJA&}G{ol;YPX0)dyjQ;KbDunMmk^78+DrKFC%A8nxq)rJoh0g z+6*B}H)e4Y9;hRER^9OWRr&C!T@xC;`75V;aWitMVFERIr^4A+kc-@~RpJg0n!w?& z^APvnp=gff5%$#^*WsF>rJSitrz84@D5>MWId_b>pPVuf@#51c^ri)l={bp(`QAdu zL$qMm{KH7TWE@`KzJ_D4XAE^SR^m1!mcvv1ZMdb|JCMVBvS7(EMb@n1V#IuwE_`V^ z6ZKr1#uC`%qpewQIn9wysGag$_-(R2azvkvx~l!*=$UenxJEAL@!y}Y$&GQT`~UaB zNIlYycqXmo!Ga6v;Fy8#Cejb>qA;CM`Pe3$Nxz=T=BFCRNbA7$WOindO&q5@_jbO zxsfe{Y_CaUCoPmmt{%|foNHE)y8MyZ8R#~iHL`KS4BgDRj$Baux7l7y&}IBJ-G2Mdg){x%j0|vy4Ir{sb<`RpDw%0%->@QfA8fW_wSuUIIBk3 zS56J0)3_mU()puFa#{A(?mBjK$68n|)D_*jkp=T2HnT4e z>99OG?eOoV?~smbI%rF%7b4Mwkk9A5(XZ?)tgBBvQTA*ds2AID=_A)c(C7B~oPnH_f>DW=$f>-qr z_fr$l9;y%dUUy^GzuQTfveIf<8GkICo zuO0@xJ0@(3?DH&h6|EqjAIm`NO+NwGZhfH2o|;|uVNwS(BS4y{W5`sz05W|8fQL#m z!JUt%NWK5tX|fBR8Muk%arg*u z4J7GuCbv0o4=PAza@y5?vVOZKaBoC6!Bg!M(C`o?^v}RS#Mn0n&ZuwZ-sQiB{Z}NQ zuU{0wQ)SH2^$T6u_?tvjcjg#JCr4iD{hzD81M-~lgXuO+8+r16C%S5RD1Tl z-L3HVb*%_)T7xjm6_F)ZkE2;L!%(~CUr5?AEAEQa7WCH8HKciKG+JkQ9J%$<5}jVW z5K%sJf&F$=1{r@af?g|~iRRQl;NZ7@A%(l!5a&i+_Tq3Y?f_uQsj~CqS{1)Rr*PG{ zOFM_z!zpUqiY8OUf_+%(_@|eDor!NCp(|Z1=8?i)=71`L=^E4rt>*G*xqJ>ta-uTO-$_Lnn$Y!OUehGZ~>Z+}Buv?1`UVhzi> zdk$prG7wtre;RUo63aYs#1TAKEdu)lZp@W@H{iw33($Fk3aRhEuNlQ4u~STtIFklw z<-WD(x#L@ru#W~vpbY=w;p8>{zd9$d{?-(D?Nh9E*-wle^OMQulw)pEFq*4n5G;P1#JV!_~}%hMCMK z^-GvV3on9qD?Wq7ni_Chc@aa`ES$BVVFgR4?jvL05WuqdvVmFoa6i-`*I_=--3sCv z+<}_x7BUZQN&p*vXR%^k=Rn&os46rqBA?-MKsLM(Z zDEi9)8?WDIj3lJmY#qJ=?NyXOR>A>*zu_fx*t!<9SXv3(_%egh?VSLApe-2@!84)8 zI1RvRe+YDP;c|epgb9UjEnz(2$AcV>476!XlhODN0$C{|j1^s0;ON^oQn!Efi!{h6 zWpcK^pU;TCb%80%JPie>JcryCpwN`Z+nJ3Y4?}TdAHd$$cMPMm9nkzr2j=3kuR!jq zD~ty}kV7^4wF z=E&|}kpA%x5EYUI`dQzU`utxubs_L}^;yO=twg}Z=R8#2xgVGrU<2MFU)scuiUA=+ zGET2u4zve<2gekzf{aD8AwUpdosy;oP8~Q6Y#9H-Xcg;$Zwe7;{I&+;M6EMJB@tpS zKf4*&py>tvvfT+j)@uVdJZ}Ik+|~fi>%?I4lNC0#dAopl;BKk+fBpMX(d%xH*y*Vk z(V@O3c=Jvr^z$oo^s@~OPZxpgMJbv{=(*=ew{aWCA!`a6l-G^0_6DLepINZ?zF7o6 zoe9F;FS6JPS##kVP#Y4l?>(G;$cWXOJrCZeFbh`OmkUSqJ0oeIexPBDP{igvi-YX_ z1yAKWz~QA%QpbNX$;UZ=+nV8eg$iWTBQ0*jp*ptD)(O&gn#Zw=F=UjMc$#&Ay`D@Ot&rf?5j5+GMp zmAQXHJh>|r!{IaKYf#mQR@nTwKD@T;9$Hu2gI)?VNB7>0;Od?_jy!O?!(JSy!dbgN z5p_FC!RKD@Me!$z@P(pC*lY^QQd3jlE?4P*HtZc`-(GngHT|u~>e*J$UTNbE??{;g z?+TKB|6{0QjV6w-<@6nuMcWELAzSaAMs_r0phatDaMT{lBb;Z`kc8+d2uE1Maop>V zd_C=jtjt}EK9$V`l~$f%@Au&_x6Zi?`wS((%YCOI13PZQZNFs^r->L&l+`jsIU}DV ztCxm&H#?#7vTr!0Lti;_8?JB`cg^NR&NGm@|J(Zj=*0X3@H7sJ4la>JD?hj*Z({Et zOI@bI=eJtJURNF?W1TaR5tHSp@{{kA@ADmmml~cxW19HLho>yW=ju_m=>tV%{k{g`Y z6@NoaV~XIb-(Mn^S6HAi8gF53-IvJWb9o%an05|3PXYa2b{=k8ybtyAQ{qBLwj+XN zCs3f+7ij=>5LUrQ&YIh5NMjI=o=jJmobw~>dmX;qdmYE&hp~AuM`t0T`NxSf7_tE= zz5N+^Qu+!RR%Ro(*$FtwV3yS5f1bKB6MAL>P1h!%xZ`HbyAQpg>Khr5+w>XWjkZ~! zA+HK-81x11X_3rFoJwZc!XZ%jc|CLNNfqSdnF}(5B7rwY?*Z-yY9Ugr29>Tp!Z3H& zW4)Op2U;IJ3(5`HLG%00LchZ6Y&7hqgTKEWg}6I|89AIP@C`Z>_=kUh>9*DP{4mSbezdMW z_~X}xvoQ{o@4l(@{>%Vs`H#MaF9!bDj@?#s10#=OGLga5<7L?mi#lDYA;))A@FeH# ziLnt(#vt6*;dVJG=A-z-fO9zebVOs1&I{YWpawqhpq+pc{?;o=JgL3YCMT3wA(?Ag zLWXOtq7rv`<0jgsjYS5_sA4|$eFKIz{<=t5nVrB-4NXBFp=rGHa(5?rpVN_LB9y3# zHiDP9n#0~J^N?M7naBw%6XFUp0nv|4z(M*OU+(5#WbB77zU#?#yw_Em(-1ljA6@nZ zd&d=`nznD*WS}>u`_UK)j=PGTEs4Oqe8OWf{_ol=MZZ> z56*C%4SZ7q65H8qT$F4?T=o>=Ve8WHGG$GC=;;^uAN?=Bvdp-;MMt0E^x<~Qb?NN9J`wz~adXqYFGl%-R=MvH9TThkc^NA6& z*ObN_6QUxcoX87(Lg{X@rdO?#p$#7$#Nv0j(HT)kXoQ8<8}r{0A)jtiL$!RWzr2t9 z0@)DH^j8TRw&ddvm@l#1a5Lie_l>lAq8B|QO@mMcT8Z?&Y>Jj^r%%0{Ei|!_t@piO zid#K6jC~o8rB}Cnr;nCokQdbLsg6B`#MI+^sV9#agtyN)?mZkvY;3teE;#Z6H$VG? zZkNrW27mErlWX$`!LSUGtsFrVZOoxF-p!}Ksp<>!=1lUFZST z`}#t()YXW4%-)6<>z9R|S;FC-oN^CcnD>?w-gc1tDO8p>e`qN`?#EePq;D+RIJ6wu zJz4^bdtokneICE=hd#RN%t?6rGc&H>Z#6eP`Y=~`RF=DaY%A~f#i=McCza>aZ^IY0 zw)0k0%|V}y{^8t}xydbG(#U)HQ3jr#7KAweHR35Axs9X*^SHY=wxVaZpW}w<%!3Q> zOyZ)8S-g_rsc7?jcW(5VFfQ7BAKj{Xk$aE(SRIPtE{sjMK{Ml;m#w{nN6YFBPkxJVG=)B0g)aFZ9F(t&3 ze%@?P@19HIRFsPFRq1zp_2~$j1_!9GW=rYE2OiRq_f!a_(v^e-y`Jb>^qMrBo=6N) z6hVJhtarA$L~QVtCG2}~(*CqA&cN5xpHn^(u2rp6K$j{NP~%M3emhQ3HpR4mfF^wx zJ4-m%KgHPY3gJ!u51LG1Y<6%k4&6U_@Q(r)Zr!nZ$w zj?%QDH?+wS|Jc9Ud${CZu|M`7u>WXS3u3uz46VFPae}H#xcJEgRDXCAoL&ZUL0$+q zD|!VgGvf;{O|KE1GJcU8GNl47Um3?e$UMX=UH%naD3`-Ma;li?eY6l(UDU%>8d=HX zm-X>_S1;y)K^G=E1Kid*I=na!Gu~<=dG5_| zm?v+QgMO3a@kXuFxwFp$JcF?*$f6^z2%2xldmFxn=eW}jsTgTQLznZpc#a-7eYXs^ zU;&di{|%qFIzthxf#rDnOK$Sq&)RV3Iu3HpzjnYcN@=t!tbk{9=^Zz8!$MxUp$bpv zT*}>f8s-kodHTQOPem>1^Z%^>|HdCS>H5;1UP}M@|M;&@;!)NAS%3cxzYG2|{9*qV zeh^Id5dRi_*BB2XiuE7UvOx#%X<;37%DVvKFW;*EGdGZ^)cj2`H~~cVaRb`>x<4_Z z97tTarA~*t1{1au!9;_2JrVV1J+X7-3f}W3i1?%uLNrfoAnuwJ(N>&%df;f_0tCX%?qB!Q&HSW-4yS8!&fkt9WDoS&R)ED5VHkz{$~@ykPJNdmOZ zC4_%fr_V(+7 zbFozTw+tMo0qsgC*wp zAF*?Ox+L-1a*2b$j9;RtC7G+B!IwGQBFNSClGv6k65J{_mduV+A_k&P(Y$&INvym= z?@v)6cBUuNU&iDK%=;R(Y?B;Oft%2Fr{sz2#R|mFB@oS?Kb5F?q(qo)mM1Pek|*xx zU&UV$3Iseyi3pHWAi|gIpr0tk&?AOQM39Oht$uF;-+5i0Xgrlqi*1#N^}FPVm`jQT zBBw~?9nGbF2AC36vp3M(RCQYR_eLVJ?E$@%A4#9rJxo{et%xS;A-w;B8nGWWC-xj2 z#L7CH3CiD+Hsvm&i;K;uS9fY8Uu_eq^M%&5TW>RdpIuB076XLYnjzAB9hW#Cv5%^{ zZ%XVEg7oIfqqM~mJ$&yJHhr+qpYT2!A{_L2S|9#y6W&cIGHpCkS3E#c3 ztdHyq5USjFtT%u+2y23agsNKB^dQgG;aIaOP#BQlFyrkT2Jl@4U$QMuANf9NWMxq_C~S3 z`uUIgAEpzSLn&W)a#3zQAZJkT5OqRmHs(rH8bZSG6*Gj1IZK2}7c1(I-O?7ecd6C) z^gs=BzFZ=9`}NfO2E+)nYJITEX`LixHOvpL_)B&>t-zuR21q5j6_}HyIq7WbiRFKo zP4e43v0eplEWAUFOxN_q4#xOm0iQjw1ily67uqY>9P5oO)m@3jtyzIBULzq*p<42o zu@5$}Y#kZa?14FVdSPa=e@XQZKA6m25A61YHx_kv1y&okn5?ji!2*@5NS84Mta;{P ztR_T*f@Av0gGoP0JFYUO0rIix4JWad(-#D0qeGJOEtOct&}_10UMIzD+eRAD?N36%|r9f|r19q%Xh$SDIhvD8!Nb}`x*g#B+#JWP4>ROoTi0JCuN2gmI zq{Z@vLjHq8^dh4qy4L9sZPAoWf0+|Rn6dZL&>3}MW%@9I$KIryW4wjGTJ(iAn;60+ zI@z>y-b{Mh-7}O|UnlMA@_^!4U83Qpr$lf_H8CVn2j7!uK4tHOuuTR$z%Jpgp zKM!gP1HWqtm0zjX%bb9O3q}I!H7k{cMWuu=WJ+WGQ)W^9mV|TlRx8gDhrDHkOO*nI z7iw*Y!EIOR?!%!%_4n858^y=#YgC_7*~TWqOGj4K7n~5&YH2z`{L6P7Su;)q9n}#| zxO^oJ<{Q=X7t0H$mATSo7dz^;UOyzZYDCrB+iD2~5_e4R)jhK7y{tfe^BB2&rz@6R z@RSVDcE$eqnURZJoUw{jeKJec1xpvWVZLjokX&OAtSZF=YoFnQnTNPwn;V`AUS+sp z6VsMs3GuF2qTn)V_Mn=S%y!54N#3OWE@!N7zyl5yG>Yplp7fAwmT0b@LD9dkrb`)MI&rsj^#?6bu*E?SXZ(JQdl zABB>8-fEP~N=xje`bqL&r5`q$sY7oD6NrqCB=W`u5uxL$O~cO;iI7KHv`e!*At=?P zo2}b%js045u2`FnX^O>LlxEP*XJ^p&DJ>dE(xRQ-XHtN%4n3}*OOH%`KSec#82f#I zkgd_77g(~1{_C3bo z>!bYe-9&Y37g4!=gjl`5pQ`dIpu8q|i19pKI{rr-zV*>ts@!iT(egEy_~_?>54?`1 z4IaA_O~#G5SLI^5{jw&VxcxmfQzM?X8)eYpMe+C+n`v}~8(&MKM7H1+MZ6DfT9q#g^(;{n(H8hQ^d}NL73}axCAulB( zau8;>6T;RrZLpKZHrQ}mjbOO~fH9mw?7j{I%bt@%!k041)h7Xrzilo#)!7RBT5f~2 z2_BG<91yGdXoY2@0N9r;46O3_0&)Sv4!e9QnN(Y>j}0ALfgQSeg$(@MNZt^1k#3ke zw(Ecv7C5{CGl{<;SZ!M=acc^|)Mm?(^YII$`|@jI(;*gC;N(w!F?}!D`N##^m32ix z%c^3n=ghGQvpLwb5EdDFLj_Zz$|Tf7@KSE_O=Qhc50MC2~Lf!KN$! zFVeomtETV$KP4f}QW}UPQ+4m{o_qGWdnbe_DTPufW9A~{jWjDIO^DKPz;`}_;P-@5CpyVlv~?0eR_`#jIHU(f4#J(?(0ZwXmFu?JdRUrZj| z*Mq)}u4KycK$x2BM#_ath`VpbdfjEBPiByu(@rqW@aM}S^Zm(oAEEd8W>0)cDCP{lt$_hrvUflC-#u#~04BVQuT z7aTQ`FjP^GqyOqyn*PobX>Qv{XG{-9N^`c-w!8!M(b{HI(9WY$n+GUROPyZ2#L>n2 zXQ=NQA$cVI4dto{w0%?+{50ndGESMmS)8<_enpX}^ivaz+P{{jj1J*Kb`GOGuA`~S zUoBd6G7Ob;{UyKHLKroBgw4p-D+J6vkL-pGJTrU&D*YDVLd*4RVXr?XY0co5>mjVE z{TyUnNZ~z)G=aHuF7mx^8bR0W=fLrAGGD%^71Z>%f~~j-w4^iv-}uEKDYFHrjcWxt zzT)?px zh5~!W2OFlhf>x)yq@Z*@QX3J#Wh?GO`0*Wbe%5;Qx%LjZvHuukE>@9I3-7=M8>-25 z-5PT8c`4j*td1}(b!6kP0S4XUY9i}iM<%q_ki6!*WNgbFGH99=T6k87`X}BcrA8m1 z`>h*9=g1vm+q(}1)Z8V3d#gz4h`S`Xw1$k?cpEZzzZ11pBT>${qvY$*(ex)+i^59g zqFu}UQ0k*zGR5aES?Xv&qYoY@0Y<;1iHlXJ_P8|I9p`{jYkyv`f4qb2D6WUOWAkCZ z(J(4_aDfcHRX}W$g(Pg+6C#iN3&;M9B{%vC;G;S5D4=Q>iLGIgJ^zP%Ki&mQDtz$y z!b*0xVgxQ9@fLg>6p9~pc7o$~&+#U|-hcz6GWn`i9l&PLJCLFu&R6~F2EixZ1DoUy z(9_ug^lH|EO&8vQmNDI6itAgD`)C%PF&Sd`;2lU%e9PCEbb{_1o#64hLm0m70!`{~ zKxB@J?R}0)K5La!V z!9L>7@D{yuxqoUYd{M*>Z0>tgmOcDCIO@dU2zeY2Gwy?sM#OFab-?t)JCHZL4ER}m z8n~kR9O_A-O>#Yv$8J&o-E{x{v+n3t6?8({W6j|TI=M$%S+HdX!< zicDO>ko{8~nl{k_*-O;vi6$+&Zblhmr6cM7J(@K9iVpRy)}~Ow9N8yNpaqM!py<6a zV%lO)t@dW22IWkYbU=K^m`=NQn(j4%?reNU=$bqdMs`|qs@)Q zBf0T{GF;O%ii=ax;nWAl(ts}KcTpK{s*!R&weEQ8OEoU3){WDgPBEQ)3~zNUzzSvW zL1(TOC)l>1Yj0TuBu(e|y&pGoZb22i+4D4P_FE`()%`uN9_QoM;2Pd+^<+-N!UFW% z?*~CU8o`wi1#U$v#MVaLfb7WT$Ny~_=tpu4tR5PPi+7LXq*5*PX6j*jcc9ltN@Wg( zNg7D$RvtZkOaqy%s3%7jsUzd=24Wwkjx6*v(dw6&>>i?x%DuD^Pt=iln>wm^k^rZq zYNC`BEo6921KkMOMqQR}pjNjvk%q4}9qyuzL#Mv>h*Bs`5+igDXW!E&%I7o9QhCZ z5S%CBUyoCb=veu)oeC%wxlymXGBW&x8gf0hN~&Pf4~w6-L+#c!s9q+d{-68dKf6%U zR`rIcVHC5iwz{94^h9vg!a_B5EAdfP%pmo@2V$eBU z>Yrvn>e7vf!J81^^T(LjoESrbPLC#;kp?8?z+t)5M?*s98WH_jhD7yZ;sBl<1dXp4 z67_Y;FfnT^Va6GdKfiNfyxz|8b4 zslvo@*rBaKzIT+AWR9pN^E`)>=*hR`N!Je(lg-!UX+KJ!@8cX2xU^7eaQvR!BK0qD zkObi8(+>~yWk|%<6~92OZ9Gone}VElm|yYV4{&494L-H!2hd3R4W3@l;k(onxWp9- zT+O)KcLI;H;CNyhF45B0<4p|R8sZCo*EO78*S z$|7#!&{1H8aR%?I=*X!~$>zf+L}1sNO|ov+ZjhN}jSFYy@>cFDT+P)Mwsr7h(DLCS zxPJ2?7^|a){T4q2S<5%_haT{F+~6c&;pK&+!j!lZ#m`94`t4}VEF<~K?T1j+h^M4| zlP7BMctT$HWWYkNN5pH{WjHJGF$uc;lyr^9a7lk7$!lsP!0a)x>3vM}(n86@fTzSf z#V0Ft?eLG z8~TU%-w>nZYf8{y^B5{RbOGs%Uy3U9*PzCYA>^xN5lNY@O6P=bCg%onf4t%hn)B-c z+*Zgz2~K)8-t zzmG#}mdB&Q09QJ8Pa+D-NJK#`acKOcBPiL$1i5XGM~2x6=+wOOfiIx-8!Uvs?9}GJ2MdF`&^+t zQ`XVSb?eb4+XEIe46OGn9g>GCNMN7xqluvo;j0)=NsOjS~=#S@o z*nc;Wn4do_)lEJ|lvmor?BjZL{J8nh;`U#8YoR?{5=!Kb$LBz}VjgVENW|(o4)D(_ zM_3SI4@v4=7&zHZx-Zlb+U<6PswVTHO=&cFvMz#5eK!xLt(!?6PFw&lO_>i@hAPt1 zW(Qb1YA$@+IUhEEw}($7>`6;RCcHCFo1}~FQG_@WHc!4pd}}Wf|Bp2!3dy9V3y#3{ zWhO`#=Ro+bGvo}BLy<#))U9t6)l;}HJ*bolpY7@dexnAV{rB!mP@jZUrFb%w9$!^?Kv6Jt(TnR?TMPSug zUxD4td`|Dv2w>tm9$VyY;ykn4f!Q}>?3)wE_s5LF^zbNbT&smwM2_byP8;K`fk%MD z$9LQkw>Nw`j^L{Dt?)eKRoMSf1Lt%5x@@z>VCm4jmAGoz7p^jJC2qbunakg`93N8_ zae1Rx-~dN&+#06CeLA)pr;c5Nf9_v_v!YgDldw*{XNV8pTf7Pny}J_oKd9jJlqe^? z=z~3H@8D9Sy>N@&O6;SfB7Jsn6>jMC!gc9BxWv*MKf1G?)4v*un_gVtwr)pw+x%)cPs7xoS2}x_27Ceesw#AJYc{%yV#O#sqF_%WLk^;-Nq}-xE(U zOX2w2qq(5K|FHd?$9%x<={VAI9?q$C!lwS4Ih{w-2l^2`0Y6WSk%}&8;qH@|>kQb2 zD`(He?S_}RKww;Zm7iw`SduL&Z*nne-X5n#XXJb9~Be=fD z9=|l6hl3Z|VUd{~E-1aq8_4G1FGK9{>www#kzy{FcKS3|(KiQ|TwcOOyqSru2j+EH z@`>wzJQt5`pNS8s%*7D}vvJ`;2kzmj0sr$bmdo1_iVtW+V2$5x+&qQ5oXx3DF1W~e zfR;83gTk}8{-+<`;H|`YZ%)EnkG%l?i4EL}#r~4CadYrV>myus?mOVq6ogfy?p&F$ zM-%sVSYbA89DZgK%}tsy1a}UIcgyT_rS;NBylEik#%IW{{*V=APrT0^+(N9B9U-ZF7a9Nf)wZ5Q9~OYA~uYNQ_W`5 z>pxDxSL1e};kyE*%7Y&ht7bDKpPdQI#b1duT7~Fby-N%(Qj)c+n%wFihFY%G64{*f zP-pl#v}SG;QFC`hbHu;N-W5i)J|`QgJ{m3Gno)*K2KHH|%deup{suI!q6V&bsZWc_ z)Q~`HG`&$~K&^g_K+^^pQ?HT6)N%P}8kjhmmTH_Qc~V2VFW-nR+h9OL&h15cJNBWT z8bdnmaro7BwCoOtZF#=yc~?D!tGyUsHV=?l3)0!};^DqA3l1)-T`#J)MbsKS1)Q zpI~+HNLv45I{D+NP8H4+%6oFYlkpGMqhGtfk>*Vbs8q89t+CIQ*E7ke*?$H-yf%s) zcTz*Kp-NKUXV&O>MI55N8GApH3~4$DlYF8{;f81u zWg1E5jff31*>&g?+y|gGY zRVRW}O^qUBR~#hg7bnBgkIAI{M=QL#V3a&A?BVCS$+$?Dd5uA&G>xw?X!ud+lhV5!ZxqK1qdl&)HtP3Q?p@oF#b@J|* zLQ;v=LghklGS?;y7J5uYu8tq%?d)S1c#e>YY5HLApmP4gy9-zJvYYt(nxlaF;za)9 zB3+Pw{Dq8U=m37jG=7)1E*L5u1=7CS@(o6#!IWeAK&@mXNVnAmwc_XOzYJaQu|f|t zY|;gbrpEG{PaNj`ALau19GdX4F_I6W)y zr8$BZg-+*JjSB+?&%f~o!H0NKn8BxyoC0RN{>m~Zb%63ZYtV3K5F6*>4`i=r@pg0x zf2qk=<~wB8<-vZLvX&rQeyVE`EA7RgmvaD0M%S(=6GzaVI8#=9Y&Q6VIsWYX9RA^T zZ+5N*!>>6S1orJ-Nv2Hx2@S(%;jCX1k!sFz67$y&n(2Fzq{SPc*+UPQ!bkxPfXNK(-X60_2a#NT`e>$01nrprpQVNVE* zx#vz)OO}x}zF%Q-+X_-#??LRC6{IF+Inl|!4cn|r<>!m^ko~r77~lU}uJLvR63msN zsCrwZUGhp^x3Gs*zB~h(KCL1`ClmS5Yy;w2b{~@RMCkc<15_MzkpztLhS4Vipmx$_ zxpB7zU0<9=K5xB6D%36$clQ`l+f+kbelL?Id6&YNOZDV@ldsgmGmdyUFGrCx8|i|P z8PeXvgUk0eFGIG6-_d=s%TTzwIc4MAkr}Y2e^z*)ianla$q57Md20o#pSBX2obo{S zl^$sG!EU(kmnZ6!FGqV`E<;&u<+M*Mr`<2S(2`wSsoZucN?o!Ht(m4&E=yaEhHJYc zE14InS?-D6#(B}U`~RWl1tru@doUX2nt)U$4KMe}cuzHAl*$7RPe%Iv9J=0?jCNi8 z0!zN%A$j*Q(YFmk`q1DRb@sO;ZQk>c?~KE=_QQB;cXAEtojDq%DBB}JwFF5m7o$!! zM|z`aK1zu1Acg^>%9VVy&_9*)G+uWXN@)o}{epGWi7!{8kL+6|bMfE4)IGCKHO{1i=Hx zW2!pu9yQz-f?h2SqZKdrBfEiu>Mg|kACTKI9Pp0)@26Xb=+NqbaxH;uk}=ZUnn9+6vWHsv|Lbch!O`1Lx|0+yGq7`Ha?*N@%= zuUx8ts?Aocw7LewJKX|dad*I;)z#ovM-{(D-VEH3U{VwU{u?@$|0>ntg8#{QuT?fU<`liEWCMR6 z8m|zNR$mn=NI5F6QalT<2Q-iXbq$g^W;L`k+rwF>`oLs1AMS{l2iI)yB|n2g;Tw-p z@|Jsm*3R7uKfSy~G?doEV!d^s_1I%RWW60Tw{$qx&sYum7kuNV>|PB@^{n~GIX>Xm zqXm4M@hY(T_i9jec0Auxy&kOF;0pvzt3YSqDqtb}$ol+V1K1bqz`pX;z;snL?>D`g z9}wmMi7TV{w2do3gT=skRvmA+xeh$h@c~Z;tpmwnYk2Xk96wkO3tV=Cgc0+BL-i5B1~Oo)=|x%9_z>WwBH_>1ckxqGw_focSbxd8 z4)RyOnek^dbAjB%0`O*5V2JsA(0XD!$lkn{XS2ot*ZnHI(qa<~5>P-t)q6Fu6e$fO2gfdaHwH znd;!TToqJss=z7Z1lv4D4a6p^0}aa&AbsLWe($+0{Ki{qz&vFNUmG<9*e)FbG{^D0 z+kfgHC22UA`B@DNxjO=kbfGe1W;qB8Qslp0Tm!P=qd>r>BfL~<%U2AF<~t{PgG1Sl z!1Tlg&|k8iEqxa#d-Zk+@N|*LN*87FI(Ct4RdA4GVUH5;(fB~-b14KU1pQ#njL2p6 zo!(u^`}c|Unw!I`Nh%~0qfL2>n{W9IGv>((3NP?U&%|KUiiK1yuo~4g8IfJ{UZcQ% zM;d&-5AD@hK(kymkm`H~`owc2O55l_w^l8nm&z1T`C4b{)96guOAgfGuLFH(TuV&C zooI8*Li%j(0(yG;8MHs@^Z<{)3SES0dO{kF2&dlD>xv=#G`QsORWf%%0FgZ+$9g zpMDF>lsrS9KFg#wF%~p9KMi@n-*BFQqm^HFNs~7V=|*=w`n^kw#y^cjt4c+*EBPWc z$Q^BCm0w5FCR{;N_Pfv^oo4?13>)rGl&{QhyC1jt+B4ocC4_^Tjr@PxvO&YR2L8n7 zGhnlzfxoo8k+%)>17mkR=Tkjfcz?rZd?eq%t1$C;=3W!;Fy=Xb-Jy|>iV}0jrinOt zV-uhLrw>%pr+o3NXT05@XwJT^nKwP~lusSn%zxe0$k%E70&6BJ;}vH5T<>xr4vbU9 z;m5r>MduCNArQ%B-MhkTt$^^ZU>9DA1H+Z|>t0-kF1AIcGV8N!$6rt&6$Ni+6a1 zZy97S(nV7b9Ff=LOhd24>BKjZMM?JQXYg;;TKQs;gsm~;b z?6XMUoKs}M&Qm05oGv*QmO*}Q$|Opm>7+SE0sZpthlT4hh}rg3_@MU`@g10#%!8;3 z3}Ejw(uhG|23h7iaP9v6(BGqmIOn~9H$IdSR{trvKgkoF|7eV+hfYFNqD{iRQpgko z9hy4dM5b~f7~b5aPLsuE@O9x7ge0cYHIi&%+V>BJ@Ro4mlw-ssFj{)qIgE&e$4E=& zGV(921~w{26Fuu2(jBUPXzS6LL~)zyK+JHIY?#|Yl*1OI{yD4Vus#CCK5ZxF(fbf6 zZzqi{#qc|RNp>tRfzh*Hk>Ie`B)K#ixpBAA;L^JCuch< z`@Ke5YxRp1PZ*DEE+oJwYO1torVd%BQbsygc9Ec$b;Qp6AJnueBNuHrSe}}PbVD-8 zXB|8AXhH{hFt9(K6qU-kSKgK#wJYZyy&H?A?q@ms^J6gx`2l{pjKK*@yFl{eF?iA* z6P&M4!GE&x_{Mlsoc&`AelmJ2_P5C4hqamDHQ&bJM+zpm^j-}2TX2w5pD_+^PMXX` z>>h(1W5(jt^%b09!#JGYYK$wUj>D%dOmLN%1=n^-h>yERaHg^SeEY+hc#ZrHHy&T% zw5;_seXI7W?+h|Ld?ik-6If4 zW3cDOo6u+Q1aeC$7d8=7^6&Nt_-omC(p~aZ>ZD>yv^P&6-AX41`dCjS8kfyUagZtT zo@7dXYGlaMCzz2X<`W5-GJ&isISMD#C%`qQ%*a@8JGgn$c%mF-N{VOJL0`3rgprIV z`G?I22%SLk>!RVMdR;PpAlI7g??CQ<97ViBV&MJ87HF&X1GL^dA|xY*-D-luS6a7dydQ#Yo=mrV)3;^Bf=6wHw>4 zKPZcPH<)X_HvyktmcqLgXmXF&&ICt%3E1rQ6ZB{`0~PR{KR2@+^td4Yzug76N_-Bm zPiNx|jXhw_c|aZSl_14+>hhr8dURr$gzDyZpodgK^A~)Bn_r9RoHypExl2rYuS#fq z-Y66o&C#+q9JN2g&`Y5VeHeX}?0?A88=f3hxgepZZYCq^$YbcIJ)mCO?U8Prh^n2G z&~SxzWHjKP+!u-I^mTylS7)i;52Xnt)x-SDO51!H6p4fQJN`_ipl}) zoVkp)&bdL;sLxl@6e9Pacc+b~%#B=v!`}msRE?yM?(V}NJf)3i zKr)ChN$0Baa{0jX*4(VU>UeE{Ib{q|5F0j(tg?_Jr5k2+OV||@aLJ4+*(o3|&j~b$ zZGqxb6X-18iFDka4EQ{85`ASgnPzlNpbz>c(98X)q-vD;02V)qCJdWMqq7gA^;S`+ zRM(tNRkc8lUS`zps2O!|u156_%;~k;rnKMKoH`DfNM{8=WN%mIr&VhY)Hp&#B)+C%4{$1q0uGAgopFFoeDn0mj9 zM8PIyFd&qr3ddEjLy01dj&-6_gv#`VB7>?ntI_)hv|-QCugLYL3Z0`Bi>7Ai(uO_F z{IuPUTu`aM%)fL8m-p=%PbYSxx;@xHq#6_zIu9+?3M3=2Nt1nHweDxb(asDaarq#%ke-T{a zkmr1H;8R|0AntOEZRD#A%0a;db^P_LHs`-%_yF(F2oL&skZV?O<7~sXad}^Jcz)I^ zzURV1-0ztx+uL{oc&l0C1Z!_#DB8w_q^%IwC|%=~W5#fSW5WR3riepU3}Y=m=kkM& zda^j!1dEMk^E(f$l}^p z`HW&W`k76UdS5;Rlhu`|+bL_(>!*o|zKkVPcG<%QV?KCZ|BT{c^(!t*UAieDV#&cZoib$0h?=CI}<&09fq6) z0rX($&B8YGV@4v<&=P>_F)e}_F!yuzh}KjT!F<=E+A2e!uD*wgp} zcJlpzb+#!;lRK2;kCYYUo=1P-0Go4i>%}?p&&%K8&sW{#pNEf>_xLHvJHMQgHZ}aj zpSSnoN}Vsb^Kv&9!fZ03>M-$oe4ISU)}@9M!^qpBENF2ihoo*VBQv7wq&fKq$;^54 zXwmy&C_^(1Ucd5^gbh1OGIxi<^ieZO_sk*CLuof``qVFP%GH;zxV;9sJj#c`;lzySIlyd~3DYKGG;CBpum+tA4%P`Y*hKz=CZE2mI*P3BaqBenK(#Hs(H zxrQzCv7RQ&h2OQu?YBm9YU>1 zYWQ<_KgT}F=5$0eu+qmV($2XWQnjJ#Qk4c@-u$v9Z*5z}u35ex*X^k%0Z}$G zu5M&1?kOw*O;@9ES;A4GXf*+uSKI}!PD+sb-XyXrS%{oNl8AT6bm;vyfm|Dt0&ln` zlKvY>1UO~FDU*+pCCbN$Ygi)5yPZg^{KTYnL^8Q`{wVpdF^N>%{RHjWzQIi@M~SZ> z4L-aVM>JL?5y>Pgl$v>zv}9K-gyYV z%LykAd;JN#e2jE7*-4lGi6YnkRm1$${p3kt8eCE6jG881;@zT$puS1 zL}U;y4;ki6eD8(HN;M#?lPu<~bNAu8EK`B8AR|(0U9Zaf zc3ARtmq+jl3MDd^y;y4cK0z)Go<`E!+^DskNa|;BjHGrB{BIp+LFr9hX;5C9JPwqQ z_65h`M2CaW`eicjQX5GU%t8j@>B*#Jk{eMC4ur+a=8-pJB8mO#c}Q^B5qfQzPYOB( z&`AoBJO^P)=pu48X%Mn+T`pfcc?7BzIFpX&*)VRG z6KSiS2-o#Gk|kIBrD^Y+Nbe38^2v52)cfR03?p613gLa& z7!ytQdbLaMI)syi2S%LA!bDtS;={&Fy@HjE4LQTU^EgV+kV_rh!>bmJ=B}Ul%Xbbn z;9SEDxwETkc<#9|$GVK+z6Tm`_8tbD%H?zb#75jkcVn(@z9BbW7>RWw!ttilM%?>) z3q0)lfX(=5z%7ldz}q-uPT6fVH!{nJD?Db%)qJtQWjwYH)VTHgJw-Pl0^fBHk-`G3TT4l=lzG#gQM8tbVT%XH~ceTfe`{ z+ZfN|oW5)XR_rIRzfg@^dQ^i;86?FyV>*Co&I#T*_Z8lIfPyzBhp@PAJSWri!~(rX zoYkQ$*^IG&xtKV2960D37Z~M^)1t?4CJ{^U^!L`B{NEC6GSLGY1{iX&1KgpYdM`X> z*HTOlEXCP5uXy9n9yl(?6FZf==lZjSC^Z0+HWqbDm#P4{|Y z-=4*Ic;YgwZ0do%x7cy+|01#K?hLMIwG9prJBhywhf3WH8o9cZuiU;X0_+y3pQzJkbSM$*kajr=XWtK7qb+wjoZjkI)2BjT?H`wb)E6pKPW(%-2)>5$kFH@J^!nWdrp* zv58t7^rbsaTtk0GRv;bEjZ~*_FDkTHOM8rc>3@3aHu0-A(Mt!`(uPeNY1l(ws(alV zmHbGcDHXXWXnZtHOv$1(;^8(q)4EY%u(FNM5=hx6>uAWKYWi>8QDQStv$Es(Me6u? zC<@#616g=}gF4))dm4*Jsjq)u+(x*%N8{m`*7A zYGE@gqKnihK1C$UkA8mKEh)JaBZ~`qBT<+iC=1Z&k_32+mqqcNlKi*jSE_ald{5Jm zR7Jd%SnTYPlpd{MdW1ca%H2JZM-N|1+REQbdYnjZe1m(z@CN7kD;|Q6xv*_|xn|jHV)}gZHN2bb%V>#<1>%UT|#>qbHo-Q+c z8pi%PdR8_g16}z%)j$?h- zyNl~oeI)_2&V!q`EpTs0uO!fZ0p2bs0y*q<)~ z8=WHgN!$f6DDVPs5Eg6;ODR}1?HsU3Jr6F-DFW>|nmGBRI{tL$95|6x#&=FF z02BWd0^QF}c;f!^pn1?)@ED&1n(0O0=DG+zWls~B;qrqYdwn$k4hmd!>PD=WHvxa2 z%wfm=C{TAlAFTYS$z2$$2x5*}^8LmdT>q?XywaR$IBAl;ETzN`6u)oeH+Y2b`N8MG z@Ou-%v$!-cOE4Rd?I%Fu=o&ut#8IF-ZW&)3w+mM+Fa(psmm3@dAeG3>I7>TJNvABc!vO5pI=PSODkAeE`<8O-AQbL7{=cb!%JI*F#fv$ zwsc&TmX=$?{rL>cTPcEiDS_n90N$9cA%?e~&mz_aQ=y%vHQeO$CKc;z&=`spRerXG~1O*;ph@N*b9^&^Q@x+QN>n>mnkJ_Pf^&cOZ|rl{$`a=BIK zXL+>$9cU3$z*S{FCFHdVocV{!HJpWHL(&iVahDW0+RuP&U2{{K-6IHnIz`cb6Bj}3i*qhi0AlMkbnCM3b+>d-J%8Vt5^!%Kej@d(@VH|pmwm~({x%r zXaMK1Zi7Sj^^)_~p2Ii&EfCm6(Hr_Nq3fAu=shs@>go%a(5gs-HGjb8+9K+v^Bd}% zQ$#KHA+%vf2)+33Fuk%i5o(mm;pUmf=xU}VEdG*29v(45BW|B0o?Tn%q_(5--ZMkd zj=o7$us58j4%FE6ln`k)Qv%0KQ9|)v*Pw58H(4K!;nojIWX*%qbo0d$7;u!MEju5< zko%`)bHFN)e`=kq<%1b`;+rX(;l}~r7a1~HssS7QD_!PR6e_WMo-TXnby^m1cnPbU zbXpeIoF!AepC(H!%8-@Eie!B^GG)@ES+bz%nKB2(7p%pSG8R6_kagB1NZP08$+Ao` zWwB5h?6J*~_2;Dx@DVa(wXf4AM_ILSohzCNR-k9b2KK`&ecW>l59G}9SaF3Rm z%(=*g85`p4J#wzj&Jc&(YXmKIqp|A~1x~YXH1eFWW$DbBXPDwO&0BC*LoHYA6VG`~&*3b7^z)w4D zZUWtZ5x7ph5S(6{$JzBCVoW~1$jZ8XPCd8agq@L=}(Jtfh0#jldVcX?~#m?~ayGE#EvhJ*O{s8ohsvPd$(Y+=@{ z$g_?L%&{J%+$-@Ldr6$T<%D=ob|kyfakVIJTd(BYuQ0~beXLc&%r926y;e+V*cKr$ zzhh*zI_j0xkBx>_t;(uar>pg?h77u8=_@w0k}op03LC3ox%cUKt8*3;tR_|%T4@h4 zw8|@(Y{_Vhu?luFv3eP2WMwdPq~NCE2*KqMCRXwKAy#)y^sF*p8d#N2-Yr-)-^8jw zFxu)>+}MG+jjiS{oggr#hb;xYj9?NYw~V@yZ0Wh@xYey^RPegLN6@)ywAGP%MN7`o zecGds$yU7+##-2mwJit#^|A62>kH=Amsu>e?XtSq7-$t3onsl^e9oa_*9vuzej4?Y*~ zxw1v9`MO1X(&@EWYf_8&dR#eU)N_+@uzW2ZHGLFw*y)Zqf5mfg;EK_bJp(%SJG7pO z&(*vV_XM?xvzk=JG1X(3J^9&8S(O6QHRJ+QH9cCg<8y;A%%N)yuZQz)BZEBJ#)d5}hQ!|;AotexYwX^KY%w%wDU9t7AftolkvpjZ| z=pBd+%wu2ZTC$-I*=)g({cM&zo3(nA$1XZ7V3#Ntv6^p+Sl^BumPyEA55WtP_l5cF zw|RxEV@@6$`P3Ku8#pc}7O>9~@3F5ZX0oHE=CM9E{((D+g=}-+Y1X%>fE}~=46CA_ z!tQ&b0tBy&fJ4JORxls~>$#>0Os~%XhYvM^cXv**bz92V=O*DmVCpXMo%c{8uaSWI zo$Zpq-xc5*S1p=x-IZNorwT6Fj$|L}>4N@AQOtA)$ii7_?1KIvwye?$JPIAk&Q$v+ zS=EcUh6(c|Gsm6;Rr_zT=@m&rt*P;%mG{nBPO!Zzat(_YZpqCTHJZc=f4fZ(mYg~) zoG^HbFf%+(_;z1{(0I^4!PvB;!jh@Sgt}#M!tq*1grTA=fv;iWfK+9&a6wwUFmK0V zQQDb#qMKh5g#{p8s4(`hQ0>hT;aav<^g=yZIJqiT_~1^Wu=ZcPuzA*Q;pN%4gvC!J zqAknX1T!}L7A{<>XziSsD_WIwUF77}Etp=qNVu?jlqm4Y48i0B=LFYgNJO>2CJXQH z9C+@wO;%e}!-SG0!$iAGw1h45_6fheNE0|m1PZTstrQj*Y!db@4-%?pL zmSm-B2NN%P$E^BhAvuxsiOFv4V^*ubW;Q8wFqKM?j7-qMD7C$34ykl74T>)%trJ=$ zoB1AQ4jm(jc>R!xU-FtU6^>%nHuNwbAG9%ES=~&-)ptzN!8}I#?haG-OMzXq_PnG| zvQM(tAd$V;ti{fVV%TD96^Wa_4%49{5(haYNOVp{iE{_Ek-khhD)H-slIPX}rlMO_ zY*qL~eEo`>#AJG%SnFdPJECl-WX8f2Yvtpyl5bdBY@!t{X*bl8j6HHsas> zm_2JTgw>cg6BzUiW6ued*z05{d+qlSR?lY;J81a;%yfhx+*mmV z%>KuLIcGS@{5N%ySgq4+{~v3{Z^;(P-oQdu$t6&7FiZ#B;*!OWXBe>(l@n}XiL2z- zyJ76UNc2;uepQNk|k2ZF`+vBI|v zu|knNLO94YQkXdDsNledDB;!@hlB-j2Zgr(97NF%kf^#OdSEP37~LB#RH}{?erqNo zlk#@ZICDqFF%&qK0kPL?`y1 z7Z^;MENuVuURb?vzTnZaJi&vc38MQsA|d_|E-F&KWcA%Y@tY0(YF@Ia#EEK?#GlAbFry<#Bt z7|_vu(5%XcEACpW2cHqQ{?TT7V@60Oq{dqRNW8}IDTkQCj#c8~bGw{Lq!i0 z#ljn{ZlYo&7EWny5)At;5N=>U3fjhrgyCU~@YVM;!Rt{_n5l_`+3h0X)Jl=Cz}rsn zSK~bV|7fxtCTOdSTtZ;V{ zBOE{0PZ+y?tvJ%R({ z8G(*ow$S~@Q$b{>t!R6@zvcdoGljkx8N!e7g23fmq|iaIN$}+Gcfs$qWh z&888|0SkA@{=5v~|FQPw(Nsn6|2U!)A{j!V62iS_?{n|o`{15LXjB>uX`oqBp$SoD zDw$>gT5go8;;%Eo16y54i_m$jJ87?vWT?-r8_ zw#!Lidp@q3y^_30aU)qmN8&KJgq*9Liz7pv$hB3jB%oy(x!|k9tT$0)w!U*B%Zq%8 zLAV3yP+LYEzGgGEy)Hycn_L7&UWzSFJbi`OwGu)vA& z>x^M;FBrt5q9o5qWRa7KZPA!KgOXlYk;XR_D+J?tzBCPuD7o#_7DRwWgWImi*P9{2M0-xhyP$xN` zM|)O5>x;*LOU+04&@~PGY*Pl0kEDPbTWrC3_Y}~Xod&F4%L8Heaj^JG7MK%~3N|fE z1$*I9Dk3-o%uPKGPVYVZF*<6z7BWDxy0 z1N_QK1G+2BfkTuEeCF^TY~QW}?|h`-)8P+r!MA;I^w!hxsI@IP)zARmUo3)^kED3+ zIfg*X)E&w_aH8&^%kW3a7~ZFQmf-1Dec1l8jT-v)9SBDk@xv!h2F3Dyly%}jqF=`hmo5)%8)Tj@9Z_N`hz$OdK^a;bwb_YmkMm7BUriqwk9Ki3&@`+;j0lczU z0h?I{;6A%xEF-rcuVfEm53m4NOpL&CJ`va|BM3)M48jlTe3YISf_-L$jjhv56;_F|FG70k;VOU@XK z#fRKg$&RKxA}iiYqDNPd9b5&DiVnk9Th++4euKQHd z=yPDymvi9L^a7xiT>#D|pP~}-i-F6PQn0PK2z<8O4xfE-gF7A;gO9if7=0@MQ=b%q ziT^&ruFa)D`S&THeWw^$6cz#dPvKxu+;6aTv_1T~KML6NDnVOseLC|l2N!wWhZo#3 zsGwV+;6u?`xF}^ZzxccvxZ)xi8(HIl`pru)O~aReZcYQR^L2o0H3ldo9RtdG*7BBQ zg@bc4C7`@}5jeM=15VxPAcBmhra_uk>EnZl*Xv+KQ!c2K#33?iqZr*26JhZB6--gC z92r}s%}6hjBR#>nSn9M4dHt~umpmFpevcVVI%Zbl=cVH$7>EK<3zoz+wzA~oYExYC zY&03!FqU*D$&qB$E>dHAmsn@Wlh5lcNzSc7?EXuZY+CNX@RyAxcl~5Y>RNf?SR{$H z7W0YHyqTo&&^e;KWf^`^6hP{J>N8kL690ItWLjTMCmTBMVi}{Qgf4Exx4$5iIWm`Q zGHJtev!$8Au{DArd9Hb%$y?x&}_;ryauIU{ED@iRN zJLKV1kpd(xF(6~PG7S8q44W0l!lN2vVS%3-uyj#`!F$KU4|U_9)2b#|r&$jdj8lT@ zH}qhq*JyZ&9S7t14)kWr@z8$q7|0*11Sgv+KnL&V08em(ZIOv^^T`3w#EXTl{%dFt zWd-`oL`d@{m4UcqS=gh09nLy+h`J=U0PFsol{9Pum%23RJ41H7mXv1TD189lGYA2u zO9k-lPD{$Rw;r5oOa}Y6wu8Ei)o=$_3dVmm0JEN@(t&#vz**)gy!mY!%iH_7g^ zp~Bb}Z=9LkNY?mU;@jKDGw)ab5UiaeiRpcgkk`|e<2hOXu=VJZf^Bm3`1R~OTqT!{ zTioqPon8a3e%67af{rras}43DzD8j1IHLA%5}F!19^X?`7n&V$!d8DZ(5;Q>h~%lE z{V}qrbM8b`Y1T(?-K35_I%uJw(%TdxJsF)6OhK>0Cn9T0b@Z_Ax1euO6BV4AgiMPx z(3vx`xOqr@kb*kuyh^m_s-d8vUUTySXmq7qc|$4mJ6 z%PRa_WaYJtqQlzYr`wLOR&j#MrggH8s>)B(@Qc^1Y3@`3xA(2M0d2^(b~v= z=((;ws@^vrkA+6K+j6RK^5SVwDlbv^Y`ZIp*9*j@wqJ$p_C3Of#ea}q=T_nDhB?@- z!3ckJK|-gsk;3l8R>>Su4bhWdJZ&sX(@M=CX0{aFDboxh>RiC1;6|{pbUUySTm>O3 zuY<)|M!@OsO>nCJ7BKsI6{zYqfn1ZD)Ze=;fG%zWPePl)8kbmj%O(o?#oqu4nUBGl zOIN^&i`Rf+nhHJa&<6U+6(EYc0q*xUgUtb_!74jVxb2xM^qh1N+_`80-*E=?S6(MP zOQh&846RPX-39AuxHB0a$7G2-0??yyr@1LH3#XaA}S)IQjbx zXfDd&7X`!u;kYB<(w)PgB7Z!5KkG1n{9@{OkP|)KS`JjKIR-Hqk_0vmXFr{SZ)6<7R`VC)&w``4(J%pDW1R8EeJOaEV+uZWIu^ev zKZ=j^ccK@U;<0pK5;m%e!%ExNkYCJFl6N=}|9G82XusI1Ie|Q+% z$tL28J@Hs;^K0~VVhb)|7LkGBheF|_$z;#QSY2MN23i1e!KcRR$X=$ zJ&%#!p{tGE}h78Q9XX7?1$fY=A+(Ew=ln<39tB+g&MCV;h4vl zP|56<_~PkdWcc6}sjT~kLN^cKytiNR$D=Y#|3L-wOoe9Q`v_a}UlR7!wzu-;DkDRr z;ZQ26_xVfS8J#9k%>(4hE-B{kmcwMCjV$vaT9$E58Xzl=50b^X`ebf~6f@?s4CD4` zm>h|2VwPvtFyn7ZGof=784deC#PrY*$@)l{E1r~LD5{^B21_%?Mn=f?uPu_f!ho@f zs$}kzcBA^On;7rIA(BEtHFF;?o_XplXVRRIM*{FtMzCQL>8`ECb-lTaW7kdM^718f z&&d{dDb|z7S4$Wh-P2^_D+&H2-AX#gjb^SMI7N)mA2KB|f;=>z#Hf8yB3a4q=Jy7p zi0tYJ=Jj_T$>A$H*H`h)Vs@_$==ePNzfNW**;%*Rn{h(FoW*UI>xK+aO(!0_8 z4}mBpMwX7m2hp8(p=eyAKkAFzizX}W5R`8VMcdYdqG@-65dYW*EX{mId`rzm-YJ@!qs z!*!J*xbNXo;ToMG)L)@bR^t#fG?kApe_4rLWuQ=Y<9M=E5G`CkTMb)VpT$>#Uc=-< zcbx1viUcl+p?~lHilS=A(W{KclB$iBKxSzSZSNaFraTT4NEP+t$(zOrC2CagnyV50 z_xVmf@AVGad9^7_^Iu4B9x#E+T_yf4Z45oso50LJ#_;k{GdTHB90=V4;c_Dy{;-}2 zZ|Bd1#yoSt^W;InTMF(zY6`t92H-316I8Y4!zIfsVCpp^c>baZj11jHSD&Qd<)4O7 zPn!>YzL~-+P#w0f-vKY(ya!uvo(1x~DR9Q@47w%4mR|pK3;pg$B=F@%fMyN{yI>vV zrsWBoPd z>p~s4r)r3rKc<8>c0CPb1W#b)gV_+S$%egViFA(6cK(g^kLZZ^necXMEgf?v6RsBs zVc*L%ct_P9S~jJ_9UaHvf{`)sxlayM6z0Mc4jFLu>J0cIs1O{yp9QCzo`mhX$6?j) zP4t=1t7(U8C*WzXOHeB77~Hll6Kr5@Jg2Uw|Y-2+FzuLk4Z@P-7qwl^@D5jrqeTz9|bJ05_GIJr2n`}_B~~%=@AfI<^67$ix9HG)3TlS{6nw za-o~b&cn0idtlS$1$6JGJ$%zM8T6KAK2U4xX?k~+4-Ec23R-ROhGyAn@IbdWEUxy2 zon2MH<(xmPSr7<=x9oryWOl&7g&Tm*vfZ#JX&-!weBlN?V>)2&bh_ZhZfH;)2RHro zg1aQYyCC8cou;u59{b@1`zGyyGcWlS~1XEcLTcK z3pPW3GVsuPYZz}a9Tv&GhbtDm1geoX;J%fDM62rvP+Yg1wk+NOM`|x%^L>Rx=}L>> z#@kQiQN=m@XwD0gop}x$IIws)umm3yIph0ODVBa%hQF3h!OQPe;*yh9cvpQX&KoMl zyo)u+am;!AEwciz7+Z#4#`zQF-tFXi>v>$^(}1_66k|=7bGQf&ks^l*+_R<_OV^*r zuYJoTNMbY=4agCwZ%tP12**_;#zgwECbPx2imWSnN_6HLuXxp^P?ud%cb*uC5nE`^Vy0pH0bjBp zmi8VECOt*@63+f@cPO+Y;{|%&^cKDEeTL%C*5bybE4X^uN6wlCYM=QQOMX`2f zWc2g5XrkgH^k~BylvMH(nHG=1KilN7RZ|uo3zP)U%Y5->OG#W>`w#0egcQ7ruC~Kc4Hm}ow`CrH5MIPT!+vsY1Y4-zKU;UqOhW{a?8vO)ayTRhOV>0m5`!~@| zp9taE>j-z=$U_k;ve42ochQoAge=*0Ubv8p#WvGc(T8~r^Q?E!x zO38xWl?qhY-AsNNEl*7@H>U<)kE7lwDp7kKHd85)s+3#U1ghI?9K~lOXM{0ne79Z& zs`ZmH^)yC->eTv9rD^=3R=!fERi4MDo(EJoRe&d`dUrj@f(v zN-AvAcFLwPj?x<{_cTJ^^)(!dlBPH zeLvpP}XKy-E9Z5s{^u4&Hbe?ckvoewCF~E=h zUKifw_u~&wT*=h$o5;)59HI1J8K2ekL>tlqaCD}=z{pP>E!B&`O%1a6=IJviw_^?t zi8_vE?5sij8w-V$B1?`1Y2sZccHytt3vh_VS0tMrg82th1ZOnoNJKaaF6Od@ZMQi-R#I(c?J zgKV6Dw0lxYIhOq0*I!R!t+OsGMl{#gh%klSzr% z17?dxI++!lK>8jZBel}0WZtP`Wb^2&ZWIeh zkAW-6DV1k#>(t?IKP0%+2|ecRMOz}A z$nADV5>OsX9y|;oTZ;}zN{|b%k-w6;m4+-iuV=}~R@IStDYwZ)hGXVtS)mA(QRZ)d zw31&|>qLuLL&)HD;^2Fe%%LWe&0jl-^Uxi#=X48+8Ehej%WmMd z@3+Xla~;Gpw2j19#4;!UMlkzb+6lAbE?N8FI!U|ON(_c3nA3AQNX6G{VUu5rbn&LW{SF#P{eia!e|K+^y1NVj5G4 zBRPVnuXi`E$WSCoXEPb9r-OKu9t0lSBjD{|IiA6nM%Xkq5UBCOp;DVaIE5#H@I|}9 z+Q)`qe$8I6C2Bu-Zz2nm?!M(214@b)hRA?P$AgD*pL55?7mbqP?DNXjfl5@;Gt}O?Or% zx8%Ce-r*L6^*fQxp?1_U?iH&4DUD5EAI6pq^=Mmx9F99dNRgZZ86~Yr{tPb_Mm-5c z>bsq=quW}+pDBBg>+~3$lVyvvsJFOic&u<=G>tDQC*r*wBSMvylW4%Z0scLG0v%}N zrhY3!W5v7irWN_9Qsy+JWN{SeRoFUf835d z%1{%kV{!@ zlLOO5jnu}bC4dBEQNi}oU{2U^;QjSB5FQ>6P18BbEH{X1xi?Imz3o7COt$44iEdHT zG?!3H4yEAnwsO;T+p?(3Loca~hGvx5(iqTAmQ-x56;<{+h;rR>QL;t2O6{66g>u^c zmQNSy!)HN1_-;>qf$#hq)FO`oeya6jN`rfDy0v{O$l3XmFVA^{Y3G0Q=M~xT``&)z zhZjwwZf^O;H}L(*znMImTI@c=53w8OmyQ3)AG_!~|3>lzzTCHde!kW)-y!!G|0a`3 zB`TCre?}~9^U0o zkjNyCyrBGYAB@~ISVu`F5u;>H1J*z#ZjxcCA{gUb-~y{ ziS~MDi>YpWH-FxVLww`0x2dS`Mw1wUG5?5WvDulZYW}kmhM+oZqnWjV5vA{V2I%Dm z@`BIK0^2X@*(7? zLO9V)xQC0jMiFW0Xp*`ygp9csLKHrSU@{m^6zU=g+!97E%-}H>Ri`t%)FQ~tcl$}a zX9!s|5=wfbFEIl`d#@H|luv6cEmT2=hWr&|h4=M;JKt!|!- zo=h||p*9&W)D93u0T+Y^Y2uC(4ms@1K*!$L11R!w&bvOf-)*iNIAWmoV*jqsjh(RG|LY9j=Zn zRN3 zIoF9D53kClQTux9q1m5jrZ1M)0`pQMXt*n%veVFkcGte~vibegQ_~FKYs7+bX(Onv z-b^hbfV%ToK$~+_)CSq3aFz7|Q1@A~pP?1V{#!!=!CVV6d#^SgIk=1rWNKr1mNenjG;4?!f@fzMK?40%it@%}m zy#|Z$;`$ss|9B2Ql9Y=UMW4pGO$B&HdLHh%vXj{4ZX(4@KAt{&6&D}K#@Q{oxNhSQ z5_PZuQ{LJ5kRTu5S2%^s^Y7q$o9^M;E9a8H4l&+2dl1i=aF?8tYa@AQhsbzjg~J>7 zcq*NG#eoyE@yAMwx3LAB?(!Pr%Y)77;-Sis1hP=1>sSafA7 z?E5|)7E0?w>4)E-m*z{D6*dj}ToS;JZ1?~Qa`#dNr@SqGM{oCcSy(uevU zmhiiq9YkLqLD7MFV13gIHaH)ky-FQvL!~|R$0L5=&yQOmSTbHCLq@2*+g-sIB8l8{pC~Lnuv~qF1hisO#PrIH==`lcpJ?6;q9|Oq>zgUi(MbAvQn@Pl<(d zrx+slU&g4%NmW>G#YYpaQ|S44BUIsGhtAeD^%o)8BEjfX3=E||?tNf5q|D6@ywDdV$rgjab50;|a zdv*&8GO7?@BZa@$mI?RGZ9?eceqwYKb7aC_mWm9D^_l697cV#P89kL4icy<-I z{FTh_ha14-C+?D>*)`N5cSwJCF$Zx*ez4<4Ie293M1no$FfVou(cF}1#{13^5;?no zxnJo>YLht3gfAlV`G8zcTttd%9Es)wC1PpdLV^cfNPxv+;`h#hc)nea`@wQDsn(e& zB|DN6{_>2jgqz6DY6W?7+@G|~o=Z$NIFc`8B)GL?ed3XYq$+F$IkIyp$#`}H*YLW? zkxQwB{+>yuPgP-D%Ot!v8&#R;kIR{hi=9YbNHW>EYzK3$6Cs~fiP+OxgQ;pjSYh>E z#!z;@P&3IB|6@;)cEu+ARK1E+9xkB|we;e$6BTHsnH)KPLWdDeID{FsANbqNVWzV# zP?%w`j(O{Lh^%s}1SO$WFhBFWsa~cMUB0RuWNog47n90Bhs!EZ#g+oY`okb|{5h~$ z|2%NJu^jmSxdhi92Lk~iaOIg*R7bKpyrnHgZ}EN( zw>FHY_Zy@FuYVhXt;0*ud}cFPtf)Zg8Ee3EipN2FLJq79Pvp1p4uO|+4;a1C7tBk% z2NoRe0@GDafYEjvK*F56;IM`(5agZ!jeEubcCj`+Wyeggr+Gd+Qa=PF&;wDg7|&#_ z`Xn?y<;ob;nUZMAk?Be|C3{cZ!ehFO$^Osj*voAu(Np0OnV*xfMFu3dduZ}uU?wS- zHzA)jHSnKcJ~_4-5I+YqVr21$O!Rp}F74-&qlT6waj56T!@ji9oL}mWoMDmFx@Cfa2L?(00-u z_J5xZb30Oj`Hs_|RaO%JSS5oVou|-bei~5X;=#**sbJNcWbiV?9gM^cfr|B{paAwhtp76(tJE$XAv$+u*Y!|rN~}KX)@nuK3-`Uh?i}ijhnDN zHaVC}^fDLXSuxglpZo$`_0b*^mlZg0dli0T7ms(Dh)BzocC1a!Ar~PcH9tei)5&x2 zo-|cX~SJ?BNhu6$j6eoAIA$z%6a(vh5Pv5$@ysg1{vb=K@Y9Z z_ebaYKBD~ZchSdfG`VltC(N~4iWEPOW`;};36(s3$V(o?&2Tn(H_?odYcvL13e%Ws zNZM zOKyy3N%lPz#z3I~_b}navxv{Ed2*PE{8!5m;YPA?S`XITZbqVov&fd~-e`WiC0Tmd zgqXgQ(7`P{DJ)5GBq=psq^3O?zXqUKZ`u({y*nOaY-g){g{hWWE9?m*X=keO&=(c{w!g(5aD>{kGQ)%oI)`|LMw<0UYm%_fO z9O}|-5YEe)AecNgPl7X>3Ioshqd8Y@qFH065xIlvsJ(j^f9%^-e5phhUtX~f-@biW zko6-RHf|Bq!<-lYUxd8CXGJL7al9A0CI>^jYbjiLFaYjy8VBFWgutB}!{FEROzpzF`?l)Vm1!lO(^YkY?T7J%NL`5N-_0-(a_5@^zv0rx-1g1tkp&D@thrN=Co zK+h;>hy78%;f$R5u-Rt|z5JFk5ItT>7p_yISE|kdJx)FFYnPL-=KTQf zjtoKTWIo}QLuV+S_z%oB`H8f7pU|=s4^j4|N~ET$h{cz83d~L3p^=avJYmaq6s4kx ze_xFvFIU@xo1#~knjD4OL+Z^A>l{FG-S-6teng^IFYfVlD%?Keo^DyZAr zCkrPf0p3eB8~y?%0~EC(!{qg*ZvOY06_jPJA-`#Xv=ILq58UHsQK27wsDOn70*g=5 zLg^*hyxE>HAf25Cb3is#Y5H8S%;_gz4p>o}1OM;>K5$6p zt4CX21frzyr|8SCK(aU>6zL}gqqy`rNVf7M9;p%|Z&?ep*-Q)b{>2Nbiw4ma^;KxD z$su&$X(v9hD_!s_;TK+I7==DG&%iCc;b_Za9?JU@iu`ZY3;!LAK+P@D=;rFNXwUc~ z=+lA2NX0x14P{55y_Vg=OutAJ+Zc^(#zrD=ViT6%Vug!^(WoKY0y&P3L?aF12(3Ge z3&hcg|2+iFr=!rdS&_&fCqa1cpC4*Dk%d3rFvMC;myy?t6cQK5;qK+f@xRMYi!$||m#gzfkv5D|mek-`VKn;E{(1aF42f?*^9r*9`WcWs39oD>-oDKWvfP)7o z!Kt;{Q16lkoY(LaW(yy};T2j?qf-Qj9!!7+3K}qK`6ik=s102|t4e%c3q~%`gv?YH zI&WMIx8E&;O$TTgI_n_Zan6z+v7+fmqAhfd;~Vhy%?PNgEP~rMYJn^B3Aluh!nH6S zI82>MZ`O0??Ha2Ece@{gr!B&P-uys#UZI4laJ~dmp8f+G52fHj))kHq$_KJ1CIB3n zL(8bF1rbUgVSm94_%9;`Zm>E+cd1V0Z*RXr`_PF{NsptgO%h>&nk1&!7YC0nUjTPb zj)(K5lA!Y#O^DVWgUg4G!Lv2-Ftj-y+C=1lTJ>bOW_>E`@Joc>_dC*u_AR7K{v^Y# zV~gR&_*j_Tn*bdY9?&;urb54SN1@55WH@Os5$-DA0f&8Fz?WYq)89=zp!d9qH1qTw z-Mb)}t_>2?&rIjQY0skJClxz7D~kmabV|W-3rM$V$-;lfj??q5j^*22wugO%gYZ#+ zGQ1UD3xBKu;C!?rbZSwB*-JM=AB~3+T+0%keJlpQ8ngs&wx$68hwJG6w)1f9?PAhg zo6M~AIVya8{Si|>R6v|JykQWFyJ>?kglFd$UNw>QRi%shLbf(K~XUn#zp7`h_`muar@1e#XpjUPU5Q^9gp{ z&$yl%i+4+ERyuU-7&xXE)1i$FC6Q}sd>BVU-WxEvbL7bJ+z~Q7@1pQg<6IK{(v1l6 zy~yf3EoSX?Ga~c30BcWU&3&Jh;28aQ2KiQy6}Qfs-QW9-SDtd(?6+n;Z?mAptg^;{ zm(x~gmf*S0tYmYc*&JOd)4m@?X1fICW+t09nNXc&X7;4q%rxhe*>C$ZX6ljqOxxd- znC;w9V&+#`Y}Qn;i#Kp>4A1;zk(n#_V&br&$?O5I$ZW0BCf+MaySwm|nRQj6nL}rR znGUUN;V@f8_asmHhw3( zqMz>kipF}g_A$=9Tea(X_}@L=OR<3e&TXyfk3WgLFV)(nEAu0GFYZp@m(-szu~n1i zU729QKfI&gY;a90@6Wxzyt<(TqX(S@rYPGI2sjZ;x2`Z7*b)W>GYMe&cEC~c1laAm zOywmDz_lB);7YI%R0|mpr2CALy2yeS(JXLN9)ZVe5V%y}O4Zq!gAJ=iK%z4Utgpzx zSzAXya)t#+;VlOFjR1t!VPF;;0j+dIAS#ju*Y{e0&l4mieN!G&=ZsQ8GusGum*r5& zwYNZYOfjtVo(Z+)JHssXca-xe0D>GwLFvLSJ_?>i4ULk5PdA^Z-Ugb(s0tO{@0bee zm1hdjcz=s}I86jhdU%whr6zbC??c_1H39s!KM3YZj|1u}k|}z-7~U6aP_iH7p<>!z z@cGd~6cBBVcPwv)`z&2>xuqRC7B`9{B+WzNssiD^lsQOwK~blPWn!#Bj3!$|NLJGR@$56eyeos-B^XEruhjUef31*!jDL2 zJ`X=jG9>Ej(gnYJYJ>$@!MJccq&vRH)6^lDdTx zil#H?_2=MwRxU)n?g+Lkn9er~&!!e%In7hlFrzFxboogioT={1Q}{9))p;pHI{cZu zJEo87b@=JE)A(LtalFaK)A{qNr}AfrHTm*xQ}}J{T;88(J^qmKRQ{V_UB1WYOnz{f z1Hbb06n@v3QD*IDO!)pby8K_Sp7O^X)aP4xY4Vf!Q~2c_I{f$$j=x-0hWasUFF*Q7 zE8ksuCN*K%Z&1+lg*P}|#_;vsCcd~po^Nrcl3HUtnra47{O6jsV3V>k?|BTzPnI9Y z&lwqGnty6GwJEWPclNCcCFfhoJC`U&y($YcNli{PZXSMRw#{cPrKWSn5rs_H41G;W`btec4JnutWp4TBQKP?ujrz;5PW8tp+F9 zYC_o)IpEMq9SG-5hS%PzLBUToXw|6;j0z^f1%I^R_%01t6V?U`KVOI8j3l;LZ3Hcp zRiXVJ4QTA^PH#P{4aFU*@W&D@IDj-^pY2)j!8#f`O^<@JmKwo9$1>>J9ZK)oFGU|Y zYDni8H-LxDCJ^jbq@(j6^H;n1fO@T`a8JDu-27ugpZW56W?S@0@X9|H4);sy*N@sj zufHdFd~h9HwqFGJZI?lSr=&(IBM)5ha00i7OKF;yOWhNVp|8mc;D7iBW~@2#>%ZY2 z5d1Ij4@gOcSpDZ6yu5NtWu>H~{&PDn93}aXmzR9~zb<7dE2(vU8$7q}-9&9%w|gDM z2<>ewrQH7eD-9j3`v{$wx>|nS@@FaH>t_$woWD?MdG#18R@og@^Gn6nQnPAJ&79%G zmUc(IMfYwiO0?-liN4NPuMxLdi5!>DuJI0M#HZ>OSbjb@t>%wloG8JyMjTxjSl4Li zY@U#kV6J>6*nCRLB+&*{I}!0Ow|qa%wpw2=)$&39QSq3Mr^G*4nHrt8{JJgoQ>rW6 zgw@*X!bDW0qWL`A8cSP-b)mBM92Jnrn5-pxPrOqlDBpL z+%}0aoh4k9tE0@Hov5?SyqaDu=NM_pdnMt}+jYcTW>>1nO(eLI<^F5y;7%2B z+Oj&5zizJie{3JTG9yAtT4HL+{r_eAIscdK(f>mKTh0E9%E!i0=^eAshp=(XtxezH zebq(Sxxj;z_P>Nib9|7~@eF7Z+=slLo+DA+e}M1HhuCMK0+j!-iA3?Yz(p-9NR&?q z>K;1-qJ}Scq|%wuac)9Ij`1)qUxxm|+<8{^kE-x6@0tuI=1S?}EC8Ol;6JS_G33-Y&;k-}r z#QfwB0GFM{lQ*0uQzFj8gJ)jC(Ne4Nzef`Q-{=|Atvdi)CjNl>=?V;6CC!WXO$Yaj zGm+wY8IrwZ6~A`3|NrBEI*rzA{u}$_{{{R1PyLVl5B;w==7>f0_{y3_sgT-JCnt!N z3z{rPZHuy;!ON}nj0~}S);Y$q%g@Df+Gl4A3&EZmi#xiOg8czi54$#5o_T0&acxVS z<$kAbi-|t*mfF$&mO9q1mM*$7;%Mo6waD9&^7-gA!xz}Q*g<|cZs+`(sEA`CHHAdIQd%M;p z?mJWK)$U~Zo%v(A#z?1*x>9PXUXfP&V~$E)z4}TE{|%wFuAOd{>gjNX2BW#mNQImXDZpi^HK3F3#WU$+EjE>i*+@+UHN~`fvK5`CsUN zS@$0T{oDn##qFDd--l$$l=HsW`q4`ix_X*0$-f=#I@TlHGd>X&x+Mq#Ue&>~1yfLU zNaM_-D)}gePYbGohmiU4WZ}3pDSTJ<3aU3qLPdF9Sajp4kg`3Fy4DpU+ufru3H%~3 zSec8)dOD$4@gbpF*GDujdOywk3Fv{j(dcA|uE1~FL*XAmsj#N)7rlAgRN?mvy0Dac zK_7HaLNNyf!th6N$Z+H`Uc6gUV-#h9x7<}0j#iUF6}HKO0NYMMe@-g;z%~hzM*~T2 z(G@V^qb$x=)4-+Qw8$|wQ=s>=LwN9xiqJ-q>$>n?4sYVoqv${OSFIoT`rp{!{C~mz z|Ns1NykwdFf31I#R}lSAmOr;r$8h%I{I~4Qh%`3jl&NJ*{}GXtdrR$$h)-P0>PWHi z8W}Dt`xU1$I$iWFdL5hcB!KM~aGc_ESGMx_WLB!ZOO#Mv%k{<%u$#F$)<>cf+2K5s z>)*(6jb-KB4)0QyNxLNe<}qHhH>Qj(={Sx=z|0=eX8e}VRD|g_?JImz%Fn_cH3PMB~&-2U$YXaBI511EyTSwp{A)v{tX#A8KWh@QIW{kl$e zw#_z6k6*ze$GXR&tjarFQu`b3(T7@2sB?o|y`qZ!CJts-d{5!P;k8`)Z*4Xwm~9%3ITeL2 zk^ann&gN_)E5F^G^}#;eUHJvv>|2{f7po#TSr0d^Nc*{1>V`I3kekMWvEl5e;@#}} zTkklJXWF8o_$JOre2N!#_^&8 zlP)%AXEzt}aGa&bk|Fl=?~iQGvU%b~A$e@9^J8}W(;r;(@Hh6igXBM+++t1Q(%JF1 zuCN`4OT-C92RU&1DcgVi8|Pi1z^<0Gz1a1WTOs$8t)BXb>*()bBXWD#17^jnV!RI9 zySJ4+pc2XLc#*)FtgB<`=N;VaV{66pj$aWK+)QV^?RT>cJ?3@%=q@(OHI#F!{K@`S z$>m-|{^7pZ=Cdh|9o)RosccS=BK!Wx8ur4iA?~M#Cg-8@Ok^zeM%=L2Qe0H|nXUZ! zi!*C}!HPecvk6btxk(b=k*dq6+Z*wW4SCzjdUkfO3DY-l@;h z6@2Ah^p>+1U%qF3%vW%tRWDe7B4A@{6Ah^fw*uF=>I+v}+Qen=ddf;! zKja+Wc8YyW|8Xr(ibTR)kDOWD(lSPXxIoZpn*jKIRxy`oGtmCvfoZ;!4tl9hs?p);uE~V}oTODwn zTU2(C^&54K_4*yj+44Cy=>2Dj-S>(;C!QDUpDbdVg_pQ~k9xM$bC9*Ls$g3p>clxq zS8>%%?riDfgX}TCM{Mzo7;dvo9Xq%xjdj&85g#_Y!?nBhvX!^@ab_vI*x!0doKM{?EB&UtV+yS(MI|Z=izi!WWOeZT{N_my*ti|b-nnR3kg@SlvVZNBKmDOXDWgF zXVA|2c$ITLMj0ai?IrBD9pl(Zo0Hk}kQ-cw^A&dR!7R?Rd^d+5y<)+ibDYmY6ISZq zXfDL0Uo>db%rbAA*qHapV(mK-Tz2noR`^83Elw=pLS_%w)=vJwiKoZ29)&rU23G`Z z^~W(>NM|w|f=6n7yn{qx_LW?i_DS~P5ho5DTqogFjbj@=*@>!UM{)k{LmWs}5=-?R ztIMpp!+K2REP<8-=c?Dh(YS_lT<$B9l0G9|4ZYbNpN6>ENff(wXB#V3U0R#)`;j>A z>TNbBdW7pxzr@N~SaaTUl(^W%lh{ekhr}H_cW^J7MciVcr$4Rwa6sd%yb1Gj% zVzpOxoYaIev8w4wPTZBvhJ852wQLSxg|aVM27hE@7pHJ{XYAsP8`Ze-J|k9kC*o#1 zd=+g$eYDt1!QJCX6xR#8k;h{(rPkDFZX!KF*q3f=re+-jg)4W;6gRrx$Jx>B&ecNk)<+Nz#+jef?hlU)}fr_oAa0)p6A7y4L!hpYQiPmw>&aRjgM9 zEvjJfFO#C5`C16PHXHdnPNDCeZ)hx^j7x8Q0He(blqZ`DynPp`(a0VYWKmKy!5g-i zegf;+jx^BbD{_x{V`Y9AR_9#Cq)j2UWd}sob7(`L^Wq#R~4v?tMgF{ILlsz5{ z(|yjP&a5u5wCNsnsm2T?;?Y0ZxIiMY!%H6R#>>>&toKkXs zb`pu3FPbDO(Nk&!ZQK4rj~l^Q=iiRP*9lZLfHFq^zNNt(voQ2ZCh(jbv2Nph$j-FH z$jeUPacu``Ka4@i=^UyuBFZAq{;2n$4~^Sapk~}BW{)HqtL}+`H=&dUbc{mlH{ICN z9E+;Uu8i4$chsf$DHtpKfIG_$0|vICnfN9Z9a*JxEssS}fH%5SbrF|m_E<2JJqz4l zGVMLjfwSid_4;ckX4mWEgxYT?T$oBc3S+SSs0JEdZa}lGy`-oA0aX3%M^%CWB+xw% zU9>C+`Evreb?bp;&3!C7J_HVpY=h`2zi7tzTOdwaMJxZ*W6y>E&;psgMS$Pa4r=J|5>o%{0p9ar7<;k?qP41^8`jiz>A^#!OKGh1HdOOhTR}qG+D22pD_rQ_WF7k@yu=H#mnvJqU z7d9#Gw>c4|b(FR!&e0*U*=Xl;4rI^kF?{q#@P1JT4PoYJ?O;pI#@z;AMLkMKcz|nJ zH+B~HkdT}kQ2t1RS(b8$SSJC2QK-`A$|Y?3wgVz3$3e>vGvL_VCY&85ztATxIvV`$ttA4*f2g>76?iS)SUurA)Gdqyr+e?| zEZ;|1dvn-5SGvzc+QxCsKe1+iNC8-0FtQSRKQ7=FJHH0hr~HS;dW<)?|$^2@ky zVg{s6N!#@#5)X7BnpR^Pr{v#i`@y{T&tO!GQ`$6-T zM)cU;OT|5V&?PyRa9sTr=Efq_m_%YOzZX4CbI@~X9113{WELg%f$pyBbn4^`kO!q8 zXUhlZ3E2)lg9Q-e_Xyoym1B8dFN)hf5`DwfkZm#t#a*$;qEIw)|A6@$K9I`ZB8=}> ziX53-+4FTSly;m2m#0%mO<5Uo^M;Z5Ifm%u+d<9d5S03wLW9$4=)M#W6WTt4=Q)a{ zH%oBKfL6Zo z8Zb7m4x*OVfb(i=$k?5Z5f|?Q9pwrf?aB7m$6lcDhACAA4kp2W_rRa=X%FI@rZ&UzL0r4oB z5=A|K??!>J6Pkk%Ha__Pfgig-HFpHKJo^Zo5XuOZW;Ae^0W@wo4-Hcef$p}i#OiYh zx>jF6v!NHLpGp_&Qa0kQf?H6@{Y=_Jj$=mrT_D4GST~>!gW6A`NMXbnb=4DBodj%2 zE+s|$*%;*c1BE+Wu}*&}rt+?1{lq>@X;gy4tq)iwtOM6+Q84llsy%o$aOq5FK&jS%=gIo zW&|RcT(Qpe6oi~g#pr*I;fjJ&SUUIzYP((mzwC+N<)elPQ<~9bupJ3qUQMTN-3+-T z1)BB_1MQGy(CqO9xE~UrlijZ@WY5rTq6W_tu#O0z|_XS8co>0>Hf8vDs8kFU-n>Mo*B<&rbI&8zJpV(m2R4a@e`2sbs!f6)s z9O|wJQT%%iNDMtlOK>%9N}CRve%olmg)hLpvW^r9#$(zBb%3DZ<`__}rl*`mQaSqrRi~@};7MF$>V?$6UIlI3V3|D=?Bf<4xbFme( zZk%TKp=68=bwp>a0Prkh_sF{w=pIfeiiYJWWa)3gMsWmPG@-P0_c^fIEW>~cb+|>Z z7kaL$fY`nTr!8!KmG1*lXIh~$?kp80yD2?)9R<;eX{dc<7}y2fLGeLdLahO6M$1r8 z_JKCsT?@J+Ux4P#H{|5M1Gn*FM2TF1et}^k5?H ze#c<`Dd1i!qGsQ_Xy@X0RQyGc7>A!j@fdbp&OKsON76`9*kUkPlnpHn$5HO>2%=4e ziug(C;Ic$P`1lxwNp(t$qKdkQK;>xtm@MJkwD3f5f@V19lO@CN6jzD_XujMmVk z>(!t$sS&LI8BEB=pFlDnq3qdo>c6lP7bU+2*OHrHu$a|-WBe$u!5>8Zy(p(gps=ZT z2cogXfPOMGW&?Hw(kzS~mrNQ@N+8Jo2|f%jM@zB-{I;8tBF<4zd%hzL&JRi1kU`*c z@h8zN$)mYvPoTi_76fqFb4k|(8e;cixW~WXI6n{aA5Ve!-_x;V**Eb2?g_e^MxbWS zNV;$T7w}2`OcHd}u2rWPER0J2S%cCRB`K(m z#=x^Hq0{Ci6^yh}N>3F+YG4Gk{H#C;{UxXh)bI570O)o3`g--ubFxt8feCiUh<-twL zAxTR0e{N{8;1`;gZbvr@H8lFZ#%#?s@G)d-*xtJ!oA#OtZoMH+clx8I@ISQn2nLVz zi*%}HFw~Ws;)?pO&|)wSca0bZR*T=EquncPxc34Zj;cv$%_=-%z-rNrIcPIT4|L-M zP#c{FR_~63$G`7Mr+EnYi>y&Pq#NX|ACYbv3l6KbOyx_deA51HciQ0fz~%F!EDBBwDgU~qLfMK z(0mbsZ=3_p&~3zL`+MrYlMlXDpRwh@cEZ`HNcYUHfkkpTa@QC_=NjqGyG$KR=qZj=YH?Nf8mRy@inh^Fi}RJeGBB zLMM|yV3tr0l^HTHqX#j6KpGewEynow?=WW41N86M4ubI$pdnZnGPp`e5VPl|<9DnK z{|rrD*T66M4#o~E0V9Qf}n zY9Fn|Qg0b9>beI}<5-;_{)_ruV7bDeCTvMK22%^2(QEexY~2)(g41SLxv`7t3MZoU zwm&SrREb83b|{&Cit08wf!gLeDMJD-Ck7KuS~e4Fa1Fv=hvI?hH7MMh36-s1amDx7 zEGumQ-E&T8Jtu;2`ZX|}!}3tFX&Jh+TC{Ab1+sh(BFFcE@1qD9v*j4roKJyuEQ_eT z&IisWM<#1eC>fX$zx(k|Nf{bO5PqeAo)+oHO_Z4*dgn-w>D|oi@ zIC$+_jn*>~LEOKOsxEVhZ)g^9Ql&(1*JFq@DgjkgAPF2^3<1r7Abs(cil=6vN#!w& zFUvtaPYHUQF9plqRw$}ZMJ`-G@2EPgzOx3KTm?9F)+#h{$p?|uNxZT9H5Pnp2cs|l zLc^xp*du>{64eE)oN$&TNMAws&vpp?AOPvSASyB`Bs|(d{bl3OW!D`n3mXmVa<8Ir z!9c1SG?@_^dnOjJLV3r&!GypDq_>4wbVvblZC}x>qY!it&%}HM0LSSq^IHnt0gF!`x8Uojb-_OHdJ2i2X@6}=(x=T%Wj=UMZ$5G$Howqc_GQ4 zI|Z`0TnEmZm;AEB5;T~320CA#W$Vd*Nc>C*mVOmO>bO_H$q!?n`$~vr&s?8^Awc`O zz(X<`oE}Wa&JEpEw|*_!u=|ML*^?Np45CS*EVjN&0FSE;RNyF3dPX>a$L7~mHv2Gf z9<~A{uSKLgGyw$jRx7y|-D%5+i}cX7aLCsjMC(P_MB4uigq@V5)I1cXkBx`Ylrvy9 z&kW_|zmSVsR1ou1=@@qjhC3vJUPB6!fy+=_rAM@@wuAiIJ`l{@&WQ5vF`}84Xt4Y` z439qz>KG3yTJ;V&ItHXU>Ndvy_X1pfuRwr_H>g8(Nz0lT;ua*vl!igLtF;&$wMSxS z`ZH+kEkQ5;7_i!K215HCqk9G=V#t%9V7dM$F?ZMkEeC^uW4Z}Eel=60v9Tzy@@EWl zenHdo7Em{fz-|3&P=|YxM3cQB?%PSaBZBc^ax~od?=sH!I0FsbI*uD-zC~~ zQVQw`{b=bwjWERiAyzJVjNxxrKuOYXu+*^!mo*hQeKbO+?@i?16GF6}l5#}P(rx^| zLF<4XjCJq^(a##-Pq+e{(nE@jmis`OFQZJqgZNDBC8`~5ph$0E{gfRL+V=pRY>G*? z0sC(9bLWS@r8%_}jOjKE6oY|PI2jy5+F zAV2B}q}cpK$*)UPd$|LJjFuaUNXu9|w6Z#dq7!?GAp9W>GJOtLF0nV1?@Oo3XKgqOj2rd^(%Z+4Uoaf9emSy0f$_vJ|r? zyaDM$W3*Z22vZlDpzzRY5}dD~;i6Muohd=_=0!w1ekV%fUlEtf2WY5U6!Bp% z_lmD|Mu}-JQ@vs}T6SI|oI#tIq^d}aSlW$#qe8%9FJ+%A2W---Wtqqf)ND8iZ4qe@ z5!nPOeV-t)@+Z2OW>K#va%`EE%hoVyG{wN1om$$SW$MPT5;Q*X0tGe^!8}mn&E=T8$0aZs0R>1hy=$K#!R%#B1kac1>-e zU7QR0+r|K?=)ia?hPW?@SQpMR$&T>#__SB`|w)_c1H$H@vr(40wIg91bpRvU43U`4T34Zbs3d^+fW%8A2XD0(ts$c-Zy? zNC10QpG?Lg4+7z3PT=%;G}a9IiC$0qpg>CuvB$n*%l;bTpI(9bi^hZM^LS-9>nrT~ z;sAU4lsLvV7XyuMqonW)?rPbFiJg;yBS^8Yyc$KU$Nf!IwvAA#>4JRy3YhTaG3uD+ z0w>&rAGPKg2v6!DuT>5*mK#~UD1*q+yTN?H8jL50p(uM4WVN4W*{=wN0&^6VkEX`{ zTTxYAp>*z!22nTitqq@1jz&BuHYOUqzup6*gDhJy{eb$@)}W_lG`4BHS!U)6!{1** znUN0FxM!36_aj)&6%KaV*AaxDloJZPtuoiD`xyour zXN)~C7*p2g7M%Ps3W=$+7-`1 z^U9p~eOLuD-#ZXKvj?=dC!yIQJ$x9Shw|vx)VlZ@)|x&BQBntlzF=9l%ugZOokpX_ zoCCotedylv0W1w7P|$xTiZn_l$+s1^bccXnXea2dj3oJqX)M#b3Ih9mO6mRv!cA9V zNz_e{{2fD_KD{QfAq%im{)$+?IEi{m?C&@6CKfn91mn07V3ZY1MEHFHqQzCOrFA`nhV%@V-#C^jc4Xpv31jdV9-C@iP^o|u`-%c!Sb`j z>`xW?Jw1c&!iNwrpJhA4mk`5+U)VF}849Q9V>7P_J<_A8dTu@utU0JG(onSA^%gAE zA3^tJGj)v>;m{?SEFV9E6`0} zhP9dZz{V;QIdwIl-(?459D~8#wh%>OQ z%C4f{v!$j9Z1CLsvtR_bb#4v_%Kk*C6EV1FJ5CZa*cM|5XO! zvs8*4E*ArM-0*OEGJe{4Nbj@jCq zzhx{f+)M0cDvL@{>uxVjpUBn<+n!<~mqG9BE0}B31qR+? z2wUl;9%v2P~9 z1XjyBox4xu6}iL-2SRnqCyezlVQaUmz)^qUi>5dcT}2iV?bk(}Vih`E?!=V-mFO!@ zM%l7k$h&`*7H!S~-3JO%cg_Rz|72^%&=53ay%VPw$%O0Ziq2*$vGE@-)hdNU~FgtviPe+HB?`^$sy?N<`hY z4MdW8Q<+#C4ZP#eu(kgq;JEaY8;^d2;`DaHX)xlq{MdnUvm($-bs4tQm*b*{EL?Z{ z3dHUl0YS4KfcnHbT9$Sl9KO_{cJDA0g&b2l@+M-@FE`YFo&jWh>y{QsxJtVL#v^uNCPeQ|I&?1@1S-6KH#MaLEB~( zh~92inkZDzKC1v@oz8>ywNxx~KLllSKVtXK+vp^CgyPXHR5Nfq(JYh@mveQns45y$ zG6z73^KX!Bk0pW_eI|bId?=fh1fc;w=n|hnYDd(8wPPQ&g&@pw%R!e|*5hz{2jtQ@ zSTs<9LT4#;ydVaZw2tw}{0BXLmf(%@WZ=~Qsqigtfa;i~7`w&|>oT4K8GH;wYE{U8 z`w9(mRw8HgXhwK$Keh#zL#MYZM89?d%V#WikT%fi4);L!cO}L>KZW}Bhfwgf21Q!V zRJ((Vn#ISIoNp0K6`LCwbLtYbEX#!O?qS%lW?`SEKc4}g zR2NiPl`Ch3U&iirY`v}tp*91*!tkxBXf3ZKQads0TWA2P8=IK(KJ6(t7xKtPbf0(YYH`y*LkK zBj%yFp$!{4E@Jcq6{!pcAccEj$odZ0xZnheZyX}onLE)dXFZfVh>#~qrM!YP+IILl zCZ0M0ZFY;Wvi1^LT74ZlRo|&UWPr~UHO+lg0g10iK#|*3_FQD^jtUhT3}pT9{P{}# zJEj=6O^Ui1VbtUK8?X$yNwb?KVZPpOlw9DEAe}U*)H+6{mL7nDLHCjK>Imui{17Y; zd87K*5Qu#=1&ysgVPtU}W(*Xg{GU(Y=MzVzNj)_3{jMlnUA}3ME2zGcf0h?qnb--9Q+f@jXY4gG1 z^9juT=NpP|ClSr>$)M)i5`iTbvjUR9*j#RaXP3M?9;`xgSyfr3JK; z)ofjM8|^;aLjLV95K)~2g3a!X)B7;gaMGwzdl(cgdV@YA4r7gwea;6Sf>Mh+AQazH z3Xi;31}E6Ubop7JMuWgHqX=$qtY*FUJ6PBF6iv>*L-(p`v@QrFp+*b_$4n0yqsx^89nB z!05OOh-RmQdE-j-lm8|HEpNvE;09beJppCamROW|3#tccKx35#O@b4+)cOtR3}>~$ z*JnV@HbB`NXOv&~PPzQ^Bw}wBHqU$reqT0_L%NMvbEptF>q;5l+)^B#_zTG9B|wjM zgJG@|&UUKM@N5?fVlI=G_jNRS$iEkWHDB1N{ z8UJb>*d<-ShpQi>;FBtOOi@EKs~?#_cc61Hb0~s zGQFMka5T6=(~CDcia@M>Mq*}Uve|{PV6GVtcI#_LvPfuH9N4t}gjTCi zY?;|dtjvx-VNtxV9mnu&6&p%CSaDZUk>b2Eu#*&MQmk)zq=TguL7DX9N> zGm5raE6aA>0M7bnd}qO65Y*lwZYzF*>O%!-IyM1RCyWShMgnP{b_Uxfc)&x03Ygmc z1Y4JXL>IHSF#SS4IL&ILkrut++^y!?fd+fH^t7P(8Rv8uIo)z+Y`t6r<#?o0*3t zmCsP+v4vS=`W_QkEJm*p|Dnfz2Xr}A0Y!n`U~PJyI$x?q(a~gdP8q{ydrQf~N4;2m zI)~LXdEmG~hAy*%s7(JZF}vKtSZ26lL(VD)cqK>Ty&KIk9AIkcLX4NTK}!$I&Q@kH zbp^M9+tGnOo7+HO<*bZf+K8>M6tHegEEee+pw5E}U^y$ASa7p2U`YhcW;Il2!UD+d z{~jltX+j}x$Kay}F?RDWl%GmOLF;YCud@i<(ubpZtSJOV-NC6TQ$SSkx6(l!0bYNX zA^rUpv`#8PS{Xw0uHVA^f7?-Dn}S{nmX}Wcr3{@FMoY?nfM!@V@h_ybA?3)^asp)i3^k#Z3G?glDbGXI5Wv*8dGb|0KC$WRe`5#*nn z$%M>om}>bC4)Li&4|M{1%(;hk6~B=zH-WgDO7M8yAKXh%qQ_e{!`bu*^xBT2hoB54 z%Z5?jOb)m#-A#EOx~Loe3VJ%nqoaK{X!@SuaPP0|-q@=&@~K6s>s=HTbTB?=%ptO` z0vn>PfXNv(w3@X*#LNWX@5+FlE4$F@;BgdiSnopjDX8=Zf_2~&T4&qK`oTURx|5)Y z)&7m@(pg}Zdc3YL%U$$bPy!EB9C zJ&KflJP8>MKOo8eG#YK41M}5o(D3Lf(LQktRRQTB?R^EoS&1l8#wh(#jUnt;6PiS_ zT8lRuTN?U7_KaDm`~4wkbay~D`@Pm*PgBj&b1YBMBbsDw+G@=D^)pgY^>HLIvNFQX z*$yaJ=mCixwZIFJQLbJwdHC%lw)h)R506-AxHA+DPdvot#Zs8?LT!P<>O6nSo=2u^AILkfwEK?MS2L)y#VWkr(G8ZLui&9C=OHM*60)az;v#Yv zhO^mgBHWF)Z61Qn4FqqKXl&+7(Syfk4|M0FYcyie%Y2mWsX*QoHY<7dINfFX1iFV6 zfaNH*=D2ST+H>PT*T0X(pPh>0)05HKdo<9AVBIHUtl5cRHlUgsWfi0M-jk3x zL>pR~wMewb9Z(m9gN9myXqYLZzVia(yq;q0)}P2V$shqE{J~Q=1B?O&L-(h%Aej9G zqnEMVp=&d!MUC)qb~FY^+3a$EIe4sZ0@03kbbtL2#S2APb2t;6KDE#yT~llrl1u!Q z{g9)*Al>7o8U(z0#&d-(25yK2_3wAoY=<{QN4lZS%tt7^dxi>fHV~iEpTtb^Ng1Ae z9oe`&+4uW67_R;ZX7AUtxtu;U(+efC)WfI=UqNRj>T9MqT1k0ywM36ocBtgMgrad2t*97zl z?uY*O3&5c}56q5Sq2{-Ip!;JDq_!8J-?2f^P{{TK+#d)YQxa)_HOq*~LoxDN2FB!< zU{SjOhR8c1)Fl)1o!WuxKM0!cuST;pS1OqR5GJ~dslRFjI4{}bJR zv#k2~0?>ZILr3T1XuRzQ7zJii$Kitf@jt>0k7~ zuVN5u`2aW82@^kRVHSICboMKu)jxHxrb&vOKHHsWs-rI|5;yCaG5MoU!x%q0e$FCg?|GqCf`~k~Y_TV^Oi5%=;WV0lo zUO$r3&qWw@?E_d#{=n|Xsq8s_h8T>}hD0{|J+)~VyT32Q1AkvZ|4k#Yr9*~84i!Vz zjvL_9myY{RpFqp2u^>9!MSY%qCw`R~R6TeW$hs=vP_h`B#c^P~V<1Ws3n9N&4GD|N zz`dy#TK=0#8eiT(v6DFpeV-BiyMLj4)=g9!Eyl7|fQgl4(Q!6|eF%CunOJmUHw;I}(Js zzrlKG7WLFG!vHoXWVIz6r4ur-#y%N|CJe%zM#7?bESCVD-XriDu^w72YgwKl0Y@I6?OS?Ek3>WvcT@!G4XVZwnNLrZDcC%2?{a~D4T7sLiF1Z2tS^Q zp8v)p=LPHI&sj#SUF=YJ;Q=w<;{h!{ZD``;4Um1z7bSPX7|FL~(7DY7INaAvm}@$E zHSI;!{!_|a+b?Y2SQ{Ex{|mdOwV)*JH)^Wa(#WmN*g515a?=e-bsEbahp>9{RUa&B zy8*hVy)nb25d73epo%$3-HiGmVB9}wd?FMC$!kc@yM0)ooq=ZWhLYgm!DzYV8eK6Z z8HF2{QvWUM*nXP#%$CMH*w{Z5Lb)a==C7oJ)qfHX|4GQzucey39xJ zhLQWDuC9#Azh6B+{vWf9a zUuYD!V&l})U@~8UE>Wo<2pfi-W~>HnYX&p%CB`f-l5~Gg!K9#gEUgfMOU^7Zp)?3u zyat2T+mm2)S4zcRQ;FTYL}>c`H|RFagF5L0XmaldF0C5k_*WIyj(i8ZWJ@v2umu9O zen9AoMyhsewb!Si3De$H2n zzwH9Sym|=p3iPy&Y8E z$)!Q_bCBZ@lCBEqq;{5wLd!BD8gY|hhZTbe`%{zQZCErQ1%keu$AAz$Jh1pJ2vwJu zO6;XueBL2v?RBL~{|0nUWxeRGdM3ba2?(@9Y0L59MECVCXgzfYRnZR^$!&KCl=fif z&Q3J$E5Q~cHj*)E5@=j^lj`*dEy2y`25O8BT8Fxm=409QsmK|$M5&H@PHGA(L8a{s zDw8$fJm_z9$71x{#Q{Q&L*0l*^gN)4PQNSAecWsCLBsklbm^dQv`JbB(gPfnV=i%@$#SacFR|0|Ju$i)2nSd%Qh=<- z;1Ul0f8Gc2@Y_@}awQg3%|pr9Vn+S_0Q{a14Do&KC=sx}6kH+Jy?3ZeXTLJ3H5L_V z-ywhZf1tU6O3N$yAPcXcl829JC3A)FOqQVNQwGCHHGt5Pxv2Ky(_L4}vF^Gr#;;*{ zU_~EMxp%TU>?E{by8`>dU!il*XtX{RiP;Wf(0`-?@2YFS75WhW$-_`Eu#;|KJr&9L zn>1lq3bcND0hR}s;UU>|Xfa~B%E-4&_3UR@r~4CAN3tw3q#vCx{lxBpI^bjyjG>1H z0cUv?m9bY&$gdWGv|9}sf>@lY8U<$VcNv$j?0d}4Kd9L>YYRJAfb%~e{}=OL?5+P7 z<{zksxhn2!+w-ftxr&6>%at44Yn6JlOc`HG3uWnlWy*ciD8KR7W97|x*6BG1`!R**H5JvF!r1IEeg>vxwzm*@fc?zM-R5{16OQAWrpJ}k1 z&J?dY!5?+}2!B-4L55ac=a)PTQTF2mFpV~|nd6@}GgY&vFmJ;6il+nK@MTX<@r!OJ zD;v(=<8PlH&Nsz1{MJ?Xl`kDqnDxa;j6i3%!l~bK<(Vn}Dh>qeEAJP|?oRnw{N`aCVNrlP%YPV^_Sw);4T) zv#rgHezS%QD78J!@wQvP%ET^hWsXf_&Q05$c*S;S?sFUD{H-Scw$rVSGw)h2(TSDt!DPP-37BzZQ|bmQmj^ZU-v&dFr#_77fW=hWq3cR>7LwvESe z+ZgSv*#YWyn@8&wSc5rxZy~$>FYC0m|6kUB*8jr#|KH93`2WnmvS(*-{r{SO^~mNF z%^CQX5&o!9!hrjTivZfEc&iK=I+R>>zfHFQe*Bx5Fz*rrr{=GGQ{U z)Llvhk5`b!z%qL8&?L(2(l9||mXL;F$LU{NT#0Y#60+%9C8M(~o+(s@Faz$Gk|#?S zk*D7UM7Y+GTqzG!Zuq*GB&^M(E2Ynw5iY;z)^Y88^|66inKptfHEv;w-PLsc5q+lO z`&zc&eHHNvO7Ao_Fkv^B5b5jrP(KxWLmC&%KgCam{PR;uDvd z#}CINXUa$zVKoZ>tDA&_6MB`8bR~36uZ7~HUJYGv-xQCePC=`A196$5FO2Y+f|m@Z zzyj+V^qg%J)U_GnW8M8QZbc2fR2fW68=gQ*STp&ZHxlc`%F>BLdPiT7o)r0J}>iVRw-@I0S=SUiF+1tzMGg$0s z6RczZ=v|Jy{pwTR%}ZUpx6cRIA1jTJ&v>O{uX)$W)3W_D-M~-BUcIcA?cr{J`<0Vlr2D$)*iZRS&)(KJKD{=k(T;!d0q>8h0rq>Q^-mww zQ_RyT(YJq4W6t~UkF~td%}aRC`%8Iwr~k0`$^6aByW7v+s;FtsmBGX9sUO=oD!R-Q zytGWeGe*b0V^Kx=+DO%$g1`TeuNfGbUSRZ`*X*NXKl}S&`};b<={En2u#XBT;O!54 zEgxh3b?IG+u!NB$>eG6Q+}DZj$D~^illP&Y5oGXpYGH;ruLv*>6;Wo^oF5w zHZy=eZpvkT+{sqnXzW&=4ArHhVlFVD;RC3AX1DU*NDK1CVgUWL?=6!PeV;6ltR_=N z44~a}GLd<0i7LQsFWsGF{b;Q6`dLPl^4tO zsqZgQ`pOLs_S2K5D2C>&QLJ2BZ9gDzj$(TKlyu`U=j}hO*{^t$7HNMqqs-p)-`I3l zS&V(?#vJ?3f^vJQjZeCd!z=qi#o6{I@mh*Yab@<`t&`H9g@-CK4_GLIj+WUk-4SJf z!tb3u*XyPI{cX1t3wM>-pXv9;zJKm9#pmGkIWd)C_G8|Z+YgnLrce5C!(LBTV_&&R z%U&;LihV_rsl9nku>H~ZMfO|vJ+t4&SKHSKl)RjtdV8&q)9GKb_t__k`YUdXDzjft z5)>XwqIn7OBKamWU&ZC8H|-xsl-XMcYV3VWTonJ=ezqTBEU`DxNlYIrR`Qw?LhXId zytSV(G+cQlbp`Wi7oUzL@Zbou*wMr47?5sM?~l`ITBr2U$e51j-x-&P!AylapSizn z8nbn=m>F=WhB=;D#iSY6GWmZM@+ZFRW-cGQq;z?HoT=^L(g!Q*8HVkxxv=3D|LyV` zMFDe!4lPS&)|AyV`A>f^X1ImskzQtI^?l~gB89T?ULpVC_DJSpWDB!w$sNU;j|cet zgpJA@O{bMPbwe0g*KVbzb)(|oOv)coa#iV5tKu(gAIJ>%@%)yMZ(I*2j7 z7^Q$Edd$eVeSCr6WaZ`e1DOY3-Yce#NmerTYn1-Q1DS&cPx((ja+%PP0~xE}a%Hz_ zATxWw5N5fHRJr(S3-6La3jdAUAm(V4t}<)>OMa&hmq{KqnLk0ik^f=LO8%kMiTrof z+D!QkE#`sl0Om_|t9?nqNM`rX6vd}KSNUr!rYQ%84P^2Ps+FUT=hz?0(pI#+yrj(E zR>rS=J&@UZVHmT|=cMvFGm1GVea;8tcZ%l=e%Mc%m&}h%9LlIoz4&uIEEU4iQOv97 z4$QjhEJf!02~1-@BmSCIB1P5AHH>-iafNIGRovJV#=lk=sxS*nQtWRGv9%G*k^kSH-ahtE-@0|0!=bpK@IoGzkMCtlesnp|+F*=on%CQHEl)Gd7 zr0%AfCq^YMQ(o0MrPT9KN{;nVC~q|vD>G6a7OX$rPf5X^%7O3vmANj*lwS=wtcwU(V5 zc|x^vL{#CFFYilxPi<6{Eiae)Z4Q&3+%r(-)vZQq+HNSDW@;rnpJpQNb-_|*z0y=R z?dO@|iVRCx&2E`${tsJJliXLS9>-hC{vB8)jg}3O?J5~46OKBgnt0DbwqvBNOh;U- z3V(f=n=h}I2ASH(evmt=u1LGff+JmJl_^=0&2gDh)AWJTxQlkO)+<)BJM3Ut&lFpk zVOS5UvwKWrr|&z; zl(R}z$vXzfB>s1$U8y;$z~V&dLZJ^%Z~Yw&kEM%?Egu6)erA8zf@&;HTk zYuvJ>f!>X1{DH0TY~f~TV#%FOXk3f>1)fIHyVIas`8&9#*@=BPT?bj!tc3Yxr{I!p z<|ua7YV^=P8oB*)2`2o$3K^!A!n1WiRJt<~-5u$UDxN2>%2qjR^g0stT-pS^*Ttf3 z+gG7Jk430(Km=06#-RHC32engSG3~mA0aAUg{n{fid?+cq3KDhk$Yw$Y+TNy&L;@%5Fcrs8YXt0)#m&M9HveSQ*1XEd?h=XFEDjz^(& zW*lo+*a{i~lhLc#cvQPmSNymo1i2*-MNC#N)Mch6vW(vgZ3nJK$>Rc$&GG(hR(@A_ zp<*@(x?T*g*9RI*8T`iPwi zEX5mwJS6Q?lR?3R-q6tBMy&dzhgfjkM4aJ7i9^gT!f!sYVsDLg5qbAYXAjR9Bn}_T ziiN8h*+s*1#gj9T_`x$Mc3o)8hU@o~?E2P39FTlMoE@0X-b$-N$KLr%29)KorpQ>_ zGpeuHE>B-F=!ihPxOX0Fy&)J4njQl7eJ^Bx-SDZH9b-pbGe73K%qvNlp7Tg(nAt+j z{w!NKGdIaKI%qOg*4mrCY%-gA>QYO6pTCsKbO@w+?LR|hZF)#mDh;UQ&+4eMjYX8- z7DwTj#(UJYU8z*xITG48Y@IM+?>$OB=qoBX;tka(uc6N8$J6zZ_o%S^C)AQD_Vo65 zxlU~d+^D{XA5t%lR8z&N-1@;cUQv_k99*G8lIzGjt6kHADeCFD>(qd&m#AHbZc!nU zgD!!Sy9$5b>`uM&>`htP(89PYzfs@bP|$BKEpWLSeBI^Xt8Vld!&u7g#yx8Et#;~W z?QP+w4-JL?vWTQ$T@v;EF9%&_aTjZJ6r6YTzd_SG8a);}O zHo#}5zrmm`v9Nqu8%#MojB!#XGX@tUnc^ul)YUDA&tG1F9)DEAW&QJj@T39K%k+e= zZkj=JBY?_;buf2MB0Jc_AE@@<0OkSR*{qN_cu#yE{t)vA^ku40(=;RGy>boAT($+K zAIJk9`?z1Vef$b8dT~uy7XFnm3$mh7;hRMdl&SP;|H-2I1FUd*svdpCxIi>Z+MQ;C z5@=h4Pw8_BedvYDL+Eo(3OXesTj*oHk$x)(rt`kIN$(z&KnLs|PFM755cyKhBHsZC z^dY~Vw6p$px;Aq?-TKB6T-8mW_deJ{7e<$fE?P`;ncenO80fB`=kHoa@3}FAzWFMh zezv@v3hcoOZ_OSg9J8-V*z6QdPudwy+egIFl-*3qMwLYuO?@tmc0M6oa`7%5lemHQ zwPHZsGXa(JI*J-PK37!z<52oGlR#I7{Yaa*#fvOo?xmerD|+Q~mOfoGle)OFK{)&C zG}@kd$#}=dFx#Oo+Le%t#x@*=D+a7U3yXc376%JBKvap|{9z3v&Sk-pKma|bQ!s4Z zCYYv^1C0-!W5#a!364Cz5$0@chpUsbVA}RCp{~CXdl8OD<@2-Pbfq19+Ik#b&CZ1S z+dgN{jLL%O^db12P>oYMl{i5kHD73)Fi7rM;eBeW>!a=Pf9QLM-~T?~3=SAnR>H^Ic_I`G8%1nna; zW)AEf52imd2h-smd9$0&GI@o`p z3pg?_7+kf_qMtOIie|dMp${kS6MZ&p0@&_58l*Q*0VVT>(cxc5fp)J`qMy4dMB^m~ zKvMNgAjs+ot&i3UeQ%GaySBzKZ_M;SLDeh}KPeQ%nNMX-H>?GNx3-BgcME{i^I^0& zC0|tiI1tP;tAlw7R`AOyTTsij8g|TTTlALlVI@7vnW62wpz$aBS({!7Fi2F)O!cuq zXM?vvKkIsU(9#N3x&A?|O&o~E{-lF!>r;e>JO?7Xg>%sJq8{v_JLix`pMl7xG8I0| zbVN*&1&X@2m@TgEhh!P{XzHFI_A)gVdPY2Fs+{f6crONxx$`@myT%O-3vmXmt`5+9 zxCL{j${9URAB-%PTBD)~4yb+Db9gMp4*5Ua0xZO{pi#vH);cu@SUrtK;W3-xrr%#O zlyMlle_}tBKI0EKHx8o8+&FfD_oqmik`C{TN=Myx8o*N%zksd#Xr!Kh(XMBI`d{W> z|Bv;@|LOTRZVm2#bp9>cZjtJ4t7!Q7ezpZ$T5V-B&va3;^~S2XUiO6*5f3E8i^i(d zZPb_TzQUH9qN>Y>=BR_P^?|wdxh+04N1a%+7cE^pPCR3ry)fC#5#3r|M%NB|&8_7u zWZtA^f-d*Jf8R$VT!Z`lFY&oGsy`V2pSC}@0P;U-f37)oy!^h&SC<_(srS#Fx4GK= z`LoX3I^M6|rtTY^M@8*!+-r6DP~ZH$etxK5aLA&-@BR;;A4J{N8C?I@f~mS(bajz? zbx}Y4b^ioU=U;A|9jT+EE&}xrc#qDjNxK9s{uZa1p>sXlI6_@axbpX-x4RDCH40~k z_>LaYp99o|&z9mWw+=o(Ym;!jQyu5zP5%zcy|VYf;tGkt!3zfKx^Zt+7k-r$o&-$L zoo_|Kr{$vvnn*lsa&4cEO7rP*lBV%$JDi;7ubEyrnusmJY3-RmB58orF`l&+`do{t z3qNz8F+^A3LV;%?>TGNt(rJOT`7GnfCdd zh|S$FgC9HlQbN9FQOgOMkVSj7On!^%mTh+X%yfs1B(;dml8 zA*%MwACWX6YH!+bua+jCK*T0Q-L=DHfo8g#qzO@{$E5Vs++jWw@z_MQV}15K)3M^( zn=AZbsdN$!6SbCAIgN_sSaspU@*o^0Dm{0@xx)7Yni~Nx!C|7#_Xk@K)?DY(JRBzW z&FIJ5{<=L3mi7@GCU(t&x4~DmL_Uhc#GZLOJL0sKI_Kjsv17U%GO|)|Ev+ut(We!I ziEjQap>Dh8tTSHWEOGn@*l0v+h6QhMnAj_$%n$d~3@h4jm`MBI^VhX?Or-feC3uU& zgq?@3?|VPHv?c6RbnU`F($j>UVSau78bkS!fdLK^c4kRd_v+Z6`EW7;6LvOv44T$4 zjPYSJLp(BJXWiYfF`6T16EI=tfEv%inqjkUcx1v(H*xKy_tQ09+|FbiCVHy#*vqf7 zpa&LMMA+FjEWA>4*2x4+*r`3TnK2%ju+wwd>uDWT=BJ%Zz(k#2+{+8q3=2&0$b_BR z(^h~jOxU^8M`owvz~#*q zENwF!ChW9|SUtTXZT{G)7>>b2V`~pA7=g2dogb+30vsmn)P7_)TZqGio!Vi=A{-{{ z)Sk9rF%AfcsaYLr z^X(J_V=&QP+N&(zhO>m7v1LBFn&%_s1Weee9hO(&kqJAsr(HTgmw#|(2s^bmw$DHu z{s=ouEphl`TH6YT2|Kl?T~5FsVW-?0k4)J4f!4OcVZzQ9=RL6CkV+S8W%<1k_8k8Rm! zBDo`^y6_K?$)Q+wK_-{LS~r|SXV1)4`8p8y;t?CgBHf^TQ(ehenE zc9DPko94iRgE&jrslCdICpb*lx#r|~beEdLpTC>{a1Wef3`Tog#JLNJx{=u0g?9`ri z=_(v1>ChY8dwUi&ZoPY^CJ74PL!%M61$b_BR z(|$p~gq@u)B=RHsRO68e!#ZCBNx4 n$bdgLBy#_S`oVFA>gVHafBw76`)yqf)Z0S2KkE1Y`QHBk&yVpz literal 0 HcmV?d00001 diff --git a/test/integration/test_evaluation.py b/test/integration/test_evaluation.py index 6ad5f8c..a6a368b 100644 --- a/test/integration/test_evaluation.py +++ b/test/integration/test_evaluation.py @@ -11,7 +11,6 @@ from causica.functional_relationships.linear_functional_relationships import LinearFunctionalRelationships from causica.sem.distribution_parameters_sem import DistributionParametersSEM from causica.training.evaluation import eval_ate_rmse, eval_intervention_likelihoods, eval_ite_rmse -from causica.training.per_variable_metrics import calculate_counterfactual_deci_metrics def sem(data_dir: str) -> DistributionParametersSEM: @@ -58,18 +57,3 @@ def test_evaluation_ite(dataset): root = os.path.join(CAUSICA_DATASETS_PATH, dataset) ite = eval_ite_rmse([sem(root)], load_data(root, DataEnum.COUNTERFACTUALS)[0]) assert ite.shape == tuple() - - -@pytest.mark.parametrize("dataset", ["csuite_linexp_2"]) -def test_calculate_counterfactual_deci_metrics(dataset): - root = os.path.join(CAUSICA_DATASETS_PATH, dataset) - data = load_data(root, DataEnum.COUNTERFACTUALS) - cf = calculate_counterfactual_deci_metrics([sem(root)], data[0]) - grouped_variable_names = {"x0": ["x0_0", "x0_1"], "x1": ["x1_0", "x1_1"]} - cf_metrics = calculate_counterfactual_deci_metrics( - [sem(root)], data[0], grouped_variable_names=grouped_variable_names - ) - assert cf["rmse"].shape == tuple() - assert cf_metrics["rmse"].shape == tuple() - assert len(cf["rmse"].keys()) == 1 - assert len(cf_metrics["rmse"].keys()) == 2 diff --git a/test/integration/test_pytorch_lightning.py b/test/integration/test_pytorch_lightning.py index db0de9b..cdbde78 100644 --- a/test/integration/test_pytorch_lightning.py +++ b/test/integration/test_pytorch_lightning.py @@ -46,9 +46,58 @@ def test_pytorch_lightning_deterministic(dataset, noise_dist): trainer.test(module, data_module) -@pytest.mark.parametrize("dataset", ["csuite_mixed_simpson"]) -def test_pytorch_lightning_expert_input(tmp_path, dataset): +def test_pytorch_lightning_save_checkpoint(tmp_path): + """Test we can load a DECI Module""" + dataset = "csuite_mixed_simpson" + active_run = mlflow.active_run() + if active_run is not None: + mlflow.end_run() + + trainer = pl.Trainer(fast_dev_run=True) + data_module = CSuiteDataModule(dataset_name=dataset) + data_module.prepare_data() + adj_matrix = data_module.true_adj + expert_graph_container = ExpertGraphContainer( + dag=adj_matrix, mask=torch.ones_like(adj_matrix), confidence=0.9, scale=1.0 + ) + + constraint_matrix_path = tmp_path / "constraint_graph.npy" + with constraint_matrix_path.open("wb") as f: + np.save(f, adj_matrix.numpy()) + + module = DECIModule( + constraint_matrix_path=str(constraint_matrix_path), + expert_graph_container=expert_graph_container, + noise_dist=ContinuousNoiseDist.SPLINE, + ) + + trainer.fit(module, data_module) + path = tmp_path / "test.ckpt" + trainer.save_checkpoint(path) + + module2 = DECIModule.load_from_checkpoint(path) + + module1_params = dict(module.named_parameters()) + module2_params = dict(module2.named_parameters()) + assert module1_params.keys() == module2_params.keys() + # check that all parameters in the model are equal after loading + for key, value in module1_params.items(): + torch.testing.assert_close(value, module2_params[key]) + # check that the expert graph container is in the module params + # by the above check it is preserved by checkpointing + assert "expert_graph_container.dag" in module1_params.keys() + # check the constraint matrix is equal + torch.testing.assert_close(module.constraint_matrix, module2.constraint_matrix) + + +def test_pytorch_lightning_load_checkpoint(): + """Check that loading a historical model works""" + DECIModule.load_from_checkpoint("test/integration/decimodule.pt") + + +def test_pytorch_lightning_expert_input(tmp_path): """Test that the additional expert graph and constraints can be used.""" + dataset = "csuite_mixed_simpson" active_run = mlflow.active_run() if active_run is not None: mlflow.end_run() diff --git a/test/functional_relationships/test_fgnni.py b/test/nn/test_deci_embed_nn.py similarity index 84% rename from test/functional_relationships/test_fgnni.py rename to test/nn/test_deci_embed_nn.py index c182e25..b982292 100644 --- a/test/functional_relationships/test_fgnni.py +++ b/test/nn/test_deci_embed_nn.py @@ -1,7 +1,7 @@ import pytest import torch -from causica.functional_relationships.icgnn import FGNNI +from causica.nn import DECIEmbedNN PROCESSED_DIM = 6 NODE_NUM = 4 @@ -27,6 +27,6 @@ def test_fgnni_broadcast(graph_shape, sample_shape): graph_tensor = torch.randint(0, 2, (*graph_shape, NODE_NUM, NODE_NUM), dtype=torch.float32) sample_tensor = torch.randn((*sample_shape, PROCESSED_DIM)) - fgnni = FGNNI(group_mask=GROUP_MASK) + fgnni = DECIEmbedNN(group_mask=GROUP_MASK, embedding_size=32, out_dim_g=32, num_layers_g=2, num_layers_zeta=2) out = fgnni(sample_tensor, graph_tensor) assert out.shape == sample_shape + graph_shape + (PROCESSED_DIM,) diff --git a/test/sem/test_treatment_effects.py b/test/sem/test_treatment_effects.py index 7370048..726d708 100644 --- a/test/sem/test_treatment_effects.py +++ b/test/sem/test_treatment_effects.py @@ -26,7 +26,8 @@ def test_ate_ite_cf_two_node(graph, two_variable_dict): intervention_values_a = TensorDict({"x2": torch.tensor([1.42, 0.42])}, batch_size=tuple()) intervention_values_b = TensorDict({"x2": torch.tensor([0.42, 1.42])}, batch_size=tuple()) average_treatment_effect = ate(sem, intervention_values_a, intervention_values_b) - factual_data = sem.sample(torch.Size([100])) + sample_size = 100 + factual_data = sem.sample(torch.Size([sample_size])) if graph[0, 1] > 0.0: expected_treatment_effect = torch.zeros_like(average_treatment_effect["x1"]) expected_mean_a = factual_data["x1"] @@ -34,12 +35,12 @@ def test_ate_ite_cf_two_node(graph, two_variable_dict): expected_mean_a = torch.einsum("i,ij->j", intervention_values_a["x2"], coef_matrix[1:, :1]) expected_mean_b = torch.einsum("i,ij->j", intervention_values_b["x2"], coef_matrix[1:, :1]) expected_treatment_effect = expected_mean_a - expected_mean_b - assert torch.allclose(average_treatment_effect["x1"], expected_treatment_effect, rtol=1e-4) + torch.testing.assert_close(average_treatment_effect["x1"], expected_treatment_effect) individual_treatment_effect = ite(sem, factual_data, intervention_values_a, intervention_values_b) cf_effect = counterfactual(sem, factual_data, intervention_values_a) - assert torch.allclose(individual_treatment_effect["x1"], expected_treatment_effect) - assert torch.allclose(cf_effect["x1"], expected_mean_a) + torch.testing.assert_close(individual_treatment_effect["x1"], expected_treatment_effect.expand((sample_size, 1))) + torch.testing.assert_close(cf_effect["x1"], expected_mean_a.expand((sample_size, 1))) def test_ate_ite_cf_three_node(three_variable_dict): @@ -51,16 +52,17 @@ def test_ate_ite_cf_three_node(three_variable_dict): intervention_values_a = TensorDict({"x2": torch.tensor([1.42, 0.42])}, batch_size=tuple()) intervention_values_b = TensorDict({"x2": torch.tensor([0.42, 1.42])}, batch_size=tuple()) average_treatment_effect = ate(sem, intervention_values_a, intervention_values_b) - assert torch.allclose(average_treatment_effect["x1"], torch.zeros_like(average_treatment_effect["x1"])) + torch.testing.assert_close(average_treatment_effect["x1"], torch.zeros_like(average_treatment_effect["x1"])) expected_mean_a = torch.einsum("i,ij->j", intervention_values_a["x2"], coef_matrix[2:4, 4:]) expected_mean_b = torch.einsum("i,ij->j", intervention_values_b["x2"], coef_matrix[2:4, 4:]) expected_treatment_effect = expected_mean_a - expected_mean_b - assert torch.allclose(average_treatment_effect["x3"], expected_treatment_effect) + torch.testing.assert_close(average_treatment_effect["x3"], expected_treatment_effect) - factual_data = sem.sample(torch.Size([100])) + sample_size = 100 + factual_data = sem.sample(torch.Size([sample_size])) individual_treatment_effect = ite(sem, factual_data, intervention_values_a, intervention_values_b) cf_effect = counterfactual(sem, factual_data, intervention_values_a) - assert torch.allclose(individual_treatment_effect["x1"], torch.zeros_like(individual_treatment_effect["x1"])) - assert torch.allclose(individual_treatment_effect["x3"], expected_treatment_effect) - assert torch.allclose(cf_effect["x1"], factual_data["x1"]) - assert torch.allclose(cf_effect["x3"], expected_mean_a) + torch.testing.assert_close(individual_treatment_effect["x1"], torch.zeros_like(individual_treatment_effect["x1"])) + torch.testing.assert_close(individual_treatment_effect["x3"], expected_treatment_effect.expand((sample_size, 1))) + torch.testing.assert_close(cf_effect["x1"], factual_data["x1"]) + torch.testing.assert_close(cf_effect["x3"], expected_mean_a.expand((sample_size, 1))) diff --git a/test/training/test_per_variable_metrics.py b/test/training/test_per_variable_metrics.py deleted file mode 100644 index 8e0a88d..0000000 --- a/test/training/test_per_variable_metrics.py +++ /dev/null @@ -1,63 +0,0 @@ -import torch - -from causica.training.per_variable_metrics import binary_accuracy, categorical_accuracy, mape, rmse, smape - - -def test_binary_accuracy(): - logits = torch.tensor([-1.0, 1.0, 1.0, -1.0]) - - target = torch.tensor([0.0, 1.0, 0.0, 0.0]) - - assert binary_accuracy(logits, target) == 0.75 - - -def test_categorical_accuracy(): - logits = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - target = torch.tensor([2, 1, 0, 1]) - - assert categorical_accuracy(logits, target, False) == 0.25 - - target = torch.tensor([[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 0]]) - - assert categorical_accuracy(logits, target, True) == 0.25 - - -def test_rmse(): - prediction = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - target = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - assert rmse(prediction, target) == 0.0 - - prediction = torch.tensor([[0.2, 0.3, 0.8], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - assert torch.allclose(torch.tensor(0.0075) ** 0.5, rmse(prediction, target)) - - -def test_mape(): - prediction = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - target = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - assert mape(prediction, target) == 0.0 - - prediction = torch.tensor([[0.2, 0.3, 0.8], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - true_mape = torch.sum(torch.ones((3,)) * 0.1 / target[0]) / 4 - - assert torch.allclose(true_mape, mape(prediction, target)) - - -def test_smape(): - prediction = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - target = torch.tensor([[0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - assert smape(prediction, target) == 0.0 - - prediction = torch.tensor([[0.2, 0.3, 0.8], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7], [0.1, 0.2, 0.7]]) - - true_smape = torch.sum(torch.ones((3,)) * 0.1 / (target[0] + prediction[0])) / 4 - - assert torch.allclose(true_smape, smape(prediction, target))