diff --git a/.cruft.json b/.cruft.json new file mode 100644 index 00000000..f48cd683 --- /dev/null +++ b/.cruft.json @@ -0,0 +1,17 @@ +{ + "template": "https://github.com/tanlin2013/cookiecutter-python/", + "commit": "52658e95ca943b42a87527253e70981d67d61512", + "checkout": null, + "context": { + "cookiecutter": { + "full_name": "Tan Tao-Lin", + "email": "tanlin2013@gmail.com", + "github_username": "tanlin2013", + "project_name": "tnpy", + "description": "Tensor Network algorithms implemented in python.", + "version": "0.1.1a3", + "_template": "https://github.com/tanlin2013/cookiecutter-python/" + } + }, + "directory": null +} diff --git a/.dockerignore b/.dockerignore index e71c9ead..5ec3f785 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,12 +1,137 @@ +### Custom field +.github/ +docs/ +.dockerignore +.gitignore +.pre-commit-config.yml +CHANGELOG.md +Dockerfile +LICENSE + +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 -.idea/ +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk ### Python template # Byte-compiled / optimized / DLL files -**/__pycache__/ +__pycache__/ *.py[cod] *$py.class @@ -101,7 +226,22 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock -# PEP 582; used by e.g. github.com/David-OConnor/pyflow +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff @@ -144,50 +284,9 @@ dmypy.json # Cython debug symbols cython_debug/ -### macOS template -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### Tnpy specific -# Github -.git/ -.github/ -.gitignore - -# Other stuff -docs/ -tests/ -LICENSE -makefile -.pre-commit-config.yml - -# Poetry -poetry.lock - -# Docker itself -Dockerfile -.dockerignore +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..24eda7d1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: "tanlin2013" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a797907a..324c3b0e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,39 +1,43 @@ -name: docker-build +name: Docker build -on: - push: - branches: - - 'main' +on: [push, pull_request] jobs: - docker: + build: runs-on: ubuntu-latest steps: - - name: Get current date - id: date - run: echo "::set-output name=date::$(date +'%Y-%m-%d.%H.%M')" - - - name: Checkout - uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ github.repository }} + tags: | + type=schedule + type=ref,event=branch + type=ref,event=tag + type=ref,event=pr + type=sha,format=long + type=raw,value={{date 'YYYYMMDD-hhmmss' tz='Asia/Taipei'}} + type=raw,value=latest - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: - context: . + cache-from: type=gha + cache-to: type=gha,mode=max push: true - tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/tnpy:${{ steps.date.outputs.date }} - ${{ secrets.DOCKERHUB_USERNAME }}/tnpy:latest + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 809b2cff..51c5b70b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -48,11 +48,11 @@ jobs: # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. - + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild @@ -61,7 +61,7 @@ jobs: # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # If the Autobuild fails above, remove it and uncomment the following three lines. + # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml new file mode 100644 index 00000000..4630e18e --- /dev/null +++ b/.github/workflows/doc.yml @@ -0,0 +1,37 @@ +name: Doc + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + strategy: + matrix: + python-version: ["3.10"] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + sudo apt-get install -y python3-sphinx pandoc + python -m pip install --upgrade pip + python -m pip install --upgrade poetry>=1.2.0 + poetry install --with docs + + - name: Build Sphinx doc + run: | + poetry run make -C docs html + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/build/html diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 2fcc730a..00000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,35 +0,0 @@ -# Reference -# How to use make with flags -# make html SPHINXOPTS+='-W --keep-going -n' -# See this Github issue: Action fails with due to missing log file -# https://github.com/ammaraskar/sphinx-action/issues/5 - -name: docs - -on: - workflow_run: - workflows: [ "docker-build" ] - types: - - completed - -jobs: - build: - runs-on: ubuntu-latest - container: - image: docker://tanlin2013/tnpy:latest - steps: - - uses: actions/checkout@v2 - - - name: Build Sphinx doc - run: | - apt update - apt install -y pandoc - poetry config virtualenvs.create false --local - poetry install - make -C docs html - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/build/html diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..264af0ae --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,35 @@ +name: Lint + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10"] + + steps: + - uses: actions/checkout@v3 + + - name: pip cache + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: lint-pip-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + lint-pip- + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade poetry>=1.2.0 + poetry install + + - name: Lint + run: ./scripts/lint.sh diff --git a/.github/workflows/publish.yml b/.github/workflows/release.yml similarity index 58% rename from .github/workflows/publish.yml rename to .github/workflows/release.yml index 4e3fe0dc..30ea5bf4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/release.yml @@ -1,46 +1,56 @@ -# https://github.com/marketplace/actions/pypi-publish - -name: publish +name: Release on: push: + branches: + - 'releases/**' tags: - - 'v*.*.*' + - 'v*' jobs: - build-image-package: + build: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 - - name: Log in to the Container registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: images: ghcr.io/${{ github.repository }} + tags: | + type=schedule + type=ref,event=branch + type=ref,event=tag + type=ref,event=pr + type=sha,format=long + type=raw,value={{date 'YYYYMMDD-hhmmss' tz='Asia/Taipei'}} + type=raw,value=latest + + - name: Log in to the Container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: - context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - publish: - needs: build-image-package + release: + needs: build runs-on: ubuntu-latest container: image: ghcr.io/${{ github.repository }}:latest @@ -48,10 +58,9 @@ jobs: - uses: actions/checkout@v3 - name: Build package - run: poetry build -f wheel + run: poetry build --format wheel - name: Publish a Python distribution to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..a89228c9 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,85 @@ +name: Test + +on: + workflow_run: + workflows: ["Docker build"] + types: + - completed + +jobs: + in-docker: + runs-on: ubuntu-latest + container: + image: docker://${{ github.repository }}:sha-${{ github.sha }} + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - uses: actions/checkout@v3 + + - name: Install dev dependencies + run: | + poetry install --all-extras + + - name: Test + run: poetry run pytest tests/ + + in-os: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ["3.10"] + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + + - name: Ubuntu cache + uses: actions/cache@v3 + if: startsWith(matrix.os, 'ubuntu') + with: + path: ~/.cache/pip + key: + ${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.python-version }}- + + - name: macOS cache + uses: actions/cache@v3 + if: startsWith(matrix.os, 'macOS') + with: + path: ~/Library/Caches/pip + key: + ${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.python-version }}- + + - name: Windows cache + uses: actions/cache@v3 + if: startsWith(matrix.os, 'windows') + with: + path: c:\users\runneradmin\appdata\local\pip\cache + key: + ${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.python-version }}- + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dev dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade poetry==1.3.2 + poetry install --all-extras + + - name: Test + shell: bash + run: | + poetry run pytest tests/ -s --cov=${{ github.event.repository.name }}/ --cov-report=term-missing ${@-} + poetry run coverage xml + + - name: Report Coverage + if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' + uses: codecov/codecov-action@v3 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 4a94953d..00000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: tests - -on: - workflow_run: - workflows: [ "docker-build" ] - types: - - completed - -jobs: - test: - runs-on: ubuntu-latest - container: - image: docker://tanlin2013/tnpy:latest - steps: - - uses: actions/checkout@v3 - - - name: Install pytest - run: | - poetry config virtualenvs.create false --local - poetry install - - - name: Unit Test - run: pytest --cov=tnpy tests - - lint: - runs-on: ubuntu-latest - container: - image: docker://tanlin2013/tnpy:latest - steps: - - uses: actions/checkout@v3 - - - name: Install linter - run: | - poetry config virtualenvs.create false --local - poetry install - - - name: Run linter - run: | - flake8 \ - --max-line-length=88 \ - --ignore=E203,W503 \ - tnpy - - static-type: - runs-on: ubuntu-latest - container: - image: docker://tanlin2013/tnpy:latest - steps: - - uses: actions/checkout@v3 - - - name: Install linter - run: | - poetry config virtualenvs.create false --local - poetry install - - - name: Static type check - run: | - mypy \ - --install-types \ - --non-interactive \ - --ignore-missing-imports \ - --no-strict-optional \ - tnpy diff --git a/.gitignore b/.gitignore index b2fbed75..48311c14 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,104 @@ -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +### Custom field +# File extension used to store arrays in binary +*.npz +*.hdf5 -.idea/ +# File extenson used by graphviz +*.gv +*.gv.png -### JupyterNotebooks template -# gitignore template for Jupyter Notebooks -# website: http://jupyter.org/ +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets -.ipynb_checkpoints -*/.ipynb_checkpoints/* +# Local History for Visual Studio Code +.history/ -# IPython -profile_default/ -ipython_config.py +# Built Visual Studio Code Extensions +*.vsix -# Remove previous ipynb_checkpoints -# git rm -r .ipynb_checkpoints/ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser ### macOS template # General @@ -119,7 +201,6 @@ instance/ # Sphinx documentation docs/_build/ -_autosummary/ # PyBuilder .pybuilder/ @@ -144,7 +225,22 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock -# PEP 582; used by e.g. github.com/David-OConnor/pyflow +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff @@ -187,15 +283,9 @@ dmypy.json # Cython debug symbols cython_debug/ -### Tnpy specific - -# File extension used to store arrays in binary -*.npz -*.hdf5 - -# File extenson used by graphviz -*.gv -*.gv.png - -# Poetry -poetry.lock +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be8ffb44..7d256e78 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,18 +1,49 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.2.0 + rev: v4.4.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - id: check-added-large-files + args: ['--maxkb=50000'] + +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 22.12.0 hooks: - id: black - language_version: python3.9 + language_version: python3.11 + - repo: https://github.com/PyCQA/flake8 - rev: 4.0.1 + rev: 6.0.0 hooks: - id: flake8 - args: ['--max-line-length=88', '--ignore=E203,W503'] + additional_dependencies: [Flake8-pyproject] + +- repo: https://github.com/python-poetry/poetry + rev: 1.3.2 + hooks: + - id: poetry-check + - id: poetry-lock + stages: [push] + +- repo: https://github.com/commitizen-tools/commitizen + rev: v2.40.0 + hooks: + - id: commitizen + - id: commitizen-branch + stages: [push] + +- repo: local + hooks: + - id: cruft-check + name: cruft-check + entry: bash -c 'cruft check' + language: python + pass_filenames: false + stages: [push] diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..5748f2ec --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,20 @@ +Install the latest +=================== + +To install the latest version of tnpy simply run: + +`pip3 install tnpy` + +OR + +`poetry add tnpy` + +OR + +`pipenv install tnpy` + + +Changelog +========= +## 1.0.0 - TBD +- Initial API stable release. diff --git a/Dockerfile b/Dockerfile index 2805d76b..d8a07d68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,25 @@ -FROM python:3.10 -MAINTAINER "TaoLin" +FROM python:3.10.8 as python +LABEL maintainer="TaoLin tanlin2013@gmail.com" -ARG WORKDIR=/home/tnpy +ARG WORKDIR=/home ENV PYTHONPATH="${PYTHONPATH}:$WORKDIR" \ - PATH="/root/.local/bin:$PATH" + PATH="/root/.local/bin:$PATH" \ + PYTHONUNBUFFERED=true WORKDIR $WORKDIR + + +FROM python as runtime COPY . $WORKDIR -# Install fortran, blas, lapack RUN apt update && \ - apt-get install -y --no-install-recommends \ - gfortran libblas-dev liblapack-dev graphviz -RUN apt-get -y clean && \ - rm -rf /var/lib/apt/lists/* + apt-get install -y --no-install-recommends \ + gfortran libblas-dev liblapack-dev graphviz -# Install required python packages and tnpy -RUN curl -sSL https://install.python-poetry.org | python3 - && \ - poetry config virtualenvs.create false --local && \ - poetry install --no-dev +RUN curl -sSL https://install.python-poetry.org | python3 - --version 1.3.2 && \ + poetry config virtualenvs.create false --local && \ + poetry install -vvv --without dev --all-extras + +RUN apt-get -y clean && \ + rm -rf /var/lib/apt/lists/* -ENTRYPOINT /bin/bash \ No newline at end of file +ENTRYPOINT /bin/bash diff --git a/LICENSE b/LICENSE index 261eeb9e..94faacb5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,21 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +MIT License + +Copyright (c) 2023 Tan Tao-Lin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 553f28e0..b6320ea2 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,25 @@ -# tnpy - -[![PyPI version](https://badge.fury.io/py/tnpy.svg)](https://badge.fury.io/py/tnpy) -![license](https://img.shields.io/github/license/tanlin2013/tnpy?style=plastic) - -![build](https://github.com/tanlin2013/tnpy/actions/workflows/build.yml/badge.svg) -![tests](https://github.com/tanlin2013/tnpy/actions/workflows/tests.yml/badge.svg) -![docs](https://github.com/tanlin2013/tnpy/actions/workflows/docs.yml/badge.svg) +# tnpy: Tensor Network algorithms implemented in python. + +_________________ + +[![PyPI version](https://badge.fury.io/py/tnpy.svg)](http://badge.fury.io/py/tnpy) +[![Downloads](https://pepy.tech/badge/tnpy)](https://pepy.tech/project/tnpy) +[![codecov](https://codecov.io/gh/tanlin2013/tnpy/branch/main/graph/badge.svg)](https://codecov.io/gh/tanlin2013/tnpy) +[![Join the chat at https://gitter.im/tanlin2013/tnpy](https://badges.gitter.im/tanlin2013/tnpy.svg)](https://gitter.im/tanlin2013/tnpy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://timothycrosley.github.io/isort/) +[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://pypi.python.org/pypi/tnpy/) +[![Docker build](https://github.com/tanlin2013/tnpy/actions/workflows/build.yml/badge.svg)](https://github.com/tanlin2013/tnpy/actions/workflows/build.yml) +[![Test Status](https://github.com/tanlin2013/tnpy/actions/workflows/test.yml/badge.svg)](https://github.com/tanlin2013/tnpy/actions/workflows/test.yml) +[![Lint Status](https://github.com/tanlin2013/tnpy/actions/workflows/lint.yml/badge.svg)](https://github.com/tanlin2013/tnpy/actions/workflows/lint.yml) +_________________ [Documentation](https://tanlin2013.github.io/tnpy/) | +_________________ This project is a python implementation of Tensor Network, a numerical approach to quantum many-body systems. - **tnpy** is built on top of [quimb](https://github.com/jcmgray/quimb), along with [TensorNetwork](https://github.com/google/TensorNetwork) for tensor contractions, with optimized support for various backend engines @@ -37,9 +44,9 @@ Dependencies are listed in and they are supposed to be installed together with **tnpy**. Here we just list the essential building blocks. - * [jcmgray/quimb](https://github.com/jcmgray/quimb) - * [google/Tensornetwork](https://github.com/google/TensorNetwork) - * [primme/primme](https://github.com/primme/primme) +* [jcmgray/quimb](https://github.com/jcmgray/quimb) +* [google/Tensornetwork](https://github.com/google/TensorNetwork) +* [primme/primme](https://github.com/primme/primme) Also, it's required to have [lapack](http://www.netlib.org/lapack/) and [blas](http://www.netlib.org/blas/) installed in prior to Primme. @@ -49,35 +56,36 @@ with [mkl-devel](https://pypi.org/project/mkl-devel/). Installation ------------ - * Using Docker - - ``` - docker run --rm -it tanlin2013/tnpy - ``` - * Using pip - * Latest release: - ``` - pip install tnpy - ``` - * Development version: - ``` - pip install git+https://github.com/tanlin2013/tnpy@main - ``` - * Optional dependencies - * If [lapack](http://www.netlib.org/lapack/) and - [blas](http://www.netlib.org/blas/) are missing - ``` - pip install tnpy[mkl] - ``` - * For [quimb](https://github.com/jcmgray/quimb) drawing functionality. - This will install [matplotlib](https://matplotlib.org/) - and [networkx](https://networkx.org/) - ``` - pip install tnpy[drawing] - ``` +* Using Docker + + ``` + docker run --rm -it tanlin2013/tnpy + ``` +* Using pip + * Latest release: + ``` + pip install tnpy + ``` + * Development version: + ``` + pip install git+https://github.com/tanlin2013/tnpy@main + ``` +* Optional dependencies + * If [lapack](http://www.netlib.org/lapack/) and + [blas](http://www.netlib.org/blas/) are missing + ``` + pip install tnpy[mkl] + ``` + * For [quimb](https://github.com/jcmgray/quimb) drawing functionality. + This will install [matplotlib](https://matplotlib.org/) + and [networkx](https://networkx.org/) + ``` + pip install tnpy[drawing] + ``` Getting started --------------- + 1. We provide built-in models. Though it's also possible to register your own one. ``` @@ -101,3 +109,8 @@ Getting started ``` my_mps = fdmrg.mps ``` + +License +------- +© Tan Tao-Lin, 2023. Licensed under a [MIT](https://github.com/tanlin2013/tnpy/master/LICENSE) +license. diff --git a/docs/contributing/1.-contributing-guide.md b/docs/contributing/1.-contributing-guide.md new file mode 100644 index 00000000..5cff6dce --- /dev/null +++ b/docs/contributing/1.-contributing-guide.md @@ -0,0 +1,48 @@ +Contributing to tnpy +======== + +Looking for a useful open source project to contribute to? +Want your contributions to be warmly welcomed and acknowledged? +Welcome! You have found the right place. + +## Getting tnpy set up for local development +The first step when contributing to any project is getting it set up on your local machine. tnpy aims to make this as simple as possible. + +Account Requirements: + +- [A valid GitHub account](https://github.com/join) + +Base System Requirements: + +- Python3.8+ +- poetry +- bash or a bash compatible shell (should be auto-installed on Linux / Mac) + +Once you have verified that you system matches the base requirements you can start to get the project working by following these steps: + +1. [Fork the project on GitHub](https://github.com/tanlin2013/tnpy/fork). +2. Clone your fork to your local file system: + `git clone https://github.com/$GITHUB_ACCOUNT/tnpy.git` +3. `cd tnpy +4. `poetry install` + +## Making a contribution +Congrats! You're now ready to make a contribution! Use the following as a guide to help you reach a successful pull-request: + +1. Check the [issues page](https://github.com/tanlin2013/tnpy/issues) on GitHub to see if the task you want to complete is listed there. + - If it's listed there, write a comment letting others know you are working on it. + - If it's not listed in GitHub issues, go ahead and log a new issue. Then add a comment letting everyone know you have it under control. + - If you're not sure if it's something that is good for the main tnpy project and want immediate feedback, you can discuss it [here](https://gitter.im/tanlin2013/tnpy). +2. Create an issue branch for your local work `git checkout -b issue/$ISSUE-NUMBER`. +3. Do your magic here. +4. Ensure your code matches the [HOPE-8 Coding Standard](https://github.com/hugapi/HOPE/blob/master/all/HOPE-8--Style-Guide-for-Hug-Code.md#hope-8----style-guide-for-hug-code) used by the project. +5. Submit a pull request to the main project repository via GitHub. + +Thanks for the contribution! It will quickly get reviewed, and, once accepted, will result in your name being added to the acknowledgments list :). + +## Thank you! +I can not tell you how thankful I am for the hard work done by tnpy contributors like *you*. + +Thank you! + +~Tan Tao-Lin diff --git a/docs/contributing/2.-coding-standard.md b/docs/contributing/2.-coding-standard.md new file mode 100644 index 00000000..85445e87 --- /dev/null +++ b/docs/contributing/2.-coding-standard.md @@ -0,0 +1,57 @@ +# HOPE 8 -- Style Guide for Hug Code + +| | | +| ------------| ------------------------------------------- | +| HOPE: | 8 | +| Title: | Style Guide for Hug Code | +| Author(s): | Timothy Crosley | +| Status: | Active | +| Type: | Process | +| Created: | 19-May-2019 | +| Updated: | 17-August-2019 | + +## Introduction + +This document gives coding conventions for the Hug code comprising the Hug core as well as all official interfaces, extensions, and plugins for the framework. +Optionally, projects that use Hug are encouraged to follow this HOPE and link to it as a reference. + +## PEP 8 Foundation + +All guidelines in this document are in addition to those defined in Python's [PEP 8](https://www.python.org/dev/peps/pep-0008/) and [PEP 257](https://www.python.org/dev/peps/pep-0257/) guidelines. + +## Line Length + +Too short of lines discourage descriptive variable names where they otherwise make sense. +Too long of lines reduce overall readability and make it hard to compare 2 files side by side. +There is no perfect number: but for Hug, we've decided to cap the lines at 100 characters. + +## Descriptive Variable names + +Naming things is hard. Hug has a few strict guidelines on the usage of variable names, which hopefully will reduce some of the guesswork: +- No one character variable names. + - Except for x, y, and z as coordinates. +- It's not okay to override built-in functions. + - Except for `id`. Guido himself thought that shouldn't have been moved to the system module. It's too commonly used, and alternatives feel very artificial. +- Avoid Acronyms, Abbreviations, or any other short forms - unless they are almost universally understand. + +## Adding new modules + +New modules added to the a project that follows the HOPE-8 standard should all live directly within the base `PROJECT_NAME/` directory without nesting. If the modules are meant only for internal use within the project, they should be prefixed with a leading underscore. For example, def _internal_function. Modules should contain a docstring at the top that gives a general explanation of the purpose and then restates the project's use of the MIT license. +There should be a `tests/test_$MODULE_NAME.py` file created to correspond to every new module that contains test coverage for the module. Ideally, tests should be 1:1 (one test object per code object, one test method per code method) to the extent cleanly possible. + +## Automated Code Cleaners + +All code submitted to Hug should be formatted using Black and isort. +Black should be run with the line length set to 100, and isort with Black compatible settings in place. + +## Automated Code Linting + +All code submitted to hug should run through the following tools: + +- Black and isort verification. +- Flake8 + - flake8-bugbear +- Bandit +- pep8-naming +- vulture +- safety diff --git a/docs/contributing/3.-code-of-conduct.md b/docs/contributing/3.-code-of-conduct.md new file mode 100644 index 00000000..a70f348f --- /dev/null +++ b/docs/contributing/3.-code-of-conduct.md @@ -0,0 +1,88 @@ +# HOPE 11 -- Code of Conduct + +| | | +| ------------| ------------------------------------------- | +| HOPE: | 11 | +| Title: | Code of Conduct | +| Author(s): | Timothy Crosley | +| Status: | Active | +| Type: | Process | +| Created: | 17-August-2019 | +| Updated: | 17-August-2019 | + +## Abstract + +Defines the Code of Conduct for Hug and all related projects. + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting [timothy.crosley@gmail.com](mailto:timothy.crosley@gmail.com). All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. Confidentiality will be maintained +with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][https://www.contributor-covenant.org], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/docs/contributing/4.-acknowledgements.md b/docs/contributing/4.-acknowledgements.md new file mode 100644 index 00000000..e1bc7f25 --- /dev/null +++ b/docs/contributing/4.-acknowledgements.md @@ -0,0 +1,21 @@ +Contributors +=================== + +## Core Developers +- Tan Tao-Lin (@tanlin2013) + +## Notable Bug Reporters +- + +## Code Contributors +- + +## Documenters +- + + +-------------------------------------------- + +A sincere thanks to everyone who helps make tnpy into a great Python3 project! + +~Tan Tao-Lin diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/_templates/.gitkeep b/docs/source/_templates/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/conf.py b/docs/source/conf.py index 2f8a244e..6fcace2c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,22 +12,21 @@ # import os import sys +from importlib import metadata sys.path.insert(0, os.path.abspath("../..")) sys.path.insert(0, os.path.abspath("../../tnpy")) -from tnpy import __version__ # noqa: E402 - # -- Project information ----------------------------------------------------- project = "tnpy" -copyright = "2021, Tan Tao-Lin" +copyright = "2023, Tan Tao-Lin" author = "Tan Tao-Lin" # The short X.Y version -version = __version__ +version = metadata.version("tnpy") # The full version, including alpha/beta/rc tags -release = __version__ +release = metadata.version("tnpy") # -- General configuration --------------------------------------------------- @@ -51,47 +50,11 @@ "m2r2", ] -# Turn on sphinx.ext.autosummary -autodoc_default_options = { - "members": True, - "member-order": "bysource", - "special-members": "__init__", - "undoc-members": True, - "exclude-members": "__weakref__", - "autosummary": True, - "show-inheritance": True, -} -autodoc_typehints = "description" -# autosummary_generate = True -# autosummary_imported_members = True -# numpydoc_show_class_members = False - -# Looks for objects in external projects -intersphinx_mapping = { - "numpy": ("https://numpy.org/doc/stable/", None), - "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), - "quimb": ("https://quimb.readthedocs.io/en/latest/", None), - "tensornetwork": ("https://tensornetwork.readthedocs.io/en/latest/", None), - # "primme": ("https://www.cs.wm.edu/~andreas/software/doc/readme.html", None), -} - -# Mathjax (default values seem to be satisfactory enough) -# mathjax_path = "https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/node-main.min.js" -# mathjax2_config = { -# "tex": { -# "inlineMath": [["$", "$"], ["\\(", "\\)"]], -# "displayMath": [["$$", "$$"]], -# "processEscapes": True, -# }, -# "options": {"ignoreHtmlClass": "document", "processHtmlClass": "math|output_area"} -# } - # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: -# source_suffix = [".rst", ".md"] # List of patterns, relative to source directory, that match files and @@ -102,14 +65,17 @@ # Allowing docstring in both __init__ and right under class definition autoclass_content = "both" - # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# html_theme = "sphinx_book_theme" +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. @@ -124,46 +90,34 @@ "use_download_button": False, } -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { # type: ignore - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', +# -- Options for Sphinx autosummary ------------------------------------------ +autodoc_default_options = { + "members": True, + "member-order": "bysource", + "special-members": "__init__", + "undoc-members": True, + "exclude-members": "__weakref__", + "autosummary": True, + "show-inheritance": True, } +autodoc_typehints = "description" +# autosummary_generate = True +# autosummary_imported_members = True +# numpydoc_show_class_members = False -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ("index", "tnpy.tex", "tnpy Documentation", "Tan Tao-Lin", "manual"), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] +# -- Options for Mathjax ----------------------------------------------------- +# mathjax_path = "https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/node-main.min.js" +# mathjax2_config = { +# "tex": { +# "inlineMath": [["$", "$"], ["\\(", "\\)"]], +# "displayMath": [["$$", "$$"]], +# "processEscapes": True, +# }, +# "options": {"ignoreHtmlClass": "document", "processHtmlClass": "math|output_area"} +# } -# If false, no module index is generated. -# latex_domain_indices = True +# -- Link with documentation of external projects ---------------------------- +intersphinx_mapping = { + "numpy": ("https://numpy.org/doc/stable/", None), + "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), +} diff --git a/docs/source/notebooks/krylov.ipynb b/docs/source/notebooks/krylov.ipynb new file mode 100644 index 00000000..5487a753 --- /dev/null +++ b/docs/source/notebooks/krylov.ipynb @@ -0,0 +1,281 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "mat_size = 20\n", + "# elems drawn from normal dist\n", + "rand_mat = np.random.randn(mat_size, mat_size)\n", + "# symmetrize the matrix\n", + "ham = (rand_mat + rand_mat.T) / np.sqrt(2)\n", + "plt.matshow(ham)\n", + "plt.colorbar()" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "outputs": [], + "source": [ + "class Krylov:\n", + " def __init__(self, subspace_size: int, ham: np.ndarray, psi: np.ndarray):\n", + " self._subspace_size = subspace_size\n", + " self._ham = ham\n", + " self._psi = psi\n", + "\n", + " @property\n", + " def subspace_size(self) -> int:\n", + " return self._subspace_size\n", + "\n", + " @property\n", + " def ham(self) -> np.ndarray:\n", + " return self._ham\n", + "\n", + " @property\n", + " def psi(self) -> np.ndarray:\n", + " return self._psi\n", + "\n", + " def gen_krylov_subspace(self) -> np.ndarray:\n", + " return np.array(\n", + " [\n", + " np.linalg.matrix_power(self.ham, n) @ self.psi\n", + " for n in range(self.subspace_size)\n", + " ]\n", + " ).T\n", + "\n", + " def subspace_projector(self) -> np.ndarray:\n", + " q, _ = np.linalg.qr(self.gen_krylov_subspace())\n", + " return q" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 117, + "outputs": [], + "source": [ + "psi = np.random.randn(mat_size)\n", + "psi /= np.linalg.norm(psi)" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 118, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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ouzs7JBdB3MSABACN998s44cOaLCwkK53W6NGjVKpaWl/snsgwcPKiYm8Hv6nj179M477+iNN95oU19sbKw++OADrVu3TnV1dUpLS9OkSZO0fPnykO6VcBhGlN7/FoDteDweJSUl6ePdfdWrl7UDISdO+HTF0FrV19cHTFx3dQw3AQBMMdwEwHa8xleH1W1GIzIJAIApMgkAthPsktTOajMakUkAAEwRJAAAphhuAmA7PjnklcPyNqMRmQQAwBSZBADb8RlfHVa3GY3IJAAApggSAABTtg8SxcXFGjBggBISEpSRkaEdO3aEu0tBKSoq0re+9S316tVLffv21bRp07Rnz55wd+u8PPTQQ3I4HFqwYEG4uxK0L774Qrfeequ+8Y1vKDExUcOHD9f7778f7m4Fxev1avHixRo4cKASExM1ePBgLV++XF3pNm3ev05cW31EI1sHieeff14FBQVasmSJdu3apZEjRyo7O1u1tbXh7lq7bdu2TfPnz9d7772nLVu2qLW1VZMmTVJjY2O4u9YhO3fu1K9+9SuNGDEi3F0J2l/+8hddc8016t69u/7nf/5Hf/rTn/TLX/5SF154Ybi7FpQVK1bo8ccf12OPPabdu3drxYoVWrlypR599NFwdw02ZOu7wGZkZOhb3/qWHnvsMUlfPdQjPT1dP/nJT7Rw4cIw965jjhw5or59+2rbtm36zne+E+7uBKWhoUFXXXWV/uM//kP333+/Ro0apdWrV4e7W+22cOFC/f73v9f//u//hrsr5+Uf/uEflJqaqqeeesp/bvr06UpMTNSzzz4bxp6dv9N3gX334366wOK7wDac8Gn8FYe5C6xdtLS0qLKyUllZWf5zMTExysrKUnl5eRh7dn7q6+slSb179w5zT4I3f/58TZkyJeD/iZ28/PLLGjt2rG688Ub17dtXo0eP1pNPPhnubgVt/PjxKisr05///GdJ0h//+Ee98847mjx5cph7Bjuy7RLYo0ePyuv1+h/gcVpqaqo++eSTMPXq/Ph8Pi1YsEDXXHONrrzyynB3JyibNm3Srl27tHPnznB3pcP+7//+T48//rgKCgr085//XDt37tQdd9yhuLg4zZ49O9zda7eFCxfK4/Ho8ssvV2xsrLxerx544AHNnDkz3F2DDdk2SHRF8+fP10cffaR33nkn3F0JSnV1tX76059qy5Yt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ycn+ACFJWVlZiomJUUVFxVk/u2HDBvXp00dXXnmlFi1apJMnTwbUO3z4cKWmpvrPZWdny+Px6OOPP253/8gkANhOODfTpaenB5xfsmSJli5d2uF63W63+vbtG3CuW7du6t27t9xut+nn/umf/kn9+/dXWlqaPvjgA917773as2ePXnzxRX+9fx8gJPlfn63eryNIAEAQqqur5XQ6/a/j4+PPWG7hwoVasWLFWevavXt3h/sxb948/7+HDx+ufv36aeLEifr00081ePDgDtf7dQQJAAiC0+kMCBJm7rzzTs2ZM+esZQYNGiSXy6Xa2tqA86dOndLx48dN5xvOJCMjQ5K0b98+DR48WC6XSzt27AgoU1NTI0lB1UuQAGA/Npi4TklJUUpKyjnLZWZmqq6uTpWVlRozZowk6a233pLP5/P/4W+PqqoqSVK/fv389T7wwAOqra31D2dt2bJFTqdTw4YNa3e9QU9cb9++XTfccIPS0tLkcDi0efPmgPfnzJnTZu1uTk5OsM0AQFQYOnSocnJylJeXpx07duj3v/+98vPzNWPGDP/Kpi+++EKXX365PzP49NNPtXz5clVWVurAgQN6+eWXNWvWLH3nO9/RiBEjJEmTJk3SsGHD9M///M/64x//qNdff1333Xef5s+fbzpEdiZBB4nGxkaNHDlSxcXFpmVycnJ0+PBh//Hcc88F2wwAnFVX2UgnfbVK6fLLL9fEiRN1/fXX69prr9UTTzzhf7+1tVV79uzxr16Ki4vTm2++qUmTJunyyy/XnXfeqenTp+uVV17xfyY2Nla/+93vFBsbq8zMTN16662aNWtWwL6K9gh6uGny5MmaPHnyWcvEx8cHNeYFANGsd+/eZ904N2DAABl/94zt9PR0bdu27Zz19u/fX6+99tp59S0k+yS2bt2qvn376rLLLtNtt92mY8eOmZZtbm5us+4YABAZOj1I5OTkaP369SorK9OKFSu0bds2TZ48WV6v94zli4qKlJSU5D++vgYZANowjPAcUajTVzfNmDHD/+/hw4drxIgRGjx4sLZu3aqJEye2Kb9o0SIVFBT4X3s8HgIFAESIkN+WY9CgQerTp4/27dt3xvfj4+P9647bu/4YQHTraneBjWQhDxKff/65jh075l+7CwCwj6CHmxoaGgKygv3796uqqkq9e/dW79699Ytf/ELTp0+X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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "krylov = Krylov(subspace_size=10, ham=ham, psi=np.random.randn(mat_size))\n", + "span = krylov.gen_krylov_subspace()\n", + "plt.matshow(span)\n", + "plt.colorbar()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 119, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "q = krylov.subspace_projector()\n", + "plt.matshow(q)\n", + "plt.colorbar()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 120, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(q.T @ ham @ q)\n", + "plt.colorbar()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 113, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tnpy.model.transverse_ising import TransverseIsing\n", + "from tnpy.operators import FullHamiltonian\n", + "\n", + "model = TransverseIsing(n=5, j=1, h=0.1)\n", + "ham = FullHamiltonian(model.mpo).matrix\n", + "\n", + "plt.matshow(ham)\n", + "plt.colorbar()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 115, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psi = np.random.randn(len(ham))\n", + "psi /= np.linalg.norm(psi)\n", + "\n", + "krylov = Krylov(subspace_size=10, ham=ham, psi=psi)\n", + "q = krylov.subspace_projector()\n", + "plt.matshow(q.T @ ham @ q)\n", + "plt.colorbar()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..4af64d5b --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3625 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +category = "dev" +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 = "argcomplete" +version = "2.0.0" +description = "Bash tab completion for argparse" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"}, + {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"}, +] + +[package.extras] +test = ["coverage", "flake8", "pexpect", "wheel"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" + +[[package]] +name = "asttokens" +version = "2.2.1" +description = "Annotate AST trees with source code positions" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, + {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, +] + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] + +[[package]] +name = "autoray" +version = "0.6.0" +description = "Write backend agnostic numeric code compatible with any numpy-ish array library." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "autoray-0.6.0-py3-none-any.whl", hash = "sha256:e4b0e40f3145f843da6971635aab892da41a7a1baffd06ef2df53caa1eb7f8cc"}, + {file = "autoray-0.6.0.tar.gz", hash = "sha256:ba3f30812549209bbba9d4976528f3f84bf84c22374699fd2e6aa84bf496d295"}, +] + +[package.extras] +tests = ["coverage", "numpy", "pytest", "pytest-cov"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "dev" +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 = "bandit" +version = "1.7.4" +description = "Security oriented static analyser for python code." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, + {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +stevedore = ">=1.20.0" + +[package.extras] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] +toml = ["toml"] +yaml = ["PyYAML"] + +[[package]] +name = "beautifulsoup4" +version = "4.11.2" +description = "Screen-scraping library" +category = "dev" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, + {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "binaryornot" +version = "0.4.4" +description = "Ultra-lightweight pure Python package to check if a file is binary or text." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"}, + {file = "binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061"}, +] + +[package.dependencies] +chardet = ">=3.0.2" + +[[package]] +name = "black" +version = "23.1.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, + {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, + {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, + {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, + {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, + {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, + {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, + {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, + {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, + {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, + {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, + {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, + {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, + {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[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.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "certifi" +version = "2022.12.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "dev" +optional = false +python-versions = "*" +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"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "chardet" +version = "5.1.0" +description = "Universal encoding detector for Python 3" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, + {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, +] + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +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 = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "commitizen" +version = "2.42.1" +description = "Python commitizen client tool" +category = "dev" +optional = false +python-versions = ">=3.6.2,<4.0.0" +files = [ + {file = "commitizen-2.42.1-py3-none-any.whl", hash = "sha256:fad7d37cfae361a859b713d4ac591859d5ca03137dd52de4e1bd208f7f45d5dc"}, + {file = "commitizen-2.42.1.tar.gz", hash = "sha256:eac18c7c65587061aac6829534907aeb208405b8230bfd35ec08503c228a7f17"}, +] + +[package.dependencies] +argcomplete = ">=1.12.1,<2.1" +charset-normalizer = ">=2.1.0,<3.0.0" +colorama = ">=0.4.1,<0.5.0" +decli = ">=0.5.2,<0.6.0" +jinja2 = ">=2.10.3" +packaging = ">=19" +pyyaml = ">=3.08" +questionary = ">=1.4.0,<2.0.0" +termcolor = {version = ">=1.1,<3", markers = "python_version >= \"3.7\""} +tomlkit = ">=0.5.3,<1.0.0" +typing-extensions = ">=4.0.1,<5.0.0" + +[[package]] +name = "contourpy" +version = "1.0.7" +description = "Python library for calculating contours of 2D quadrilateral grids" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, + {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, + {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, + {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, + {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, + {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, + {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, + {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, + {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, + {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, + {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, + {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, +] + +[package.dependencies] +numpy = ">=1.16" + +[package.extras] +bokeh = ["bokeh", "chromedriver", "selenium"] +docs = ["furo", "sphinx-copybutton"] +mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] +test = ["Pillow", "matplotlib", "pytest"] +test-no-images = ["pytest"] + +[[package]] +name = "cookiecutter" +version = "2.1.1" +description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cookiecutter-2.1.1-py2.py3-none-any.whl", hash = "sha256:9f3ab027cec4f70916e28f03470bdb41e637a3ad354b4d65c765d93aad160022"}, + {file = "cookiecutter-2.1.1.tar.gz", hash = "sha256:f3982be8d9c53dac1261864013fdec7f83afd2e42ede6f6dd069c5e149c540d5"}, +] + +[package.dependencies] +binaryornot = ">=0.4.4" +click = ">=7.0,<9.0.0" +Jinja2 = ">=2.7,<4.0.0" +jinja2-time = ">=0.2.0" +python-slugify = ">=4.0.0" +pyyaml = ">=5.3.1" +requests = ">=2.23.0" + +[[package]] +name = "coverage" +version = "7.2.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"}, + {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cca7c0b7f5881dfe0291ef09ba7bb1582cb92ab0aeffd8afb00c700bf692415a"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2167d116309f564af56f9aa5e75ef710ef871c5f9b313a83050035097b56820"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cb5f152fb14857cbe7f3e8c9a5d98979c4c66319a33cad6e617f0067c9accdc4"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:87dc37f16fb5e3a28429e094145bf7c1753e32bb50f662722e378c5851f7fdc6"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e191a63a05851f8bce77bc875e75457f9b01d42843f8bd7feed2fc26bbe60833"}, + {file = "coverage-7.2.1-cp310-cp310-win32.whl", hash = "sha256:e3ea04b23b114572b98a88c85379e9e9ae031272ba1fb9b532aa934c621626d4"}, + {file = "coverage-7.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:0cf557827be7eca1c38a2480484d706693e7bb1929e129785fe59ec155a59de6"}, + {file = "coverage-7.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570c21a29493b350f591a4b04c158ce1601e8d18bdcd21db136fbb135d75efa6"}, + {file = "coverage-7.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e872b082b32065ac2834149dc0adc2a2e6d8203080501e1e3c3c77851b466f9"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac6343bae03b176e9b58104a9810df3cdccd5cfed19f99adfa807ffbf43cf9b"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abacd0a738e71b20e224861bc87e819ef46fedba2fb01bc1af83dfd122e9c319"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9256d4c60c4bbfec92721b51579c50f9e5062c21c12bec56b55292464873508"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80559eaf6c15ce3da10edb7977a1548b393db36cbc6cf417633eca05d84dd1ed"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0bd7e628f6c3ec4e7d2d24ec0e50aae4e5ae95ea644e849d92ae4805650b4c4e"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09643fb0df8e29f7417adc3f40aaf379d071ee8f0350ab290517c7004f05360b"}, + {file = "coverage-7.2.1-cp311-cp311-win32.whl", hash = "sha256:1b7fb13850ecb29b62a447ac3516c777b0e7a09ecb0f4bb6718a8654c87dfc80"}, + {file = "coverage-7.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:617a94ada56bbfe547aa8d1b1a2b8299e2ec1ba14aac1d4b26a9f7d6158e1273"}, + {file = "coverage-7.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8649371570551d2fd7dee22cfbf0b61f1747cdfb2b7587bb551e4beaaa44cb97"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d2b9b5e70a21474c105a133ba227c61bc95f2ac3b66861143ce39a5ea4b3f84"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82c988954722fa07ec5045c57b6d55bc1a0890defb57cf4a712ced65b26ddd"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861cc85dfbf55a7a768443d90a07e0ac5207704a9f97a8eb753292a7fcbdfcfc"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0339dc3237c0d31c3b574f19c57985fcbe494280153bbcad33f2cdf469f4ac3e"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5928b85416a388dd557ddc006425b0c37e8468bd1c3dc118c1a3de42f59e2a54"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d3843ca645f62c426c3d272902b9de90558e9886f15ddf5efe757b12dd376f5"}, + {file = "coverage-7.2.1-cp37-cp37m-win32.whl", hash = "sha256:6a034480e9ebd4e83d1aa0453fd78986414b5d237aea89a8fdc35d330aa13bae"}, + {file = "coverage-7.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6fce673f79a0e017a4dc35e18dc7bb90bf6d307c67a11ad5e61ca8d42b87cbff"}, + {file = "coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f099da6958ddfa2ed84bddea7515cb248583292e16bb9231d151cd528eab657"}, + {file = "coverage-7.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97a3189e019d27e914ecf5c5247ea9f13261d22c3bb0cfcfd2a9b179bb36f8b1"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a81dbcf6c6c877986083d00b834ac1e84b375220207a059ad45d12f6e518a4e3"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2c3dde4c0b9be4b02067185136b7ee4681978228ad5ec1278fa74f5ca3e99"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a209d512d157379cc9ab697cbdbb4cfd18daa3e7eebaa84c3d20b6af0037384"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f3d07edb912a978915576a776756069dede66d012baa503022d3a0adba1b6afa"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8dca3c1706670297851bca1acff9618455122246bdae623be31eca744ade05ec"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1991a6d64231a3e5bbe3099fb0dd7c9aeaa4275ad0e0aeff4cb9ef885c62ba2"}, + {file = "coverage-7.2.1-cp38-cp38-win32.whl", hash = "sha256:22c308bc508372576ffa3d2dbc4824bb70d28eeb4fcd79d4d1aed663a06630d0"}, + {file = "coverage-7.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0c0d46de5dd97f6c2d1b560bf0fcf0215658097b604f1840365296302a9d1fb"}, + {file = "coverage-7.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4dd34a935de268a133e4741827ae951283a28c0125ddcdbcbba41c4b98f2dfef"}, + {file = "coverage-7.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f8318ed0f3c376cfad8d3520f496946977abde080439d6689d7799791457454"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:834c2172edff5a08d78e2f53cf5e7164aacabeb66b369f76e7bb367ca4e2d993"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d70c853f0546855f027890b77854508bdb4d6a81242a9d804482e667fff6e6"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6450da4c7afc4534305b2b7d8650131e130610cea448ff240b6ab73d7eab63"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99f4dd81b2bb8fc67c3da68b1f5ee1650aca06faa585cbc6818dbf67893c6d58"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bdd3f2f285ddcf2e75174248b2406189261a79e7fedee2ceeadc76219b6faa0e"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f29351393eb05e6326f044a7b45ed8e38cb4dcc38570d12791f271399dc41431"}, + {file = "coverage-7.2.1-cp39-cp39-win32.whl", hash = "sha256:e2b50ebc2b6121edf352336d503357321b9d8738bb7a72d06fc56153fd3f4cd8"}, + {file = "coverage-7.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd5a12239c0006252244f94863f1c518ac256160cd316ea5c47fb1a11b25889a"}, + {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"}, + {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cruft" +version = "2.12.0" +description = "Allows you to maintain all the necessary cruft for packaging and building projects separate from the code you intentionally write. Built on-top of CookieCutter." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cruft-2.12.0-py3-none-any.whl", hash = "sha256:29c46b34e518412c905bc41eb9812d122e7f2ca0173b584df85b05929adfc1be"}, + {file = "cruft-2.12.0.tar.gz", hash = "sha256:57455d33a60684c945d501dcea2b1c57dc0fb200a0090f07c83da1603382cbb1"}, +] + +[package.dependencies] +click = ">=7.1.2" +cookiecutter = ">=1.7" +gitpython = ">=3.0" +typer = ">=0.4.0" + +[package.extras] +pyproject = ["toml (>=0.10)"] + +[[package]] +name = "cycler" +version = "0.11.0" +description = "Composable style cycles" +category = "main" +optional = true +python-versions = ">=3.6" +files = [ + {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, + {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +] + +[[package]] +name = "cytoolz" +version = "0.12.1" +description = "Cython implementation of Toolz: High performance functional utilities" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "cytoolz-0.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a"}, + {file = "cytoolz-0.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f"}, + {file = "cytoolz-0.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc"}, + {file = "cytoolz-0.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8"}, + {file = "cytoolz-0.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1"}, + {file = "cytoolz-0.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44"}, + {file = "cytoolz-0.12.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a"}, + {file = "cytoolz-0.12.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f"}, + {file = "cytoolz-0.12.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7"}, + {file = "cytoolz-0.12.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7"}, + {file = "cytoolz-0.12.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47"}, + {file = "cytoolz-0.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1"}, + {file = "cytoolz-0.12.1-cp310-cp310-win32.whl", hash = "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe"}, + {file = "cytoolz-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386"}, + {file = "cytoolz-0.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72"}, + {file = "cytoolz-0.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed"}, + {file = "cytoolz-0.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac"}, + {file = "cytoolz-0.12.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe"}, + {file = "cytoolz-0.12.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0"}, + {file = "cytoolz-0.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845"}, + {file = "cytoolz-0.12.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133"}, + {file = "cytoolz-0.12.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961"}, + {file = "cytoolz-0.12.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38"}, + {file = "cytoolz-0.12.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8"}, + {file = "cytoolz-0.12.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377"}, + {file = "cytoolz-0.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9"}, + {file = "cytoolz-0.12.1-cp311-cp311-win32.whl", hash = "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad"}, + {file = "cytoolz-0.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3"}, + {file = "cytoolz-0.12.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c"}, + {file = "cytoolz-0.12.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45"}, + {file = "cytoolz-0.12.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544"}, + {file = "cytoolz-0.12.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f"}, + {file = "cytoolz-0.12.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d"}, + {file = "cytoolz-0.12.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5"}, + {file = "cytoolz-0.12.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8"}, + {file = "cytoolz-0.12.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac"}, + {file = "cytoolz-0.12.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26"}, + {file = "cytoolz-0.12.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f"}, + {file = "cytoolz-0.12.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b"}, + {file = "cytoolz-0.12.1-cp36-cp36m-win32.whl", hash = "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607"}, + {file = "cytoolz-0.12.1-cp36-cp36m-win_amd64.whl", hash = "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b"}, + {file = "cytoolz-0.12.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d"}, + {file = "cytoolz-0.12.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5"}, + {file = "cytoolz-0.12.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae"}, + {file = "cytoolz-0.12.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac"}, + {file = "cytoolz-0.12.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c"}, + {file = "cytoolz-0.12.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef"}, + {file = "cytoolz-0.12.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d"}, + {file = "cytoolz-0.12.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1"}, + {file = "cytoolz-0.12.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a"}, + {file = "cytoolz-0.12.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d"}, + {file = "cytoolz-0.12.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb"}, + {file = "cytoolz-0.12.1-cp37-cp37m-win32.whl", hash = "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2"}, + {file = "cytoolz-0.12.1-cp37-cp37m-win_amd64.whl", hash = "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6"}, + {file = "cytoolz-0.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6"}, + {file = "cytoolz-0.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0"}, + {file = "cytoolz-0.12.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5"}, + {file = "cytoolz-0.12.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7"}, + {file = "cytoolz-0.12.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8"}, + {file = "cytoolz-0.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a"}, + {file = "cytoolz-0.12.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c"}, + {file = "cytoolz-0.12.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6"}, + {file = "cytoolz-0.12.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b"}, + {file = "cytoolz-0.12.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd"}, + {file = "cytoolz-0.12.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da"}, + {file = "cytoolz-0.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb"}, + {file = "cytoolz-0.12.1-cp38-cp38-win32.whl", hash = "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad"}, + {file = "cytoolz-0.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd"}, + {file = "cytoolz-0.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0"}, + {file = "cytoolz-0.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406"}, + {file = "cytoolz-0.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61"}, + {file = "cytoolz-0.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a"}, + {file = "cytoolz-0.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c"}, + {file = "cytoolz-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195"}, + {file = "cytoolz-0.12.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220"}, + {file = "cytoolz-0.12.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9"}, + {file = "cytoolz-0.12.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907"}, + {file = "cytoolz-0.12.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7"}, + {file = "cytoolz-0.12.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129"}, + {file = "cytoolz-0.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5"}, + {file = "cytoolz-0.12.1-cp39-cp39-win32.whl", hash = "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a"}, + {file = "cytoolz-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703"}, + {file = "cytoolz-0.12.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5"}, + {file = "cytoolz-0.12.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb"}, + {file = "cytoolz-0.12.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3"}, + {file = "cytoolz-0.12.1-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b"}, + {file = "cytoolz-0.12.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051"}, + {file = "cytoolz-0.12.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0"}, + {file = "cytoolz-0.12.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e"}, + {file = "cytoolz-0.12.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c"}, + {file = "cytoolz-0.12.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311"}, + {file = "cytoolz-0.12.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8"}, + {file = "cytoolz-0.12.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b"}, + {file = "cytoolz-0.12.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd"}, + {file = "cytoolz-0.12.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11"}, + {file = "cytoolz-0.12.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995"}, + {file = "cytoolz-0.12.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463"}, + {file = "cytoolz-0.12.1.tar.gz", hash = "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e"}, +] + +[package.dependencies] +toolz = ">=0.8.0" + +[package.extras] +cython = ["cython"] + +[[package]] +name = "decli" +version = "0.5.2" +description = "Minimal, easy-to-use, declarative cli tool" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "decli-0.5.2-py3-none-any.whl", hash = "sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0"}, + {file = "decli-0.5.2.tar.gz", hash = "sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "dev" +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" +category = "dev" +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 = "distlib" +version = "0.3.6" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] + +[[package]] +name = "dparse" +version = "0.6.2" +description = "A parser for Python dependency files" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "dparse-0.6.2-py3-none-any.whl", hash = "sha256:8097076f1dd26c377f30d4745e6ec18fef42f3bf493933b842ac5bafad8c345f"}, + {file = "dparse-0.6.2.tar.gz", hash = "sha256:d45255bda21f998bc7ddf2afd5e62505ba6134756ba2d42a84c56b0826614dfe"}, +] + +[package.dependencies] +packaging = "*" +toml = "*" + +[package.extras] +conda = ["pyyaml"] +pipenv = ["pipenv"] + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.0" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "executing" +version = "1.2.0" +description = "Get the currently executing AST node of a frame, and other information" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, + {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, +] + +[package.extras] +tests = ["asttokens", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastjsonschema" +version = "2.16.3" +description = "Fastest Python implementation of JSON schema" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, + {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.9.0" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, + {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, +] + +[package.extras] +docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flake8" +version = "6.0.0" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, + {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.10.0,<2.11.0" +pyflakes = ">=3.0.0,<3.1.0" + +[[package]] +name = "flake8-bugbear" +version = "23.2.13" +description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "flake8-bugbear-23.2.13.tar.gz", hash = "sha256:39259814a83f33c8409417ee12dd4050c9c0bb4c8707c12fc18ae62b2f3ddee1"}, + {file = "flake8_bugbear-23.2.13-py3-none-any.whl", hash = "sha256:f136bd0ca2684f101168bba2310dec541e11aa6b252260c17dcf58d18069a740"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +flake8 = ">=3.0.0" + +[package.extras] +dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"] + +[[package]] +name = "flake8-pyproject" +version = "1.2.2" +description = "Flake8 plug-in loading the configuration from pyproject.toml" +category = "dev" +optional = false +python-versions = ">= 3.6" +files = [ + {file = "flake8_pyproject-1.2.2-py3-none-any.whl", hash = "sha256:52d412219e7db6227faa654675b1435947b11d49b453f3eced760f19bdd6f06a"}, +] + +[package.dependencies] +Flake8 = ">=5" +TOMLi = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["pyTest", "pyTest-cov"] + +[[package]] +name = "fonttools" +version = "4.38.0" +description = "Tools to manipulate font files" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, + {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=14.0.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "future" +version = "0.18.3" +description = "Clean single-source support for Python 3 and 2" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +category = "dev" +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"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[[package]] +name = "graphviz" +version = "0.20.1" +description = "Simple Python interface for Graphviz" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, + {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, +] + +[package.extras] +dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] +docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] + +[[package]] +name = "h5py" +version = "3.8.0" +description = "Read and write HDF5 files from Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h5py-3.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:533d7dad466ddb7e3b30af274b630eb7c1a6e4ddf01d1c373a0334dc2152110a"}, + {file = "h5py-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c873ba9fd4fa875ad62ce0e4891725e257a8fe7f5abdbc17e51a5d54819be55c"}, + {file = "h5py-3.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98a240cd4c1bfd568aaa52ec42d263131a2582dab82d74d3d42a0d954cac12be"}, + {file = "h5py-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3389b63222b1c7a158bb7fe69d11ca00066740ec5574596d47a2fe5317f563a"}, + {file = "h5py-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:7f3350fc0a8407d668b13247861c2acd23f7f5fe7d060a3ad9b0820f5fcbcae0"}, + {file = "h5py-3.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db03e3f2c716205fbdabb34d0848459840585225eb97b4f08998c743821ca323"}, + {file = "h5py-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36761693efbe53df179627a775476dcbc37727d6e920958277a7efbc18f1fb73"}, + {file = "h5py-3.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a506fc223def428f4329e7e1f9fe1c8c593eab226e7c0942c8d75308ad49950"}, + {file = "h5py-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33b15aae79e9147aebe1d0e54099cbcde8d65e3e227cd5b59e49b1272aa0e09d"}, + {file = "h5py-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f6f6ffadd6bfa9b2c5b334805eb4b19ca0a5620433659d8f7fb86692c40a359"}, + {file = "h5py-3.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8f55d9c6c84d7d09c79fb85979e97b81ec6071cc776a97eb6b96f8f6ec767323"}, + {file = "h5py-3.8.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b685453e538b2b5934c58a644ac3f3b3d0cec1a01b6fb26d57388e9f9b674ad0"}, + {file = "h5py-3.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:377865821fe80ad984d003723d6f8890bd54ceeb5981b43c0313b9df95411b30"}, + {file = "h5py-3.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0fef76e10b9216657fa37e7edff6d8be0709b25bd5066474c229b56cf0098df9"}, + {file = "h5py-3.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ffc344ec9984d2cd3ca0265007299a8bac8d85c1ad48f4639d8d3aed2af171"}, + {file = "h5py-3.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bacaa1c16810dd2b3e4417f8e730971b7c4d53d234de61fe4a918db78e80e1e4"}, + {file = "h5py-3.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae730580ae928de409d63cbe4fdca4c82c3ad2bed30511d19d34e995d63c77e"}, + {file = "h5py-3.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47f757d1b76f0ecb8aa0508ec8d1b390df67a8b67ee2515dc1b046f3a1596ea"}, + {file = "h5py-3.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f891b17e3a3e974e93f9e34e7cca9f530806543571ce078998676a555837d91d"}, + {file = "h5py-3.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:290e00fa2de74a10688d1bac98d5a9cdd43f14f58e562c580b5b3dfbd358ecae"}, + {file = "h5py-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:03890b1c123d024fb0239a3279737d5432498c1901c354f8b10d8221d1d16235"}, + {file = "h5py-3.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7865de06779b14d98068da387333ad9bf2756b5b579cc887fac169bc08f87c3"}, + {file = "h5py-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49bc857635f935fa30e92e61ac1e87496df8f260a6945a3235e43a9890426866"}, + {file = "h5py-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:5fd2252d1fc364ba0e93dd0b7089f4906b66805cb4e6aca7fa8874ac08649647"}, + {file = "h5py-3.8.0.tar.gz", hash = "sha256:6fead82f0c4000cf38d53f9c030780d81bfa0220218aee13b90b7701c937d95f"}, +] + +[package.dependencies] +numpy = ">=1.14.5" + +[[package]] +name = "identify" +version = "2.5.18" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, + {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.0.0" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] + +[[package]] +name = "importlib-resources" +version = "5.12.0" +description = "Read resources from Python packages" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "intel-openmp" +version = "2023.0.0" +description = "Intel® OpenMP* Runtime Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "intel_openmp-2023.0.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:77131c2cda75ace2060f6e9cdcc9f9c672ec838c4602fc544ce0858cfe8f416e"}, + {file = "intel_openmp-2023.0.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:adfb32b0dde6b3a95ced62608b05a45a7cfad928054136ddbfe0563e16cbf33c"}, + {file = "intel_openmp-2023.0.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:1ebce47df0b5ddad77992a70689fd3185df25f47cf901dd8384fd6d05a974f81"}, +] + +[[package]] +name = "ipython" +version = "8.11.0" +description = "IPython: Productive Interactive Computing" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipython-8.11.0-py3-none-any.whl", hash = "sha256:5b54478e459155a326bf5f42ee4f29df76258c0279c36f21d71ddb560f88b156"}, + {file = "ipython-8.11.0.tar.gz", hash = "sha256:735cede4099dbc903ee540307b9171fbfef4aa75cfcacc5a273b2cda2f02be04"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +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", "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", "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 = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +category = "dev" +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 = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] + +[package.dependencies] +parso = ">=0.8.0,<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 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jinja2-time" +version = "0.2.0" +description = "Jinja2 Extension for Dates and Times" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jinja2-time-0.2.0.tar.gz", hash = "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40"}, + {file = "jinja2_time-0.2.0-py2.py3-none-any.whl", hash = "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa"}, +] + +[package.dependencies] +arrow = "*" +jinja2 = "*" + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" + +[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 = "jupyter-client" +version = "8.0.3" +description = "Jupyter protocol implementation and client libraries" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.0.3-py3-none-any.whl", hash = "sha256:be48ac6bd659cbbddb7a674cf06b3b8afbf53f228253cf58bde604c03bd487b0"}, + {file = "jupyter_client-8.0.3.tar.gz", hash = "sha256:ed65498bea6d876ef9d8da3e0db3dd33c5d129f5b2645f56ae03993782966bd0"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +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 = ["codecov", "coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.2.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.2.0-py3-none-any.whl", hash = "sha256:4bdc2928c37f6917130c667d8b8708f20aee539d8283c6be72aabd2a4b4c83b0"}, + {file = "jupyter_core-5.2.0.tar.gz", hash = "sha256:1407cdb4c79ee467696c04b76633fc1884015fa109323365a6372c8e890cc83f"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=1.0", 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 = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +category = "dev" +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 = "kiwisolver" +version = "1.4.4" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = true +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"}, +] + +[[package]] +name = "llvmlite" +version = "0.39.1" +description = "lightweight wrapper around basic LLVM functionality" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "llvmlite-0.39.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6717c7a6e93c9d2c3d07c07113ec80ae24af45cde536b34363d4bcd9188091d9"}, + {file = "llvmlite-0.39.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ddab526c5a2c4ccb8c9ec4821fcea7606933dc53f510e2a6eebb45a418d3488a"}, + {file = "llvmlite-0.39.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3f331a323d0f0ada6b10d60182ef06c20a2f01be21699999d204c5750ffd0b4"}, + {file = "llvmlite-0.39.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c00ff204afa721b0bb9835b5bf1ba7fba210eefcec5552a9e05a63219ba0dc"}, + {file = "llvmlite-0.39.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16f56eb1eec3cda3a5c526bc3f63594fc24e0c8d219375afeb336f289764c6c7"}, + {file = "llvmlite-0.39.1-cp310-cp310-win32.whl", hash = "sha256:d0bfd18c324549c0fec2c5dc610fd024689de6f27c6cc67e4e24a07541d6e49b"}, + {file = "llvmlite-0.39.1-cp310-cp310-win_amd64.whl", hash = "sha256:7ebf1eb9badc2a397d4f6a6c8717447c81ac011db00064a00408bc83c923c0e4"}, + {file = "llvmlite-0.39.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6546bed4e02a1c3d53a22a0bced254b3b6894693318b16c16c8e43e29d6befb6"}, + {file = "llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1578f5000fdce513712e99543c50e93758a954297575610f48cb1fd71b27c08a"}, + {file = "llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3803f11ad5f6f6c3d2b545a303d68d9fabb1d50e06a8d6418e6fcd2d0df00959"}, + {file = "llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50aea09a2b933dab7c9df92361b1844ad3145bfb8dd2deb9cd8b8917d59306fb"}, + {file = "llvmlite-0.39.1-cp37-cp37m-win32.whl", hash = "sha256:b1a0bbdb274fb683f993198775b957d29a6f07b45d184c571ef2a721ce4388cf"}, + {file = "llvmlite-0.39.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e172c73fccf7d6db4bd6f7de963dedded900d1a5c6778733241d878ba613980e"}, + {file = "llvmlite-0.39.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e31f4b799d530255aaf0566e3da2df5bfc35d3cd9d6d5a3dcc251663656c27b1"}, + {file = "llvmlite-0.39.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:62c0ea22e0b9dffb020601bb65cb11dd967a095a488be73f07d8867f4e327ca5"}, + {file = "llvmlite-0.39.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ffc84ade195abd4abcf0bd3b827b9140ae9ef90999429b9ea84d5df69c9058c"}, + {file = "llvmlite-0.39.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0f158e4708dda6367d21cf15afc58de4ebce979c7a1aa2f6b977aae737e2a54"}, + {file = "llvmlite-0.39.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22d36591cd5d02038912321d9ab8e4668e53ae2211da5523f454e992b5e13c36"}, + {file = "llvmlite-0.39.1-cp38-cp38-win32.whl", hash = "sha256:4c6ebace910410daf0bebda09c1859504fc2f33d122e9a971c4c349c89cca630"}, + {file = "llvmlite-0.39.1-cp38-cp38-win_amd64.whl", hash = "sha256:fb62fc7016b592435d3e3a8f680e3ea8897c3c9e62e6e6cc58011e7a4801439e"}, + {file = "llvmlite-0.39.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa9b26939ae553bf30a9f5c4c754db0fb2d2677327f2511e674aa2f5df941789"}, + {file = "llvmlite-0.39.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e4f212c018db951da3e1dc25c2651abc688221934739721f2dad5ff1dd5f90e7"}, + {file = "llvmlite-0.39.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39dc2160aed36e989610fc403487f11b8764b6650017ff367e45384dff88ffbf"}, + {file = "llvmlite-0.39.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ec3d70b3e507515936e475d9811305f52d049281eaa6c8273448a61c9b5b7e2"}, + {file = "llvmlite-0.39.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60f8dd1e76f47b3dbdee4b38d9189f3e020d22a173c00f930b52131001d801f9"}, + {file = "llvmlite-0.39.1-cp39-cp39-win32.whl", hash = "sha256:03aee0ccd81735696474dc4f8b6be60774892a2929d6c05d093d17392c237f32"}, + {file = "llvmlite-0.39.1-cp39-cp39-win_amd64.whl", hash = "sha256:3fc14e757bc07a919221f0cbaacb512704ce5774d7fcada793f1996d6bc75f2a"}, + {file = "llvmlite-0.39.1.tar.gz", hash = "sha256:b43abd7c82e805261c425d50335be9a6c4f84264e34d6d6e475207300005d572"}, +] + +[[package]] +name = "lxml" +version = "4.9.2" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, + {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, + {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, + {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, + {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, + {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, + {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, + {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, + {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, + {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, + {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, + {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, + {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, + {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, + {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, + {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, + {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, + {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, + {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, + {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, + {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, + {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, + {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, + {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, + {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, + {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, + {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, + {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, + {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, + {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, + {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, + {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, + {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, + {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, + {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, + {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, + {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, + {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, + {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, + {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, + {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +name = "m2r2" +version = "0.3.2" +description = "Markdown and reStructuredText in a single file." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "m2r2-0.3.2-py3-none-any.whl", hash = "sha256:d3684086b61b4bebe2307f15189495360f05a123c9bda2a66462649b7ca236aa"}, + {file = "m2r2-0.3.2.tar.gz", hash = "sha256:ccd95b052dcd1ac7442ecb3111262b2001c10e4119b459c34c93ac7a5c2c7868"}, +] + +[package.dependencies] +docutils = "*" +mistune = "0.8.4" + +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] + +[[package]] +name = "matplotlib" +version = "3.7.0" +description = "Python plotting package" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "matplotlib-3.7.0-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:3da8b9618188346239e51f1ea6c0f8f05c6e218cfcc30b399dd7dd7f52e8bceb"}, + {file = "matplotlib-3.7.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c0592ba57217c22987b7322df10f75ef95bc44dce781692b4b7524085de66019"}, + {file = "matplotlib-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:21269450243d6928da81a9bed201f0909432a74e7d0d65db5545b9fa8a0d0223"}, + {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb2e76cd429058d8954121c334dddfcd11a6186c6975bca61f3f248c99031b05"}, + {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de20eb1247725a2f889173d391a6d9e7e0f2540feda24030748283108b0478ec"}, + {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5465735eaaafd1cfaec3fed60aee776aeb3fd3992aa2e49f4635339c931d443"}, + {file = "matplotlib-3.7.0-cp310-cp310-win32.whl", hash = "sha256:092e6abc80cdf8a95f7d1813e16c0e99ceda8d5b195a3ab859c680f3487b80a2"}, + {file = "matplotlib-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:4f640534ec2760e270801056bc0d8a10777c48b30966eef78a7c35d8590915ba"}, + {file = "matplotlib-3.7.0-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f336e7014889c38c59029ebacc35c59236a852e4b23836708cfd3f43d1eaeed5"}, + {file = "matplotlib-3.7.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a10428d4f8d1a478ceabd652e61a175b2fdeed4175ab48da4a7b8deb561e3fa"}, + {file = "matplotlib-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46ca923e980f76d34c1c633343a72bb042d6ba690ecc649aababf5317997171d"}, + {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c849aa94ff2a70fb71f318f48a61076d1205c6013b9d3885ade7f992093ac434"}, + {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:827e78239292e561cfb70abf356a9d7eaf5bf6a85c97877f254009f20b892f89"}, + {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:691ef1f15360e439886186d0db77b5345b24da12cbc4fc57b26c4826db4d6cab"}, + {file = "matplotlib-3.7.0-cp311-cp311-win32.whl", hash = "sha256:21a8aeac39b4a795e697265d800ce52ab59bdeb6bb23082e2d971f3041074f02"}, + {file = "matplotlib-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:01681566e95b9423021b49dea6a2395c16fa054604eacb87f0f4c439750f9114"}, + {file = "matplotlib-3.7.0-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:cf119eee4e57389fba5ac8b816934e95c256535e55f0b21628b4205737d1de85"}, + {file = "matplotlib-3.7.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:21bd4033c40b95abd5b8453f036ed5aa70856e56ecbd887705c37dce007a4c21"}, + {file = "matplotlib-3.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:111ef351f28fd823ed7177632070a6badd6f475607122bc9002a526f2502a0b5"}, + {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f91d35b3ef51d29d9c661069b9e4ba431ce283ffc533b981506889e144b5b40e"}, + {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a776462a4a63c0bfc9df106c15a0897aa2dbab6795c693aa366e8e283958854"}, + {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dfd4a0cbd151f6439e6d7f8dca5292839ca311e7e650596d073774847ca2e4f"}, + {file = "matplotlib-3.7.0-cp38-cp38-win32.whl", hash = "sha256:56b7b79488209041a9bf7ddc34f1b069274489ce69e34dc63ae241d0d6b4b736"}, + {file = "matplotlib-3.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:8665855f3919c80551f377bc16df618ceabf3ef65270bc14b60302dce88ca9ab"}, + {file = "matplotlib-3.7.0-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:f910d924da8b9fb066b5beae0b85e34ed1b6293014892baadcf2a51da1c65807"}, + {file = "matplotlib-3.7.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf6346644e8fe234dc847e6232145dac199a650d3d8025b3ef65107221584ba4"}, + {file = "matplotlib-3.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d1e52365d8d5af699f04581ca191112e1d1220a9ce4386b57d807124d8b55e6"}, + {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c869b646489c6a94375714032e5cec08e3aa8d3f7d4e8ef2b0fb50a52b317ce6"}, + {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4ddac5f59e78d04b20469bc43853a8e619bb6505c7eac8ffb343ff2c516d72f"}, + {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb0304c1cd802e9a25743414c887e8a7cd51d96c9ec96d388625d2cd1c137ae3"}, + {file = "matplotlib-3.7.0-cp39-cp39-win32.whl", hash = "sha256:a06a6c9822e80f323549c6bc9da96d4f233178212ad9a5f4ab87fd153077a507"}, + {file = "matplotlib-3.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb52aa97b92acdee090edfb65d1cb84ea60ab38e871ba8321a10bbcebc2a3540"}, + {file = "matplotlib-3.7.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3493b48e56468c39bd9c1532566dff3b8062952721b7521e1f394eb6791495f4"}, + {file = "matplotlib-3.7.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d0dcd1a0bf8d56551e8617d6dc3881d8a1c7fb37d14e5ec12cbb293f3e6170a"}, + {file = "matplotlib-3.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51fb664c37714cbaac69c16d6b3719f517a13c96c3f76f4caadd5a0aa7ed0329"}, + {file = "matplotlib-3.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4497d88c559b76da320b7759d64db442178beeea06a52dc0c629086982082dcd"}, + {file = "matplotlib-3.7.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9d85355c48ef8b9994293eb7c00f44aa8a43cad7a297fbf0770a25cdb2244b91"}, + {file = "matplotlib-3.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03eb2c8ff8d85da679b71e14c7c95d16d014c48e0c0bfa14db85f6cdc5c92aad"}, + {file = "matplotlib-3.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71b751d06b2ed1fd017de512d7439c0259822864ea16731522b251a27c0b2ede"}, + {file = "matplotlib-3.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b51ab8a5d5d3bbd4527af633a638325f492e09e45e78afdf816ef55217a09664"}, + {file = "matplotlib-3.7.0.tar.gz", hash = "sha256:8f6efd313430d7ef70a38a3276281cb2e8646b3a22b3b21eb227da20e15e6813"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.0.1" +numpy = ">=1.20" +packaging = ">=20.0" +pillow = ">=6.2.0" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +category = "dev" +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" +category = "dev" +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 = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] + +[[package]] +name = "mkl" +version = "2023.0.0" +description = "Intel® oneAPI Math Kernel Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "mkl-2023.0.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:e75ce244cd8ba36c497404fa166896f9042531a2f838ae83c75591c9af15589e"}, + {file = "mkl-2023.0.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:7c5c1f3aa4d129e0ae004e1f35d4e6bbdd0720715e5139b218b559c8901c7d97"}, + {file = "mkl-2023.0.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:9c9309dc7a394d935b50996772b35b95b4056c668e0deca5939de55b6e9995b4"}, +] + +[package.dependencies] +intel-openmp = ">=2023.0.0,<2024.0.0" +tbb = ">=2021.0.0,<2022.0.0" + +[[package]] +name = "mkl-devel" +version = "2023.0.0" +description = "Intel® oneAPI Math Kernel Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "mkl_devel-2023.0.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:365c1b05cb1acd741c4b09242664dc57e954b8b177c3ccf53347d550ed457b13"}, + {file = "mkl_devel-2023.0.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:4595efb5215f62abcb37f2e6476687024499b7992c7e8e3453b391ef2b6b11c7"}, + {file = "mkl_devel-2023.0.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:1f2fd9941e8d4f010fa7f3f237ea0da513429348d9cce2a32f424dcb53ffeef7"}, +] + +[package.dependencies] +mkl = "2023.0.0" +mkl-include = "2023.0.0" + +[[package]] +name = "mkl-include" +version = "2023.0.0" +description = "Intel® oneAPI Math Kernel Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "mkl_include-2023.0.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:b5645757a5fe4e8add2c9f2946556d03169ac9e6a2e3db2a92acbec837bfde0d"}, + {file = "mkl_include-2023.0.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:1f9514cec32ab1e467c7fc44674485622d9b151e91b9318e4d97249a28595671"}, + {file = "mkl_include-2023.0.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:14b0958dff799378975d83fbd00ce756645aa36b9f924bdfdb0fb031f72b734d"}, +] + +[[package]] +name = "mypy" +version = "1.0.1" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, + {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, + {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, + {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, + {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, + {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, + {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, + {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, + {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, + {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, + {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, + {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, + {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, + {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, + {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, + {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, + {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, + {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, + {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, +] + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclient" +version = "0.7.2" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"}, + {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +nbformat = ">=5.1" +traitlets = ">=5.3" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"] +test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "6.5.4" +description = "Converting Jupyter Notebooks" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbconvert-6.5.4-py3-none-any.whl", hash = "sha256:d679a947f849a966cbbd0bf6e7fedcfdb64be3b20ce7cef11ad55c13f5820e19"}, + {file = "nbconvert-6.5.4.tar.gz", hash = "sha256:9e3c7c6d491374cbdd5f35d268c05809357716d346f4573186bbeab32ee50bc1"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "*" +defusedxml = "*" +entrypoints = ">=0.2.2" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +lxml = "*" +MarkupSafe = ">=2.0" +mistune = ">=0.8.1,<2" +nbclient = ">=0.5.0" +nbformat = ">=5.1" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.0" + +[package.extras] +all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "tornado (>=6.1)"] +docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx (>=1.5.1)", "sphinx-rtd-theme"] +serve = ["tornado (>=6.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.7.3" +description = "The Jupyter Notebook format" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbformat-5.7.3-py3-none-any.whl", hash = "sha256:22a98a6516ca216002b0a34591af5bcb8072ca6c63910baffc901cfa07fefbf0"}, + {file = "nbformat-5.7.3.tar.gz", hash = "sha256:4b021fca24d3a747bf4e626694033d792d594705829e5e35b14ee3369f9f6477"}, +] + +[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 = "nbsphinx" +version = "0.8.12" +description = "Jupyter Notebook Tools for Sphinx" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "nbsphinx-0.8.12-py3-none-any.whl", hash = "sha256:c15b681c7fce287000856f91fe1edac50d29f7b0c15bbc746fbe55c8eb84750b"}, + {file = "nbsphinx-0.8.12.tar.gz", hash = "sha256:76570416cdecbeb21dbf5c3d6aa204ced6c1dd7ebef4077b5c21b8c6ece9533f"}, +] + +[package.dependencies] +docutils = "*" +jinja2 = "*" +nbconvert = "!=5.4" +nbformat = "*" +sphinx = ">=1.8" +traitlets = ">=5" + +[[package]] +name = "networkx" +version = "3.0" +description = "Python package for creating and manipulating graphs and networks" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "networkx-3.0-py3-none-any.whl", hash = "sha256:58058d66b1818043527244fab9d41a51fcd7dcc271748015f3c181b8a90c8e2e"}, + {file = "networkx-3.0.tar.gz", hash = "sha256:9a9992345353618ae98339c2b63d8201c381c2944f38a2ab49cb45a4c667e412"}, +] + +[package.extras] +default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] +developer = ["mypy (>=0.991)", "pre-commit (>=2.20)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (==5.2.3)", "sphinx-gallery (>=0.11)", "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)"] + +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "numba" +version = "0.56.4" +description = "compiling Python code using LLVM" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "numba-0.56.4-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9f62672145f8669ec08762895fe85f4cf0ead08ce3164667f2b94b2f62ab23c3"}, + {file = "numba-0.56.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c602d015478b7958408d788ba00a50272649c5186ea8baa6cf71d4a1c761bba1"}, + {file = "numba-0.56.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:85dbaed7a05ff96492b69a8900c5ba605551afb9b27774f7f10511095451137c"}, + {file = "numba-0.56.4-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f4cfc3a19d1e26448032049c79fc60331b104f694cf570a9e94f4e2c9d0932bb"}, + {file = "numba-0.56.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e08e203b163ace08bad500b0c16f6092b1eb34fd1fce4feaf31a67a3a5ecf3b"}, + {file = "numba-0.56.4-cp310-cp310-win32.whl", hash = "sha256:0611e6d3eebe4cb903f1a836ffdb2bda8d18482bcd0a0dcc56e79e2aa3fefef5"}, + {file = "numba-0.56.4-cp310-cp310-win_amd64.whl", hash = "sha256:fbfb45e7b297749029cb28694abf437a78695a100e7c2033983d69f0ba2698d4"}, + {file = "numba-0.56.4-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:3cb1a07a082a61df80a468f232e452d818f5ae254b40c26390054e4e868556e0"}, + {file = "numba-0.56.4-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d69ad934e13c15684e7887100a8f5f0f61d7a8e57e0fd29d9993210089a5b531"}, + {file = "numba-0.56.4-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:dbcc847bac2d225265d054993a7f910fda66e73d6662fe7156452cac0325b073"}, + {file = "numba-0.56.4-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8a95ca9cc77ea4571081f6594e08bd272b66060634b8324e99cd1843020364f9"}, + {file = "numba-0.56.4-cp37-cp37m-win32.whl", hash = "sha256:fcdf84ba3ed8124eb7234adfbb8792f311991cbf8aed1cad4b1b1a7ee08380c1"}, + {file = "numba-0.56.4-cp37-cp37m-win_amd64.whl", hash = "sha256:42f9e1be942b215df7e6cc9948cf9c15bb8170acc8286c063a9e57994ef82fd1"}, + {file = "numba-0.56.4-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:553da2ce74e8862e18a72a209ed3b6d2924403bdd0fb341fa891c6455545ba7c"}, + {file = "numba-0.56.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4373da9757049db7c90591e9ec55a2e97b2b36ba7ae3bf9c956a513374077470"}, + {file = "numba-0.56.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3a993349b90569518739009d8f4b523dfedd7e0049e6838c0e17435c3e70dcc4"}, + {file = "numba-0.56.4-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:720886b852a2d62619ae3900fe71f1852c62db4f287d0c275a60219e1643fc04"}, + {file = "numba-0.56.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e64d338b504c9394a4a34942df4627e1e6cb07396ee3b49fe7b8d6420aa5104f"}, + {file = "numba-0.56.4-cp38-cp38-win32.whl", hash = "sha256:03fe94cd31e96185cce2fae005334a8cc712fc2ba7756e52dff8c9400718173f"}, + {file = "numba-0.56.4-cp38-cp38-win_amd64.whl", hash = "sha256:91f021145a8081f881996818474ef737800bcc613ffb1e618a655725a0f9e246"}, + {file = "numba-0.56.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:d0ae9270a7a5cc0ede63cd234b4ff1ce166c7a749b91dbbf45e0000c56d3eade"}, + {file = "numba-0.56.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c75e8a5f810ce80a0cfad6e74ee94f9fde9b40c81312949bf356b7304ef20740"}, + {file = "numba-0.56.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a12ef323c0f2101529d455cfde7f4135eaa147bad17afe10b48634f796d96abd"}, + {file = "numba-0.56.4-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:03634579d10a6129181129de293dd6b5eaabee86881369d24d63f8fe352dd6cb"}, + {file = "numba-0.56.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0240f9026b015e336069329839208ebd70ec34ae5bfbf402e4fcc8e06197528e"}, + {file = "numba-0.56.4-cp39-cp39-win32.whl", hash = "sha256:14dbbabf6ffcd96ee2ac827389afa59a70ffa9f089576500434c34abf9b054a4"}, + {file = "numba-0.56.4-cp39-cp39-win_amd64.whl", hash = "sha256:0da583c532cd72feefd8e551435747e0e0fbb3c0530357e6845fcc11e38d6aea"}, + {file = "numba-0.56.4.tar.gz", hash = "sha256:32d9fef412c81483d7efe0ceb6cf4d3310fde8b624a9cecca00f790573ac96ee"}, +] + +[package.dependencies] +llvmlite = ">=0.39.0dev0,<0.40" +numpy = ">=1.18,<1.24" +setuptools = "*" + +[[package]] +name = "numpy" +version = "1.23.5" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"}, + {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"}, + {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"}, + {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"}, + {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"}, + {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"}, + {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"}, + {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"}, + {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"}, + {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"}, + {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"}, + {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"}, + {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"}, + {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"}, + {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"}, + {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"}, + {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"}, + {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"}, + {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"}, + {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"}, + {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"}, + {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"}, + {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"}, + {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"}, + {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"}, +] + +[[package]] +name = "opt-einsum" +version = "3.3.0" +description = "Optimizing numpys einsum function" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, + {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, +] + +[package.dependencies] +numpy = ">=1.7" + +[package.extras] +docs = ["numpydoc", "sphinx (==1.2.3)", "sphinx-rtd-theme", "sphinxcontrib-napoleon"] +tests = ["pytest", "pytest-cov", "pytest-pep8"] + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] + +[[package]] +name = "pandoc" +version = "2.3" +description = "Pandoc Documents for Python" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pandoc-2.3.tar.gz", hash = "sha256:e772c2c6d871146894579828dbaf1efd538eb64fc7e71d4a6b3a11a18baef90d"}, +] + +[package.dependencies] +plumbum = "*" +ply = "*" + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +category = "dev" +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" +category = "dev" +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.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, + {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, +] + +[[package]] +name = "pbr" +version = "5.11.1" +description = "Python Build Reasonableness" +category = "dev" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, + {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, +] + +[[package]] +name = "pep8-naming" +version = "0.13.3" +description = "Check PEP-8 naming conventions, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pep8-naming-0.13.3.tar.gz", hash = "sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971"}, + {file = "pep8_naming-0.13.3-py3-none-any.whl", hash = "sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80"}, +] + +[package.dependencies] +flake8 = ">=5.0.0" + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" +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" +category = "dev" +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 = "9.4.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, + {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, + {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, + {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, + {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, + {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, + {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, + {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, + {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, + {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, + {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, + {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, + {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, + {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, + {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, + {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, + {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, + {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, + {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, + {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, + {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, + {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, + {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, + {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, + {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, + {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, + {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, + {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, + {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, + {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, + {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, + {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, + {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, + {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, + {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, + {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, + {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, + {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, + {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, + {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, + {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, + {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "platformdirs" +version = "3.0.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, + {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, +] + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "plumbum" +version = "1.8.1" +description = "Plumbum: shell combinators library" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "plumbum-1.8.1-py3-none-any.whl", hash = "sha256:07cf5f50bf739e91fb83ce304fc66b41dbd12db4d4546ff5266087dd9d148314"}, + {file = "plumbum-1.8.1.tar.gz", hash = "sha256:88a40fc69247d0cd585e21ca169b3820f46c484535102e16455d2202727bb37b"}, +] + +[package.dependencies] +pywin32 = {version = "*", markers = "platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""} + +[package.extras] +dev = ["paramiko", "psutil", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout"] +docs = ["sphinx (>=4.0.0)", "sphinx-rtd-theme (>=1.0.0)"] +ssh = ["paramiko"] + +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + +[[package]] +name = "pre-commit" +version = "3.1.1" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pre_commit-3.1.1-py2.py3-none-any.whl", hash = "sha256:b80254e60668e1dd1f5c03a1c9e0413941d61f568a57d745add265945f65bfe8"}, + {file = "pre_commit-3.1.1.tar.gz", hash = "sha256:d63e6537f9252d99f65755ae5b79c989b462d511ebbc481b561db6a297e1e865"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "primme" +version = "3.2.1" +description = "PRIMME wrapper for Python" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "primme-3.2.1.tar.gz", hash = "sha256:0d10daa32899eca8aaf9a3e1dcf7ce088acb17e04668b7317087d279e48db256"}, +] + +[package.dependencies] +future = "*" +numpy = "*" +scipy = "*" + +[[package]] +name = "prompt-toolkit" +version = "3.0.38" +description = "Library for building powerful interactive command lines in Python" +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.4" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, + {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, + {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, + {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, + {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, + {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, + {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, + {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" +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" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycodestyle" +version = "2.10.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, + {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pydata-sphinx-theme" +version = "0.8.1" +description = "Bootstrap-based Sphinx theme from the PyData community" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydata_sphinx_theme-0.8.1-py3-none-any.whl", hash = "sha256:af2c99cb0b43d95247b1563860942ba75d7f1596360594fce510caaf8c4fcc16"}, + {file = "pydata_sphinx_theme-0.8.1.tar.gz", hash = "sha256:96165702253917ece13dd895e23b96ee6dce422dcc144d560806067852fe1fed"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +docutils = "!=0.17.0" +packaging = "*" +sphinx = ">=3.5.4,<5" + +[package.extras] +coverage = ["codecov", "pydata-sphinx-theme[test]", "pytest-cov"] +dev = ["nox", "pre-commit", "pydata-sphinx-theme[coverage]", "pyyaml"] +doc = ["jupyter_sphinx", "myst-parser", "numpy", "numpydoc", "pandas", "plotly", "pytest", "pytest-regressions", "sphinx-sitemap", "sphinxext-rediraffe", "xarray"] +test = ["pydata-sphinx-theme[doc]", "pytest"] + +[[package]] +name = "pyflakes" +version = "3.0.1" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, + {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, +] + +[[package]] +name = "pygments" +version = "2.14.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = true +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"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pytest" +version = "7.2.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, + {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "4.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, + {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.10.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, + {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +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 = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-slugify" +version = "8.0.1" +description = "A Python slugify application that also handles Unicode" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python-slugify-8.0.1.tar.gz", hash = "sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27"}, + {file = "python_slugify-8.0.1-py2.py3-none-any.whl", hash = "sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395"}, +] + +[package.dependencies] +text-unidecode = ">=1.3" + +[package.extras] +unidecode = ["Unidecode (>=1.1.1)"] + +[[package]] +name = "pywin32" +version = "305" +description = "Python for Window Extensions" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, + {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, + {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, + {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, + {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, + {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, + {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, + {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, + {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, + {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, + {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, + {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, + {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, + {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "pyzmq" +version = "25.0.0" +description = "Python bindings for 0MQ" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, + {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, + {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, + {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, + {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, + {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, + {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, + {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, + {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, + {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, + {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, + {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, + {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, + {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, + {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, + {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, + {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, + {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, + {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, + {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, + {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, + {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, + {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "questionary" +version = "1.10.0" +description = "Python library to build pretty command line user prompts ⭐️" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, + {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, +] + +[package.dependencies] +prompt_toolkit = ">=2.0,<4.0" + +[package.extras] +docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] + +[[package]] +name = "quimb" +version = "1.4.0" +description = "Quantum information and many-body library." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "quimb-1.4.0-py3-none-any.whl", hash = "sha256:7e474a95d29f6e2aea9390b07561a848bef4a14171deb3f4f4229b1ce46d13b5"}, + {file = "quimb-1.4.0.tar.gz", hash = "sha256:bd5fef7c698bdfe0761c4c7a557ee241e1421d54d882565e04f26aaf63866248"}, +] + +[package.dependencies] +cytoolz = ">=0.8.0" +numba = ">=0.39" +numpy = ">=1.17" +psutil = ">=4.3.1" +scipy = ">=1.0.0" +tqdm = ">=4" + +[package.extras] +advanced-solvers = ["mpi4py", "petsc4py", "slepc4py"] +docs = ["autoray (>=0.2.0)", "doc2dash (>=2.4.1)", "ipython (>=7.0)", "nbsphinx (>=0.4)", "opt-einsum (>=3.2)", "sphinx (>=2.0)", "sphinx-book-theme (>=0.1)"] +random = ["randomgen (>=1.18)"] +tensor = ["autoray (>=0.2.0)", "diskcache (>=3.0)", "matplotlib (>=2.0)", "networkx (>=2.3)", "opt-einsum (>=3.2)"] +tests = ["coverage", "pytest", "pytest-cov"] + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruamel-yaml" +version = "0.17.21" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +category = "dev" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, + {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} + +[package.extras] +docs = ["ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.7" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, +] + +[[package]] +name = "safety" +version = "2.3.4" +description = "Checks installed dependencies for known vulnerabilities and licenses." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, + {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, +] + +[package.dependencies] +Click = ">=8.0.2" +dparse = ">=0.6.2" +packaging = ">=21.0" +requests = "*" +"ruamel.yaml" = ">=0.17.21" +setuptools = ">=19.3" + +[package.extras] +github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] + +[[package]] +name = "scipy" +version = "1.10.1" +description = "Fundamental algorithms for scientific computing in Python" +category = "main" +optional = false +python-versions = "<3.12,>=3.8" +files = [ + {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, + {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, + {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, + {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, + {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, + {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, + {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, +] + +[package.dependencies] +numpy = ">=1.19.5,<1.27.0" + +[package.extras] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "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 = "setuptools" +version = "67.4.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"}, + {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"}, +] + +[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 (<5)", "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-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "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"] + +[[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 = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "soupsieve" +version = "2.4" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, + {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, +] + +[[package]] +name = "sphinx" +version = "4.5.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] + +[[package]] +name = "sphinx-book-theme" +version = "0.3.3" +description = "A clean book theme for scientific explanations and documentation with Sphinx" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx_book_theme-0.3.3-py3-none-any.whl", hash = "sha256:9685959dbbb492af005165ef1b9229fdd5d5431580ac181578beae3b4d012d91"}, + {file = "sphinx_book_theme-0.3.3.tar.gz", hash = "sha256:0ec36208ff14c6d6bf8aee1f1f8268e0c6e2bfa3cef6e41143312b25275a6217"}, +] + +[package.dependencies] +pydata-sphinx-theme = ">=0.8.0,<0.9.0" +pyyaml = "*" +sphinx = ">=3,<5" + +[package.extras] +code-style = ["pre-commit (>=2.7.0,<2.8.0)"] +doc = ["ablog (>=0.10.13,<0.11.0)", "folium", "ipywidgets", "matplotlib", "myst-nb (>=0.13.2,<0.14.0)", "nbclient", "numpy", "numpydoc", "pandas", "plotly", "sphinx (>=4.0,<5.0)", "sphinx-copybutton", "sphinx-design", "sphinx-examples", "sphinx-tabs", "sphinx-thebe (>=0.1.1)", "sphinx-togglebutton (>=0.2.1)", "sphinxcontrib-bibtex (>=2.2,<3.0)", "sphinxcontrib-youtube", "sphinxext-opengraph"] +test = ["beautifulsoup4 (>=4.6.1,<5)", "coverage", "myst-nb (>=0.13.2,<0.14.0)", "pytest (>=6.0.1,<6.1.0)", "pytest-cov", "pytest-regressions (>=2.0.1,<2.1.0)", "sphinx_thebe"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "stack-data" +version = "0.6.2" +description = "Extract data from python stack frames and tracebacks for informative displays" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, + {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "stevedore" +version = "5.0.0" +description = "Manage dynamic plugins for Python applications" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.0.0-py3-none-any.whl", hash = "sha256:bd5a71ff5e5e5f5ea983880e4a1dd1bb47f8feebbb3d95b592398e2f02194771"}, + {file = "stevedore-5.0.0.tar.gz", hash = "sha256:2c428d2338976279e8eb2196f7a94910960d9f7ba2f41f3988511e95ca447021"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tbb" +version = "2021.8.0" +description = "Intel® oneAPI Threading Building Blocks (oneTBB)" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "tbb-2021.8.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:4b65e890524aa5e8ab92e68b83ec5e7160f57e6cd63622fe0af2e626d4010de4"}, + {file = "tbb-2021.8.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:6ffb8e6c43e03a3a70ec44e28b15e01833a6d336e900253ebf708905c7dc60aa"}, + {file = "tbb-2021.8.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:7d3fad573a032915838cff9fc224cb4aa9cdc6746b2d2c1b6039420379a8a2ef"}, +] + +[[package]] +name = "tensornetwork" +version = "0.4.6" +description = "A high level tensor network API for accelerated tensor network calculations." +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "tensornetwork-0.4.6-py3-none-any.whl", hash = "sha256:33f777ea6b9579d010806b3a1ef02f4f9ff5f0707f0ceb681591ee6eb7a01b03"}, + {file = "tensornetwork-0.4.6.tar.gz", hash = "sha256:c5af810bf6c2480e1b1f3d98ccf262c5ffb5c3c513be6611f4fdd2258bbc7704"}, +] + +[package.dependencies] +graphviz = ">=0.11.1" +h5py = ">=2.9.0" +numpy = ">=1.17" +opt-einsum = ">=2.3.0" +scipy = ">=1.1" + +[[package]] +name = "termcolor" +version = "2.2.0" +description = "ANSI color formatting for output in terminal" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "termcolor-2.2.0-py3-none-any.whl", hash = "sha256:91ddd848e7251200eac969846cbae2dacd7d71c2871e92733289e7e3666f48e7"}, + {file = "termcolor-2.2.0.tar.gz", hash = "sha256:dfc8ac3f350788f23b2947b3e6cfa5a53b630b612e6cd8965a015a776020b99a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +category = "dev" +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 = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +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 = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tomlkit" +version = "0.11.6" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] + +[[package]] +name = "tqdm" +version = "4.64.1" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, + {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "typer" +version = "0.7.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typer-0.7.0-py3-none-any.whl", hash = "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d"}, + {file = "typer-0.7.0.tar.gz", hash = "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.5.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +] + +[[package]] +name = "urllib3" +version = "1.26.14" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] + +[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)"] + +[[package]] +name = "virtualenv" +version = "20.20.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.20.0-py3-none-any.whl", hash = "sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45"}, + {file = "virtualenv-20.20.0.tar.gz", hash = "sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.4.1,<4" +platformdirs = ">=2.4,<4" + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "vulture" +version = "2.7" +description = "Find dead code" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "vulture-2.7-py2.py3-none-any.whl", hash = "sha256:bccc51064ed76db15a6b58277cea8885936af047f53d2655fb5de575e93d0bca"}, + {file = "vulture-2.7.tar.gz", hash = "sha256:67fb80a014ed9fdb599dd44bb96cb54311032a104106fc2e706ef7a6dad88032"}, +] + +[package.dependencies] +toml = "*" + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "dev" +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 = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[extras] +drawing = ["matplotlib", "networkx"] +mkl = ["mkl-devel"] + +[metadata] +lock-version = "2.0" +python-versions = ">=3.9, <3.11" +content-hash = "9bf484f64ad4a2486e4917622553149a27b29147286c4324ef20bfae7cfd011b" diff --git a/pyproject.toml b/pyproject.toml index b7e02e70..9e191c14 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,9 +2,10 @@ name = "tnpy" version = "0.1.1a3" description = "Tensor Network algorithms implemented in python." -authors = ["taolin "] +authors = ["Tan Tao-Lin "] homepage = "https://github.com/tanlin2013/tnpy" documentation = "https://tanlin2013.github.io/tnpy/" +license = "MIT" readme = "README.md" keywords = ["tensornetwork", "quantum-mechanics", "quantum-algorithms"] @@ -12,36 +13,84 @@ keywords = ["tensornetwork", "quantum-mechanics", "quantum-algorithms"] python = ">=3.9, <3.11" toml = "^0.10.2" tqdm = "^4.63.0" -numpy = ">=1.18, <1.23" +numpy = "^1.22" scipy = ">=1.1, <2.0" primme = "3.2.1" h5py = ">=3.6, <4.0" -graphviz = "0.20" +graphviz = "0.20.1" tensornetwork = "0.4.6" -autoray = ">=0.2, <0.4" -quimb = "1.3.0" -mkl-devel = { version = "2022.0.3", optional = true } +numba = "^0.56.4" +llvmlite = "^0.39.1" +autoray = "^0.6.0" +quimb = "1.4.0" +mkl-devel = { version = "2023.0.0", optional = true } matplotlib = { version ="^3.5.2", optional = true } -networkx = { version ="^2.8.4", optional = true } +networkx = { version ="^3.0", optional = true } [tool.poetry.extras] mkl = ["mkl-devel"] # (https://github.com/tanlin2013/tnpy/issues/5) drawing = ["matplotlib", "networkx"] -[tool.poetry.dev-dependencies] -pytest = "^7.1.1" -pytest-cov = "^3.0.0" -pytest-mock = "^3.6.1" -pylint = "^2.13.7" -flake8 = "^4.0.1" -mypy = "^0.942" +[tool.poetry.group.dev.dependencies] +pre-commit = "^3.0.0" +commitizen = "^2.35.0" +vulture = "^2.4" +bandit = "^1.7.4" +safety = "^2.3.4" +isort = "^5.11.0" +flake8-bugbear = "^23.1.14" +Flake8-pyproject = "^1.2.2" +black = "^23.1.0" +mypy = "^1.0.0" +ipython = "^8.5.0" +pytest = "^7.1.2" +pytest-cov = "^4.0.0" +pytest-mock = "^3.9.0" +pep8-naming = "^0.13.0" +cruft = "^2.12.0" + +[tool.poetry.group.docs] +optional = true + +[tool.poetry.group.docs.dependencies] sphinx = "^4.5.0" sphinx-book-theme = "^0.3.2" -m2r2 = "^0.3.2" -pandoc = "^2.1" nbsphinx = "^0.8.8" -pre-commit = "^2.19.0" +m2r2 = "^0.3.2" +pandoc = "^2.3" +#portray = "^1.3.0" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 100 + +[tool.isort] +profile = "black" + +[tool.flake8] +count = true +max-line-length = 100 +ignore = [ + "E203", + "W503", + "N803", + "N806" +] + +[tool.mypy] +ignore_missing_imports = true +strict_optional = false +plugins = ["numpy.typing.mypy_plugin"] + +[tool.coverage.report] +exclude_lines = ["pragma: no cover"] +omit = ["*tests*"] + +[tool.bandit] +skips = ["B101"] + +[tool.cruft] +skip = [] diff --git a/scripts/clean.sh b/scripts/clean.sh new file mode 100755 index 00000000..f3183516 --- /dev/null +++ b/scripts/clean.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euxo pipefail + +poetry run isort tnpy/ tests/ +poetry run black tnpy/ tests/ diff --git a/scripts/done.sh b/scripts/done.sh new file mode 100755 index 00000000..7a1becca --- /dev/null +++ b/scripts/done.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euxo pipefail + +./scripts/clean.sh +./scripts/test.sh diff --git a/scripts/lint.sh b/scripts/lint.sh new file mode 100755 index 00000000..af54a27b --- /dev/null +++ b/scripts/lint.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -euxo pipefail + +poetry run cruft check +poetry run safety check -i 39462 -i 40291 +poetry run bandit -c pyproject.toml -r tnpy/ +poetry run isort --check --diff tnpy/ tests/ +poetry run black --check tnpy/ tests/ +poetry run flake8 tnpy/ tests/ +poetry run mypy \ + --install-types \ + --non-interactive \ + tnpy/ +# https://mypy.readthedocs.io/en/stable/running_mypy.html#library-stubs-not-installed diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 00000000..b76fa767 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euxo pipefail + +./scripts/lint.sh +poetry run pytest -s --cov=tnpy/ --cov=tests --cov-report=term-missing ${@-} --cov-report html diff --git a/tests/model/test_random_heisenberg.py b/tests/model/test_random_heisenberg.py index 5afeb5e9..cfab2d36 100644 --- a/tests/model/test_random_heisenberg.py +++ b/tests/model/test_random_heisenberg.py @@ -1,29 +1,26 @@ -import pytest import numpy as np +import pytest from tnpy.model import RandomHeisenberg from tnpy.operators import FullHamiltonian class TestRandomHeisenberg: - - @pytest.fixture(scope='class') + @pytest.fixture(scope="class") def model(self): return RandomHeisenberg(n=6, h=0.5, seed=2022) - @pytest.fixture(scope='class') + @pytest.fixture(scope="class") def offset(self): return 0.5 - @pytest.fixture(scope='class') + @pytest.fixture(scope="class") def shifted_model(self, model, offset): - return RandomHeisenberg( - n=model.n, h=model.h, seed=model.seed, offset=offset - ) + return RandomHeisenberg(n=model.n, h=model.h, seed=model.seed, offset=offset) def test_offset(self, model, offset, shifted_model): np.testing.assert_allclose( - FullHamiltonian(model.mpo).matrix - offset * np.eye(2 ** model.n), + FullHamiltonian(model.mpo).matrix - offset * np.eye(2**model.n), FullHamiltonian(shifted_model.mpo).matrix, - atol=1e-12 + atol=1e-12, ) diff --git a/tests/model/test_total_sz.py b/tests/model/test_total_sz.py index 46d66723..90d6bfe7 100644 --- a/tests/model/test_total_sz.py +++ b/tests/model/test_total_sz.py @@ -1,6 +1,5 @@ -import pytest - import numpy as np +import pytest from tnpy.model import TotalSz from tnpy.operators import FullHamiltonian diff --git a/tests/test_exact_diagonalization.py b/tests/test_exact_diagonalization.py index 6b44a66b..3d317edc 100644 --- a/tests/test_exact_diagonalization.py +++ b/tests/test_exact_diagonalization.py @@ -1,9 +1,9 @@ -import pytest import numpy as np +import pytest import scipy.linalg as spla -from tnpy.model import RandomHeisenberg from tnpy.exact_diagonalization import ExactDiagonalization +from tnpy.model import RandomHeisenberg from tnpy.operators import FullHamiltonian diff --git a/tests/test_finite_dmrg.py b/tests/test_finite_dmrg.py index 67440102..75b3ee09 100644 --- a/tests/test_finite_dmrg.py +++ b/tests/test_finite_dmrg.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from tnpy.exact_diagonalization import ExactDiagonalization from tnpy.finite_dmrg import FiniteDMRG, ShiftInvertDMRG @@ -24,13 +24,13 @@ def test_run(self, ed, fdmrg): class TestShiftInvertDMRG: - @pytest.fixture(scope="class", params=[0.1, 0.2]) + @pytest.fixture(scope="class", params=[-0.1, 0.1, 0.2]) def offset(self, request) -> float: return request.param @pytest.fixture(scope="class") def model(self): - return RandomHeisenberg(n=8, h=0.5, seed=2021) + return RandomHeisenberg(n=10, h=10.5, seed=2022) @pytest.fixture(scope="class") def ed(self, model): @@ -38,9 +38,7 @@ def ed(self, model): @pytest.fixture(scope="function") def sidmrg(self, model, offset): - shifted_model = RandomHeisenberg( - n=model.n, h=model.h, seed=model.seed, offset=offset - ) + shifted_model = RandomHeisenberg(n=model.n, h=model.h, seed=model.seed, offset=offset) return ShiftInvertDMRG(shifted_model.mpo, bond_dim=2**6, offset=offset) @pytest.fixture(scope="class") @@ -61,9 +59,7 @@ def test_run(self, ed, sidmrg, nearest_eval): def test_restored_mps(self, sidmrg, nearest_evec): sidmrg.run(tol=1e-8) restored_vec = ( - sidmrg.restored_mps.contract() - .fuse({"k": sidmrg.restored_mps.outer_inds()}) - .data + sidmrg.restored_mps.contract().fuse({"k": sidmrg.restored_mps.outer_inds()}).data ) # Note: They can differ up to a global phase (+1 or -1) if not np.allclose(restored_vec, nearest_evec, atol=1e-6): diff --git a/tests/test_matrix_product_state.py b/tests/test_matrix_product_state.py index 00081314..90caa246 100644 --- a/tests/test_matrix_product_state.py +++ b/tests/test_matrix_product_state.py @@ -1,11 +1,11 @@ import os from contextlib import nullcontext as does_not_raise -import pytest import numpy as np +import pytest +from tnpy.matrix_product_state import Direction, Environment, MatrixProductState from tnpy.model import RandomHeisenberg -from tnpy.matrix_product_state import Direction, MatrixProductState, Environment class Helper: @@ -84,9 +84,7 @@ def test_load(self, filename, expectation): def test_split_tensor(self, site, mps): two_site_mps = mps[site] @ mps[site + 1] mps.split_tensor(site, direction=Direction.RIGHTWARD) - np.testing.assert_allclose( - two_site_mps.data, (mps[site] @ mps[site + 1]).data, atol=1e-12 - ) + np.testing.assert_allclose(two_site_mps.data, (mps[site] @ mps[site + 1]).data, atol=1e-12) assert mps[site].tags == {f"I{site}"} assert mps[site + 1].tags == {f"I{site + 1}"} @@ -95,9 +93,7 @@ class TestEnvironment: @pytest.fixture(scope="class") def env(self): model = RandomHeisenberg(n=6, h=0, penalty=100.0) - return Environment( - model.mpo, MatrixProductState.random(n=model.n, bond_dim=16, phys_dim=2) - ) + return Environment(model.mpo, MatrixProductState.random(n=model.n, bond_dim=16, phys_dim=2)) def test_left(self, env): print(env.mps) diff --git a/tests/test_operators.py b/tests/test_operators.py index f54bee82..6588d632 100644 --- a/tests/test_operators.py +++ b/tests/test_operators.py @@ -1,36 +1,23 @@ -import pytest import numpy as np +import pytest -from tnpy.operators import SpinOperators, FullHamiltonian from tnpy.model import XXZ, RandomHeisenberg +from tnpy.operators import FullHamiltonian, SpinOperators class TestSpinOperators: - def test_spin_half_ops(self): spin_half_ops = SpinOperators() np.testing.assert_array_equal( - np.array( - [[0, 1], - [1, 0]] - ), - spin_half_ops.Sp + spin_half_ops.Sm + np.array([[0, 1], [1, 0]]), spin_half_ops.Sp + spin_half_ops.Sm ) np.testing.assert_array_equal( - np.array( - [[0, -1j], - [1j, 0]] - ), - -1j * (spin_half_ops.Sp - spin_half_ops.Sm) + np.array([[0, -1j], [1j, 0]]), -1j * (spin_half_ops.Sp - spin_half_ops.Sm) ) class TestMatrixProductOperator: - - @pytest.mark.parametrize("model", [ - RandomHeisenberg(n=4, h=0), - RandomHeisenberg(n=4, h=0.5) - ]) + @pytest.mark.parametrize("model", [RandomHeisenberg(n=4, h=0), RandomHeisenberg(n=4, h=0.5)]) def test_square(self, model): bilayer_mpo = model.mpo.square() assert bilayer_mpo[0].shape == (25, 2, 2) @@ -38,74 +25,69 @@ def test_square(self, model): assert bilayer_mpo[2].shape == (25, 25, 2, 2) assert bilayer_mpo[3].shape == (25, 2, 2) ham = FullHamiltonian(model.mpo).matrix - np.testing.assert_allclose( - ham @ ham, - FullHamiltonian(bilayer_mpo).matrix, - atol=1e-12 - ) + np.testing.assert_allclose(ham @ ham, FullHamiltonian(bilayer_mpo).matrix, atol=1e-12) @pytest.mark.parametrize("n", [2, 4, 6]) @pytest.mark.parametrize("h", [0, 0.5, 1]) def test_multiply_scalar(self, n, h): mpo = RandomHeisenberg(n=n, h=h).mpo np.testing.assert_array_equal( - -1 * FullHamiltonian(mpo).matrix, - FullHamiltonian(-1 * mpo).matrix + -1 * FullHamiltonian(mpo).matrix, FullHamiltonian(-1 * mpo).matrix ) class TestFullHamiltonian: - - @pytest.fixture(scope='class', params=[ - { - "n": 2, - "ham": FullHamiltonian(RandomHeisenberg(n=2, h=0).mpo), - "data": np.array( - [[0.25, 0, 0, 0], - [0, -0.25, 0.5, 0], - [0, 0.5, -0.25, 0], - [0, 0, 0, 0.25]] - ) - }, - { - "n": 3, - "ham": FullHamiltonian(RandomHeisenberg(n=3, h=0).mpo), - "data": np.array( - [[0.5, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0.5, 0, 0, 0, 0, 0], - [0, 0.5, -0.5, 0, 0.5, 0, 0, 0], - [0, 0, 0, 0, 0, 0.5, 0, 0], - [0, 0, 0.5, 0, 0, 0, 0, 0], - [0, 0, 0, 0.5, 0, -0.5, 0.5, 0], - [0, 0, 0, 0, 0, 0.5, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0.5]] - ) - }, - { - "n": 2, - "ham": FullHamiltonian(XXZ(n=2, delta=0.5).mpo), - "data": np.array( - [[-0.125, 0, 0, 0], - [0, 0.125, -0.5, 0], - [0, -0.5, 0.125, 0], - [0, 0, 0, -0.125]] - ) - }, - { - "n": 3, - "ham": FullHamiltonian(XXZ(n=3, delta=0.5).mpo), - "data": np.array( - [[-0.25, 0, 0, 0, 0, 0, 0, 0], - [0, 0, -0.5, 0, 0, 0, 0, 0], - [0, -0.5, 0.25, 0, -0.5, 0, 0, 0], - [0, 0, 0, 0, 0, -0.5, 0, 0], - [0, 0, -0.5, 0, 0, 0, 0, 0], - [0, 0, 0, -0.5, 0, 0.25, -0.5, 0], - [0, 0, 0, 0, 0, -0.5, 0, 0], - [0, 0, 0, 0, 0, 0, 0, -0.25]] - ) - } - ]) + @pytest.fixture( + scope="class", + params=[ + { + "n": 2, + "ham": FullHamiltonian(RandomHeisenberg(n=2, h=0).mpo), + "data": np.array( + [[0.25, 0, 0, 0], [0, -0.25, 0.5, 0], [0, 0.5, -0.25, 0], [0, 0, 0, 0.25]] + ), + }, + { + "n": 3, + "ham": FullHamiltonian(RandomHeisenberg(n=3, h=0).mpo), + "data": np.array( + [ + [0.5, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.5, 0, 0, 0, 0, 0], + [0, 0.5, -0.5, 0, 0.5, 0, 0, 0], + [0, 0, 0, 0, 0, 0.5, 0, 0], + [0, 0, 0.5, 0, 0, 0, 0, 0], + [0, 0, 0, 0.5, 0, -0.5, 0.5, 0], + [0, 0, 0, 0, 0, 0.5, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.5], + ] + ), + }, + { + "n": 2, + "ham": FullHamiltonian(XXZ(n=2, delta=0.5).mpo), + "data": np.array( + [[-0.125, 0, 0, 0], [0, 0.125, -0.5, 0], [0, -0.5, 0.125, 0], [0, 0, 0, -0.125]] + ), + }, + { + "n": 3, + "ham": FullHamiltonian(XXZ(n=3, delta=0.5).mpo), + "data": np.array( + [ + [-0.25, 0, 0, 0, 0, 0, 0, 0], + [0, 0, -0.5, 0, 0, 0, 0, 0], + [0, -0.5, 0.25, 0, -0.5, 0, 0, 0], + [0, 0, 0, 0, 0, -0.5, 0, 0], + [0, 0, -0.5, 0, 0, 0, 0, 0], + [0, 0, 0, -0.5, 0, 0.25, -0.5, 0], + [0, 0, 0, 0, 0, -0.5, 0, 0], + [0, 0, 0, 0, 0, 0, 0, -0.25], + ] + ), + }, + ], + ) def model(self, request): return request.param @@ -113,7 +95,4 @@ def test_n_sites(self, model): assert model["ham"].n_sites == model["n"] def test_matrix(self, model): - np.testing.assert_array_equal( - model["ham"].matrix, - model["data"] - ) + np.testing.assert_array_equal(model["ham"].matrix, model["data"]) diff --git a/tests/test_tsdrg.py b/tests/test_tsdrg.py index 27bf2a1e..90be04e4 100644 --- a/tests/test_tsdrg.py +++ b/tests/test_tsdrg.py @@ -1,14 +1,15 @@ -import pytest import numpy as np +import pytest -from tnpy.model import RandomHeisenberg, TotalSz -from tnpy.operators import SpinOperators, FullHamiltonian from tnpy.exact_diagonalization import ExactDiagonalization +from tnpy.model import RandomHeisenberg, TotalSz +from tnpy.operators import FullHamiltonian, SpinOperators from tnpy.tsdrg import ( - TensorTree, - TreeTensorNetworkSDRG as tSDRG, HighEnergyTreeTensorNetworkSDRG, + ShiftInvertTreeTensorNetworkSDRG, + TensorTree, ) +from tnpy.tsdrg import TreeTensorNetworkSDRG as tSDRG class TestTensorTree: @@ -20,25 +21,19 @@ def tree(self): left_id=1, right_id=2, new_id=4, - data=ExactDiagonalization(RandomHeisenberg(n=2, h=0).mpo).evecs.reshape( - (2, 2, 4) - ), + data=ExactDiagonalization(RandomHeisenberg(n=2, h=0).mpo).evecs.reshape((2, 2, 4)), ) tree.fuse( left_id=0, right_id=4, new_id=5, - data=ExactDiagonalization(RandomHeisenberg(n=3, h=0).mpo).evecs.reshape( - (2, 4, 8) - ), + data=ExactDiagonalization(RandomHeisenberg(n=3, h=0).mpo).evecs.reshape((2, 4, 8)), ) tree.fuse( left_id=5, right_id=3, new_id=6, - data=ExactDiagonalization(RandomHeisenberg(n=4, h=0).mpo).evecs.reshape( - (8, 2, 16) - ), + data=ExactDiagonalization(RandomHeisenberg(n=4, h=0).mpo).evecs.reshape((8, 2, 16)), ) return tree @@ -103,11 +98,11 @@ def test_plot(self, tree): class TestTreeTensorNetworkSDRG: @pytest.fixture(scope="class") def model(self): - return RandomHeisenberg(n=8, h=10.0, penalty=0, s_target=0) + return RandomHeisenberg(n=4, h=0.1, penalty=0, s_target=0) @pytest.fixture(scope="function") def tsdrg(self, model): - return tSDRG(model.mpo, chi=2**6) + return tSDRG(model.mpo, chi=2**2) @pytest.fixture(scope="class") def ed(self, model): @@ -145,10 +140,11 @@ def test_spectrum_projector(self, static_tsdrg): np.testing.assert_array_equal(evecs.reshape((2, 2, 4)), projector) def test_run(self, ed, tsdrg): + import sys + + np.set_printoptions(threshold=sys.maxsize, linewidth=sys.maxsize) tsdrg.run() - np.testing.assert_allclose( - ed.evals[: tsdrg.chi], np.sort(tsdrg.evals), atol=1e-8 - ) + np.testing.assert_allclose(ed.evals[: tsdrg.chi], np.sort(tsdrg.evals), atol=1e-8) def test_measurements(self, ed, tsdrg): tsdrg.run() @@ -214,9 +210,7 @@ def test_reduced_density_matrix(self, site, level_idx, ed, tsdrg): np.testing.assert_allclose( ed.reduced_density_matrix(site=site, level_idx=level_idx), np.linalg.eigvalsh( - tsdrg.measurements.reduced_density_matrix( - site=site, level_idx=level_idx - ) + tsdrg.measurements.reduced_density_matrix(site=site, level_idx=level_idx) )[::-1], atol=1e-12, ) @@ -248,9 +242,7 @@ def test_two_point_function(self, site1, site2, level_idx, ed, tsdrg): Sp, Sm, Sz, I2, O2 = SpinOperators() np.testing.assert_allclose( ed.two_point_function(Sz, Sz, site1, site2, level_idx=level_idx), - tsdrg.measurements.two_point_function( - Sz, Sz, site1, site2, level_idx=level_idx - ), + tsdrg.measurements.two_point_function(Sz, Sz, site1, site2, level_idx=level_idx), atol=1e-12, ) @@ -302,3 +294,47 @@ def ed(self, model): def test_run(self, ed, tsdrg): tsdrg.run() np.testing.assert_allclose(ed.evals[-1], tsdrg.evals[-1], atol=1e-4) + + +class TestShiftInvertTreeTensorNetworkSDRG: + @pytest.fixture(scope="class", params=[0.0, 1.0, 2.0]) + def offset(self, request) -> float: + return request.param + + @pytest.fixture(scope="class") + def model(self): + return RandomHeisenberg(n=10, h=10.0, penalty=0, s_target=0, seed=2020) + + @pytest.fixture(scope="function") + def sitsdrg(self, model, offset): + shifted_model = RandomHeisenberg(n=model.n, h=model.h, seed=model.seed, offset=offset) + return ShiftInvertTreeTensorNetworkSDRG(shifted_model.mpo, chi=2**5, offset=offset) + + @pytest.fixture(scope="class") + def ed(self, model): + return ExactDiagonalization(model.mpo) + + @pytest.fixture(scope="class") + def nearest_idx(self, ed, offset): + return ed.evals[np.where(ed.evals < offset)].argmax() + + @pytest.fixture(scope="class") + def nearest_eval(self, ed, nearest_idx): + return ed.evals[nearest_idx] + + @pytest.fixture(scope="class") + def nearest_evec(self, ed, nearest_idx): + return ed.evecs[:, nearest_idx] + + def test_run(self, ed, sitsdrg, nearest_eval, model, offset): + import sys + + np.set_printoptions(threshold=sys.maxsize) + n_nearest_eval = ed.evals[np.argsort(np.abs(ed.evals - offset))] + print(np.sort(n_nearest_eval[:20])) + sitsdrg.run() + np.testing.assert_allclose(nearest_eval, sitsdrg.evals[-1], atol=1e-4) + + # def test_variance(self, model, sitsdrg): + # sitsdrg.run() + # print(sitsdrg.measurements.variance(model.mpo)[-1]) diff --git a/tnpy/__init__.py b/tnpy/__init__.py index f8f2181c..070f3504 100644 --- a/tnpy/__init__.py +++ b/tnpy/__init__.py @@ -1,14 +1,12 @@ import logging from importlib import metadata -from pathlib import Path -import toml # tomllib is coming out on python 3.11 as standard lib +# -- Version ----------------------------------------------------------------- - -# -- Version ---------------------- __version__ = metadata.version(__name__) -# -- Define logger and the associated formatter and handler ------------- +# -- Define logger and the associated formatter and handler ------------------ + formatter = logging.Formatter( "%(asctime)s [%(filename)s] %(levelname)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) @@ -20,13 +18,3 @@ logger = logging.getLogger("tnpy") logger.setLevel(logging.INFO) logger.addHandler(handler) - - -# -- Load configurations from toml file ---------------------- -class ConfigReader: - def __init__(self, file): - self.__dict__.update(**toml.load(file)) - - -with open(Path(__file__).absolute().parent / "config.toml", "r", encoding="utf-8") as f: - config = ConfigReader(f) diff --git a/tnpy/config.toml b/tnpy/config.toml deleted file mode 100644 index 40b8a3f5..00000000 --- a/tnpy/config.toml +++ /dev/null @@ -1,10 +0,0 @@ -[MatrixProductOperator] -phys_dim_on_bond = 0 - -[FullHamiltonian] -max_resource_dim = 4096 - -[FiniteDMRG] -exact_solver_dim = 200 -best_n_sweeps = 3 -max_sweep_dump_mps = true diff --git a/tnpy/exact_diagonalization.py b/tnpy/exact_diagonalization.py index 91fce713..11b20368 100644 --- a/tnpy/exact_diagonalization.py +++ b/tnpy/exact_diagonalization.py @@ -1,15 +1,15 @@ from itertools import permutations -from typing import Tuple, Sequence, List, Dict +from typing import Dict, List, Sequence, Tuple import numpy as np from tnpy import logger -from tnpy.operators import MatrixProductOperator, FullHamiltonian +from tnpy.operators import FullHamiltonian, MatrixProductOperator class ExactDiagonalization(FullHamiltonian): def __init__(self, mpo: MatrixProductOperator, proj: np.ndarray = None): - """ + r""" Perform the numerically exact diagonalization on the matrix, which is constructed through the given Matrix Product Operator (MPO). Calculations are taken in prompt on the initialization of this class. @@ -77,13 +77,9 @@ def reduced_density_matrix(self, site: int, level_idx: int = 0) -> np.ndarray: """ if not 0 <= site < self.n_sites - 1: - raise ValueError( - "Parameter `site` for bi-partition has to be within the system size." - ) + raise ValueError("Parameter `site` for bi-partition has to be within the system size.") if not 0 <= level_idx < len(self.evals): - raise ValueError( - "Parameter `level_idx` has to be lower than truncation dimension." - ) + raise ValueError("Parameter `level_idx` has to be lower than truncation dimension.") to_shape = ( (self.phys_dim ** (site + 1), -1) if site < self.n_sites // 2 @@ -131,9 +127,7 @@ def kron_operators(operators: Sequence[np.ndarray]) -> np.ndarray: opt = np.kron(opt, next_opt) return opt - def one_point_function( - self, operator: np.ndarray, site: int, level_idx: int = 0 - ) -> float: + def one_point_function(self, operator: np.ndarray, site: int, level_idx: int = 0) -> float: r""" Compute the expectation value :math:`\langle \hat{O}_i \rangle` of given local operator :math:`\hat{O}_i` on site :math:`i`. @@ -146,7 +140,8 @@ def one_point_function( Returns: """ - assert operator.shape == (self.phys_dim, self.phys_dim) + if operator.shape != (self.phys_dim, self.phys_dim): + raise ValueError(f"Operator shape mismatched with physical dims {self.phys_dim}.") opt_mat = self.kron_operators( [ np.eye(self.phys_dim**site), @@ -181,9 +176,13 @@ def two_point_function( Returns: """ - assert operator1.shape == (self.phys_dim, self.phys_dim) - assert operator2.shape == (self.phys_dim, self.phys_dim) - assert site1 != site2 + if operator1.shape != (self.phys_dim, self.phys_dim) or operator2.shape != ( + self.phys_dim, + self.phys_dim, + ): + raise ValueError(f"Operator shape mismatched with physical dims {self.phys_dim}.") + if site1 == site2: + raise ValueError("Two sites must not be the same site.") site1, site2 = sorted((site1, site2)) # TODO: operators aren't sorted accordingly opt_mat = self.kron_operators( @@ -219,9 +218,7 @@ def connected_two_point_function( """ return self.two_point_function( operator1, operator2, site1, site2, level_idx - ) - self.one_point_function( - operator1, site1, level_idx - ) * self.one_point_function( + ) - self.one_point_function(operator1, site1, level_idx) * self.one_point_function( operator2, site2, level_idx ) @@ -273,7 +270,6 @@ def spin_zero_projector(self, n: int): set(list(permutations(f"{'u' * (n // 2)}{'d' * (n // 2)}", n))) ) zero_charge_basis = [ - self.kron_product(list(map(self._basis.get, elem))) - for elem in spin_zero_permutations + self.kron_product(list(map(self._basis.get, elem))) for elem in spin_zero_permutations ] return np.hstack(tuple(map(np.transpose, zero_charge_basis))) diff --git a/tnpy/finite_dmrg.py b/tnpy/finite_dmrg.py index 276412dc..10d2822e 100644 --- a/tnpy/finite_dmrg.py +++ b/tnpy/finite_dmrg.py @@ -1,22 +1,22 @@ import time -from enum import Enum from datetime import timedelta -from itertools import cycle +from enum import Enum from functools import partial -from typing import Tuple, List +from itertools import cycle +from typing import List, Tuple import numpy as np from quimb.tensor import rand_uuid from tnpy import logger from tnpy.linalg import eigh, eigshmv -from tnpy.operators import MatrixProductOperator from tnpy.matrix_product_state import ( - MatrixProductState, - Environment, Direction, + Environment, + MatrixProductState, MatrixProductStateMeasurements, ) +from tnpy.operators import MatrixProductOperator class Metric(Enum): @@ -94,9 +94,7 @@ def phys_dim(self) -> int: def variance(self) -> float: return self._env.variance() - def one_site_solver( - self, site: int, tol: float = 1e-8, **kwargs - ) -> Tuple[float, np.ndarray]: + def one_site_solver(self, site: int, tol: float = 1e-8, **kwargs) -> Tuple[float, np.ndarray]: """ Args: @@ -110,9 +108,7 @@ def one_site_solver( v0 = self.mps[site].data.reshape(-1, 1) if v0.size < self._exact_solver_dim: return eigh(self._env.one_site_full_matrix(site)) # type: ignore - return eigshmv( - self._env.one_site_matvec(site), v0=v0, tol=tol, **kwargs - ) # type: ignore + return eigshmv(self._env.one_site_matvec(site), v0=v0, tol=tol, **kwargs) # type: ignore def two_site_solver(self, site: int, tol: float = 1e-8, **kwargs): return NotImplemented @@ -174,9 +170,7 @@ def sweep( self._env.update(site, direction=direction) return energy - def _converged( - self, n_sweep: int, tol: float, max_sweep: int, metric: Metric - ) -> bool: + def _converged(self, n_sweep: int, tol: float, max_sweep: int, metric: Metric) -> bool: """ Helper function for checking the convergence. @@ -191,9 +185,7 @@ def _converged( """ def stopping_criterion(gradient: float) -> bool: - logger.info( - f"Metric {metric.name} is lowered by {gradient:e} " f"in this sweep." - ) + logger.info(f"Metric {metric.name} is lowered by {gradient:e} " f"in this sweep.") if abs(gradient) < tol: logger.info(f"Reaching set tolerance {tol}, stop sweeping.") return True @@ -241,9 +233,7 @@ def run( A record of energies computed on each sweep. """ clock = [time.process_time()] - converged = partial( - self._converged, tol=tol, max_sweep=max_sweep, metric=metric - ) + converged = partial(self._converged, tol=tol, max_sweep=max_sweep, metric=metric) logger.info( f"Set tolerance = {tol} to metric {metric.name}," f" up to maximally {max_sweep} sweeps." @@ -348,9 +338,7 @@ def gen_array(site: int) -> np.ndarray: [gen_array(site) for site in range(self.n_sites)], shape="lpr" ) - def one_site_solver( - self, site: int, tol: float = 1e-8, **kwargs - ) -> Tuple[float, np.ndarray]: + def one_site_solver(self, site: int, tol: float = 1e-8, **kwargs) -> Tuple[float, np.ndarray]: v0 = self.mps[site].data.reshape(-1, 1) if v0.size < self._exact_solver_dim: return eigh( @@ -410,7 +398,6 @@ def measurements(self) -> MatrixProductStateMeasurements: raise RuntimeError("FiniteDMRG is probably not executed yet.") return MatrixProductStateMeasurements(self.restored_mps) - @property def variance(self) -> float: tn = ( self.restored_mps diff --git a/tnpy/finite_tdvp.py b/tnpy/finite_tdvp.py index 5f62fc5c..636a0ca3 100644 --- a/tnpy/finite_tdvp.py +++ b/tnpy/finite_tdvp.py @@ -92,11 +92,7 @@ def sweep(self, iterator, t_span): self._update_left_env(site + 1) self._update_left_norm(site + 1) if site < self.N - 1: - C = Node( - self._unit_solver(Evolve.BACKWARD, t_span, site).reshape( - r.shape - ) - ) + C = Node(self._unit_solver(Evolve.BACKWARD, t_span, site).reshape(r.shape)) Mp = self._mps.nodes[site + 1] C[1] ^ Mp[0] self._mps.nodes[site + 1] = C @ Mp @@ -106,11 +102,7 @@ def sweep(self, iterator, t_span): self._update_right_env(site - 1) self._update_right_norm(site - 1) if site > 0: - C = Node( - self._unit_solver(Evolve.BACKWARD, t_span, site - 1).reshape( - q.shape - ) - ) + C = Node(self._unit_solver(Evolve.BACKWARD, t_span, site - 1).reshape(q.shape)) Mp = self._mps.nodes[site - 1] Mp[2] ^ C[0] # @TODO: measure something here to check the status of mps diff --git a/tnpy/linalg.py b/tnpy/linalg.py index bd265681..07d125a0 100644 --- a/tnpy/linalg.py +++ b/tnpy/linalg.py @@ -1,7 +1,7 @@ from typing import Tuple -import primme import numpy as np +import primme import scipy.linalg as spla from scipy.sparse.linalg import LinearOperator @@ -83,7 +83,5 @@ def eigshmv( Returns: """ - evals, evecs = primme.eigsh( - linear_operator, v0=v0, k=k, which=which, tol=tol, **kwargs - ) + evals, evecs = primme.eigsh(linear_operator, v0=v0, k=k, which=which, tol=tol, **kwargs) return (evals[0], evecs) if k == 1 else (evals, evecs) diff --git a/tnpy/matrix_product_state.py b/tnpy/matrix_product_state.py index 8ff38c12..e12fe940 100644 --- a/tnpy/matrix_product_state.py +++ b/tnpy/matrix_product_state.py @@ -12,7 +12,7 @@ from tqdm import tqdm from tnpy import logger -from tnpy.linalg import svd, LinearOperator +from tnpy.linalg import LinearOperator, svd from tnpy.operators import MatrixProductOperator @@ -90,9 +90,7 @@ def permute_arrays(self, shape: str = "lrp"): inds = [inds[s] for s in shape if s in inds] # type: ignore self[i].transpose_(*inds) - def conj( - self, mangle_inner: bool = False, mangle_outer: bool = False - ) -> MatrixProductState: + def conj(self, mangle_inner: bool = False, mangle_outer: bool = False) -> MatrixProductState: """ Create a conjugated copy of this :class:`~MatrixProductState` instance. @@ -109,9 +107,7 @@ def conj( """ mps = super().conj() if mangle_inner: - mps.reindex( - {ind: qtn.rand_uuid() for ind in mps.inner_inds()}, inplace=True - ) + mps.reindex({ind: qtn.rand_uuid() for ind in mps.inner_inds()}, inplace=True) if mangle_outer: mps.reindex( {ind: re.sub(r"^k(\d+)", r"b\1", ind) for ind in mps.outer_inds()}, @@ -132,9 +128,7 @@ def save(self, filename: str): """ # @TODO: solve ordering issue - tensor_datasets = { - self.site_tag(site): self[site].data for site in range(self.nsites) - } + tensor_datasets = {self.site_tag(site): self[site].data for site in range(self.nsites)} filepath = Path(filename) extension = filepath.suffix if extension == ".hdf5": @@ -174,9 +168,7 @@ def load(cls, filename: str) -> MatrixProductState: raise ValueError(f"File extension {extension} is not supported.") @classmethod - def random( - cls, n: int, bond_dim: int, phys_dim: int, **kwargs - ) -> MatrixProductState: + def random(cls, n: int, bond_dim: int, phys_dim: int, **kwargs) -> MatrixProductState: """ Create a randomly initialized :class:`~MatrixProductState`. @@ -188,7 +180,7 @@ def random( Returns: """ - rand_mps = qtn.MPS_rand_state(n=n, bond_dim=bond_dim, phys_dim=phys_dim) + rand_mps = qtn.MPS_rand_state(L=n, bond_dim=bond_dim, phys_dim=phys_dim) rand_mps.compress() return cls([tensor.data for tensor in rand_mps], **kwargs) @@ -254,9 +246,7 @@ def __init__(self, mpo: MatrixProductOperator, mps: MatrixProductState): self._right: Dict[int, qtn.Tensor] = {} for site in tqdm(range(1, self.n_sites), desc="Initializing left environments"): self.update_left(site) - for site in tqdm( - range(self.n_sites - 2, -1, -1), desc="Initializing right environments" - ): + for site in tqdm(range(self.n_sites - 2, -1, -1), desc="Initializing right environments"): self.update_right(site) def close(self): @@ -447,9 +437,7 @@ def matvec(x: np.ndarray) -> np.ndarray: ] return tn.contract(output_inds=output_inds).data.reshape(-1, 1) - return LinearOperator( - shape=(self.mps[site].size, self.mps[site].size), matvec=matvec - ) + return LinearOperator(shape=(self.mps[site].size, self.mps[site].size), matvec=matvec) class MatrixProductStateMeasurements: diff --git a/tnpy/model/__init__.py b/tnpy/model/__init__.py index ffba442f..db8a97a7 100644 --- a/tnpy/model/__init__.py +++ b/tnpy/model/__init__.py @@ -1,8 +1,17 @@ +from tnpy.model.dimer_xxz import DimerXXZ from tnpy.model.model_1d import Model1D +from tnpy.model.random_heisenberg import RandomHeisenberg +from tnpy.model.thirring import Thirring from tnpy.model.total_sz import TotalSz +from tnpy.model.transverse_ising import TransverseIsing from tnpy.model.xxz import XXZ -from tnpy.model.thirring import Thirring -from tnpy.model.random_heisenberg import RandomHeisenberg -from tnpy.model.dimer_xxz import DimerXXZ -__all__ = ["Model1D", "TotalSz", "XXZ", "Thirring", "RandomHeisenberg", "DimerXXZ"] +__all__ = [ + "Model1D", + "TotalSz", + "XXZ", + "Thirring", + "RandomHeisenberg", + "DimerXXZ", + "TransverseIsing", +] diff --git a/tnpy/model/dimer_xxz.py b/tnpy/model/dimer_xxz.py index 3723fb06..b0ed5e8c 100644 --- a/tnpy/model/dimer_xxz.py +++ b/tnpy/model/dimer_xxz.py @@ -1,8 +1,8 @@ import numpy as np -from tnpy.operators import SpinOperators from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors, minors_if_no_penalty +from tnpy.operators import SpinOperators class DimerXXZ(Model1D): diff --git a/tnpy/model/model_1d.py b/tnpy/model/model_1d.py index 2dd3b666..f6c40b57 100644 --- a/tnpy/model/model_1d.py +++ b/tnpy/model/model_1d.py @@ -1,5 +1,7 @@ import abc + import numpy as np + from tnpy.operators import MatrixProductOperator diff --git a/tnpy/model/random_heisenberg.py b/tnpy/model/random_heisenberg.py index 1be3929f..77906957 100644 --- a/tnpy/model/random_heisenberg.py +++ b/tnpy/model/random_heisenberg.py @@ -1,8 +1,8 @@ import numpy as np -from tnpy.operators import SpinOperators from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors, minors_if_no_penalty +from tnpy.operators import SpinOperators class RandomHeisenberg(Model1D): @@ -86,9 +86,7 @@ def trial_id(self) -> str | None: def _elem(self, site: int) -> np.ndarray: Sp, Sm, Sz, I2, O2 = SpinOperators() - alpha = ( - self.penalty * (0.25 + self.s_target**2 / self.n) - self.offset / self.n - ) + alpha = self.penalty * (0.25 + self.s_target**2 / self.n) - self.offset / self.n beta = self._random_sequence[site] - 2.0 * self.penalty * self.s_target return np.array( diff --git a/tnpy/model/thirring.py b/tnpy/model/thirring.py index 81b2cc37..a7fca30a 100644 --- a/tnpy/model/thirring.py +++ b/tnpy/model/thirring.py @@ -1,14 +1,12 @@ import numpy as np -from tnpy.operators import SpinOperators from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors, minors_if_no_penalty +from tnpy.operators import SpinOperators class Thirring(Model1D): - def __init__( - self, n: int, delta: float, ma: float, penalty: float, s_target: int - ) -> None: + def __init__(self, n: int, delta: float, ma: float, penalty: float, s_target: int) -> None: r""" The Hamiltonian @@ -44,9 +42,7 @@ def __init__( def _elem(self, site: int) -> np.ndarray: Sp, Sm, Sz, I2, O2 = SpinOperators() - beta = ( - self.delta + ((-1.0) ** site * self.ma) - 2.0 * self.penalty * self.s_target - ) + beta = self.delta + ((-1.0) ** site * self.ma) - 2.0 * self.penalty * self.s_target gamma = self.penalty * (0.25 + self.s_target**2 / self.n) + 0.25 * self.delta return np.array( diff --git a/tnpy/model/total_sz.py b/tnpy/model/total_sz.py index eb9079f1..d72a6263 100644 --- a/tnpy/model/total_sz.py +++ b/tnpy/model/total_sz.py @@ -1,8 +1,8 @@ import numpy as np -from tnpy.operators import SpinOperators, MatrixProductOperator from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors +from tnpy.operators import MatrixProductOperator, SpinOperators class TotalSz(Model1D): @@ -45,7 +45,8 @@ def subsystem_mpo(self, partition_site: int) -> MatrixProductOperator: Phys. Rev. B 82, 012405 (2010). `_ """ - assert 0 <= partition_site < self.n + if not 0 <= partition_site < self.n: + raise ValueError("Partition site must be in between 0 and the system size n.") return MatrixProductOperator( [ self._elem(site) if site <= partition_site else self._rest_elem(site) diff --git a/tnpy/model/transverse_ising.py b/tnpy/model/transverse_ising.py index 460e40ee..bc296acd 100644 --- a/tnpy/model/transverse_ising.py +++ b/tnpy/model/transverse_ising.py @@ -1,8 +1,8 @@ import numpy as np -from tnpy.operators import SpinOperators from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors +from tnpy.operators import SpinOperators class TransverseIsing(Model1D): diff --git a/tnpy/model/utils.py b/tnpy/model/utils.py index e192eba2..26b86932 100644 --- a/tnpy/model/utils.py +++ b/tnpy/model/utils.py @@ -1,5 +1,6 @@ from functools import wraps from typing import Callable + import numpy as np diff --git a/tnpy/model/xxz.py b/tnpy/model/xxz.py index 36a86203..625cb045 100644 --- a/tnpy/model/xxz.py +++ b/tnpy/model/xxz.py @@ -1,8 +1,8 @@ import numpy as np -from tnpy.operators import SpinOperators from tnpy.model.model_1d import Model1D from tnpy.model.utils import boundary_vectors +from tnpy.operators import SpinOperators class XXZ(Model1D): diff --git a/tnpy/operators.py b/tnpy/operators.py index c22f3cfb..17ef4cbe 100644 --- a/tnpy/operators.py +++ b/tnpy/operators.py @@ -1,7 +1,7 @@ from __future__ import annotations +from dataclasses import InitVar, astuple, dataclass, field from itertools import groupby -from dataclasses import dataclass, InitVar, field, astuple import numpy as np import quimb.tensor as qtn @@ -73,12 +73,10 @@ def all_equal(iterable): g = groupby(iterable) return next(g, True) and not next(g, False) - assert all_equal( - [ - super(MatrixProductOperator, self).phys_dim(site) - for site in range(self.n_sites) - ] - ) + if not all_equal( + [super(MatrixProductOperator, self).phys_dim(site) for site in range(self.n_sites)] + ): + raise ValueError("All MPO tensors are assumed to have same physical dims.") @property def n_sites(self) -> int: @@ -96,12 +94,8 @@ def square(self) -> MatrixProductOperator: Returns: squared_mpo: """ - first_layer = self.reindex( - {f"b{site}": f"dummy{site}" for site in range(self.nsites)} - ) - second_layer = self.reindex( - {f"k{site}": f"dummy{site}" for site in range(self.nsites)} - ) + first_layer = self.reindex({f"b{site}": f"dummy{site}" for site in range(self.nsites)}) + second_layer = self.reindex({f"k{site}": f"dummy{site}" for site in range(self.nsites)}) second_layer.reindex( {ind: qtn.rand_uuid() for ind in second_layer.inner_inds()}, inplace=True ) @@ -119,9 +113,7 @@ def _fuse_bilayer(site: int) -> qtn.Tensor: } ) - return MatrixProductOperator( - [_fuse_bilayer(site).data for site in range(self.nsites)] - ) + return MatrixProductOperator([_fuse_bilayer(site).data for site in range(self.nsites)]) class FullHamiltonian: @@ -147,8 +139,7 @@ def __init__(self, mpo: MatrixProductOperator): if self.phys_dim**self.n_sites > 2**12: raise ResourceWarning( - f"Requesting more than {self.n_sites} sites " - f"with physical dim {self.phys_dim}." + f"Requesting more than {self.n_sites} sites " f"with physical dim {self.phys_dim}." ) self._matrix = ( diff --git a/tnpy/tsdrg.py b/tnpy/tsdrg.py index 8b1b0886..d322987e 100644 --- a/tnpy/tsdrg.py +++ b/tnpy/tsdrg.py @@ -4,11 +4,11 @@ from dataclasses import dataclass, field from functools import wraps from itertools import count, islice -from typing import Union, List, Dict, Iterator, Callable, Sequence, Tuple +from typing import Callable, Dict, Iterator, List, Sequence, Tuple, Union import numpy as np -import scipy.linalg as spl import quimb.tensor as qtn +import scipy.linalg as spl from graphviz import Digraph from tnpy import logger @@ -16,9 +16,7 @@ class Node(qtn.Tensor): - def __init__( - self, node_id: int, left: Node = None, right: Node = None, *args, **kwargs - ): + def __init__(self, node_id: int, left: Node = None, right: Node = None, *args, **kwargs): """ The node of binary tree, while data structure is inherited from :class:`quimb.Tensor`. @@ -88,9 +86,7 @@ def __init__(self, mpo: MatrixProductOperator): """ self._root_id: int | None = None self._tree = { - site: Node( - node_id=site, data=tensor.data, inds=tensor.inds, tags=tensor.tags - ) + site: Node(node_id=site, data=tensor.data, inds=tensor.inds, tags=tensor.tags) for site, tensor in enumerate(mpo) } self._n_leaves = mpo.nsites @@ -380,12 +376,10 @@ def common_ancestor( path1 = self.find_path(node_id1, return_itself=True) path2 = self.find_path(node_id2, return_itself=True) try: - first_unmatched = next( - idx for idx, (x, y) in enumerate(zip(path1, path2)) if x != y - ) + first_unmatched = next(idx for idx, (x, y) in enumerate(zip(path1, path2)) if x != y) common_path = path1[:first_unmatched] except StopIteration: - assert path1 == path2 + assert path1 == path2 # nosec: B101 common_path = path1[:-1] return common_path if not lowest else common_path[-1] @@ -425,9 +419,7 @@ def find_child(node: Node): graph = Digraph() graph.node("head", style="invis") graph.edge("head", f"{self.root.node_id}", headport="n", arrowhead="inv") - graph.node( - f"{self.root.node_id}", shape="triangle", rank="max", style="rounded" - ) + graph.node(f"{self.root.node_id}", shape="triangle", rank="max", style="rounded") find_child(self.root) # for constraining mpo inside an invisible box with graph.subgraph(name="cluster_0") as sg: @@ -590,6 +582,10 @@ def block_eigen_solver(self, locus: int) -> Tuple[np.ndarray, np.ndarray]: """ matrix = self.block_hamiltonian(locus) evals, evecs = np.linalg.eigh(matrix) + print(locus) + print(matrix) + print(evals) + print(evecs) if matrix.shape[0] > self.chi: evals = evals[: self.chi] evecs = evecs[:, : self.chi] @@ -695,7 +691,7 @@ def run(self): if len(self._fused_mpo_cache) == 1: logger.info("Reaching the root in tree.") logger.info(f"Obtain ground state energies, {repr(self.evals)}.") - assert step == self.n_sites - 1, "step is out of range." + assert step == self.n_sites - 1, "step is out of range." # nosec: B101 break self._gap_cache.update(max_gapped_bond) @@ -781,9 +777,7 @@ def sandwich(self, mpo: MatrixProductOperator = None) -> qtn.Tensor: ) return self.loop_simplify(bra, ket, mpo) - def expectation_value( - self, mpo: MatrixProductOperator, tol: float = 1e-12 - ) -> np.ndarray: + def expectation_value(self, mpo: MatrixProductOperator, tol: float = 1e-12) -> np.ndarray: """ Compute the expectation value for given ``mpo``. @@ -819,9 +813,7 @@ def _min_surface(self, bipartite_site: int) -> Tuple[int, Dict, Dict]: ``ket_inds_map`` and ``bra_inds_map`` are each a dictionary of indices that maps the original indices of LCA nodes into the physical bonds. """ - min_side = ( - 0 if (bipartite_site + 1) / (self.tree.n_leaves - bipartite_site) < 1 else 1 - ) + min_side = 0 if (bipartite_site + 1) / (self.tree.n_leaves - bipartite_site) < 1 else 1 iterator = ( range(bipartite_site + 1) if min_side == 0 @@ -848,13 +840,9 @@ def reduced_density_matrix(self, site: int, level_idx: int) -> np.ndarray: """ if not 0 <= site < self.tree.n_leaves - 1: - raise ValueError( - "Parameter `site` for bi-partition has to be within the system size." - ) + raise ValueError("Parameter `site` for bi-partition has to be within the system size.") if not 0 <= level_idx < self.tree.root.shape[2]: - raise ValueError( - "Parameter `level_idx` has to be lower than truncation dimension." - ) + raise ValueError("Parameter `level_idx` has to be lower than truncation dimension.") min_side, on_min_ket_surface, on_min_bra_surface = self._min_surface(site) to_site = site + 1 if min_side == 0 else site node_ids = self.tree.find_path(to_site) @@ -886,13 +874,9 @@ def reduced_density_matrix(self, site: int, level_idx: int) -> np.ndarray: ) ] ) - return net.to_dense( - [*on_min_ket_surface.values()], [*on_min_bra_surface.values()] - ) + return net.to_dense([*on_min_ket_surface.values()], [*on_min_bra_surface.values()]) - def entanglement_entropy( - self, site: int, level_idx: int, nan_to_num: bool = False - ) -> float: + def entanglement_entropy(self, site: int, level_idx: int, nan_to_num: bool = False) -> float: """ Compute the von Neumann entropy on the cutting ``site``. @@ -908,9 +892,7 @@ def entanglement_entropy( entropy = -1 * rho @ np.log(rho) return np.nan_to_num(entropy) if nan_to_num else entropy - def one_point_function( - self, operator: np.ndarray, site: int, level_idx: int - ) -> float: + def one_point_function(self, operator: np.ndarray, site: int, level_idx: int) -> float: r""" Compute the expectation value :math:`\langle \hat{O}_i \rangle` of given local operator :math:`\hat{O}_i` on site :math:`i`. @@ -969,7 +951,8 @@ def two_point_function( Returns: """ - assert site1 != site2 + if site1 == site2: + raise ValueError("Two sites must not be the same site.") site1, site2 = sorted((site1, site2)) # TODO: operators aren't sorted accordingly node_ids = list(set(self.tree.find_path(site1) + self.tree.find_path(site2))) @@ -1016,9 +999,7 @@ def connected_two_point_function( """ return self.two_point_function( operator1, operator2, site1, site2, level_idx - ) - self.one_point_function( - operator1, site1, level_idx - ) * self.one_point_function( + ) - self.one_point_function(operator1, site1, level_idx) * self.one_point_function( operator2, site2, level_idx ) @@ -1087,31 +1068,22 @@ def truncation_gap(self, evals: np.ndarray) -> float: class ShiftInvertTreeTensorNetworkSDRG(TreeTensorNetworkSDRG): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, mpo: MatrixProductOperator, chi: int, offset: float): + self._offset = offset + super().__init__(mpo, chi=chi) + + @property + def offset(self) -> float: + return self._offset def block_eigen_solver(self, locus: int) -> Tuple[np.ndarray, np.ndarray]: matrix = self.block_hamiltonian(locus) evals, evecs = spl.eigh(matrix, b=matrix @ matrix) if matrix.shape[0] > self.chi: - logger.info( - f"Truncating evecs with shape {evecs.shape} to " - f"({evecs.shape[0]}, {self.chi})." - ) - d = self.chi // 2 - evals = np.hstack((evals[:d], evals[-d:])) - evecs = np.hstack((evecs[:, :d], evecs[:, -d:])) - idx = np.argsort(np.reciprocal(evals)) - evals = np.reciprocal(evals)[idx] + evals = evals[: self.chi] + evecs = evecs[:, : self.chi] + evals = np.reciprocal(evals) + self.offset + idx = np.argsort(evals) + evals = evals[idx] evecs = matrix @ evecs[:, idx] - # res = np.array([ - # np.linalg.norm(matrix @ evecs[:, i] - evals[i] * evecs[:, i]) - # for i in range(len(evals)) - # ]) - # logger.info(f"evals {evals}") - # rho = np.array( - # [evecs.T[i, :] @ matrix @ evecs[:, i] for i in range(len(evals))] - # ) - # logger.info(f"rho {rho}") - # logger.info(f"residual {res}") return evals, evecs