diff --git a/.github/workflows/spec_zero.yml b/.github/workflows/spec_zero.yml index e3cd7a0b1c7..85b02d47953 100644 --- a/.github/workflows/spec_zero.yml +++ b/.github/workflows/spec_zero.yml @@ -46,7 +46,11 @@ jobs: python-version: '3.12' - run: pip install packaging requests tomlkit - run: python tools/dev/spec_zero_update_versions.py - - run: | + - name: Create lockfile for old CI + # uv pip compile requires setting the python version explicitly in the command :( + run: uv pip compile pyproject.toml --python "3.10" --python-platform "x86_64-unknown-linux-gnu" --group test --resolution lowest-direct --format pylock.toml --output-file tools/pylock.ci-old.toml + - name: check if files changed + run: | git diff && git status --porcelain if [[ $(git status --porcelain) ]]; then echo "dirty=true" >> $GITHUB_OUTPUT diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 14c79460e2f..09f88766f63 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -151,11 +151,13 @@ jobs: create-args: >- python=${{ env.PYTHON_VERSION }} -v - if: ${{ !startswith(matrix.kind, 'pip') }} + if: matrix.kind == 'conda' || matrix.kind == 'mamba' timeout-minutes: 20 - - run: bash ./tools/github_actions_dependencies.sh - - run: python ./tools/github_actions_check_old.py + - uses: astral-sh/setup-uv@v7 + with: + version: ">=0.9" if: matrix.kind == 'old' + - run: bash ./tools/github_actions_dependencies.sh # Minimal commands on Linux (macOS stalls) - run: bash ./tools/get_minimal_commands.sh if: startswith(matrix.os, 'ubuntu') && matrix.kind != 'minimal' && matrix.kind != 'old' diff --git a/environment.yml b/environment.yml index 6caa1234d67..6685261d859 100644 --- a/environment.yml +++ b/environment.yml @@ -7,32 +7,32 @@ dependencies: - antio >=0.5.0 - curryreader >=0.1.2 - darkdetect - - decorator + - decorator >=5.1 - defusedxml - - dipy + - dipy >=0.8 - edfio >=0.4.10 - eeglabio - filelock >=3.18.0 - h5io >=0.2.4 - - h5py + - h5py >=2.4 - imageio >=2.6.1 - imageio-ffmpeg >=0.4.1 - ipyevents - ipympl - - ipython !=8.7.0 + - ipython >=2.0,!=8.7.0 - ipywidgets - - jinja2 - - joblib + - jinja2 >=3.1 + - joblib >=0.8 - jupyter - lazy_loader >=0.3 - mamba - matplotlib >=3.8 - mffpy >=0.5.7 - mne-qt-browser - - nibabel + - nibabel >=2.0 - nilearn - nomkl - - numba + - numba >=0.35 - numpy >=1.26,<3 - openmeeg >=2.5.7 - packaging @@ -45,7 +45,7 @@ dependencies: - pymatreader - PySide6 !=6.9.1 - python-neo - - python-picard + - python-picard >=0.4 - pyvista >=0.43 - pyvistaqt >=0.11 - qdarkstyle !=3.2.2 @@ -54,9 +54,9 @@ dependencies: - scipy >=1.12 - sip - snirf - - statsmodels + - statsmodels >=0.6 - threadpoolctl - - tqdm + - tqdm >=4.66 - traitlets - trame - trame-vtk diff --git a/pyproject.toml b/pyproject.toml index f4498eadee8..d97dd5caba8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,21 +1,21 @@ [build-system] build-backend = "hatchling.build" -requires = ["hatch-vcs", "hatchling"] +requires = ["hatch-vcs", "hatchling >= 1.27"] [dependency-groups] -dev = ["pip >= 25.1", "rcssmin", {include-group = "doc"}, {include-group = "test_extra"}] +dev = ["pip >= 25.1", "rcssmin >= 1.1", {include-group = "doc"}, {include-group = "test_extra"}] # Dependencies for building the documentation doc = [ "graphviz", "intersphinx_registry >= 0.2405.27", "ipython != 8.7.0", # also in "full-no-qt" and "test" - "memory_profiler", + "memory_profiler >= 0.16", "mne-bids", "mne-connectivity", "mne-gui-addons", "neo", - "numpydoc", - "openneuro-py", + "numpydoc >= 0.5", + "openneuro-py >= 2020.1", "psutil", "pydata_sphinx_theme >= 0.15.2", "pygments >= 2.13", @@ -24,7 +24,7 @@ doc = [ "pyxdf", "pyzmq != 24.0.0", "scikit-learn", - "seaborn != 0.11.2", + "seaborn >= 0.5, != 0.11.2", "selenium >= 4.27.1", "sphinx >= 6", "sphinx-design", @@ -36,21 +36,22 @@ doc = [ ] test = [ "codespell", - "ipython != 8.7.0", # for testing notebook backend; also in "full-no-qt" and "doc" - "mypy", - "numpydoc", + "ipython >= 8.20", # for testing notebook backend; also in "full-no-qt" and "doc" + "mypy >= 0.14", + "numpydoc >= 1.6", + "pillow >= 10.2", "pre-commit", "pytest >= 8.0", - "pytest-cov", - "pytest-qt", + "pytest-cov >= 4.1", + "pytest-qt >= 4.3", "pytest-rerunfailures", - "pytest-timeout", - "ruff", + "pytest-timeout >= 2.2", + "ruff >= 0.1", "toml-sort", "tomli; python_version<'3.11'", "twine", "vulture", - "wheel", + "wheel >= 0.21", ] # Dependencies for being able to run additional tests (rare/CIs/advanced devs) # Changes here should be reflected in the mne/utils/config.py dev dependencies section @@ -64,7 +65,7 @@ test_extra = [ "nbclient", "nbformat", "neo", - "nitime", + "nitime >= 0.7", "pybv", "snirf", "sphinx-gallery", @@ -90,15 +91,15 @@ classifiers = [ "Topic :: Software Development", ] dependencies = [ - "decorator", - "jinja2", + "decorator >= 5.1", + "jinja2 >= 3.1", "lazy_loader >= 0.3", "matplotlib >= 3.8", # released 2023-09-15, will become 3.9 on 2026-05-15 "numpy >= 1.26, < 3", # released 2023-09-16, will become 2.0 on 2026-06-16 "packaging", "pooch >= 1.5", "scipy >= 1.12", # released 2024-01-20, will become 1.13 on 2026-04-02 - "tqdm", + "tqdm >= 4.66", ] description = "MNE-Python project for MEG and EEG data analysis." dynamic = ["version"] @@ -117,6 +118,9 @@ maintainers = [{email = "dan@mccloy.info", name = "Dan McCloy"}] name = "mne" readme = {content-type = "text/x-rst", file = "README.rst"} requires-python = ">= 3.10" +# ↑↑↑↑↑↑↑↑↑↑↑ when this changes, bump the `--python-version` in the `uv pip compile ...` +# command in `.github/workflows/spec_zero.yaml` (astral-sh/uv/#16333), and also the +# `--python` version in the `uv venv` command in `tools/github_actions_dependencies.sh` scripts = {mne = "mne.commands.utils:main"} [project.optional-dependencies] @@ -133,34 +137,34 @@ full-no-qt = [ "curryreader >= 0.1.2", "darkdetect", "defusedxml", - "dipy", + "dipy >= 0.8", "edfio >= 0.4.10", "eeglabio", "filelock >= 3.18.0", - "h5py", + "h5py >= 2.4", "imageio >= 2.6.1", "imageio-ffmpeg >= 0.4.1", "ipyevents", "ipympl", - "ipython != 8.7.0", # for notebook backend; also in "doc" and "test" + "ipython >= 2.0, != 8.7.0", # for notebook backend; also in "doc" and "test" "ipywidgets", - "joblib", + "joblib >= 0.8", "jupyter", "mffpy >= 0.5.7", "mne-qt-browser", "mne[hdf5]", "neo", "nest-asyncio2", - "nibabel", + "nibabel >= 2.0", "nilearn", - "numba", + "numba >= 0.35", "openmeeg >= 2.5.7", "pandas >= 2.2", # released 2024-01-20, will become 2.3 on 2027-06-05 "pillow", # for `Brain.save_image` and `mne.Report` "pyarrow", # only needed to avoid a deprecation warning in pandas "pybv", "pyobjc-framework-Cocoa >= 5.2.0; platform_system == 'Darwin'", - "python-picard", + "python-picard >= 0.4", "pyvista >= 0.43", # released 2023-12-07, will become 0.44 on 2026-07-07 "pyvistaqt >= 0.11", # released 2023-06-30, no newer version available "qdarkstyle != 3.2.2", @@ -168,7 +172,7 @@ full-no-qt = [ "scikit-learn >= 1.4", # released 2024-01-18, will become 1.5 on 2026-05-21 "sip", "snirf", - "statsmodels", + "statsmodels >= 0.6", "threadpoolctl", "traitlets", "trame", diff --git a/tools/check_qt_import.sh b/tools/check_qt_import.sh index dde00f497e7..3457a8b651d 100755 --- a/tools/check_qt_import.sh +++ b/tools/check_qt_import.sh @@ -1,5 +1,9 @@ #!/bin/bash -ef +if [[ ${MNE_CI_KIND} == "old" ]]; then + source .venv/bin/activate +fi + if [[ "$1" == "" ]]; then echo "Qt library must be provided as first argument" exit 1 diff --git a/tools/github_actions_dependencies.sh b/tools/github_actions_dependencies.sh index 1b80a6dab2e..ed3be3e94ee 100755 --- a/tools/github_actions_dependencies.sh +++ b/tools/github_actions_dependencies.sh @@ -7,7 +7,7 @@ STD_ARGS="--progress-bar off --upgrade" INSTALL_ARGS="-e" if [ ! -z "$CONDA_ENV" ]; then echo "Uninstalling MNE for CONDA_ENV=${CONDA_ENV}" - # This will fail if mne-base is not in the env (like in our minimial/old envs, so ||true them): + # This will fail if mne-base is not in the env (like in our minimal env, so ||true them): echo "::group::Uninstalling MNE" conda remove -c conda-forge --force -yq mne-base || true python -m pip uninstall -y mne || true @@ -16,15 +16,28 @@ if [ ! -z "$CONDA_ENV" ]; then if [[ "${RUNNER_OS}" != "Windows" ]] && [[ "${CONDA_ENV}" != "environment_"* ]]; then INSTALL_ARGS="" fi - # If on minimal or old, just install testing deps - if [[ "${CONDA_ENV}" == *'environment_'* ]]; then + # If on minimal, just install testing deps + if [[ "${MNE_CI_KIND}" == "minimal" ]]; then GROUP="test" EXTRAS="" - STD_ARGS="--progress-bar off" + STD_ARGS="--progress-bar off ${MNE_QT_BACKEND}" + echo "::group::Upgrading pip installation" + python -m pip install --upgrade pip # upgrade pip to support --group + echo "::endgroup::" else GROUP="test_extra" EXTRAS="[hdf5]" fi +elif [[ "${MNE_CI_KIND}" == "old" ]]; then + GROUP="" # group "test" already included when pylock file generated + EXTRAS="" + STD_ARGS="--progress-bar off" + echo "::group::Syncing old environment dependencies from lockfile using uv" + uv venv --python 3.10 + source .venv/bin/activate + uv pip sync ${SCRIPT_DIR}/pylock.ci-old.toml + uv pip install pip ${MNE_QT_BACKEND} + echo "::endgroup::" elif [[ "${MNE_CI_KIND}" == "pip" ]]; then GROUP="test_extra" EXTRAS="[full-pyside6]" @@ -36,13 +49,25 @@ else EXTRAS="" fi echo "" + # until quantities releases... if [[ "${MNE_CI_KIND}" != "old" ]]; then STD_ARGS="$STD_ARGS git+https://github.com/python-quantities/python-quantities" fi -echo "::group::Installing test dependencies using pip" +# Make sure we only pass non-empty groups argument +if [ -z "$GROUP" ]; then + GROUP_ARG="" +else + GROUP_ARG="--group=$GROUP" +fi + +if [[ "${MNE_CI_KIND}" != "old" ]]; then + echo "::group::Installing test dependencies using pip" +else + echo "::group::Installing MNE in development mode using pip" +fi set -x -python -m pip install $STD_ARGS $INSTALL_ARGS .$EXTRAS --group=$GROUP +python -m pip install $STD_ARGS $INSTALL_ARGS .$EXTRAS $GROUP_ARG set +x echo "::endgroup::" diff --git a/tools/github_actions_download.sh b/tools/github_actions_download.sh index 7543275b58e..4793077efb9 100755 --- a/tools/github_actions_download.sh +++ b/tools/github_actions_download.sh @@ -1,5 +1,9 @@ #!/bin/bash -ef +if [[ ${MNE_CI_KIND} == "old" ]]; then + source .venv/bin/activate +fi + if [ "${DEPS}" != "minimal" ]; then python -c 'import mne; mne.datasets.testing.data_path(verbose=True)'; python -c "import mne; mne.datasets.misc.data_path(verbose=True)"; diff --git a/tools/github_actions_env_vars.sh b/tools/github_actions_env_vars.sh index 37875308995..c518e982276 100755 --- a/tools/github_actions_env_vars.sh +++ b/tools/github_actions_env_vars.sh @@ -13,14 +13,13 @@ if [[ "$MNE_CI_KIND" == "pip"* ]]; then else echo "MNE_QT_BACKEND=PySide6" | tee -a $GITHUB_ENV fi +elif [[ "$MNE_CI_KIND" == "old" ]]; then + echo "MNE_IGNORE_WARNINGS_IN_TESTS=true" | tee -a $GITHUB_ENV + echo "MNE_SKIP_NETWORK_TESTS=1" | tee -a $GITHUB_ENV + echo "MNE_QT_BACKEND=PyQt5" | tee -a $GITHUB_ENV else # conda-like echo "Setting conda env vars for $MNE_CI_KIND" - if [[ "$MNE_CI_KIND" == "old" ]]; then - echo "CONDA_ENV=tools/environment_old.yml" | tee -a $GITHUB_ENV - echo "MNE_IGNORE_WARNINGS_IN_TESTS=true" | tee -a $GITHUB_ENV - echo "MNE_SKIP_NETWORK_TESTS=1" | tee -a $GITHUB_ENV - echo "MNE_QT_BACKEND=PyQt5" | tee -a $GITHUB_ENV - elif [[ "$MNE_CI_KIND" == "minimal" ]]; then + if [[ "$MNE_CI_KIND" == "minimal" ]]; then echo "CONDA_ENV=tools/environment_minimal.yml" | tee -a $GITHUB_ENV echo "MNE_QT_BACKEND=PySide6" | tee -a $GITHUB_ENV else # conda, mamba (use warning level for completeness) diff --git a/tools/github_actions_infos.sh b/tools/github_actions_infos.sh index 95d18cdd2ba..9b1577909f7 100755 --- a/tools/github_actions_infos.sh +++ b/tools/github_actions_infos.sh @@ -1,5 +1,9 @@ #!/bin/bash -ef +if [[ ${MNE_CI_KIND} == "old" ]]; then + source .venv/bin/activate +fi + which mne mne sys_info -pd python -c "import numpy; numpy.show_config()" diff --git a/tools/github_actions_test.sh b/tools/github_actions_test.sh index 202b041bc79..e6013253046 100755 --- a/tools/github_actions_test.sh +++ b/tools/github_actions_test.sh @@ -2,6 +2,9 @@ set -eo pipefail +if [[ ${MNE_CI_KIND} == "old" ]]; then + source .venv/bin/activate +fi if [[ "${CI_OS_NAME}" == "ubuntu"* ]]; then CONDITION="not (ultraslowtest or pgtest)" else # macOS or Windows diff --git a/tools/pylock.ci-old.toml b/tools/pylock.ci-old.toml new file mode 100644 index 00000000000..ef53cd3cf38 --- /dev/null +++ b/tools/pylock.ci-old.toml @@ -0,0 +1,617 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile pyproject.toml --python 3.10 --python-platform x86_64-unknown-linux-gnu --group test --resolution lowest-direct --format pylock.toml --output-file tools/pylock.ci-old.toml +lock-version = "1.0" +created-by = "uv" +requires-python = ">=3.10" + +[[packages]] +name = "alabaster" +version = "0.7.16" +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", upload-time = 2024-01-10T00:56:10Z, size = 23776, hashes = { sha256 = "75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", upload-time = 2024-01-10T00:56:08Z, size = 13511, hashes = { sha256 = "b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92" } }] + +[[packages]] +name = "appdirs" +version = "1.4.4" +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", upload-time = 2020-05-11T07:59:51Z, size = 13470, hashes = { sha256 = "7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", upload-time = 2020-05-11T07:59:49Z, size = 9566, hashes = { sha256 = "a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" } }] + +[[packages]] +name = "argparse" +version = "1.4.0" +sdist = { url = "https://files.pythonhosted.org/packages/18/dd/e617cfc3f6210ae183374cd9f6a26b20514bbb5a792af97949c5aacddf0f/argparse-1.4.0.tar.gz", upload-time = 2015-09-12T20:22:16Z, size = 70508, hashes = { sha256 = "62b089a55be1d8949cd2bc7e0df0bddb9e028faefc8c32038cc84862aefdd6e4" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl", upload-time = 2015-09-14T16:03:16Z, size = 23000, hashes = { sha256 = "c31647edb69fd3d465a847ea3157d37bed1f95f19760b11a47aa91c04b666314" } }] + +[[packages]] +name = "aspy-yaml" +version = "1.3.0" +sdist = { url = "https://files.pythonhosted.org/packages/a1/e9/2ee775d3e66319e08135505a1dd3cdba606b4da4caeb617eb3514d901b14/aspy.yaml-1.3.0.tar.gz", upload-time = 2019-05-23T18:32:02Z, size = 2998, hashes = { sha256 = "e7c742382eff2caed61f87a39d13f99109088e5e93f04d76eb8d4b28aa143f45" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/99/ce/78be097b00817ccf02deaf481eb7a603eecee6fa216e82fa7848cd265449/aspy.yaml-1.3.0-py2.py3-none-any.whl", upload-time = 2019-05-23T18:32:00Z, size = 3453, hashes = { sha256 = "463372c043f70160a9ec950c3f1e4c3a82db5fca01d334b6bc89c7164d744bdc" } }] + +[[packages]] +name = "asttokens" +version = "3.0.1" +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", upload-time = 2025-11-15T16:43:48Z, size = 62308, hashes = { sha256 = "71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", upload-time = 2025-11-15T16:43:16Z, size = 27047, hashes = { sha256 = "15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a" } }] + +[[packages]] +name = "attrs" +version = "25.4.0" +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", upload-time = 2025-10-06T13:54:44Z, size = 934251, hashes = { sha256 = "16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", upload-time = 2025-10-06T13:54:43Z, size = 67615, hashes = { sha256 = "adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373" } }] + +[[packages]] +name = "babel" +version = "2.17.0" +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", upload-time = 2025-02-01T15:17:41Z, size = 9951852, hashes = { sha256 = "0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", upload-time = 2025-02-01T15:17:37Z, size = 10182537, hashes = { sha256 = "4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2" } }] + +[[packages]] +name = "cached-property" +version = "2.0.1" +sdist = { url = "https://files.pythonhosted.org/packages/76/4b/3d870836119dbe9a5e3c9a61af8cc1a8b69d75aea564572e385882d5aefb/cached_property-2.0.1.tar.gz", upload-time = 2024-10-25T15:43:55Z, size = 10574, hashes = { sha256 = "484d617105e3ee0e4f1f58725e72a8ef9e93deee462222dbd51cd91230897641" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/0e/7d8225aab3bc1a0f5811f8e1b557aa034ac04bdf641925b30d3caf586b28/cached_property-2.0.1-py3-none-any.whl", upload-time = 2024-10-25T15:43:54Z, size = 7428, hashes = { sha256 = "f617d70ab1100b7bcf6e42228f9ddcb78c676ffa167278d9f730d1c2fba69ccb" } }] + +[[packages]] +name = "certifi" +version = "2026.1.4" +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", upload-time = 2026-01-04T02:42:41Z, size = 154268, hashes = { sha256 = "ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", upload-time = 2026-01-04T02:42:40Z, size = 152900, hashes = { sha256 = "9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c" } }] + +[[packages]] +name = "charset-normalizer" +version = "3.4.4" +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", upload-time = 2025-10-14T04:42:32Z, size = 129418, hashes = { sha256 = "94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a" } } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-10-14T04:40:19Z, size = 153609, hashes = { sha256 = "9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313" } }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", upload-time = 2025-10-14T04:42:31Z, size = 53402, hashes = { sha256 = "7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f" } }, +] + +[[packages]] +name = "click" +version = "7.1.2" +sdist = { url = "https://files.pythonhosted.org/packages/27/6f/be940c8b1f1d69daceeb0032fee6c34d7bd70e3e649ccac0951500b4720e/click-7.1.2.tar.gz", upload-time = 2020-04-27T20:22:45Z, size = 297279, hashes = { sha256 = "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl", upload-time = 2020-04-27T20:22:42Z, size = 82780, hashes = { sha256 = "dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" } }] + +[[packages]] +name = "codespell" +version = "1.9.0" +sdist = { url = "https://files.pythonhosted.org/packages/bd/64/d16fc0b110dbe3567976980607eb1e89e5298f2e6704c2573d31886726c2/codespell-1.9.0.tar.gz", upload-time = 2016-06-09T18:50:18Z, size = 12009, hashes = { sha256 = "c183af463c1776cba789b16438f3e278e2174f3cc3497b1c80d4b389799a9d2d" } } + +[[packages]] +name = "contourpy" +version = "1.3.2" +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", upload-time = 2025-04-15T17:47:53Z, size = 13466130, hashes = { sha256 = "b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-04-15T17:35:11Z, size = 325027, hashes = { sha256 = "ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631" } }] + +[[packages]] +name = "coverage" +version = "7.13.2" +sdist = { url = "https://files.pythonhosted.org/packages/ad/49/349848445b0e53660e258acbcc9b0d014895b6739237920886672240f84b/coverage-7.13.2.tar.gz", upload-time = 2026-01-25T13:00:04Z, size = 826523, hashes = { sha256 = "044c6951ec37146b72a50cc81ef02217d27d4c3640efd2640311393cbbf143d3" } } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/fb/05b9830c2e8275ebc031e0019387cda99113e62bb500ab328bb72578183b/coverage-7.13.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", upload-time = 2026-01-25T12:57:20Z, size = 247930, hashes = { sha256 = "ca9566769b69a5e216a4e176d54b9df88f29d750c5b78dbb899e379b4e14b30c" } }, + { url = "https://files.pythonhosted.org/packages/d2/db/d291e30fdf7ea617a335531e72294e0c723356d7fdde8fba00610a76bda9/coverage-7.13.2-py3-none-any.whl", upload-time = 2026-01-25T13:00:02Z, size = 210943, hashes = { sha256 = "40ce1ea1e25125556d8e76bd0b61500839a07944cc287ac21d5626f3e620cad5" } }, +] + +[[packages]] +name = "cycler" +version = "0.12.1" +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", upload-time = 2023-10-07T05:32:18Z, size = 7615, hashes = { sha256 = "88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", upload-time = 2023-10-07T05:32:16Z, size = 8321, hashes = { sha256 = "85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30" } }] + +[[packages]] +name = "dbutils" +version = "3.1.2" +sdist = { url = "https://files.pythonhosted.org/packages/55/33/b739e991d8234b3fb0602d501b4aacda88ad1fd5d061b5b9d6022fa35ed6/dbutils-3.1.2.tar.gz", upload-time = 2025-09-07T17:01:31Z, size = 95869, hashes = { sha256 = "160b5788154f1adeddc61080daff1530b4df2ba0d45af1c3bfbac76db24186b3" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/98/a7/4fe7da3082241028e62c390bf9357d60522dd03d9329e3a560045fe14dfd/dbutils-3.1.2-py3-none-any.whl", upload-time = 2025-09-07T17:01:30Z, size = 32936, hashes = { sha256 = "0cb388a89eeecf04089aef113a7007c3fac9199e9580c8549829f954870c403a" } }] + +[[packages]] +name = "decorator" +version = "5.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/92/3c/34f8448b61809968052882b830f7d8d9a8e1c07048f70deb039ae599f73c/decorator-5.1.0.tar.gz", upload-time = 2021-09-11T05:30:17Z, size = 34900, hashes = { sha256 = "e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/3d/cc/d7b758e54779f7e465179427de7e78c601d3330d6c411ea7ba9ae2f38102/decorator-5.1.0-py3-none-any.whl", upload-time = 2021-09-11T05:30:14Z, size = 9061, hashes = { sha256 = "7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374" } }] + +[[packages]] +name = "distlib" +version = "0.4.0" +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", upload-time = 2025-07-17T16:52:00Z, size = 614605, hashes = { sha256 = "feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", upload-time = 2025-07-17T16:51:58Z, size = 469047, hashes = { sha256 = "9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16" } }] + +[[packages]] +name = "docutils" +version = "0.19" +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/330ea8d383eb2ce973df34d1239b3b21e91cd8c865d21ff82902d952f91f/docutils-0.19.tar.gz", upload-time = 2022-07-05T20:17:31Z, size = 2056383, hashes = { sha256 = "33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/93/69/e391bd51bc08ed9141ecd899a0ddb61ab6465309f1eb470905c0c8868081/docutils-0.19-py3-none-any.whl", upload-time = 2022-07-05T20:17:26Z, size = 570472, hashes = { sha256 = "5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" } }] + +[[packages]] +name = "exceptiongroup" +version = "1.3.1" +marker = "python_full_version < '3.11'" +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", upload-time = 2025-11-21T23:01:54Z, size = 30371, hashes = { sha256 = "8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", upload-time = 2025-11-21T23:01:53Z, size = 16740, hashes = { sha256 = "a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598" } }] + +[[packages]] +name = "executing" +version = "2.2.1" +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", upload-time = 2025-09-01T09:48:10Z, size = 1129488, hashes = { sha256 = "3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", upload-time = 2025-09-01T09:48:08Z, size = 28317, hashes = { sha256 = "760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017" } }] + +[[packages]] +name = "filelock" +version = "3.20.3" +marker = "python_full_version >= '3.10'" +sdist = { url = "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz", upload-time = 2026-01-09T17:55:05Z, size = 19485, hashes = { sha256 = "18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", upload-time = 2026-01-09T17:55:04Z, size = 16701, hashes = { sha256 = "4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1" } }] + +[[packages]] +name = "fonttools" +version = "4.61.1" +sdist = { url = "https://files.pythonhosted.org/packages/ec/ca/cf17b88a8df95691275a3d77dc0a5ad9907f328ae53acbe6795da1b2f5ed/fonttools-4.61.1.tar.gz", upload-time = 2025-12-12T17:31:24Z, size = 3565756, hashes = { sha256 = "6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69" } } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/69/4ca02ee367d2c98edcaeb83fc278d20972502ee071214ad9d8ca85e06080/fonttools-4.61.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-12-12T17:29:34Z, size = 4859076, hashes = { sha256 = "a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6" } }, + { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", upload-time = 2025-12-12T17:31:21Z, size = 1148996, hashes = { sha256 = "17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371" } }, +] + +[[packages]] +name = "hmako" +version = "1.16" +sdist = { url = "https://files.pythonhosted.org/packages/b7/99/f2b5f60650d398dd2bbb67e4c097b64ad645e10c46b72053af7e1e4be5c7/hmako-1.16.tar.gz", upload-time = 2013-02-24T11:03:49Z, size = 206105, hashes = { sha256 = "b5f2f0415dce2c10aff23762c0b33a20fe396d299090a37410782a21efaaf53a" } } + +[[packages]] +name = "idna" +version = "3.11" +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", upload-time = 2025-10-12T14:55:20Z, size = 194582, hashes = { sha256 = "795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", upload-time = 2025-10-12T14:55:18Z, size = 71008, hashes = { sha256 = "771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea" } }] + +[[packages]] +name = "imagesize" +version = "1.4.1" +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", upload-time = 2022-07-01T12:21:05Z, size = 1280026, hashes = { sha256 = "69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", upload-time = 2022-07-01T12:21:02Z, size = 8769, hashes = { sha256 = "0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b" } }] + +[[packages]] +name = "iniconfig" +version = "2.3.0" +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", upload-time = 2025-10-18T21:55:43Z, size = 20503, hashes = { sha256 = "c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", upload-time = 2025-10-18T21:55:41Z, size = 7484, hashes = { sha256 = "f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12" } }] + +[[packages]] +name = "ipython" +version = "8.20.0" +sdist = { url = "https://files.pythonhosted.org/packages/c5/d1/187474d64bdefcb6804c1a3a1597d9e94f287e71c06f50f7784d56833fb7/ipython-8.20.0.tar.gz", upload-time = 2024-01-08T10:11:39Z, size = 5488416, hashes = { sha256 = "2f21bd3fc1d51550c89ee3944ae04bbc7bc79e129ea0937da6e6c68bfdbf117a" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/db/04/1bf767de3ee9e462a09efb1eab3074d715ef5ab582b8a0cb6d5d5615212d/ipython-8.20.0-py3-none-any.whl", upload-time = 2024-01-08T10:11:36Z, size = 809179, hashes = { sha256 = "bc9716aad6f29f36c449e30821c9dd0c1c1a7b59ddcc26931685b87b4c569619" } }] + +[[packages]] +name = "jedi" +version = "0.19.2" +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", upload-time = 2024-11-11T01:41:42Z, size = 1231287, hashes = { sha256 = "4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", upload-time = 2024-11-11T01:41:40Z, size = 1572278, hashes = { sha256 = "a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9" } }] + +[[packages]] +name = "jinja2" +version = "3.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/1f/93/99a76d0fa1a8fc14442a6421abee323f8d15964979336eabd2a1834e9118/Jinja2-3.1.0.tar.gz", upload-time = 2022-03-24T14:14:03Z, size = 266923, hashes = { sha256 = "a2f09a92f358b96b5f6ca6ecb4502669c4acb55d8733bbb2b2c9c4af5564c605" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/7b/82/743248f82f147e54a404163c7e12969f4c2436bdfe7c39bf6b5c7a273f3f/Jinja2-3.1.0-py3-none-any.whl", upload-time = 2022-03-24T14:14:01Z, size = 132565, hashes = { sha256 = "da424924c069a4013730d8dd010cbecac7e7bb752be388db3741688bffb48dc6" } }] + +[[packages]] +name = "jsonschema" +version = "4.26.0" +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", upload-time = 2026-01-07T13:41:07Z, size = 366583, hashes = { sha256 = "0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", upload-time = 2026-01-07T13:41:05Z, size = 90630, hashes = { sha256 = "d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce" } }] + +[[packages]] +name = "jsonschema-specifications" +version = "2025.9.1" +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", upload-time = 2025-09-08T01:34:59Z, size = 32855, hashes = { sha256 = "b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", upload-time = 2025-09-08T01:34:57Z, size = 18437, hashes = { sha256 = "98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe" } }] + +[[packages]] +name = "kiwisolver" +version = "1.4.9" +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", upload-time = 2025-08-10T21:27:49Z, size = 97564, hashes = { sha256 = "c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/d4/42/0f333164e6307a0687d1eb9ad256215aae2f4bd5d28f4653d6cd319a3ba3/kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", upload-time = 2025-08-10T21:25:39Z, size = 1628458, hashes = { sha256 = "b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9" } }] + +[[packages]] +name = "lazy-loader" +version = "0.3" +sdist = { url = "https://files.pythonhosted.org/packages/0e/3a/1630a735bfdf9eb857a3b9a53317a1e1658ea97a1b4b39dcb0f71dae81f8/lazy_loader-0.3.tar.gz", upload-time = 2023-06-30T21:12:55Z, size = 12268, hashes = { sha256 = "3b68898e34f5b2a29daaaac172c6555512d0f32074f147e2254e4a6d9d838f37" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/a1/c3/65b3814e155836acacf720e5be3b5757130346670ac454fee29d3eda1381/lazy_loader-0.3-py3-none-any.whl", upload-time = 2023-06-30T21:12:51Z, size = 9087, hashes = { sha256 = "1e9e76ee8631e264c62ce10006718e80b2cfc74340d17d1031e0f84af7478554" } }] + +[[packages]] +name = "mako" +version = "1.3.10" +sdist = { url = "https://files.pythonhosted.org/packages/9e/38/bd5b78a920a64d708fe6bc8e0a2c075e1389d53bef8413725c63ba041535/mako-1.3.10.tar.gz", upload-time = 2025-04-10T12:44:31Z, size = 392474, hashes = { sha256 = "99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl", upload-time = 2025-04-10T12:50:53Z, size = 78509, hashes = { sha256 = "baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59" } }] + +[[packages]] +name = "markupsafe" +version = "3.0.3" +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", upload-time = 2025-09-27T18:37:40Z, size = 80313, hashes = { sha256 = "722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-09-27T18:36:08Z, size = 20681, hashes = { sha256 = "f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591" } }] + +[[packages]] +name = "matplotlib" +version = "3.8.0" +sdist = { url = "https://files.pythonhosted.org/packages/23/e1/77016194621fb1356aafeb2186f07b5dede62ea2043bf03f82325c4fccc5/matplotlib-3.8.0.tar.gz", upload-time = 2023-09-15T04:49:03Z, size = 35864435, hashes = { sha256 = "df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b5/24/aaccf324ce862bb82277e8814d2aebbb2a2c160d04e95aa2b8c9dc3137a9/matplotlib-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2023-09-15T04:50:03Z, size = 11610560, hashes = { sha256 = "d670b9348e712ec176de225d425f150dc8e37b13010d85233c539b547da0be39" } }] + +[[packages]] +name = "matplotlib-inline" +version = "0.2.1" +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", upload-time = 2025-10-23T09:00:22Z, size = 8110, hashes = { sha256 = "e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", upload-time = 2025-10-23T09:00:20Z, size = 9516, hashes = { sha256 = "d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76" } }] + +[[packages]] +name = "mypy" +version = "0.14" +sdist = { url = "https://files.pythonhosted.org/packages/ad/4b/629308f39cd1eb6176fa009e028f8c73d79223baf12195a2f2bc195d1f2b/mypy-0.14.tar.gz", upload-time = 2009-09-16T06:24:28Z, size = 863929, hashes = { sha256 = "e578477db9f723968d72199625c282110f89ce24334405ff0c5a8d5beb267b9f" } } + +[[packages]] +name = "nodeenv" +version = "1.10.0" +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", upload-time = 2025-12-20T14:08:54Z, size = 55611, hashes = { sha256 = "996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", upload-time = 2025-12-20T14:08:52Z, size = 23438, hashes = { sha256 = "5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827" } }] + +[[packages]] +name = "numpy" +version = "1.26.0" +sdist = { url = "https://files.pythonhosted.org/packages/55/b3/b13bce39ba82b7398c06d10446f5ffd5c07db39b09bd37370dc720c7951c/numpy-1.26.0.tar.gz", upload-time = 2023-09-16T20:12:58Z, size = 15633455, hashes = { sha256 = "f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/9b/5a/f265a1ba3641d16b5480a217a6aed08cceef09cd173b568cd5351053472a/numpy-1.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2023-09-16T19:59:30Z, size = 18181958, hashes = { sha256 = "767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be" } }] + +[[packages]] +name = "numpydoc" +version = "1.6.0" +sdist = { url = "https://files.pythonhosted.org/packages/5f/ed/5ca4b2e90f4b0781f5fac49cdb2947cf719b6d289eedb67e8b1a63d019e3/numpydoc-1.6.0.tar.gz", upload-time = 2023-09-26T00:24:33Z, size = 85475, hashes = { sha256 = "ae7a5380f0a06373c3afe16ccd15bd79bc6b07f2704cbc6f1e7ecc94b4f5fc0d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/9c/94/09c437fd4a5fb5adf0468c0865c781dbc11d399544b55f1163d5d4414afb/numpydoc-1.6.0-py3-none-any.whl", upload-time = 2023-09-26T00:24:32Z, size = 61722, hashes = { sha256 = "b6ddaa654a52bdf967763c1e773be41f1c3ae3da39ee0de973f2680048acafaa" } }] + +[[packages]] +name = "ordereddict" +version = "1.1" +sdist = { url = "https://files.pythonhosted.org/packages/53/25/ef88e8e45db141faa9598fbf7ad0062df8f50f881a36ed6a0073e1572126/ordereddict-1.1.tar.gz", upload-time = 2010-10-28T10:08:17Z, size = 2114, hashes = { sha256 = "1c35b4ac206cef2d24816c89f89cf289dd3d38cf7c449bb3fab7bf6d43f01b1f" } } + +[[packages]] +name = "packaging" +version = "20.0" +sdist = { url = "https://files.pythonhosted.org/packages/c7/cf/d84b72480a556d9bd4a191a91b0a8ea71cb48e6f6132f12d9d365c51bdb6/packaging-20.0.tar.gz", upload-time = 2020-01-06T06:25:08Z, size = 72663, hashes = { sha256 = "fe1d8331dfa7cc0a883b49d75fc76380b2ab2734b220fbb87d774e4fd4b851f8" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/d8/5b/3098db49a61ccc8583ffead6aedc226f08ff56dc03106b6ec54451e27a30/packaging-20.0-py2.py3-none-any.whl", upload-time = 2020-01-06T06:25:04Z, size = 36915, hashes = { sha256 = "aec3fdbb8bc9e4bb65f0634b9f551ced63983a529d6a8931817d52fdd0816ddb" } }] + +[[packages]] +name = "parso" +version = "0.8.5" +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", upload-time = 2025-08-23T15:15:28Z, size = 401205, hashes = { sha256 = "034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", upload-time = 2025-08-23T15:15:25Z, size = 106668, hashes = { sha256 = "646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887" } }] + +[[packages]] +name = "paste" +version = "3.10.1" +sdist = { url = "https://files.pythonhosted.org/packages/d7/1c/6bc9040bf9b4cfc9334f66d2738f952384c106c48882adf6097fed3da966/paste-3.10.1.tar.gz", upload-time = 2024-05-01T11:41:08Z, size = 652629, hashes = { sha256 = "1c3d12065a5e8a7a18c0c7be1653a97cf38cc3e9a5a0c8334a9dd992d3a05e4a" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/2e/14/032895c25726a859bf48b8ed68944c3efc7a3decd920533ed929f12f08a1/Paste-3.10.1-py3-none-any.whl", upload-time = 2024-05-01T11:41:05Z, size = 289253, hashes = { sha256 = "995e9994b6a94a2bdd8bd9654fb70ca3946ffab75442468bacf31b4d06481c3d" } }] + +[[packages]] +name = "pexpect" +version = "4.9.0" +marker = "sys_platform != 'win32'" +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", upload-time = 2023-11-25T09:07:26Z, size = 166450, hashes = { sha256 = "ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", upload-time = 2023-11-25T06:56:14Z, size = 63772, hashes = { sha256 = "7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523" } }] + +[[packages]] +name = "pillow" +version = "10.2.0" +sdist = { url = "https://files.pythonhosted.org/packages/f8/3e/32cbd0129a28686621434cbf17bb64bf1458bfb838f1f668262fefce145c/pillow-10.2.0.tar.gz", upload-time = 2024-01-02T09:16:59Z, size = 46212712, hashes = { sha256 = "e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e" } } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/0b/54df8b49ac8b85ed5aae68b2d8573ed1fb73d0a18a0830a988d0b3431080/pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2024-01-02T09:15:08Z, size = 4405870, hashes = { sha256 = "da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4" } }, + { url = "https://files.pythonhosted.org/packages/cb/c3/98faa3e92cf866b9446c4842f1fe847e672b2f54e000cb984157b8095797/pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", upload-time = 2024-01-02T09:15:10Z, size = 4487681, hashes = { sha256 = "322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2" } }, +] + +[[packages]] +name = "pkginfo" +version = "1.12.1.2" +sdist = { url = "https://files.pythonhosted.org/packages/24/03/e26bf3d6453b7fda5bd2b84029a426553bb373d6277ef6b5ac8863421f87/pkginfo-1.12.1.2.tar.gz", upload-time = 2025-02-19T15:27:37Z, size = 451828, hashes = { sha256 = "5cd957824ac36f140260964eba3c6be6442a8359b8c48f4adf90210f33a04b7b" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/fa/3d/f4f2ba829efb54b6cd2d91349c7463316a9cc55a43fc980447416c88540f/pkginfo-1.12.1.2-py3-none-any.whl", upload-time = 2025-02-19T15:27:33Z, size = 32717, hashes = { sha256 = "c783ac885519cab2c34927ccfa6bf64b5a704d7c69afaea583dd9b7afe969343" } }] + +[[packages]] +name = "platformdirs" +version = "4.5.1" +sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", upload-time = 2025-12-05T13:52:58Z, size = 21715, hashes = { sha256 = "61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", upload-time = 2025-12-05T13:52:56Z, size = 18731, hashes = { sha256 = "d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31" } }] + +[[packages]] +name = "pluggy" +version = "1.6.0" +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", upload-time = 2025-05-15T12:30:07Z, size = 69412, hashes = { sha256 = "7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", upload-time = 2025-05-15T12:30:06Z, size = 20538, hashes = { sha256 = "e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746" } }] + +[[packages]] +name = "plumbum" +version = "1.10.0" +sdist = { url = "https://files.pythonhosted.org/packages/dc/c8/11a5f792704b70f071a3dbc329105a98e9cc8d25daaf09f733c44eb0ef8e/plumbum-1.10.0.tar.gz", upload-time = 2025-10-31T05:02:48Z, size = 320039, hashes = { sha256 = "f8cbf0ecec0b73ff4e349398b65112a9e3f9300e7dc019001217dcc148d5c97c" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl", upload-time = 2025-10-31T05:02:47Z, size = 127383, hashes = { sha256 = "9583d737ac901c474d99d030e4d5eec4c4e6d2d7417b1cf49728cf3be34f6dc8" } }] + +[[packages]] +name = "pooch" +version = "1.5.0" +sdist = { url = "https://files.pythonhosted.org/packages/01/b8/aa2e51af6af8879fc9e61d75a31d16946c71b0abd07bde4ec2d99338fae5/pooch-1.5.0.tar.gz", upload-time = 2021-08-23T09:46:03Z, size = 60596, hashes = { sha256 = "9eaf36caccb78fbf1fd42acbeda9890b81de4d7e5823686ba49dc3010c21e1cf" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/1a/57/03a879380fe8b501e25617ea59a51a390ee9a5a09769945e8cb2c21ecaf1/pooch-1.5.0-py3-none-any.whl", upload-time = 2021-08-23T09:46:01Z, size = 56412, hashes = { sha256 = "54c9321a1cab8cd056ced497649eac69891066038319b31bebf13ec8ac79862b" } }] + +[[packages]] +name = "pre-commit" +version = "0.2.0" +sdist = { url = "https://files.pythonhosted.org/packages/3f/cd/7fef5156196d981d4c4d0271842c0a1f0fc5d76831abfca3e858f111d2e9/pre_commit-0.2.0.tar.gz", upload-time = 2014-06-17T17:04:14Z, size = 16234, hashes = { sha256 = "21328d65ad427fbb8455d36d9993c696ce7ba4361cd3b41baf111acfd81b41fe" } } + +[[packages]] +name = "prompt-toolkit" +version = "3.0.52" +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", upload-time = 2025-08-27T15:24:02Z, size = 434198, hashes = { sha256 = "28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", upload-time = 2025-08-27T15:23:59Z, size = 391431, hashes = { sha256 = "9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955" } }] + +[[packages]] +name = "ptyprocess" +version = "0.7.0" +marker = "sys_platform != 'win32'" +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", upload-time = 2020-12-28T15:15:30Z, size = 70762, hashes = { sha256 = "5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", upload-time = 2020-12-28T15:15:28Z, size = 13993, hashes = { sha256 = "4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35" } }] + +[[packages]] +name = "pure-eval" +version = "0.2.3" +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", upload-time = 2024-07-21T12:58:21Z, size = 19752, hashes = { sha256 = "5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", upload-time = 2024-07-21T12:58:20Z, size = 11842, hashes = { sha256 = "1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0" } }] + +[[packages]] +name = "pygments" +version = "2.19.2" +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", upload-time = 2025-06-21T13:39:12Z, size = 4968631, hashes = { sha256 = "636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", upload-time = 2025-06-21T13:39:07Z, size = 1225217, hashes = { sha256 = "86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" } }] + +[[packages]] +name = "pyparsing" +version = "3.3.2" +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", upload-time = 2026-01-21T03:57:59Z, size = 6851574, hashes = { sha256 = "c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", upload-time = 2026-01-21T03:57:55Z, size = 122781, hashes = { sha256 = "850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d" } }] + +[[packages]] +name = "pytest" +version = "8.0.0" +sdist = { url = "https://files.pythonhosted.org/packages/50/fd/af2d835eed57448960c4e7e9ab76ee42f24bcdd521e967191bc26fa2dece/pytest-8.0.0.tar.gz", upload-time = 2024-01-27T21:47:58Z, size = 1395242, hashes = { sha256 = "249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c7/10/727155d44c5e04bb08e880668e53079547282e4f950535234e5a80690564/pytest-8.0.0-py3-none-any.whl", upload-time = 2024-01-27T21:47:54Z, size = 334024, hashes = { sha256 = "50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6" } }] + +[[packages]] +name = "pytest-cov" +version = "4.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/7a/15/da3df99fd551507694a9b01f512a2f6cf1254f33601605843c3775f39460/pytest-cov-4.1.0.tar.gz", upload-time = 2023-05-24T18:44:56Z, size = 63245, hashes = { sha256 = "3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/a7/4b/8b78d126e275efa2379b1c2e09dc52cf70df16fc3b90613ef82531499d73/pytest_cov-4.1.0-py3-none-any.whl", upload-time = 2023-05-24T18:44:54Z, size = 21949, hashes = { sha256 = "6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" } }] + +[[packages]] +name = "pytest-qt" +version = "4.3.1" +sdist = { url = "https://files.pythonhosted.org/packages/53/68/eb0887ca902b13698b28b323d8ac7ca25d4894b8675f010cd9bdc5a97a1a/pytest-qt-4.3.1.tar.gz", upload-time = 2023-12-22T20:59:57Z, size = 125223, hashes = { sha256 = "0256041af78082dfc08e22ccf860aaa878d8029557f03f4bfc2007fc291b1e61" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/e3/f1/8d8871ad21cebf013f3c33fe4308221aabc28cc52e915562683561d2b40c/pytest_qt-4.3.1-py3-none-any.whl", upload-time = 2023-12-22T20:59:55Z, size = 36254, hashes = { sha256 = "e1bd043a4e460f184657bc3a0eabf289ad5e88a55a2abf0436d248049a331653" } }] + +[[packages]] +name = "pytest-rerunfailures" +version = "0.3" +sdist = { url = "https://files.pythonhosted.org/packages/47/9f/4b1dea735b5e419e0b6ba7772699504b3676f22afedafca4a4a8b4b16334/pytest-rerunfailures-0.03.tar.gz", upload-time = 2012-12-28T23:20:15Z, size = 2516, hashes = { sha256 = "c37c9c3bee93f4d50f6145a134ae971bda57c37faa156dcf6deb2c4e9ff124e0" } } + +[[packages]] +name = "pytest-timeout" +version = "2.2.0" +sdist = { url = "https://files.pythonhosted.org/packages/2a/b0/8e3182e9ed65ad5b247f9d13769f214fc52b0d3522c3e1c8dbfa2f879e5a/pytest-timeout-2.2.0.tar.gz", upload-time = 2023-10-08T10:14:25Z, size = 16391, hashes = { sha256 = "3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/e2/3e/abfdb7319d71a179bb8f5980e211d93e7db03f0c0091794dbcd652d642da/pytest_timeout-2.2.0-py3-none-any.whl", upload-time = 2023-10-08T10:14:23Z, size = 13142, hashes = { sha256 = "bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2" } }] + +[[packages]] +name = "python-dateutil" +version = "2.9.0.post0" +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", upload-time = 2024-03-01T18:36:20Z, size = 342432, hashes = { sha256 = "37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", upload-time = 2024-03-01T18:36:18Z, size = 229892, hashes = { sha256 = "a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" } }] + +[[packages]] +name = "pyyaml" +version = "6.0.3" +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", upload-time = 2025-09-25T21:33:16Z, size = 130960, hashes = { sha256 = "d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-09-25T21:31:51Z, size = 770293, hashes = { sha256 = "9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b" } }] + +[[packages]] +name = "referencing" +version = "0.37.0" +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", upload-time = 2025-10-13T15:30:48Z, size = 78036, hashes = { sha256 = "44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", upload-time = 2025-10-13T15:30:47Z, size = 26766, hashes = { sha256 = "381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231" } }] + +[[packages]] +name = "requests" +version = "2.32.5" +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", upload-time = 2025-08-18T20:46:02Z, size = 134517, hashes = { sha256 = "dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", upload-time = 2025-08-18T20:46:00Z, size = 64738, hashes = { sha256 = "2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6" } }] + +[[packages]] +name = "rpds-py" +version = "0.30.0" +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", upload-time = 2025-11-30T20:24:38Z, size = 69469, hashes = { sha256 = "dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-11-30T20:21:42Z, size = 390522, hashes = { sha256 = "0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3" } }] + +[[packages]] +name = "ruff" +version = "0.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/ed/63/dcb12b0a11eae757e510fa82a6d50899c032d78cfadcbfa3adce1966a1cd/ruff-0.1.0.tar.gz", upload-time = 2023-10-16T19:40:50Z, size = 1632695, hashes = { sha256 = "ad6b13824714b19c5f8225871cf532afb994470eecb74631cd3500fe817e6b3f" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/ac/22/0fc6119373ee9335a6ff41761eff4997e45c4773555100d150d4efba7395/ruff-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2023-10-16T19:40:33Z, size = 6549832, hashes = { sha256 = "b04cd4298b43b16824d9a37800e4c145ba75c29c43ce0d74cad1d66d7ae0a4c5" } }] + +[[packages]] +name = "scipy" +version = "1.12.0" +sdist = { url = "https://files.pythonhosted.org/packages/30/85/cdbf2c3c460fe5aae812917866392068a88d02f07de0fe31ce738734c477/scipy-1.12.0.tar.gz", upload-time = 2024-01-20T21:13:43Z, size = 56811768, hashes = { sha256 = "4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/f5/aa/8e6071a5e4dca4ec68b5b22e4991ee74c59c5d372112b9c236ec1faff57d/scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2024-01-20T21:10:51Z, size = 38441046, hashes = { sha256 = "5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c" } }] + +[[packages]] +name = "setuptools" +version = "80.10.2" +sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", upload-time = 2026-01-25T22:38:17Z, size = 1200343, hashes = { sha256 = "8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", upload-time = 2026-01-25T22:38:15Z, size = 1064234, hashes = { sha256 = "95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173" } }] + +[[packages]] +name = "simplejson" +version = "3.20.2" +sdist = { url = "https://files.pythonhosted.org/packages/41/f4/a1ac5ed32f7ed9a088d62a59d410d4c204b3b3815722e2ccfb491fa8251b/simplejson-3.20.2.tar.gz", upload-time = 2025-09-26T16:29:36Z, size = 85784, hashes = { sha256 = "5fe7a6ce14d1c300d80d08695b7f7e633de6cd72c80644021874d985b3393649" } } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b9/c54eef4226c6ac8e9a389bbe5b21fef116768f97a2dc1a683c716ffe66ef/simplejson-3.20.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-09-26T16:27:36Z, size = 138172, hashes = { sha256 = "3a97249ee1aee005d891b5a211faf58092a309f3d9d440bc269043b08f662eda" } }, + { url = "https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl", upload-time = 2025-09-26T16:29:35Z, size = 57309, hashes = { sha256 = "3b6bb7fb96efd673eac2e4235200bfffdc2353ad12c54117e1e4e2fc485ac017" } }, +] + +[[packages]] +name = "six" +version = "1.17.0" +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", upload-time = 2024-12-04T17:35:28Z, size = 34031, hashes = { sha256 = "ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", upload-time = 2024-12-04T17:35:26Z, size = 11050, hashes = { sha256 = "4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274" } }] + +[[packages]] +name = "snowballstemmer" +version = "3.0.1" +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", upload-time = 2025-05-09T16:34:51Z, size = 105575, hashes = { sha256 = "6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", upload-time = 2025-05-09T16:34:50Z, size = 103274, hashes = { sha256 = "6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064" } }] + +[[packages]] +name = "sphinx" +version = "5.1.1" +sdist = { url = "https://files.pythonhosted.org/packages/3a/30/ac07935542607c876f3fcee1c1ab043d253332567009994a1bf71d9b55cd/Sphinx-5.1.1.tar.gz", upload-time = 2022-07-26T21:23:37Z, size = 6755784, hashes = { sha256 = "ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/83/74/318d8cd70cbde2164e3035f9e9ba0807e2de7d384e03784ad0afc98b891b/Sphinx-5.1.1-py3-none-any.whl", upload-time = 2022-07-26T21:23:09Z, size = 3152688, hashes = { sha256 = "309a8da80cb6da9f4713438e5b55861877d5d7976b69d87e336733637ea12693" } }] + +[[packages]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", upload-time = 2024-07-29T01:09:00Z, size = 20053, hashes = { sha256 = "2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", upload-time = 2024-07-29T01:08:58Z, size = 119300, hashes = { sha256 = "4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5" } }] + +[[packages]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", upload-time = 2024-07-29T01:09:23Z, size = 12967, hashes = { sha256 = "411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", upload-time = 2024-07-29T01:09:21Z, size = 82530, hashes = { sha256 = "aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2" } }] + +[[packages]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", upload-time = 2024-07-29T01:09:37Z, size = 22617, hashes = { sha256 = "c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", upload-time = 2024-07-29T01:09:36Z, size = 98705, hashes = { sha256 = "166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8" } }] + +[[packages]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", upload-time = 2019-01-21T16:10:16Z, size = 5787, hashes = { sha256 = "a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", upload-time = 2019-01-21T16:10:14Z, size = 5071, hashes = { sha256 = "2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178" } }] + +[[packages]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", upload-time = 2024-07-29T01:09:56Z, size = 17165, hashes = { sha256 = "4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", upload-time = 2024-07-29T01:09:54Z, size = 88743, hashes = { sha256 = "b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb" } }] + +[[packages]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", upload-time = 2024-07-29T01:10:09Z, size = 16080, hashes = { sha256 = "e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", upload-time = 2024-07-29T01:10:08Z, size = 92072, hashes = { sha256 = "6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331" } }] + +[[packages]] +name = "sqlbean" +version = "0.603" +sdist = { url = "https://files.pythonhosted.org/packages/14/54/162f7bdecd7bb18d3329c9cd7eb4ea26a50906c48318b20b564bbdfdbae9/sqlbean-0.603.tar.gz", upload-time = 2012-02-11T05:34:38Z, size = 18587, hashes = { sha256 = "eb5137f84508ba50c4e1df2176781d35a2dc4bf15b09181ba5059b781032d8ce" } } + +[[packages]] +name = "stack-data" +version = "0.6.3" +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", upload-time = 2023-09-30T13:58:05Z, size = 44707, hashes = { sha256 = "836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", upload-time = 2023-09-30T13:58:03Z, size = 24521, hashes = { sha256 = "d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" } }] + +[[packages]] +name = "tabulate" +version = "0.9.0" +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", upload-time = 2022-10-06T17:21:48Z, size = 81090, hashes = { sha256 = "0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", upload-time = 2022-10-06T17:21:44Z, size = 35252, hashes = { sha256 = "024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f" } }] + +[[packages]] +name = "tempita" +version = "0.6.0" +sdist = { url = "https://files.pythonhosted.org/packages/74/d5/ad8a832e120cb9b743f175b80368b457a1078cd65bd9b8578aca5ddb1bd2/tempita-0.6.0.tar.gz", upload-time = 2024-11-12T21:55:45Z, size = 19205, hashes = { sha256 = "76e15de0137e5011c22949cc15a5161f623fe6a31655751c6d765db6bbac27b6" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/23/05/346f980c4e643f04ec3630c20d8169ffbea5137f6dcf7619d7349f7f9401/Tempita-0.6.0-py3-none-any.whl", upload-time = 2024-11-12T21:55:43Z, size = 13752, hashes = { sha256 = "696160ba5302b344934558d9d4c94a7b9778b7641612f4e20d62fcac4d7a02c9" } }] + +[[packages]] +name = "toml-sort" +version = "0.1.0" +sdist = { url = "https://files.pythonhosted.org/packages/d7/5b/a4d60a2adab82336d02ebf806630e0a4cfa38b776fa859e054bd9f11e1e4/toml-sort-0.1.0.tar.gz", upload-time = 2019-08-05T13:16:50Z, size = 3553, hashes = { sha256 = "a55d69a2925da3263bfe6ec1d2adf1e49db0cb75af34327f4a7e1d8239f9940d" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b8/9e/20a166e038a0dc818c51e3757a5c2b6850305fe9a8e6b23514979aa5832e/toml_sort-0.1.0-py3-none-any.whl", upload-time = 2019-08-05T13:16:52Z, size = 4364, hashes = { sha256 = "6f675963139c1ec4cf53b2f41874e949ad04c92b3a53ac01b39c3da67839f548" } }] + +[[packages]] +name = "tomli" +version = "1.1.0" +marker = "python_full_version <= '3.11'" +sdist = { url = "https://files.pythonhosted.org/packages/6c/16/f48ab3289015f8f90e2c68fb76531728b3d8e4ce5052ee80ad10e7707eda/tomli-1.1.0.tar.gz", upload-time = 2021-07-23T09:47:07Z, size = 12134, hashes = { sha256 = "33d7984738f8bb699c9b0a816eb646a8178a69eaa792d258486776a5d21b8ca5" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/2e/ac/75c79a6880ba6b306df9f61fedf802dd7db0c54d42e4a879f1428625c138/tomli-1.1.0-py3-none-any.whl", upload-time = 2021-07-23T09:47:06Z, size = 11712, hashes = { sha256 = "f4a182048010e89cbec0ae4686b21f550a7f2903f665e34a6de58ec15424f919" } }] + +[[packages]] +name = "tomlkit" +version = "0.14.0" +sdist = { url = "https://files.pythonhosted.org/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", upload-time = 2026-01-13T01:14:53Z, size = 187167, hashes = { sha256 = "cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", upload-time = 2026-01-13T01:14:51Z, size = 39310, hashes = { sha256 = "592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680" } }] + +[[packages]] +name = "tqdm" +version = "4.66.0" +sdist = { url = "https://files.pythonhosted.org/packages/f1/fb/6f40278d3b74f1486147aebf828ad081226f4f80b5b31a042386acc76dde/tqdm-4.66.0.tar.gz", upload-time = 2023-08-09T10:45:13Z, size = 169029, hashes = { sha256 = "cc6e7e52202d894e66632c5c8a9330bd0e3ff35d2965c93ca832114a3d865362" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/a5/d6/502a859bac4ad5e274255576cd3e15ca273cdb91731bc39fb840dd422ee9/tqdm-4.66.0-py3-none-any.whl", upload-time = 2023-08-09T10:45:10Z, size = 78149, hashes = { sha256 = "39d459c7140b7890174e69d4d68d6291bc774a55b4bc5d93c0b760798ac5a03e" } }] + +[[packages]] +name = "traitlets" +version = "5.14.3" +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", upload-time = 2024-04-19T11:11:49Z, size = 161621, hashes = { sha256 = "9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", upload-time = 2024-04-19T11:11:46Z, size = 85359, hashes = { sha256 = "b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f" } }] + +[[packages]] +name = "twine" +version = "1.0.1" +sdist = { url = "https://files.pythonhosted.org/packages/a4/08/dcc58e09165733f78c34c8328a305d4d018802ebbe8cfd77704974c8e18c/twine-1.0.1.tar.bz2", upload-time = 2013-09-26T12:49:15Z, size = 15047, hashes = { sha256 = "6912cf86354f7a992385786b4d7595935d67b4104ac9c9147a82bfc4d9c4d251" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/da/07/baf5870c94b669c86ac37cf52e60aa878cd45b29fd31692463f6b1df7162/twine-1.0.1-py2.py3-none-any.whl", upload-time = 2013-09-26T12:48:13Z, size = 12015, hashes = { sha256 = "54f16ad27606c23c921646afa75e8d5c533dddd3bd680aee372a3fd3a48416b1" } }] + +[[packages]] +name = "typing-extensions" +version = "4.15.0" +marker = "python_full_version < '3.13'" +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", upload-time = 2025-08-25T13:49:26Z, size = 109391, hashes = { sha256 = "0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", upload-time = 2025-08-25T13:49:24Z, size = 44614, hashes = { sha256 = "f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548" } }] + +[[packages]] +name = "urllib3" +version = "2.6.3" +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", upload-time = 2026-01-07T16:24:43Z, size = 435556, hashes = { sha256 = "1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", upload-time = 2026-01-07T16:24:42Z, size = 131584, hashes = { sha256 = "bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4" } }] + +[[packages]] +name = "virtualenv" +version = "20.36.1" +sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", upload-time = 2026-01-09T18:21:01Z, size = 6032239, hashes = { sha256 = "8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl", upload-time = 2026-01-09T18:20:59Z, size = 6008258, hashes = { sha256 = "575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f" } }] + +[[packages]] +name = "vulture" +version = "0.1" +sdist = { url = "https://files.pythonhosted.org/packages/de/3d/4b8f053a92cb7c6ca33bfe64379dccfb72ef041a25b56192008434a10828/vulture-0.1.tar.gz", upload-time = 2012-03-17T21:04:56Z, size = 16959, hashes = { sha256 = "d47976f368be4b1bfde9b626487ad76f860e51c43575c67abbdce05d765ab1a7" } } + +[[packages]] +name = "wcwidth" +version = "0.5.3" +sdist = { url = "https://files.pythonhosted.org/packages/c2/62/a7c072fbfefb2980a00f99ca994279cb9ecf310cb2e6b2a4d2a28fe192b3/wcwidth-0.5.3.tar.gz", upload-time = 2026-01-31T03:52:10Z, size = 157587, hashes = { sha256 = "53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/3c/c1/d73f12f8cdb1891334a2ccf7389eed244d3941e74d80dd220badb937f3fb/wcwidth-0.5.3-py3-none-any.whl", upload-time = 2026-01-31T03:52:09Z, size = 92981, hashes = { sha256 = "d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e" } }] + +[[packages]] +name = "weberror" +version = "0.13.1" +sdist = { url = "https://files.pythonhosted.org/packages/07/0a/09ca5eb0fab5c0d17b380026babe81c96ecebb13f2b06c3203432dd7be72/WebError-0.13.1.tar.gz", upload-time = 2016-04-10T01:48:48Z, size = 85910, hashes = { sha256 = "c19f8bd57de2f1eea1b18a44f1ba1ad27421097c9ecfa0ae754fa42c9cdd9864" } } + +[[packages]] +name = "webob" +version = "1.8.9" +sdist = { url = "https://files.pythonhosted.org/packages/85/0b/1732085540b01f65e4e7999e15864fe14cd18b12a95731a43fd6fd11b26a/webob-1.8.9.tar.gz", upload-time = 2024-10-24T03:19:20Z, size = 279775, hashes = { sha256 = "ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/50/bd/c336448be43d40be28e71f2e0f3caf7ccb28e2755c58f4c02c065bfe3e8e/WebOb-1.8.9-py2.py3-none-any.whl", upload-time = 2024-10-24T03:19:18Z, size = 115364, hashes = { sha256 = "45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9" } }] + +[[packages]] +name = "wheel" +version = "0.21.0" +sdist = { url = "https://files.pythonhosted.org/packages/2a/a3/7a0a7d058bcaf0b08a50e7d55d5426522374ee466316489cc853d0d26dc1/wheel-0.21.0.tar.gz", upload-time = 2013-07-20T16:21:20Z, size = 39310, hashes = { sha256 = "68ad3e66560e9df1f1f435b480183ba24ef913da26556af9e5ae16cd94dd26e1" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/0d/e6/60c6e03ae967d076e72ec5298cd136d658e4b8eb6773d6aef3ff1abc8d04/wheel-0.21.0-py2.py3-none-any.whl", upload-time = 2013-07-20T16:21:03Z, size = 54184, hashes = { sha256 = "b0798123cd67a763637991812ab866f609a81516228273e89270d4bc91b276cd" } }]